Oracle非關鍵檔案恢複,redo、臨時檔案、索引檔案、密碼檔案

來源:互聯網
上載者:User

Oracle非關鍵檔案恢複,redo、臨時檔案、索引檔案、密碼檔案

增量備份的應用在recovery階段,不再restore階段

瞭解資料庫設定表:
SQL>desc database_properties
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 PROPERTY_NAME                            NOT NULL VARCHAR2(30)
 PROPERTY_VALUE                                    VARCHAR2(4000)
 DESCRIPTION                                        VARCHAR2(4000)

關鍵性與非關鍵性
非關鍵性檔案是指資料庫和大多數應用程式沒有它也能繼續啟動並執行檔案。例如,如果資料庫丟失了一個多工重做記錄檔,仍可使用其它重做記錄檔副本來保持資料庫持續運行。
雖然丟失非關鍵性檔案不會導致資料庫崩潰,但它會削弱資料庫的功能。例如:丟失索引資料表空間會導致應用程式和查詢的運行速度大幅減慢,或者,如果這些索引用於強制實施約束,則丟失後甚至會導致應用程式無法使用。
丟失聯機重做日誌組(只要不是當前聯機日誌組)會導致在 LGWR 下一次嘗試寫入組時資料庫操作被掛起,直到產生新的記錄檔為止。


丟失暫存資料表空間會使使用者無法執行查詢或建立索引,直到將這些使用者指派到新的暫存資料表空間為止。
 --10g時丟失暫存資料表空間,資料庫不能啟動,當11g時,丟失了臨時檔案,資料庫會自動建立一個同名同位的臨時檔案;
 --11g中發生此情時發生這種情況時,啟動過程中會在預警日誌中顯示類似下面的訊息:
 --
Re-creating tempfile /u01/app/Oracle/oradata/orcl/temp01.dbf
----------------------------------------------------------------------------------------------------------------

關於redo log的修改與重建

undo資料表空間與redo日誌

一、日誌成員丟失:
    要處理重做記錄檔的丟失問題,瞭解重做日誌組的可能狀態非常重要。在 Oracle DB 正常運行過程中,重做日誌組會迴圈經曆三種不同的狀態。按照迴圈的順序,狀態分別是:

CURRENT:此狀態表明 LGWR 正在向重做日誌組寫入資料,以記錄資料庫中進行中的所有交易處理的重做資料。該日誌組將保持此狀態,直到切換至其它日誌組為止。

ACTIVE:重做日誌組仍包含恢複執行個體所需的重做資料。這是尚未執行檢查點期間重做日誌組所處的狀態,重做日誌組中出現的所有資料更改都將寫出到資料檔案。

INACTIVE:上述檢查點已經執行,這表示不再需要該重做日誌組來恢複執行個體,它可以變為下一個 CURRENT 日誌組。

對線上redo log的操作:

查看日誌組的狀態:
SQL>select GROUP#,SEQUENCE#,MEMBERS,ARCHIVED,STATUS from v$log;

    GROUP#  SEQUENCE#    MEMBERS ARC STATUS
---------- ---------- ---------- --- ----------------
        1          7          2 YES INACTIVE
        2          8          2 NO  CURRENT
        3          6          2 YES INACTIVE
查看記錄檔的狀態:
SQL>select GROUP# ,TYPE,MEMBER from v$logfile;

    GROUP# TYPE      MEMBER
---------- -----------------------------------------------------------------
        3 ONLINE
/u01/app/oracle/oradata/PROD/onlinelog/o1_mf_3_b22567o2_.log

        3 ONLINE
/u01/app/oracle/fast_recovery_area/PROD/onlinelog/o1_mf_3_b2256827_.log

        2 ONLINE
/u01/app/oracle/oradata/PROD/onlinelog/o1_mf_2_b2255zsg_.log

        2 ONLINE
/u01/app/oracle/fast_recovery_area/PROD/onlinelog/o1_mf_2_b22560gb_.log

        1 ONLINE
/u01/app/oracle/oradata/PROD/onlinelog/o1_mf_1_b2255npg_.log

        1 ONLINE
/u01/app/oracle/fast_recovery_area/PROD/onlinelog/o1_mf_1_b2255nxl_.log

  --刪除原有的日誌組;(只操作狀態為inactive的日誌組)
  --若要動作記錄組為current時,需先進行日誌切換:alter system switch logfile;
  --若為active時,則可強制進行檢查點:alter system checkpoint;

1.動作記錄檔案;

1).當某個日誌組中的一個資料檔案丟失,對其線上操作,先添加,再刪除;

alter database add logfile member '/u01/app/oracle/oradata/PROD/onlinelog/o1_mf_2_b_.log' to group 2;

alter database drop logfile member '/u01/app/oracle/oradata/PROD/onlinelog/o1_mf_1_b2255npg_.log' to group 2;

2).線上添加一個組,再添加一個成員;

SQL>alter database add logfile group 4 '/u01/app/oracle/oradata/ORCL/onlinelog/redo04.log'size 100m;

SQL>alter database add logfile member'/u01/app/oracle/oradata/ORCL/onlinelog/redo04_b.log' to group 4;

3).查看日誌組及成員;
SQL>select GROUP#,members,BYTES/1024/1024 size_M,STATUS,ARCHIVED from v$log;


2.記錄檔丟失,重啟或alter system switch logfile 觸發報錯;生產庫中一般是日誌切換觸發錯誤;

