⑴ RMAN备份策略都有哪些
建立增量备份:
如果数据库运行于不归档模式下,只能在数据库干净关闭的情况下 ( 以 normal 、
immediate 、 transactional 方式关闭 ) 才能进行一致性的增量备份,如果数据库运行于归
档模式下,那即可以在数据库关闭状态进行,也可以在数据库打开状态进行备份。再
次说明了打开归档模式的优势,归档日志也就是多占些磁盘空间,可也相当于又给数
据加了层保护。建立增量备份,实质就是一个参数 incremental level=n ,在执行 backup
命令时加上即可,例如,建立一个增量级别 0 的全库备份:
rman> backup incremental level=0 database;
再例如,建立一个增量级别 1 的 users01.dbf 数据文件备份
rman> backup incremental level=1 tablespace system
datafile ‘e:\oracle\oraback\sj_data.dbf’;
注: rman 默认创建的增量备份是 differential 方式,如果要建立 cumulative 方式的增
量备份,在执行 backup 命令时显式指定即可,例如:
rman> backup incremental level=2 cumulative database;
建立镜像复制:
rman 中的镜像复制实质与通过操作系统 命令备份相同,甚至连命令的格式
都相似,只不过直接应用操作系统的 命令复制数据文件时,只是文件拷贝,而rman
的 则能够在复制的同时,验证数据的有效性。个人认为 rman 中的镜像复制应用
有限,而且也体现不出 rman 的优势,所以俺也只是大致了解了概念,没有进行过实际
操作,感兴趣的朋友可以自己做做试验,这里就不多做介绍了)
建立冗余备份
(
rman 提供了一种更谨慎的备份策略: plexed 方式备份,其实质即是在生成备份
集的同时,向指定位置生成指定份数 ( 最大不超过 4 份 ) 的备份集复制,以避免在灾难性
事故时数据库损坏和备份丢失的情况下导致完全崩溃,提高备份可用性。 rman 中提供
了三种方式实现 plexed 方式备份:
1) 在 rman 中执行 backup 命令时显式指定 copies 参数。例如:
rman> backup copies 3 database;
上述命令将会在全库备份的同时,自动生成当前备份集的 2 份拷贝到默认备份目录。
2) 在 run {}命令块中利用 set backup copies 命令为该命令块中所有的 backup命令设
置 plexed 方式,例如:
rman> run{
set backup copies 2;
backup device type disk format
‘e:\oracle\oraback\dyk1\%u’,'e:\oracle\oraback\dyk2\%u’
tablespace users,sales;
}
上述命令将生成两份备份集,分别存储到 e:\oracle\oraback\dyk1 和
e:\oracle\oraback\dyk2 目录。
3) 通过 configure ….. backup copies 命令设置预定义的备份 plexed 方式
configure … backup copies 命令格式,可以为指定设备类型设置默认备份拷贝数
量。这个配置仅适用于数据文件与归档重做日志文件和备份,并且,只有在使用自动
分配的通道时才能够使用 configure …
backup copies 命令设置的配置。例如:
rman> configure default device type to disk;
rman> configure datafile backup copies for device type disk to 2;
rman> configure archivelog backup copies for device type disk to 2;
上述命令将 disk 设置上数据文件与归档文件的拷备数量设置为 2 ,当再执行 backup
database 备份时,即会自动生成 2 份数据文件的备份集。
设置 rman 备份的保存策略
策略,如果数据库非常大,并且备份执行也比较频繁,有必要对这些备份文件的
保存制订合理的策略。在通过 rman 创建的备份片段中,由于备份文件也是由 rman创
建和维护,所以手工删除并不明智,并且 rman 也提供了备份保留策略,合理制订,由
rman 自动删除陈旧备份文件更加安全也更加方便, rman 中提供了两种备份保留策略:
基于时间,和基于冗余数量
为 rman 设置了备份保留策略之后, rman 会自动判断哪些备份集或镜像复制文件
不必再保留。这些备份文件将会被标记为 “ 废弃 (obsolete)” ,可以通过 report obsolete
命令查看当前处于废弃状态的备份文件,或者通过 delete obsolete 命令删除这些废弃的
备份。例如:
rman> report obsolete;
rman> delete obsolete;
在执行删除命令时有两点需要了解:
如果被判断为废弃的备份是一个单独数据文件的镜像复制,那么在执行 delete 命
令时将直接删除这个镜像复制文件;如果被判断为废弃的备份是一个备份集中的一部
分,则必须等到整个备份集中所有其它文件都被废弃之后,才能删除这个备份集。
1) 基于时间的备份保留策略。
说的简单些,就是你希望数据库最早能恢复到几天前。比如将恢复时间段设置为 7,那
么 rman 所保留的备份即是可以保证你将数据库恢复到一周内任何时刻下那些文件。设
置基于时间的备份保留策略可以通过 configure 命令,例如:
rman> configure retention policy to recovery window of n days;
注: n= 大于 0 的正整数执行该命令后, rman 将始终保留那些将数据库恢复到 n 天前的
状态时需要用到的备份,比如,恢复时间段被设置为 7 天,那么各个数据文件的备
份必须满足如下条件:
sysdate-(select checkpoint_time from v$datafile)>=7
任何不满足上述条件的备份都将被 rman 废弃并可通过 delete obsolete 命令删除。
2) 基于冗余数量的备份保留策略
基于冗余数量实质即某个数据文件以各种形式(包括备份集和镜像复制)存在的
备份的数量。如果某个数据文件的冗余备份数量超出了指定数量, rman 将废弃陈旧的
备份。同样,基于数量的备份保留策略也是通过 configure 命令设置,例如:
rman> configure retention policy to recovery window of n days;
同上: n= 大于 0 的正整数
也可以设置不保留任何数据的策略
rman> configure retention policy to none;
备份优化
rman 中的备份优化 (backup optimization) 是指在备份过程中,如果满足特定条件, rman
将自动跳过某些文件而不将它们包含在备份集中以节省时间和空间。通常满足如下几
个条件情况下,才能够启用备份优化的功能:
configure backup optimization 参数置为 on ;
执行的 backup database 或 backup archivelog 命令中带有 all 或 like 参数。
分配的通道仅使用了一种设备类型,也就是没有同时分配使用 sbt (磁带)与 disk
(磁盘)的多个通道。
打开备份优化设置通过如下命令:
rman> configure backup optimization on;
在进行备份优化时, rman 是如何判断要备份的文件是否需要被优化,这个算法就
相当复杂,可能影响优化算法的因素也非常多,假如某库在上午 9 点被执行过一次全
库备份,等下午 3 点再次执行全库备份时,备份的文件没有变动而且也已经被备份过
时,才会跳过这部分文件。所以理论上备份优化仅对于只读表空间或 offline 表空间起
作用。当然对于已经备份过的 archivelog 文件,它也会跳过
3 )基础补充
format 字符串替代变量,使用 format 参数时可使用的各种替换变量,如下:
%c :备份片的拷贝数 ( 从 1 开始编号 ) ;
%d :数据库名称;
%d :位于该月中的天数 (dd) ;
%m :位于该年中的月份 (mm) ;
%f :一个基于 dbid 唯一的名称 , 这个格式的形式为 C-IIIIIIIIII-YYYYMMDD-QQ, 其
中 IIIIIIIIII 为该数据库的 dbid , YYYYMMDD 为日期, QQ 是一个 1-256 的序列;
%n :数据库名称,并且会在右侧用 x 字符进行填充,使其保持长度为 8 ;
%u :是一个由备份集编号和建立时间压缩后组成的 8 字符名称。利用 %u 可以为每个
备份集生成一个唯一的名称;
%p :表示备份集中备份片段的编号,从 1 开始编号;
%u :是 %u_%p_%c 的简写形式,利用它可以为每一个备份片段(即磁盘文件)生成
一个唯一名称,这是最常用的命名方式;
%s :备份集的号;
%t :备份集时间戳;
%t :年月日格式 (yyyymmdd) ; s
注:如果在 backup 命令中没有指定 format 选项,则 rman 默认使用 %u 为备份片段命
名。
configure 配置项介绍
首先,先来查看一下当前配置,通过 show all 命令:
连接到目标数据库 : jssweb (dbid=3391142503)
rman> show all;
正在使用目标数据库控制文件替代恢复目录
rman 配置参数为 :
configure retention policy to recovery window of 3 days;
configure backup optimization off; # default
configure default device type to disk; # default
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to ‘e:\oracle\oraback\%f’;
configure device type disk parallelism 1; # default
configure datafile backup copies for device type disk to 1; # default
configure archivelog backup copies for device type disk to 1; # default
configure maxsetsize to unlimited; # default
configure snapshot controlfile name to ‘e:\oracle\oraback\sj_data.ora’; #
default
rman>
show 命令在 rman 命令篇简单介绍过,同时也知道后跟 #default 表示该条配置仍
然是初始的默认配置,如果想把某条更改过配置选项再置为
初始设置,用如下命令: configure … clear; 例如:
rman> configure retention policy clear;
configure retention policy to recovery window of 3 days;
上述的各项配置,在前面章节中有一些已经有所体现,以下是详细介绍:
1)configure retention policy 配置备份保留策略
两种保留策略设置:
基于时间:
configure retention policy to recovery window of n days;
基于冗余数量:
configure retention policy to rendancy n;
也可以取消备份保留策略:
configure retention policy to none;
2)configure backup optimization 配置备份优化
备份优化 : 包括 off 和 on 两个状态
打开备份优化:
configure backup optimization on;
关闭备份优化:
configure backup optimization off;
3)configure default device type 配置 io 设备类型
rman 支持的 io 设备类型有两种:磁盘 (disk) 和磁带 (sbt) ,默认情况下为磁盘。
使用磁盘设备:
configure default device type to disk;
使用磁带设置:
configure default device type to sbt;
在这里需要注意的一点是:如果 io 设备发生变化,相关配置项也需要修改。例如:
rman> configure device type disk parallelism 2;
4) configure controlfile autobackup 配置控制文件自动备份
是否自动备份,包含两个状态: off 和 on
打开自动备份
configure controlfile autobackup on
禁止自动备份
configure controlfile autobackup off
指定备份的控制格式和路径。例如:
configure controlfile autobackup format for device type disk to
‘e:\oracle\oraback\%f’;
在备份期间,将产生一个控制文件的快照,用于控制文件的读一致性,这个快照可以
通过如下配置: configure snapshot controlfile name to
‘e:\oracle\oraback\sj_data.ora’;
5)configure device type 设置并行备份
rman 支持并行备份与恢复,也可以在配置中指定默认的并行程度。例如:
configure device type disk parallelism 2;
指定在以后备份与恢复中,将采用并行度为 2 ,同时开启 2 个通道进行备份与恢复,
当然也可以在 run 中指定通道来决定备份与恢复的并行程度。并行的数目决定了开启
通道的个数。如果指定了通道配置,将采用指定的通道,如果没有指定通道,将采用
默认通道配置。默认情况下,自动分配通道的并行度为 1 ,如果你通过设置 parallelism
设置了并行通道为 2 ,那么在 run 块中,它会默认使用 2 条并行通道 ; 如果在 run命令
块中指定数个 allocate channel ,那么 rman 在执行备份命令时会以设置的 channel 为准,
而不管 configure 中配置了多个并行通道。需要注意的是,在 backup 命令中有一个
filesperset 参数,该参数是指 rman 建立的每个备份集中所能包含的备份片段 ( 即磁盘文
件 ) 的最大数,该参数默认值为 64 ;如果在执行 backup 命令时没有指定该参数值,那
么 rman 会仅使用第一个通道来执行备份,其它通道将处于空闲状态。关于通道数与
filesperset 值之间也有一个大小关系,即 filesperset 值不要小于设定通道数。
6) 设置备份文件冗余度
configure datafile backup copies
如下:
rman> run{
set backup copies 2;
backup device type disk format
‘e:\oracle\oraback\dyk1\%u’,'e:\oracle\oraback\dyk2\%u’
tablespace users,sales;
}
7)configure maxsetsize 配置备份集的最大尺寸
该配置限制通道上备份集的最大尺寸。单位支持 bytes,k,m,g 。默认值是 unlimited。
8) rman 备份相关的动态性能表
v$archived_log :本视图包含了所有归档重做日志文件的创建情况,备份情况以及其
他信息。
v$backup_corruption :这个视图显示了 rman 在哪些备份集中发现了损坏的数据坏。
在你使用 backup validate 命令对备份集进行检查时如果发现了损坏的数据块, rman
将在这个视图中写入记录。
v$_corruptio :本视图显示了哪些镜像复制备份文件已经被损坏。
v$backup_datafile :本视图通常用来获取每个数据文件中非空白数据块的数量,从
而帮助你创建出大小基本相等的备份集。另外,在视图中也包含了数据文件中损坏的
数据块的信息。
v$backup_redolog :本视图显示了在现有的备份集中饮食有哪些归档重做日志文件。
v$backup_set :本视图显示了已经创建的备份集的信息。
v$backup_piect :本视图显示了已经创建的备份片段的信息。
可以通过如下 sql 语句获得正在进行的镜像复制操作的状态信息:
select sid,
serial#,
context,
sofar,
totalwork,
round(sofar / totalwork * 100, 2) “% complete”
from v$session_longops
where opname like ‘rman:%’
and opname not like ‘rman:aggregate%’
通过如下 sql 获得 rman 用来完成备份操作的服务进程的 sid 与 spid 信息:
select sid,spid,client_info from v$process p,v$session s where p.addr=s.paddr and
client_info like ‘%id=rman%’
rman 通道
上次基础知识讲提到了通道, rman 通道实质是一个到存储设备的数据流。就像城市交
通道路,多建几个环路对于缓解交通是有意义的。在 rman 中可以通过手动方式或自动
方式分配通道。
1) 手工分配通道
在执行 backup 、 restore 、 delete 等需要进行磁盘 i/o 操作的命令时,可以将它们与 allocate
channel 命令放在一个 run 的命令块中,利用 allocate channel 为它们分配通道。例如:
run{
allocate channel ch1 device type disk format ‘e:\oracle\oraback\%u’;
backup datafile ‘e:\oracle\oradata\oradb1\sj_data.ora’;
}
需要注意的是, rman 中执行的每一条 backup 、 delete 等命令都至少要求使用一个通道,
通道数决定了这些操作执行的并行度。
⑵ 在ORACLE里什么是RMAN命令,它有什么作用备份
3. 恢复目录
3.1.恢复目录的概念
恢复目录是由RMAN使用、维护的用来放置备份信息的仓库。RMAN利用恢复目录记载的信息去判断如何执行需要的备份恢复操作。
恢复目录可以存在于ORACLE数据库的计划中。
虽然恢复目录可以用来备份多个数据库,建议为恢复目录数据库创建一个单独的数据库。
恢复目录数据库不能使用恢复目录备份自身。
3.2.建立恢复目录
第一步,在目录数据库中创建恢复目录所用表空间:
SQL> create tablespace rman_ts datafile 'd:\oracle\oradata\rman\rman_ts.dbf' size 20M;
表空间已创建。
第二步,在目录数据库中创建RMAN 用户并授权:
SQL> create user rman identified by rman default tablespace rman_ts temporary tablespace temp quota unlimited on rman_ts;
用户已创建。
SQL> grant recovery_catalog_owner to rman ;
授权成功。
SQL> grant connect, resource to rman ;
授权成功。
第三步,在目录数据库中创建恢复目录
C:\>rman catalog rman/rman
恢复管理器:版本8.1.6.0.0 - Proction
RMAN-06008:连接到恢复目录数据库
RMAN-06428:未安装恢复目录
RMAN>create catalog tablespace rman_ts;
RMAN-06431:恢复目录已创建
注意:虽然使用RMAN不一定必需恢复目录,但是推荐使用。因为恢复目录记载的信息大部分可以通过控制文件来记载,RMAN在恢复数据库时使用这些信息。不使用恢复目录将会对备份恢复操作有限制。
3.3.使用恢复目录的优势
可以存储脚本;
记载较长时间的备份恢复操作;
4. 启动RMAN
RMAN为交互式命令行处理界面,也可以从企业管理器中运行。
为了使用下面的实例,先检查环境符合:
the target database is called "his" and has the same TNS alias
user rman has been granted "recovery_catalog_owner "privileges
目标数据库的连接用户为internal帐号,或者以其他SYSDBA类型帐号连接
the recovery catalog database is called "rman" and has the same TNS alias
the schema containing the recovery catalog is "rman" (same password)
在使用RMAN前,设置NLS_DATE_FORMAT 和NLS_LANG环境变量,很多RMAN LIST命令的输出结果是与日期时间相关的,这点在用户希望执行以时间为基准的恢复工作也很重要。
下例是环境变量的示范:
NLS_LANG= SIMPLIFIED CHINESE_CHINA.ZHS16GBK
NLS_DATE_FORMAT=DD-MON-YYYY HH24:MI:SS
为了保证RMAN使用时能连接恢复目录,恢复目录数据库必须打开,目标数据库至少要STARTED(unmount),否则RMAN会返回一个错误,目标数据库必须置于归档模式下。
4.1.使用不带恢复目录的RMAN
设置目标数据库的 ORACLE_SID ,执行:
% rman nocatalog
RMAN> connect target
RMAN> connect target internal/<password>@his
4.2.使用带恢复目录的RMAN
% rman rman_ts rman/rman@rman
RMAN> connect target
% rman rman_ts rman/rman@rman target internal/<password>@his
4.3.使用RMAN
一旦连接到目标数据库,可以通过交互界面或者事先存储的脚本执行指定RMAN命令, 下面是一个使用RMAN交互界面的实例:
RMAN> resync catalog;
RMAN-03022:正在编译命令:resync
RMAN-03023:正在执行命令:resync
RMAN-08002:正在启动全部恢复目录的 resync
RMAN-08004:完成全部 resync
使用脚本的实例:
RMAN> execute script alloc_1_disk;
创建或者替代存储的脚本:
RMAN> replace script alloc_1_disk {
2> allocate channel d1 type disk;
3> }
5.注册或者注销目标数据库
5.1.注册目标数据库
数据库状态:
恢复目录状态:打开
目标数据库:加载或者打开
目标数据库在第一次使用RMAN之前必须在恢复目录中注册:
第一步,启动恢复管理器,并且连接目标数据库:
C:\>rman target internal/oracle@his catalog rman/rman@rman
恢复管理器:版本8.1.6.0.0 - Proction
RMAN-06005:连接到目标数据库:HIS (DBID=3021445076)
RMAN-06008:连接到恢复目录数据库
第二步,注册数据库:
RMAN> register database;
RMAN-03022:正在编译命令:register
RMAN-03023:正在执行命令:register
RMAN-08006:注册在恢复目录中的数据库
RMAN-03023:正在执行命令:full resync
RMAN-08002:正在启动全部恢复目录的resync
RMAN-08004:完成全部resync
5.2.注销目标数据库
RMAN提供了一个注销工具,叫DBMS_RCVCAT工具包,请注意一旦注销了该目标数据库,就不可以使用恢复目录中含有的备份集来恢复数据库了。
为了能注销数据库,需要获得数据库的标识码(DB_ID)和数据库键值(DB_KEY)。其中连接目标数据库时将会获得DB_ID。
C:\>rman target internal/oracle@his catalog rman/rman@rman
恢复管理器:版本8.1.6.0.0 - Proction
RMAN-06005:连接到目标数据库:HIS (DBID=3021445076)
RMAN-06008:连接到恢复目录数据库
其中DBID=3021445076,利用DBID=3021445076查询数据库键值码:
连接到目标数据库,查询db表:
SQL> select * from db;
DB_KEY DB_ID CURR_DBINC_KEY
---------- ---------- --------------
1 3021445076 2
获得DB_KEY=1,这样,该目标数据库DB_KEY=1,DBID=3021445076,利用两个值使用DBMS_RCVCAT工具包就可以注销数据库:
SQL> execute dbms_rcvcat.unregisterdatabase(1,3021445076);
PL/SQL 过程已成功完成。
至此,注销数据库操作完成。
... ...
⑶ oracle中rman后显示“连接到目标数据库***<未装载>”是怎么回事
说明两个数据库处于nomount状态。
数据库一共有四个状态,分别是shutdown/nomount/mount/open。
每种状态可以执行不同的维护操作。
从shutdown到nomount通过读取参数文件打开实例(分配内存、启动进程),
从nomount到mount状态打开控制文件,
从mount到open打开数据文件和日志文件。
附件添加一篇我写的学习文档。内容是oracle数据库的启动和关闭详解。
希望能帮到你。
⑷ 请解释下Oracle里逻辑备份、物理备份、Rman备份的区别。教科书和百度上的解释不是很懂,谢谢。
Oracle数据库的逻辑备份
ORACLE数据库有两类备份方法。第一类为物理备份,该方法实现数据库的完整恢复,但数据库必须运行在归挡模式下(业务数据库在非归挡模式下运行),且需要极大的外部存储设备,例如磁带库;第二类备份方式为逻辑备份,业务数据库采用此种方式,此方法不需要数据库运行在归挡模式下,不但备份简单,而且可以不需要外部存储设备。数据库逻辑备份方法ORACLE数据库的逻辑备份分为三种模式:表备份、用户备份和完全备份。
表模式
备份某个用户模式下指定的对象(表)。业务数据库通常采用这种备份方式。若备份到本地文件,使用如下命令:
exp icdmain/icd rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=exp_icdmain_csd_yyyymmdd.dmp
log=exp_icdmain_csd_yyyymmdd.log
tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo
若直接备份到磁带设备,使用如下命令:
exp icdmain/icd rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=/dev/rmt0
log=exp_icdmain_csd_yyyymmdd.log
tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo
注:在磁盘空间允许的情况下,应先备份到本地服务器,然后再拷贝到磁带。出于速度方面的考虑,尽量不要直接备份到磁带设备。
用户模式
备份某个用户模式下的所有对象。业务数据库通常采用这种备份方式。 若备份到本地文件,使用如下命令:
exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=exp_icdmain_yyyymmdd.dmp
log=exp_icdmain_yyyymmdd.log
若直接备份到磁带设备,使用如下命令:
exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=/dev/rmt0
log=exp_icdmain_yyyymmdd.log
注:如果磁盘有空间,建议备份到磁盘,然后再拷贝到磁带。如果数据库数据量较小,可采用这种办法备份。
完全模式
备份完整的数据库。业务数据库不采用这种备份方式。备份命令为:
exp icdmain/icd rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0 full=y
file=exp_fulldb_yyyymmdd.dmp(磁带设备则为/dev/rmt0)
log=exp_fulldb_yyyymmdd.log
对于数据库备份,建议采用增量备份,即只备份上一次备份以来更改的数据。增量备份命令:
exp icdmain/icd rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0 full=y inctype=incremental
file=exp_fulldb_yyyymmdd.dmp(磁带设备则为/dev/rmt0)
log=exp_fulldb_yyyymmdd.log
注:关于增量备份必须满足下列条件:
1. 只对完整数据库备份有效,且第一次需要full=y参数,以后需要inctype=incremental参数。
2. 用户必须有EXP_FULL_DATABASE的系统角色。
3. 话务量较小时方可采用数据库备份。
4. 如果磁盘有空间,建议备份到磁盘,然后再备份到磁带。
业务数据库备份方法及周期用EXP进行备份前,先在SYS用户下运行CATEXP.SQL文件(如果以前已运行该文件,则不要执行这个脚本)。
没有特殊说明,不允许在客户端执行备份命令。
备份命令参照表模式下的备份命令。
RMAN备份原理
在之前,看了用户管理的备份恢复管理,通过以SCN为线索贯穿整个过程,来熟悉了备份原理。
RMAN的备份过程和用户备份恢复管理有很大的区别,很多朋友了都没有理清楚原理
下面的是我的理解:
RMAN备份数据块的工作原理:
原理:RMAN基于备份算法规则来编译要备份的数据文件列表。基于通道数和同时备份的数据文件数,RMAN在ORACEL共享内存段中
创建一些内存缓冲区一般是在PGA中不过有时候内存缓冲区会被推入SGA。通道服务进程随后就开始读取数据文件,并在RMAN缓冲取
中填充这些数据块。一个缓冲区被填满时,输入缓冲区的数据就会推出到输出缓冲区。数据文件中的数据块都会都会发生这种
memery—to—monery write 的过程,如果数据块符合备份的标准,并且memery—to—monery write操作没有检查到
数据corruption则该数据块会被保存到输出数据缓冲区中,直到输出缓冲区被填满。一但输出缓冲区被填满,输出缓冲区的内容就会被
推到备份位置(磁盘或者磁带)
RMAN备份数据库过程:
RMAN发出备份全库命令后,RMAN生成到目标数据库的bequeath连接,也就是说会检查ORACLA_SID变量中的实例名,并在该在实
例上产生一个服务器进程,然后作为sysdba登陆,然后会产生一个作为备份的通道,(在PGA或者是在SGA分配存储)。随后RMAN调用
SYS.DBMS_RCVMAN请求数据库结构信息,包括控制文件的信息(当前序列号,创建时间……)由于指定了备份全库,所以RMAN会请求
数据库中数据文件信息,并判断是否存在offline数据文件(包括所在的位置和工作方式)。
RMAN开始备份,为了保持数据一致性RMAN必须构建控制文件快照,接下来RMAN调用DBMS _BACKUP_RESTORE数据包,该调用
可以创建备份片。RMAN拥有文件列表,所以它为数据文件读取操作分配内存缓冲区,分配缓冲区后RMAN初始化备份片。一旦初始化了备份片,
RMAN会判断是否使用了服务器参数文件,如果使用了则会做为备份的一部分,还要备份控制文件,之后才开始备份数据文件,并将其推至内存。
为了实现这一功能,通道进程在磁盘上执行预读取操作,并且将多个数据文件读入内存中,RMAN会判断数据块头信息是否仍然为零,如果数据块
没有被使用过,就不会发生到输出缓冲区的写操作,同时会丢弃这个数据块(这就RMAN为什么会只备份使用过的数据的原因,也是它的优点)
RMAN还会执行检查数据块有没有corruption操作。当检查通过了就被写入到输出缓冲区。一旦输出缓冲区填满了,就被推至备份文件位置。
在备份数据块的时候,RMAN影子进程会得到备份状态信息。并将它传给V$session_longops视图。查询它能得到信息。
当数据文件的所有数据块都被读入输入缓冲区并确定了状态之后RMAN就会通过将这个数据文件写入备份片来结束该文件的备份操作。所有
数据文件写入备份片之后,RMAN生成最后一个对SYS DBMS BACKUP RESTORE 数据包的调用,该调用在控制文件中写入备份信息(包括
备份片名,启动备份操作时的检查点的SCN和完成备份的时间)
至此完成备份!
希望大家继续讨论RMAN备份恢复原理(RMAN功能太强大了)