基于catalog 的RMAN 备份与恢复
--=================================
-- 基于catalog 的RMAN 备份与恢复
--=================================
RMAN的备份与恢复存储仓库的数据通常存放于控制文件或恢复目录中,本文主要讲述基于catalog的备份与恢复。
关于catalog的创建请参考:RMAN catalog的创建和使用
catalog方式的RMAN备份与恢复只不过是将备份恢复信息数据放在catalog目录内,普通的rman方式则是存放在控制文件中
catalog方式可以存储常用或特定的备份与恢复的脚本
有关catalog方式RMAN存储脚本请参考:基于 catalog 创建RMAN存储脚本
一、基于catalog来备份数据库(目标数据库orcl,恢复目录数据库asmdb)
首先基于catalog创建备份脚本
--连接到RMAN
[oracle@oradb ~]$ rman target sys/redhat@orcl catalog rman/rman@asmdb
connected to target database: ORCL (DBID=1263182651)
connected to recovery catalog database
--创建全局删除废弃备份的脚本
RMAN> create global script global_del_obso comment 'A script for obsolete backup and delete it' {
2> allocate channel ch1 device type disk;
3> delete obsolete recovery window of 7 days;
4> release channel ch1;
5> }
new incarnation of database registered in recovery catalog
starting full resync of recovery catalog
full resync complete
created global script global_del_obso
--创建全局归档日志的备份脚本
RMAN> create global script global_arch
2> comment ' A script for archivelog and delete it '
3> {
4> allocate channel ch1 device type disk;
5> sql " alter system archive log current";
6> set limit channel ch1 readrate=10240;
7> set limit channel ch1 kbytes=2048000;
8> backup as compressed backupset archivelog all delete input
9> format='/u01/bk/rmbk/arch_%d_%U'
10> tag='Archbk';
11> release channel ch1;
12> }
created global script global_arch
--创建全局0级增量备份脚本
RMAN> create global script global_inc0
2> comment ' A script for backup database using incremental level 0'
3> {
4> execute global script global_del_obso;
5> allocate channel ch1 device type disk;
6> set limit channel ch1 readrate=10240;
7> set limit channel ch1 kbytes=2048000;
8> backup as compressed backupset incremental level 0 database
9> format='/u01/bk/rmbk/inc0_%d_%U'
10> tag='Inc0';
11> release channel ch1;
12> execute global script global_arch;
13> }
created global script global_inc0
--列出已经创建的全局脚本
RMAN> list global script names;
List of Stored Scripts in Recovery Catalog
Global Scripts
Script Name
Description
-----------------------------------------------------------------------
global_arch
A script for archivelog and delete it
global_del_obso
A script for obsolete backup and delete it
global_inc0
A script for backup database using incremental level 0
--启用控制文件的自动备份功能
RMAN> configure controlfile autobackup on;
RMAN> configure controlfile autobackup format for device type disk to '/u01/bk/rmbk/auto_ctl_%d_%f';
--删除以前的备份
RMAN> delete noprompt backupset;
--备份前验证归档日志是否存在
RMAN> crosscheck archivelog all;
--删除无效的归档日志信息
RMAN> delete noprompt expired archivelog all;
--使用0级增量备份数据库
RMAN> run { execute global script global_inc0;}
--查看刚刚完成的备份情况
RMAN> list backupset summary;
RMAN> list backupset ;
RMAN> list backup of controlfile ;
RMAN> list backup of archivelog all;
RMAN> list backup of database;
RMAN> list backup of datafile n ;
二、恢复操作
1.非系统表空间的恢复步骤
a. alter datafile n offline immediate; | alter tablespace tbs_name offline immediate;
b. restore
c. recover
d. alter datafile n online; | alter tablespace tbs_name online
--删除非系统表空间users的数据文件(数据库位于open 状态)
[oracle@oradb orcl]$ pwd
/u01/oracle/oradata/orcl
[oracle@oradb orcl]$ rm users01.dbf
lion@ORCL> select * from tb2;
select * from tb2
*
ERROR at line 1:
ORA-01116: error in opening database file 4
ORA-01110: data file 4: '/u01/oracle/oradata/orcl/users01.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
RMAN> run {
2> allocate channel ch1 device type disk;
3> sql " alter tablespace users offline immediate ";
4> restore tablespace users;
5> recover tablespace users;
6> sql " alter tablespace users online ";
7> }
lion@ORCL> select * from tb2;
ID NAME
---------- ---------------
1 Robinson
也可以使用下面的恢复方式来完成恢复
RMAN> run {
2> allocate channel ch1 device type disk;
3> sql " alter database datafile 4 offline ";
4> restore datafile 4;
5> recover datafile 4;
6> sql " alter database datafile 4 online ";
7> }
如果介质恢复时,需要用的日志尚未归档,需要指定联机重做日志文件所在的位置
注意
表空间几种不同的脱机方式
offline normal :
表空间脱机的缺省方式,将位于SGA中且与该表空间所有的数据文件相关的数据块(blocks)写入到数据文件之后再进行脱机
再次联机时不需要做介质恢复。
offline temporary :
实施检查点进程,即同样将SGA中且与该表空间所有的数据文件相关的数据块(blocks)写入到数据文件之后再进行脱机
不保证所有的数据能够写入到数据文件。再次联机时要做介质恢复。
offline immediate :
不保证表空间的数据可用,也不实施检查点进程而直接脱机,再次联机时要做介质恢复。
offline temporary ,offline immediate 脱机方式不适用于数据文件
lion@ORCL> alter database datfile 4 offline immediate;
alter database datfile 4 offline immediate
*
ERROR at line 1:
ORA-02231: missing or invalid option to ALTER DATABASE
lion@ORCL> alter database datfile 4 offline temporary;
alter database datfile 4 offline temporary
*
ERROR at line 1:
ORA-02231: missing or invalid option to ALTER DATABAS
更多关于表空间与数据文件的管理,请参考:Oracle 表空间与数据文件
对于表空间存在多个数据文件的情况,而单个或较少的数据文件受损,应尽可能使用第二种方式来恢复.即resotre & recover datafile n
2.UNDO表空间的恢复
关于UNDO表空间的管理请参考:Oracle 回滚(ROLLBACK)和撤销(UNDO)
恢复步骤(undo丢失后)
alter database datafile 2 online;
alter database datafile 2 offline;
select * from v$recover_file;
restore datafile 2; --用RMAN 完成
recover datafile 2 ;
alter database datafile 2 online;
--首先做一些操作,将数据填充到undo表空间
lion@ORCL> select * from tb2;
ID NAME
---------- ---------------
1 Jack
lion@ORCL> insert into tb2 select 2,'Jackson' from dual;
lion@ORCL> commit;
lion@ORCL> delete from tb2 where id=1;
lion@ORCL> select * from tb2;
ID NAME
---------- ---------------
2 Jackson
lion@ORCL> ho rm $ORACLE_BASE/oradata/orcl/undotbs01.dbf
注意:undo表空间不能被offline,也不能被readonly
使用alter database datafile 2 online | offline强制执行该步骤,以告知oracle undo表空间被损坏,执行后会话被终止,如下
lion@ORCL> alter database datafile 2 online;
alter database datafile 2 online
*
ERROR at line 1:
ORA-01116: error in opening database file 2
ORA-01110: data file 2: '/u01/oracle/oradata/orcl/undotbs01.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
lion@ORCL> alter database datafile 2 offline;
ERROR:
ORA-03114: not connected to ORACLE
alter database datafile 2 offline
*
ERROR at line 1:
ORA-00603: ORACLE server session terminated by fatal error
--接下面再来进行恢复
RMAN> run {
2> allocate channel ch1 device type disk;
3> restore datafile 2;
4> recover datafile 2;}
starting media recovery --还原被成功执行,介质恢复失败,且会话被终止
media recovery failed
ORA-00603: ORACLE server session terminated by fatal error
--重新登录到数据库服务器并查看v$recover_file视图以及进行介质恢复
sys@ORCL> select * from v$recover_file;
FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
---------- ------- ------- --------------- ---------- ---------
2 OFFLINE OFFLINE UNKNOWN ERROR 493982 23-NOV-10
sys@ORCL> recover datafile 2; --进行介质恢复,恢复后可以看到提示回话被终止
ORA-00603: ORACLE server session terminated by fatal error
sys@ORCL> conn / as sysdba --再次连接
Connected.
sys@ORCL> select name,status from v$datafile where name like '%undo%'; --undo表空间已经处于offline状态
NAME STATUS
--------------------------------------------- -------
/u01/oracle/oradata/orcl/undotbs01.dbf OFFLINE
sys@ORCL> alter database datafile 2 online;
Database altered.
sys@ORCL> select * from lion.tb2;
ID NAME
---------- ---------------------------------------------
2 Jackson
可以看到表中ID为的记录已经丢失,事实上在undo的数据文件丢失前,该事务并没有提交,由此可以推断,该事务进行了隐式提交.
3.系统表空间的恢复(system ,sysaux)
系统表空间只能在Mount状态下来完成恢复,步骤如下
startup mount;
restore datafile 1;
recover datafile 1;
alter database open;
--创建新表tb3,并插入记录。其数据字典信息则位于system表空间,数据内容位于users表空间
lion@ORCL> create table tb3 tablespace users as select * from tb2;
lion@ORCL> insert into tb3 select 1,'Johnson' from dual;
lion@ORCL> commit;
lion@ORCL> select * from tb3 order by id;
ID NAME
---------- ---------------------------------------------
1 Johnson
2 Jackson
--删除表空间system01.dbf, sysaux01.dbf
sys@ORCL> ho rm $ORACLE_BASE/oradata/orcl/system01.dbf
sys@ORCL> ho rm $ORACLE_BASE/oradata/orcl/sysaux01.dbf
sys@ORCL> startup mount force;
RMAN> run {
2> allocate channel ch1 device type disk;
3> restore datafile 1,3;
4> recover datafile 1,3;
5> alter database open;
6> release channel ch1;}
sys@ORCL> select * from lion.tb3 order by id; --成功恢复后表tb3也被恢复
ID NAME
---------- ---------------------------------------------
1 Johnson
2 Jackson
4.控制文件的恢复
步骤
connect to target db and catalog(nocatalog) db
startup nomount
restore controlfile [from autobackup]
alter database mount
recover database
alter database open resetlogs
由于控制文件采取了自动备份策略,因此在每次备份或重大系统结果发生变化时,控制文件将被自动备份
sys@ORCL> ho rm $ORACLE_BASE/oradata/orcl/*.ctl --删除所有的控制文件*/
sys@ORCL> select file#,status from v$datafile; --查看v$datafile视图时,系统已检测到错误发生
select file#,status from v$datafile
*
ERROR at line 1:
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/u01/oracle/oradata/orcl/control01.ctl'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
sys@ORCL> shutdown abort;
--重新连接到RMAN,注意连接target时使用/,否则提示TNS无法解析
[oracle@oradb dbs]$ uniread rman target / catalog rman/rman@asmdb
connected to target database: orcl (not started)
connected to recovery catalog database
RMAN> startup nomount;
RMAN> run {
2> allocate channel ch1 device type disk;
3> restore controlfile;
4> sql " alter database mount ";
5> recover database;
6> sql " alter database open resetlogs ";
7> release channel ch1;}
注:在此处有可能不要介质恢复,如果提示需要介质恢复,直接在RMAN或SQLPlus下执行recover database即可
使用open resetlogs之后,一个新的incarnation将被生成,再此建议立即全备数据库。
更多关于控制文件
Oracle 控制文件的备份与恢复
5.联机重做日志文件的恢复(online redo log )
当数据库置为mount状态,且将要转换为open状态时,数据文件,联机日志文件被打开,因此联机日志的丢失可以在mount状态完成
恢复步骤
a. 启动到mount状态(startup mount force)
b. 还原数据库(restore database)
c. 恢复数据库(recover database)
下面对删除日志并进行恢复
lion@ORCL> select * from tb2;
ID NAME
---------- ---------------
2 Jackson
lion@ORCL> select current_scn from v$database; --查看数据库当前的SCN
CURRENT_SCN
-----------
1020638
lion@ORCL> insert into tb2 select 1,'Johnson' from dual; --为表tb2新增一条记录
lion@ORCL> commit;
lion@ORCL> select current_scn from v$database; --数据库当前的SCN发生了变化为
CURRENT_SCN
-----------
1020685
lion@ORCL> select file#, checkpoint_change# from v$datafile_header; --数据文件头部的checkpoint_change
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 1020368
2 1020368
3 1020368
4 1020368
5 1020368
6 1020368
lion@ORCL> ho rm -f $ORACLE_BASE/oradata/orcl/*.log --删除所有的日志文件 */
lion@ORCL> insert into tb2 select 2,'wilson' from dual; --为表插入新记录
lion@ORCL> commit;
lion@ORCL> select current_scn from v$database; --数据库当前的SCN发生了变化为
CURRENT_SCN
-----------
1020708
lion@ORCL> alter system archive log current; --对日志进行归档时提示错误发生
alter system archive log current
*
ERROR at line 1:
ORA-16038: log 1 sequence# 1 cannot be archived
ORA-00312: online log 1 thread 1: '/u01/oracle/oradata/orcl/redo01.log'
lion@ORCL> conn / as sysdba
sys@ORCL> startup mount force;
[oracle@oradb ~]$ uniread rman target / catalog rman/rman@asmdb --退出RMAN后并重新连接
RMAN> run {
2> allocate channel ch1 device type disk;
3> restore database;
4> recover database;
5> release channel ch1;}
RMAN-06054: media recovery requesting unknown log: thread 1 seq 1 lowscn 1020365
sys@ORCL> recover database until cancel; --回到SQLPlus直接使用until cancel来进行恢复
sys@ORCL> alter database open resetlogs; --执行opensetlogs打开数据库
sys@ORCL> select * from lion.tb2; --在日志未完成自动归档前,删除日志的后数据全部丢失
ID NAME
---------- ---------------
2 Jackson
关于单个日志文件丢失或日志文件组受损,请参考:Oracle 联机重做日志文件(ONLINE LOG FILE)
6.所有数据全部丢失的处理
步骤
a.启动到nomount状态(startup nomount)
b.还原控制文件(restore controlfile from autobackup)
c.还原数据(restore database)
d.将数据切换到mount状态(alter database mount)
e.恢复数据库(recover database using backup controlfile until cancel)
f.使用open resetlogs打开数据库(alter database open resetlogs)
--下面演示数据文件、日志文件、控制文件全部丢失的处理
sys@ORCL> ho rm $ORACLE_BASE/oradata/orcl/* --删除所有的数据文件、日志文件、控制文件*/
sys@ORCL> startup nomount ;
[oracle@oradb ~]$ uniread rman target / catalog rman/rman@asmdb
RMAN> startup nomount;
RMAN> restore controlfile from autobackup;
RMAN> run {
2> allocate channel ch1 device type disk;
3> restore database ;
4> sql " alter database mount ";
5> recover database ;}
RMAN-06004: ORACLE error from recovery catalog database: RMAN-20003: target database incarnation not found in
recovery catalog
idle> recover database using backup controlfile until cancel; --使用SQLPlus来完成恢复操作
idle> alter database open resetlogs;
三、更多参考
有关基于用户管理的备份和备份恢复的概念请参考:
Oracle 基于用户管理恢复的处理(详细描述了介质恢复及其处理)
有关RMAN的恢复与管理请参考:
有关Oracle体系结构请参考:
Oracle 实例和Oracle数据库(Oracle体系结构)
Oracle 联机重做日志文件(ONLINE LOG FILE)
相关推荐
本文将深入探讨RMAN备份与恢复的关键知识点,基于提供的资源,包括"精通ORACLE.10G备份与恢复.pdf"、"rman1.pdf"以及"备份恢复"等材料。 首先,RMAN是Oracle数据库自带的一个命令行工具,它能够与服务器进程进行...
以下是对RMAN备份与还原进行详细阐述的知识点: 1. RMAN概述: RMAN是一个命令行工具,它可以与Oracle数据库服务器直接通信,执行多种备份策略,包括完整备份、增量备份和差异备份。RMAN还可以进行多通道备份,...
使用Catalog的好处在于可以方便地管理和跟踪跨多个数据库的备份信息,使得备份恢复过程更加高效和可靠。 1. 创建和配置Catalog: 在开始使用RMAN catalog之前,你需要创建一个Catalog数据库并配置RMAN连接。这包括...
### ORACLE RMAN备份恢复指南 #### 引言 本文旨在详细介绍Oracle RMAN(Recovery Manager)备份与恢复的相关操作及技术要点。RMAN作为Oracle官方提供的强大工具,专为数据库备份、恢复以及灾难恢复而设计。对于...
Oracle RMAN 基于 Catalog 配置与使用指南 Oracle RMAN 是 Oracle 自带的备份恢复工具软件,是 DBA 的一个重要工具。RMAN 专门用于数据库的备份、恢复、修复操作,同时自动管理备份。 RMAN 基于 Catalog 配置 ...
Oracle RMAN(Recovery Manager...了解并掌握这些知识点,将有助于编写出高效、可靠的Oracle RMAN备份脚本,为企业的数据库安全提供有力保障。在实际操作中,应结合具体的业务场景和硬件资源,合理配置和优化备份策略。
Oracle数据库是世界上最流行的关系型数据库管理系统之一,它提供了强大的数据保护机制,包括RMAN(Recovery Manager)工具,用于实现高效且可靠的备份与恢复策略。RMAN是Oracle数据库的一个内置组件,专为数据库管理...
1. **完整备份恢复**:如果只有完整备份,RMAN将基于此进行恢复。 2. **增量备份恢复**:如果存在完整备份和多个增量备份,RMAN会选择最近的增量备份进行恢复,以减少恢复时间。 3. **选择性恢复**:允许针对特定表...
RMAN (Recovery Manager) 是 Oracle 数据库的一个非常强大的备份与恢复工具,适用于各种操作系统环境,包括 Linux。本文将重点介绍在 Linux 平台上如何使用 RMAN 进行全备和增量备份,并通过 shell 脚本实现自动化。...
#### 三、基于恢复目录的备份操作 **1. 查看相关信息** 在执行任何备份操作前,通常会先检查当前的数据库状态,确保一切正常。 ```sql RMAN> list incarnation; RMAN> crosscheck copy; RMAN> delete expired copy...
RMAN提供了多种恢复场景的解决方案,如从备份恢复数据库、恢复单个数据文件、从时间点恢复等。在灾难性故障下,可以使用`RESTORE DATABASE`和`RECOVER DATABASE`命令来恢复整个数据库,而`RESTORE TABLESPACE`或`...
#### 二、RMAN备份与恢复过程 - **备份集和镜像副本**:根据需求选择合适的备份类型(备份集或镜像副本),并确定备份的范围(如整个数据库或特定表空间)。 - **增量备份**:定义增量备份的级别和频率,确保能够...
**RMAN备份概述** RMAN是Oracle数据库的内置命令行工具,它允许数据库管理员执行全面的备份操作,包括完整数据库备份、增量备份、表空间备份等。RMAN支持多种备份类型,以满足不同的业务需求和恢复场景。 **在线热...
RMAN还支持使用恢复目录(Recovery Catalog),这是一张包含所有备份和归档日志信息的中央数据库,有助于管理和跟踪备份历史。 使用RMAN进行备份时,常见的命令有: 1. **完全备份**:`run { backup database plus...
RMAN备份可以分为多种类型,包括完整备份、增量备份和差异备份。完整备份会复制数据库的所有数据文件,而增量备份仅备份自上次备份以来更改的数据。差异备份与增量备份类似,但基于上一次完整备份而不是上一次增量...
数据库文件是RMAN备份的主要对象。通过RMAN可以备份数据文件、控制文件以及归档重做日志。这些备份可以是基于磁盘的备份,也可以是基于磁带的备份。 ### 还原和恢复数据库文件 在数据库文件损坏或丢失的情况下,...
14. **安全性**:RMAN备份可以加密,保护敏感数据的安全。 在实际操作中,理解并熟练掌握这些概念和操作是确保Oracle 10g数据库安全的关键。合理规划备份策略,结合定期演练恢复流程,能确保在面对各种故障时,能够...
本文将深入探讨RMAN的使用,包括如何进行备份与恢复,以及RMAN的关键命令和配置。 一、RMAN备份 1. 配置数据库到归档模式: 在归档模式下,数据库会保存所有的事务日志,以便于在发生故障时进行恢复。要检查归档...
10. **RMAN与Oracle Recovery Catalog**:Recovery Catalog是一个中央存储库,用于记录所有RMAN备份和恢复活动的历史信息,便于管理和跟踪。 11. **RMAN与Flash Recovery Area**:Flash Recovery Area是Oracle自动...