impdp导入表结构和表数据_ORACLE数据库如何用datapump工具导出表结构然后导入到其它Schema下面...

这里简单介绍一下如何使用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.logImport: Release 10.2.0.5.0 - 64bit Production on Wednesday, 27 May, 2020 13:57:10Copyright (c) 2003, 2007, Oracle.  All rights reserved.Connected to: Oracle Database 10g Release 10.2.0.5.0 - 64bit ProductionMaster table "SYSTEM"."SYS_IMPORT_TABLE_01" successfully loaded/unloadedStarting "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.logProcessing object type TABLE_EXPORT/TABLE/TABLEProcessing object type TABLE_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANTProcessing object type TABLE_EXPORT/TABLE/INDEX/INDEXProcessing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINTProcessing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICSProcessing object type TABLE_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINTORA-39083: Object type REF_CONSTRAINT failed to create with error:ORA-00942: table or view does not existFailing 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 NOVALIDATEProcessing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICSJob "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

标签:导入到,REMAP,test,TABLESPACE,TEST,datapump,ORACLE,TABLE,SCHEMA

来源: https://www.cnblogs.com/kerrycode/p/12978269.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle 数据库中,可以使用多种方法来复制数据。以下是几种常见的方法: 1. 使用 INSERT INTO SELECT 语句:可以使用 INSERT INTO SELECT 语句将源数据插入到目标中。例如,假设有两个 `source_table` 和 `target_table`,并且它们具有相同的结构,您可以运行以下语句来复制数据: ```sql INSERT INTO target_table SELECT * FROM source_table; ``` 这将复制 `source_table` 中的所有数据到 `target_table`。 2. 使用 CREATE TABLE AS SELECT 语句:如果您想要复制整个(包括结构数据),可以使用 CREATE TABLE AS SELECT 语句。例如: ```sql CREATE TABLE target_table AS SELECT * FROM source_table; ``` 这将创建一个名为 `target_table` 的新,并将 `source_table` 中的所有数据复制到新中。 3. 使用 Data Pump 工具Oracle 提供了 Data Pump 工具,可以用来导出导入数据。您可以使用 `expdp` 命令将源导出为一个数据文件,然后使用 `impdp` 命令将数据文件导入到目标中。例如: ```bash expdp username/password@source_db tables=source_table directory=data_pump_dir dumpfile=source_table.dmp impdp username/password@target_db directory=data_pump_dir dumpfile=source_table.dmp remap_schema=username:target_schema remap_table=source_table:target_table ``` 这将导出 `source_table` 并将其导入到 `target_table` 中。 请根据您的具体需求选择适合的方法来复制数据。在执行任何数据操作之前,请确保对数据进行备份,并在生产环境中小心操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值