ORACLE類比臨時檔案、日誌成員、口令檔案丟失情況與恢複【weber出品】

來源:互聯網
上載者:User

標籤:style   blog   color   io   os   使用   ar   for   檔案   

一、暫存資料表空間檔案、記錄檔和口令檔案都屬於非關鍵性檔案,因為這些檔案丟失後並不會影響到整個資料庫的完整性。

    但是,當這些檔案丟失後我們需要快速的找回這些檔案。接下來我將類比暫存資料表空間檔案、記錄檔和口令檔案丟失的情況。

二、如果屬於 TEMP 資料表空間的臨時檔案丟失或損壞,則 TEMP 資料表空間將不可用。例如:在執行需要 TEMP 空間進行排序的 SQL 陳述式過程中,此問題將聲明其為錯誤。

  一般會用到暫存資料表空間的情境有:

  索引create或rebuild

Order by 或 group byDistinct 操作Union 或 intersect 或 minusSort-merge joinsanalyze現在我們類比臨時檔案丟失,但是在排序order by 的時候要用到的情境:
select NAME from v$tempfile;NAME--------------------------------------------------------------------------------/u01/oracle/oradata/orcl/temp02.dbfSQL> show parameter pgaNAME                                 TYPE        VALUE------------------------------------ ----------- ------------------------------pga_aggregate_target                 big integer 192MSQL> alter system set pga_aggregate_target=10M;

把pga_aggregate_target給調小些,這樣order by的時候就一定會用到臨時檔案了。

  在作業系統中,把這個臨時檔案給刪除:
rm -rf /u01/oracle/oradata/orcl/temp02.dbf

建立類比表

SQL> conn scott/tigerSQL> create table temp_table as select * from all_objects;SQL> insert into temp_table select * from all_objects;SQL> commit;SQL> SQL> select * from temp_table order by 1,2,3,4,5,6,7,8,9,10,11,12,13;select * from temp_table order by 1,2,3,4,5,6,7,8,9,10,11,12,13                  *ERROR at line 1:ORA-01116: error in opening database file 201ORA-01110: data file 201: ‘/u01/oracle/oradata/orcl/temp01.dbf‘ORA-27041: unable to open fileLinux Error: 2: No such file or directoryAdditional information: 3

不需要重新啟動資料庫就可以恢複丟失的 TEMPFILE。

如果要恢複資料庫,可以先在資料庫中添加一個新的資料檔案,然後刪除那個已在 OS 層刪除的資料檔案。

SQL> conn / as sysdbaConnected.SQL> ALTER TABLESPACE temp ADD TEMPFILE ‘/u01/oracle/oradata/orcl/temp02.dbf‘ SIZE 20M;Tablespace altered.SQL> ALTER TABLESPACE temp DROP TEMPFILE ‘/u01/oracle/oradata/orcl/temp01.dbf‘;Tablespace altered.SQL> select name from v$tempfile;NAME--------------------------------------------------------------------------------/u01/oracle/oradata/orcl/temp02.dbf

再次執行order by的語句就可以成功了。因為臨時檔案的內容不是非常的重要,屬於可有可無的那種,沒有了重建就是了。 

三、線上重做日誌始終是以下三種狀態之一:current、inactive、active。所以重做日誌的備份和恢複就要分三種了。  其實你只要懂得額current狀態下的重做日誌的恢複就懂得了剩下兩種的情況是如何恢複的。  如果狀態為INACTIVE的日誌組中的所有成員丟失:  
select a.group#,a.sequence#,a.archived,a.status,b.member from v$log a,v$logfile bwhere a.group#=b.group#order by 1;  GROUP# SEQUENCE# ARC STATUS   MEMBER------ --------- --- -------- ------------------------------------------     1        15 YES CURRENT /u01/oracle/oradata/orcl/redo01.log     1        15 YES CURRENT /u01/oracle/oradata/orcl/redo0101.log     2        17 NO  INACTIVE  /u01/oracle/oradata/orcl/redo0201.log     2        17 NO  INACTIVE  /u01/oracle/oradata/orcl/redo02.log     3        16 YES INACTIVE /u01/oracle/oradata/orcl/redo0301.log     3        16 YES INACTIVE /u01/oracle/oradata/orcl/redo03.logSQL> !rm -rf /u01/oracle/oradata/orcl/redo01.logSQL> !rm -rf /u01/oracle/oradata/orcl/redo0101.log

接下來將current轉換成active狀態:

