sql >> データベース >  >> RDS >> Oracle

PL / SQLからシェルスクリプトを呼び出しますが、シェルはOracleではなくグリッドユーザーとして実行されます

    コメントで指摘されているように、問題は、Runtime.getRuntime()。execがEXTPROCを介して実行されるため、グリッドリスナーを介して実行されることです。新しい構成では、DBとGRIDの間でOSユーザーが分離されているため、FSでアクセス許可の問題が発生しました。

    これに対する解決策は次の1つです:

    • グリッドユーザーがファイルを書き込み、umaskを774や664などに変更できるように、FS権限を修正して、グリッドユーザーとOracleユーザーの両方が後でファイルを変更できるようにします。

    • sudoersファイルを変更し、グリッドがパスワードなしでoracleとして必要なコマンドを実行できるようにし、シェルスクリプトを変更してsudoを含めます。

    • 別のポートのDBホームに新しいリスナーを作成し、TNSNAMES.ORAエントリを変更して新しいポートを指すようにします。次に、extprocがOSユーザーoracleとして実行されます。 srvctlに登録されたリスナーは常にグリッドによって開始されるため、$ OHでLISTENER.ORAを手動で編集し、lsnrctlで開始する必要があります;

    • メインリスナーをdbホームに変更します。私はそれをお勧めしません(上記の項目を参照してください)。

    [編集]@AlexPooleと@jonearlesが指摘しているように、私の場合には適さなかったが、他の人には適している可能性のある他の2つのオプションがあります。

    • ORACLE_SIDを設定してsqlplusでローカルにスクリプトを実行する場合、FSアクセスはsqlplusを実行しているOSユーザーによって行われます。したがって、オラクルまたは他のユーザーとして実行し、FS権限を修正できます。
    • dbms_jobスケジューラでジョブをSYSとしてスケジュールすると、タスクはoracleによって実行されます(この動作はバージョンに依存する可能性があるため、さらにテストが必要です)。

    よろしく、

    ダニエル・ストルフ



    1. ALL_TAB_COLSでどの列が使用されていないかをどのように判断できますか?

    2. Rails 4にアップグレードした後、postgresqlサーバーでメモリリークが発生する

    3. SQLServerテーブルで列をNullから非Nullに変更する方法-SQLServer/T-SQLチュートリアルパート52

    4. 原因:org.postgresql.util.PSQLException:致命的:残りの接続スロットは非レプリケーションスーパーユーザー接続用に予約されています