探索ORACLE之RMAN_07 磁盘损坏数据丢失恢复
作者:吴伟龙 Name:Prodence Woo
QQ:286507175 msn:hapy-wuweilong@hotmail.com
有的时候在企业里面难免会出现由于磁盘损坏而导致数据库的故障乃至数据的丢失,那么这个时候,那么这个时候数据的备份就显得尤为的重要。在这一节我们重点讨论下由于装载数据文件,redo日志文件,controlfile控制文件的磁盘损坏的数据恢复。
6.1
通过强制卸载磁盘模拟数据磁盘损坏:
[root@wwldb ~]# umount -f /DBData/
umount2: 资源或设备忙
umount: /DBData: device is busy
umount2: 资源或设备忙
umount: /DBData: device is busy
[root@wwldb ~]# fuser -m -k /DBData/
查看设备占用情况
/DBData/: 35083510 3512 35143516 3518 35293531 3535 35413610c
[root@wwldb ~]# fuser -m -k -i -k /DBData/
强制kill /DBData相关进程
[root@wwldb ~]# umount -f /DBData/
卸载/DBData
[root@wwldb ~]#
6.2 umount
后,通过alert看到实例也随之宕机了。
Fri Jul 616:03:33 2012
Errors in file/DBSoft/admin/WWL/bdump/wwl_pmon_3502.trc:
ORA-00471: DBWR process terminated with error
Fri Jul 616:03:33 2012
PMON: terminating instance due to error 471
Instance terminated by PMON, pid = 3502
[root@wwldb bdump]# ps -ef|grep ora
root2965 2943 0 14:39 ? 00:00:00 hald-addon-storage: polling/dev/hdc
root3944 3050 0 16:07 pts/2 00:00:00 su - oracle
oracle3945 3944 0 16:07 pts/2 00:00:00 -bash
oracle3977 3945 0 16:07 pts/2 00:00:00 rlwrap sqlplus / as sysdba
oracle3978 3977 0 16:07 pts/3 00:00:00 sqlplus as sysdba
oracle3979 3978 0 16:07 ? 00:00:00 oracleWWL(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
root4022 3980 0 16:10 pts/4 00:00:00 grep ora
[root@wwldb bdump]#
6.3
要恢复首先要将数据库启动到mount状态才能恢复
SQL> startup
ORACLE instance started.
Total System Global Area 100663296 bytes
Fixed Size 1217884 bytes
Variable Size 88083108 bytes
Database Buffers 8388608 bytes
Redo Buffers2973696 bytes
ORA-00205: error in identifying control file, checkalert log for more info
数据库无法启动到mount状态,要执行恢复必须启动到mount状态下才能执行,不过我们在alert日志里面看到是因为确实控制文件2数据库无法启动到mount状态,见如下:
Fri Jul 616:13:24 2012
ORA-00202: control file:'/DBData/oradata/WWL/control02.ctl'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
Fri Jul 616:13:24 2012
ORA-205 signalled during: ALTER DATABASE MOUNT...
这个时候我们可以尝试查找其它控制文件是否都存在,存放在哪里,只要存在任何一个控制文件我们只需要修改参数文件来达到将数据库启动到mount状态。
SQL> show parameter control
NAME TYPE VALUE
----------------------------------------------- ------------------------------
control_file_record_keep_time integer 7
control_files string /DBSoft/oradata/WWL/control01.ctl,
/DBData/oradata/WWL/control02.ctl, /DBData/oradata/WWL/control03.ctl
我们通过spfile参数可以看到控制文件是存放在两块磁盘上,损坏的磁盘为/DBData,那么也就以为着control02.ctl和control03.ctl两个控制文件损坏,这个时候我们可以通过/DBSoft磁盘上的control01.ctl来启动数据库,或者将control02.ctl和control03通过control01.ctl转储到其它磁盘上来启动数据库。
我现在通过修改参数文件仅保留control01.ctl来启动数据库。
SQL> alter system set control_files ='/DBSoft/oradata/WWL/control01.ctl' scope=spfile;
System altered.
SQL> shutdown immediate
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 100663296 bytes
Fixed Size 1217884 bytes
Variable Size 88083108 bytes
Database Buffers 8388608 bytes
Redo Buffers 2973696 bytes
Database mounted.
SQL>
我们可以看到通过修改参数文件,现在数据库已经启动到mount状态。
6.4
添加新的硬盘,并将其格式化创建文件系统,用于数据库数据文件存放的新路径,详细步骤参考:
Fdisk分区方法:http://blog.csdn.net/wuweilong/article/details/7538634
Parte分区方法:http://blog.csdn.net/wuweilong/article/details/7553200
卷管理分方法:http://blog.csdn.net/wuweilong/article/details/7565530
我刚才创建的分区名称是/DBBak2,见如下:
[oracle@wwldb /]$ df -h
FilesystemSize Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
7.7G 3.0G 4.3G42% /
/dev/sda199M 12M 82M13% /boot
tmpfs506M 0 506M0% /dev/shm
/dev/mapper/DBSoft-dbsoft
20G 1.7G 18G9% /DBSoft
/dev/mapper/DBBack-DBBack001
20G 720M 18G4% /DBBak
/dev/mapper/DBBak2-DBBak2
20G 173M19G 1% /DBBak2
6.5
创建对应的目录
[oracle@wwldb ~]$ mkdir /DBBak2/oradata/WWL
[oracle@wwldb WWL]$ pwd
/DBBak2/oradata/WWL
[oracle@wwldb WWL]$ ls -a
. ..
6.6
将数据文件恢复到/DBBak2/oradata/WWL目录中
查看备份信息:
RMAN> list backup;
using target database control file instead of recoverycatalog
List of Backup Sets
===================
BS Key Type LVSize Device Type Elapsed TimeCompletion Time
------- ---- -- ---------- ----------- ---------------------------
6Full 540.81M DISK00:01:13 06-JUL-12
BP Key:6 Status: AVAILABLE Compressed: NO Tag: TAG20120706T154942
PieceName: /DBBak/bak_WWL_07_06_06nfdv8n_1_1
List ofDatafiles in backup set 6
File LV TypeCkp SCN Ckp Time Name
---- -- -------------- --------- ----
1 Full 1263589 06-JUL-12 /DBData/WWL/system01.dbf
2 Full 1263589 06-JUL-12 /DBData/WWL/undotbs01.dbf
3 Full 1263589 06-JUL-12 /DBData/WWL/sysaux01.dbf
4 Full 1263589 06-JUL-12 /DBData/WWL/users01.dbf
5 Full 1263589 06-JUL-12 /DBData/WWL/wwl001.dbf
6 Full 1263589 06-JUL-12 /DBData/WWL/wwl002.dbf
7 Full 1263589 06-JUL-12 /DBData/WWL/wwl003.dbf
BS Key Type LVSize Device Type Elapsed TimeCompletion Time
------- ---- -- ---------- ----------- ---------------------------
7Full 7.11M DISK 00:00:01 06-JUL-12
BP Key:7 Status: AVAILABLE Compressed: NO Tag: TAG20120706T155059
PieceName: /DBBak/bakctl_c-5520179-20120706-01
Control FileIncluded: Ckp SCN: 1263606 Ckp time:06-JUL-12
SPFILEIncluded: Modification time: 06-JUL-12
通过备份信息执行如下恢复到新的磁盘上:
RMAN> run {
2> set newname fordatafile '/DBData/WWL/system01.dbf' to '/DBBak2/oradata/WWL/system01.dbf';
3> set newname fordatafile '/DBData/WWL/undotbs01.dbf' to '/DBBak2/oradata/WWL/undotbs01.dbf';
4> set newname fordatafile '/DBData/WWL/sysaux01.dbf' to '/DBBak2/oradata/WWL/sysaux01.dbf';
5> set newname fordatafile '/DBData/WWL/users01.dbf' to '/DBBak2/oradata/WWL/users01.dbf';
6> set newname fordatafile '/DBData/WWL/wwl001.dbf' to '/DBBak2/oradata/WWL/wwl01.dbf';
7> set newname fordatafile '/DBData/WWL/wwl002.dbf' to '/DBBak2/oradata/WWL/wwl02.dbf';
8> set newname fordatafile '/DBData/WWL/wwl003.dbf' to '/DBBak2/oradata/WWL/wwl03.dbf';
9> restore database;
10> switch datafile all;
11> recover database;
12> }
executing command: SETNEWNAME
executing command: SETNEWNAME
executing command: SETNEWNAME
executing command: SETNEWNAME
executing command: SETNEWNAME
executing command: SETNEWNAME
executing command: SETNEWNAME
Starting restore at 06-JUL-12
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=46devtype=DISK
channel ORA_DISK_1: startingdatafile backupset restore
channel ORA_DISK_1:specifying datafile(s) to restore from backup set
restoring datafile 00001 to/DBBak2/oradata/WWL/system01.dbf
restoring datafile 00002 to/DBBak2/oradata/WWL/undotbs01.dbf
restoring datafile 00003 to/DBBak2/oradata/WWL/sysaux01.dbf
restoring datafile 00004 to/DBBak2/oradata/WWL/users01.dbf
restoring datafile 00005 to/DBBak2/oradata/WWL/wwl01.dbf
restoring datafile 00006 to/DBBak2/oradata/WWL/wwl02.dbf
restoring datafile 00007 to/DBBak2/oradata/WWL/wwl03.dbf
channel ORA_DISK_1: readingfrom backup piece /DBBak/bak_WWL_07_06_06nfdv8n_1_1
channel ORA_DISK_1: restoredbackup piece 1
piecehandle=/DBBak/bak_WWL_07_06_06nfdv8n_1_1 tag=TAG20120706T154942
channel ORA_DISK_1: restorecomplete, elapsed time: 00:01:46
Finished restore at 06-JUL-12
datafile 1 switched todatafile copy
input datafile copy recid=8stamp=787945637 filename=/DBBak2/oradata/WWL/system01.dbf
datafile 2 switched todatafile copy
input datafile copy recid=9stamp=787945637 filename=/DBBak2/oradata/WWL/undotbs01.dbf
datafile 3 switched todatafile copy
input datafile copy recid=10stamp=787945637 filename=/DBBak2/oradata/WWL/sysaux01.dbf
datafile 4 switched todatafile copy
input datafile copy recid=11stamp=787945637 filename=/DBBak2/oradata/WWL/users01.dbf
datafile 5 switched todatafile copy
input datafile copy recid=12stamp=787945637 filename=/DBBak2/oradata/WWL/wwl01.dbf
datafile 6 switched todatafile copy
input datafile copy recid=13stamp=787945637 filename=/DBBak2/oradata/WWL/wwl02.dbf
datafile 7 switched todatafile copy
input datafile copy recid=14stamp=787945637 filename=/DBBak2/oradata/WWL/wwl03.dbf
Finsh
恢复脚本如下:
run {
set newname for datafile'/DBData/WWL/system01.dbf' to '/DBBak2/oradata/WWL/system01.dbf';
set newname for datafile '/DBData/WWL/undotbs01.dbf'to '/DBBak2/oradata/WWL/undotbs01.dbf';
set newname for datafile'/DBData/WWL/sysaux01.dbf' to '/DBBak2/oradata/WWL/sysaux01.dbf';
set newname for datafile'/DBData/WWL/users01.dbf' to '/DBBak2/oradata/WWL/users01.dbf';
setnewname for datafile '/DBData/WWL/wwl001.dbf' to'/DBBak2/oradata/WWL/wwl01.dbf';
set newname for datafile'/DBData/WWL/wwl002.dbf' to '/DBBak2/oradata/WWL/wwl02.dbf';
set newname for datafile'/DBData/WWL/wwl003.dbf' to '/DBBak2/oradata/WWL/wwl03.dbf';
restore database;
switch datafile all;
}
6.7
生成控制文件trace文件,用来重建控制文件:
SQL> alter database backupcontrolfile to trace as '/tmp/ctl.txt';
SQL> shutdown immediate;
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP NOMOUNT
ORACLE instance started.
Total System Global Area 100663296 bytes
Fixed Size 1217884 bytes
Variable Size 88083108 bytes
Database Buffers 8388608 bytes
Redo Buffers 2973696 bytes
SQL> CREATE CONTROLFILEREUSE DATABASE "WWL" RESETLOGSARCHIVELOG
MAXDATAFILES 100
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXINSTANCES 8
MAXDATAFILES 100
5MAXINSTANCES 8
6MAXLOGHISTORY 292
7LOGFILE
8GROUP 1 '/DBBak2/oradata/WWL/redo01.log'SIZE 30M,
GROUP 3 '/DBBak2/oradata/WWL/redo03.log' SIZE 30M,
10GROUP 4 (
) SIZE 128M,
GROUP 5 (
'/DBBak2/oradata/WWL/redo5a.log',
'/DBBak2/oradata/WWL/redo4a.log',
'/DBBak2/oradata/WWL/redo4b.log'
) SIZE 128M,
GROUP 5 (
'/DBBak2/oradata/WWL/redo5a.log',
'/DBBak2/oradata/WWL/redo5b.log'
) SIZE 128M,
GROUP 6 (
'/DBBak2/oradata/WWL/redo6a.log',
'/DBBak2/oradata/WWL/redo6b.log'
) SIZE 128M,
GROUP 7 (
'/DBBak2/oradata/WWL/redo7a.log',
'/DBBak2/oradata/WWL/redo7b.log'
) SIZE 128M
DATAFILE
'/DBBak2/oradata/WWL/system01.dbf',
'/DBBak2/oradata/WWL/undotbs01.dbf',
'/DBBak2/oradata/WWL/sysaux01.dbf',
'/DBBak2/oradata/WWL/users01.dbf',
'/DBBak2/oradata/WWL/wwl01.dbf',
'/DBBak2/oradata/WWL/wwl02.dbf',
'/DBBak2/oradata/WWL/wwl03.dbf'
CHARACTER SET ZHS16CGB231280
35 ;
Control file created.
6.8
以resetlog模式启动数据库:
SQL> alter database openresetlogs;
6.9
删除原redo日志文件,重建redo新日志文件组到新的磁盘上:
SQL> alterdatabase drop logfile group 1;
Databasealtered.
SQL> alterdatabase drop logfile group 2;
Databasealtered.
SQL> alterdatabase drop logfile group 3;
Database altered.
SQL>
SQL> alter database addlogfile group 4 ('/DBBak2/oradata/WWL/redo4a.log','/DBBak2/oradata/WWL/redo4b.log')size 128M;
Database altered.
SQL> alter database addlogfile group 5('/DBBak2/oradata/WWL/redo5a.log','/DBBak2/oradata/WWL/redo5b.log') size 128M;
Database altered.
SQL> alter database addlogfile group 6('/DBBak2/oradata/WWL/redo6a.log','/DBBak2/oradata/WWL/redo6b.log') size 128M;
Database altered.
SQL> alter database addlogfile group 7 ('/DBBak2/oradata/WWL/redo7a.log','/DBBak2/oradata/WWL/redo7b.log')size 128M;
Database altered.
SQL>
6.10
查看日志组信息及状态:
SQL> select * from v$log;
GROUP#THREAD# SEQUENCE# BYTESMEMBERS ARC STATUSFIRST_CHANGE# FIRST_TIM
---------- -------------------- ---------- ---------- --- ---------------- ------------- ---------
4 1 0134217728 2 YES UNUSED 0
5 1 0134217728 2 YES UNUSED 0
6 1 0134217728 2 YESUNUSED 0
7 1 1134217728 2 NO CURRENT 1263590 06-JUL-12
SQL> alter system switchlogfile;
System altered.
SQL> alter system switchlogfile;
System altered.
SQL> alter system switchlogfile;
System altered.
SQL> alter system switchlogfile;
System altered.
SQL> select * from v$log;
GROUP#THREAD# SEQUENCE# BYTESMEMBERS ARC STATUSFIRST_CHANGE# FIRST_TIM
---------- -------------------- ---------- ---------- --- ---------------- ------------- ---------
4 1 2134217728 2 YES INACTIVE 1263859 06-JUL-12
5 1 3134217728 2 YESINACTIVE 1263861 06-JUL-12
6 1 4134217728 2 YES INACTIVE 1263863 06-JUL-12
7 1 5134217728 2 NO CURRENT 1263866 06-JUL-12
SQL>
至此恢复完成。
分享到:
相关推荐
Oracle Recovery Manager (RMAN) 是一款强大的工具,用于备份、恢复以及灾难恢复Oracle数据库。本次演讲旨在提供关于Oracle Database 10g备份与恢复的最佳实践指南。 #### 二、备份与恢复考虑因素 1. **评估数据...
### ORACLE数据库物资管理系统磁盘损坏数据恢复处理报告 #### 系统环境 - **硬件平台及操作系统**: Windows Server 2003 - **Oracle产品及版本**: Oracle Database 10g Release 2 (10.2.0.1.0) #### 问题描述 在...
本文旨在为瑞航公司当前所使用的Oracle RMAN备份恢复机制提供详尽的指导,涵盖全量备份、增量备份、数据恢复等多个方面,尤其关注于数据丢失、控制文件丢失、参数文件丢失、密码文件丢失、redo文件丢失以及表空间...
例如,当数据文件因磁盘损坏丢失后,除了物理还原还需要进行一致性恢复。 1. 数据文件损坏:如果`users01.dbf`因磁盘问题丢失,尝试启动数据库会报错。 2. 查询损坏文件:通过查询`v$tablespace`、`v$datafile`和`v...
RMAN提供了一种高效、自动化的方式来管理数据库的备份策略,确保在数据丢失或系统故障时能够快速恢复。 1. **切换服务器归档模式**: 在进行RMAN备份之前,通常建议数据库运行在归档模式下,因为这可以提供更全面...
RMAN能够帮助数据库管理员在数据丢失或损坏的情况下,快速有效地恢复数据,确保业务连续性。 #### 二、RMAN 术语详解 RMAN中有许多关键术语,理解这些术语对于掌握RMAN的功能至关重要: ##### 2.1 Backup Sets ...
通过上述分析可以看出,RMAN备份脚本是Oracle数据库管理员进行数据保护的重要工具之一。合理的备份策略和脚本编写能够有效保障数据的安全性和可用性。企业应根据自身业务特点和数据量大小来定制合适的备份方案,同时...
### Oracle 11g 数据恢复向导恢复数据文件 #### 一、背景介绍 在Oracle 11g中,恢复数据库中的数据文件是一项常见的维护任务。数据文件是组成Oracle数据库物理结构的重要组成部分之一,用于存储数据库的数据。由于...
Oracle 10g数据库备份与恢复是数据库管理中的一个重要组成部分,它确保了在发生硬件故障、软件错误、人为操作失误或数据损坏等情况下,数据能够被恢复到一个已知的正常状态,保障了企业数据的安全性和可靠性。...
- **恢复管理**:RMAN提供了一种简单而有效的方法来恢复数据库或数据文件,无论损坏是由软件错误、硬件故障还是人为操作引起的。 - **灾难恢复计划**:RMAN可以帮助创建和执行灾难恢复计划,确保在灾难发生后能够...
RMAN为DBA提供了全面的解决方案来保护数据库免受数据丢失的风险。Oracle数据库RMAN手册提供了一个快速参考指南,包含了RMAN的基本使用方法和语法,对于深入理解RMAN的功能非常有帮助。 #### 二、RMAN环境概览 RMAN...
- **控制文件自动备份**:定期备份控制文件,防止因控制文件损坏而导致的数据丢失风险。 综上所述,掌握RMAN的使用方法对于Oracle DBA来说是非常重要的,它能够帮助DBA们有效地管理和保护数据库中的宝贵数据。
在实际操作中,可能会遇到各种复杂情况,如磁盘损坏、文件权限问题等,这就需要灵活应对,并根据具体情况调整恢复策略。 此外,预防总是优于治疗。定期备份数据库、实施有效的数据保护策略,如使用RMAN进行增量或...
Oracle数据库的维护是数据库管理员(DBA)日常工作中不可或缺的一部分,而RMAN(Recovery Manager)是Oracle数据库提供的一种强大的工具,专门用于数据库备份、恢复和维护。在本篇文章中,我们将深入探讨RMAN的基本...
介质故障恢复是指由于磁盘故障、文件故障或介质故障等原因,导致数据库文件损坏或丢失的情况下的恢复过程。介质故障恢复可以分为完全介质恢复和不完全介质恢复两种。完全介质恢复可以恢复全部丢失的修改,而不完全...
Oracle的Recovery Manager(RMAN)是Oracle数据库管理系统中用于数据备份和恢复的核心工具。这个强大的实用程序提供了一整套高级功能,旨在确保数据库的安全性和可恢复性。以下是对RMAN数据库备份方案的详细说明: ...
9. **介质恢复**:如果数据丢失或损坏,RMAN能够从磁盘、磁带或其他介质上恢复数据,支持跨平台恢复。 通过学习《[三思笔记]一步一步学RMAN(全)》这份资料,你可以逐步了解并掌握RMAN的基本使用方法,包括如何配置...
- **RMAN简介:** RMAN是Oracle提供的一款强大的备份与恢复工具,能够自动化执行备份任务并支持复杂的恢复场景。 - **基本命令:** - `BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;`:备份所有数据文件、归档...
当数据库遇到故障时,如磁盘损坏导致数据库瘫痪,恢复过程需遵循以下步骤: 1. **硬件恢复**:更换损坏的磁盘,并重新安装Oracle数据库(如果数据库所在磁盘也损坏)。 2. **控制文件还原**:从备份中恢复控制文件...