Chinaunix

标题: oracle联机热备份的原理,及rman增量备份原理 [打印本页]

作者: 天涯明月刀    时间: 2005-08-26 16:40
标题: oracle联机热备份的原理,及rman增量备份原理
要求归档模式
SQL>; archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     14
Next log sequence to archive   16
Current log sequence           16

-------------
先看用户管理的热备份

看看下面这个关键的操作,将备份的内容置于backup模式,用户管理的联机热备份必需的操作,不然copy备份的数据文件不能用来恢复,即使用某些放时恢复了也会丢数据
SQL>; alter tablespace users begin backup;
Tablespace altered.
SQL>; list
  1  select d.file_name filename,d.tablespace_name ts_name,b.status
  2  from dba_data_files d,v$backup b
  3* where d.file_id=b.file#
SQL>; /
FILENAME                   TS_NAME    STATUS
---------------------------------------- ---------- ------------------
/u02/oradata/sales/system01.dbf    SYSTEM     NOT ACTIVE
/u02/oradata/sales/undotbs01.dbf    UNDOTBS1   NOT ACTIVE
/u02/oradata/sales/sysaux01.dbf     SYSAUX     NOT ACTIVE
/u02/oradata/sales/users01.dbf       USERS      ACTIVE
/u02/oradata/sales/example01.dbf    EXAMPLE    NOT ACTIVE
/u02/oradata/sales/perfstat.dbf        PERFSTAT   NOT ACTIVE

USERS表空间现在处于backup模式,究竟这时候怎么了?
在我们alter tablespace users begin backup 的时候是锁定了users表空间对应的数据文件头的change scn。
首先考虑一下数据库怎么用日志文件做恢复:查找不一致的数据文件(根据文件头中旧的scn)
如果锁定了文件头,这个文件头中的scn就不会改变(当然了数据块还是会变化的,还可以做读写)。 然后就会应用这个scn到现在的日志。
那我锁定了scn,不管你后边怎么修改,总之做恢复的时候是应用锁定的时候的scn一直到现在的日志(完全恢复的话)

举个例子:
a,b两个数据文件,把a置于备份模式,b正常
这时候两个change scn都是100,然后开始备份
这期间有数据库的修改,备份完成的时候,Scn变成了200。但是由于a的备份模式,所以a的文件头中记录的scn还是100,b是200。
某个时间,假设scn 500
这时候a丢失
copy回a的备份,然后recover,完全恢复的话数据库就应用100—500这段的日志,自然也就不会丢失数据了。
因为不管在我copy备份的过程中你做什么操作,总之都在锁定的时change scn之后,所以应用的日志就不会有遗漏了。
这时候应该能理解为什么要数据库处于archived模式了


看看数据文件头的change scn
SQL>;select NAME,TABLESPACE_NAME,STATUS,CHECKPOINT_CHANGE# from v$datafile_header;
NAME               TABLESPACE STATUS       CHECKPOINT_CHANGE#
-------------------------------- ---------- -------------- ------------------
/u02/oradata/sales/system01.dbf  SYSTEM     ONLINE                     545926
/u02/oradata/sales/undotbs01.dbf UNDOTBS1   ONLINE                     545926
/u02/oradata/sales/sysaux01.dbf  SYSAUX     ONLINE                     545926
/u02/oradata/sales/users01.dbf   USERS      ONLINE                     545498
/u02/oradata/sales/example01.dbf EXAMPLE    ONLINE                     545926
/u02/oradata/sales/perfstat.dbf  PERFSTAT   ONLINE                     545926

6 rows selected.

显然,在将users表空间置于backup状态的时候,相应的datafile的文件头的scn就不会再发生改变,发生检查点也不会改变。

SQL>; alter system checkpoint;
System altered.

