Oracle基於使用者管理的不完全恢複

來源:互聯網
上載者:User

Oracle 資料恢複從恢複類型來說,拋開具體的檔案,總共可分為兩大類型的恢複,一是完全恢複,一個是不完全恢複。其實,熟悉了Oracle

體繫結構之後,對於Oracle恢複就會有一個總體的概念。因為Oracle組成的外圍部分,主要由不同的檔案來組成,每種不同類型的檔案有不同的

作用,因此只要瞭解了其作用,更利於瞭解與掌握Oralce資料庫的備份與恢複。言歸正傳,完全恢複即是把資料庫恢複到最新的SCN,出故障前

的那一刻,是無損恢複。而不完全恢複即是有損恢複,多用於恢複使用者誤操作,歸檔日誌丟失等情形。本文主要描述基於使用者管理的不完全恢複。


一、不完全恢複特性

1、不完全恢複

不完全恢複僅僅是將資料恢複到某一個特定的時間點或特定的SCN,而不是目前時間點。不完全恢複會影響整個資料庫,需要在MOUNT狀

態下進行。在不完全恢複成功之後,通常需要使用 resetlogs 選項來開啟資料庫。當使用resetlogs後,SCN 計數器不會被重設,原來的日

志序號 log sequence 會結束,從新開始新的記錄序號。在Oracle裡稱之為產生一個新的incarnation。同時Oracle還會重設聯機重做日

志內容,因此resetlogs之後建議重新全備資料庫。


2、不完全恢複的情形

介質故障(media failure)導致部分或全部聯機重做日誌(online redo log)損壞

使用者操作失誤(user error)導致資料丟失,例如,使用者由於疏忽而移除了表,提交了無效的資料到表

由于歸檔重做日誌(archived redo log)丟失而無法進行完全恢複(complete recovery)

當前控制檔案(control file)丟失,必須使用備份的控制檔案開啟(open)資料庫

3、不完全恢複的步驟

關閉資料庫並備份資料庫(以防止恢複失敗)

啟動資料庫到mount 狀態

還原所有資料檔案,同時可以選擇還原控制檔案(注意需要還原所有資料檔案,而不僅僅是受損檔案)

將資料庫恢複至某個時間點、序列、或系統改變號

使用RESETLOGS關鍵字開啟資料庫

4、注意

不完全恢複的前提條件是Oracl資料庫夠到mount狀態,即參數檔案,控制檔案

在做不完全恢複前建議在恢複前後做一次備份,避免恢複失敗導致不必要的損失

不完全恢複完成後,建議不要直接使用OPEN RESETLOGS 命令以讀/寫入模式開啟(open)資料庫,而應先以唯讀模式開啟資料庫,並檢查是否已

將資料庫恢複到正確的時間點。如果恢複的時間點有誤,在沒有使用OPEN RESETLOGS命令的情況下,重新執行恢複操作相對簡單。

對於恢複結果早於指定的時間點,只需重新執行恢複操作。如果恢複結果超過了指定的時間點,則應再次還原資料庫並重新進行恢複。

本文中的樣本為便於示範,沒有在恢複前備份故障資料,也沒有在resetlog之後進行備份。

注:Oracle 10g中已經可以在 resetlogs 之後不備份資料庫,恢複的時候能夠穿越resetlogs

5、不完全介質恢複的幾種類型

基於時間的恢複(Time-based recovery) 將資料恢複到指定的時間點

使用者控制的恢複(Cancel-based recovery) 當使用者提交CANCEL後停止恢複(此選項在使用RMAN時無效)

基於SCN 的恢複(Change-based recovery) 將資料恢複到指定的SCN

按重做日誌序號恢複(Log sequence recovery)將資料恢複到指定的重做日誌序號(僅使用RMAN時有效)


二、示範基於使用者管理的不完全恢複

--1、until time 恢複(恢複到指定時間點)


sys@SYBO2SZ> conn / as sysdba

Connected.

sys@SYBO2SZ> archive log list; -->當前資料庫處于歸檔模式

