Menu

  • 博客
  • 关于唯我&博客
  • 唯我DIY
  • 讨论区

Copyright © VIIIO.COM | Theme by Theme in Progress | 基于 WordPress

千里之行,始于足下唯我 - 梦想从此起航

ORACLE 重建控制文件及重連DATAFILE

2015年8月12日Oracle Standard
Views: 2,131

       起因是非生产数据库被玩坏了,具体怎么坏的我也不知道,接手的时候已经是 ORA-03113:end-of-file on communication channel,并且ARCHIVE LOG归档模式被更改过,没有做过任何备份,日志也删除掉了,已经无力回天。

     一番鼓捣后无果,查到重建控制文件可能解决问题,于是二话不说在没有任何备份操作的情况下重建了控制文件!!这也是后续产生的一系列问题的导火线!小盆浴们还是要学好一点,先备份,想清楚了再操作。
     
我的第一个错误:没有备份控制文件就开始测试,正确的做法是

            sqlplus /nolog

            conn /as sysdba

            alter database backup controlfile to trace;
  然后才是重建控制文件(本来应该是直接从备份的trace里面找到重建的SQL语句,但我不知道所以直接从网上抄的)(写成.sql使用@sqlfilepath一次性执行)
     SQL> startup mount;
SQL> 

CREATE CONTROLFILE REUSE DATABASE “TESTDB” RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 ‘D:\app\Administrator\oradata\
TESTDB\REDO01.LOG’ SIZE 50M,
GROUP 2 ‘D:\app\Administrator\oradata\
TESTDB\REDO02.LOG’ SIZE 50M,
GROUP 3 ‘D:\app\Administrator\oradata\
TESTDB\REDO03.LOG’ SIZE 50M
DATAFILE
‘D:\app\Administrator\oradata\
TESTDB\EXAMPLE01.DBF’,
‘D:\app\Administrator\oradata\
TESTDB\SYSAUX01.DBF’, 
‘D:\app\Administrator\oradata\TESTDB\SYSTEM01.DBF’,
‘D:\app\Administrator\oradata\
TESTDB\UNDOTBS01.DBF’,
‘D:\app\Administrator\oradata\
TESTDB\USERS01.DBF’
CHARACTER SET ZHS16GBK ;

     SQL> RECOVER DATABASE;
     SQL> ALTER DATABASE OPEN RESETLOGS;            //并且因为这次重置日志导致控制文件中未加入的DATAFILE的SCN与数据库不一致了,无法ONLINE DATAFILE

然后发现可以开启数据库了,PL/SQL登入正常,可是不能查看数据了!提示ORA-01180: can not create datafile !並且所有表、数据皆不能访问。
     原因:控制文件中没有包含实际运行的DATAFILE,oracle强制将原有表空间的对应DBF文件改为MISSING0000XXX,意味连接丟失,全部OFFLINE,通过以下语句可以查到:
     select ts#,file#,checkpoint_change#,t.* from v$datafile t    –可查checkpoint、scn等
select * from dba_data_files    —可查当前datafile的具体信息,NAME、对应ID、对应表空间等(很重要,要根据此对应关系去决定如何进行重命名)

经GOOGLE,接下来的方案是重命名丢失的DBF为实际的表空间对应DBF:
     SQL>  alter database rename file ‘D:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\MISSING00006’ to ‘D:\oracle\oradata\Oracle11g\TESTDB_DATA.DBF’;
     SQL>  alter database rename file ‘D:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\MISSING00007’ to ‘D:\oracle\oradata\Oracle11g\XXXXX_DATA.DBF’;
……….

重命名完毕后,再次 alter database open,会发现仍旧访问不了表数据。
原因: 再次查看datafile状态,发现被重命名的文件从OFFLINE状态变为RECOVER,正常应该为ONLINE状态。

但是,尝试 SQL>alter database datafile 6 online;  –激活datafile
    出现错误    
