web-dev-qa-db-ja.com

Perl vs Ksh Unixデータベース管理用

これはやや主観的な質問だと思いますが、コミュニティに助言を求めています。

私たちの会社はDBAを持つのはかなり新しいです。以前はIBMのiSeriesサーバーでDB2 for iを使用していたため、OSがすべてを管理してくれたため、DBA(少なくとも運用上)は実際には必要ありませんでした。ここ数年のうちに、AIX上のDB2 LUWに移行し始めました。したがって、DBAの必要性が生まれました。私たち3人は、開発者からDBA(そのうちの1人)に転職することに興味を持っていました。

私たちはAIXを使用しているため、デフォルトでは、データベース管理機能(作成、デプロイメント、操作など)のスクリプト言語としてkshを使用しました。 kshは非常に強力であることがわかりましたが、実行する必要がある機能のいくつかはかなり複雑になっています。この例は nixおよびLinux StackExchangeでの私の質問 です。

その質問、および他のDB2管理者によるブログを読んだことに基づいて、kshよりもPerlが管理スクリプトに適しているという一般的な提案がありました。

Unix/Linuxフォーラムはそういうことについて自分の考えを持っていると思いますが、データベース管理の観点からこれに取り組みたいと思います。

DBMSに関係なく、Unix/Linuxプラットフォームでの管理に適しているスクリプト言語はどれですか。 Perl? Ksh? (またはおそらく他?) DBAとしてスクリプト言語を使用する上でどのような長所と短所がありましたか。また、使用した言語を選んだ理由は何ですか。

私が欲しくないのは、「私の言語はあなたの言語よりも優れている」という非常に主観的な炎の戦争です。私が開発コミュニティで言っていたようなもの、たとえばJava対Rubyなど)データベース管理者の。

5
Chris Aldrich

あなたの投稿の終わりは本当に重要なビットです:

データベース管理者のニーズに最適なものに関する情報。

それでは始めましょう。

DBAとしてのニーズは何ですか?一般的に、システムレベルの保守とデータベースレベルの保守の2つの操作領域があります(すべてのアクションは、パフォーマンスを向上させるためにシステムを保守するだけです...見てください。したがって、考慮すべき2つの領域があります。

ksh- Korn Shell は、サーバーを制御するために使用される古いUnix操作シェルの1つです。 kshの目的はサーバーを管理し、従来のBourne Shell(ほとんどの人がよく知っているBourne Again Shellではなく、これは古いヴィンテージです)が許可するすべてのことを許可することですが、いくつかの違いがあります(このShell算術や配列などのサポートが改善され、いくつかの点でプログラミングが容易になりました)。これはAIXのデフォルトのシェルです。

Perl- Perl は、高水準の汎用プログラミング言語です。シェルの上で実行するように設計されており、主にレポートを念頭に置いて設計されました。シェルスクリプティングとCの機能に加えて、以前のすべてよりも優れたものにするための正規表現テクノロジが組み合わされています。シェル機能とレポート生成速度の組み合わせ(プログラミング言語)のため、システム管理が容易になるため、Perlのような世界中の管理者のロット。 Perlスクリプトはシェルスクリプトと同じように簡単に実行できます。Unixの世界では、最初の行にスクリプトを実行する内容を示す規則があります(おなじみのハッシュバング行)。したがって、Perlスクリプトの実行は、シェルスクリプトの実行と同じくらい簡単です。

では、違いは、本格的なプログラミング言語が必要か、それとも基本的なシェルスクリプトが必要かということです。答えはになります。どちらも非常に役立つので、必要なものを提供するものを使用してください。統計が必要な場合、それを示すことは不可能です。私たちはそれぞれ独自のスタイルを持っています。内部で何かに同意し、それを呼び出すだけです(標準を設定する場合は、Perlに追加機能を追加してください。非現実的な標準を設定するため、手に取りたくありません。Perlもより拡張可能です)将来は)。この場合、2つか3つの言語に制限する方が良いでしょう。


最初に、システムレベルとデータベースレベルの2つのオプションがあることを述べました。

目的が主にシステムレベルの場合は、ここですべての質問に回答しました(ニーズに合ったものを使用してください)。データベースへのプログラミングも必要な場合は、Perlで標準化するか、コマンドライン構文に慣れる必要があります。Perlには、地球上の考えられるすべてのデータベースのモジュールがあり、存在しない場合でも、書きます(例:DBI-> DBD:DB2-> DB2クライアント)。


余談ですが、私はMicrosoft SQL ServerとC#を使用しているため、Windowsの世界に住んでおり、DOSバッチファイルではなくPowerShellを使用しています。 PowerShellは多くの点でPerlに似ており、DOSバッチプログラミングよりもはるかに柔軟性があります(ただし、世界中の多くの管理者がまだ古いDOSスクリプトを使用してシステムを管理しています)。 DOSバッチシステムでは配列、ループ、変数、その他すべてが可能ですが、シェルスクリプトの代わりにプログラミング言語でプログラミングする方がはるかに簡単なので、生産性を大幅に向上させることができます。

結局のところ、本当の問題は、スクリプト環境でどのような機能が必要かということであり、それをサポートすることはできません。しかし、私は常に「これが箱に同梱されているもの」よりも、より明確で、保守性と拡張性を選ぶでしょう。

6
jcolebrand

kshまたはbashを使用すると、SQL * Plusでアイテムをスクリプト化できます。これにより、非常に複雑な処理を実行できます。ただし、シェルスクリプトは少し「書き込み専用」になる傾向があり、shとその派生物は、複雑なプログラムロジックの開発にはあまり適していません。自動化されたタスクを実行するためにそれらは大丈夫です。複雑なクライアント側のデータ操作の場合、あまり良くありません(sed/awkにもかかわらず)。

Perlには、CPANを通じて利用可能なDBD:OracleなどのさまざまなOracleライブラリがあり、タイプシステムは「テキストの行」よりも少し洗練されているため、クライアント側の複雑な処理を伴う作業にはやや優れています。これに非常に適した別のオプションは、pythonおよびcx_Oracleです。