ORA-27041 ORA-01110 ORA-01116 物理删除undo后报错

本文详细描述了当数据库中误删undo数据文件时,从连接测试用户、创建表并插入数据,到尝试删除刚创建的表,再到发现错误及处理步骤的全过程。包括如何使用sysdba权限进行数据库的关闭、重新启动、修改undo表空间、删除损坏的undo文件和segment,直至最终成功删除undo表空间。整个过程展示了数据库管理中遇到此类问题时的正确处理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

测试数据库,非归档模式。模拟误删undo数据文件的处理方法。
先连接test用户,创建表、插入数据,然后 rm  删除 undo 的物理文件。
然后尝试删除刚创建的表a
SQL> drop table a;
drop table a
           *
ERROR at line 1:
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-01116: 打开数据库文件 3 时出错
ORA-01110: 数据文件 3: '/app/oradata/datafile/undotbs01.dbf'
ORA-27041: 无法打开文件
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

SQL> select t.tablespace_name,t.status from dba_tablespaces t where t.tablespace_name='UNDOTBS1';


TABLESPACE_NAME                                        STATUS
------------------------------------------------------------ ------------------
UNDOTBS1                                                     ONLINE

SQL> select name, status from v$datafile;


NAME                                                         STATUS
------------------------------------------------------------ --------------
...
/app/oradata/datafile/undotbs01.dbf                          ONLINE
...

SQL> shutdown immediate
ORA-01116: 打开数据库文件 3 时出错
ORA-01110: 数据文件 3: '/app/oradata/datafile/undotbs01.dbf'
ORA-27041: 无法打开文件
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

SQL> alter database datafile '/app/oradata/datafile/undotbs01.dbf' offline drop;  
alter database datafile '/app/oradata/datafile/undotbs01.dbf' offline drop
*
ERROR at line 1:
ORA-00603: ORACLE server session terminated by fatal error
ORA-00376: file 3 cannot be read at this time
ORA-01110: data file 3: '/app/oradata/datafile/undotbs01.dbf'
ORA-00376: file 3 cannot be read at this time
ORA-01110: data file 3: '/app/oradata/datafile/undotbs01.dbf'
ORA-00376: file 3 cannot be read at this time
ORA-01110: data file 3: '/app/oradata/datafile/undotbs01.dbf'
进程 ID: 22892
会话 ID: 9 序列号: 6877

SQL> create undo tablespace undotbs2 datafile '/app/oradata/datafile/undotbs02.dbf' size 1024m;
create undo tablespace undotbs2 datafile '/app/oradata/datafile/undotbs02.dbf' size 1024m
*
ERROR at line 1:
ORA-00603: ORACLE server session terminated by fatal error
ORA-00376: file 3 cannot be read at this time
ORA-01110: data file 3: '/app/oradata/datafile/undotbs01.dbf'
ORA-00376: file 3 cannot be read at this time
ORA-01110: data file 3: '/app/oradata/datafile/undotbs01.dbf'
ORA-00376: file 3 cannot be read at this time
ORA-01110: data file 3: '/app/oradata/datafile/undotbs01.dbf'
进程 ID: 23015
会话 ID: 12 序列号: 5

SQL> conn /as sysdba
Connected.
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup
ORACLE instance started.


Total System Global Area 4175568896 bytes
Fixed Size                  2234960 bytes
Variable Size            2852128176 bytes
Database Buffers         1308622848 bytes
Redo Buffers               12582912 bytes
Database mounted.
Database opened.

可以正常启动。

SQL> select name, status from v$datafile;


NAME                                                         STATUS
------------------------------------------------------------ --------------
...
/app/oradata/datafile/undotbs01.dbf                          RECOVER
...

SQL> drop table test;


Table dropped.


SQL> create table test as select * from dba_objects;
create table test as select * from dba_objects
                                   *
ERROR at line 1:
ORA-01552: 非系统表空间 'TEST_DB' 不能使用系统回退段


SQL> create undo tablespace undotbs2 datafile '/app/oradata/datafile/undotbs02.dbf' size 1024m;


Tablespace created.

SQL> ALTER SYSTEM SET undo_tablespace='UNDOTBS2'; 


System altered.


SQL> show parameter undo


NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
undo_management                      string                 AUTO
undo_retention                       integer                900
undo_tablespace                      string                 UNDOTBS2

SQL> drop tablespace UNDOTBS1;
drop tablespace UNDOTBS1
*
ERROR at line 1:
ORA-01548: 已找到活动回退段 '_SYSSMU1_3780397527$', 终止删除表空间




SQL> alter database datafile '/app/oradata/datafile/undotbs01.dbf' offline drop;


Database altered.


SQL> drop rollback segment "_SYSSMU1_3780397527$";
drop rollback segment "_SYSSMU1_3780397527$"
*
ERROR at line 1:
ORA-30025: 不允许删除段 '_SYSSMU1_3780397527$' (在还原表空间中)


SQL> create pfile from spfile;


File created.


在pfile里面,增加如下参数
_offline_rollback_segments=('_SYSSMU1_3780397527$')
_corrupted_rollback_segments=('_SYSSMU1_3780397527$')
重启数据库
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup pfile='/app/oracle/product/11.2.3/db_1/dbs/initjava11g.ora' 
ORACLE instance started.


Total System Global Area 4175568896 bytes
Fixed Size                  2234960 bytes
Variable Size            2852128176 bytes
Database Buffers         1308622848 bytes
Redo Buffers               12582912 bytes
Database mounted.
Database opened.
SQL> drop rollback segment "_SYSSMU1_3780397527$";


Rollback segment dropped.


采用如上方式,找到undo对应的segment,逐一删除
SQL> select segment_name from dba_segments where tablespace_name='UNDOTBS1';


SEGMENT_NAME
--------------------------------------------------------------------------------
_SYSSMU10_3550978943$
_SYSSMU9_1424341975$
_SYSSMU8_2012382730$
...

把上面的segment添加到前面pfile的参数里面
_offline_rollback_segments=('_SYSSMU10_3550978943$','_SYSSMU9_1424341975$','_SYSSMU8_2012382730$', ...)
_corrupted_rollback_segments=('_SYSSMU10_3550978943$','_SYSSMU9_1424341975$','_SYSSMU8_2012382730$', ...)
然后再次重启数据库
SQL> select 'drop rollback segment "'||segment_name||'";' from dba_segments where tablespace_name='UNDOTBS1';


'DROPROLLBACKSEGMENT"'||SEGMENT_NAME||'";'
--------------------------------------------------------------------------------
drop rollback segment "_SYSSMU9_1424341975$";
drop rollback segment "_SYSSMU8_2012382730$";
drop rollback segment "_SYSSMU7_3286610060$";
...

执行上面SQL的查询结果命令,删除undo的segment
SQL> 
Rollback segment dropped.


SQL> 
Rollback segment dropped.

...

最后,再次执行删除undo表空间
SQL> drop tablespace UNDOTBS1;


Tablespace dropped.


去掉pfile参数文件新加的两个参数,重启数据库即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值