ORACLE控制檔案管理
控制檔案的管理
1、個數和位置的管理(因為控制檔案時在引數檔案定義的,所以可以直接修改引數檔案)
SPfile修改的步驟:
a) 修改SPFILE引數control_files
b) 一致性關閉資料庫
c) 增加或減少控制檔案
d) 啟動資料庫使用SPFILE
e) 驗證結果
實驗:
減少控制檔案:
a)SQL> show parameter control_f;
b)Sql>alter system set control_files='/oracle/oradata/oracleto/control01.ctl' scope=spfile;
c)Shutdown immediate
d)Startup 完成
增加控制檔案:
a)sql>show parameter control_f; 確認控制檔案的路徑等相關資訊。
b)Sql>alter system set control_files='/oracle/oradata/oracleto/control01.ctl' ,'/oracle/oradata/oracleto/control02.ctl','/oracle/oradata/oracleto/control03.ctl' scope=spfile;
c)Shutdown immediate;
d)Startup 此時會報版本號錯誤,那麼需要從高版本的複製至低版本。
ORA-00214: control file '/oracle/oradata/oracleto/control01.ctl' version 771 inconsistent with file '/oracle/oradata/oracleto/control02.ctl' version 762
e)sql>show parameter control_f; 確認控制檔案的路徑等相關資訊。
f)SQL> ho cp /oracle/oradata/oracleto/control01.ctl /oracle/oradata/oracleto/control02.ctl
g)SQL> ho cp /oracle/oradata/oracleto/control01.ctl /oracle/oradata/oracleto/control03.ctl
h)Alter database mount; 檢查是否解決問題。
i)Startup 完成。
Pfile修改的步驟:
a) 一致性關閉資料庫
b) 修改Pfile引數
c) 增加或減少控制檔案
d) 啟動資料庫使用PFILE
e) 驗證結果
2、狀態管理
目的是看資料庫使用的控制檔案與引數定義控制檔案是否吻合。
檔案。每到資料庫啟動到mount都讀控制檔案並把資料庫的結構對應到實際的檔案上去才能啟動。
存在狀態:
a) 找位置和個數 show parameter control_f 查處的結果在透過作業系統來對比
Ho ll -h /路徑
b) 需要檢視磁碟空間使用情況 sql>ho df -H
c) 檢視檔案的大小 sql>ho ls -lh /oracle/oradata/ora
控制檔案儘量控制在100M以內,如果超過了,那麼需要儘快採取措施,一般情況下需要重建控制檔案。
3、控制檔案備份。
a) Sql>alter database backup controlfile to '/oracle/bakcup/control20120522.bak'; 歸檔模式下這樣備份才有作用 ,當控制檔案出現問題是,可以直接在作業系統下複製過去就行。
b) Sql>alter database backup controlfile to trace as '/oracle/....txt' 這樣就得到一個重建控制檔案的指令碼。
c) 透過rman備份 也需要歸檔模式才能使用rman
Rman>backup current controlfile; 自動就在閃回目錄下。
或者rman>backup database include current controlfile; 備份資料庫的同時也備份控制檔案
4、重建控制檔案 原則
恢復管理:
如果控制檔案丟失和不一致了,需要DBA處理,首先確認控制檔案交易號碼那個比較新那個比較舊。複製新的給舊的或者直接更改引數檔案control_file使用新的
5、幾種丟失情況的解決:
確認資料庫是否處於歸檔模式,不是歸檔,則先全備,然後建立新的控制檔案即可。
解決辦法:
a)、確認資料檔案,預設的資料檔案儲存在$ORACLE_BASE/oradata/
b)檢視告警日誌 vi $ORACLE_BASE/admin/$ORACLE_SID/bdump/alter_orcl.log
c)建立控制檔案(有些相關的檔案可以透過ALTER日誌查詢到相關的資料,資料檔案,日誌檔案個數、路徑、大小很重要,一定要搞清楚)
CREATE CONTROLFILE REUSE DATABASE "ORACLETO" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/oracle/oradata/oracleto/redo01.log' SIZE 50M,
GROUP 2 '/oracle/oradata/oracleto/redo02.log' SIZE 50M,
GROUP 3 '/oracle/oradata/oracleto/redo03.log' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'/oracle/oradata/oracleto/system01.dbf',
'/oracle/oradata/oracleto/undotbs01.dbf',
'/oracle/oradata/oracleto/sysaux01.dbf',
'/oracle/oradata/oracleto/users01.dbf',
'/oracle/oradata/oracleto/example01.dbf'
CHARACTER SET WE8ISO8859P1
d)執行這個sql語句 控制檔案就會建立
e)Sql>alter database open;
這裡會提示資料庫中有一個檔案需要恢復
f)Sql>recover database; 一定要執行這條語句 ,如果需要恢復的內容能在日誌檔案能找到,那麼就可以恢復,如果不能恢復,那麼就需要你加隱藏引數讓資料庫不進行一致性認證。(下面的情況就用到了)
g)Sql>alter databas open;這樣就可以開啟資料了。
歸檔和日誌都在;先全備,然後再使用備份的控制檔案恢復即可
a) 在所有操作之前要做全備,很重要
b) 同樣檢視警告日誌 vi $ORACLE_BASE/admin/$ORACLE_SID/bdump/alter_orcl.log,確認問題所在
c) 確認控制檔案時候在,show parameter control_f 查路徑,ls -l 檢視
d) 確定不在之後,那麼就可以從備份檔案恢復
e)
SQL> show parameter control_
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
control_file_record_keep_time integer 7
control_files string /oracle/oradata/oracleto/contr
ol01.ctl, /oracle/oradata/orac
leto/control02.ctl, /oracle/or
adata/oracleto/control03.ctl
SQL> ho cp /oracle/controlbak.ctl /oracle/oradata/oracleto/control01.ctl
SQL> ho cp /oracle/controlbak.ctl /oracle/oradata/oracleto/control02.ctl
SQL> ho cp /oracle/controlbak.ctl /oracle/oradata/oracleto/control03.ctl
SQL> ho ls /oracle/oradata/oracleto/
SQL> alter database mount;
Database altered.
SQL> alter database open; ------------恢復失敗
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL> alter database recover database using backup controlfile; 用備份的控制檔案恢復
alter database recover database using backup controlfile
*
ERROR at line 1:
ORA-00279: change 792378 generated at 05/24/2012 07:32:41 needed for thread 1
ORA-00289: suggestion : /oracle/flash_recovery_area/ORACLETONY/archivelog/2012_05_26/o1_mf_1_13_%u_.arc
ORA-00280: change 792378 for thread 1 is in sequence #13
SQL> shutdwon immediate
SQL> startup
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1218316 bytes
Variable Size 130025716 bytes
Database Buffers 33554432 bytes
Redo Buffers 2973696 bytes
Database mounted. -----------仍然不能恢復
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL> shutdonwn immediate
在重做上面一步:
SQL> alter database recover database using backup controlfile; 不行
SQL> alter database recover database using backup controlfile until change 792378; ---------------也不行
alter database recover database using backup controlfile until change 792378
*
ERROR at line 1:
ORA-00275: media recovery has already been started
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01156: recovery in progress may need access to files
SQL> shutdown immediate;
SQL> startup
SQL> alter database recover database using backup controlfile until change 792378;
SQL> alter system set "_allow_resetlogs_corruption"=true scope=spfile; 使用隱藏引數,不讓資料庫進行一致性驗證。
SQL> startup force
SQL> alter database open resetlogs; 可以啟動了
Sql>startup
最後要幹掉隱藏引數,不然以後系統會出現ORA-600的內部錯誤。
Sql>show parameter _allow
Sql>alter database reset "_allow_resetlogs_corruption" scope=spfile sid='*';
歸檔模式下使用正常的方式來恢復。上面那種方法錯誤的未執行alter database open resetlogs, 而先執行 alter database recover database using backup controlfile,最後還使用了不該用的隱藏引數。
所以建議使用下面的辦法:
第一種方法
SQL> startup
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1218316 bytes
Variable Size 125831412 bytes
Database Buffers 37748736 bytes
Redo Buffers 2973696 bytes
ORA-00205: error in identifying control file, check alert log for more info 檢視告警日誌。Vi $ORACLE_BASE/admin/alter.....log
SQL> shwo parameter control_f
SQL> ho ls /oracle/oradata/oracleto
SQL> ho cp /oracle/control2012.ctl /oracle/oradata/oracleto/control01.ctl
SQL> ho cp /oracle/control2012.ctl /oracle/oradata/oracleto/control02.ctl
SQL> ho cp /oracle/control2012.ctl /oracle/oradata/oracleto/control03.ctl
SQL> shutdown immediate
SQL> startup
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1218316 bytes
Variable Size 125831412 bytes
Database Buffers 37748736 bytes
Redo Buffers 2973696 bytes
Database mounted.
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced 連線中斷
SQL> startup 可以正常啟動了
ORACLE instance started.
‚第一種方法出現第二種情況
SQL>alter database open resetlogs;
如果這裡提示資料庫一致性驗證錯誤,那麼需要做以下幾步操作
Sql>recover database;
提示需要用老的控制檔案。
Sql>alter database recover database using backup controlfile;
還是不行。提示錯誤
Sql>shutdown immediate
Sql>startup
Sql>alter database open resetlogs;
Sql>recover database 同樣提示需要老的控制檔案
Sql>alter database recover database using backup controlfile;
執行之後會提示歸檔日誌找不到,需要從日誌檔案中找,所以指定日誌檔案,那麼你可以挨個將日誌檔案的路徑輸入進去,
$ORACLE_BASE/oradata/.....(需要絕對路徑)
Sql> alter database resetlogs; 這樣就可以恢復了。
ƒ第二種方法是用隱藏引數 (一般不用)
SQL> startup
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1218316 bytes
Variable Size 125831412 bytes
Database Buffers 37748736 bytes
Redo Buffers 2973696 bytes
ORA-00205: error in identifying control file, check alert log for more info 檢視告警日誌。Vi $ORACLE_BASE/admin/alter.....log
SQL> shwo parameter control_f
SQL> ho ls /oracle/oradata/oracleto
SQL> ho cp /oracle/control2012.ctl /oracle/oradata/oracleto/control01.ctl
SQL> ho cp /oracle/control2012.ctl /oracle/oradata/oracleto/control02.ctl
SQL> ho cp /oracle/control2012.ctl /oracle/oradata/oracleto/control03.ctl
SQL> shutdown immediate
SQL> startup
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1218316 bytes
Variable Size 125831412 bytes
Database Buffers 37748736 bytes
Redo Buffers 2973696 bytes
Database mounted.
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
Sql>recover database;
提示不能恢復,需要是用老的控制檔案恢復
Sql>alter database recover database using backup controlfile; 還是不行
SQL> alter system set "_allow_resetlogs_corruption"=true scope=spfile; 使用隱藏引數,不讓資料庫進行一致性驗證。
Sql>start force
Sql>alter database open resetlog; 例項終端
Sql>重新連線,startup
最後去掉隱藏引數
Sql>show parameter _allow
Sql>alter database reset "_allow_resetlogs_corruption" scope=spfile sid='*';
完成。
歸檔但日誌不全;先全備,然後建立新的控制檔案。
參考重建控制檔案部分。
新建控制檔案語句:
可以在在資料庫執行在OPEN和mount的時候,可以執行alter database backup controlfile to trace as '
D、開啟歸檔模式 (SQL> archive log list 資料庫OPEN階段可以查詢)
首先資料庫要處於mount階段才能開啟, SQL> alter database archivelog;
然後把資料開啟 SQL> archive log list 查詢確認。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27038344/viewspace-733289/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 控制檔案Oracle
- Oracle重建控制檔案Oracle
- ORACLE 新增控制檔案Oracle
- oracle 重建控制檔案Oracle
- Oracle 控制檔案的重建Oracle
- Oracle控制檔案基礎Oracle
- oracle 關於--控制檔案Oracle
- 增加oracle的控制檔案Oracle
- oracle sqlldr控制檔案模板OracleSQL
- Oracle 控制檔案內容Oracle
- 【ORACLE CONCEPT】控制檔案Oracle
- ORACLE 概要檔案管理Oracle
- ORACLE概要檔案管理Oracle
- oracle控制檔案及引數檔案問題Oracle
- Oracle 控制檔案(CONTROLFILE)Oracle
- 關於oracle的控制檔案Oracle
- ORACLE控制檔案的重建 (轉)Oracle
- 6.管理控制檔案(筆記)筆記
- 【控制檔案】映象控制檔案
- oracle中移動控制檔案、資料檔案、日誌檔案Oracle
- oracle 日誌檔案管理Oracle
- oracle 11g 新增控制檔案Oracle
- oracle控制檔案轉儲說明Oracle
- 重建Oracle資料庫控制檔案Oracle資料庫
- Oracle 控制檔案(CONTROLFILE) -- <2>Oracle
- Oracle 控制檔案(CONTROLFILE)- <1>Oracle
- 詳述Oracle 多路複用的控制檔案——增加一個控制檔案副本Oracle
- Oracle 11g重建控制檔案——如何獲取建立控制檔案指令碼Oracle指令碼
- oracle10g_備份控制檔案_得到重建控制檔案的指令碼Oracle指令碼
- oracle之 利用 controlfile trace檔案重建控制檔案Oracle
- Oracle 11g重建控制檔案——控制檔案全部丟失,從零開始Oracle
- 在Oracle中移動資料檔案、控制檔案和日誌檔案Oracle
- Oracle RAC引數檔案管理Oracle
- oracle檔案管理之 redo logOracle
- ORACLE 控制檔案(Control Files)概述Oracle
- Oracle 控制檔案損壞解決方案Oracle
- oracle控制檔案複製、移動方式Oracle
- Oracle 11g 備份控制檔案Oracle