RMAN(Recover Manager)
接着RMAN管理-上集延伸,上集内容我们主要介绍RMAN三种备份模式的实践以及备份过程中的步骤和注意事项⚠️,本章主要阐述的就是怎么利用RMAN所产出的备份文件进行恢复,全程会有理论概述以及实践阶段,感谢各位读阅🙏
在《用户管理》章节有介绍过关于恢复的两个名词,巩固一下:
Restore :如果文件丢失了,那我们就将备份的文件复制到原来文件丢失的位置
Recover :介质恢复,恢复通过备份文件还原后的数据空窗期
RMAN恢复控制文件
首先我们先将控制文件通过RMAN备份,我们介绍手动备份操作步骤(Linux)。
--创建存放备份的文件夹
[oracle@oracle u01]$ mkdir contro
--备份数据库控制文件到刚刚创建的文件夹中
RMAN> backup current controlfile format '/u01/contro/con';
Starting backup at 20-JUL-20
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
channel ORA_DISK_1: starting piece 1 at 20-JUL-20
channel ORA_DISK_1: finished piece 1 at 20-JUL-20
...
[oracle@oracle contro]$ ll -lh
总用量 9.5M
-rw-r-----. 1 oracle oinstall 9.5M 7月 20 14:47 con
--查询数据库现有的控制文件位置
SQL> select name from v$controlfile;
NAME
---------------------
/u01/app/oracle/c1.ctl
/u01/app/oracle/c2.ctl
--删除其中一个控制文件
[oracle@oracle ~]$ rm -rf /u01/app/oracle/c2.ctl
--重启数据库,查看数据库是否还能启动
SQL> startup force;
ORACLE instance started.
Total System Global Area 1603411968 bytes
Fixed Size 2213776 bytes
Variable Size 989857904 bytes
Database Buffers 603979776 bytes
Redo Buffers 7360512 bytes
ORA-00205: error in identifying control file, check alert log for more info
SQL> select status from v$instance;
STATUS
--------------------
STARTED
--已经发现数据库打不开,处于(started)状态,现在我们通过RMAN来进行手工恢复控制文件。
(1)重新登录RMAN
RMAN> quit
Recovery Manager complete.
[oracle@oracle u01]$ rman target /
Recovery Manager: Release 11.2.0.1.0 - Production on Mon Jul 20 14:59:14 2020
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
connected to target database: PAS (not mounted)
(2)恢复(restore)控制文件
RMAN> restore controlfile from '/u01/contro/con';
Starting restore at 20-JUL-20
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=90 device type=DISK
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/u01/app/oracle/c1.ctl
output file name=/u01/app/oracle/c2.ctl
Finished restore at 20-JUL-20
--这里不指定from路径就会报错,所以必须是指定到我们刚刚备份的目录下进行恢复,后面的话我还会详细介绍一下如何自动备份。
--执行完restore之后,我们试下启动数据库。
SQL> startup
ORACLE instance started.
Total System Global Area 1603411968 bytes
Fixed Size 2213776 bytes
Variable Size 989857904 bytes
Database Buffers 603979776 bytes
Redo Buffers 7360512 bytes
Database mounted.
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
--这里还是提示数据库无法启动,提示需要我们输入RESETLOGS的参数.
SQL> 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: '/u01/app/oracle/oradata/pas/system01.dbf'
--但还是不成功,这里就要回到👆上面提到recover的意义了,我们要补齐备份前到目前为止所缺失的一些数据,现在我们进行介质恢复(recover)。
RMAN> recover database;
Starting recover at 20-JUL-20
Starting implicit crosscheck backup at 20-JUL-20
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
....
Finished recover at 20-JUL-20
--出现finisned recover代表已经完成介质恢复(recover),我们接着再回到刚刚的步骤来启动数据库。
SQL> alter database open resetlogs;
Database altered.
SQL> select status from v$instance;
STATUS
-----------
OPEN
SQL>
--数据库已通过将控制文件删除的情况下正常恢复了。
除此之外,我们还可以通过RMAN>restore controlfile from autobackup; 自动备份就不用再指定目录进行恢复,数据库会找到默认的备份路径进行恢复,但是有一点要注意:默认路径的备份文件就是备份的时候没有指定format的路径(backup current controlfile ),这里的控制文件也是需要先进行备份(不用指定路径)才可恢复,避免利用旧版本的控制文件进行恢复,会挺麻烦,要保证控制文件备份是最新的。
RMAN恢复数据文件
为了解决未来更多的实际情况,恢复数据文件我们通过两种不同的场景模拟恢复数据文件,我们分两种场景模拟恢复:
场景1: 数据文件丢失,但是目前未导致实例崩溃。
场景2: 数据文件丢失,导致实例无法启动
场景1
--首先我们创建一个新的表空间和数据文件作为后面的演示环境:
SQL> create tablespace xx datafile '/u01/xx.dbf' size 100m autoextend on next 5m maxsize 100m;
Tablespace created.
--我们查看一下数据库全局的数据文件以及表空间情况
select a.file_id,a.tablespace_name,a.file_name,b.status
from dba_data_files a,v$datafile b
where a.file_id = b.file#;
1 SYSTEM /u01/app/oracle/oradata/pas/system01.dbf SYSTEM
2 SYSAUX /u01/app/oracle/oradata/pas/sysaux01.dbf ONLINE
3 UNDOTBS1 /u01/app/oracle/oradata/pas/undotbs01.dbf ONLINE
4 USERS /u01/app/oracle/oradata/pas/users01.dbf ONLINE
5 EXAMPLE /u01/app/oracle/oradata/pas/example01.dbf ONLINE
6 XX /u01/xx.dbf ONLINE
--通过RMAN备份刚刚创建的xx表空间对应的数据文件(这里我直接备份,跳过创建文件夹的目录(linux))。
RMAN> backup datafile 6 format '/u01/datafile/df6';
Starting backup at 20-JUL-20
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00006 name=/u01/xx.dbf
channel ORA_DISK_1: starting piece 1 at 20-JUL-20
channel ORA_DISK_1: finished piece 1 at 20-JUL-20
piece handle=/</

最低0.47元/天 解锁文章
1761

被折叠的 条评论
为什么被折叠?



