如果在做数据库迁移,由于你删除undotbs01.dbf 导致报如下错误:ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-00376: file 2 cannot be read at this time
ORA-01110: data file 2: '/u01/app/oracle/oradata/orcl/undotbs01.dbf'
解决方案如下:
1.删除表空间文件与创建表空间文件
SQL> alter database datafile '/u01/app/oracle/oradata/orcl/undotbs01.dbf' offline drop;
Database altered.
SQL> alter database open
2 ;
Database altered.
SQL> create undo tablespace undotbs02 datafile '/u01/app/oracle/oradata/orcl/undotbs02.dbf' size 10M;
Tablespace created.
SQL> alter system set undo_tablespace='undotbs02';
System altered
2.查询介质恢复文件状态SQL> select * from v$recover_file;
FILE# ONLINE ONLINE_STATUS
---------- -------------- --------------
ERROR CHANGE#
----------------------------------------------------------------- ----------
TIME
--------------
2 OFFLINE OFFLINE
FILE NOT FOUND 0
7 OFFLINE OFFLINE
838945
08-6? -11
FILE# ONLINE ONLINE_STATUS
---------- -------------- --------------
ERROR CHANGE#
----------------------------------------------------------------- ----------
TIME
--------------
红色表示已经被删除的表空间,现在处理不在线状态,这情况属于undo表空间不正常
蓝色表示已经创建了的表空间,没法使用
3.先介质恢复datafile 7 (7 OFFLINE)(最好是在mount状态下恢复,在此是open)
SQL> recover datafile 7;
Media recovery complete.
4.查询介质恢复文件状态
SQL> select * from v$recover_file;
FILE# ONLINE ONLINE_STATUS
---------- -------------- --------------
ERROR CHANGE#
----------------------------------------------------------------- ----------
TIME
--------------
2 OFFLINE OFFLINE
FILE NOT FOUND 0
5.执行删除datafile 2(2 OFFLINE)
SQL> alter database datafile 2 offline drop;
Database altered.
发现数据库还是不正常,此时查询表空间,看看是否在线
6.查询表空间状态
SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------------------------------------ ------------------
SYSTEM ONLINE
UNDOTBS1 ONLINE
SYSAUX ONLINE
TEMP ONLINE
USERS ONLINE
EXAMPLE ONLINE
EYGLE ONLINE
EYGLE_TEMP ONLINE
UNDOTBS02 ONLINE
ETENTEST ONLINE
ETENTEST_TEMP ONLINE
11 rows selected.
发现表空间UNDOTBS1还在线,此时要drop
7.在open状态下drop表空间UNDOTBS1
SQL> drop tablespace undotbs1
2 ;
Tablespace dropped.
8.查询表空间状态
SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------------------------------------ ------------------
SYSTEM ONLINE
SYSAUX ONLINE
TEMP ONLINE
USERS ONLINE
EXAMPLE ONLINE
EYGLE ONLINE
EYGLE_TEMP ONLINE
UNDOTBS02 ONLINE
ETENTEST ONLINE
ETENTEST_TEMP ONLINE
10 rows selected.
已经没有表空间UNDOTBS1
9.查询介质恢复文件状态
SQL> select * from v$recover_file;
no rows selected
一切正常,
10.关闭数据库与启动数据库
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup;
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 121636432 bytes
Database Buffers 159383552 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.