6.oracle的undo出现坏块

   undo 表空间中的undo块记录的是数据修改之前的操作,可以帮助我们随时对数据的修改进行回退,但是当undo出现了坏块怎么办呢?

   坏块?在数据库中有一个数据库一致性的概念,在oracle中数据库一致性包括两个层次:物理一致性和逻辑一致性,如果一个数据块在这两个层次上存在不一致性,那它就是一个坏块,数据后后台就会出现告警ORA-1578或ORA-600这种错误。

  这里就说当undo表空间出现坏块时,该怎样做?

  1.首先我们需要停掉监听,防止还有程序在对数据进行操作

  2.然后建立新的undotbs2表空间代替已经坏掉的undotbs1表空间。但是这里有一个问题是:创建表空间需要数据库在open状态,而当有undo坏块时,数据库是不能启动到open状态的,因为一启动,SMON进程就会强行关闭数据库。

  处理方式

  创建pfile,添加隐含参数,并启动数据库 

  create pfile from spfile;--创建pfile

  修改initxxx.ora文件,加入下面两个参数

*._allow_resetlogs_corruption=true --允许在数据库文件SCN不一致的情况下启动数据库
*._corrupted_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)--允许在rollback segments损坏的情况下启动数据库

  使用pfile启动数据库: startrup pfile='xxxxx';

  查看一下当前的rollback segments 

SQL> select segment_name,status from dba_rollback_segs;

  使用新建的undo表空间替换有问题的undo

  新建undo表空间 

SQL> create undo tablespace undotbs2 datafile '/ORADATA/orcl/undo02.dbf' size 50M reuse autoextend on;

  然后停库,修改pfile文件将undo表空间改为undotbs2

SQL> shutdown immediate
*.undo_tablespace=undotbs2

  然后再启库,删除损坏的undotbs1表空间:

SQL> alter tablespace undotbs1 offline normal;
Tablespace altered.
SQL> drop tablespace UNDOTBS1 including contents and datafiles;
Tablespace dropped.
SQL> select * from v$recover_file;
no rows selected

  最后再停库,删除之前加的那两个隐含的参数,然后再启库,启完库之后再利用pfie文件创建spfile,最后再用spfile文件启库。

 补充几个常用的命令: 

select * from v$rollname;
select * from undo$;
select * from v$tablespace;

##使数据文件处于在线状态
alter database datafile  File_id online;

  

posted on   太白金星有点烦  阅读(389)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示