ORA-01190:
controlfile or data file 6 is from before the last RESETLOGS
     即之前resetlogs导致
DATAFILE的SCN与数据库不一致了,无法ONLINE DATAFILE

    这个问题网上众说纷纭,直接用RMAN恢复的(但我们这个非生产环境并没有任何备份,只是测试数据库,无法恢复的),有修改datafile header的,国外还有大神还有用bbed直接修改内存的,经过很长时间的测试才最终找到了合适的解决方案。
    原理:控制文件或文件6不在同一个resetlogs版本,尝试手动调整SCN,手动调整SCN以后必须用resetlogs模式打开数据库,所以需要设置_allow_resetlogs_corruption=true 
    解决方案:
     SQL> alter session set events ‘immediate trace name adjust_scn level 1’;

         Session altered.
        SQL> show parameter _allow_resetlogs_corruption;
        SQL> alter system set “_allow_resetlogs_corruption”=true scope=spfile;
            System altered.

再次shutdown immediate,并startup mount
SQL> recover database until cancel;    –这一步很重要, 虽然不做这个操作也能打开数据库,但是我们是要用RESETLOGS来打开数据库,然后将数据文件状态联机

            Media recovery complete.

        SQL> alter database datafile 6 online; –将每个datafile逐一激活
Database altered.
             …
SQL> alter database open resetlogs;
Database altered.

    至此,再次进行表数据查询,发现数据已经被恢复,所有数据正常访问。 

发表评论或回复 取消回复

邮箱地址不会被公开。

− 6 = 3

近期文章

  • OC UIWindow setRootViewController切换界面引发的内存问题
  • iOS证书、AppId、PP文件之间的关系
  • SVN服务器搭建、备份及多服务器同步方案(Windows)
  • [转]iOS多线程-各种线程锁的简单介绍
  • Mac 下Apache2 配置多虚拟主机

近期评论

  • NARYTHY288954NEYRTHYT发表在《ASP.NET整合Discuz PHP站 并实现用户同步》
  • nym402059flebno发表在《ASP.NET整合Discuz PHP站 并实现用户同步》
  • nem2182758krya发表在《ASP.NET整合Discuz PHP站 并实现用户同步》
  • aresgrb.se发表在《ASP.NET整合Discuz PHP站 并实现用户同步》
  • Vincenturbam发表在《ASP.NET整合Discuz PHP站 并实现用户同步》

分类目录

  • ASP.NET (15)
  • Git (2)
  • HTML (1)
  • iOS (31)
  • Javascript (7)
  • Oracle (8)
  • SQL (3)
  • SQLSERVER (2)
  • SVN (1)
  • 一行代码系列 (5)
  • 微信小程序 (1)
  • 正则表达式 (2)
  • 网站建设 (5)

文章归档

  • 2018年12月 (1)
  • 2018年4月 (1)
  • 2017年12月 (2)
  • 2017年7月 (3)
  • 2017年6月 (1)
  • 2017年4月 (1)
  • 2017年1月 (1)
  • 2016年12月 (3)
  • 2016年10月 (1)
  • 2016年7月 (1)
  • 2016年6月 (1)
  • 2016年5月 (3)
  • 2016年4月 (5)
  • 2016年3月 (4)
  • 2016年2月 (2)
  • 2016年1月 (3)
  • 2015年12月 (11)
  • 2015年11月 (7)
  • 2015年10月 (3)
  • 2015年9月 (1)
  • 2015年8月 (1)
  • 2015年7月 (1)
  • 2015年6月 (1)
  • 2015年5月 (1)
  • 2015年4月 (1)
  • 2014年7月 (1)
  • 2014年6月 (1)
  • 2014年5月 (2)
  • 2014年4月 (2)
  • 2014年3月 (2)
  • 2014年2月 (2)
2025年5月
一 二 三 四 五 六 日
« 12月    
 1234
567891011
12131415161718
19202122232425
262728293031