1)丟失非current redo日誌組

select a.group#, a.status, a.archived,b.member from v$log a,v$logfile b where a.group#=b.group#;
  --查看日誌組狀態及檔案雖在位置

$rm /u01/app/oracle/oradata/ENMOEDU/redo09*
    --刪除第九組的全部檔案
$ls /u01/app/oracle/oradata/ENMOEDU/redo09*
    --查看是否刪除成功
   
Sql> shutdown immediate
Sql> startup
    --重啟資料庫觸發出錯
Sql> startup mount
Sql> alter database clear logfile group 9;
    --重建了第九組的了兩個檔案,兩個檔案都是空的;
Sql> alter database open;

 cat  /u01/app/oracle/oradata/ENMOEDU/redo03*;
    --查看物理地址,查看是否組建檔案


SQL>select GROUP#,members,BYTES/1024/1024 size_M,STATUS,ARCHIVED from v$log;
    --查看日誌組及成員


Alert日誌中的錯誤:
Errors in file

/u01/app/oracle/diag/rdbms/enmoedu/ENMOEDU/trace/ENMOEDU_lgwr_35031.trc:
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/ENMOEDU/redo01.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
Errors in file /u01/app/oracle/diag/rdbms/enmoedu/ENMOEDU/trace/ENMOEDU_lgwr_35031.trc:
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/ENMOEDU/redo01.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

2).丟失當前redo日誌組

select a.group#, a.status, a.archived,b.member
from v$log a,v$logfile b
where a.group#=b.group#;

$rm /u01/app/oracle/oradata/ENMOEDU/redo09*;

alter system switch logfile;
/
/
資料庫出現hanging現象,在alert.log中報錯;

或重啟資料庫觸發錯誤:
Sql> shutdown immediate
Sql> startup
  --觸發出錯
SQL> startup mount
ORACLE instance started.

Total System Global Area  237998080 bytes
Fixed Size                  2227216 bytes
Variable Size            192938992 bytes
Database Buffers          37748736 bytes
Redo Buffers                5083136 bytes
Database mounted.

SQL> alter database clear logfile group 9;
    --丟失current狀態日誌組,不能這樣恢複

alter database clear logfile group 9
*
ERROR at line 1:
ORA-00350: log 9 of instance ENMOEDU (thread 1) needs to be archived
ORA-00312: online log 9 thread 1: '/u01/app/oracle/oradata/ENMOEDU/redo03.log'


SQL> alter database clear unarchived logfile group 9;
    --無歸檔恢複
Database altered.

驗證:

!ls /u01/app/oracle/oradata/ENMOEDU/
 
SQL> select GROUP#,members,BYTES/1024/1024 size_M,STATUS,ARCHIVED from v$log;


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


二、丟失臨時檔案:

1.--查看臨時檔案的位置及名稱
SYS>select name from v$tempfile;
/u01/app/oracle/oradata/PROD/datafile/o1_mf_temp_b22570tq_.tmp

2.--刪除臨時檔案
SYS>!rm /u01/app/oracle/oradata/PROD/datafile/o1_mf_temp_b22570tq_.tmp

3.--觸發錯誤,臨時檔案未找到
SYS>create global temporary table tab_temp as select * from dba_objects;
create global temporary table tab_temp as select * from dba_objects
                                                        *
ERROR at line 1:
ORA-01116: error in opening database file 201
ORA-01110: data file 201:
'/u01/app/oracle/oradata/PROD/datafile/o1_mf_temp_b22570tq_.tmp'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

4.在知道臨時資料檔案丟失時,可以不需要重新啟動資料庫就可以在丟失了臨時檔案後進行恢複;

SQL> ALTER TABLESPACE temp ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp02.dbf' SIZE 20M;
 Tablespace altered.

 

SQL> ALTER TABLESPACE temp DROP TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf';
 

Tablespace altered.
 

5. 1)在11g中還可以重啟資料庫,資料庫會自動重建臨時資料檔案,可以查看alert日誌看相關資訊(一般直接第4步就可以了)

shutdown immediate;

SYS>startup
ORACLE instance started.
Total System Global Area  839282688 bytes
Fixed Size                  2257880 bytes
Variable Size            545262632 bytes
Database Buffers          289406976 bytes
Redo Buffers                2355200 bytes
Database mounted.
Database opened.

SYS>select name from v$tempfile;
/u01/app/oracle/oradata/PROD/datafile/o1_mf_temp_b29o0g6r_.tmp

1 row selected.
  --資料庫重建

2)在11g以前,如資料庫不能重起,可以建立新的暫存資料表空間:

create temporary tablespace temp2 tempfile
'/u01/app/oracle/oradata/orcl/temp2.dbf' size 10m reuse autoextend on  maxsize  200m;

SQL>alter database default temporary tablespace temp2;
  --將新的資料表空間設定為預設的暫存資料表空間

SQL>drop tablespace temp including contents and datafiles;
  --刪除舊的資料表空間及其資料

SQL>ALTER TABLESPACE temp ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp2.dbf' SIZE 20M;
  --給暫存資料表空間添加檔案

SYS>select * from database_properties
        where property_name='DEFAILT_TEMP_TABLESPACE';  --查看當前資料庫預設資料庫

更多詳情見請繼續閱讀下一頁的精彩內容:

  • 1
  • 2
  • 下一頁

相關文章

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.