ORACLE11g匯入匯出資料
匯出:exp 使用者名稱/密碼@ip:埠號/例項名 file=路徑
匯入:imp user/[email protected]/orcl fromuser=sinoep touser=sinoep file=e:\sinoepdata.dmp
一、EXP: 有三種主要的方式(完全、使用者、表)
1、完全:
EXP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULL.DMP FULL=Y
如果要執行完全匯出,必須具有特殊的許可權
2、使用者模式:
EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC
這樣使用者SONIC的所有物件被輸出到檔案中。
3、表模式:
EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC TABLES=(SONIC)
這樣使用者SONIC的表SONIC就被匯出
二、IMP: 具有三種模式(完全、使用者、表)
1、完全:
IMP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULL.DMP FULL=Y
2、使用者模式:
IMP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP FROMUSER=SONIC TOUSER=SONIC
這樣使用者SONIC的所有物件被匯入到檔案中。必須指定FROMUSER、TOUSER引數,這樣才能匯入資料。
3、表模式:
EXP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC TABLES=(SONIC)
這樣使用者SONIC的表SONIC就被匯入。
三、Oracle 11G在用EXP 匯出時,空表不能匯出解決
11G中有個新特性,當表無資料時,不分配segment,以節省空間
解決方法:
1、insert一行,再rollback就產生segment了。
該方法是在在空表中插入資料,再刪除,則產生segment。匯出時則可匯出空表。
2、設定deferred_segment_creation 引數
show parameter deferred_segment_creation
NAME TYPE VALUE
deferred_segment_creation boolean TRUE
SQL> alter system set deferred_segment_creation=false;
系統已更改。
SQL> show parameter deferred_segment_creation
NAME TYPE VALUE
deferred_segment_creation boolean FALSE
該引數值預設是TRUE,當改為FALSE時,無論是空表還是非空表,都分配segment。
需注意的是:該值設定後對以前匯入的空表不產生作用,仍不能匯出,只能對後面新增的表產生作用。如需匯出之前的空表,只能用第一種方法。
搞了我好久,最後查到這個方法。
先查詢一下當前使用者下的所有空表
select table_name from user_tables where NUM_ROWS=0;
用以下這句查詢空表
select ‘alter table ‘||table_name||’ allocate extent;’ from user_tables where num_rows=0
把查詢結果匯出,執行匯出的語句
’ALTERTABLE’||TABLE_NAME||’ALLOCATEEXTENT;’
alter table AQ
alter table AQ
alter table AQ
alter table AQ
alter table AQ
alter table AQ
alter table AQ
alter table AQ
alter table AQ
‘ALTERTABLE’||TABLE_NAME||’ALLOCATEEXTENT;’
alter table AQ
alter table AQ
alter table AQ
alter table AQ
然後再執行
exp 使用者名稱/密碼@資料庫名 file=/home/oracle/exp.dmp log=/home/oracle/exp_smsrun.log
成功!