有个expdp的dmp包放在了ftp服务器上面,比较大,不好拷贝到本地,于是用网络映射的方式。
但在oracle中创建directory后,使用impdp,发现不能用,一直报错:
ORA-39001: 参数值无效
ORA-39000: 转储文件说明错误
ORA-31640: 无法打开要读取的转储文件 "y:\P2PDB_BAK\p2pdb_2009-06-05.dmp"
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 3) 系统找不到指定的路径。
根据分析,应该是oracle识别不到该网络映射路径。
在网上看到了这样的解决方法,尝试了下,可以正常使用:
1. Use UNC naming convention (\\<server>\<sharepoint>) on CREATE DIRECTORY command.
For example: CREATE DIRECTORY dump_dir AS '\\mk0510backup\dumpRAC$\DUMPS\DP';
2. Shut down the database.
3. Stop the listener.
4. Modify the instance service (OracleService<SID>) to run as OS account that has the appropriate privileges to access the mapped network disk.
5. Modify the listener service to run as the same account.
6. Start the instance service and the database.
7. Start the listener service.
If after 7, the DB or the listener didn't start appropriately, then Reboot the machine.
简而言之,就使需要一个可以访问远程映射地址的操作系统用户,使用这个操作系统用户来启动oracle和listener的服务。
比如我这里就自己创建了一个ftpuser用户,这个用户正常访问远程ftp上的文件,然后用这个ftpuser来启动数据库和监听,再次执行impdp操作就OK了。