UNDO表空间下的数据文件被误删除后的处理方法

宜家博客
宜家博客
宜家博客
39147
文章
0
评论
2019年8月14日13:20:31 评论 172 2282字阅读7分36秒

UNDO表空间下的数据文件被误删除后的处理方法:

操作前备份数据库,以避免更大的损失。
思路:
1、把误删除的数据文件offline
2、正常打开数据库后创建新的UNDO表空间及数据文件
3、修改相应参数指向新的UNDO表空间
4、重新启动数据库验证
5、删除旧的UNDO表空间。

以下为我在虚拟机上模拟的场景:在数据库打开的状态下,用操作系统命令将undo表空间对应的唯一数据文件改名,以模拟数据文件被删除的情况。
关闭数据库
SQL> shutdown immediate;
Database closed.
Database dismounted.
Oracle instance shut down.
启动数据库,报错,提示找不到undo表空间下的数据文件/oradata/orcl/undotbs01.dbf
SQL> startup
ORACLE instance started.

Total System Global Area  536870912 bytes
Fixed Size                    2097624 bytes
Variable Size                  150998568 bytes
Database Buffers          377487360 bytes
Redo Buffers                    6287360 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 2 - see DBWR trace file
ORA-01110: data file 2: '/oradata/orcl/undotbs01.dbf'

将该数据文件offline
SQL> alter database datafile 2 offline
 2  ;

Database altered.

正常打开数据库
SQL> alter database open;

Database altered.

显示UNDO相关的参数
SQL> show parameter undo

NAME                                    TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string        AUTO
undo_retention                            integer        900
undo_tablespace                      string        UNDOTBS1
创建新的UNDO表空间
SQL> create undo tablespace undotbs2 datafile '/oradata/orcl/undotbs02.dbf' size 320M;

Tablespace created.

修改UNDO_TABLESPACE参数,指向新创建的UNDO表空间
SQL> alter system set undo_tablespace='undotbs2' scope=spfile;

System altered.
重新启动数据库
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup 
ORACLE instance started.

Total System Global Area  536870912 bytes
Fixed Size                    2097624 bytes
Variable Size                  150998568 bytes
Database Buffers          377487360 bytes
Redo Buffers                    6287360 bytes
Database mounted.
Database opened.

SQL> select * from v$tablespace;

      TS# NAME                          INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
        0 SYSTEM                          YES NO  YES
        1 UNDOTBS1                          YES NO  YES
        2 SYSAUX                          YES NO  YES
        3 TEMP                          NO  NO  YES
        4 USERS                          YES NO  YES
        5 HRTBS                          YES NO  YES
        6 DEMO                          YES NO  YES
        8 UNDOTBS2                          YES NO  YES

8 rows selected.
确认UNDO_TABLESPACE参数已修改
SQL> show parameter undo

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

删除旧的UNDO表空间
SQL> drop tablespace undotbs1;

继续阅读
weinxin
欢迎加入中国站长博客之家
本站的所有资源都会上传分享到博客之家,希望大家互相学习交流进步。
宜家博客
最权威Oracle获取SQL语句执行计划大全 Linux-数据库

最权威Oracle获取SQL语句执行计划大全

该文档为根据相关资料整理、总结而成,主要讲解Oracle数据库中,获取SQL语句执行计划的最权威、最正确的方法、步骤,此外,还详细说明了每种方法中可选项的意义及使用方法,以方便大家和自己日常工作中查阅...
Oracle、DB2、PostgreSQL之Sequence大总结 Linux-数据库

Oracle、DB2、PostgreSQL之Sequence大总结

Sequence是数据库系统按照一定规则自动增加的数字序列。这个序列一般作为代理主键(因为不会重复),没有其他任何意义。 Sequence是数据库系统的特性,有的数据库有Sequence,有的没有。比...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: