export/import 使用技巧與常見錯誤
export 和 import 是一對讀寫oracle資料的工具. export 將 oracle 資料庫中的資料輸出到作業系統檔案中, import 把這些檔案中的資料讀到oracle 資料庫中. export/import可以用來完成以下工作: 資料歸檔, 資料庫公升級, 備份資料庫, 把資料從乙個資料庫移到另乙個資料庫, **資料庫儲存碎片等等.
使用export除了要保證磁碟或磁帶上有足夠的空間, 還必須執行expvew.sql和expvew.sql來建立export使用的示圖, 並建立exp_full_database role. 使用export的使用者應具有create session的許可權, 若要export其他使用者的表還要有exp_full_database role.同樣, 使用import必須用catex.sql來建立imp_full_database role. 使用import的使用者應具有create session的許可權. import只能讀入用export建立的檔案. 如果該檔案是全庫export, 使用import的使用者還要有imp_full_database role.
export/import有三個級別: 表級, 使用者級和全資料庫級.
表級允許export/import指定的表而不涉及其他資料庫物件. 使用者級export/import只針對屬於指定使用者的全部資料庫物件. 只有擁有exp_full_database/imp_full_database role 的使用者才能使用全資料庫級的export/import.
有三種方式執行export/import: 引數檔案方式, 命令列方式和互動式.
使用引數檔案是一種比較好的方式, 格式為:
exp parfile =
imp parfile =
命令列方式是指在命令列中指定引數:
exp tables = (emp,dept) grants = y
imp fromuser = scott touser = test tables = (emp,dept)
互動式只要敲入exp或imp然後回答螢幕上的提問即可.
下面介紹一些export/import的使用技巧
- 把資料庫物件從乙個使用者移到另乙個使用者
oracle 不允許直接改變表的擁有者, 利用export/import可以達到這一目的.
假設要把表 t 的擁有者user1改為user2, 具體步驟是:
- exp system/manager tables = user1.t
- imp system/manager fromuser = user1 touser = user2 tables = t
- drop table user1.t
- 把資料庫物件從乙個表空間移到另乙個表空間
建表時可以指定表空間, 表空間一經確定就部能隨意改變. 若要表 t 從表空間 tbs1移到表空間 tbs2, 就要採用以下方法:
- exp tables = t
- imp tables = t indexfile = temp.sql
- drop table t
- 編輯 temp.sql 只保留所需的建表命令並指定表空間為tbs2
- 以表的所有者執行temp.sql
- imp tables = t ignore = y
- 只輸出乙個的表空間
通常資料庫設計成使用者若屬於某個表空間, 那麼這個使用者建立的資料庫物件也在該錶空間內.
export某個表空間可用如下方法:
- 檢視表空間內所有使用者
spool owners
select owner
from dba_segments
where tablespace_name = '';
spool off
- 檢視表空間內所有資料庫物件
spool objects
select owner, object_name, object_type
from dba_objects
where owner = 'owner1'
or owner = 'owner2'
...
or owner = 'ownern';
spool off
- 作表級export
- 從exp檔案中提取建立資料庫物件的命令
在import時使用 'indexfile = filename', import把建立資料庫物件的命令輸出到指定的檔案中, 編輯後執行這個檔案就能建立資料庫物件.
下面介紹export/import 使用中幾個常見的問題和解決辦法
- export/import 使用不同的字符集
export檔案中包含著字元資訊. 如過輸入/輸出都使用擔位元組字符集, 如ebcdic或us7ascii, 輸入時將自動進行字符集轉換. 轉換過程中, 若輸出檔案中含有的目標字符集中不能匹配的字元會自動設成預設字元.
對於多位元組字符集, 如zhs16cgb231280, 通常不能自動轉換, 只有在字串長度不變的情況下才能自動轉換.
- 空間不夠 -- 碎片問題
有些時候, 即使資料庫仍有足夠的空間, 使用import時卻出空間不夠的錯誤. 出現這種現象通常是由於資料庫中存在碎片, 即有很多小的不連續的空閒空間. 解決辦法是先將資料庫全庫export(full=y), shutdown資料庫, 重新建庫(create database)後用import full=y恢復資料.
- rollback段不夠
export/import使用過程中, 如果資料量很大會出現'rollback段不夠'的錯誤. 這時要建乙個足夠大的rollback段, 使它online而其他rollback段offline. 這樣, export/import使用這個大rollback段, 從而避免上述現象.
* 空間不夠 -- 碎片問題
解決辦法是先將資料庫全庫export(full=y), shutdown資料庫, 重新建庫(create database)後用import full=y恢復資料.
*/不同觀點:
解決碎片,應該在表空間這個層次上就可以了,
1。exp 出要整理的表空間的各個使用者。
2。刪除表空間,重新建立該錶空間
3。再imp
- rollback段不夠
/* export/import使用過程中, 如果資料量很大會出現'rollback段不夠'的錯誤. 這時要建乙個足夠大的rollback段, 使它online而其他rollback段offline. 這樣, export/import使用這個大rollback段, 從而避免上述現象.
*/imp時使用引數 commit=y ,就可以避免要求很大的回退段,
imp 到底用哪個rollback段是沒法指定的,
如果系統剛啟動,oracle順序地用 初始化引數檔案中指定的rollback段
而後,事務以「最少使用原則」選取使用rollback段。
除非,在imp前,讓乙個大rollback段online,緊接著imp,
否則很難說,oralce就正好用大rollback段。
exp imp匯出匯入工具的使用
2004 02 余楓 一.匯出工具 exp 1.它是作業系統下乙個可執行的檔案 存放目錄 oracle home bin exp匯出工具將資料庫中資料備份壓縮成乙個二進位制系統檔案.可以在不同os間遷移 它有三種模式 a.使用者模式 匯出使用者所有物件以及物件中的資料 b.表模式 匯出使用者所有表或...
oracle中exp,imp的使用詳解
基本語法和例項 1 exp 有三種主要的方式 完全 使用者 表 1 完全 exp system manager buffer 64000 file c full.dmp full y 如果要執行完全匯出,必須具有特殊的許可權 2 使用者模式 exp sonic sonic buffer 64000 ...
oracle中exp,imp的使用詳解
基本語法和例項 1 exp 有三種主要的方式 完全 使用者 表 1 完全 exp system manager buffer 64000 file c full.dmp full y 如果要執行完全匯出,必須具有特殊的許可權 2 使用者模式 exp sonic sonic buffer 64000 ...