[20140827]imp exp 使用管道遷移資料.txt

lfree發表於2014-08-28

[20140827]imp exp 使用管道遷移資料.txt

--最近幫別人升級一套資料庫,9i到11g.
--那個慢真讓人受不了,也許是以前的老機器效能不行.資料量並不大.匯出花了時間比較長.

--我很久就知道匯出可以管道壓縮匯出檔案,實現一邊匯出一邊壓縮的功能,現在硬碟空間都很大,很少考慮這種方式.
--而且現在很少使用這種方式備份資料.

--是否可以使用管道實現一邊匯出一邊匯入呢?這樣可以節約時間,我做了一個測試:
--全部操作都在目的端進行,主要是exp/imp版本問題(煩),作業系統都是linux。

1.首先測試是否不用管道是否正常使用:

exp system/xxxx file=ticd10.dmp tables=icare.ticd10  buffer=20971520 consistent=y log=ticd10_exp.log direct=y triggers=n
imp scott/btbtms@192.168.100.40/test.com file=ticd10.dmp tables=ticd10 buffer=20971520 commit=y log=ticd10_imp.log fromuser=icare touser=scott

--測試透過!為了後面的驗證,改名錶,刪除索引以及約束等資訊。
alter table ticd10 rename to ticd10_org;


2.建立shell指令碼:

$ cat ./play_pipe.sh
#! /bin/bash
mknod exp_pipe p
mknod imp_pipe p
exp system/xxxx file=exp_pipe tables=icare.ticd10  buffer=20971520 consistent=y log=ticd10_exp.log direct=y triggers=n &
sleep 1
dd bs=1M if=exp_pipe of=imp_pipe &
sleep 1
imp scott/btbtms@192.168.100.40/test.com file=imp_pipe tables=ticd10 buffer=20971520 commit=y log=ticd10_imp.log fromuser=icare touser=scott &

chmod 755 play_pipe.sh
./play_pipe.sh  > /dev/null 2>&1

--說明: 加入>/dev/null 2>&1後面的引數,主要避免顯示介面太亂了。

3.驗證資料是否正確:
--檢查匯出日誌正常!檢查資料看看。

SCOTT@test> select count(*) from ticd10_org ;
  COUNT(*)
----------
     24177

SCOTT@test> select count(*) from ticd10 ;
  COUNT(*)
----------
     24177

SCOTT@test> select * from ticd10 minus select * from ticd10_org;
no rows selected

SCOTT@test> select * from ticd10_org minus select * from ticd10;
no rows selected

SCOTT@test> analyze table scott.ticd10 validate structure;
Table analyzed.

SCOTT@test> analyze table scott.ticd10_org validate structure;
Table analyzed.

--沒有資料丟失,說明是可行。

4.總結:
--測試說明以上方法是可行的。沒有做大規模的測試,真不敢在遷移中使用。
--真正遷移使用,估計自己也不敢用,保險還是選擇傳統的方式。僅僅為了學習的需要,做了這個測試。

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

相關文章