Database log mode Archive Mode

Automatic archival Enabled

Archive destination /u02/database/SYBO2SZ/archive/

Oldest online log sequence 0

Next log sequence to archive 1

Current log sequence 1


sys@SYBO2SZ> @db_hot_bak -->對資料庫進行熱備份

ho cp /u02/database/SYBO2SZ/oradata/sysSYBO2SZ.dbf /u02/database/SYBO2SZ/backup/hotbak

ho cp /u02/database/SYBO2SZ/undo/undotbsSYBO2SZ.dbf /u02/database/SYBO2SZ/backup/hotbak

ho cp /u02/database/SYBO2SZ/oradata/sysauxSYBO2SZ.dbf /u02/database/SYBO2SZ/backup/hotbak

ho cp /u02/database/SYBO2SZ/undo/undotbsSYBO2SZ2.dbf /u02/database/SYBO2SZ/backup/hotbak

ho cp /u02/database/SYBO2SZ/oradata/SYBO2SZ_system_tbl.dbf /u02/database/SYBO2SZ/backup/hotbak

ho cp /u02/database/SYBO2SZ/oradata/SYBO2SZ_account_tbl.dbf /u02/database/SYBO2SZ/backup/hotbak

ho cp /u02/database/SYBO2SZ/oradata/SYBO2SZ_stock_tbl.dbf /u02/database/SYBO2SZ/backup/hotbak

ho cp /u02/database/SYBO2SZ/oradata/SYBO2SZ_stock_l_tbl.dbf /u02/database/SYBO2SZ/backup/hotbak


sys@SYBO2SZ> set time on;

12:40:07 sys@SYBO2SZ> create table dept as select * from scott.dept;


12:40:31 sys@SYBO2SZ> create table emp as select * from scott.emp;


12:40:41 sys@SYBO2SZ>

12:40:55 sys@SYBO2SZ> truncate table emp; -->對錶emp進行truncate


Table truncated.


12:41:02 sys@SYBO2SZ> insert into dept select 50,'DEV','SZ' from dual; -->為表dept新增兩條記錄並提交


12:41:14 sys@SYBO2SZ> insert into dept select 60,'HR','GZ' from dual;


12:41:19 sys@SYBO2SZ> commit;


Commit complete.


12:41:22 sys@SYBO2SZ> alter system checkpoint; -->執行檢查點進程以寫入日誌


System altered.


12:41:31 sys@SYBO2SZ> shutdown immediate; -->關閉資料庫


12:42:25 sys@SYBO2SZ> startup mount; -->啟動資料庫到mount狀態

ORACLE instance started.


Total System Global Area 599785472 bytes

Fixed Size 2074568 bytes

Variable Size 213911608 bytes

Database Buffers 377487360 bytes

Redo Buffers 6311936 bytes

Database mounted. -->下面將備份的資料進行還原,由於並非所有資料檔案位於相同路徑,因此進行多次cp

12:42:36 sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/SYBO*.dbf /u02/database/SYBO2SZ/oradata/.


12:42:57 sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/sys*.dbf /u02/database/SYBO2SZ/oradata/.


12:43:24 sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/undotbs* /u02/database/SYBO2SZ/undo/.


12:43:50 sys@SYBO2SZ> recover database until time '2012-08-22:12:40:55'; -->使用 until time 恢複到指定時間點

Media recovery complete.

12:44:07 sys@SYBO2SZ> alter database open resetlogs; -->介質分恢複成功之後,resetlog方式開啟資料庫


Database altered.


12:44:20 sys@SYBO2SZ> select count(*) from emp; -->emp表被成功恢複


COUNT(*)

----------

14


12:44:28 sys@SYBO2SZ> select * from dept; -->由於恢復點在插入新記錄之前,因此新記錄丟失


DEPTNO DNAME LOC

---------- -------------- -------------

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON


4 rows selected.


--2、unitl scn 恢複(基於系統改變號的恢複)