SQL>; select NAME,TABLESPACE_NAME,STATUS,CHECKPOINT_CHANGE# from v$datafile_header;
NAME                TABLESPACE STATUS       CHECKPOINT_CHANGE#
-------------------------------- ---------- -------------- ------------------
/u02/oradata/sales/system01.dbf  SYSTEM     ONLINE                     546196
/u02/oradata/sales/undotbs01.dbf UNDOTBS1   ONLINE                     546196
/u02/oradata/sales/sysaux01.dbf  SYSAUX     ONLINE                     546196
/u02/oradata/sales/users01.dbf   USERS      ONLINE                     545498
/u02/oradata/sales/example01.dbf EXAMPLE    ONLINE                     546196
/u02/oradata/sales/perfstat.dbf  PERFSTAT   ONLINE                     546196

6 rows selected.


下面end backup,看看scn

SQL>; alter tablespace users end backup;
Tablespace altered.

SQL>; alter system checkpoint;
System altered.

SQL>;select NAME,TABLESPACE_NAME,STATUS,CHECKPOINT_CHANGE# from v$datafile_header;

NAME               TABLESPACE STATUS         CHECKPOINT_CHANGE#
-------------------------------- ---------- -------------- ------------------
/u02/oradata/sales/system01.dbf  SYSTEM     ONLINE                     546467
/u02/oradata/sales/undotbs01.dbf UNDOTBS1   ONLINE                     546467
/u02/oradata/sales/sysaux01.dbf  SYSAUX     ONLINE                     546467
/u02/oradata/sales/users01.dbf   USERS      ONLINE                     546467
/u02/oradata/sales/example01.dbf EXAMPLE    ONLINE                     546467
/u02/oradata/sales/perfstat.dbf  PERFSTAT   ONLINE                     546467

6 rows selected.

------------------
再说说rman备份
个人认为理解了用户管理的热备份,rman就已经理解了一大半了
rman 备份是针对块一级的,支持增量备份,稍后说怎么做的增量备份

Rman备份并不需要将数据库或者表空间置于backup状态,但是它会把scn记录在catalog中对应你的backupset
准备在恢复的时候来使用

对users表空间做一个完全备份
$ rman target sys/oracle nocatalog
RMAN>; run {
2>; allocate channel d1 type disk;
3>; backup
4>; format='/u03/oraclebk/%d_%N_%s.bk' tablespace users;
5>; release channel d1;
6>; }


看一下备份集里都有什么,注意看Ckp SCN  546792,
RMAN>; list backup of tablespace users;

List of Backup Sets
===================
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
3       Full    1M         DISK        00:00:02     31-MAR-05
        BP Key: 3   Status: AVAILABLE  Compressed: NO  Tag: TAG20050331T153729
        Piece Name: /u03/oraclebk/SALES_USERS_4.bk
  List of Datafiles in backup set 3
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  4       Full 546792     31-MAR-05 /u02/oradata/sales/users01.dbf

恢复的时候应用546792开始到现在的归档日志和重做日志.

---------------
rman的增量备份的基本原理
其实原理很简单,主要就是弄明白怎么样在做增量备份时确定某个数据块需要备份,哪个不需要
rman在做1级备份的时候怎么来确定0级备份之后都有哪些数据块做了修改呢?看下面一段
Each data block in a datafile contains a system change number (SCN), which is the
SCN at which the most recent change was made to the block. During an incremental
backup, RMAN reads the SCN of each data block in the input file and compares it to
the checkpoint SCN of the parent incremental backup. If the SCN in the input data
block is greater than or equal to the checkpoint SCN of the parent, then RMAN copies
the block.
原来block里边也有一个change scn
也就是说在做level 1级备份的时候,需要扫描所有的数据块并且用块中记录修改的SCN跟level 0备份时的SCN做比较(备份记录中的Ckp SCN),来确定这个块是否需要备份。
所以扫描整个数据文件是不可避免的 !

这是传统的rman做增量备份

