碰到多次undo数据文件损坏,或者误删undo数据文件的,且undo表空间存在需要恢复的回滚段(active rollback segment)的情况,这时就只能查出需要恢复的回滚段,然后使用_CORRUPTED_ROLLBACK_SEGMENTS参数跳过,再切换到新的UNDO表空间。
下面是误删undo数据文件的测试,启动数据库报错ORA-01157、ORA-01110
[code]SQL> startup
ORACLE instance started.
Total System Global Area 418484224 bytes
Fixed Size 1336932 bytes
Variable Size 306186652 bytes
Database Buffers 104857600 bytes
Redo Buffers 6103040 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: '/oracle/oradata/orasql/datafile/undotbs01.dbf'[/code]
离线undotbs01.dbf文件,打开数据库
[code]SQL> alter database datafile 3 offline;
alter database datafile 3 offline
*
ERROR at line 1:
ORA-01145: offline immediate disallowed unless media recovery enabled
Elapsed: 00:00:00.32
SQL> recover database;
ORA-00283: recovery session canceled due to errors
ORA-01110: data file 3: '/oracle/oradata/orasql/datafile/undotbs01.dbf'
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: '/oracle/oradata/orasql/datafile/undotbs01.dbf'
SQL> alter database datafile 3 offline drop;
Database altered.
Elapsed: 00:00:00.06
SQL> alter database open;
Database altered.
Elapsed: 00:00:04.05[/code]
打开数据库后,操作报错ORA-00604、ORA-00376、ORA-01110
[code]SQL> drop user tt_test cascade;
drop user tt_test cascade
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 2
ORA-00376: file 3 cannot be read at this time
ORA-01110: data file 3: '/oracle/oradata/orasql/datafile/undotbs01.dbf'[/code]
创建新的undo表空间,并设为默认的undo表空间
[code]SQL> create undo tablespace undotbs2 datafile '/u01/oradata/undo1.dbf' size 200m;
Tablespace created.
Elapsed: 00:00:17.92
SQL> alter system set undo_tablespace=undotbs2 scope=both;
System altered.
SQL> drop tablespace undotbs including contents and datafiles;
drop tablespace undotbs including contents and datafiles
*
ERROR at line 1:
ORA-01548: active rollback segment '_SYSSMU1_2432923906$' found, terminate dropping tablespace[/code]
查出NEEDS RECOVERY的rollback segment name,创建初始化参数文件,关闭数据库
[code]SQL> drop tablespace undotbs including contents and datafiles;
drop tablespace undotbs including contents and datafiles
*
ERROR at line 1:
ORA-01548: active rollback segment '_SYSSMU1_2432923906$' found, terminate dropping tablespace
Elapsed: 00:00:00.01
SQL> create pfile='/u01/oradata/init.ora' from spfile;
File created.
Elapsed: 00:00:00.07
SQL> select segment_name,status from dba_rollback_segs;
SEGMENT_NAME STATUS
------------------------------ ----------------
SYSTEM ONLINE
_SYSSMU1_2432923906$ NEEDS RECOVERY
_SYSSMU2_2440578203$ NEEDS RECOVERY
_SYSSMU3_2803030565$ NEEDS RECOVERY
_SYSSMU4_1515338583$ NEEDS RECOVERY
_SYSSMU5_1734532521$ NEEDS RECOVERY
_SYSSMU6_2751457965$ NEEDS RECOVERY
_SYSSMU7_941188636$ NEEDS RECOVERY
_SYSSMU8_51336753$ NEEDS RECOVERY
_SYSSMU9_2607541442$ NEEDS RECOVERY
_SYSSMU10_541967353$ NEEDS RECOVERY
SEGMENT_NAME STATUS
------------------------------ ----------------
_SYSSMU11_1390905751$ OFFLINE
_SYSSMU12_3487291074$ OFFLINE
_SYSSMU13_3877357141$ OFFLINE
_SYSSMU14_1628962174$ OFFLINE
_SYSSMU15_2988144322$ OFFLINE
_SYSSMU16_1060335529$ OFFLINE
_SYSSMU17_1562306091$ OFFLINE
_SYSSMU18_3054388210$ OFFLINE
_SYSSMU19_251999627$ OFFLINE
_SYSSMU20_524750302$ OFFLINE
_SYSSMU21_293166800$ OFFLINE
SEGMENT_NAME STATUS
------------------------------ ----------------
_SYSSMU22_3057082303$ OFFLINE
23 rows selected.
Elapsed: 00:00:00.08
SQL> shutdown;
Database closed.
Database dismounted.
ORACLE instance shut down.[/code]
修改init.ora,添加如下(括号中的为active rollback segment)
[code]undo_management=manual
undo_retention=10800
_CORRUPTED_ROLLBACK_SEGMENTS =(_SYSSMU1_2432923906$,_SYSSMU2_2440578203$,_SYSSMU3_2803030565$,_SYSSMU4_1515338583$,_SYSSMU5_1734532521$,_SYSSMU6_2751457965$,_SYSSMU7_941188636$,_SYSSMU8_51336753$,_SYSSMU9_2607541442$,_SYSSMU10_541967353$)[/code]
使用初始化参数文件打开数据库,删除旧的
[code]SQL> startup pfile='/u01/oradata/init.ora' ;
ORACLE instance started.
Total System Global Area 418484224 bytes
Fixed Size 1336932 bytes
Variable Size 306186652 bytes
Database Buffers 104857600 bytes
Redo Buffers 6103040 bytes
Database mounted.
Database opened.
SQL> drop tablespace undotbs including contents and datafiles;
Tablespace dropped.
Elapsed: 00:00:00.72
SQL>
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string MANUAL
undo_retention integer 10800
undo_tablespace string UNDOTBS2[/code]
还原init.ora,并重启数据库
[code]*.undo_tablespace='UNDOTBS2'
undo_management=auto
undo_retention=10800
~
SQL> startup force pfile = '/u01/oradata/init.ora';
ORACLE instance started.
Total System Global Area 418484224 bytes
Fixed Size 1336932 bytes
Variable Size 306186652 bytes
Database Buffers 104857600 bytes
Redo Buffers 6103040 bytes
Database mounted.
Database opened.
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 10800
undo_tablespace string UNDOTBS2[/code]
下面是误删undo数据文件的测试,启动数据库报错ORA-01157、ORA-01110
[code]SQL> startup
ORACLE instance started.
Total System Global Area 418484224 bytes
Fixed Size 1336932 bytes
Variable Size 306186652 bytes
Database Buffers 104857600 bytes
Redo Buffers 6103040 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: '/oracle/oradata/orasql/datafile/undotbs01.dbf'[/code]
离线undotbs01.dbf文件,打开数据库
[code]SQL> alter database datafile 3 offline;
alter database datafile 3 offline
*
ERROR at line 1:
ORA-01145: offline immediate disallowed unless media recovery enabled
Elapsed: 00:00:00.32
SQL> recover database;
ORA-00283: recovery session canceled due to errors
ORA-01110: data file 3: '/oracle/oradata/orasql/datafile/undotbs01.dbf'
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: '/oracle/oradata/orasql/datafile/undotbs01.dbf'
SQL> alter database datafile 3 offline drop;
Database altered.
Elapsed: 00:00:00.06
SQL> alter database open;
Database altered.
Elapsed: 00:00:04.05[/code]
打开数据库后,操作报错ORA-00604、ORA-00376、ORA-01110
[code]SQL> drop user tt_test cascade;
drop user tt_test cascade
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 2
ORA-00376: file 3 cannot be read at this time
ORA-01110: data file 3: '/oracle/oradata/orasql/datafile/undotbs01.dbf'[/code]
创建新的undo表空间,并设为默认的undo表空间
[code]SQL> create undo tablespace undotbs2 datafile '/u01/oradata/undo1.dbf' size 200m;
Tablespace created.
Elapsed: 00:00:17.92
SQL> alter system set undo_tablespace=undotbs2 scope=both;
System altered.
SQL> drop tablespace undotbs including contents and datafiles;
drop tablespace undotbs including contents and datafiles
*
ERROR at line 1:
ORA-01548: active rollback segment '_SYSSMU1_2432923906$' found, terminate dropping tablespace[/code]
查出NEEDS RECOVERY的rollback segment name,创建初始化参数文件,关闭数据库
[code]SQL> drop tablespace undotbs including contents and datafiles;
drop tablespace undotbs including contents and datafiles
*
ERROR at line 1:
ORA-01548: active rollback segment '_SYSSMU1_2432923906$' found, terminate dropping tablespace
Elapsed: 00:00:00.01
SQL> create pfile='/u01/oradata/init.ora' from spfile;
File created.
Elapsed: 00:00:00.07
SQL> select segment_name,status from dba_rollback_segs;
SEGMENT_NAME STATUS
------------------------------ ----------------
SYSTEM ONLINE
_SYSSMU1_2432923906$ NEEDS RECOVERY
_SYSSMU2_2440578203$ NEEDS RECOVERY
_SYSSMU3_2803030565$ NEEDS RECOVERY
_SYSSMU4_1515338583$ NEEDS RECOVERY
_SYSSMU5_1734532521$ NEEDS RECOVERY
_SYSSMU6_2751457965$ NEEDS RECOVERY
_SYSSMU7_941188636$ NEEDS RECOVERY
_SYSSMU8_51336753$ NEEDS RECOVERY
_SYSSMU9_2607541442$ NEEDS RECOVERY
_SYSSMU10_541967353$ NEEDS RECOVERY
SEGMENT_NAME STATUS
------------------------------ ----------------
_SYSSMU11_1390905751$ OFFLINE
_SYSSMU12_3487291074$ OFFLINE
_SYSSMU13_3877357141$ OFFLINE
_SYSSMU14_1628962174$ OFFLINE
_SYSSMU15_2988144322$ OFFLINE
_SYSSMU16_1060335529$ OFFLINE
_SYSSMU17_1562306091$ OFFLINE
_SYSSMU18_3054388210$ OFFLINE
_SYSSMU19_251999627$ OFFLINE
_SYSSMU20_524750302$ OFFLINE
_SYSSMU21_293166800$ OFFLINE
SEGMENT_NAME STATUS
------------------------------ ----------------
_SYSSMU22_3057082303$ OFFLINE
23 rows selected.
Elapsed: 00:00:00.08
SQL> shutdown;
Database closed.
Database dismounted.
ORACLE instance shut down.[/code]
修改init.ora,添加如下(括号中的为active rollback segment)
[code]undo_management=manual
undo_retention=10800
_CORRUPTED_ROLLBACK_SEGMENTS =(_SYSSMU1_2432923906$,_SYSSMU2_2440578203$,_SYSSMU3_2803030565$,_SYSSMU4_1515338583$,_SYSSMU5_1734532521$,_SYSSMU6_2751457965$,_SYSSMU7_941188636$,_SYSSMU8_51336753$,_SYSSMU9_2607541442$,_SYSSMU10_541967353$)[/code]
使用初始化参数文件打开数据库,删除旧的
[code]SQL> startup pfile='/u01/oradata/init.ora' ;
ORACLE instance started.
Total System Global Area 418484224 bytes
Fixed Size 1336932 bytes
Variable Size 306186652 bytes
Database Buffers 104857600 bytes
Redo Buffers 6103040 bytes
Database mounted.
Database opened.
SQL> drop tablespace undotbs including contents and datafiles;
Tablespace dropped.
Elapsed: 00:00:00.72
SQL>
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string MANUAL
undo_retention integer 10800
undo_tablespace string UNDOTBS2[/code]
还原init.ora,并重启数据库
[code]*.undo_tablespace='UNDOTBS2'
undo_management=auto
undo_retention=10800
~
SQL> startup force pfile = '/u01/oradata/init.ora';
ORACLE instance started.
Total System Global Area 418484224 bytes
Fixed Size 1336932 bytes
Variable Size 306186652 bytes
Database Buffers 104857600 bytes
Redo Buffers 6103040 bytes
Database mounted.
Database opened.
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 10800
undo_tablespace string UNDOTBS2[/code]
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle DataGuard高可用性解决方案详解
孙莹
558次阅读
2025-03-26 23:27:33
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
518次阅读
2025-04-15 17:24:06
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
422次阅读
2025-04-18 14:18:38
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
420次阅读
2025-04-08 09:12:48
墨天轮个人数说知识点合集
JiekeXu
420次阅读
2025-04-01 15:56:03
Oracle SQL 执行计划分析与优化指南
Digital Observer
416次阅读
2025-04-01 11:08:44
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
381次阅读
2025-04-20 10:07:02
Oracle 19c RAC更换IP实战,运维必看!
szrsu
360次阅读
2025-04-08 23:57:08
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
335次阅读
2025-04-17 17:02:24
oracle定时任务常用攻略
virvle
326次阅读
2025-03-25 16:05:19