SQL> alter system switch logfile;--先讓其變成ACTIVESystem altered.SQL> select a.group#,a.sequence#,a.archived,a.status,b.member from v$log a,v$logfile bwhere a.group#=b.group#order by 1;  2    3  GROUP# SEQUENCE# ARC STATUS   MEMBER------ --------- --- -------- ------------------------------------------     1        22 NO  ACTIVE   /u01/oracle/oradata/orcl/redo01.log     1        22 NO  ACTIVE   /u01/oracle/oradata/orcl/redo0101.log     2        23 NO  CURRENT  /u01/oracle/oradata/orcl/redo0201.log     2        23 NO  CURRENT  /u01/oracle/oradata/orcl/redo02.log     3        21 YES INACTIVE /u01/oracle/oradata/orcl/redo0301.log     3        21 YES INACTIVE /u01/oracle/oradata/orcl/redo03.log6 rows selected.SQL> alter system checkpoint;--再讓其變成INACTIVESystem altered.SQL> select a.group#,a.sequence#,a.archived,a.status,b.member from v$log a,v$logfile bwhere a.group#=b.group#order by 1;   2    3  GROUP# SEQUENCE# ARC STATUS   MEMBER------ --------- --- -------- ------------------------------------------     1        22 NO  INACTIVE /u01/oracle/oradata/orcl/redo01.log     1        22 NO  INACTIVE /u01/oracle/oradata/orcl/redo0101.log     2        23 NO  CURRENT  /u01/oracle/oradata/orcl/redo0201.log     2        23 NO  CURRENT  /u01/oracle/oradata/orcl/redo02.log     3        21 YES INACTIVE /u01/oracle/oradata/orcl/redo0301.log     3        21 YES INACTIVE /u01/oracle/oradata/orcl/redo03.log6 rows selected.

關閉資料庫,啟動到mounted狀態下:

SQL> shutdown immediate
SQL>startup mount

SQL>alter database clear  unarchived logfile group 1---清除

SQL> alter database open;

 

Database altered.

 

SQL>  select a.group#,a.sequence#,a.archived,a.status,b.member from v$log a,v$logfile b

where a.group#=b.group#

order by 1;   2    3 

 

GROUP# SEQUENCE# ARC STATUS   MEMBER

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

     1        24 NO  CURRENT  /u01/oracle/oradata/orcl/redo01.log

     1        24 NO  CURRENT  /u01/oracle/oradata/orcl/redo0101.log

     2        23 YES INACTIVE /u01/oracle/oradata/orcl/redo0201.log

     2        23 YES INACTIVE /u01/oracle/oradata/orcl/redo02.log

     3        21 YES INACTIVE /u01/oracle/oradata/orcl/redo0301.log

     3        21 YES INACTIVE /u01/oracle/oradata/orcl/redo03.log

好了,這樣重做日誌組1就回來了。不過,current日誌組的成員如果一旦兩個都壞了,雖然整個資料還是完整的,但是如果想要恢複current這個業務之前的狀態就有不可以了。

 四、類比口令檔案損壞的情況。

刪除口令檔案:

cd $ORACLE_HOME/dbs/rm -rf orapworcl

使用作業系統驗證登陸資料庫:

[[email protected] dbs]$ sqlplus sys/[email protected] as sysdbaSQL*Plus: Release 10.2.0.1.0 - Production on Sat Aug 18 08:40:01 2012Copyright (c) 1982, 2005, Oracle.  All rights reserved.ERROR:ORA-01031: insufficient privilegesEnter user-name: 

口令檔案丟失,使用口令驗證無法登陸,只能通過作業系統驗證登陸

[[email protected] dbs]$ sqlplus / as sysdbaSQL*Plus: Release 10.2.0.1.0 - Production on Sat Aug 18 08:40:55 2012Copyright (c) 1982, 2005, Oracle.  All rights reserved.Connected to:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ProductionWith the Partitioning, OLAP and Data Mining optionsSQL> 

將 REMOTE_LOGIN_PASSWORDFILE 參數設定為 NONE 並重新啟動資料庫

 

REMOTE_LOGIN_PASSWORDFILE 參數有三個值:

NONE:禁止使用口令登陸

EXCLUSIVE:主要是針對於多執行個體來說的,如果資料庫是多執行個體的,也就是RAC,只允許某個單一實例使用口令檔案

SHARE:主要是針對於多執行個體來說的,如果資料庫是多執行個體的,也就是RAC,允許所有的執行個體共用使用一個口令檔案

alter system set REMOTE_LOGIN_PASSWORDFILE=NONE scope=spfilestartup force

使用口令公用程式orapwd建立口令檔案

orapwd file=filename password=password entries=max_users 

 

其中:

filename 是口令檔案的名稱

password 是 SYSOPER 和 SYSDBA 的口令

Entries 是允許以 SYSDBA 或 SYSOPER 身份串連的最大不同使用者數

如果超出了此數值,必須建立新口令檔案,使用較大的數值比較保險

等號 (=) 字元兩邊沒有空格

orapwd file=$ORACLE_HOME/dbs/orapworcl password=a entries=5alter system set REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;startup force

使用在建立的口令檔案串連到資料庫

CONNECT sys/[email protected] AS SYSDBA

 

 

ORACLE類比臨時檔案、日誌成員、口令檔案丟失情況與恢複【weber出品】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.