IMP & EMP實例

EXP導出

一.導出前準備:

1.設置NLS_LANG環境變量

(1)查看數據庫用的啥子字符集

col PARAMETER for a20

col VALUE for a30

select * from nls_database_parameters
where PARAMETER in ('NLS_LANGUAGE','NLS_TERRITORY','NLS_CHARACTERSET')
/

PARAMETER            VALUE
-------------------- ------------------------------
NLS_LANGUAGE         AMERICAN
NLS_TERRITORY        AMERICA
NLS_CHARACTERSET     AL32UTF8

 

(2)指定當前shell的NLS_LANG參數(即設置exp工具的字符集)

[oracle@test64 ~]$ export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

2.查看要導出的幾張表大小,估算dmp文件大小(實際值一般會比這少,因爲導出的是使用了的塊,另外exp支持壓縮,而expdp是自動壓縮的)

 

col SEGMENT_NAME for a15
col PARTITION_NAME for a20
col size for a10

select SEGMENT_NAME,PARTITION_NAME,BYTES/1024/1024 ||' m' "size" from user_segments
where PARTITION_NAME like 'xxxxx_201111_%'
/

SEGMENT_NAME    PARTITION_NAME       size
--------------- -------------------- ----------
xxxxx           xxxxx_201111_1      288 m
xxxxx           xxxxx_201111_2      296 m
xxxxx           xxxxx_201111_3      304 m

 

 

3.查看要導出的磁盤是否有空間

[oracle@test64 backup]$ df -h .
Filesystem            容量  已用 可用 已用% 掛載點
/dev/mapper/VolGroup01-backup
                      4.0G  2.8G 1014M  74% /backup

二.開始導出

[oracle@test64 backup]$ exp xxxxx/xxxxx direct=y log=/backup/test_exp.log grants=n indexes=n constraints=n triggers=n file=test_exp.dmp tables=(schema.table:xxxxx_201111_1,schema.table:xxxxx_201111_2,schema.table:xxxxx_201111_3)

 

紅色參數請按自身情況設置。默認都是y

因爲導出的是分區表,並沒有將整表導出,可能會報EXP-00091: Exporting questionable statistics.
EXP-00091報錯原因及解決辦法請看http://blog.sina.com.cn/s/blog_8e5b826701011v2a.html

 

最後導出834M的dmp文件,耗時大概是1分多鐘

 

=================================================================================================

 

IMP導入

三.導入前準備

1.根據要導入的數據庫,設置NLS_LANG環境變量

2.查看要導入的表空間是否夠用

 

四.開始導入

