手工完全恢复(不可转储)

本文详细介绍了在Oracle环境中,面对新建表空间未备份即损坏的情况,如何通过查看现有数据文件位置、新建表空间与数据表、插入数据并观察归档行为、模拟断电、删除数据文件、起库报错并查询损坏数据文件、使用高可用模式恢复库、利用日志文件恢复数据文件等步骤,实现数据恢复和确保系统稳定性的关键操作。

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

实验环境:red hat 5.8

oracle环境:11.2.0.3

实验情况:新建的表空间,来不及备份,就已经损坏的情况下。

新建的表空间,没有备份,无法转储,只能重建数据文件

1、查看一下现有的数据文件位置。

sys@TEST0910> select file#,name from v$datafile;
     FILE# NAME
---------- --------------------------------------------------
         1 /u01/app/oracle/oradata/test0910/system01.dbf
         2 /u01/app/oracle/oradata/test0910/sysaux01.dbf
         3 /u01/app/oracle/oradata/test0910/undotbs01.dbf
         4 /u01/app/oracle/oradata/test0910/users01.dbf
         5 /u01/app/oracle/oradata/test0910/example01.dbf
         6 /u01/app/oracle/oradata/test0910/testtb.dbf
6 rows selected.

 

 

 

2、新建一个表空间和一个数据表。

sys@TEST0910> create tablespace lxtbs datafile '/u01/app/oracle/oradata/test0910/lxtb01.dbf' size 20m;
Tablespace created.
在新建的表空间中新建一个表。
sys@TEST0910> create table scott.lxtb tablespace lxtbs as select * from scott.emp;
Table created.

 

 

3、插入三次数据,分别为提交归档,提交不归档,不提交不归档。

1.提交归档

sys@TEST0910> insert into scott.lxtb select * from scott.emp;
14 rows created.
sys@TEST0910> commit;
Commit complete.
sys@TEST0910> alter system archive log current;
System altered.
sys@TEST0910> select count(*) from scott.lxtb;
  COUNT(*)
----------
        28

 

2.提交不归档

sys@TEST0910> insert into scott.lxtb select * from scott.emp;
14 rows created.
sys@TEST0910>  commit;
Commit complete.
sys@TEST0910> select count(*) from scott.lxtb;
  COUNT(*)
----------
        42

 

3.不提交,不归档

sys@TEST0910> insert into scott.lxtb select * from scott.emp;
14 rows created.
sys@TEST0910> select count(*) from scott.lxtb;
  COUNT(*)
----------
        56

 

 

4、模拟断电。

sys@TEST0910> shutdown abort;
ORACLE instance shut down.

 

 

5、删除新建的表空间上的数据文件

[oracle@rtest ~]$ rm /u01/app/oracle/oradata/test0910/lxtb01.dbf
[oracle@rtest ~]$ ls /u01/app/oracle/oradata/test0910/lxtb01.dbf
ls: /u01/app/oracle/oradata/test0910/lxtb01.dbf: No such file or directory

 

 

 

6、起库,报错,查询损坏的数据文件

sys@TEST0910> startup
ORACLE instance started.
Total System Global Area 2505338880 bytes
Fixed Size                  2230952 bytes
Variable Size             587203928 bytes
Database Buffers         1895825408 bytes
Redo Buffers               20078592 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 7 - see DBWR trace file
ORA-01110: data file 7: '/u01/app/oracle/oradata/test0910/lxtb01.dbf'
查询哪个是坏的,这个数据文件没有备份。
sys@TEST0910> select file#,error from v$recover_file;
     FILE# ERROR
---------- -----------------------------------------------------------------
         7 FILE NOT FOUND

 

 

7、可先使用高可用模式先开库

sys@TEST0910> alter database datafile 7 offline;
Database altered.
sys@TEST0910> alter database open;
Database altered.

 

8、利用日志文件来恢复数据文件

新建一个空白的文件,用日志来恢复。这个就相当于转储。
sys@TEST0910> alter database create datafile '/u01/app/oracle/oradata/test0910/lxtb01.dbf';
Database altered.
sys@TEST0910> alter database datafile 7 online;
Database altered.
sys@TEST0910> select count(*) from scott.lxtb;
  COUNT(*)
----------
        42

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值