web-dev-qa-db-ja.com

Oracleファイルのアクセス許可expdpとdbms_datapump

Dbms_datapumpへの呼び出しを使用して、独自のエクスポート関数を作成しました。一部のシステムでは、選択したディレクトリのファイル権限が不十分なため、エクスポートが失敗します。ただし、expdpを使用して同じディレクトリへのエクスポートを実行すると機能します。

この異なる動作の説明を探しています。 expdpセッションは、データベースサーバーとは異なるOSユーザーで実行されますか?そして、それはどのユーザーでしょうか?

編集:ユーザーセッションで実行されているutl_fileを使用したファイルの書き込みと、スケジュールされたジョブで実行されているファイルの書き込みには、同じような違いがあります。

1
Rene
  1. データベースはLinux OSで実行されると想定しています。
  2. 私はあなたがsqldeveloperのようなツールでtns-connection文字列を使用してデータベースに接続していると仮定します(おそらく別のマシンから)
  3. Tns-connection文字列ではなくデータベースサーバーからexpdpを起動し、Oracle_SIDを設定してローカル接続を作成するとします。

そう、そう、奇妙なことが起こる可能性があります。

あなたのコメントの1つに、「どちらもデータベースでジョブとして実行する」と書いてあります。それは正しい用語ではありません。どちらもデータベース内のセッションであり、両方のセッションには、そのセッションに対応するLinuxプロセス、いわゆるシャドウプロセスがあります。もっと複雑な設定がありますが、私はこれを想定しています。

それでは、2つのセッションの違いは何ですか?データベースへの接続方法とシャドウプロセスが作成されます。

Tns-connectstringを使用するsqldeveloperの場合、ツールはリスナーに接続し、listener-processはOracleバイナリを実行してプロセス(シャドウプロセス)を作成します。ローカル接続を使用してサーバー上でexpdpツールを直接実行する場合、expdpツールはOracleバイナリを実行してプロセスを作成します。


このような結果が得られる状況は他にもあります。 RACデータベースで。データベースのDirectoryは、両方のノード上の異なる権限を持つローカルディレクトリを指します。

しかし、より詳細な情報がなければ、これをさらに調査することは意味がありません。

両方の状況でtns-connectionを使用して、シャドウプロセスが同じ方法で作成されるようにします。

1
miracle173

データの実際のエクスポートに関しては、expdpとDBMS_DATAPUMPは同じです。 'expdp'は、ストアドプロシージャを開始し、いくつかの端末処理を行うバイナリです。

ファイルシステムへの書き込みを試みるユーザーは、常にデータベースソフトウェアが実行されているユーザーです。ほとんどの場合、これはおそらく「Oracle」です。これは変更されません。

Expdpコマンドライン引数とパラメーターファイルの内容がDBMS_DATAPUMP引数と同じであることを再確認することをお勧めします。

また、(そして私はこれが失礼なように聞こえますが、本当に)実際に両方が同じデータベースで実行されていることを再確認してください... expdpコマンドラインにTNSエントリがある場合は、本当に確実ですか?彼らはあなたが彼らがやると思う場所を指していますか?

0
Phil Sumner