RMAN備份與恢複之UNDO資料表空間丟失

來源:互聯網
上載者:User

一 UNDO資料表空間講解

在上一篇文章(RMAN備份與恢複之可離線資料檔案丟失 )中,我們講到可離線資料檔案丟失怎麼處理,這篇文章我們講解UNDO資料表空間丟失的解決辦法。

UNDO資料表空間用於存放UNDO資料,當執行DML操作(INSERT、UPDATE、DELETE)的時候,Oracle會將這些操作的舊資料寫入到UNDO段。UNDO資料也稱為復原資料,用於確保資料的一致性。作用包括:回退事、讀一致性、事務恢複、閃回查詢。9i開始,管理UNDO資料可以使用UNDO資料表空間,也可以使用復原段。10g開始,ORACLE已經放棄使用復原段。提到UNDO資料表空間,不得不提UNDO段。UNDO Segment分為兩個部分,一個是UNDO Segment Head,還有一個是UNDO Segment Block(也稱為事務槽)。UNDO Segment Head中包含了這個復原段的事務資訊,而且有一個指標指向Undo Segment Block。UNDO資料表空間是非常重要的,如果丟失,會出現無法對資料進行更新。平時的資料庫管理中應該注意UNDO資料表空間的空間是否足夠,採用自動擴充還是限制大小,undo_retention值的設定等等。

二 備份與恢複UNDO資料表空間講解

備份與恢複UNDO資料表空間,首先要有備份。使用RMAN備份完成後,我們類比UNDO資料表空間丟失。此時做更新操作仍然成功,因為shared pool和buffer cache存放了更新的資訊。如果我們重新整理shared pool和buffer cache,再做串連使用者或者更新操作,會提示資料檔案找不到。因為UNDO資料表空間丟失,並且UNDO資料表空間不可離線,所以我們不能在資料庫運行狀態下對UNDO資料表空間進行恢複。這就要求我們關閉資料庫進行恢複操作。如果在真實環境中進行操作,務必在業務低峰期或者測試庫進行操作。我們使用一致性關閉資料庫會失敗,只有強制關閉。此時參數檔案、控制檔案正常,只是資料檔案不正常,所以我們能把資料庫啟動到MOUNT狀態。啟動到MOUNT狀態後,我們需要使UNDO資料表空間資料檔案離線,注意此時的資料檔案編號。然後登入到RMAN中,還原UNDO資料表空間資料檔案,實際上做了一個拷貝的操作,從備份檔案中拷貝UNDO資料表空間資料檔案到資料目錄,待拷貝完成後,我們需要對UNDO資料表空間資料檔案進行恢複。恢複完成後,再使UNDO資料表空間資料檔案線上,此時的資料庫是MOUNT狀態,我們需要開啟資料庫。如果所有的操作都成功,就可以對資料進行更新。

三 類比

Step 1,RMAN中備份全庫

RMAN> BACKUP DATABASE;

Starting backup at 12-DEC-13
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/u01/oracle/oradata/justdb/system01.dbf
input datafile file number=00002 name=/u01/oracle/oradata/justdb/sysaux01.dbf
input datafile file number=00003 name=/u01/oracle/oradata/justdb/undotbs01.dbf
input datafile file number=00004 name=/u01/oracle/oradata/justdb/users01.dbf
channel ORA_DISK_1: starting piece 1 at 12-DEC-13
channel ORA_DISK_1: finished piece 1 at 12-DEC-13
piece handle=/u01/oracle/fast_recovery_area/JUSTDB/backupset/2013_12_12/o1_mf_nnndf_TAG20131212T095816_9bl61rrn_.bkp tag=TAG20131212T095816 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:25
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 12-DEC-13
channel ORA_DISK_1: finished piece 1 at 12-DEC-13
piece handle=/u01/oracle/fast_recovery_area/JUSTDB/backupset/2013_12_12/o1_mf_ncsnf_TAG20131212T095816_9bl62lw2_.bkp tag=TAG20131212T095816 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 12-DEC-13

 

Step 2,類比UNDO資料表空間丟失

SQL> CONN / AS SYSDBA
Connected.
SQL> HO mv /u01/oracle/oradata/justdb/undotbs01.dbf /opt/learn/

 

Step 3,SQL Plus中串連到sys使用者,重新整理shared pool和buffer cache

