大家看看这个参数inctype你是否使用过?我做了以下测试,欢迎拍砖!
http://www.itpub.net/thread-1737072-1-1.html
?
| 本帖最后由?java3344520 于 2012-11-8 12:51 編輯 大家看看這個參數inctype你是否使用過?我做了以下測試,歡迎拍磚! Oracle數據庫邏輯增量備份之exp/imp 一、實現需求 ? ?? ?? ?由于一個庫在云平臺上,雖然做了RMAN備份,但是RMAN備份在云本地磁盤上,同時庫備份數據量比較大,無法轉移到其他的空間上。由于該庫應用的性質比較特殊,大數據量部分要求保存180天后即可刪除,因此除了做RMAN之外,我希望將核心數據做下額外的備份,expdp可以滿足,目前是這么做的,但是expdp做不了增量備份。聽說exp/imp有參數能做增量備份,但是又聽說exp增量備份的最小單位是表,只要表一條數據發生變化,就會對全表進行備份。之前沒有用過exp增量備份這個功能,于是決定先做下測試,看到底備份恢復效率和真實機制如何。 二、邏輯備份恢復工具exp/imp1、邏輯備份原理Oracle數據庫有三種標準的備份方法,它們分別是導出/導入(EXP/IMP、EXPDP/IMPDP)、熱備份和冷備份。導出備件是一種邏輯備份,冷備份和熱備份是物理備份。 邏輯導出備份:創建數據庫對象的邏輯拷貝并存入一個二進制轉儲文件。這種邏輯備份需要在數據庫啟動的情況下使用, 其導出實質就是讀取一個數據庫記錄集(甚至可以包括數據字典)并將這個記錄集寫入一個文件,這些記錄的導出與其物理位置無關,導入實質就是讀取轉儲文件并執行其中的命令。此備份方式是通過Oracle的實用工具export和import來實施的, export是把數據庫中的數據導出,import是把export卸出的數據導入數據庫中。通過此工具可以衍生出多種功能, 比如整個數據庫的備份、表結構重建、數據的傳輸、用戶的改變等等。 重新溫習下exp/imp的語法和參數,著重看看增量備份參數相關說明。 2、exp語法和參數C:\Documents and Settings\A4586>exp help=y Export: Release 10.2.0.1.0 - Production on?星期三?11月?7 13:41:282012 Copyright (c) 1982, 2005, Oracle.??All rights reserved. 通過輸入?EXP?命令和您的用戶名/口令,?導出 操作將提示您輸入參數: ? ???例如: EXPSCOTT/TIGER 或者,?您也可以通過輸入跟有各種參數的?EXP?命令來控制導出 的運行方式。要指定參數,?您可以使用關鍵字: ? ???格式:??EXP KEYWORD=value?或KEYWORD=(value1,value2,...,valueN) ? ???例如: EXPSCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR) ? ?? ?? ?? ?? ?或TABLES=(T1:P1,T1:P2),?如果?T1?是分區表 USERID?必須是命令行中的第一個參數。 關鍵字? ?? ?? ?? ?? ?? ??說明?(默認值)? ?? ?? ? ----------? ?? ?? ?? ?? ?? ? --------------------------------------------------------- USERID? ?? ?? ?? ?? ?? ?? ???用戶名/口令 FULL? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???導出整個文件?(N) BUFFER? ?? ?? ?? ?? ?? ?? ???數據緩沖區大小 OWNER? ?? ?? ?? ?? ?? ?? ??所有者用戶名列表 FILE? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?輸出文件(EXPDAT.DMP) TABLES? ?? ?? ?? ?? ??表名列表 COMPRESS? ?? ?? ?? ?? ??導入到一個區?(Y) RECORDLENGTH? ?IO?記錄的長度 GRANTS? ?? ?? ?? ?? ???導出權限?(Y) INCTYPE? ?? ?? ?? ?? ?? ?? ?? ?增量導出類型 INDEXES? ?? ?? ?? ?? ??導出索引?(Y) RECORD? ?? ?? ?? ?跟蹤增量導出?(Y) DIRECT? ?? ?? ?? ?? ???直接路徑?(N)? ?? ?? ? TRIGGERS? ?? ?? ??導出觸發器?(Y) LOG? ?? ?? ?? ?? ?? ??屏幕輸出的日志文件? ? STATISTICS? ?? ?? ?? ?分析對象(ESTIMATE) ROWS? ?? ?? ?? ?? ?? ?導出數據行(Y)? ?? ??? PARFILE? ?? ?? ?? ??參數文件名 CONSISTENT? ?? ?? ?? ?交叉表的一致性(N)? ? CONSTRAINTS? ?? ??導出的約束條件?(Y) OBJECT_CONSISTENT? ??只在對象導出期間設置為只讀的事務處理(N) FEEDBACK? ?? ?? ?? ??每?x?行顯示進度?(0) FILESIZE? ?? ?? ?? ?? ?每個轉儲文件的最大大小 FLASHBACK_SCN? ?? ???用于將會話快照設置回以前狀態的?SCN FLASHBACK_TIME? ?? ??用于獲取最接近指定時間的?SCN?的時間 QUERY? ?? ?? ?? ?? ??用于導出表的子集的?select?子句 RESUMABLE? ?? ?? ?? ?遇到與空格相關的錯誤時掛起?(N) RESUMABLE_NAME? ?? ?用于標識可恢復語句的文本字符串 RESUMABLE_TIMEOUT? ? RESUMABLE?的等待時間 TTS_FULL_CHECK? ?? ?? ?? ?? ?? ?? ?對?TTS?執行完整或部分相關性檢查 TABLESPACES? ?? ?? ?? ?要導出的表空間列表 TRANSPORT_TABLESPACE??導出可傳輸的表空間元數據?(N) TEMPLATE? ?? ?? ?? ???調用?iAS?模式導出的模板名 3、imp語法和參數C:\Documents and Settings\A4586>imp help=y Import: Release 10.2.0.1.0 - Production on?星期三?11月?7 13:59:172012 Copyright (c) 1982, 2005, Oracle.??All rights reserved. 通過輸入?IMP?命令和您的用戶名/口令,?導入 操作將提示您輸入參數: ? ???例如: IMPSCOTT/TIGER 或者,?可以通過輸入?IMP?命令和各種參數來控制導入 的運行方式。要指定參數,?您可以使用關鍵字: ? ???格式:??IMP KEYWORD=value?或KEYWORD=(value1,value2,...,valueN) ? ???例如: IMPSCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N ? ?? ?? ?? ?? ?或TABLES=(T1:P1,T1:P2),?如果?T1?是分區表 USERID?必須是命令行中的第一個參數。 關鍵字? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?說明?(默認值)? ?? ??? ----------------? ?? ?? ?? ?? ?? ?? ?? ???---------------------------------------- USERID? ?? ?? ?? ?? ?? ?? ?? ?? ?用戶名/口令? ?? ?? ??? FULL? ?? ?? ?? ?? ?? ?? ?? ?? ?導入整個文件?(N) BUFFER? ?? ?? ?? ?? ?? ?? ?? ?? ?數據緩沖區大小? ?? ??? FROMUSER? ?? ?? ?? ?? ?? ??所有者用戶名列表 FILE? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??輸入文件(EXPDAT.DMP)?? TOUSER? ?? ?? ?? ?? ?? ?? ?? ?用戶名列表 SHOW? ?? ?? ?? ?? ?? ?? ?? ?? ?只列出文件內容(N)? ??? TABLES? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?表名列表 IGNORE? ?? ?? ?? ?? ?? ?? ?? ???忽略創建錯誤(N)? ? RECORDLENGTH? ?? ?? ?? ???IO?記錄的長度 GRANTS? ?? ?? ?? ?? ?? ?? ?? ???導入權限?(Y)? ?? ?? ? INCTYPE? ?? ?? ?? ?? ?? ?? ?? ?增量導入類型 INDEXES? ?? ?? ?? ?? ?? ?? ?? ??導入索引?(Y)? ?? ??? COMMIT? ?? ?? ?? ?? ?? ??提交數組插入?(N) ROWS? ?? ?? ?? ?? ?? ?? ?? ?? ?導入數據行(Y)? ?? ??? PARFILE? ?? ?? ?? ?? ?? ?? ???參數文件名 LOG? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??屏幕輸出的日志文件? ? CONSTRAINTS? ?? ?? ?? ???導入限制?(Y) DESTROY? ?? ?? ?? ??覆蓋表空間數據文件?(N) INDEXFILE? ?? ?? ?? ?將表/索引信息寫入指定的文件 SKIP_UNUSABLE_INDEXES??跳過不可用索引的維護?(N) FEEDBACK? ?? ?? ?? ?? ?每?x?行顯示進度?(0) TOID_NOVALIDATE? ?? ???跳過指定類型?ID?的驗證 FILESIZE? ?? ?? ?? ?? ?? ???每個轉儲文件的最大大小 STATISTICS? ?? ?? ?? ?? ?? ?始終導入預計算的統計信息 RESUMABLE? ?? ?? ?? ???在遇到有關空間的錯誤時掛起?(N) RESUMABLE_NAME? ?? ???用來標識可恢復語句的文本字符串 RESUMABLE_TIMEOUT? ?? ?RESUMABLE?的等待時間 COMPILE? ?? ?? ?? ?? ???編譯過程,?程序包和函數?(Y) STREAMS_CONFIGURATION??導入流的一般元數據?(Y) STREAMS_INSTANTIATION? ?導入流實例化元數據?(N) 下列關鍵字僅用于可傳輸的表空間 TRANSPORT_TABLESPACE?導入可傳輸的表空間元數據(N) TABLESPACES?將要傳輸到數據庫的表空間 DATAFILES?將要傳輸到數據庫的數據文件 TTS_OWNERS?擁有可傳輸表空間集中數據的用戶 三、exp邏輯備份ORACLE數據庫的邏輯備份分為三種模式:表備份、用戶備份和完全備份。 (1)、表方式(T方式),將指定表的數據導出。 (2)、用戶方式(U方式),將指定用戶的所有對象及數據導出。 (3)、全庫方式(Full方式),將數據庫中的所有對象導出 1、exp表模式備份備份某個用戶模式下指定的對象(表)。業務數據庫通常采用這種備份方式。 若備份到本地文件,使用如下命令: C:\Documents and Settings\A4586>set nls_lang=simplifiedchinese_china.zhs16gbk C:\Documents and Settings\A4586>exp scott/tiger file=c:\exp_scott_emp.dmplog=c:\exp_scott_emplog tables=scott.emp,scott.dept 即將導出指定的表通過常規路徑... . .?正在導出表? ?? ?? ?? ?? ?? ?? ?? ?? ???EMP導出了? ?? ?? ? 14?行 . .?正在導出表? ?? ?? ?? ?? ?? ?? ?? ?? ? DEPT導出了? ?? ?? ???4?行 導出成功。 2、exp用戶模式備份備份某個用戶模式下的所有對象。業務數據庫通常采用這種備份方式。若備份到本地文件,使用如下命令: ? ?C:\Documentsand Settings\A4586>expscott/tiger file=c:\exp_scott.dmp log=c:\exp_scott.log owner=scott 即將導出指定的用戶... .?正在導出?pre-schema?過程對象和操作 .?正在導出用戶?SCOTT?的外部函數庫名 .?導出?PUBLIC?類型同義詞 .?正在導出專用類型同義詞 .?正在導出用戶?SCOTT?的對象類型定義 即將導出?SCOTT?的對象... .?正在導出數據庫鏈接 .?正在導出序號 .?正在導出簇定義 .?即將導出?SCOTT?的表通過常規路徑... . .?正在導出表? ?? ?? ?? ?? ?? ?? ?? ?? ?BONUS導出了? ?? ?? ???0?行 . .?正在導出表? ?? ?? ?? ?? ?? ?? ?? ?? ? DEPT導出了? ?? ?? ???4?行 . .?正在導出表? ?? ?? ?? ?? ?? ?? ?? ?? ???EMP導出了? ?? ?? ? 14?行 . .?正在導出表? ?? ?? ?? ?? ?? ?? ?? ?SALGRADE導出了? ?? ?? ???5?行 ……. 3、exp全庫模式備份備份完整的數據庫。業務數據庫不采用這種備份方式。注意導出用戶權限。備份命令為: C:\Documents and Settings\A4586>exp system/oraclefile=c:\exp_full.dmp log=c:\exp_full.log full=y; 即將導出整個數據庫... .?正在導出表空間定義 .?正在導出概要文件 .?正在導出用戶定義 .?正在導出角色 .?正在導出資源成本 .?正在導出回退段定義 .?正在導出數據庫鏈接 .?正在導出序號 ……. 四、imp邏輯恢復數據導入(Import)的過程是數據導出(Export)的逆過程,分別將數據文件導入數據庫。數據庫的邏輯恢復分為表恢復、用戶恢復、完全恢復三種模式。 1、imp表模式恢復A.?恢復表備份數據的全部內容 若從本地文件恢復scott導出的表,使用如下命令: ? ? C:\Documentsand Settings\A4586>impscott/tiger fromuser=scott touser=scott file=c:\exp_scott_emp.dmp log=c:\imp_scott_emp.log 經由常規路徑由?EXPORT:V10.02.01?創建的導出文件 已經完成?ZHS16GBK?字符集和?AL16UTF16 NCHAR?字符集中的導入 導入服務器使用?AL32UTF8?字符集?(可能的字符集轉換) .?正在將?SCOTT?的對象導入到?SCOTT . .?正在導入表? ?? ?? ?? ?? ?? ?? ?? ?? ?"EMP"導入了? ?? ?? ? 14?行 . .?正在導入表? ?? ?? ?? ?? ?? ?? ?? ?? ?"DEPT"導入了? ?? ?? ? 4?行 即將啟用約束條件... 成功終止導入,?沒有出現警告。 B.?恢復備份數據中的指定表 若從本地文件恢復scott備份導出的表,此時必須制定所有表,使用如下命令: C:\Documents andSettings\A4586>impscott/tiger fromuser=scott touser=scotts file=c:\exp_scott_emp.dmp log=c:\imp_scott_emp.logtables=emp ignore=y; 經由常規路徑由?EXPORT:V10.02.01?創建的導出文件 已經完成?ZHS16GBK?字符集和?AL16UTF16 NCHAR?字符集中的導入 導入服務器使用?AL32UTF8?字符集?(可能的字符集轉換) .?正在將?SCOTT?的對象導入到?SCOTTS . .?正在導入表? ?? ?? ?? ?? ?? ?? ?? ?? ?"EMP"導入了? ?? ?? ? 14?行 即將啟用約束條件... 成功終止導入,?沒有出現警告。 2、imp用戶模式恢復A.?恢復備份數據的全部內容 若從本地文件恢復整個用戶的所有表,使用如下命令 ? ???C:\Documents and Settings\A4586>imp scott/tigerfromuser=scott touser=scott file=c:\exp_scott.dmp log=c:\imp_scott.log; .?正在將?SCOTT?的對象導入到?SCOTTS B.?恢復備份數據中的指定表 若從本地文件恢復該用戶的部分表,注意,這里一定要使用ingore=y,使用如下命令: ? ?C:\Documentsand Settings\A4586>impscott/tiger fromuser=scott touser=scotts file=c:\exp_scott.dmp log=c:\imp_scott.logtables=emp ignore=y; 經由常規路徑由?EXPORT:V10.02.01?創建的導出文件 已經完成?ZHS16GBK?字符集和?AL16UTF16 NCHAR?字符集中的導入 導入服務器使用?AL32UTF8?字符集?(可能的字符集轉換) . .?正在導入表? ?? ?? ?? ?? ?? ?? ?? ?? ?" EMP "導入了? ?? ? 14?行 成功終止導入,?沒有出現警告。 3、imp全庫模式恢復A.?恢復備份數據的全庫全部內容 若從全庫備份文件恢復全庫,使用如下命令: C:\Documents and Settings\A4586>imp scott/tigerfile=c:\exp_full.dmp log=c:\imp_full.log full=y; 經由常規路徑由?EXPORT:V10.02.01?創建的導出文件 已經完成?ZHS16GBK?字符集和?AL16UTF16 NCHAR?字符集中的導入 導入服務器使用?AL32UTF8?字符集?(可能的字符集轉換) .?正在將?SYSTEM?的對象導入到?SYSTEM ……. B.?恢復備份數據的特定用戶內容 若從全庫備份文件恢復特定用戶的對象,使用如下命令: C:\Documents and Settings\A4586>imp scott/tigerfile=c:\exp_full.dmp log=c:\imp_full_scott.log fromuser=scott touser=scott ignore=y; 經由常規路徑由?EXPORT:V10.02.01?創建的導出文件 已經完成?ZHS16GBK?字符集和?AL16UTF16 NCHAR?字符集中的導入 導入服務器使用?AL32UTF8?字符集?(可能的字符集轉換) .?正在將?SCOTT?的對象導入到?SCOTTS ……. C.?恢復備份數據的特定表內容 若從全庫備份文件恢復特定表,使用如下命令: C:\Documents and Settings\A4586>imp scott/tigerfile=c:\exp_full.dmp log=c:\imp_full.log fromuser=scott touser=scott tables=empignore=y; 經由常規路徑由?EXPORT:V10.02.01?創建的導出文件 已經完成?ZHS16GBK?字符集和?AL16UTF16 NCHAR?字符集中的導入 導入服務器使用?AL32UTF8?字符集?(可能的字符集轉換) .?正在將?SCOTT?的對象導入到?SCOTT . .?正在導入表? ?? ?? ?? ?? ?? ?? ?? ?? ?"EMP"導入了? ?? ?? ? 14?行 即將啟用約束條件... 成功終止導入,?沒有出現警告。 五、?exp/imp增量參數INCTYPE1、exp增量備份條件增量導出是一種常用的數據備份方法,它只能對整個數據庫來實施,并且必須使用SYSTEM賬號來導出。在進行此種導出時,系統不要求回答任何問題。導出文件名缺省為export.dmp,如果不希望自己的輸出檔定名為export.dmp,必須在命令行中指出要用的文件名。當全庫備份比較小時候,采用數據庫備份更便于恢復。 執行增量備份必須滿足下列條件: 1.只對完整數據庫備份有效,且第一次需要full=y參數,以后需要inctype=incremental參數。 2.?用戶必須有EXP_FULL_DATABASE的系統角色。 2、exp增量備份類型增量導出包括三種類型: (1)“完全”增量導出(Complete) 備份整個數據庫,腳本內容如下: C:\Documents andSettings\A4586>expsystem/oracle inctype=complete file=c:\exp_incr_full.dmplog=c:\exp_incr_full.log (2)“增量型”增量導出(Incremental) 備份上一次備份后改變的數據,腳本內容如下: C:\Documents andSettings\A4586>expsystem/oracle inctype=incremental file=c:\exp_incr_incr.dmplog=c:\exp_incr_incr.log (3)“累積型”增量導出(Cumulative) ? ?? ?? ?備份自上次“完全”導出之后數據庫中變化了的數據。腳本內容如下: C:\Documents andSettings\A4586>expsystem/oracle inctype=cumulative file=c:\exp_incr_cum.dmplog=c:\exp_incr_cum.log 六、增量備份恢復實例1、exp增量備份恢復策略數據庫管理員可以排定一個備份日程表,用數據導出的三個不同方式合理高效的完成。 比如數據庫的備分任務可以做如下安排: 星期一:完全導出(export_A.dmp) 星期二:增量導出(export_B.dmp) 星期三:增量導出(export_C.dmp) 星期四:增量導出(export_D.dmp) 星期五:累計導出(export_E.dmp) 星期六:增量導出(export_F.dmp) 星期日:增量導出(export_G.dmp) 如果在星期日,數據庫遭到意外破壞,數據庫管理員可按照如下步驟恢復數據庫: 第一步:用命令CREATE DATABASE重新生成數據庫結構; 第二步:創建一個足夠大的附加回滾,供imp使用。 第三步:完全增量導入A: imp system/manager inctype=RESTORE FULL=y FILE=A 第四步:累計增量導入E: imp system/manager inctype=RESTORE FULL=Y FILE=E 第五步:最近增量導入F: imp system/manager inctype=RESTORE FULL=Y FILE=F 2、A時間點全備C:\Documents and Settings\A4586>sqlplus sys/oracle assysdba SQL*Plus: Release 10.2.0.1.0 - Productionon?星期三?11月?7 17:03:41 2012 Copyright (c) 1982, 2005, Oracle.??All rights reserved. 連接到: Oracle Database 10g Enterprise EditionRelease 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Miningoptions SQL>grant dba to scott; SQL> create tablespace tbs_incr datafile'D:\oracle\product\10.2.0\oradata\xmlgis\tbs_incr.dbf' size 10M autoextend onnext 10M maxsize unlimited; SQL> create table scott.a (status varchar(20),weektimevarchar(20)) tablespace tbs_incr; SQL> insert into scott.a values('insert','A'); SQL> commit; C:\Documents and Settings\A4586>exp scott/tigerinctype=complete file=c:\exp_incr_A.dmp log=c:\exp_incr_A.log; 日志中發現如下: .?即將導出?SCOTT?的表通過常規路徑... . .?正在導出表? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? A導出了? ?? ?? ???1?行 3、B時間點增量備份SQL> create table scott.b (status varchar(20),weektimevarchar(20)) tablespace tbs_incr; SQL> insert into scott.b values('insert','b'); SQL> insert into scott.a values('insert','b'); SQL> commit;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? C:\Documents and Settings\A4586>exp scott/tiger inctype=incrementalfile=c:\exp_incr_B.dmp log=c:\exp_incr_B.log; 日志中發現如下: .?即將導出?SCOTT?的表通過常規路徑... . .?正在導出表? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? A導出了? ?? ?? ???2?行 . .?正在導出表? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? B導出了? ?? ?? ???1?行 ? 通過以上就說明了exp增量備份的最小執行?單位是表。 4、C時間點累積備份SQL> create table scott.c (status varchar(20),weektimevarchar(20)) tablespace tbs_incr; SQL> insert into scott.c values('insert','c'); SQL> insert into scott.a values('insert','c'); SQL> commit; C:\Documents and Settings\A4586>exp scott/tiger inctype=cumulativefile=c:\exp_incr_C.dmp log=c:\exp_incr_C.log; 日志中發現如下: .?即將導出?SCOTT?的表通過常規路徑... .?.?正在導出表? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? A導出了? ?? ?? ???3?行 . .?正在導出表? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? B導出了? ?? ?? ???1?行 . .?正在導出表? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? C導出了? ?? ?? ???1?行 注意,這里的B表也被備份了,這是因為這里做的是累積備份,相對于全庫備份的增加來進行的,因此B表也是新增的,因此被備份了。增量和累積的差異非常清晰。 5、D時間點增量備份SQL> create table scott.d (status varchar(20),weektimevarchar(20)) tablespace tbs_incr; SQL> insert into scott.d values('insert','d'); SQL> insert into scott.a values('insert','d'); SQL> commit;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? C:\Documents and Settings\A4586>exp scott/tiger inctype=incrementalfile=c:\exp_incr_D.dmp log=c:\exp_incr_D.log; 日志中發現如下: .?即將導出?SCOTT?的表通過常規路徑... . .?正在導出表? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? A導出了? ?? ?? ???4?行 . .?正在導出表? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? D導出了? ?? ?? ???1?行 6、E時間點增量備份SQL> create table scott.e(status varchar(20),weektimevarchar(20)) tablespace tbs_incr; SQL> insert into scott.e values('insert','e'); SQL> insert into scott.a values('insert','e'); SQL> commit; SQL> col status format a10 SQL> select * from scott.a; STATUS? ? WEEKTIME -------------------------------------------------- insert? ? b insert? ? A insert? ? c insert? ? d insert? ? e 6、A表丟失數據恢復? ?? ?? ?假設A表數據被誤刪除后,這個時候想要恢復到A,B,C,D,E某個時間的備份如何操作呢?(變相的需求是當前數據不是我想要的,我想恢復到之前某天的數據,先刪除,在恢復!) 由于表是一個單獨備份的對象單元,因此恢復的時候只要找到備份文件,就可以恢復到想要恢復的時刻。 舉例:恢復表A到C點時間的數據,恢復步驟如下: SQL> select * from scott.a; STATUS? ? WEEKTIME -------------------------------------------------- insert? ? b insert? ? A insert? ? c insert? ? d insert? ? e SQL> drop table scott.a; C:\Documents and Settings\A4586>imp scott/tigerfromuser=scott touser=scott file=c:\exp_incr_c.dmp log=c:\imp_incr_c.logtables=a ignore=y; 經由常規路徑由?EXPORT:V10.02.01?創建的導出文件 已經完成?ZHS16GBK?字符集和AL16UTF16 NCHAR?字符集中的導入 導入服務器使用?AL32UTF8?字符集?(可能的字符集轉換) .?正在將?SCOTT?的對象導入到?SCOTT . .?正在導入表? ?? ?? ?? ?? ?? ?? ?? ?? ???"A"導入了? ?? ?? ???3?行 成功終止導入,?沒有出現警告。 SQL> col status format a10 SQL> select * from scott.a; STATUS? ? WEEKTIME ---------- ---------------------------------------- insert? ? b insert? ? A insert? ? c 舉例:恢復A表到D點時刻數據 SQL> drop table scott.a; C:\Documents and Settings\A4586>imp scott/tigerfromuser=scott touser=scott fil=c:\exp_incr_d.dmp log=c:\imp_incr_d.logtables=a ignore=y; 經由常規路徑由?EXPORT:V10.02.01?創建的導出文件 已經完成?ZHS16GBK?字符集和?AL16UTF16 NCHAR?字符集中的導入 導入服務器使用?AL32UTF8?字符集?(可能的字符集轉換) .?正在將?SCOTT?的對象導入到?SCOTT . .?正在導入表? ?? ?? ?? ?? ?? ?? ?? ?? ???"A"導入了? ?? ?? ???4?行 成功終止導入,?沒有出現警告。 SQL> col status format a10 SQL> select * from scott.a; STATUS? ? WEEKTIME -------------------------------------------------- insert? ? b insert? ? A insert? ? c insert? ? d 7、D時間點丟失表空間恢復? ?? ?? ?假設在D時間點備份之后做了些操作后,表空間的數據文件tbs_del.dbf被誤刪除了,這個情況下的數據恢復步驟: ? ?? ?? ?1:模擬破壞表空間 刪除tbs_incr.dbf數據文件,關閉數據庫重新啟動后,執行插入報錯如下: SQL> insert intoscott.a values('del files','e'); insert into scott.a values('del files','e') ? ?? ?? ?? ?? ?? ? * 第?1?行出現錯誤: ORA-00376:?此時無法讀取文件?7 ORA-01110:?數據文件?7:'D:\ORACLE\PRODUCT\10.2.0\ORADATA\XMLGIS\TBS_INCR.DBF' 2:將被損壞的表空間(或涉及到數據文件損壞的表空間)offline: SQL>connect / as sysdba SQL> COL SEGMENT_NAME FORMAT A10 SQL> select SEGMENT_NAME,SEGMENT_TYPE from dba_segmentswhere tablespace_name='T BS_INCR'; SEGMENT_NA SEGMENT_TYPE ---------------------------------------------- A? ?? ?? ?TABLE B? ?? ?? ?TABLE C? ?? ?? ?TABLE D? ?? ?? ?TABLE E? ?? ?? ?TABLE SQL>alter tablespace tbs_incr offline immediate; SQL>drop tablespace tbs_incr including contents; 3:恢復表空間和數據文件 SQL>create tablespace tbs_incr datafile'D:\oracle\product\10.2.0\oradata\xmlgis\tbs_incr.dbf' size 10M autoextend onnext 10M maxsize unlimited; 創建表空間參數,以及數據文件的路徑和大小,可以參照以前的設置,創建表空間成功后,一一恢復屬于該表空間的各用戶對象。 ? ?? ?? ?然后根據想要表對應的備份進行恢復即可,步驟同6. 8、全庫恢復? ?? ?? ?進行全庫方法,建立好表空間,然后全庫導入,這里測試用刪除SCOTT用戶的表A,來測試全庫恢復情況(A+C+D): 恢復全庫備份A: C:\Documents and Settings\A4586>imp scott/tiger??file=c:\exp_incr_a.dmp log=c:\imp_incr_a.loginctype=restore full=y ignore=y; 恢復累積備份C: C:\Documents and Settings\A4586>imp scott/tiger??file=c:\exp_incr_c.dmp log=c:\imp_incr_c.loginctype=restore full=y ignore=y; .?正在將?SCOTT?的對象導入到?SCOTT . .?正在導入表? ?? ?? ?? ?? ?? ?? ?? ?? ???"A"導入了? ?? ?? ???3?行 . .?正在導入表? ?? ?? ?? ?? ?? ?? ?? ?? ???"B"導入了? ?? ?? ???1?行 . .?正在導入表? ?? ?? ?? ?? ?? ?? ?? ?? ???"C"導入了? ?? ?? ???1?行 恢復增量備份D: C:\Documents and Settings\A4586>imp scott/tiger??file=c:\exp_incr_d.dmp log=c:\imp_incr_d.loginctype=restore full=y ignore=y; .?正在將?SCOTT?的對象導入到?SCOTT . .?正在導入表? ?? ?? ?? ?? ?? ?? ?? ?? ???"A"導入了? ?? ?? ???4?行 . .?正在導入表? ?? ?? ?? ?? ?? ?? ?? ?? ???"D"導入了? ?? ?? ???1?行 SQL> col status format a10 SQL> select * from scott.a; STATUS? ? WEEKTIME -------------------------------------------------- insert? ? b insert? ? A insert? ? c insert? ? d 異常測試:刪除A表和B表,直接用C備份進行恢復,看看回復情況如何 SQL> DROP TABLE SCOTT.A; SQL> DROP TABLE SCOTT.B; 直接恢復累積備份C: C:\Documents and Settings\A4586>imp scott/tiger??file=c:\exp_incr_c.dmp log=c:\imp_incr_c.loginctype=restore full=y ignore=y; .?正在將?SCOTT?的對象導入到?SCOTT . .?正在導入表? ?? ?? ?? ?? ?? ?? ?? ?? ???"A"導入了? ?? ?? ???3?行 . .?正在導入表? ?? ?? ?? ?? ?? ?? ?? ?? ???"B"導入了? ?? ?? ???1?行 . .?正在導入表? ?? ?? ?? ?? ?? ?? ?? ?? ???"C"導入了? ?? ?? ???1?行 SQL> select * from scott.b; select * from scott.b ? ?? ?? ?? ?? ?? ???* 第?1?行出現錯誤: ORA-00942:?表或視圖不存在 這個時候發現,B表并未導入,類似RMAN里的不完全恢復。 七、Exp/Imp增量備份恢復總結? ?Export/Import支持的增量和累計備份實際上是表級的,即上一次備份之后變化的表將全表卸載,而不是變化的記錄。因此,在以OLTP應用為主的數據庫中,由于保存主要業務數據的表處于頻繁的錄入和更新之中,增量和累計卸載并不能顯著提高備份的效率。 ? ??在做整個數據庫Import時,缺省狀態下以一個Table為一個Transaction,所以如果存在一些表的數據量很大,?建議使用commit=y并且要提供一個較大的buffer值,同時建立一個臨時Rollback segment?,它的default storage參數initial?和?next要設置大一些,并要將這個Rollback Segment Online,同時offline?其他小的rollbacksegments。確保一個Table能完整import?。因為在做import時,?數據庫將自動創建索引,及完整性約束,?為了加快數據加載的速度及一次成功的概率,可以考慮在export之前首先disable所有的完整性約束,?在import之后在enable所有的完整性約束。而對索引,可以考慮單獨export索引。通過使用命令?"imp indexfile=……"?在import數據之后來單獨創建索引。 ? ??如果希望在export數據庫時,直接將產生的dmp文件寫到外設上,?你可以使用?"exp file=設備名…?Volsize=設備的容量"。 由于export出來的文件可能較大,而某些操作系統(如Linux)對文件大小有限制,如不能大于2G。因此可將dmp文件設置為指定大小的若干文件。如: exp sys/managerbuffer=4096000 file=(full1.dmp,full2.dmp,full3.dmp,full4.dmp) filesize=2GFull=y inctype=complete log=full.log 總結:特殊場景,該備份可以被適用。不過RMAN還是更便捷啊!難怪INCTYPE要被廢棄呢。 WORD里格式好好的,到編輯器格式亂了,附件下載: |
轉載于:https://www.cnblogs.com/gongyu/p/4276962.html
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的大家看看这个参数inctype你是否使用过?我做了以下测试,欢迎拍砖!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OC语言Block和协议
- 下一篇: [译]管理IIS日志的存储