前幾天做了一個自動備份,然後嘗試在別的數據庫中導入時發現,新導入的數據庫,缺少了好多表。
一開始以爲自己導入有問題,查詢了好久發現不是。
然後確認自己的導出dmp文件是不是有問題,發現確實有問題,導出的dmp文件中本身就缺少好多表格。
刨根問底,發現了問題所在!,這是Oracle的一個機制,空表是無法exp導出的。這個很總要~~~~ 切記
具體解決方案如下,要是參考了別人的內容:
參考文獻:http://ligaosong.iteye.com/blog/1317886
根據個人情況整理如下:
根據個人情況,導出表後,發現缺少部分表結構。開始以爲只是是我的導出語句編寫錯誤,後來發現這是因爲空表沒有導出導致的。
這裏通過上文實現導出全部內容,實際情況如下:
select instance_name from v$instance; -- 數據庫實例名字
select * from user_tables where TABLESPACE_NAME = 'XXXX' ;
-- 數據庫某一個用戶下的全部表內容
然後查詢“XXXX”用戶下的空表
select * from user_tables where TABLESPACE_NAME = 'XXXX' AND INITIAL_EXTENT is null
或者
select * from user_tables where TABLESPACE_NAME = 'XXXX' AND INITIAL_EXTENT = 0
拼接“XXXX”用戶下的空表
select 'alter table '||table_name||' allocate extent;' from user_tables where TABLESPACE_NAME = 'XXXX' AND INITIAL_EXTENT is null
然後執行
alter table YYY_TABLE allocate extent;
最後執行導出用戶下的全表內容。
root登錄
su - oracle
exp 用戶名/密碼@數據庫名 file=/home/oracle/exp.dmp log=/home/oracle/exp_smsrun.log
就可以了!