sys@SYBO2SZ> @db_hot_bak -->熱備資料庫


sys@SYBO2SZ> select * from dept;


DEPTNO DNAME LOC

---------- -------------- -------------

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON


4 rows selected.


sys@SYBO2SZ> insert into dept select 50,'DEV','SZ' from dual; -->為表dept新增記錄


1 row created.


sys@SYBO2SZ> commit;


Commit complete.


sys@SYBO2SZ> select current_scn from v$database; -->查看當前SCN以便後續恢複使用


CURRENT_SCN

-----------

471613


sys@SYBO2SZ> insert into dept select 60,'HR','GZ' from dual; -->再次為表dept新增記錄,以便查看恢複後是否丟失


sys@SYBO2SZ> commit;


Commit complete.


sys@SYBO2SZ> delete from emp where deptno=10; -->刪除表emp上deptno=10的記錄


3 rows deleted.


sys@SYBO2SZ> commit;


Commit complete.


sys@SYBO2SZ> alter system checkpoint; -->執行檢查點進程


System altered.


sys@SYBO2SZ> shutdown immediate;


sys@SYBO2SZ> startup mount;

ORACLE instance started.


Total System Global Area 599785472 bytes

Fixed Size 2074568 bytes

Variable Size 218105912 bytes

Database Buffers 373293056 bytes

Redo Buffers 6311936 bytes

Database mounted.


sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/SYBO*.dbf /u02/database/SYBO2SZ/oradata/. -->還原資料庫


sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/sys*.dbf /u02/database/SYBO2SZ/oradata/.


sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/undotbs* /u02/database/SYBO2SZ/undo/.


sys@SYBO2SZ> recover database until change 471613 -->基於 SCN 恢複資料庫

Media recovery complete.

sys@SYBO2SZ> alter database open resetlogs; -->使用resetlog方式開啟資料庫


Database altered.


sys@SYBO2SZ> select * from dept; -->SCN之後的操作丟失


DEPTNO DNAME LOC

---------- -------------- -------------

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

50 DEV SZ


5 rows selected.


--3、until cancel 恢複(基於放棄的恢複)


sys@SYBO2SZ> @db_hot_bak -->熱備資料庫

sys@SYBO2SZ> select * from dept;


DEPTNO DNAME LOC

---------- -------------- -------------

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

50 DEV SZ


sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive -->當前已經存在的歸檔日誌

total 348K

-rw-r----- 1 oracle oinstall 340K 2012-08-22 17:01 arch_792003491_1_1.arc

-rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:01 arch_792003491_1_2.arc

-rw-r----- 1 oracle oinstall 1.0K 2012-08-22 17:02 arch_792003491_1_3.arc


sys@SYBO2SZ> alter system switch logfile; -->切換日誌


System altered.


sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive -->可以看到新增了arch_792003491_1_4.arc

total 416K

-rw-r----- 1 oracle oinstall 340K 2012-08-22 17:01 arch_792003491_1_1.arc

-rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:01 arch_792003491_1_2.arc

-rw-r----- 1 oracle oinstall 1.0K 2012-08-22 17:02 arch_792003491_1_3.arc

-rw-r----- 1 oracle oinstall 66K 2012-08-22 17:04 arch_792003491_1_4.arc


sys@SYBO2SZ> insert into dept select 60,'HR','SHANGHAI' from dual;


sys@SYBO2SZ> insert into dept select 70,'INFRA','HONGKONG' from dual;


sys@SYBO2SZ> commit;


Commit complete.


sys@SYBO2SZ> alter system checkpoint; -->切換日誌


System altered.


sys@SYBO2SZ> alter system archive log current;


System altered.


sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive

total 420K

-rw-r----- 1 oracle oinstall 340K 2012-08-22 17:01 arch_792003491_1_1.arc

-rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:01 arch_792003491_1_2.arc

-rw-r----- 1 oracle oinstall 1.0K 2012-08-22 17:02 arch_792003491_1_3.arc

