场景:原有数据库A突然宕掉了,新搭建了数据库B应急,A启动后要把A上的数据迁移到B上,
限制:1、A数据库是Oracle10g,B数据库是Oracle11g
2、A的字符集是AMERICAN_AMERICA.ZHS16GBK,B的字符集是AMERICAN_AMERICA.UTF8
查看字符集:select userenv('language') from dual;
3、A的用户名为OSMP和OSMPPORTAL,B上对应的用户名为OMSP和OMSPPORTAL
4、A的表空间是CCPBS,B的表空间是USERS
方法:expdp/impdp
1、登陆到数据库A的服务器,用expdp导出
expdp osmp/osmp@ccpbszq dumpfile=UCD_DEVICE_DN_201708_24.dmp tables=UCD_DEVICE_DN_201708 query=UCD_DEVICE_DN_201708:\"WHERE LOGGER_DATE \< TO_DATE\(\'08/25/2017 00:00:00\', \'MM/DD/YYYY HH24:MI:SS\'\)\"
(注意:此括号是中文的,不要直接粘贴)注:expdp 用户名/密码@实例 dumpfile=文件名 tables=要备份的表 query=查询条件
导出结束后会打印出文件路径
2、把步骤一中的文件移动到数据库B上
scp /datafile/app/oracle/product/10gR2/rdbms/log/UCD_DEVICE_DN_201708_24.dmp 10.130.24.133:/home/oracle/
输入密码移动成功
3、登录到数据库B的服务器,用impdp导入
impdp dumpfile=UCD_DEVICE_DN_201708_24.dmp remap_schema=osmp:omsp table_exists_action=append
提示路径不对
把备份文件移动到正确目录下(Oracle定义的directory目录),查看管理员目录:select * from dba_directories;
mv /home/oracle/UCD_DEVICE_DN_201708_24.dmp /app/oracle/admin/omsp/dpdump/
再次执行impdp dumpfile=UCD_DEVICE_DN_201708_24.dmp remap_schema=osmp:omsp table_exists_action=append
输入用户名和密码,OK
注:1、impdp dumpfile=文件名 remap_schema=原用户名:目标用户名 table_exists_action=append(追加)
默认值是skip,但若设置了CONTENT=DATA_ONLY,则默认值是APPEND,不是SKIP。