EXP_IMP與dblink資料遷移案例比照

dawn009發表於2014-04-10

========================================================================================================
                                                                 Exp/Imp資料遷移試驗
========================================================================================================
Exp/Imp資料遷移試驗

(1)試驗目的:linux系統oracle伺服器上schemamoon)下面張兩表moon.demo01,moon.dem02透過Exp匯出到windows本地oracle伺服器,並能正常查詢到相關資料.介於時間關係,只限於資料物件表進行,不涉及indextriggerprocedurepackage.

(2)試驗流程:

  ----&gt>linux系統oracle伺服器上建立使用者moon(預設放在users表空間下),並在其下建立     兩張表moon.demo01,moon.demo02

  ----&gt>windows本地用Exp做匯出;

  ----&gt>windows本地用Exp做匯入(匯入到sun使用者下,其預設表空間是sun);

  ----&gt>驗證wondows本地資料合法性;

 

(3)試驗過程:

----&gt>linux系統oracle伺服器上建立使用者moon(預設放在users表空間下),並在其下建立   兩張表moon.demo01,moon.demo02

--建立表空間

CREATE TABLESPACE moon DATAFILE '/u01/app/oracle/oradata/moon.dbf' SIZE 200M 

AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED NOLOGGING ONLINE PERMANENT BLOCKSIZE 8192 EXTENT MANAGEMENT LOCAL 

AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO;

--建立使用者並授權

create user moon identified by moon default tablespace moon temporary tablespace temp;

grant connect,resource,dba to moon;

--moon使用者登入並建立測試表

create table demo01(id number);

create table demo02(ename varchar(30));

--批次插入資料

begin

for i in 1 .. 10 loop

insert into demo01 values(i);

end loop;

commit;

end;

/


begin

for i in 1 .. 10 loop

insert into demo02 values('hongli'||i);

end loop;

commit;

end;

/

--查詢驗證資料

select * from demo01;

SQL> select * from demo01;

 

        ID

----------

         1

         2

         3

         4

         5

         6

         7

         8

         9

        10

 

10 rows selected

select * from demo02;

SQL> select * from demo02;

 

ENAME

------------------------------

hongli1

hongli2

hongli3

hongli4

hongli5

hongli6

hongli7

hongli8

hongli9

hongli10

 

10 rows selected

----&gt>windows本地用Exp做匯出;

exp moon/moon@bus tables=(DEMO01,DEMO02) file=E:\moon.dmp log=E:\moon.log;

 

---&gt>windows本地用Exp做匯入;

imp sun/sun fromuser=moon touser=sun tables=(DEMO01,DEMO02) file=E:\moon.dmp log=E:\imp.log;

 

----&gt>驗證wondows本地資料合法性;

 

(4)問題說明:

  試驗過程遇到因為版本問題導致Exp報錯:EXP-00008: 遇到 ORACLE 錯誤 904

  原因是linux系統是的oracle10.2.0.1windows本地oracle:11.1.0.6.0.

--&gt>

  由於Oracleimp/exp元件的操作原則--向下相容,且有一些規則:
    規則1:低版本的exp/imp可以連線到高版本(或同版本)的資料庫伺服器,但高版本的exp/imp不能連線到低版本的資料庫伺服器;
    規則2:高版本exp出的dmp檔案,低版本無法imp(無法識別dmp檔案);低版本exp出的dmp檔案,高版本可以imp(向下相容);
    規則3:Oracle 低版本Export的資料可以ImportOracle高版本中,但限於Oracle的相鄰版本,如從Oracle 10 到 Oracle 11.對於兩個不相鄰版本間進行轉換,如從Oracle 9 到 Oracle 11,則應先將資料輸入到中間版本-Oracle 10,再從中間資料庫轉入更高版本Oracle 11.

---&gt>綜上,如果用EXP/IMP做資料遷移,最好匯出端和匯入端oracle版本一致或差異不要太大,當然datapump有這種避免版本差異的配製.


========================================================================================================
                                                                  Dblink資料遷移試驗
========================================================================================================

Dblink資料遷移試驗

(1)試驗目的:linux系統oracle伺服器上schemamoon)下面張兩表moon.demo01,moon.dem02透過DBLINK匯入到windows本地oracle伺服器,並能正常查詢到相關資料.介於時間關係,只限於資料物件表進行,不涉及indextriggerprocedurepackage.

(2)試驗流程:

  ----&gt>linux系統oracle伺服器上建立使用者moon(預設放在users表空間下),並在其下建立     兩張表moon.demo01,moon.demo02

  ----&gt>windows本地用dblink匯入資料;

  ----&gt>驗證wondows本地資料合法性;

 

(4)試驗過程:

----&gt>linux系統oracle伺服器上建立使用者moon(預設放在users表空間下),並在其下建立   兩張表moon.demo01,moon.demo02

     --建立表空間

CREATE TABLESPACE moon DATAFILE '/u01/app/oracle/oradata/moon.dbf' SIZE 200M 

AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED NOLOGGING ONLINE PERMANENT BLOCKSIZE 8192 EXTENT MANAGEMENT LOCAL 

AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO;

--建立使用者並授權

create user moon identified by moon default tablespace moon temporary tablespace temp;

grant connect,resource,dba to moon;

--moon使用者登入並建立測試表

create table demo01(id number);

create table demo02(ename varchar(30));

--批次插入資料

begin

for i in 1 .. 10 loop

insert into demo01 values(i);

end loop;

commit;

end;

/


begin

for i in 1 .. 10 loop

insert into demo02 values('hongli'||i);

end loop;

commit;

end;

/

--查詢驗證資料

select * from demo01;

SQL> select * from demo01;

 

        ID

----------

         1

         2

         3

         4

         5

         6

         7

         8

         9

        10

 

10 rows selected

select * from demo02;

SQL> select * from demo02;

 

ENAME

------------------------------

hongli1

hongli2

hongli3

hongli4

hongli5

hongli6

hongli7

hongli8

hongli9

hongli10

 

10 rows selected

----&gt>windows本地建立db_link,然後透過dblink運用expdp匯入資料;

--建立dblink

create public database link bus_dblink connect to moon identified by moon using 'bus';

--透過dblink查詢

select * from moon.demo02@bus_dblink;

--透過dblink做資料匯入

impdp sun/sun network_link=bus_dblink tables=demo01,demo02 remap_schema=moon:sun remap_tablespace=moon:sun

----&gt>驗證wondows本地資料合法性;

 

 

(5)說明:datapump一般是資料量較大時的資料遷移,如果是小表或少數量的表資料匯入,可以運用dblink透過如下方式進行處理(提前需要建好表結構):

INSERT   INTO  demo01  SELECT  FROM  demo01@bus_dblink;

INSERT   INTO  demo01  SELECT  FROM  demo02@bus_dblink;

 

 

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

相關文章