背景介绍:
项目以前建立的库,表空间文件文件比较多,问了一下dba,了解到表空间建立很多没有带来优惠(都在一块磁盘上),效率也不会提高;现在要进行新库的迁移(目前使用的是asm磁盘组rac集群),正好把多个表空间变成一个表空间
环境:
原库:win2008,64位,oracle11g
目标库:centos6.4,64位,oracle11g
过程:
一、win导出:
sql> CREATE OR REPLACE DIRECTORY dpdata AS 'F:data_bak';--必须在server端执行,并且这个文件必须在server端有
sql>grant read,write on directory dpdata to t1;
退出sql在cmd的命令行执行:expdp t1/t1@orclsc directory=dpdata dumpfile=full.dmp schemas=t1
注释:相关的expdp、impdp的命令可以查看网上说明,shcemas表示导出的用户,即上面的命令表示导出t1用户下的所有东东,文件和日志生成在f:data_bak下,会看到有full.dmp和一个export.log文件(这可用参数logfile指定)
sql>select file_name,tablespace_name from dba_data_files;--查看目前的表空间,记录一下,比如:tp1,tp2等
二、linux下导入:
1、把full.dmp上传到linux服务器,比如/home/data下
2、给此目录授权,即可以读写的权限,网上可以搜一下,例如: chmod -R 777 /home/data
3、建立用户和表空间:这个不说了(例如用户test1,表空间tp)
4、sql>create directory dpdata as '/home/data';
sql>grant read,write on directory expdp_dir to test1;
[oracle@db-1 ~]$ impdp test1/test1 directory=dpdata dumpfile=FULL.DMP remap_schema=t1:test1 remap_tablespace=tp1:tp,tp2:tp
ok到这里,基本就结束了,下面说一下会遇到的问题,例如:
ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 475
ORA-29283: invalid file operation
无论expdp还是impdp都可能报这些问题,我这里列举一下我的原因:
1、create directory的文件不存在,必须存在,必须在server端,也就是数据库的服务器上存在
2、linux的时候,这个‘/home/data’这个文件夹的权限必须有,我用的oracel的用户进行impdp的,所以oracle这个用户对这个文件夹要有读写权限。
3、impdp的时候,dumpfile的文件名(FULL.DMP)大小写敏感
4、我自己遇到的rac环境下的sid的问题:impdp的时候加上sid报错,不加反而能导进去;应该是单节点的问题,这个以后注意一下