Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1114752
  • 博文数量: 227
  • 博客积分: 6860
  • 博客等级: 准将
  • 技术积分: 2688
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-02 16:06
文章分类

全部博文(227)

文章存档

2015年(7)

2014年(8)

2012年(5)

2011年(62)

2010年(145)

分类: Oracle

2010-09-09 11:58:47

一. Oracle 控制文件主要包含如下条目
DATABASE ENTRY
CHECKPOINT PROGRESS RECORDS
REDO THREAD RECORDS
LOG FILE RECORDS
DATA FILE RECORDS
TEMP FILE RECORDS
TABLESPACE RECORDS
LOG FILE HISTORY RECORDS
OFFLINE RANGE RECORDS
ARCHIVED LOG RECORDS
BACKUP SET RECORDS
BACKUP PIECE RECORDS
BACKUP DATAFILE RECORDS
BACKUP LOG RECORDS
DATAFILE COPY RECORDS
BACKUP DATAFILE CORRUPTION RECORDS
DATAFILE COPY CORRUPTION RECORDS
DELETION RECORDS
PROXY COPY RECORDS
INCARNATION RECORDS

 

二.可以通过dump看到 控制文件内

方法1.直接dump controlfile:alter system set events 'immediate trace name controlf level 10'

方法2.  alter database backup controlfile to trace
     查看UDMP目录下的_ora_.trc文件

方法3.alter database backup controlfile to 文件名
    查询该文件

SQL>select name from v$controlfile     
SQL>show parameter user_dump_dest
在指定的目录下会找到刚产生的trc文件,通过日期可以看出那个是刚产生的。

 

三. 控制文件的重建:CREATE CONTROLFILE SET/reuse DATABASE SID RESETLOGS/NOresetlogs NOARCHIVELOG/archivelong

 

ORA-00205: error in identifying control file, check alert log for more info

当三个控制文件都已损坏,又没有控制文件的备份,我们只能采取重建控制文件的做法。

 

SQL> startup nomount
ORACLE instance started.
Total System Global Area  268435456 bytes
Fixed Size                  1266968 bytes
Variable Size              88083176 bytes
Database Buffers          176160768 bytes
Redo Buffers                2924544 bytes

SQL> create controlfile reuse database woody noresetlogs archivelog
  2  LOGFILE
  3  GROUP 1 '/u01/app/oracle/oradata/woody/redo01.log',
  4  GROUP 2 '/u01/app/oracle/oradata/woody/redo02.log',
  5  GROUP 3 '/u01/app/oracle/oradata/woody/redo03.log'
  6  DATAFILE
  7  '/u01/app/oracle/oradata/woody/sysaux01.dbf',
  8  '/u01/app/oracle/oradata/woody/system01.dbf',
  9  '/u01/app/oracle/oradata/woody/UNDOTBS01.dbf'
10  CHARACTER SET ZHS16GBK
11  ;
Control file created.
成功地重建控制文件后,我们尝试着打开数据库,但系统报错,提示需要进行介质恢复。

SQL> conn /as sysdba;
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area  268435456 bytes
Fixed Size                  1266968 bytes
Variable Size              88083176 bytes
Database Buffers          176160768 bytes
Redo Buffers                2924544 bytes
Database mounted.
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/u01/app/oracle/oradata/woody/system01.dbf'

SQL> recover datafile '/u01/app/oracle/oradata/woody/system01.dbf';
Media recovery complete.
SQL> recover datafile '/u01/app/oracle/oradata/woody/UNDOTBS01.dbf';
Media recovery complete.
SQL> recover datafile '/u01/app/oracle/oradata/woody/sysaux01.dbf';
Media recovery complete.

介质恢复后,重新打开数据库,提示日志文件也需恢复。
SQL> recover database until cancel;
日志已恢复。
控制文件、数据文件、日志文件全部恢复后,将三种文件同步,并打开数据库,成功地完成了数据库的恢复工作。
SQL> alter database open resetlogs;
数据库已更改。

 

在做了alter database open resetlogs;会把online redelog file清空,数据文件丢失.所以这个时候要做一个全备份。

resetlogs命令表示一个数据库逻辑生存期的结束和另一个数据库逻辑生存期的开始,每次使用resetlogs命令的时候,SCN不会被重置,不过oracle会重置日志序列号,而且会重置联机重做日志内容.这样做是为了防止不完全恢复后日志序列会发生冲突(因为现有日志和数据文件间有了时间差)。

阅读(771) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~