現象
Data Pump で import しようとすると ORA-31640 が発生する。
OSユーザ smith で Data Pump を実行していて、smith ユーザは scott.dmp へのアクセス権がある。
smith@db01 $ impdp system/manager directory=pump_dir dumpfile=scott.dmp nologfile=y schemas=scott Import: Release 10.2.0.4.0 - Production on 火曜日, 27 4月, 2010 20:15:16 Copyright (c) 2003, 2007, Oracle. All rights reserved. 接続先: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options ORA-39001: 引数値が無効です ORA-39000: ダンプ・ファイル指定が無効です ORA-31640: ダンプ・ファイル"/home/smith/tmp/scott.dmp"を読取りのためにオープンできません ORA-27037: ファイル・ステータスを取得できません。 Linux Error: 13: Permission denied Additional information: 3
解決策
アクセス権を付与する。特に上位ディレクトリのアクセス権を確認すべし。
$ ls -l /home ... drwx------ 5 smith smith 4096 Jan 29 14:18 smith/ $ chmod +x /home/smith $ ls -l /home/smith ... drwx------ 5 smith smith 4096 Jan 29 14:18 tmp/ $ chmod +x /home/smith/tmp # ← ログを出力する場合は書込み権限(w)も必要。
蛇足
先日、id:wmo6hash さんと id:takabow さんが話されていたことがふと頭をよぎった。
「裏ではサーバプロセスが動いている」、「Data Pump は imp/exp のようにリモートホストで実行できない。DBサーバで、サーバプロセスを起動させて。。。」とか。。。
そうか、smith ユーザで Data Pump を実行してるけど、oracle ユーザでサーバプロセスが起動して、サーバプロセスが dump ファイルを読んで import するから oracle ユーザがアクセス権を持ってないといけないのか。なるほど!