大批量數據導出導入的一些經驗總結

      在2月份,主要做了幾次大批量數據的導出導入,總結了一些經驗教訓,這裏記錄一下。


1.  一定要確定要求。

     有些導數要求所有導出的數據最後都在同一個時間點,這個時候,如果主庫有dataguard, 我們可以先讓dataguard停止應用歸檔,然後從dataguard進行導出; 如果沒有,我們可以先將數據rman恢復到一箇中間應急環境,然後將應急環境啓動到read only狀態,然後從這個應急環境進行導出。 也許我們還有其他的想法,如ogg,dsg等第三方工具,這些工具總會有一些時間差,導出的數據最後在同一個時間點這個不容易做到;而且,這些工具配置也比較麻煩,而且收費。


2.  確定好批次和目標庫的表空間大小

     由於數據量比較大,想一下子搞定是不可能的,我們必須在主庫查詢出各個表的大小,然後分批次導出,儘量每個批次的大小一致。

     有的時候,目標庫中已經存在相應的表,我們要將原庫中的表中數據導入到目標庫已經存在的表中,這時候,我們要根據原庫中表和其索引的大小相對性的擴目標庫中已經存在表和索引的表空間,這個一般是根據最大的幾個大表。 注意,不要隨意改變目標庫中表和索引所在的表空間,要先根據原表進行擴表空間操作,不然會引起投訴的。


3.  確定數據導出導入方案

    由於表數目衆多,根據在原庫查詢出來的各個表的大小,我們要做針對性的處理。

    小表部分: 一般4g以下的可以叫做小表,可以直接進行insert + dblink, 這樣比較快,3g、4g左右的表insert時間也有點長,但還在可接受範圍內。

    大表部分: 對於4g以上的表,我們要使用expdp +  network_link 進行導出到目標端,這樣可以省去原庫一大部分空間,導出導入的時候只導數據,導完之後再進行索引的創建。下面是一個例子; 這樣只導入表數據的話,180g的表數據導入正常情況下需要1個小時左右,如果存儲性能不大好,可能要時間長一些。

     在導出導入的時候,如果目標庫和原庫相對應的表名不同,要將目標庫的表名和原庫的表名保持一致,改一下表名;如果兩邊的表結構不一致,要將目標庫的表結構修改,與老庫保持一致。

-----  應急環境:
grant select any dictionary to dbadm;
grant exp_full_database to dbadm;
grant select any table to dbadm;


---目標庫

drop public database link datamv;
create public database link datamv connect to dbadm identified by "xxxxx" using 'reinyj';


create or replace directory dumpdir as '/reindb_tmp/reindb';
grant read,write on directory dumpdir to public;


---  expdp.pingshi.pici23.sh
export ORACLE_SID=reindb
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
expdp \"/ as sysdba \" directory=dumpdir dumpfile=pingshi_pici2_%U.dump logfile=expdp_pingshi_pici2.log tables=rein.IDSALL_PREREC,rein.IDSINC_PREREC  network_link=datamv exclude=index,grant parallel=5


expdp \"/ as sysdba \" directory=dumpdir dumpfile=pingshi_pici3_%U.dump logfile=expdp_pingshi_pici3.log tables=rein.IDSALL_APP_POS,rein.IDSALL_CHKAMOUNT,rein.IDSALL_MONEYSCH  network_link=datamv exclude=index,grant parallel=5

   ------使用network_link 選項,dump直接導出到目的端,不落地導出,這樣對源端沒有什麼空間要求。這樣的導出在目的端執行,對undo要求不高。


nohup sh  impdp.pingshi.pici2.sh  > impdp.pingshi.pici2.log  &
---  impdp.pingshi.pici2.sh


export ORACLE_SID=reindb
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
impdp \"/ as sysdba \" directory=dumpdir dumpfile=pingshi_pici2_%U.dump logfile=impdp_pingshi_pici2.log tables=rein.IDSALL_PREREC,rein.IDSINC_PREREC  parallel=5  REMAP_SCHEMA=rein:rein  remap_tablespace=IDS_DATA:REIN_IDSALL,IDS_INDEX:REIN_IDSALL,REIN_DATA1:REIN_IDSALL TABLE_EXISTS_ACTION=append


4.  創建相關索引

    在表中數據到導入完成之後,我們進行索引的創建,注意使用並行,加快索引創建速度。


5.  修改目標庫中的表名和表結構,保持最初的樣子。 最後,表中一些字段有默認值,要進行添加補充。


6.  收集相關表的統計信息,這一點一定不能忘記。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章