SQL> CONN / AS SYSDBA
Connected.

SQL> CONN / AS SYSDBA
Connected.
SQL> ALTER SYSTEM FLUSH shared_pool;

System altered.

SQL> ALTER SYSTEM FLUSH buffer_cache;

System altered.

 

Step 4,SQL Plus串連到scoot使用者,發現報ORA-01110錯誤,資料檔案不能找到

SQL> CONN SCOTT/tiger;
ERROR:
ORA-00604: error occurred at recursive SQL level 1
ORA-01116: error in opening database file 3
ORA-01110: data file 3: '/u01/oracle/oradata/justdb/undotbs01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3


Warning: You are no longer connected to ORACLE.

 

Step 5,SQL Plus一致性關閉資料庫,失敗,只有強制關閉資料庫

SQL> CONN / AS SYSDBA
CONN / AS SYSDBA
Connected.
SQL> SHUTDOWN IMMEDIATE;
ORA-01116: error in opening database file 3
ORA-01110: data file 3: '/u01/oracle/oradata/justdb/undotbs01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
SQL> SHUTDOWN ABORT;
ORACLE instance shut down.

 

Step 6,再次登入到SQL Plus,啟動資料庫到MOUNT狀態

[oracle@orcl ~]$ sqlplus
[uniread] Loaded history (157 lines)

SQL*Plus: Release 11.2.0.3.0 Production on Thu Dec 12 10:37:52 2013

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

Connected to an idle instance.

SQL> STARTUP MOUNT;
ORACLE instance started.

Total System Global Area 1269366784 bytes
Fixed Size        2227984 bytes
Variable Size    754974960 bytes
Database Buffers    503316480 bytes
Redo Buffers        8847360 bytes
Database mounted.

 

Step 7,SQL Plus中使3號檔案(UNDO資料表空間)離線

SQL> ALTER DATABASE DATAFILE 3 OFFLINE;

Database altered.

 

Step 8,使用sys使用者登入到RMAN

[oracle@orcl ~]$ uniread rman target /
[uniread] Loaded history (96 lines)

Recovery Manager: Release 11.2.0.3.0 - Production on Thu Dec 12 10:38:26 2013

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


connected to target database: JUSTDB (DBID=57321598, not open)

RMAN>

 

Step 9,RMAN中還原3號檔案

RMAN> RESTORE DATAFILE 3;

Starting restore at 12-DEC-13
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=20 device type=DISK

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00003 to /u01/oracle/oradata/justdb/undotbs01.dbf
channel ORA_DISK_1: reading from backup piece /u01/oracle/fast_recovery_area/JUSTDB/backupset/2013_12_12/o1_mf_nnndf_TAG20131212T095816_9bl61rrn_.bkp
channel ORA_DISK_1: piece handle=/u01/oracle/fast_recovery_area/JUSTDB/backupset/2013_12_12/o1_mf_nnndf_TAG20131212T095816_9bl61rrn_.bkp tag=TAG20131212T095816
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 12-DEC-13

 

Step 10,RMAN中恢複3號檔案

RMAN> RECOVER DATAFILE 3;
RECOVER DATAFILE 3;

Starting recover at 12-DEC-13
using channel ORA_DISK_1

starting media recovery
media recovery complete, elapsed time: 00:00:00

Finished recover at 12-DEC-13

 

Step 11,SQL Plus中使3號資料檔案線上

SQL> ALTER DATABASE DATAFILE 3 ONLINE;

Database altered.

 

Step 12,SQL Plus中開啟資料庫

SQL> ALTER DATABASE OPEN;

Database altered.

 

Step 13,SQL Plus查看資料,插入資料,成功

SQL> SELECT * FROM scott.dept;

    DEPTNO DNAME    LOC
---------- -------------- -------------
  10 ACCOUNTING  NEW YORK
  20 RESEARCH  DALLAS
  30 SALES    CHICAGO
  40 OPERATIONS  BOSTON

SQL> INSERT INTO dept VALUES(89,'GZ','DBA');

1 row created.

SQL> COMMIT;

Commit complete.

推薦閱讀:

RMAN 配置歸檔日誌刪除策略

Oracle基礎教程之通過RMAN複製資料庫

RMAN備份策略制定參考內容

RMAN備份學習筆記

OracleDatabase Backup加密 RMAN加密

相關文章

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.