【DATAPUMP】使用DataPump遷移Oracle資料庫

xysoul_雲龍發表於2017-11-01

<1div style="margin:0px;padding:0px;font-family:" font-size:16px;"="">

前幾天測試過使用RMAN遷移Oracle資料庫(Oracle11.2.0.1-Oracle11.2.0.4,Windows to Linux) 下面簡單說下使用資料泵的方式如何遷移。


相對來說,確實比較簡單,匯出匯入,但也可以分為兩種方式,一個是按照業務使用者來做匯出,再個全庫匯出,不只是多了一個full=y,其他也有一些不同的,好,我們來看看


環境介紹,源端Windows2008 x64+Oracle11.2.0.1

                  目標端:Redhat6.7 x64+Oracle11.2.0.4


首先環境準備,也就是目標端環境準備,Linux下Oracle資料庫安裝及打最新補丁,此處忽略。

不管是全庫匯出匯入還是按照業務使用者方式,都需要提前建立表空間,尤其資料量比較大的,都需要提前建立好,這樣也節約時間。 那麼我們如何獲取源庫建立表空間的ddl呢?

如下語句會列出所有表空間的建立語句,請注意系統相關表空間大小,例如SYSTEM、USERS,有可能表空間比較大,會有多個資料檔案。

set long 1000000

set pages 9999

select dbms_metadata.get_ddl('TABLESPACE',tablespace_name) from dba_tablespaces;


查詢某一個表空間的DDL語句

select dbms_metadata.get_ddl('TABLESPACE','MYDB') from dual;


源端可以執行全庫匯出操作了,首先我們需要建立directory

create directory exp as 'd:\datapump'; --匯出使用sys使用者,無需賦權

expdp '/ as sysdba' directory=my_exp dumpfile=myexpdb%U.dmp logfile=myexpdb.log parallel=2 EXCLUDE=STATISTICS parfile=mypar.par


#mypar.par m注意可以排除系統使用者及非OPEN使用者  全庫匯出無需建立使用者

FULL=Y
EXCLUDE=SCHEMA:"in (select username from dba_users where account_status<>'OPEN' or username in('SYS','SYSTEM'))"


下面就簡單了,目標端就可以匯入

注意:全庫匯出,匯入時會匯入role、DIRECTORY、TABLESPACE、CONTEXT等,我們可以選擇排除


impdp \'/ as sysdba\' directory=exp dumpfile=myexpdb%U.dmp logfile=myimpdb01.log parallel=2 exclude=DIRECTORY exclude=role exclude=CONTEXT exclude=TABLESPACE


匯入完成,收集統計資訊

exec dbms_stats.GATHER_DATABASE_STATS(estimate_percent=>null);


那麼如果只匯出業務使用者呢,我們需要建立使用者,並且賦予相關許可權

透過以下語句生成建立使用者的語句(Oracle11g)


透過以下語句生成賦許可權語句


匯出語句類似如下:

expdp '/ as sysdba' directory=my_exp dumpfile=myexpdb%U.dmp logfile=myexpdb.log parallel=2 EXCLUDE=STATISTICS schema=mydb,test


匯入語句:

impdp \'/ as sysdba\' directory=exp dumpfile=myexpdb%U.dmp logfile=myimpdb01.log parallel=2


收集資料庫統計資訊


當然,這需要停機時間,如果對於停機時間要求特別嚴格,建議使用OGG相關同步軟體,rman增量備份也是可以一試的。


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

相關文章