ablog

不器用で落着きのない技術者のメモ

Data Pump で import しようとすると ORA-31640 が発生する

現象

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

原因

oracle ソフトウェア所有者ユーザ(通常 oracle)が dump ファイルにアクセスする権限がない。

解決策

アクセス権を付与する。特に上位ディレクトリのアクセス権を確認すべし。

$ 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 ユーザがアクセス権を持ってないといけないのか。なるほど!