使用数据泵导出dblink

本文详细解析了在Oracle数据库中,如何正确导出和导入不同类型的DBLink,特别是针对公共DBLink的特殊处理方式,确保数据迁移时DBLink的完整性和可用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近碰到数据泵导出导入数据的时候,发现dblink并没有导入进来。

今天测试了下,发现了原因。

当dblink,是使用create database link 这样的语句创建的时候,按照schema导出导入,就可以导出导入dblink了。

如果创建dblink,使用的是create public database的时候,这样按照schema导出导入,是没有dblink的,因为此时查看dblink的owner,owner是public。

要想解决这样的问题,需要导出元数据,再导入元数据就可以了。导出的时候,加上full=y(不加这个导不出owner为public的dblink)

以下为测试过程

create  public database link to_nocdb connect to sys identified by oracle using 'nocdb';

-- 导出 

create database link no_pub_dlink connect to system identified by oracle using 'nocdb';
expdp dlinkuser/oracle directory=dump dumpfile=no_pubdlink.dmp logfile=nopubdlink_exp.log  schemas=dlinkuser
D:\app\test\product\11.2.0\dbhome_1\BIN>expdp dlinkuser/oracle directory=dump dumpfile=no_pubdlink.dmp logfile=nopubdlin
k_exp.log  schemas=dlinkuser

Export: Release 11.2.0.4.0 - Production on 星期六 10月 13 16:30:23 2018

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
自动启用 FLASHBACK 以保持数据库完整性。
启动 "DLINKUSER"."SYS_EXPORT_SCHEMA_01":  dlinkuser/******** directory=dump dumpfile=no_pubdlink.dmp logfile=nopubdlink_
exp.log schemas=dlinkuser
正在使用 BLOCKS 方法进行估计...
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的总估计: 64 KB
处理对象类型 SCHEMA_EXPORT/USER
处理对象类型 SCHEMA_EXPORT/SYSTEM_GRANT
处理对象类型 SCHEMA_EXPORT/ROLE_GRANT
处理对象类型 SCHEMA_EXPORT/DEFAULT_ROLE
处理对象类型 SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
处理对象类型 SCHEMA_EXPORT/DB_LINK
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE
处理对象类型 SCHEMA_EXPORT/TABLE/COMMENT
处理对象类型 SCHEMA_EXPORT/TABLE/INDEX/INDEX
处理对象类型 SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
处理对象类型 SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
. . 导出了 "DLINKUSER"."T1"                            5.023 KB       2 行
已成功加载/卸载了主表 "DLINKUSER"."SYS_EXPORT_SCHEMA_01"
******************************************************************************
DLINKUSER.SYS_EXPORT_SCHEMA_01 的转储文件集为:
  D:\DUMP\NO_PUBDLINK.DMP
作业 "DLINKUSER"."SYS_EXPORT_SCHEMA_01" 已于 星期六 10月 13 16:31:21 2018 elapsed 0 00:00:44 成功完成


D:\app\test\product\11.2.0\dbhome_1\BIN>

进行导入

impdp dlinkuser/oracle directory=dir dumpfile=no_pubdlink.dmp logfile=impdp.log
C:\Users\test>impdp dlinkuser/oracle directory=dir dumpfile=no_pubdlink.dmp logfile=impdp.log TABLE_EXISTS_ACTION=trunca
te

Import: Release 12.2.0.1.0 - Production on 星期六 10月 13 16:33:52 2018

Copyright (c) 1982, 2018, Oracle and/or its affiliates.  All rights reserved.

连接到: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
已成功加载/卸载了主表 "DLINKUSER"."SYS_IMPORT_FULL_01"
已在 AL32UTF8 字符集和 AL16UTF16 NCHAR 字符集中完成导入
已在 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中完成导出
警告: 字符集转换过程中可能出现数据丢失情况
启动 "DLINKUSER"."SYS_IMPORT_FULL_01":  dlinkuser/******** directory=dir dumpfile=no_pubdlink.dmp logfile=impdp.log TABL
E_EXISTS_ACTION=truncate
处理对象类型 SCHEMA_EXPORT/USER
ORA-31684: 对象类型 USER:"DLINKUSER" 已存在

处理对象类型 SCHEMA_EXPORT/SYSTEM_GRANT
处理对象类型 SCHEMA_EXPORT/ROLE_GRANT
处理对象类型 SCHEMA_EXPORT/DEFAULT_ROLE
处理对象类型 SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
处理对象类型 SCHEMA_EXPORT/DB_LINK
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE
表 "DLINKUSER"."T1" 已存在且已截断。由于截断了 table_exists_action, 将加载数据, 但是将跳过所有相关元数据。
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA
. . 导入了 "DLINKUSER"."T1"                            5.023 KB       2 行
作业 "DLINKUSER"."SYS_IMPORT_FULL_01" 已经完成, 但是有 1 个错误 (于 星期六 10月 13 16:34:18 2018 elapsed 0 00:00:23 完成
)

查询,可以看到 dlinkuser schema下的dblink已经导入进来了。

SYS@nocdb>select owner,db_link from dba_db_links;

OWNER      DB_LINK
---------- ------------------------------
SYS        SYS_HUB
PUBLIC     DBMS_CLRDBLINK
DLINKUSER  NO_PUB_DLINK

SYS@nocdb>

DLINKUSER@test>select owner,db_link from dba_db_links;

OWNER      DB_LINK
---------- ------------------------------
PUBLIC     DBMS_CLRDBLINK
PUBLIC     TO_NOCDB
DLINKUSER  NO_PUB_DLINK

-- 对于create public database语句创建的dblink,通过元数据的导出导入,也可以导出导入dblink。 导出导入的过程略。

导出导入的语句

expdp "'/ as sysdba '" directory=dump dumpfile=meta.dmp logfile=meta.log  content=METADATA_ONLY full=y


impdp "'/ as sysdba '" directory=dir dumpfile=meta.dmp logfile=impmeta1.log  

查看结果:可以发现,owner为public的dblink已经导入进来了 。

DLINKUSER@test>select owner,db_link from dba_db_links;

OWNER      DB_LINK
---------- ------------------------------
PUBLIC     DBMS_CLRDBLINK
PUBLIC     TO_NOCDB
DLINKUSER  NO_PUB_DLINK

DLINKUSER@test>

SYS@nocdb>select owner,db_link from dba_db_links;

OWNER      DB_LINK
---------- ------------------------------
SYS        SYS_HUB
PUBLIC     DBMS_CLRDBLINK
PUBLIC     TO_NOCDB
DLINKUSER  NO_PUB_DLINK

SYS@nocdb>

END 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值