oracle控制文件問題


下午時連接數據庫突然發現連不上了,監聽報錯找不到服務,於是登錄數據庫所在服務器,查看監聽狀態,
oracle:lsnrctl status
監聽狀態正常,登入數據庫查看
[oracle@frkdb1 ~]$ sqlplus /nolog
SQL*Plus: Release 9.2.0.8.0 - Production on Fri Nov 13 19:45:59 2015
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
SQL>  conn /as sysdba
Connected to an idle instance.
連接到了空閑線程--(0.0數據庫居然宕機了)
發現數據庫宕機進行重啟
SQL> startup
ORACLE instance started.
Total System Global Area 1595480056 bytes
Fixed Size                   452600 bytes
Variable Size             402653184 bytes
Database Buffers         1191182336 bytes
Redo Buffers                1191936 bytes
ORA-00221: error on write to controlfile
ORA-00206: error in writing (block 3, # blocks 1) of controlfile
ORA-00202: controlfile: '/oracledata/frk/control01.ctl'
ORA-27072: skgfdisp: I/O error
Linux Error: 5: Input/output error
Additional information: 2
阿西吧,這都是什么···控制文件出錯了?!/找不到?!
請教大神。。。大神說如果現在mount是沒有問題的,那最大的可能就是控制文件損壞了。
控制文件壞了,要重建控制文件~作為一個小白完全不會啊。
大神說先用命令把原來的控制文件備份一下,然后去網上找一下重建的命令(只能QQ問大神,並不在身邊T T)
 中間自己腦洞大開,將 control01.ctl刪掉,把 control02.ctl復制出一個改名成control01.ctl,但是然並卵,報錯如下:ORA-03113: end-of-file on communication channel
查看告警日志,control02.ctl和control03.ctl也在報錯
Errors in file /oracle/admin/frk/bdump/frk_lgwr_16354.trc:
ORA-00221: error on write to controlfile
ORA-00206: error in writing (block 3, # blocks 1) of controlfile
ORA-00202: controlfile: '/oracledata/frk/control03.ctl'
ORA-27072: skgfdisp: I/O error
Linux Error: 5: Input/output error
Additional information: 2
ORA-00206: error in writing (block 3, # blocks 1) of controlfile
ORA-00202: controlfile: '/oracledata/frk/control02.ctl'
ORA-27072: skgfdisp: I/O error
Linux Error: 5: Input/output error
Additional information: 2
好吧,沒有完全沒有任何備份來恢復控制文件,只能去網上找控制文件恢復語句了;
找到了這個:http://blog.sina.com.cn/s/blog_69e7b8d701014j2m.html
很好用,正文如下:

如果數據庫控制文件做過鏡像,比如一個數據庫有3個控制文件,丟失一個控制文件的恢復非常的容易,如果所有控制文件的丟失,那么恢復起來就要相對的麻煩一些。

如果注意觀察我下面的例子你會發現,即使沒有控制文件的備份也是可以把數據庫恢復的。

當然了,一個優秀的DBA最好不要把自己置於復雜和未知的環境,對數據庫做控制文件的備份是一個很容易的事情。

我們這里通過用戶管理的方法來創建控制文件的備份:

1.生成重建控制文件和修復數據庫的腳本,腳本會放在$ORACLE_BASE/admin/sid/udump路徑下,其中sid是數據庫實例名。

alter database backup controlfile to trace;
--注:在數據庫起不來的情況下完全沒辦法備份,只能用語句

2.生成控制文件的鏡像拷貝

alter database backup controlfile to '/home/oracle/c.bak' ----引號部分是目錄和備份文件名

 

 

SQL> create table demo (x number,y number);
表已創建。

SQL> insert into demo values(1,100);
已創建 1 行。

SQL> insert into demo values(2,200);
已創建 1 行。

SQL> commit;
提交完成。

SQL> select * from demo;

X Y
---------- ----------
1 100
2 200

SQL> shutdown immediate
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。

刪掉所有的控制文件!!

SQL> startup
ORACLE 例程已經啟動。

Total System Global Area 293601280 bytes
Fixed Size 1248600 bytes
Variable Size 100663976 bytes
Database Buffers 184549376 bytes
Redo Buffers 7139328 bytes
ORA-00205: ?????????, ??????, ???????

SQL> select status from v$instance;

STATUS
------------------------
STARTED 

SQL> CREATE CONTROLFILE REUSE DATABASE "DB01" NORESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 'E:\ORACLE\PRODUCT\ORADATA\DB01\REDO01.LOG' SIZE 50M,
9 GROUP 2 'E:\ORACLE\PRODUCT\ORADATA\DB01\REDO02.LOG' SIZE 50M,
10 GROUP 3 'E:\ORACLE\PRODUCT\ORADATA\DB01\REDO03.LOG' SIZE 50M
11 -- STANDBY LOGFILE
12 DATAFILE
13 'E:\ORACLE\PRODUCT\ORADATA\DB01\SYSTEM01.DBF',
14 'E:\ORACLE\PRODUCT\ORADATA\DB01\UNDOTBS01.DBF',
15 'E:\ORACLE\PRODUCT\ORADATA\DB01\SYSAUX01.DBF',
16 'E:\ORACLE\PRODUCT\ORADATA\DB01\USERS01.DBF',
17 'E:\ORACLE\PRODUCT\ORADATA\DB01\EXAMPLE01.DBF'
18 CHARACTER SET ZHS16GBK
19 ;

控制文件已創建。

SQL> select status from v$instance;

STATUS
------------
MOUNTED
 --到這步問題來了,執行了一下select status from v$instance;狀態還是STARTED;
並且不管什么命令都報這個錯: 
SQL> shutdown immediate
ORA-24324: service handle not initialized
ORA-01041: internal error. hostdef extension doesn't exist
SQL> shutdown
ORA-24324: service handle not initialized
ORA-01041: internal error. hostdef extension doesn't exist
SQL> startup
ORA-24324: service handle not initialized
ORA-01041: internal error. hostdef extension doesn't exist
SQL> shutdown abort
ORA-24324: service handle not initialized
ORA-01041: internal error. hostdef extension doesn't exist
 網上查半天沒查出所以然,退出重登了一下服務器,然后再啟動數據庫,居然好了!!!!

SQL> recover database;
ORA-00283: ??????????
ORA-00264: ?????

數據庫不需要恢復的操作,所以報了上邊的錯誤。

SQL> alter database open;

數據庫已更改。

通過這次事件,我得到了重要的一點警示:備份!!一定要備份,不管什么東西都要定時備份!本次就是沒有最新的備份,以至於很是麻煩。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM