通过一个案例知道了了offline drop

情况描述:
        朋友的测试环境,程序调用的时候提示ORA-00376:file 6 cannot be read at this time;
        
        我先用shutdown abort停库,然后startup时候提示ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
        发现有个数据文件没了!
        尝试把这个datafile offline
        SQL>alter database datafile 6 offline;
        报错ORA-01145: offline immediate disallowed unless media recovery enabled
        
        看网上说数据库是非归档模式的,尝试开启归档
        SQL>ALTER DATABASE ARCHIVELOG;
        
        报错ORA-00265: instance recovery required, cannot set ARCHIVELOG mode
        
        原来是因为我shutdown abort停的库(如果shutdown immediate停的话当时应该就会直接报错的,被我完美跳过了。。)
        
        于是使用offline drop(网上查的)
        SQL>alter database datafile 6 offline drop;
        
        然后
        SQL>alter database open; 数据库顺利打开
        
        总结处理这个问题时出现错误的地方:
            1.不应该盲目停库
            2.不细心  之前一直没有发现是数据文件丢了,在数据文件夹下面看到个dbf我就以为是有问题的那个dbf,其实我看到的那个是临时表空间的dbf..只是因为命名太接近了,就把我迷住了。
          3.停库之前查v$datafile时发现了datafile 6的checkpoint_change#的和其他的不一致,但是这个线索没有追踪下去
        
        网上查了一下 offline drop和offline没什么本质的区别,都是只改写了control文件,不会更新file$和ts$,但是对数据文件的offline只能在数据库是归档模式下才能执行;
        
        
对一个datafile执行offline和offline drop的区别
1、对一个datafile执行offline或offline drop本质上是一回事;但对一个datafile执行offline只能在归档模式下,而对一个datafile执行offline drop则既可以在归档模式也可 以在非归档模式下; 
2、对一个datafile无论是执行offline还是offline drop,都是只改写了control文件,不会更新file$和ts$,这就是为什么可以在mount状态下对某个datafile执行offline/offline drop的本质原因; 
3、只有当对datafile所在的表空间执行offline normal的时候,才会既改写control文件,又更新ts$和seg$,oracle这里会把ts$的online$字段的值由1改为2,但依然不会去更新file$;
4、只有当对datafile所在的表空间执行drop操作的时候,oracle才会去更新ts$和file$,oracle这里会把ts$的online$字段的值由1改为3,会把file$的status$字段由2改为1; 
注 意,无论是file$的file#还是ts$的ts#,它们都是连续的!并且oracle会重用file$的file#,但是不会重用ts$里的ts#, 这本质上是因为ts$里会记录tablespace的名字,而file$里并没有记录datafile的名字,所以file$里的记录可以重用而ts$则 不能。
5、只要你对一个datafile执行了offline或者offline drop操作,则oracle在open的时候就不会去存储上(无论是文件系统、裸设备还是ASM)校验这个文件了,所以即使这个文件已经在存储上被删掉了,此时库依然可以open。 
6、 无论你是在归档模式还是在非归档模式,且无论你对某个datafile是执行了offline还是offline drop操作,只要归档日志还在(对应于归档模式)或者相关的online redo log没有被logfile switch覆盖(对应于非归档模式),则这个datafile始终是可以online的,里面的数据都还在。当然,即使归档日志不在了,online redo log被logfile switch覆盖了,这个datafile也是可以online的,只是里面的数据可能会不一致。(从http://blog.chinaunix.net/uid-25960404-id-3828859.html这搬运过来)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值