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;
分类:
oracle故障处理
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下