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

來源:互聯網
上載者:User

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

增量備份的應用在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
----------------------------------------------------------------------------------------------------------------

-

一、日誌成員丟失:
    要處理重做記錄檔的丟失問題,瞭解重做日誌組的可能狀態非常重要。在 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';  --查看當前資料庫預設資料庫


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

-
三、重建索引、丟失了索引資料表空間後進行恢複

重新建立索引

使用以下選項可縮短建立索引所花費的時間:

PARALLEL NOLOGGING

   PARALLEL(NOPARALLEL 是預設值):多個進程可以同時協同工作來建立索引。與單個伺服器處理序按順序建立索引相比,通過

在多個伺服器處理序之間分配建立索引所需的工作,Oracle 伺服器可以更快速地建立索引。將隨機對錶取樣並找到一組索引關鍵

字,這些索引關鍵字按照指定的並行度將索引平均分為相同數目的片段。第一組查詢進程將掃描表,提取關鍵字、行 ID 對並基

於關鍵字將每個對發送到第二組查詢進程中的一個進程中。第二組中的每個進程都對關鍵字進行排序並按常規方式構建索引。所

有索引片段構建完成後,並行協調程式會將這些片段(已進行排序)級聯以形成最終的索引。

SQL> CREATE INDEX rname_idx 
  ON hr.regions (region_name)
   PARALLEL 4;

  
   NOLOGGING:使用此關鍵字會加快索引的建立速度,因為建立進程建立的重做日誌 條目極少。這種工作量大幅減小的重做生

成也適用於直接路徑插入和 Direct Loader (SQL*Loader) 插入。這是永久性屬性,因此將顯示在資料字典中。可以隨時使用

ALTER INDEX NOLOGGING/LOGGING 命令來加以更新。
註:若資料庫在nologging狀態時,所操作的資料應該備份,再將nologging改回來,以免重大失誤難以恢複
 
丟失了索引資料表空間後進行恢複:
   索引丟失時,更為快速、簡單的方法是重新建立而不是嘗試恢複索引。
 
 索引是計算得到的對象,因為它們不提供任何未經處理資料,只是已存在資料的另一表示形式。因此,在大多數情況下,可以很

容易地重新建立索引。
如果您的資料表空間僅包含索引,則可以簡化在丟失了屬於該資料表空間的資料檔案後的恢複工作。
如果丟失了此類資料檔案,則可以

執行以下步驟:

1.刪除資料檔案。

2.刪除資料表空間。 3.重新建立索引資料表空間。

4.重新建立包含在資料表空間中的索引。
1.可以在不執行 RECOVER 任務的情況下恢複僅包含索引的資料表空間。

2.如果屬於僅包含索引的資料表空間的資料檔案丟失,則更為簡單的方法可能是重新建立資料表空間和重新建立索引。

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

-
四、重新建立口令驗證檔案


1.密碼檔案丟失
cd  $ORACLE_HOME/dbs  --密碼檔案的位置
ls -lrt|grep orapw
rm orapw...  --刪除密碼檔案

2.登陸
SQL> CONNECT sys/admin AS SYSDBA
  --登陸失敗,未找到密碼檔案

3.另一種方式登入:
sqlplus / as sysdba
   --os層級登陸
grant sysdba to hr;
  --授權sysdba給hr,會報錯;
SQL> grant sysdba to admin2;

grant sysdba to admin2

*

ERROR at line 1:

ORA-01994: GRANT failed: password file missing or disabled

4.建立密碼檔案
[oracle@ocum ~]$ orapwd
Usage: orapwd file=<fname> entries=<users> force=<y/n> ignorecase=<y/n> nosysdba=<y/n>

  where
    file - name of password file (required),
    password - password for SYS will be prompted if not specified at command line,
    entries - maximum number of distinct DBA (optional),
    force - whether to overwrite existing file (optional),
    ignorecase - passwords are case-insensitive (optional),
    nosysdba - whether to shut out the SYSDBA logon (optional Database Vault only).
   
  There must be no spaces around the equal-to (=) character.

 --使用口令公用程式 orapwd 建立口令檔案。
