Oracle資料庫備份與恢復之exp/imp(匯出與匯入裝庫與卸庫)
1. 獲取幫助
$ exp help=y
$ imp help=y
注:做exp/imp 操作的時候如果是非DBA使用者,則需要賦予
grant exp_full_database to username;
grant imp_full_database to username;
許可權才可,並非必須是DBA使用者才可exp/imp操作
2. 三種工作方式
(1)互動式方式
$ exp // 然後按提示輸入所需要的引數
(2)命令列方式
$ exp user/pwd@dbname file=/oracle/test.dmp full=y // 命令列中輸入所需的引數
(3)引數檔案方式
$ exp parfile=username.par // 在引數檔案中輸入所需的引數
引數檔案 username.par 內容 userid=username/userpassword buffer=8192000
compress=n grants=y
file=/oracle/test.dmp full=y
3. 三種模式
(1)表方式,將指定表的資料匯出/匯入。
匯出:匯出一張或幾張表:$ exp user/pwd file=/dir/xxx.dmp log=xxx.log tables=table1,table2
匯出某張表的部分資料
$ exp user/pwd file=/dir/xxx.dmp log=xxx.log tables=table1 query=\“where col1=\‘…\’and col2 \
匯入:匯入一張或幾張表
$ imp user/pwd file=/dir/xxx.dmp log=xxx.log tables=table1,
table2 fromuser=dbuser touser=dbuser2 commit=y ignore=y
(2)使用者方式,將指定使用者的所有物件及資料匯出/匯入。
匯出:$ exp user/pwd file=/dir/xxx.dmp log=xxx.log wner=(xx, yy)
只匯出資料物件,不匯出資料 (rows=n )
$ exp user/pwd file=/dir/xxx.dmp log=xxx.log wner=user rows=n
匯入:$ imp user/pwd file=/dir/xxx.dmp log=xxx.log fromuser=dbuser touser=dbuser2
commit=y ignore=y
(3)全庫方式,將資料庫中的所有物件匯出/匯入匯出:
$ exp user/pwd file=/dir/xxx.dmp log=xxx.log full=ycommit=y ignore=y
匯入:$ imp user/pwd file=/dir/xxx.dmp log=xxx.log fromuser=dbuser touser=dbuser2
1.2 高階選項
1. 分割成多個檔案
以多個固定大小檔案方式匯出:這種做法通常用在表資料量較大,單個 dump檔案可能會超出檔案系統的限制的情況
$ exp user/pwd file=1.dmp,2.dmp,3.dmp,…filesize=1000m log=xxx.log full=y
以多個固定大小檔案方式匯入
$ imp user/pwd file=1.dmp,2.dmp,3.dmp,… filesize=1000m
tables=xxx fromuser=dbuser touser=dbuser2 commit=y ignore=y
2. 增量匯出/匯入
// oracle 9i 以後 exp 不再支援 inctype
必須為 SYS 或 SYSTEM 才可執行增量匯出匯入
增量匯出: 包括三個型別:
(1)“完全”增量匯出(Complete) // 備份整個資料庫
$ exp user/pwd file=/dir/xxx.dmp log=xxx.log inctype=complete
(2)“增量型”增量匯出 匯出上一次備份後改變的資料。
$ exp user/pwd file=/dir/xxx.dmp log=xxx.log inctype=incremental
(3) “累計型”增量匯出(Cumulative)只匯出自上次“完全”匯出之後資料庫中變化 了的資訊。
$ exp user/pwd file=/dir/xxx.dmp log=xxx.log inctype=cumulative
增量匯入:$ imp usr/pwd FULL=y inctype=system/restore/inct ype
其中:
SYSTEM: 匯入系統物件
RESTORE: 匯入所有使用者物件
3. 以SYSDBA進行匯出/匯入
1. 用於 Oracle 技術支援
2. 用於表空間傳輸
例:$ imp \'usr/pwd@instance as sysdba\' tablespaces=xx transport_tablespace=y file=xxx.dmp datafiles=xxx.dbf $ imp file=expdat.dmp userid=“”“sys/password as sysdba”“” transport_tablespace=y“datafile=(c:tempapp_data,c:tempapp_index)”
4. 表空間傳輸 (速度快)
表空間傳輸是8i 新增加的一種快速在資料庫間移動資料的一種辦法,是把一個資料庫上的格式資料檔案附加到另外一個資料庫中,而不是把資料匯出成 dmp 檔案,這 在有些時候是非常管用的,因為傳輸表空間移動資料就象複製檔案一樣快。
1.關於傳輸表空間有一些規則 (10g前):
源資料庫和目標資料庫必須執行在相同的硬體平臺上。
源資料庫與目標資料庫必須使用相同的字符集。
源資料庫與目標資料庫一定要有相同大小的資料塊
目標資料庫不能有與遷移表空間同名的表空間
SYS 的物件不能遷移
必須傳輸自包含的物件集
有一些物件,如物化檢視,基於函式的索引等不能被傳輸(同位元組序檔案的跨平臺可以用更換資料檔案的檔案頭的方法)
(10g 支援跨平臺的表空間傳輸,只要作業系統位元組順序相同,就可以進行表空間 傳輸。需要使用 RMAN轉換檔案格式,略)
2. 檢測一個表空間是否符合傳輸標準的方法:
SQL > exec sys.dbms_tts.transport_set_check(‘tablespace_name’,true); SQL > select * from sys.transport_set_violations;
如果沒有行選擇,表示該表空間只包含表資料,並且是自包含的。對於有些非自包含的表空間,如資料表空間和索引表空間,可以一起傳輸。
3. 簡要使用步驟:
如果想參考詳細使用方法,也可以參考 ORACLE聯機幫助。
1.設定表空間為只讀(假定表空間名字為 APP_Data 和 APP_Index)
SQL > alter tablespace app_data read only; SQL > alter tablespace app_index read only;
2.發出 EXP命令
SQL> host exp userid=“”“sys/password as sysdba”“” transport_tablespace=y tablespaces=(app_data, app_index)
以上需要注意的是。為了在 SQL 中執行 EXP,USERID 必須用三個引號,在 UNIX中也必須注意 避免“/”的使用。在 816和以後,必須使用 sysdba才能操作。這個命令在 SQL中必須放置在一行(這裡是因為顯示問題放在了兩行)
3.拷貝。dbf資料檔案(以及。dmp檔案)到另一個地點,即目標資料庫可以是 cp(unix)或 cop y(windows)或通過 ftp傳輸檔案(一定要在 bin方式)
4.把本地的表空間設定為讀寫
$ alter tablespace app_data read write;
$ alter tablespace app_index read write;
5.在目標資料庫附加該資料檔案 (直接指定資料檔名)
(表空間不能存在,必須建立相應使用者名稱或者用 fromuser/touser)
$ imp file=expdat.dmp userid=“”“sys/password as sysdba”“” transport_tablespace=y datafiles=(“c:\app_data.dbf,c:\app_index.dbf”) tablespaces=app_data,app_index tts_owners=hr,oe
6.設定目標資料庫表空間為讀寫
$ alter tablespace app_data read write;
$ alter tablespace app_index read write;
1.3 優化
1. 加快exp速度
加大large_pool_size,可以提高 exp的速度 採用直接路徑的方式(direct=y),資料不需要經過記憶體進行整合和檢查。 設定較大的 buffer,如果匯出大物件,小buffer會失敗。
export檔案不在ORACLE使用的驅動器上,不要export到NFS檔案系統。
UNIX環境:用管道模式直接匯入匯出來提高 imp/exp的效能
2. 加快imp速度
建立一個indexfile,在資料 import完成後在建立索引將import檔案放在不同的驅動器上增加 DB_BLOCK_BUFFERS增加 LOG_BUFFER
用非歸檔方式執行 ORACLE:ALTER DATABASE NOARCHIVELOG; 建立大的表空間和回滾段,OFFLINE其他回滾段,回滾段的大小為最大表的 1/2 使用 COMMIT=N
使用 ANALYZE=N
單使用者模式匯入
UNIX環境:用管道模式直接匯入匯出來提高 imp/exp的效能
3. 通過unix/Linux PIPE管道加快exp/imp速度
通過管道匯出資料:
1.通過 mknod -p 建立管道
$ mknod /home/exppipe p // 在目錄/home下建立一個管道 exppipe注意引數 p
2.通過 exp和 gzip匯出資料到建立的管道並壓縮
$ exp test/test file=/home/exppipe & gzip < /home/exppipe > exp.dmp.gz
$ exp test/test tables=bitmap file=/home/newsys/test.pipe & gzip < /home/newsys/test.pipe > bitmap.dmp.gz
3.匯出成功完成之後刪除建立的管道
$ rm -rf /home/exppipe
匯出指令碼:
###UNIX下 ORACLE資料庫通過 PIPE管道進行備份
###### using "export" and "tar" command to bakup oracle datebase #######
trap "" 1 #nohup
LOGFILE=/opt/bakup/log/bakup_ora.log
export LOGFILE
DUMPDIR=/archlog_node1
export DUMPDIR
exec >$LOGFILE 2>&1
echo
echo ' Begin at ' `date`
echo
# clear old result file
cd $DUMPDIR
if [ -f exp.dmp.Z ]
then echo "clear old result file"
rm exp.dmp.Z
fi
# make pipe
mkfifo exp.pipe
chmod a+rw exp.pipe
# gain the dmp.Z file
compress < exp.pipe > exp.dmp.Z &
su -u oracle -c "exp userid=ll/ll file=$DUMPDIR/exp.pipe full=y buffer=20000000"
echo
echo ' exp end at '`date`
echo
# rm pipe
rm exp.pipe
# tar the dmp.Z file to tape
mt -f /dev/rmt/0 rew
tar cvf /dev/rmt/0 exp.dmp.Z
echo
echo ' tar end at '`date`
echo
通過管道匯入生成的檔案:
1.通過 mknod -p 建立管道
$ mknod /home/exppipe p
2.匯入生成的壓縮檔案
$ imp test/test file=/home/exppipe fromuser=test touser=macro & gunzip < exp.dmp.gz > /home/exppipe
3.刪除管道
$ rm –fr /home/exppipe
4. 全庫匯入的一般步驟
注意:在匯出時,需要通過toad或其他工具提取源資料庫建立主鍵和索引的指令碼
1. 先全庫加 rows=n 把結構導進去
$ imp system/manager file=exp.dmp log=imp.log full=y rows=n indexes=n
2. 使業務使用者的觸發器失效/刪除主鍵和唯一索引
spool drop_pk_u.sql
select 'alter table '||table_name||' drop constraint '||constraint_name||';'
from user_constraints
where constraint_type in ('P','U');
/
spool off
spool disable_trigger.sql
select 'alter trigger '||trigger_name||' disable;'
from user_triggers;
/
spool off
@drop_pk_u.sql
@disable_trigger.sql
3. 以 ignore=y全庫匯入$ imp system/manager file=exp.dmp log=imp.log full=y ignore=y
4. 通過 toad或其他工具提取源資料庫建立主鍵和索引的指令碼,在目標資料庫中建立主鍵和索引。使觸發器生效。
1.4 常見問題
1. 字符集問題
ORACLE多國語言設定是為了支援世界範圍的語言與字符集,一般對語言提示, 貨幣形式,排序方式和 CHAR,VARCHAR2,C LOB,LONG 欄位的資料的顯示等有效。ORACLE 的多國語言設定最主要的兩個特性就是國家語言設定與字符集設定,國家語 言設定決定了介面或提示使用的語言種類,字符集決定了資料庫儲存與字符集有關資料(如文字)時候的編碼規則。
ORACLE字符集設定,分為資料庫字符集和客戶端字符集環境設定。在資料庫端,
字符集在建立資料庫的時候設定,並儲存在資料庫props$表中。
在客戶端的字符集環境比較簡單,主要就是環境變數或登錄檔項 NLS_ LANG,注意 NLS_LANG的優先順序別為:引數檔案
使用一點點技巧,就可以使匯出/匯入在不同的字符集的資料庫上轉換資料。這裡需要一個2進位制檔案編輯工具即可,如 uedit32.用編輯方式開啟匯出的dmp檔案,獲取 2 、3 位元組 的內容 , 如 00 01 , 先把它轉換 為 10 進位制數,為1 ,使用函式
NLS_CHARSET_NAME 即可獲得該字符集:
SQL> select nls_charset_name(1) from dual; NLS_CHARSET_NAME(1)
------------------- US7ASCII
可以知道該dmp檔案的字符集為 US7ASCII,如果需要把該 dmp檔案的字符集換成ZHS16GBK,則需要用 NLS_CHARSET_ID 獲取該字符集的編號: SQL> select nls_charset_id('zhs16gbk') from dual; NLS_CHARSET_ID('ZHS16GBK')
--------------------------
把852換成16進位制數,為354,把 2、3位元組的 00 01 換成03 54,即完成了把該 dmp檔案字符集從us7ascii 到 zhs16gbk 的轉化,這樣,再把該dmp檔案匯入到 zhs16gbk 字符集的資料庫就可以了。
2. 版本問題
Exp/Imp很多時候,可以跨版本使用,如在版本7與版本8之間匯出匯入資料,但這樣做必須選擇正確的版本,規則為:總是使用IMP的版本匹配資料庫的版本,如果要匯入到 816,則使用816的匯入工具。總是使用 EXP 的版本匹配兩個資料庫中低的那個版本,如在815與816之間互導,則使用815的EXP 工具。
imp和exp版本不能往上相容: imp 可以匯入低版本 exp生成的檔案, 不能匯入高版本 exp生成的檔案。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24558279/viewspace-717531/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle資料庫備份與恢復之一:exp/imp(匯出與匯入裝庫與卸庫)Oracle資料庫
- Oracle 資料庫備份與恢復總結-exp/imp (匯出與匯入裝庫與卸庫)Oracle資料庫
- Oracle資料庫備份與恢復之匯出/匯入(EXP/IMP)、熱備份和冷備份Oracle資料庫
- Oracle匯入(imp )與匯出(exp )Oracle
- 使用exp/imp匯出匯入資料(邏輯備份恢復)
- Oracle資料庫匯入匯出。imp匯入命令和exp匯出命令Oracle資料庫
- exp/imp備份與還原oracle資料庫Oracle資料庫
- Oracle備份與恢復系列 五 續 EXP/IMP遷移、複製資料庫Oracle資料庫
- Oracle資料庫備份與恢復之RMANOracle資料庫
- Mongodb的備份恢復與匯出匯入MongoDB
- Mysql 資料庫匯入與匯出MySql資料庫
- Oracle備份與恢復系列 五 邏輯匯入匯出Oracle
- oracle資料庫的備份與恢復Oracle資料庫
- 備份與恢復:polardb資料庫備份與恢復資料庫
- oracle資料匯出匯入(exp/imp)Oracle
- oracle 備份資料庫,匯出資料庫Oracle資料庫
- Windows DOS窗體下Oracle 資料庫的匯入匯出(IMP/EXP)命令WindowsOracle資料庫
- Oracle資料庫備份與恢復之RMAN2Oracle資料庫
- rman資料庫全庫備份與恢復資料庫
- Oracle資料庫的備份與恢復(轉)Oracle資料庫
- Oracle 資料庫的備份與恢復(轉)Oracle資料庫
- Oracle資料匯入匯出imp/exp命令Oracle
- oracle資料的匯入匯出imp/expOracle
- postgresql備份與恢復資料庫SQL資料庫
- mongo資料庫備份與恢復Go資料庫
- 資料庫的備份與恢復資料庫
- Informix資料庫備份與恢復ORM資料庫
- 資料匯入匯出EXP/IMP
- exp/imp匯出匯入資料
- xml與資料庫中資料的匯入匯出XML資料庫
- Oracle expdp/impdp匯出匯入命令及資料庫備份Oracle資料庫
- Oracle expdp/impdp匯入匯出備份資料庫指令碼Oracle資料庫指令碼
- ORACLE RAC資料庫的備份與恢復(6)Oracle資料庫
- ORACLE RAC資料庫的備份與恢復(5)Oracle資料庫
- ORACLE RAC資料庫的備份與恢復(4)Oracle資料庫
- ORACLE RAC資料庫的備份與恢復(3)Oracle資料庫
- ORACLE RAC資料庫的備份與恢復(2)Oracle資料庫
- ORACLE RAC資料庫的備份與恢復(1)Oracle資料庫