单个控制文件损坏的恢复

        损坏单个控制文件是比较容易恢复的,因为数据库系统,控制文件都不是一个,而且所有的控制文件都互为镜像,只要拷贝一个好的控制文件替换坏的控制文件就可以。实验如下:

1) 查看系统的控制文件

SQL> select name from v$controlfile;
NAME                                                                           
--------------------------------------------------------------------------------
F:\APP\YANG\ORADATA\ORACL\CONTROL01.CTL                                        
F:\APP\YANG\ORADATA\ORACL\CONTROL02.CTL                                        
F:\APP\YANG\ORADATA\ORACL\CONTROL03.CTL                                        
SQL> shutdown immediate

2)关闭数据库,模拟单个控制文件损坏。
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host del f:\app\yang\oradata\oracl\control01.ctl
SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已经启动。
Total System Global Area  535662592 bytes                                      
Fixed Size                  1334380 bytes                                      
Variable Size             138412948 bytes                                      
Database Buffers          390070272 bytes                                      
Redo Buffers                5844992 bytes                                      
ORA-00205: ?????????, ??????, ???????

---设置编码后, set nls_lang=american_america.zhs16gbk

ORA-00205:error in identifying control file, check alert log for more info. 在这里,很明显,就是control文件缺失了.
SQL> shutdown immediate
ORA-01507: ??????
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area  535662592 bytes                                      
Fixed Size                  1334380 bytes                                      
Variable Size             138412948 bytes                                      
Database Buffers          390070272 bytes                                      
Redo Buffers                5844992 bytes                                      
ORA-00214: control file ''F:\APP\YANG\ORADATA\ORACL\CONTROL02.CTL'' version 8271 inconsistent with file
''F:\APP\YANG\ORADATA\ORACL\CONTROL01.CTL'' version 8261

---这表示文件CONTROL01.CTL'版本比CONTROL02.CTL'版本低, 二者不同导致的.
 3)拷贝一个好的控制文件替换坏的控制文件或修改spfile中的控制文件参数。在这里我是可以以CONTROL03.CTL重建 。

SQL> alter system set control_files=
  2  'f:\app\yang\oradata\oracl\control03.ctl' scope=spfile;

SQL> shutdown immediate
ORACLE 例程已经关闭

SQL>  startup mount
ORACLE 例程已经启动。
Total System Global Area  535662592 bytes                                      
Fixed Size                  1334380 bytes                                      
Variable Size             138412948 bytes                                      
Database Buffers          390070272 bytes                                      
Redo Buffers                5844992 bytes                                      
数据库装载完毕。

SQL>  alter database open;

数据库已更改

SQL> select name from v$controlfile;
NAME                                                                           
--------------------------------------------------------------------------------
F:\APP\YANG\ORADATA\ORACL\CONTROL03.CTL

---此时该数据库只有一个控制文件,在生产环境中必须在空闲的时候应该增加新的控制文件     

小结:

整个实验的详细步骤


1. 首先 关闭数据库库 shutdown immediate
2. 拷贝备份三个控制文件 CONTROL01.CTL, CONTROL02.CTL, CONTROL03.CTL
3. 删除CONTROL02.CTL
4. 装载数据库 startup mount, 出现ORA-00205:?????????,?????,???????错误
    怎么会有乱码?
5. 退出sqlplus, 设置编码, set nls_lang=american_america.zhs16gbk
6. sqlplus 连入, startup mount, 这次没有乱码了,错误提示:ORA-00205:error in identifying control file, check alert log for more info. 在这里,很明显,就是control文件缺失了.
7. 拷贝原来的控制文件备份CONTROL02.CTL到数据库的ORADATA目录下
8. 如果直接再次startup mount, 会出现ORA-01081: cannot start already-running ORACLE - shut it down first.
9. 既然提示了,就关掉它. shutdown immediate
10. startup mount 结果出现ORA-00214: ORA-00214: control file ''F:\APP\YANG\ORADATA\ORACL\CONTROL02.CTL'' version 8271 inconsistent with file
''F:\APP\YANG\ORADATA\ORACL\CONTROL01.CTL'' version 8261 , 这表示文件CONTROL02.CTL'版本比CONTROL01.CTL'版本低, 二者不同导致的.

11. a) 以CONTROL01.CTL重建, 

alter system set control_files=
  2  'f:\app\yang\oradata\oracl\control03.ctl' scope=spfile;    

  b) 备份所有文件,根据Step10 提示把版本低的删掉, 复制版本高的,然后粘贴重命名也可以,其实后面我写的关于为数据库添加控制文件就是按照这个方法。
12. shutdown immediate
13. startup mount, 提示Database mounted,表示装载成功
14. ALTER DATABASE OPEN; 出现Database altered, 成功.

 

 

 

 

上一篇:集群通信组件tribes之集群的消息接收通道


下一篇:带你读《计算机时代的统计推断:算法、演化和数据科学》之二:频率学派推断