0

PL/SQL パッケージ OS_COMMAND (それ自体は Java を使用) を使用してシェル コマンドを実行しています。彼らの戻りコードを観察できます。

Windows で操作しているか、他のオペレーティング システムで操作しているかを確認したいと考えています。

私はさまざまなアプローチを思いつきました:

  • 私の最初のアイデア: 特定の Windows コマンドを実行し (常に成功するはずです)、リターン コードを確認します。0 は Windows を意味し、それ以外は他の OS を意味します。
  • Java ストアド プロシージャの使用
  • たとえば、データベース情報の使用
    • SELECT platform_id, platform_name FROM v$database
    • SELECT dbms_utility.port_string FROM DUAL
    • SELECT NAME FROM v$dbfileフォーマットを確認してください

どれが「最も安全」だと思いますか? 他のアプローチを使用していますか?メリット/デメリットは?

Java ストアド プロシージャを避けたいのですが、データベース情報を解釈する方法が正確にはわかりません (Windows を体系的にチェックする方法: 'WIN' または 'Windows' を含む結果、または ...?)。特定の Windows コマンドで確認する場合、どのコマンドを使用すればよいですか?

どんな方向でもアドバイスをいただければ幸いです。

4

1 に答える 1

1

やや遅い応答ですが、とにかくここに私の 2 セントがあります。

「環境」間の不要な呼び出しを避けるために、データベース環境から直接情報を取得するのが最善のように思われることに同意します。したがって、言及された3つのオプションに直接つながります。

  1. v$database: 情報に頼ることができます。その観点から、これはかなり「安全な」ソリューションのようです。マイナス面としては、これが機能するためには、基になるテーブルに対する選択権限が少なくとも必要であり、特定の環境では問題になる可能性があります。
  2. dbms_utility.port_string: ここでは特権について心配する必要はありませんが、オプション 1 ほど多くの情報は得られません。また、これは OS の決定にのみ使用し、Oracle のバージョンには使用しないことに注意してください。
  3. v$dbfile: これは非推奨のビューなので、まず v$datafile を使用することをお勧めします。しかし、このアプローチには重大な欠点があります。それは、ASM を使用するときに何をするつもりかということです。私が間違っていなければ、ASM を使用する場合、名前の形式はすべての OS プラットフォームで同じです。

乾杯

ビョルン

于 2016-07-26T15:23:56.040 に答える