-rw-r----- 1 oracle oinstall 66K 2012-08-22 17:04 arch_792003491_1_4.arc

-rw-r----- 1 oracle oinstall 2.5K 2012-08-22 17:07 arch_792003491_1_5.arc


sys@SYBO2SZ> insert into dept select 80,'MARKET','BEIJING' from dual;


sys@SYBO2SZ> commit;


Commit complete.


sys@SYBO2SZ> alter system archive log current;


System altered.


sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive -->系統又新增了幾個歸檔日誌

total 424K

-rw-r----- 1 oracle oinstall 340K 2012-08-22 17:01 arch_792003491_1_1.arc

-rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:01 arch_792003491_1_2.arc

-rw-r----- 1 oracle oinstall 1.0K 2012-08-22 17:02 arch_792003491_1_3.arc

-rw-r----- 1 oracle oinstall 66K 2012-08-22 17:04 arch_792003491_1_4.arc

-rw-r----- 1 oracle oinstall 2.5K 2012-08-22 17:07 arch_792003491_1_5.arc

-rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:08 arch_792003491_1_6.arc


sys@SYBO2SZ> ho strings /u02/database/SYBO2SZ/archive/arch_792003491_1_5.arc | grep HONGKONG -->新記錄已存在于歸檔日誌

HONGKONG


sys@SYBO2SZ> ho strings /u02/database/SYBO2SZ/archive/arch_792003491_1_6.arc | grep BEIJING

BEIJING


sys@SYBO2SZ> ho rm /u02/database/SYBO2SZ/archive/arch_792003491_1_5.arc -->類比部分歸檔日誌丟失


sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive

total 420K

-rw-r----- 1 oracle oinstall 340K 2012-08-22 17:01 arch_792003491_1_1.arc

-rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:01 arch_792003491_1_2.arc

-rw-r----- 1 oracle oinstall 1.0K 2012-08-22 17:02 arch_792003491_1_3.arc

-rw-r----- 1 oracle oinstall 66K 2012-08-22 17:04 arch_792003491_1_4.arc

-rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:08 arch_792003491_1_6.arc


sys@SYBO2SZ> shutdown immediate;


sys@SYBO2SZ> startup mount;

ORACLE instance started.


Total System Global Area 599785472 bytes

Fixed Size 2074568 bytes

Variable Size 243271736 bytes

Database Buffers 348127232 bytes

Redo Buffers 6311936 bytes

Database mounted.

sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/SYBO*.dbf /u02/database/SYBO2SZ/oradata/. -->還原資料庫


sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/sys*.dbf /u02/database/SYBO2SZ/oradata/.


sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/undotbs* /u02/database/SYBO2SZ/undo/.


sys@SYBO2SZ> recover database until cancel; --> 基於 cancel 恢複資料庫

ORA-00279: change 494124 generated at 08/22/2012 17:02:30 needed for thread 1

ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792003491_1_4.arc

ORA-00280: change 494124 for thread 1 is in sequence #4


Specify log: {=suggested | filename | AUTO | CANCEL}

/u02/database/SYBO2SZ/archive/arch_792003491_1_4.arc -->恢複到尾數為4的歸檔日誌

ORA-00279: change 494189 generated at 08/22/2012 17:04:46 needed for thread 1

ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792003491_1_5.arc

ORA-00280: change 494189 for thread 1 is in sequence #5

ORA-00278: log file '/u02/database/SYBO2SZ/archive/arch_792003491_1_4.arc' no longer needed for this recovery


Specify log: {=suggested | filename | AUTO | CANCEL}

cancel -->第5個記錄檔丟失,輸入cancel

Media recovery cancelled.

sys@SYBO2SZ> alter database open resetlogs; --> resetlogs 方式開啟資料庫


Database altered.


sys@SYBO2SZ> select * from dept; -->由于歸檔日誌5丟失,因此後續所有操作的資料丟失


DEPTNO DNAME LOC

---------- -------------- -------------

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

50 DEV SZ


5 rows selected.


oracle視頻教程請關注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.