在oracle系统中一些非关键的表空间可以不进行备份,如果表空间崩溃了,就可以通过重建进行恢复,对于非当前的还原表空间可以使用这一方法:
实验如下:
SQL> conn system/yang
已连接。
1。列出数据库中所有的还原表空间
SQL> select tablespace_name ,status,contents
2 from dba_tablespaces where contents='UNDO';
TABLESPACE_NAME STATUS CONTENTS
------------------------------ --------- ---------
UNDOTBS1 ONLINE UNDO
2.列出所有关于还原操作的所有参数,
SQL> SHOW parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
SQL> @f:\undo.sql----改代码 在留言里
表空间已创建。
3.再次列出数据库中所有的还原表空间 查看刚才建的undo表空间
SQL> select tablespace_name ,status,contents
2 from dba_tablespaces where contents='UNDO';
TABLESPACE_NAME STATUS CONTENTS
------------------------------ --------- ---------
UNDOTBS1 ONLINE UNDO
YANG_UNDO ONLINE UNDO
SQL> SHOW parameter undo ---结果显示当前的还原表空间仍未undotbs1
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
4 查询数据库中所有表空间对应的数据文件。
SQL> set line 120
SQL> col file_name for a55
SQL> col tablespace_name for a15
SQL> select file_id,file_name,tablespace_name,bytes/1024/1024 MB
2 from dba_data_files
3 where tablespace_name like '%UNDO%';
FILE_ID FILE_NAME TABLESPACE_NAME MB
---------- ------------------------------------------------------- --------------- ----------
3 F:\APP\YANG\ORADATA\ORACL\UNDOTBS01.DBF UNDOTBS1 80
6 F:\ORCL\YANG_UNDO.DBF YANG_UNDO 50
5,。将用户切换到sysdba 用户下,以便接下来进行直接启动。
SQL> conn system/yang as sysdba
已连接。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
6 此时,模拟刚才建的yang_undo 表空间损坏,将它删除。之后,重启数据库
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 535662592 bytes
Fixed Size 1334380 bytes
Variable Size 130024340 bytes
Database Buffers 398458880 bytes
Redo Buffers 5844992 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 6 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 6: 'F:\ORCL\YANG_UNDO.DBF'
错误显示 数据文件 6 出现问题 ,所以,使用如下命令将其脱机并删除。
SQL> alter database datafile 6 offline drop;
数据库已更改。
之后,将数据库由mount状态 直接转换为 open
SQL> alter database open;
数据库已更改。
7.查询数据库中所有表空间对应的数据文件。
SQL> select file_id,file_name,tablespace_name,bytes/1024/1024 MB
2 from dba_data_files
3 where tablespace_name like '%UNDO%';
FILE_ID FILE_NAME TABLESPACE_NAME MB
---------- ------------------------------------------------------- --------------- ----------
3 F:\APP\YANG\ORADATA\ORACL\UNDOTBS01.DBF UNDOTBS1 80
6 F:\ORCL\YANG_UNDO.DBF YANG_UNDO
8.查询数据库中的所有还原表空间。SQL> select tablespace_name ,status,contents
2 from dba_tablespaces where contents='UNDO';
TABLESPACE_NAME STATUS CONTENTS
--------------- --------- ---------
UNDOTBS1 ONLINE UNDO
YANG_UNDO ONLINE UNDO
由显示可知,出错的表空间还在,因此,使用如下命令,将yang_undo 表空间 删除。
SQL> drop tablespace yang_undo;
表空间已删除。
再次查看,yang_undo 已不在。
SQL> select tablespace_name ,status,contents
2 from dba_tablespaces where contents='UNDO';
TABLESPACE_NAME STATUS CONTENTS
--------------- --------- ---------
UNDOTBS1 ONLINE UNDO
SQL> select file_id,file_name,tablespace_name,bytes/1024/1024 MB
2 from dba_data_files
3 where tablespace_name like '%UNDO%';
FILE_ID FILE_NAME TABLESPACE_NAME MB
---------- ------------------------------------------------------- --------------- ----------
3 F:\APP\YANG\ORADATA\ORACL\UNDOTBS01.DBF UNDOTBS1 80
9,再次创建yang_undo 表空间。并查询
SQL> @f:\undo.sql
表空间已创建。
SQL> select tablespace_name ,status,contents
2 from dba_tablespaces where contents='UNDO';
TABLESPACE_NAME STATUS CONTENTS
--------------- --------- ---------
UNDOTBS1 ONLINE UNDO
YANG_UNDO ONLINE UNDO
SQL> select file_id,file_name,tablespace_name,bytes/1024/1024 MB
2 from dba_data_files
3 where tablespace_name like '%UNDO%';
FILE_ID FILE_NAME TABLESPACE_NAME MB
---------- ------------------------------------------------------- --------------- ----------
3 F:\APP\YANG\ORADATA\ORACL\UNDOTBS01.DBF UNDOTBS1 80
6 F:\ORCL\YANG_UNDO.DBF YANG_UNDO 50
至此,非当前的还原表空间的恢复成功。。。