场景描述:
1、做一个从UAT到PRD的Schema迁移,UAT环境有sys用户,PRD环境没有sys用户,由于权限限制,没办法使用expdp/impdp,只好选择exp/imp命令;
2、UAT和PRD环境的TNS已明确,假设UAT环境的TNS配置为:TNS_UAT,PRD环境的配置为:TNS_PRD;
3、PRD环境的DB USER已建好(其他人建好提供的),和UAT环境的是一样的,假设都为user/pwd;
4、UAT和PRD环境,user用户的表空间名不同,假设UAT环境表空间为:TBSP_UAT,PRD环境为TBSP_PRD;
当两个user的表空间不同时无法直接exp/imp(不妨尝试一下),所以找了以下两种解决办法:
方法一:
1、使用exp命令从UAT库导出user用户数据文件Schema_USER_BAK.dmp,命令格式为:
EXP user/pwd@TNS_UAT BUFFER=64000 FILE=D:\SCHEMA_USER_BAK.dmp OWNER=USER(参数按需添加)
2、使用Notepad++等文本工具打开文件,查找出其中的表空间信息,将SCHEMA_USER_BAK.dmp文件中的UAT环境表空间名TBSP_UAT全部替换PRD对应的表空间名TBSP_PRD,修改后的文件另存为SCHEMA_USER.dmp;
3、然后使用imp命令将SCHEMA_USER.dmp文件导入给PRD环境的user用户,命令格式为:
IMP user/pwd@TNS_PRD BUFFER=64000 FILE=D:\SCHEMA_USER.dmp FROMUSER=USER TOUSER=USER
4、OK,方法一完成。
但是,假设UAT环境的user用户的数据量很大,导出的dmp文件通常有3GB、4GB甚至更大,此时就无法通过Notepad++或者UE等编辑器直接去编辑替换表空间信息了,方法一就行不通了,所以这时有了方法二。
方法二:
1、修改UAT环境user用户的表空间名为PRD环境对应的表空间名:(修改之前记得备份)
ALTER TABLESPACE TBSP_UAT RENAME TO TBSP_PRD
2、导出UAT环境user用户:
EXP user/pwd@TNS_UAT BUFFER=64000 FILE=D:\SCHEMA_USER.dmp OWNER=USER
3、将导出的dmp文件导入给PRD环境的user用户:
IMP user/pwd@TNS_PRD BUFFER=64000 FILE=D:\SCHEMA_USER.dmp FROMUSER=USER TOUSER=USER
4、还原UAT环境user用户的表空间名:
ALTER TABLESPACE TBSP_PRD RENAME TO TBSP_UAT
5、OK,方法二完成。
上述两种方法亲测有效,但是可能会有特殊情况,至于特殊情况是什么,那就不好说了。所谓特殊情况特殊处理,所以还得各位小伙伴多多研究了。
本文介绍了如何在Oracle中处理源和目标表空间不同的Schema迁移问题。提供两种方法:一是通过文本编辑器替换dmp文件中的表空间名;二是临时修改源环境的表空间名进行迁移。这两种方法在实际操作中需考虑数据量和特殊情况。
2158

被折叠的 条评论
为什么被折叠?



