標籤: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出品】