UNDO表空间丢失问题处理
1.启动数据库时提示undo表空间丢失
SYS@hfdr>select tablespace_name from dba_tablespaces;
TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
TBS_OGG
ZHANGYUN
UNDOTBS02
SYS@hfdr>startup
ORACLE 例程已经启动。
Total System Global Area 1586708480 bytes
Fixed Size 2253624 bytes
Variable Size 973081800 bytes
Database Buffers 603979776 bytes
Redo Buffers 7393280 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 3 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 3: '/u01/app/oracle/oradata/undo.dbf'
发现此时undo表空间数据文件已经丢失
2.状态检查
SYS@hfdr>select status from v$instance;
STATUS
------------
MOUNTED
SYS@hfdr>show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
3.问题处理
SYS@hfdr>alter system set undo_tablespace=UNDOTBS02 scope=spfile;
系统已更改。
SYS@hfdr>shutdown immediate
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SYS@hfdr>startup mount;
ORACLE 例程已经启动。
Total System Global Area 1586708480 bytes
Fixed Size 2253624 bytes
Variable Size 973081800 bytes
Database Buffers 603979776 bytes
Redo Buffers 7393280 bytes
数据库装载完毕。
SYS@hfdr>alter database open;
alter database open
*
第 1 行出现错误:
ORA-01157: 无法标识/锁定数据文件 3 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 3: '/u01/app/oracle/oradata/undo.dbf'
此时发现即使更改了undo表空间的参数,依旧起不来库
SYS@hfdr>show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS02
SYS@hfdr>alter database datafile 3 offline;
数据库已更改。
启动数据库
SYS@hfdr>alter database open;
数据库已更改。
数据库成功启动
4.重建UNDO
SYS@hfdr>select tablespace_name from dba_tablespaces;
TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
TBS_OGG
ZHANGYUN
UNDOTBS02
已选择8行。
SYS@hfdr>drop tablespace UNDOTBS1;
表空间已删除。
SYS@hfdr>create undo tablespace UNDOTBS1 datafile '/u01/app/oracle/oradata/undotbs1.dbf' size 300m autoextend off;
表空间已创建。
SYS@hfdr>alter system set undo_tablespace=UNDOTBS1 scope=both;
系统已更改。
SYS@hfdr>show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1