在10g中rman做增量备份不再需要扫描整个数据文件了
10g引入的新特性 block change tracking:
Block change tracking进程记录自从上一次备份以来数据块的变化,并把这些信息记录在跟踪文件中。RMAN使用这个文件判断增量备份中需要备份的变更数据。这极大的促进了备份性能,RMAN可以不再扫描整个文件以查找变更数据。
RMAN's change tracking feature for incremental backups improves incremental
backup performance by recording changed blocks in each datafile in a change tracking
file. If change tracking is enabled, RMAN uses the change tracking file to identify
changed blocks for incremental backup, thus avoiding the need to scan every block in
the datafile.
估计是使用的位图文件做的记录!


附:
有兴趣的可以看看dump的数据块

通过下面的查询找一个表对应的数据块
SQL>; select file_id,block_id,blocks
  2  from dba_extents
  3  where segment_name='EMPLOYEES';

   FILE_ID   BLOCK_ID     BLOCKS
---------- ---------- ----------
         5         81          8

dump一个块到udump的trc文件
SQL>; alter system dump datafile 5 block 81;

System altered.


在udump目录找到对应的trc文件,找到dump那段
Start dump data blocks tsn: 6 file#: 5 minblk 81 maxblk 81
buffer tsn: 6 rdba: 0x01400051 (5/81)
scn: 0x0000.00086c4d seq: 0x01 flg: 0x04 tail: 0x4b502001
后面省略了


scn: 0x0000.00086c4d是16进制你可以换算过来552013

你可以尝试做一下修改,不过一定要保证对应的块被修改了,并且被写了,才能反映出来
作者: 天涯明月刀    时间: 2005-08-27 20:07
标题: oracle联机热备份的原理,及rman增量备份原理
俺写的贴子好像真的很少人回啊

连意见都没有
作者: bulletming    时间: 2005-08-28 06:03
标题: oracle联机热备份的原理,及rman增量备份原理
绝对好文,支持!
作者: remen    时间: 2005-08-28 08:31
标题: oracle联机热备份的原理,及rman增量备份原理
楼主伤自尊了,呵呵,支持一个
作者: czpzc    时间: 2005-09-02 16:36
标题: oracle联机热备份的原理,及rman增量备份原理
有点意思恍然大悟
作者: *Daemon*    时间: 2005-09-02 17:51
标题: oracle联机热备份的原理,及rman增量备份原理
支持楼主!!
作者: janews2005    时间: 2005-09-03 11:23
标题: oracle联机热备份的原理,及rman增量备份原理
支持一下!
作者: janews2005    时间: 2005-09-03 11:26
标题: oracle联机热备份的原理,及rman增量备份原理
楼主你好!我是新手!可以教我一下双机热备份的具体的操作步骤吗!有文档吗?可以发到我信箱里!
zbh@mail.wise56.com
谢谢了!
作者: TigerEye    时间: 2005-09-03 13:53
标题: oracle联机热备份的原理,及rman增量备份原理
缺少人气
作者: superscreen    时间: 2005-09-03 16:54
标题: oracle联机热备份的原理,及rman增量备份原理
顶,不错,简单明了
btw: end backup 的时候是根据控制文件中对应的数据文件的结束scn来设置该数据文件头中的开始scn的,对吧?oracle 为什么一定要锁定这个scn呢,如果只是为了一个备份开始点的纪录,可以在内存中纪录阿,是不是为了防止其他的事件之间的冲突?
作者: 天涯明月刀    时间: 2005-09-03 17:09
标题: oracle联机热备份的原理,及rman增量备份原理
原帖由 "superscreen" 发表:
oracle 为什么一定要锁定这个scn呢,如果只是为了一个备份开始点的纪录,可以在内存中纪录阿,是不是为了防止其他的事件之间的冲突?

为了保证备份的文件里也有备份开始点的记录阿
毕竟你是用的copy,它不会自动给你保存开始点的记录的
作者: 流川    时间: 2005-09-04 16:12
标题: oracle联机热备份的原理,及rman增量备份原理
楼主的贴,,,都是好贴

小弟不才,,,,,,才识学浅

