|
摘自:宏貝思
Export 和 Import 是一對讀寫Oracle數(shù)據(jù)的工具. Export 將 Oracle 數(shù)據(jù)庫中的數(shù)據(jù)輸出到操作系統(tǒng)文件中, Import 把這些文件中的數(shù)據(jù)讀到Oracle 數(shù)據(jù)庫中. Export/Import可以用來完成以下工作: 數(shù)據(jù)歸檔, 數(shù)據(jù)庫升級, 備份數(shù)據(jù)庫, 把數(shù)據(jù)從一個數(shù)據(jù)庫移到另一個數(shù)據(jù)庫, 回收數(shù)據(jù)庫存儲碎片等等.
使用Export除了要保證磁盤或磁帶上有足夠的空間, 還必須執(zhí)行expvew.sql和expvew.sql來創(chuàng)建Export使用的示圖, 并創(chuàng)建EXP_FULL_DATABASE ROLE. 使用Export的用戶應具有CREATE SESSION的權限, 若要Export其他用戶的表還要有EXP_FULL_DATABASE ROLE.同樣, 使用Import必須用catex.sql來創(chuàng)建IMP_FULL_DATABASE ROLE. 使用Import的用戶應具有CREATE SESSION的權限. Import只能讀入用Export創(chuàng)建的文件. 如果該文件是全庫Export, 使用Import的用戶還要有IMP_FULL_DATABASE ROLE.
Export/Import有三個級別: 表級, 用戶級和全數(shù)據(jù)庫級.
表級允許Export/Import指定的表而不涉及其他數(shù)據(jù)庫對象. 用戶級Export/Import只針對屬于指定用戶的全部數(shù)據(jù)庫對象. 只有擁有EXP_FULL_DATABASE/IMP_FULL_DATABASE ROLE 的用戶才能使用全數(shù)據(jù)庫級的Export/Import.
有三種方式執(zhí)行Export/Import: 參數(shù)文件方式, 命令行方式和交互式.
使用參數(shù)文件是一種比較好的方式, 格式為:
Exp <username/password>; PARFILE = <filename>;
Imp <username/password>; PARFILE = <filename>;
命令行方式是指在命令行中指定參數(shù):
Exp <username/password>; TABLES = (emp,dept) GRANTS = y
Imp <username/password>; FROMUSER = scott TOUSER = test TABLES = (emp,dept)
交互式只要敲入Exp或Imp然后回答屏幕上的提問即可.
下面介紹一些EXPORT/IMPORT的使用技巧
- 把數(shù)據(jù)庫對象從一個用戶移到另一個用戶
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
- 把數(shù)據(jù)庫對象從一個表空間移到另一個表空間
建表時可以指定表空間, 表空間一經(jīng)確定就部能隨意改變. 若要表 T 從表空間 tbs1移到表空間 tbs2, 就要采用以下方法:
- exp <user/passwd>; tables = T
- imp <user/passwd>; tables = T indexfile = temp.sql
- drop table T
- 編輯 temp.sql 只保留所需的建表命令并指定表空間為tbs2
- 以表的所有者執(zhí)行temp.sql
- imp <user/passwd>; tables = T ignore = Y
- 只輸出一個的表空間
通常數(shù)據(jù)庫設計成用戶若屬于某個表空間, 那么這個用戶創(chuàng)建的數(shù)據(jù)庫對象也在該表空間內(nèi).
Export某個表空間可用如下方法:
- 查看表空間內(nèi)所有用戶
spool owners
select owner
from dba_segments
where tablespace_name = ‘<TablespaceName>;‘;
spool off
- 查看表空間內(nèi)所有數(shù)據(jù)庫對象
spool objects
select owner, object_name, object_type
from dba_objects
where owner = ‘owner1‘
or owner = ‘owner2‘
...
or owner = ‘ownern‘;
spool off
- 作表級Export
- 從Exp文件中提取創(chuàng)建數(shù)據(jù)庫對象的命令
在IMPORT時使用 ‘INDEXFILE = FileName‘, IMPORT把創(chuàng)建數(shù)據(jù)庫對象的命令輸出到指定的文件中, 編輯后運行這個文件就能建立數(shù)據(jù)庫對象.
下面介紹Export/Import 使用中幾個常見的問題和解決辦法
- Export/Import 使用不同的字符集
Export文件中包含著字符信息. 如過輸入/輸出都使用擔字節(jié)字符集, 如EBCDIC或US7ASCII, 輸入時將自動進行字符集轉(zhuǎn)換. 轉(zhuǎn)換過程中, 若輸出文件中含有的目標字符集中不能匹配的字符會自動設成缺省字符.
對于多字節(jié)字符集, 如ZHS16CGB231280, 通常不能自動轉(zhuǎn)換, 只有在字符串長度不變的情況下才能自動轉(zhuǎn)換.
- 空間不夠 -- 碎片問題
有些時候, 即使數(shù)據(jù)庫仍有足夠的空間, 使用IMPORT時卻出空間不夠的錯誤. 出現(xiàn)這種現(xiàn)象通常是由于數(shù)據(jù)庫中存在碎片, 即有很多小的不連續(xù)的空閑空間. 解決辦法是先將數(shù)據(jù)庫全庫EXPORT(FULL=Y), SHUTDOWN數(shù)據(jù)庫, 重新建庫(CREATE DATABASE)后用IMPORT FULL=Y恢復數(shù)據(jù).
- ROLLBACK段不夠
Export/Import使用過程中, 如果數(shù)據(jù)量很大會出現(xiàn)‘ROLLBACK段不夠‘的錯誤. 這時要建一個足夠大的ROLLBACK段, 使它ONLINE而其他ROLLBACK段OFFLINE. 這樣, Export/Import使用這個大ROLLBACK段, 從而避免上述現(xiàn)象.
| |
|
|