EXP/IMP 學習(三)

楊奇龍發表於2010-06-25

1.3  最佳化
1.  加快exp速度
加大 large_pool_size,可以提高 exp的速度 採用直接路徑的方式(direct=y),資料不需要經過記憶體進行整合和檢查. 設定較大的 buffer,如果匯出大物件,小 buffer會失敗。
export檔案不在 ORACLE使用的驅動器上 不要 export到 NFS檔案系統
UNIX環境:用管道模式直接匯入匯出來提高 imp/exp的效能

2.  加快imp速度
建立一個 indexfile,在資料 import完成後在建立索引
將 import 檔案放在不同的驅動器上 增加 DB_BLOCK_BUFFERS
增加 LOG_BUFFER
用非歸檔方式執行 ORACLE:ALTER DATABASE NOARCHIVELOG; 建立大的表空間和回滾段,OFFLINE其他回滾段,回滾段的大小為最大表的 1/2 使用  COMMIT=N
使用 ANALYZE=N
單使用者模式匯入
UNIX環境:用管道模式直接匯入匯出來提高 imp/exp的效能

3.  透過unix/Linux PIPE管道加快exp/imp速度
透過管道匯出資料:
1.透過 mknod -p 建立管道
$ mknod /home/exppipe p    //  在目錄/home下建立一個管道 exppipe注意引數 p
2.透過 exp和 gzip匯出資料到建立的管道並壓縮
$ exp test/test file=/home/exppipe & gzip < /home/exppipe > exp.dmp.gz
$ exp test/test tables=bitmap file=/home/newsys/test.pipe &
gzip < /home/newsys/test.pipe > bitmap.dmp.gz
3.匯出成功完成之後刪除建立的管道
$ rm    -rf    /home/exppipe
 
匯出指令碼:
###UNIX下 ORACLE資料庫透過 PIPE管道進行備份
###### using "export" and "tar" command to bakup oracle datebase #######
trap "" 1 #nohup
LOGFILE=/opt/bakup/log/bakup_ora.log
export LOGFILE
DUMPDIR=/archlog_node1
export DUMPDIR
exec >$LOGFILE 2>&1
 
echo
echo ' Begin at ' `date`
echo
 
#               clear old result file
cd $DUMPDIR
if [ -f exp.dmp.Z ]
then
echo "clear old result file"
rm exp.dmp.Z
fi
 
#make pipe
mkfifo exp.pipe
chmod a+rw exp.pipe
 
#gain the dmp.Z file
compress < exp.pipe > exp.dmp.Z &
su -u oracle -c "exp userid=ll/ll file=$DUMPDIR/exp.pipe full=y buffer=20000000"
echo
echo ' exp end at '`date`
echo
# rm pipe
rm exp.pipe
#tar the dmp.Z file to tape
mt -f /dev/rmt/0 rew
tar cvf /dev/rmt/0 exp.dmp.Z
echo
echo 'tar end at '`date`
echo
透過管道匯入生成的檔案:
1.透過 mknod -p 建立管道
$ mknod /home/exppipe p
2.匯入生成的壓縮檔案
$ imp test/test file=/home/exppipe fromuser=test touser=macro &
gunzip < exp.dmp.gz > /home/exppipe
3.刪除管道
$ rm –fr /home/exppipe
 
4.  全庫匯入的一般步驟
注意:在匯出時,需要透過toad或其他工具提取源資料庫建立主鍵和索引的指令碼
1.  先全庫加 rows=n 把結構導進去
$ imp system/manager file=exp.dmp log=imp.log full=y rows=n indexes=n
2.  使業務使用者的觸發器失效/刪除主鍵和唯一索引
spool drop_pk_u.sql
select 'alter table '||table_name||' drop constraint '||constraint_name||';'
from user_constraints
where constraint_type in ('P','U');
/
spool off
spool disable_trigger.sql
select 'alter trigger '||trigger_name||' disable;'
from user_triggers;
/
spool off
@drop_pk_u.sql
@disable_trigger.sql
3.  以 ignore=y全庫匯入
$ imp system/manager file=exp.dmp log=imp.log full=y ignore=y
4.  透過 toad或其他工具提取源資料庫建立主鍵和索引的指令碼,在目標資料庫中建立主鍵和索引。使觸發器生效。

 

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