[20130415]資料泵與db link.txt

lfree發表於2013-04-15
[20130415]資料泵與db link.txt

資料泵是10g以後採用的新特性,按照一些介紹速度比exp/imp快。以前我總是成對的使用它,也就是先expdp匯出資料,然後再傳輸到新
的伺服器,然後在impdp匯入資料,這樣的過程明顯不是很快,特別是匯出檔案很大的情況下,速度並沒有感覺快到哪裡,如果資料泵加
上db link,這樣僅僅使用impdp匯入就可以,省去了前面的步驟。

自己做一個測試:

測試資料從10g伺服器到11g的測試機的匯入情況:

1.測試環境與配置如下:

--測試機器A(11g),IP=testa:
SQL> @ver
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

CREATE PUBLIC DATABASE LINK "TESTB.COM" CONNECT TO scott IDENTIFIED BY xxxx  USING 'testb:1521/orcl';

SQL> select * from dual@testb.com;
D
-
X

--測試透過,能透過db link連線。

--測試機器B(10g),IP=testb:
SQL> select * from v$version  where rownum<=1;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi

--以scott使用者建立一張表:
create table t1 as select rownum id ,'test' name from dual connect by level<=1000;
create unique index pk_t1 on t1(id);
alter table t1 add constraint pk_t1 primary key (id);

create or replace trigger tr_t
before  insert on t1 
referencing new as new old as old
for each row
declare
begin
  null;
end ;
/


2.首先使用資料泵的命令方式:

--testa上執行:
var n number;
exec :n := dbms_datapump.open('IMPORT','TABLE','TESTB.COM');
exec dbms_datapump.metadata_filter(:n,'SCHEMA_LIST','''SCOTT''');

exec dbms_datapump.metadata_filter(:n,'NAME_LIST','''T1''');
exec dbms_datapump.start_job(:n);
commit ;

--引號加的真麻煩,oracle真變態!
--等待一下,看看資料是否過來。可以檢查發現表T1的資料,索引以及觸發器的相關內容全部過來了。
--另外我的測試如果在testa上T1表存在,是無法匯入的。

3.使用命令列impdp(在testa上執行):
--drop table t1 purge ;

$ impdp scott/xxxx DIRECTORY=DATA_PUMP_DIR LOGFILE=t1.log NETWORK_LINK=testb.com TABLES=t1
Import: Release 11.2.0.3.0 - Production on Mon Apr 15 16:51:10 2013
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SCOTT"."SYS_IMPORT_TABLE_01":  scott/******** DIRECTORY=DATA_PUMP_DIR LOGFILE=t1.log NETWORK_LINK=testb.com TABLES=t1 */
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 128 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
. . imported "SCOTT"."T1"                                  1000 rows
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/TRIGGER
Job "SCOTT"."SYS_IMPORT_TABLE_01" successfully completed at 16:51:17

4.這種方式僅僅需要impdp就可以,唯獨要注意目的表是否存在,以及方向不要搞錯。

5.另外要注意db link,如果不在需要最好刪除。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-758521/,如需轉載,請註明出處,否則將追究法律責任。

相關文章