Oracle 控制文件损坏恢复

Oracle 10g数据库控制文件损坏恢复

如果控制文件丢失或者损坏了,如何解决这个问题?

查看参数文件中的设置:

SQL> show parameter CONTROL_FILES ;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_files string C:\ORACLE\PRODUCT\10.2.0\ORADA
TA\KEYMEN\CONTROL01.CTL, C:\OR
ACLE\PRODUCT\10.2.0\ORADATA\KE
YMEN\CONTROL02.CTL, C:\ORACLE\
PRODUCT\10.2.0\ORADATA\KEYMEN\
CONTROL03.CTL
SQL>


查看Oracle数据库的动态性能视图

SQL> select name from v$controlfile;

NAME
--------------------------------------------------------
----------------------------------------
C:\ORACLE\PRODUCT\10.2.0\ORADATA\KEYMEN\CONTROL01.CTL
C:\ORACLE\PRODUCT\10.2.0\ORADATA\KEYMEN\CONTROL02.CTL
C:\ORACLE\PRODUCT\10.2.0\ORADATA\KEYMEN\CONTROL03.CTL


Backing Up Control Files
Use the ALTER DATABASE BACKUP CONTROLFILE statement to back up your control files. You have two options:

Back up the control file to a binary file (duplicate of existing control file) using the following statement:

ALTER DATABASE BACKUP CONTROLFILE TO 'E:\oraclebackup\control.bkp';

Produce SQL statements that can later be used to re-create your control file:

ALTER DATABASE BACKUP CONTROLFILE TO TRACE;

This command writes a SQL script to the database trace file where it can be captured and edited to reproduce the control file.

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

******************************************************************************

实验一:删除控制文件,仅仅保留一个控制文件
******************************************************************************

编辑C:\oracle\product\10.2.0\admin\keymen\pfile\init.ora 文件,仅仅在
###########################################
# File Configuration
###########################################
control_files=("c:\oracle\product\10.2.0\oradata\keymen\control01.ctl")
db_recovery_file_dest=c:\oracle\product\10.2.0/flash_recovery_area
db_recovery_file_dest_size=2147483648

SQL> shutdown immediate;
ORA-01507: database not mounted


ORACLE instance shut down.
SQL> startup open pfile='C:\oracle\product\10.2.0\admin\keymen\pfile\init.ora';
ORACLE instance started.

Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 167775108 bytes
Database Buffers 436207616 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
数据库已经打开。
SQL>

SQL> show parameter CONTROL_FILES ;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_files string C:\ORACLE\PRODUCT\10.2.0\ORADA
TA\KEYMEN\CONTROL01.CTL
SQL>


Oracle
数据库从Oracle9i开始(当然也包括Oracle10g),数据库在启动时,首先会自动寻找SPFILE,从而读取SPFILE
中的参数,用于startup数据库。当SPFILE文件丢失或者损坏时,Oracle会找PFILE文件启动数据库。

如果PFILE文件也丢失或者损坏了,那么数据库就彻底启动不了了。


如果需要指定数据库使用PFILE文件,而不是使用SPFILE文件,则需要
startup open pfile='C:\oracle\product\10.2.0\admin\keymen\pfile\init.ora';

*********************************************************************************

实验二:删除所有控制文件,
*********************************************************************************
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE
例程已经关闭。
SQL>

通过操作系统命令,删除所有控制文件

SQL> startup
ORACLE
例程已经启动。

Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 226495364 bytes
Database Buffers 377487360 bytes
Redo Buffers 7135232 bytes
ORA-00205: ?????????, ??????, ???????

SQL> alter session set nls_language='AMERICAN';

Session altered.

SQL> alter database mount;
alter database mount
*
ERROR at line 1:
ORA-00205: error in identifying control file, check alert log for more info


NOMOUNT状态下,利用控制文件的追踪文件中的SQL Statement重新创建控制文件。
目前数据库的状态仅仅是控制文件丢失,日志文件都也用。


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

Control file created.

SQL> -- Commands to re-create incarnation table
SQL> -- Below log names MUST be changed to existing filenames on
SQL> -- disk. Any one log file from each branch can be used to
SQL> -- re-create incarnation records.
SQL> -- ALTER DATABASE REGISTER LOGFILE 'C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\KEYMEN\ARCHIV
0_06\O1_MF_1_1_%U_.ARC';
SQL> -- ALTER DATABASE REGISTER LOGFILE 'C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\KEYMEN\ARCHIV
0_06\O1_MF_1_1_%U_.ARC';
SQL> -- ALTER DATABASE REGISTER LOGFILE 'C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\KEYMEN\ARCHIV
0_06\O1_MF_1_1_%U_.ARC';
SQL> -- ALTER DATABASE REGISTER LOGFILE 'C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\KEYMEN\ARCHIV
0_06\O1_MF_1_1_%U_.ARC';
SQL> -- ALTER DATABASE REGISTER LOGFILE 'C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\KEYMEN\ARCHIV
0_06\O1_MF_1_1_%U_.ARC';
SQL> -- Recovery is required if any of the datafiles are restored backups,
SQL> -- or if the last shutdown was not normal or immediate.
SQL> RECOVER DATABASE
ORA-00283: recovery session canceled due to errors
ORA-00264: no recovery required


SQL> -- All logs need archiving and a log switch is needed.
SQL> ALTER SYSTEM ARCHIVE LOG ALL;

System altered.

SQL> -- Database can now be opened normally.
SQL> ALTER DATABASE OPEN;

Database altered.

SQL> -- Commands to add tempfiles to temporary tablespaces.
SQL> -- Online tempfiles have complete space information.
SQL> -- Other tempfiles may require adjustment.
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\KEYMEN\TEMP01.DBF'
2 SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;

Tablespace altered.

SQL> select open_mode from v$database;

OPEN_MODE
----------
READ WRITE

重新创建了控制文件,而且数据库的状态完好。数据没有丢失,所有的日志文件都可用。
下一步立刻使用RMAN进行全库的备份。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值