【EXP/IMP】從exp工具生成的不完整備份檔案中快速獲取資料庫表空間建立語句

secooler發表於2011-03-30
這是一個鮮為人知的技巧,分享在此,希望對大家有幫助。
結論是這樣的:使用exp工具的“full=y”引數生成的備份檔案中,最先寫入的是資料庫表空間的定義資訊,即使在匯出的過程中遇到故障,這部分最先匯出的資料依然可以被imp工具識別並抽取出其中的SQL語句。

實際驗證一下這個過程。

1.使用exp工具生成備份檔案
注意這裡使用exp工具的“full=y”選項對system使用者進行備份。
ora10g@secdb /db_backup$ exp system/oracle file=export_system.dmp full=y

Export: Release 10.2.0.1.0 - Production on Thu Mar 31 22:18:30 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
Export done in WE8ISO8859P1 character set and AL16UTF16 NCHAR character set

About to export the entire database ...
. exporting tablespace definitions
. exporting profiles
. exporting user definitions
. exporting roles
. exporting resource costs
. exporting rollback segment definitions
. exporting database links
. exporting sequence numbers
. exporting directory aliases
. exporting context namespaces
. exporting foreign function library names
. exporting PUBLIC type synonyms
EXP-00008: ORACLE error 1013 encountered
ORA-01013: user requested cancel of current operation
EXP-00000: Export terminated unsuccessfully

在剛剛啟動備份的一瞬間,我們使用“Ctrl+C”快捷鍵終止匯出任務,獲得如上的提示資訊。
如果等待整個匯出過程完成將非常耗時,也不是很有必要。

2.確認生成的備份檔案
ora10g@secdb /db_backup$ ls -l export_system.dmp
-rw-r--r-- 1 oracle oinstall 48K Mar 31 22:18 export_system.dmp

這裡顯示出檔案僅有48K大小,顯然包含的資訊很有限。

3.使用imp工具讀取備份檔案中的SQL語句
ora10g@secdb /db_backup$ imp system/oracle file=export_system.dmp show=y log=export_system.log full=y

Import: Release 10.2.0.1.0 - Production on Thu Mar 31 22:20:28 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

Export file created by EXPORT:V10.02.01 via conventional path
import done in WE8ISO8859P1 character set and AL16UTF16 NCHAR character set
. importing SYSTEM's objects into SYSTEM
 "CREATE UNDO TABLESPACE "UNDOTBS1" BLOCKSIZE 8192 DATAFILE  '/oracle/ora10gR"
 "2/oradata/ora10g/undotbs01.dbf' SIZE 293601280       AUTOEXTEND ON NEXT 524"
 "2880  MAXSIZE 32767M EXTENT MANAGEMENT LOCAL "
 "CREATE TABLESPACE "SYSAUX" BLOCKSIZE 8192 DATAFILE  '/oracle/ora10gR2/orada"
 "ta/ora10g/sysaux01.dbf' SIZE 346030080       AUTOEXTEND ON NEXT 10485760  M"
 "AXSIZE 32767M EXTENT MANAGEMENT LOCAL  AUTOALLOCATE  ONLINE PERMANENT  SEGM"
 "ENT SPACE MANAGEMENT AUTO"
 "CREATE TEMPORARY TABLESPACE "TEMP" BLOCKSIZE 8192 TEMPFILE  '/oracle/ora10g"
 "R2/oradata/ora10g/temp01.dbf' SIZE 26214400       AUTOEXTEND ON NEXT 655360"
 "  MAXSIZE 32767M EXTENT MANAGEMENT LOCAL  UNIFORM. SIZE 1048576"
 "CREATE TABLESPACE "USERS" BLOCKSIZE 8192 DATAFILE  '/oracle/ora10gR2/oradat"
 "a/ora10g/users01.dbf' SIZE 5242880       AUTOEXTEND ON NEXT 1310720  MAXSIZ"
 "E 32767M EXTENT MANAGEMENT LOCAL  AUTOALLOCATE  ONLINE PERMANENT  SEGMENT S"
 "PACE MANAGEMENT AUTO"
 "CREATE TABLESPACE "TBS_SEC_D" BLOCKSIZE 8192 DATAFILE  '/oracle/ora10gR2/or"
 "adata/ora10g/tbs_sec_d_01.dbf' SIZE 10485760       AUTOEXTEND ON NEXT 8192 "
 " MAXSIZE 32767M EXTENT MANAGEMENT LOCAL  AUTOALLOCATE  ONLINE PERMANENT  SE"
 "GMENT SPACE MANAGEMENT AUTO"

……省略其他輸出資訊

IMP-00009: abnormal end of export file
Import terminated successfully with warnings.


細心觀察螢幕輸出的資訊(或檢視最終生成的export_system.log
日誌檔案),資料庫的表空間建立語句盡收眼底。與此同時在日誌的最後丟擲了“IMP-00009”錯誤,表明備份檔案本身是不完整的。

重要結論得以證明:不完整的備份檔案依然可以被順利地識別,並獲得其中的SQL定義資訊。

4.小結
在這個重要結論的前提下,我們能做的還有很多,可以使用這個小技巧快速地獲得資料庫系統中的預先匯出的定義資訊。
在真正匯出表資料之前exp工具主要完成了以下資料庫定義內容的匯出:
. exporting tablespace definitions
. exporting profiles
. exporting user definitions
. exporting roles
. exporting resource costs
. exporting rollback segment definitions
. exporting database links
. exporting sequence numbers
. exporting directory aliases
. exporting context namespaces
. exporting foreign function library names
. exporting PUBLIC type synonyms
. exporting private type synonyms
. exporting object type definitions
. exporting system procedural objects and actions
. exporting pre-schema procedural objects and actions
. exporting cluster definitions

資料庫中以上內容均可以使用這個技巧快速的獲得其SQL定義指令碼。

Good luck.

secooler
11.03.30

-- The End --

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-691344/,如需轉載,請註明出處,否則將追究法律責任。

相關文章