首页 技术 正文
技术 2022年11月19日
0 收藏 427 点赞 4,592 浏览 3596 个字

环境:RHEL 5.4 + Oracle 11.2.0.3

背景:数据库没有备份,数据库文件被误操作rm,此时数据库尚未关闭,也就是对应句柄存在,如何快速恢复?

1.某个普通数据文件被删除

**1.1 模拟5号数据文件被rm误删除**

SQL> select name, open_mode from v$database;NAME      OPEN_MODE
--------- --------------------
PROD2 READ WRITESQL> col name for a55
SQL> select file#, name from v$datafile; FILE# NAME
---------- -------------------------------------------------------
1 /u03/oradata/PROD2/system01.dbf
2 /u03/oradata/PROD2/sysaux01.dbf
3 /u03/oradata/PROD2/undotbs01.dbf
4 /u03/oradata/PROD2/users01.dbf
5 /u03/oradata/PROD2/example01.dbfSQL> !ls -lrth /u03/oradata/PROD2/example01.dbf
-rw-r----- 1 oracle oinstall 346M May 20 10:58 /u03/oradata/PROD2/example01.dbfSQL> !rm /u03/oradata/PROD2/example01.dbfSQL> !ls -lrth /u03/oradata/PROD2/example01.dbf
ls: /u03/oradata/PROD2/example01.dbf: No such file or directorySQL> exit

1.2 依据句柄号拷贝恢复5号数据文件

[oracle@edbjr2p2 PROD2]$ pwd
/u03/oradata/PROD2
[oracle@edbjr2p2 PROD2]$ ls -lrth
total 1.7G
-rw-r----- 1 oracle oinstall 21M May 20 02:50 temp01.dbf
-rw-r----- 1 oracle oinstall 5.1M May 20 10:58 users01.dbf
-rw-r----- 1 oracle oinstall 51M May 20 10:58 redo03.log
-rw-r----- 1 oracle oinstall 51M May 20 10:58 redo01.log
-rw-r----- 1 oracle oinstall 91M May 20 15:34 undotbs01.dbf
-rw-r----- 1 oracle oinstall 731M May 20 15:34 system01.dbf
-rw-r----- 1 oracle oinstall 751M May 20 15:34 sysaux01.dbf
-rw-r----- 1 oracle oinstall 51M May 20 15:38 redo02.log
-rw-r----- 1 oracle oinstall 9.3M May 20 15:38 control01.ctl
[oracle@edbjr2p2 PROD2]$ ps -ef|grep dbw0_PROD2|grep -v grep
oracle 28526 1 0 10:58 ? 00:00:01 ora_dbw0_PROD2
[oracle@edbjr2p2 PROD2]$ cd /proc/28526/fd/
[oracle@edbjr2p2 fd]$ ls -lrth|grep deleted
lrwx------ 1 oracle oinstall 64 May 20 15:39 261 -> /u03/oradata/PROD2/example01.dbf (deleted)
[oracle@edbjr2p2 fd]$ cp 261 /u03/oradata/PROD2/example01.dbf

恢复之后,数据库没有发现有异常报错,继续进行操作或重启库都没有问题。

2.所有数据文件被删除

如果是所有数据文件被删除,恢复的方法和上面一样,但测试这种情况一般还需要特殊处理后才可以开库。
比如我这里的实验遇到了2个错误:
– ORA-600 [kcratr_scan_lastbwr] (文档 ID 1267231.1)
– ORA-600 [3020] “Stuck Recovery” (文档 ID 30866.1)

具体现象如下:

SQL> select file#, checkpoint_change# from v$datafile
2 ; FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 2150244
2 2150244
3 2150244
4 2150244
5 2150244SQL> select file#, checkpoint_change# from v$datafile_header; FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 2150244
2 2150244
3 2150244
4 2150244
5 2150244SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-00600: internal error code, arguments: [kcratr_scan_lastbwr], [], [], [],
[], [], [], [], [], [], [], []SQL> recover database;
ORA-00600: internal error code, arguments: [3020], [3], [2070], [12584982], [],
[], [], [], [], [], [], []
ORA-10567: Redo is inconsistent with data block (file# 3, block# 2070, file
offset is 16957440 bytes)
ORA-10564: tablespace UNDOTBS1
ORA-01110: data file 3: '/u03/oradata/PROD2/undotbs01.dbf'
ORA-10560: block type 'KTU UNDO BLOCK'RMAN> recover database until scn 2150244;Starting recover at 20-MAY-19
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=10 device type=DISKstarting media recovery
Oracle Error:
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/u03/oradata/PROD2/system01.dbf'media recovery complete, elapsed time: 00:00:01Finished recover at 20-MAY-19RMAN>
SQL> select file#, checkpoint_change# from v$datafile; FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 2150244
2 2150244
3 2150244
4 2150244
5 2150244SQL> select file#, checkpoint_change# from v$datafile_header; FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 2150244
2 2150244
3 2150244
4 2150244
5 2150244SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/u03/oradata/PROD2/system01.dbf'

此时尝试设置隐藏参数:

_allow_resetlogs_corruption=true

再次尝试成功开库:

SQL> alter database open resetlogs;Database altered.
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,027
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,518
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,365
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,146
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,780
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,857