imp/exp資料遷移
- 注意點
--------------------------------------------------------------------
- nls_lang的設定
imp之前,最好show y一下dmp檔案中字符集和目標庫是否一致
-- 匯出資料庫和匯出端客戶端保持一致
資料庫:select * from nls_database_parameters;
客戶端:env|grep NLS_LANG
-- 匯入時
目標庫與源庫有相同字符集,則NLS_LANG與其設定相同即可
目標庫與源庫有不同字符集,則NLS_LANG與匯出端NLS_LANG設定相同即可
此時,要求匯入端是匯出端的嚴格超集,否則會有亂碼
- 版本問題
-- 總是使用IMP的版本匹配資料庫的版本,如:要匯入到817中,使用817的IMP工具。
-- 總是使用EXP的版本匹配兩個資料庫中最低的版本,如:從9201往817中匯入,則使用817版本的EXP工具
- 檢視幫助
exp/imp help=y
- 全庫遷移的例子
--------------------------------------------------------------------
-- 首先要把目標的庫建好,同名、同樣大的表空間建好
-- 用dbartisan等軟體把源庫的使用者的建立語句抓出來,存成一個指令碼,去掉object級的grant語句,在目標庫把這個指令碼執行一下,即把這些使用者建上。
需要說明的是,你只需關注的是你的應用用的使用者,像sys,system,dbsnmp,traceserver等等這些系統使用者都不在你的關心範圍內
-- 執行exp操作
--- 把結構匯出來
exp system/oracle@source_db file=... log=... buffer=... owner=go,... rows=N COMPRESS=N
--- 把資料匯出來
exp system/oracle@source_db file=... log=... buffer=... owner=go,... rows=Y COMPRESS=N GRANTS=N INDEXES=N TRIGGERS=N CONSTRAINTS=N
-- 匯入
--- 先匯入結構
imp system/oracle@target_db file=... log=... buffer=... fromuser=go,... touser=go,... rows=N
--- 把trigger,外來鍵constraint disable掉
--- imp資料
exp system/oracle@target_db file=... log=... buffer=... fromuser=go,... touser=go,... rows=Y GRANTS=N INDEXES=N TRIGGERS=N CONSTRAINTS=N ignore=Y
--- 恢復trigger,約束為enable
---------------------------------------------------------------------------------------------------
- 判斷dmp檔案是以什麼模式匯出的
head expdat.dmp | strings
RENTIRE full
RUSERS owner
RTABLES tables
- 從dmp檔案中抽取建立語句
strings expdat.dmp | grep "CREATE USER"
strings expdat.dmp | grep "CREATE TABLESPACE"
strings expdat.dmp | grep "CREATE PROFILE"
---------------------------------------------------------------------------------------------------
- sys使用者操作
Linux: "\"/ as sysdba\""
Windows: """/ as sysdba"""
---------------------------------------------------------------------------------------------------
- 大量exp匯出效率最佳化
exp go/go owner=go file=expdat.dmp buffer=204800000 compress=n direct=y recordlenth=65535 feedback=10000 log=exp.sql
direct引數的限制:
無法用直接路徑匯出可移動的tablespace,或者用query引數匯出資料庫子集
當匯入匯出的資料庫執行在不同的os下時,必須保證recordlength引數的值一致
- 大量imp匯入提高效率的方法
-- 增大sort_area_size為100M,避免磁碟排序
-- 增加redo日誌組,增大日誌檔案大小
-- 增大log_buffer,不要超過5M
-- 使用陣列插入與提交
-- 重建Index是使用指令碼Nologging方式建立
-- 若系統允許,可同時開多個imp程式來匯入不同的表資料
- 從dmp檔案匯出索引建立語句,以備最後建立索引用 -> idx.sql
imp go/go@orcl fromuser=go touser=go file=expdat.dmp buffer=20480000 indexfile=idx.sql log=imp.sql
- 僅匯入定義(索引除外)
imp go/go@orcl fromuser=go touser=go file=expdat.dmp buffer=20480000 indexes=n rows=n log=imp.sql
-- 目標表nologging並且去掉約束觸發器
alter table t nologging
alter trigger tr disable
-- 只匯入資料(索引除外)
imp go/go@orcl fromuser=go touser=go file=expdat.dmp buffer=20480000 indexes=n rows=y ignore=y feedback=1000 log=imp.sql
-- 建立索引並恢復約束和logging
@/home/oracle/idx.sql
alter table t logging
alter trigger tr enable
-- 最後確認匯入是否成功
select owner, index_name, tablespace_name from dba_indexes where owner = 'GO';
select owner, table_name, tablespace_name from dba_tables where owner = 'GO';
-- imp匯入時排除部分表
先在目標庫建立與待排除表名相同的View,在imp匯入時設定ignore=n即可
---------------------------------------------------------------------------------------------------
- 不匯入資料庫,檢視dmp檔案內容 --- 個數不是很準確
imp go/go full=y show=y log=imp_full_show.sql indexfile=idx_full.sql buffer=204800000 file=/data/exp.dmp
-- idx_full.sql
檢視錶,索引,約束建立語句以及行數等資訊
grep "CREATE*" idx_full.sql |wc -l
grep "CREATE* TABLE\|CREATE GLOBAL* TEMPORARY TABLE" idx_full.sql |wc -l
grep "CREATE* UNIQUE INDEX\|CREATE* INDEX" idx_full.sql |wc -l
grep "CREATE* TABLE\|CREATE* GLOBAL TEMPORARY TABLE\|REM ...* rows" idx_full.sql > count_msmmail.sql
......
-- imp_full_show.sql
檢視函式,包等建立資訊
grep "CREATE* PACKAGE" imp_full_show |wc -l
--------------------------------------------------------------------
- nls_lang的設定
imp之前,最好show y一下dmp檔案中字符集和目標庫是否一致
-- 匯出資料庫和匯出端客戶端保持一致
資料庫:select * from nls_database_parameters;
客戶端:env|grep NLS_LANG
-- 匯入時
目標庫與源庫有相同字符集,則NLS_LANG與其設定相同即可
目標庫與源庫有不同字符集,則NLS_LANG與匯出端NLS_LANG設定相同即可
此時,要求匯入端是匯出端的嚴格超集,否則會有亂碼
- 版本問題
-- 總是使用IMP的版本匹配資料庫的版本,如:要匯入到817中,使用817的IMP工具。
-- 總是使用EXP的版本匹配兩個資料庫中最低的版本,如:從9201往817中匯入,則使用817版本的EXP工具
- 檢視幫助
exp/imp help=y
- 全庫遷移的例子
--------------------------------------------------------------------
-- 首先要把目標的庫建好,同名、同樣大的表空間建好
-- 用dbartisan等軟體把源庫的使用者的建立語句抓出來,存成一個指令碼,去掉object級的grant語句,在目標庫把這個指令碼執行一下,即把這些使用者建上。
需要說明的是,你只需關注的是你的應用用的使用者,像sys,system,dbsnmp,traceserver等等這些系統使用者都不在你的關心範圍內
-- 執行exp操作
--- 把結構匯出來
exp system/oracle@source_db file=... log=... buffer=... owner=go,... rows=N COMPRESS=N
--- 把資料匯出來
exp system/oracle@source_db file=... log=... buffer=... owner=go,... rows=Y COMPRESS=N GRANTS=N INDEXES=N TRIGGERS=N CONSTRAINTS=N
-- 匯入
--- 先匯入結構
imp system/oracle@target_db file=... log=... buffer=... fromuser=go,... touser=go,... rows=N
--- 把trigger,外來鍵constraint disable掉
--- imp資料
exp system/oracle@target_db file=... log=... buffer=... fromuser=go,... touser=go,... rows=Y GRANTS=N INDEXES=N TRIGGERS=N CONSTRAINTS=N ignore=Y
--- 恢復trigger,約束為enable
---------------------------------------------------------------------------------------------------
- 判斷dmp檔案是以什麼模式匯出的
head expdat.dmp | strings
RENTIRE full
RUSERS owner
RTABLES tables
- 從dmp檔案中抽取建立語句
strings expdat.dmp | grep "CREATE USER"
strings expdat.dmp | grep "CREATE TABLESPACE"
strings expdat.dmp | grep "CREATE PROFILE"
---------------------------------------------------------------------------------------------------
- sys使用者操作
Linux: "\"/ as sysdba\""
Windows: """/ as sysdba"""
---------------------------------------------------------------------------------------------------
- 大量exp匯出效率最佳化
exp go/go owner=go file=expdat.dmp buffer=204800000 compress=n direct=y recordlenth=65535 feedback=10000 log=exp.sql
direct引數的限制:
無法用直接路徑匯出可移動的tablespace,或者用query引數匯出資料庫子集
當匯入匯出的資料庫執行在不同的os下時,必須保證recordlength引數的值一致
- 大量imp匯入提高效率的方法
-- 增大sort_area_size為100M,避免磁碟排序
-- 增加redo日誌組,增大日誌檔案大小
-- 增大log_buffer,不要超過5M
-- 使用陣列插入與提交
-- 重建Index是使用指令碼Nologging方式建立
-- 若系統允許,可同時開多個imp程式來匯入不同的表資料
- 從dmp檔案匯出索引建立語句,以備最後建立索引用 -> idx.sql
imp go/go@orcl fromuser=go touser=go file=expdat.dmp buffer=20480000 indexfile=idx.sql log=imp.sql
- 僅匯入定義(索引除外)
imp go/go@orcl fromuser=go touser=go file=expdat.dmp buffer=20480000 indexes=n rows=n log=imp.sql
-- 目標表nologging並且去掉約束觸發器
alter table t nologging
alter trigger tr disable
-- 只匯入資料(索引除外)
imp go/go@orcl fromuser=go touser=go file=expdat.dmp buffer=20480000 indexes=n rows=y ignore=y feedback=1000 log=imp.sql
-- 建立索引並恢復約束和logging
@/home/oracle/idx.sql
alter table t logging
alter trigger tr enable
-- 最後確認匯入是否成功
select owner, index_name, tablespace_name from dba_indexes where owner = 'GO';
select owner, table_name, tablespace_name from dba_tables where owner = 'GO';
-- imp匯入時排除部分表
先在目標庫建立與待排除表名相同的View,在imp匯入時設定ignore=n即可
---------------------------------------------------------------------------------------------------
- 不匯入資料庫,檢視dmp檔案內容 --- 個數不是很準確
imp go/go full=y show=y log=imp_full_show.sql indexfile=idx_full.sql buffer=204800000 file=/data/exp.dmp
-- idx_full.sql
檢視錶,索引,約束建立語句以及行數等資訊
grep "CREATE*" idx_full.sql |wc -l
grep "CREATE* TABLE\|CREATE GLOBAL* TEMPORARY TABLE" idx_full.sql |wc -l
grep "CREATE* UNIQUE INDEX\|CREATE* INDEX" idx_full.sql |wc -l
grep "CREATE* TABLE\|CREATE* GLOBAL TEMPORARY TABLE\|REM ...* rows" idx_full.sql > count_msmmail.sql
......
-- imp_full_show.sql
檢視函式,包等建立資訊
grep "CREATE* PACKAGE" imp_full_show |wc -l
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22558114/viewspace-1086548/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- exp,imp 遷移資料
- 大表exp/imp遷移
- EXP_IMP與dblink資料遷移案例比照
- 誇平臺多個schame資料遷移(exp,imp)
- 用exp、imp遷移包含物化檢視日誌的資料
- [20140827]imp exp 使用管道遷移資料.txt
- Oracle的exp、imp的資料遷移步驟Oracle
- exp imp資料
- exp/imp和expdp/imp在跨使用者邏輯遷移資料時的差異
- [20140828]imp exp 使用管道遷移資料(補充)
- EXP,IMP遷移資料庫的時候註釋亂碼解決方法資料庫
- Oracle備份與恢復系列 五 續 EXP/IMP遷移、複製資料庫Oracle資料庫
- 通過oracle10g exp/imp在不同表空間間遷移資料Oracle
- Oracle資料庫資料遷移或匯出匯入(exp/imp,dblink)應該注意的點(總結)Oracle資料庫
- Oracle中exp,imp(匯入匯出)資料遷移注意事項Oracle
- 資料匯入匯出EXP/IMP
- exp/imp匯出匯入資料
- exp_imp_遷移_同使用者_不同表空間的小記
- oracle資料匯出匯入(exp/imp)Oracle
- exp/imp對資料庫版本的要求資料庫
- 【imp】使用imp工具遷移資料時迂迴地排除特定表的匯入
- exp/imp遷移大表(大小11個G)的疑惑?請指教(已解決)
- Oracle資料匯入匯出imp/exp命令Oracle
- oracle資料庫 exp/imp命令詳解(轉)Oracle資料庫
- oracle資料的匯入匯出imp/expOracle
- Oracle資料庫 Exp/Imp工具效能調優Oracle資料庫
- exp/imp工具
- Oracle imp/expOracle
- EXP/IMP遷移資料庫小技巧-不知道使用者密碼的情況下複製使用者資料庫密碼
- exp/imp備份與還原oracle資料庫Oracle資料庫
- Oracle資料匯入匯出imp/exp命令(轉)Oracle
- 【EXP/IMP】使用EXP /IMP工具“模糊”匯出和匯入
- oracle exp和impOracle
- oracle imp和expOracle
- oracle exp imp 用法Oracle
- EXP&IMP PIPE
- 遷移資料.
- 【遷移】使用rman遷移資料庫資料庫