1. 程式人生 > >使用資料泵匯出dblink

使用資料泵匯出dblink

最近碰到資料泵匯出匯入資料的時候,發現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已經匯入進來了。

[email protected]>select owner,db_link from dba_db_links;

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

[email protected]>

[email protected]>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已經匯入進來了 。

[email protected]>select owner,db_link from dba_db_links;

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

[email protected]>

[email protected]>select owner,db_link from dba_db_links;

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

[email protected]>

END 。