今天接到一个任务,要求还原由Expdp方式导出的dmp包。
环境:
源ORACLE版本:ORACLE 10G R2,目标ORACLE版本 :11g R2。
源操作系统 :Windows 2003 Server SP2,目标操作系统:SUSE 11.1。
步骤如下:
1、创建ORACLE DIRECTORY。
使用root用户登录SUSE系统,建立目录/u01/oradir,作为DIRECTORY的物理目录。同时授予ORACLE用户访问此目录的权限 chown 777 oracle /u01/oradir。切换至ORACLE 用户,用system账户登录ORACLE,创建DIRECTORY。Create or replace directory dpdata as ‘/u01/oradir’.创建完成后,输入命令查看结果。Select * from dba_directories。
OWNER DIRECTORY_NAME
------------------------------ ------------------------------
DIRECTORY_PATH
--------------------------------------------------------------------------------
SYS DPDATA
/u01/oradir
2、将dmp文件copy至/u01/oradir中。
3、切换至ORACLE用户,数据impdp命令进行导入。
impdp system/password encryption_password=password dumpfile=init.dmp
悲剧的发现无法正常导入无法找到wallet配套的密钥。看来还需要启动wallet才行.上网查了一下,发现需要在ORACLE的sqlnet.ora文件中新增加对wallet的路径设置才行。于是兴致勃勃的找到你安装oracle 的路径,例如:/u01/oracle/product/11gR2/db/network/admin,又一次悲剧的发现居然没有sqlnet.ora。原来对于oracle服务端来说sqlnet.ora不是必须的,所以我们在这里必须手动建立一个。
从windows下的oracle client中拷贝一个sqlnet.ora到Linux中,配置wallet路径,配置项如下:
ENCRYPTION_WALLET_LOCATION =
(SOURCE=
(METHOD=file)
(METHOD_DATA=
(DIRECTORY=/u01/orawallet)))
重启oracle服务,再次执行导入命令,又一次的发现报出权限错误,这又是什么问题啊。查了一下,发现问题处在sqlnet文件的第一行上,SQLNET.AUTHENTICATION_SERVICES= (NTS),这里表示在windows中进行操作系统的权限验证,需要将这一行注释掉。
再次重启oracle服务,发现导入命令终于可以正常使用了。
4、 导入某个Schema数据。在导入过程中发现无法进行多个schemad的同时导入操作,只能单个Schema导入,这个有待再研究,导入命令为:
impdp system/password encryption_password=password dumpfile=init.dmp Schemas=yourschema
5、以上操作均是在system用户下进行的。