ORACLE数据库如何用datapump工具导出表结构然后导入到其它Schema下面
2020-05-28 08:58 潇湘隐者 阅读(1171) 评论(0) 编辑 收藏 举报这里简单介绍一下如何使用ORACLE数据库的datapump工具导出、导入表结构定义。由于业务场景可能非常简单,你不会遇到任何问题,也有可能业务场景非常复杂,你就会遇到一些杂七杂八的问题。下面我简单介绍一下个人遇到的需求。一批表准备归档,归档的策略为将UserA下面的一批表T1、T2、、、、Tn,归档到UserB下面(UserB.T1, UserB.T2.....),那么必须在UserB下面创建这样一批表,不想手工创建。手工创建的话,费时又费力,想利用datapump工具批量导出这批表的定义,然后批量导入。
正确的做法:
1:先导出表结构定义
expdp xxxx/xxxx tables=xxx,xxx,xxx..... directory=dumpdir content=metadata_only dumpfile=test.dmp logfile=exp_test_20200527.log;
2:导入表结构定义时,要做好几件事情。
2.1 原始表与目标表位于不同的SCHEMA,那么导入的时候,就必须完成这种转换,可以使用REMAP_SCHEMA参数将表和数据从一个SCHEMA转移到另外一个SCHEMA,其作用类似于老的imp工具中的fromuser和touser参数,impdp中将fromuser和touser参数合并成了REMAP_SCHEMA参数。该参数的使用方法REMAP_SCHEMA=source_schema:target_schema.
注意事项:即使你指定的对应SCHEMA不存在,只要导入时连接的用户有足够的权限,就会使用DUMP文件中的CREATE USER的metadata来创建一个对应的用户。
2.2 一般而言,对应SCHEMA(User)有默认的表空间,有可能不同SCHEMA默认的表空间不同,那么就必须用参数REMAP_TABLESPACE来解决导入数据更改表空间的情形,否则就会遇到ORA-01950: no privileges on tablespace 'xxxxx' 这种错误。
注意事项:有可能原始表的数据和索引位于不同的表空间,所以可能需要匹配多个表空间,具体操作为REMAP_TABLESPACE=src1:dst1 REMAP_TABLESPACE=src2:dst2
2.3 逻辑冲突,这个无关工具的关系,而是由于逻辑关系缘故。
如下案例所示,例如原表"TEST"."INV_CARTONS"跟"TEST"."INV_STORE_CODES"有主外键关系。但是我们没有导出、导入"TEST"."INV_STORE_CODES",那么此时不存在"TEST_ARCH"."INV_STORE_CODES",所以抛出一个错误。
$ impdp xxx/xxx tables=test.inv_cartons,test.inv_month_end_aging directory=dumpdir remap_schema=test:test_arch REMAP_TABLESPACE=TEST_DATA:TEST_DATA_ARCH REMAP_TABLESPACE=TEST_IDX:TEST_DATA_ARCH dumpfile=test.dmp logfile=imp_test_20200527.log
Import: Release 10.2.0.5.0 - 64bit Production on Wednesday, 27 May, 2020 13:57:10
Copyright (c) 2003, 2007, Oracle. All rights reserved.
Connected to: Oracle Database 10g Release 10.2.0.5.0 - 64bit Production
Master table "SYSTEM"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_TABLE_01": system/******** tables=test.inv_cartons,test.inv_month_end_aging directory=dumpdir remap_schema=test:test_arch REMAP_TABLESPACE=TEST_DATA:TEST_DATA_ARCH REMAP_TABLESPACE=TEST_IDX:TEST_DATA_ARCH dumpfile=test.dmp logfile=imp_test_20200527.log
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
ORA-39083: Object type REF_CONSTRAINT failed to create with error:
ORA-00942: table or view does not exist
Failing sql is:
ALTER TABLE "TEST_ARCH"."INV_CARTONS" ADD CONSTRAINT "FK_INV_CART_FK_INV_CA_INV_STOR" FOREIGN KEY ("STORE_CD") REFERENCES "TEST_ARCH"."INV_STORE_CODES" ("STORE_CD") ENABLE NOVALIDATE
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "SYSTEM"."SYS_IMPORT_TABLE_01" completed with 1 error(s) at 13:57:11
常见的datapump工具导入脚本例子
impdp xxx/xxx tables=xxxxxx directory=dumpdir remap_schema=xxxxx:xxxxx REMAP_TABLESPACE=xxxx:xxxx REMAP_TABLESPACE=xxxx:xxxx dumpfile=test_20200527.dmp logfile=imp_test_20200527.log

【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
2018-05-28 ORACLE当中自定义函数性优化浅析
2015-05-28 SQL SERVER 2000通过链接服务器发送邮件出现错误
2014-05-28 SQL Server 监控统计阻塞脚本信息
2013-05-28 MS SQL 日志记录管理