解答:expdp 丢失试图的解决方法。
一、expdp 丢失试图原因
在使用Oracle的expdp命令导出数据时,如果导出的数据中包括试图(view),但并没有对试图进行手动导出,则在导入数据时会出现试图丢失的情况。expdp并不会主动导出试图信息。
expdp方案中的view基于原表,因此如果在导出expdp时,定义视图源表的选项,“include=view”应该必须添加碎片,“include=table”会同时将源表和视图导出。
二、解决方法一:手动导出试图
通过添加以下的选项,手动导出试图信息:
expdp system/xxxx schemas=icnit1,include=view directory=META_DIR dumpfile=icnit1_exp.dmp logfile=icnit1_exp.log
其中,schemas指导出的用户,directory指导出的目录,dumpfile为导出文件名,logfile为导出日志文件名。
这种方法需要手动导出试图,并在导入时手动导入。
三、解决方法二:使用remap_schema选项
在expdp时,通过remap_schema选项将某个schema映射成新的schema,然后再创建目标schema并将试图导出,实现试图信息的导出。具体步骤如下:
- 在目标用户下创建一个和原用户同名的用户;
- 使用remap_schema选项将原用户映射到新用户上;
- 使用include=view选项将与映射后的新用户相关的试图导出。
示例代码如下:
expdp system/xxxx directory=META_DIR dumpfile=icnit1_exp.dmp logfile=icnit1_exp.log remap_schema=icnit1:icnit1_beta include=view
这种方法可将导出的expdp文件中包含试图信息,但是在导入时需要先手动创建试图。
四、解决方法三:使用full选项
使用full选项可以导出指定用户的所有schema、视图和其他对象。示例代码如下:
expdp system/xxxx full=y directory=META_DIR dumpfile=icnit1_exp.dmp logfile=icnit1_exp.log
使用此方法会导出所有相关对象,但是会增加导出文件的大小,同时也包含不需要的对象,导入时需要先手动筛选和创建需要的对象。
五、解决方法四:使用dbms_metadata.get_ddl生成建议脚本
可以使用dbms_metadata.get_ddl函数在命令行中生成代码来生成和重建view,语法如下:
select dbms_metadata.get_ddl(object_type, object_name, owner) from user_objects where object_type='VIEW';
生成的语句可以重新构建view对象。
此方法可以生成完整的视图定义,并且不需要包含导出文件中的所有对象信息,可减少导出文件的大小。
原创文章,作者:AOKDR,如若转载,请注明出处:https://www.506064.com/n/373597.html