oracle備份與恢復

2022-09-23 08:47:03 字數 811 閱讀 9649

exp全庫匯出

su - oracle

exp 'user/"123456"@127.0.0.1:1521/orcl' full=y file=/home/oracle/orcl_full.dmp

但是用exp常規匯出會很慢,於是有加入direct=y引數,但是可能會有異常,今天同事分享了一個案例

資料庫版本是oracle 11g,使用exp匯出資料,然後imp匯入。

imp-00019: row rejected due to oracle error 1400

imp-00003: oracle error 1400 encountered

ora-01400: cannot insert null into ("hsvsdata"."tfjygh"."en_lxsds")

從生產導一個屬主到測試,使用了direct=y匯出,結果匯入報如上錯誤,原因是如下:

原因是11g的一個新特性:為了改善效能,對錶新增非空且有預設值列的時候,oracle不會全表更新,只是改了資料字典,這種情況下,exp如果加了引數direct=y導致了丟失了欄位值.不會匯出欄位的預設值,所以報錯了。

11g下的exp 還是別加direct=y 了。

imp全庫匯入

用imp匯入資料使用ignore=y引數的話,如果表存在,那麼會追加資料到表中。

如果不限制ignore引數的話,系統預設是ignore=n,當遇到已經存在的表匯入資料時會提示物件已存在的錯誤。我們要根據實際的需求來決定是否使用這個引數,有些人為了讓匯入的過程不出現錯誤而使用這個引數,我認為沒有必要,這個引數要謹慎使用,否則資料庫中多了很多重複資料都不知道什麼原因。