orapwd file=filename password=password entries=max_users
其中:
 --
filename 是口令檔案的名稱(必需)。
 --
password 是 SYS 的口令(可選)。如果未包含 password 參數,則會收到提示,要求您輸入口令。
 --
Entries 是允許以 SYSDBA 或 SYSOPER 身份串連的不同使用者的最大數量。如果超出了此數值,必須建立新口令檔案。使用較

大的數值比較保險。
 --“等號”(=) 字元兩邊沒有空格。
 
 --樣本:$ orapwd file=$ORACLE_HOME/dbs/orapworcl password=oracle entries=5

5.驗證密碼檔案是否可用

SQL> CONNECT sys/admin AS SYSDBA


SQL> grant sysdba to admin2;


面向資料庫管理員的驗證方法  

根據是希望在資料庫所在的那一台電腦上本地管理資料庫,還是希望從一個遠程客戶機管理許多不同的資料庫伺服器,可以選

擇使用作業系統驗證或口令檔案驗證來驗證資料庫管理員:

如果資料庫具有口令檔案且您已經具有 SYSDBA 或 SYSOPER 系統許可權,則可以通過口令檔案進行驗證。 

如果伺服器未使用口令檔案,或者您不具有 SYSDBA 或 SYSOPER 許可權因而不在口令檔案中,則可以使用作業系統驗證。在大多

數作業系統中,資料庫管理員的驗證需要將資料庫管理員的作業系統使用者名稱放置到一個特殊組中,一般稱為 OSDBA。該組中的用

戶將被授予 SYSDBA 許可權。一個類似的組 OSOPER 用於向使用者授予 SYSOPER 許可權。

作業系統驗證優先於口令檔案驗證。特別是,如果您是作業系統的 OSDBA 或 OSOPER 組的成員,並且以 SYSDBA 或 SYSOPER 身

份串連,則串連時您將具有相關的系統管理權限,而與您指定的使用者名稱/口令無關。

Oracle DB 提供了一個口令公用程式 orapwd 來建立口令檔案。使用 SYSDBA 許可權串連時,是以 SYS 方案串連,而不是以與用

戶名關聯的方案串連。對於 SYSOPER,則將串連到 PUBLIC 方案。使用口令檔案訪問資料庫的許可權由授權使用者發出的 GRANT 命

令提供。 
   通常,口令檔案不包含在備份中,因為幾乎在所有情況下,均可方便地重新建立口令檔案。
保護口令檔案以及標識口令檔案

位置的環境變數對於系統安全性是至關重要的。對這些檔案和環境變數具有存取權限的任何使用者都可能潛在地影響串連的安全性

。 
如果使用 REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE 或 SHARED 裝載了資料庫或執行個體,則不應刪除或修改口令檔案。否則,將無

法使用該口令檔案從遠程重新串連。
註:口令區分大小寫,在重新建立口令檔案時必須考慮到這一點。

 

 


 


oracle中如果redo記錄檔損壞,應該怎恢複呀?

很簡單 進入rman
redolog file檔案的丟失:
shutdown immediate;
starup mount;
alter database resetlogs;(這一步可能會出現問題 則在這之前加上一句
recover database until cancel;
並且所有步驟重新再在sqlplus中來一遍)

不過這個方法使用了resetlogs,有可能造成資料損失
 
ORACLE怎通過DBF檔案恢複資料

oralce冷備份的恢複方法:
安裝跟以前一模一樣版本的資料庫,包括參數配置,global.dbname,sid。
關閉資料庫,刪除controlfile,logfile,datafile。
把你原來崩潰的保留的controlfile,logfile,datafile複製到你刪除的那個目錄下。
開啟資料庫。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.