[oracle@test64 backup]$ nohup imp system/oracle log=/backup/test_imp.log ignore=y file=test_exp.dmp fromuser=webdb touser=webdb tables=(schema.table:xxxxx_201111_1,schema.table:xxxxx_201111_2,schema.table:xxxxx_201111_3 buffer=40960000 &

如果指定了fromuser和touser參數,再指定schema就會報錯,將schema去掉就行了

buffer參數是導入時使用的緩存,數據從硬盤中的dmp文件讀入緩存,再從緩存寫入數據庫dbf文件。這個buffer並不是越大越好

 

導入時間25分鐘

 

參考書籍《塗抹ORACLE--三思筆記之一步一步學oracle》第12章import/export導入和導出數據

 

 

================================================================================================

表模式、用戶模式、表空間模式、數據庫模式

如果不是用dbca建庫,而是手工建庫的。必須首先執行cataxp.sql或catalog.sql(後者中包含調用cataxp.sql的語句)

cataxp.sql腳本:創建IMPORT/EXPORT所需數據字典及相關視圖、EXP_FULL_DATABASE、IMP_FULL_DATABASE角色的創建並授權給dba用戶

如果需要導出或導入其他人的schema,則分別需要以上2個權限。

grant EXP_FULL_DATABASE to scott;

exp scott/oracle@orcl

在執行跨版本的數據遷移任務時,儘可能用低版本的EXP執行導出(源端和目標端數據庫版本中,哪個低就用哪個執行導出),儘可能用目標端數據庫的IMP版本執行導入。

exp help=y

imp和emp讀取參數時,以最後讀取到的爲準

IMP和EMP無法遷移外部表的數據

所謂的全庫導出,只是邏輯上的全庫,只導出與用戶數據相關的對象。

exp \'sys/oracle as sysdba\'  tables=oe.PURCHASEORDER file=PURCHASEORDER.dmp log=PURCHASEORDER.log

[oracle@test64 exp]$  exp system/oracle owner=scott file=scott.dmp log=scott.log grants=n indexes=n constraints=n triggers=n

Note: grants on tables/views/sequences/roles will not be exported
Note: indexes on tables will not be exported
Note: constraints on tables will not be exported

windows系統
FAT16    2G
FAT32    4G
NTFS     2T

linux系統
ext2
Block大小    KB   2KB  4KB
最大單一檔案限制  16GB  256GB  2TB
最大檔案系統總容量  2TB  8TB  16TB

[root@test64 ~]# tune2fs -l /dev/sda1 | grep -i "block size"
Block size:               1024

常規導出,BUFFER=512000  參數,5M,影響導出速度

direct=y直接路徑導入法,recordlength指定exp的i/o buffer,最大不超過65535,設置爲數據庫DB_BLOCK_SIZE的整數倍比較好。16K、32K、64K,建議設置爲65545

直接路徑導出的條件:
1.  需命令行或者使用參數文件
2.  當有LOB類型列時自動會轉化爲常規路徑法,建議即使是直接路徑導出,也設置recordlength和buffer兩個參數
3.  不支持表空間模式
4.  不能指定query參數

IMP導入的參數與EXP並沒有直接關係,如以表模式導出的dump文件,可以用IMP以用戶模式或full模式導入。

IMP的幾個條件
1.  生成dump文件的數據庫版本(包括小版本),如果比目標數據庫服務器的版本高,導入可能失敗。
2.  生成dump文件時如果用的是具有dba或者exp_full_database角色的用戶,導入時也必須有相應的權限。
3.  導出的數據中是否含LOB類型列、分區表、分區索引等,如果有,可能在導入前也需要做一些準備工作

導入表和導出表的順序
create table ---> 創建表數據(insert、dump) ---> 創建位圖index ---> create constraints、views、produces、trigger並啓動 ---> 導入bitmap、function-based、domain等類型索引


當目標表空間環境與源表空間環境不同的時候
1.  導入表時,默認會首先導入“導出時表所在的”表空間,如果沒找到,會保存到“導入的”用戶默認的表空間

2.  如果導入的表中含有LOB、分區表、分區索引等類型的對象,需要先創建這些對象,再執行導入。

僅導入表結構,不要數據(可用於導數據庫的機構)
事先需要準備好用戶,表空間

imp後面加個參數  rows=n   即可  (exp也支持這個參數)

IMP可能會出現的幾個問題
1.對象已存在
ignore=n(默認),IMP輸出對象創建錯誤的信息,導致出錯的對象會被跳過,IMP繼續處理後續的對象。如果當前處理的對象類型是表的話,那麼數據並不會被導入。
ignore=y,如果對象已存在,IMP會忽略這個問題,繼續向對象插入數據,無論表中是否有數據、或有重複數據。IMP有可能會因報其他錯誤而中止。即使沒有中止,也有可能造成一些邏輯錯誤。

2.記錄不一致
目標端沒有滿足源端的數據格式要求

3.序列未變
如果ignore=y,且目標端有同名的序列,那麼目標端的序列值不會有改變,如果想目標端的序列值跟源端一樣,就刪除目標端同名的序列

4.重複數據
如果ignore=y,且表中不含唯一索引、唯一約束的話
注:導入前確保不會記錄重複、導入後查看是否有重複記錄、確認爲錯誤數據後手工刪除

5.記錄未被完全導入
如果ignore=y,且目標表有唯一索引、唯一約束、或其他約束的話,一旦發現要導入的數據不符合當前約束條件,導入就會報錯(方便分析原因),然後跳過該條數據,繼續處理下一條。
注:NOT NULL、唯一約束、主鍵(或not null+唯一索引)、外鍵、check約束

導入834M文件,buffer=40960000

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章