帮顶一个
作者: wulang2005    时间: 2005-09-06 21:24
标题: oracle联机热备份的原理,及rman增量备份原理
不好意思,我们用PostgreSQL做集群,还是支持一下.
作者: blue_stone    时间: 2005-09-06 22:06
标题: oracle联机热备份的原理,及rman增量备份原理
原帖由 "superscreen" 发表:
顶,不错,简单明了
btw: end backup 的时候是根据控制文件中对应的数据文件的结束scn来设置该数据文件头中的开始scn的,对吧?oracle 为什么一定要锁定这个scn呢,如果只是为了一个备份开始点的纪录,可以在内存�.........

如果这个时候系统挂了怎么办呢?
内存中的内容都丢失了,恢复的时候怎么恢复?
作者: 麻雷    时间: 2005-09-10 22:04
标题: oracle联机热备份的原理,及rman增量备份原理
很好,支持。
作者: 星海夜航    时间: 2005-09-12 08:59
标题: oracle联机热备份的原理,及rman增量备份原理
在tablespace被置为backup状态后,对这个tablespace中数据得修改呢?是继续改还是先放在临时tablespace中,等end backup后再做修改?
作者: 天涯明月刀    时间: 2005-09-12 09:31
标题: oracle联机热备份的原理,及rman增量备份原理
[quote]原帖由 "星海夜航"]在tablespace被置为backup状态后,对这个tablespace中数据得修改呢?是继续改还是先放在临时tablespace中,等end backup后再做修改?[/quote 发表:

跟平时一样修改
只不过不会修改数据文件头的change scn
作者: 星海夜航    时间: 2005-09-12 12:10
标题: oracle联机热备份的原理,及rman增量备份原理
谢谢楼主
转贴一些scn的文章,偶是新手,对scn不是很了解

关于scn的理解
系统检查点scn(v$database(checkpoint_change#))
数据文件检查点(v$datafile(checkpoint_change#))
数据文件终止scn(v$datafile(last_change#))

数据文件中存放的检查点
启动scn (v$datafile_header(checkpoint_change#)

1、系统检查点scn
当一个检查点动作完成之后,Oracle就把系统检查点的SCN存储到控制文件中。
select checkpoint_change# from v$database
2、数据文件检查点scn
当一个检查点动作完成后,Oracle就把每个数据文件的scn单独存放在控制文件中。
select name,checkpoint_change# from v$datafile
3、启动scn
Oracle把这个检查点的scn存储在每个数据文件的文件头中,这个值称为启动scn,
因为它用于在数据库实例启动时,检查是否需要执行数据库恢复。
select name,checkpoint_change# from v$datafile_header
4、终止scn
每个数据文件的终止scn都存储在控制文件中。
select name,last_change# from v$datafile
在正常的数据库操作过程中,所有正处于联机读写模式下的数据文件的终止scn都为null.
5、在数据库运行期间的scn值
在数据库打开并运行之后,控制文件中的系统检查点、控制文件中的数据文件检查点scn
和每个数据文件头中的启动scn都是相同的。控制文件中的每个数据文件的终止scn都为null.

在安全关闭数据库的过程中,系统会执行一个检查点动作,这时所有数据文件的终止scn
都会设置成数据文件头中的那个启动scn的值。在数据库重新启动的时候,
Oracle将文件头中的那个启动scn与数据库文件检查点scn进行比较,
如果这两个值相互匹配,oracle接下来还要比较数据文件头中的启动scn和控制文件
中数据文件的终止scn。如果这两个值也一致,就意味着所有数据块多已经提交,所有
对数据库的修改都没有在关闭数据库的过程中丢失,因此这次启动数据库的过程
也不需要任何恢复操作,此时数据库就可以打开了。当所有的数据库都打开之后,
存储在控制文件中的数据文件终止scn的值再次被更改为null,
这表示数据文件已经打开并能够正常使用了。
------------------------------------------
澄清几个概念
1)系统当前SCN并不是在任何的数据库操作发生时都会改变,SCN是在事务提交或回滚时改变,
2)在控制文件,数据文件头,数据块,日志文件头,日志文件change vector中都有SCN,但其作用各不相同数据文件头中包含了该数据文件的checkpoint SCN,表示给数据文件最近一次执行检查点操作时的SCN.日志文件头中包含了low scn,next scn,表示给日志文件包含有从low scn到next scn的redo record.控制文件中包含了每个数据文件的checkpoint SCN,stop SCN,每个日志文件的low scn,next scn.控制文件中checkpoint scn同数据文件头中checkpoint scn相同,除非数据文件被手工替换掉.控制文件中的low scn,next scn同日志文件中low scn和next scn相同在数据库正常运行时,控制文件中对应数据文件的stop SCN都是最大值.在正常关闭数据库的情况下,在关闭前会执行一次检查点工作当oracle会将数据缓冲区上的内容全部写回到磁盘中,然后更新控制文件中对应数据文件的stop SCN,使其等于checkpoint SCN

但在异常当机的情况下,由于最后一次检查点未进行或进行中间被中止,因而在控制文件,就存在部分的数据文件stop SCN为最大值,在数据库重新启动后,会检查控制文件中对应每个数据文件的stop SCN,如果stop SCN不等于控制文件中对应每个数据文件的checkpoint SCN,就会使用日志文件redo从checkpoint SCN开头到stop SCN为止的全部数据库操作.在定位到底是使用哪一个redo log文件时,就用到了日志文件头中的low scn,next scn,也就是说要使用的redo log 的low scn ,next scn必须包含数据文件重做所须的change vector.

在确定了哪个数据文件须redo后,oracle会比较change vector中的SCN和数据文件数据块中的SCN,如果change vector的SCN小于数据块的scn,则跳过此change vector,否则redo
数据块中ITL中还有SCN,但它的作用是用于产生一致性读快照
作者: 2bob    时间: 2005-09-15 11:30
标题: oracle联机热备份的原理,及rman增量备份原理
这个帖子写的非常好  ,支持
作者: walls88    时间: 2005-09-22 16:04
标题: oracle联机热备份的原理,及rman增量备份原理
好文,顶,楼主好人一个
作者: vincent.shan    时间: 2005-09-28 22:12
标题: oracle联机热备份的原理,及rman增量备份原理
好贴,我收下了先,慢慢研究^^
作者: cht11cht    时间: 2005-09-29 10:49
标题: oracle联机热备份的原理,及rman增量备份原理
支持
作者: 阳光大侠    时间: 2005-09-29 12:07
标题: oracle联机热备份的原理,及rman增量备份原理
绝对好文章,支持,谢谢
作者: ppiao    时间: 2005-09-29 12:27
标题: oracle联机热备份的原理,及rman增量备份原理
一见就顶
作者: pumpkin111    时间: 2005-10-03 23:31
标题: oracle联机热备份的原理,及rman增量备份原理
真 的不错,谢谢楼主。
作者: blackfox_666    时间: 2005-10-05 09:49
标题: oracle联机热备份的原理,及rman增量备份原理
楼主你好!我是新手!刚从事oracle三个月。可以教我一下双机热备份的具体的操作步骤吗!有文档吗?可以发到我信箱里!
blackfox_666@163.com
作者: chris_wan    时间: 2005-10-05 17:28
标题: oracle联机热备份的原理,及rman增量备份原理
不错.支持一下


如果有文档链接一下更好.呵呵
作者: qqqrun    时间: 2005-10-22 12:43
标题: oracle联机热备份的原理,及rman增量备份原理
楼主你好!我是新手!可以教我一下双机热备份的具体的操作步骤吗!有文档吗?可以发到我信箱里!
szqiqi89@21cn.net
作者: lijichao    时间: 2005-10-23 15:21
标题: oracle联机热备份的原理,及rman增量备份原理
是大家都在看你的帖子都如了迷!!可能都忘了回贴吧!!呵呵!
作者: cht11cht    时间: 2005-11-01 13:37
支持一下
作者: findufo    时间: 2005-11-01 17:22
在线备份得原理知道了
作者: 语    时间: 2005-11-12 23:13
标题: 回复 1楼 天涯明月刀 的帖子
支持,
作者: achocat    时间: 2005-11-14 16:27
阳春白雪
作者: mtx99    时间: 2005-11-15 00:40
建议列入精华贴
作者: haizhihun    时间: 2005-11-15 09:35
现在不顶,更待何时!
狂顶!
作者: macrodba    时间: 2005-11-15 13:55
不错,辛苦了。支持以下
作者: jsc_flying    时间: 2005-12-01 10:00
好帖
作者: hou007    时间: 2005-12-30 10:49
标题: 写的不错
rt
作者: kaka_wang    时间: 2005-12-31 11:29
支持!
作者: vitovito    时间: 2005-12-31 12:10
学习中
作者: linternt    时间: 2006-01-04 08:57
不错,顶一下
作者: zxlsmy    时间: 2006-01-04 11:05
顶...ing
作者: 绝望的海    时间: 2006-01-04 14:16
我原来的概念是把表空间置为backup状态后,所有的对表空间的修改会记录在在线日志里,看来有点问题,多谢楼主
作者: 竹笋    时间: 2006-01-19 16:57
强人啊,正在ORACLE学习的漫长旅途中.
作者: wuyoubin_css    时间: 2006-02-15 11:36
我一直认为备份,恢复是数据库的一个难点,相信不少概念大家都模糊,能否再加强
我 顶顶顶
作者: inhance    时间: 2006-03-02 20:19
学习中
作者: ferrywong    时间: 2006-10-09 12:54
当我想回的时候已经是文章发表了一年之后了~~
作者: peso    时间: 2006-10-09 16:56
标题: 回复 1楼 天涯明月刀 的帖子
好文,支持!
作者: luocb1980    时间: 2006-10-09 23:07
支持
作者: angel518    时间: 2006-10-10 22:32
gooog
作者: gonghaoran    时间: 2006-11-06 14:26
绝对是好文章,找机会好好请教一下
作者: football2006    时间: 2006-11-06 15:01
好文章,看n遍!
作者: mys3721    时间: 2006-11-09 10:27
不错不错
作者: lioulb    时间: 2006-12-30 18:19
我有几个问题,RMAN备份的时候,如果正在备份某一块的时候,有其它用户要读、写这块的时候,备份进程如何处理?另外,RMAN备份的时候,表空间和其表状态有什么变化?
作者: rocket123    时间: 2006-12-31 09:41
谢谢楼主,讲的很透彻,明了。以后有好帖继续上传。继续发扬奉献的精神。
作者: popol    时间: 2006-12-31 12:16
支持楼主!!
作者: redhotkiss    时间: 2007-01-02 21:33
顶一下。支持
作者: blib    时间: 2007-01-04 11:37
http://www.unixgroup.net/viewtopic.php?t=5411
作者: 星海夜航    时间: 2007-01-04 16:08
原帖由 绝望的海 于 2006-1-4 14:16 发表
我原来的概念是把表空间置为backup状态后,所有的对表空间的修改会记录在在线日志里,看来有点问题,多谢楼主

我们这儿的dba也是这么说的,我打算就这个问题专门作个实验
作者: exitgogo    时间: 2007-01-05 14:22
好文,支持共享!
作者: redhotkiss    时间: 2007-01-07 14:50
很不错.支持
作者: shangyilong    时间: 2008-04-14 16:13
标题: 回复 #1 天涯明月刀 的帖子
不错
作者: lgxswfc    时间: 2008-05-10 19:16
LZ,写得不错啊.顶一下
作者: voctor    时间: 2008-07-03 10:13
标题: oracle 双机热备份文档
楼主你好!我是新手!可以教我一下IBM P5 小机双机热备份的具体的操作步骤吗!有文档吗?可以发到我信箱里!  
yangxuanchun@163.com




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2