`
avery_leo
  • 浏览: 387987 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

从SCN看热备份的原理

阅读更多

前言
  
  Oracle有四种备份方法:冷备份、热备份、RMAN备份、逻辑备份。其中冷备份和热备份都是用操作系统命令对Oracle文件直接进行拷贝,不同的是冷备份是把数据库关闭后再备份,而热备份则是在数据库打开的时候就直接进行拷贝。由于热备份是在线的备份,势必对生产系统有一定的影响,这影响有多大?另外热备份的同时,数据文件的写操作是不间断的,oracle如何在保障用户的正常操作下,对数据文件进行备份?备份出来的数据文件内部又是否是一致的?要解决上面的问题,我们需要知道热备份的工作原理,而本文主要是从SCN的角度去分析热备份的原理。
  
  SCN(SYSTEM CHANGE NUMBER)是一个流水号,SCN做为oracle的系统改变号,用于记录Oracle的更改。它存在于控制文件、数据文件、数据块中。根据数据库状态的不同,这几个位置的SCN号也不一样。在正常的运行情况下,控制文件和数据文件的SCN号是一致的,当然排除了数据文件是只读或者offline的状态,这些SCN号只会随检查点而更新,而数据块的SCN号记录着oracle的最新的更改,随用户的对数据的操作而更新。
  
  实验
  
  我们的实验是在热备份的过程中和结束后,把各种SCN号读出来,从而得出热备份的过程中,oracle到底对数据文件做了哪些改变。下面,我们就来开始我们的实验
  
  对users表空间进行热备份:
  
  SQL> alter tablespace users begin backup;
  
  Dump控制文件的信息
  
  alter system set events 'immediate trace name controlf level 10';
  
  这个方法不适用于windows平台,因为windows平台dump出来的trc文件是乱码,而在UNIX上面就可以看到很详细的信息。另外,这个命令的显示结果包含了文件头的内容。它和alter system set events 'immediate trace name file_hdrs level 10'; trace结果一样。
  
  Dump文件包含了数据文件、重做日志、归档日志等信息。下面只是截取一些重要的内容,结果如下:
  
  ***************************************************************************
  DATABASE ENTRY
  ***************************************************************************
  (blkno = 0x1, size = 192, max = 1, in-use = 1, last-recid= 0)
  DF Version: creation=0x9200000 compatible=0x8000000, Date 05/31/2005 14:04:55
  DB Name "ORCL"
  Database flags = 0x00404001
  Controlfile Creation Timestamp 05/31/2005 14:04:55
  Incmplt recovery scn: 0x0000.00000000
  Resetlogs scn: 0x0000.00000001 Resetlogs Timestamp 05/31/2005 14:04:55
  Prior resetlogs scn: 0x0000.00000000 Prior resetlogs Timestamp 01/01/1988 00:00:00
  Redo Version: creation=0x9200000 compatable=0x9200000
  #Data files = 5, #Online files = 5
  Database checkpoint: Thread=1 scn: 0x0000.000ab401 //可以看到控制文件中的数据库SCN号是ab401。这个值随checkpoint的触发而更改。
  
  Threads: #Enabled=1, #Open=1, Head=1, Tail=1
  enabled threads: 01000000 00000000 00000000 00000000 00000000 00000000
  00000000 00000000
  Max log members = 3, Max data members = 1
  Arch list: Head=3, Tail=3, Force scn: 0x0000.000a52bbscn: 0x0000.000a52c0
  Controlfile Checkpointed at scn: 0x0000.000ab401 10/12/2005 16:16:32 这个值通常会比database checkpoint高一些,我不太清楚这个值记录什么的?
  thread:0 rba:(0x0.0.0)
  enabled threads: 00000000 00000000 00000000 00000000 00000000 00000000
  00000000 00000000
  
  ***************************************************************************
  CHECKPOINT PROGRESS RECORDS
  ***************************************************************************
  (blkno = 0x4, size = 104, max = 1, in-use = 1, last-recid= 0)
  THREAD #1 - status:0x2 flags:0x0 dirty:11
  low cache rba:(0x8c.3818.0) on disk rba:(0x8c.3826.0)
  on disk scn: 0x0000.000a5040 10/11/2005 18:54:24   //在磁盘上的SCN号,这个值随DBWN的写入而更改
  resetlogs scn: 0x0000.00000001 05/31/2005 14:04:55
  heartbeat: 571458711 mount id: 1099251256
  MTTR statistics status: 3
  Init time: Avg: 6791202, Times measured: 3
  File open time: Avg: 2051, Times measured: 19
  Log block read time: Avg: 17, Times measured: 8193
  Data block handling time: Avg: 8611, Times measured: 14
  
  ***************************************************************************
  DATA FILE RECORDS
  
  DATA FILE #5:
  (name #9) /oracle/oradata/orcl/users01.dbf
  creation size=3200 block size=8192 status=0xe head=9 tail=9 dup=1
  tablespace 5, index=6 krfil=5 prev_file=0
  unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
  Checkpoint cnt:294 scn: 0x0000.000a5a1b 10/11/2005 20:51:28  //数据文件的SCN号,这个号是开始备份的SCN号,很明显比当前的数据库的SCN号ab401要小。
  Stop scn: 0xffff.ffffffff 06/22/2005 09:40:13
  Creation Checkpointed at scn: 0x0000.0000169a 05/31/2005 14:05:29
  thread:1 rba:(0x2.566.10)
  enabled threads: 01000000 00000000 00000000 00000000 00000000 00000000
  00000000 00000000
  Offline scn: 0x0000.00000000 prev_range: 0
  Online Checkpointed at scn: 0x0000.00000000
  thread:0 rba:(0x0.0.0)
  enabled threads: 00000000 00000000 00000000 00000000 00000000 00000000
  00000000 00000000
  Hot Backup end marker scn: 0x0000.00000000
  aux_file is NOT DEFINED
  
  数据文件:
  
  Checkpoint cnt:294 scn: 0x0000.000a5a1b 10/11/2005 20:51:28  //这个SCN号也一样给lock了。远小于当前数据库的SCN号
  
  数据块的信息
  
  这里,我们建立一个简单的表,以观察在备份的过程中数据块的变化。
  
  SQL> create table test (id number);
  
  Table created.
  
  SQL> exec show_space('TEST','auto');
  Total Blocks............................8
  Total Bytes.............................65536
  Unused Blocks...........................5
  Unused Bytes............................40960
  Last Used Ext FileId....................5
  Last Used Ext BlockId...................16
  Last Used Block.........................3
  
  PL/SQL procedure successfully completed.
  SQL> alter system dump datafile 5 block 20;
  
  System altered.
  
  SQL> insert into test values(3);
  
  1 row created.
  
  SQL> alter system dump datafile 5 block 20;
  
  System altered.
  
  SQL> commit;
  
  Commit complete.
  
  SQL> alter system dump datafile 5 block 20;
  
  System altered.
  
  SQL>
  /oracle/admin/orcl/udump/orcl_ora_11302.trc
  Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
  With the Partitioning, OLAP and Oracle Data Mining options
  JServer Release 9.2.0.4.0 - Production
  ORACLE_HOME = /oracle/product/9.2.0
  System name:    Linux
  Node name:    idsserver
  Release:    2.4.21-15.ELsmp
  Version:    #1 SMP Thu Apr 22 00:18:24 EDT 2004
  Machine:    i686
  Instance name: orcl
  Redo thread mounted by this instance: 1
  Oracle process number: 10
  Unix process pid: 11302, image: oracle@idsserver (TNS V1-V3)
  
  *** 2005-10-11 20:51:50.837
  *** SESSION ID:(9.153)
  Start dump data blocks tsn: 5 file#: 5 minblk 20 maxblk 20
  buffer tsn: 5 rdba: 0x01400014 (5/20)
  scn: 0x0000.000a5a2d seq: 0x01 flg: 0x06 tail: 0x5a2d0601   //可以看出,block 的scn号要比control的大,它记录了当前块的最新SCN号,对此块的任何操作都会导致SCN增加。
  frmt: 0x02 chkval: 0xe010 type: 0x06=trans data
  Block header dump: 0x01400014
  Object id on Block? Y
  seg/obj: 0x189d csc: 0x00.a57ff itc: 2 flg: E typ: 1 - DATA
  brn: 0 bdba: 0x1400011 ver: 0x01
  inc: 0 exflg: 0
  
  Itl      Xid         Uba     Flag Lck    Scn/Fsc
  0x01  0x000a.003.0000003f 0x008000a4.0017.0d --U-  1 fsc 0x0000.000a5818
  0x02  0x0002.01b.00000041 0x008003a4.002c.1f --U-  1 fsc 0x0000.000a58a0
  
  data_block_dump,data head

分享到:
评论

相关推荐

    scn号与恢复研究.pdf

    以Oracle 8i版本为例,假设在一个Windows环境中使用RMAN进行热备份,并在备份过程中执行了大量的事务操作以及`ALTER SYSTEM CHECKPOINT;`命令。这种情况下,了解SCN号及其在恢复过程中的作用尤为重要。通过以上理论...

    关于Oracle数据库热备份脚本深入剖析

    #### 二、热备份原理 热备份允许在数据库正常运行时对数据文件进行备份,关键在于需要将待备份的表空间置于“备份模式”(BACKUP MODE)。 ##### 2.1 备份模式的意义 在执行热备份之前,需要使用`ALTER TABLESPACE ...

    rman备份原理(doc文档)

    9. 当所有数据块都已处理完毕,RMAN将数据文件写入备份片,并在控制文件中记录备份信息,包括备份片名、开始备份的SCN和完成时间。 需要注意的是,如果在RAC环境中使用负载均衡或TAF(Transparent Application ...

    Oracle SCN机制解析

    理解SCN的工作原理对于数据库管理员来说至关重要,因为它直接影响到数据的一致性、恢复能力和高可用性解决方案的效率。在故障恢复时,Oracle依赖SCN来确定哪些数据需要恢复,而在Data Guard和Streams复制中,SCN则...

    oracle SCN 祥解

    3. **归档日志管理**:SCN用于归档日志管理,包括决定何时删除归档日志文件,以及何时可以安全地进行备份。 4. **在线重做日志管理**:SCN还用于在线重做日志文件的管理,包括重做日志切换的时机。 ### 结论 SCN是...

    SCN_release_v1_随机配置网络_SCN_

    通过这个开源项目,开发者不仅可以学习到SCN网络的基本原理和实现方法,还可以借鉴其中的技巧和最佳实践,用于优化自己的模型。同时,社区的参与和贡献也是开源项目生命力的体现,用户可以分享自己的改进版,促进...

    oracle scn概念解析

    ### Oracle SCN 概念解析 #### 一、SCN 的定义与作用 **SCN (System Change Number)** 是 ...通过这些 SQL 查询,可以深入了解 SCN 在实际应用中的工作原理,对于数据库的性能调优、故障排查等方面都有着重要的意义。

    Oracle备份

    热备份的核心在于冻结和解冻SCN(System Change Number),SCN是Oracle用来追踪事务顺序和数据库状态的关键元素。在备份过程中,首先冻结SCN,确保在备份期间数据库的状态不发生变化,然后进行物理拷贝,最后解冻SCN...

    SCN_release_v1_ELM_随机配置网络_SCN_

    随机配置网络(SCN,Stochastic Configuration Network)是一种在机器学习领域中,特别是神经网络模型中的先进算法。它是 Extreme Learning Machine (ELM) 的一种扩展和优化版本,旨在解决ELM在实际应用中的一些限制...

    个人经验总结:Oracle数据库SCN号详解

    ### 个人经验总结:Oracle数据库SCN号详解 #### 一、引言 在Oracle数据库管理与维护过程中,了解SCN(System Change Number)的概念及其作用至关重要。SCN是Oracle数据库内部用于跟踪数据库状态变化的一个重要机制,...

    SCN号的闪回

    "SCN号的闪回"是Oracle数据库中一个重要的恢复机制,全称为System Change Number,它是Oracle数据库中记录事务更改的唯一序列号。SCN是一个不断增加的数字,每次数据库中的数据发生变化时,都会生成一个新的SCN,...

    oracle scn 详解

    - **system SCN**:表示整个数据库的状态,通常可以从`V$DATABASE`视图中的`CHECKPOINT_CHANGE#`字段获取。 - **datafile SCN**:针对每个数据文件的数据状态,可以通过`V$DATAFILE`视图中的`CHECKPOINT_CHANGE#`...

    ORACLE SCN问题解析

    Oracle SCN(System Change Number)是Oracle数据库中的一个关键概念,它是数据库系统中记录所有更改的序列号,确保了数据的一致性和可恢复性。SCN是一个递增的数字,每次数据库发生事务性改变时,SCN都会增加。...

    Oracle系统改变号SCN详解

    Oracle系统的System Change Number (SCN)是其内部用于记录数据库变化的关键组件,它是一个不断递增的数值,确保了数据库操作的顺序性和一致性。SCN的重要性在于,它不受操作系统时间的影响,避免了由于时间篡改导致...

    Oracle DG基于SCN的增量备份与恢复

    接下来,我们在源端使用RMAN进行增量备份,指定从备库的最小SCN开始,将备份文件存储在特定的目录,并标记为'forstandby'。备份完成后,通过SCP命令将备份文件传输到目标端。 在目标端,我们需要取消数据库的...

    迅浏览硬盘 scn2

    "迅浏览硬盘 scn2"是一款专门设计用于快速浏览硬盘上所有文件,包括隐藏文件位置的软件工具。...在使用过程中,用户应注意备份重要数据,避免因误操作导致数据丢失,并及时更新软件以获取最新的功能和安全修复。

    Oracle数据库的备份与恢复

    本文主要讨论热备份的原理及其在Oracle数据库中的应用。 热备份是一种在数据库运行状态下进行的备份方式,它可以确保在备份期间数据库仍可处理事务。然而,热备份过程中必须遵循特定的规则以防止数据不一致和潜在的...

    BLOG_Oracle_lhr_Oracle SCN的一点研究.pdf

    1.增量SCN:记录了自上一次完全备份以来发生的事务。 2.全局SCN:在整个数据库中都是唯一的,并且随着事务的提交而递增。 3.检查点SCN:标记了数据文件头和控制文件中的最后一个检查点信息。 SCN与系统恢复的关系...

Global site tag (gtag.js) - Google Analytics