`
380071587
  • 浏览: 447805 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

快速镜像同步(Fast Mirror Resync)

 
阅读更多

转载自:http://book.51cto.com/art/201108/288296.htm

在Oracle Database 11g以前,ASM磁盘的损坏通常都是一种灾难,即使你的ASM磁盘组是受Normal Redundancy或High Redundancy的保护。因为在Oracle 10g中,损坏的ASM磁盘会马上offline,进而这个损坏的磁盘立刻会被Oracle drop掉。以后即便你修复了这块磁盘,重新加入原先磁盘组的时候,Oracle也会做rebalance操作来完全重构这个磁盘上的数据,这个rebalance操作之前有提到──可能会极为耗时。试想如果这个损坏的磁盘仅仅是因为掉电或者仅仅损坏了几个块就需要完全重构,无疑效率是非常低的。

Oracle意识到这是个问题,于是在11g里引入了一个参数disk_repair_time,其默认值是3.6小时并且用户可以修改。其含义是当损坏的磁盘offline后,Oracle并不会马上将其drop,而是会等待参数disk_repair_time所表示的时间,在这段时间内,Oracle会记录下对损坏的磁盘上的extent所做的修改,一旦这个offline的损坏的磁盘在disk_repair_time所表示的时间内重新online,则Oracle会将之前所记录的对这个磁盘上extent所做的修改重新同步到这块盘上,从而高效地同步了数据(因为这里只同步了offline后修改的extent上的数据),避免了极为耗时的重构全部数据的rebalance过程─这就是Oracle 11g里引入的快速镜像同步(Fast Mirror Reync)。

快速镜像同步的原理可以通过图6-31来说明。

图6-31 Oracle Databaes 11g快速镜像同步示意图
来看一个实际的例子,首先创建一个Normal Redundancy的磁盘组dgtest:
  1. SQL>creatediskgroupDGTESTnormalredundancy
    disk'/dev/raw/raw1','/dev/raw/raw2';
  2. attribute'compatible.rdbms'='11.1','compatible.asm'='11.1';
  3. Diskgroupcreated.
  4. SQL>selectgroup_number,namefrom
    v$asm_diskgroupwhere
    group_number=1;
  5. GROUP_NUMBERNAME
  6. --------------------------------
  7. 1DGTEST

可以从视图v$asm_attribute中查看disk_repair_time的值:

  1. SQL>selectname,valuefromv$asm_attributewheregroup_number=1;
  2. NAMEVALUE
  3. ----------------------------------------
  4. disk_repair_time3.6h
  5. au_size1048576
  6. compatible.asm11.1.0.0.0
  7. compatible.rdbms11.1.0.0.0

现在连上数据库的实例,并创建一个测试表空间testtbs:

  1. SQL>createtablespaceTESTTBSdatafile'+DGTEST'size20m;
  2. Tablespacecreated.

然后关闭上述数据库实例并且dismount上述磁盘组:

  1. SQL>alterdiskgroupdgtestdismount;
  2. Diskgroupaltered.

接着更改/dev/raw/raw1的权限以模拟磁盘损坏:

  1. [root@11g~]#chownroot:root/dev/raw/raw1
  2. [root@11g~]#ls-ltr/dev/raw/raw1
  3. crw-rw----1rootroot162,1Jan1415:23/dev/raw/raw1

可以看到,现在DGTEST当然是mount不起来了:

  1. SQL>alterdiskgroupdgtestmount;
  2. alterdiskgroupdgtestmount
  3. *
  4. ERRORatline1:
  5. ORA-15032:notallalterationsperformed
  6. ORA-15040:diskgroupisincomplete
  7. ORA-15042:ASMdisk"0"ismissing

像上述这种normal redundancy的磁盘组坏了一块盘的情况,在Oracle 11g中我们可以使用force关键字强制mount:

  1. SQL>alterdiskgroupdgtestmountforce;
  2. Diskgroupaltered.

从结果里我们可以看到/dev/raw/raw1所对应的DGTEST_0000所对应的repaire_time是12960秒,也就是缺省的3.6小时:

  1. SQL>selectpath,name,repair_timerfrom
    v$asm_diskwhere
    group_number=1;
  2. PATHNAMEREPAIR_TIMER
  3. -----------------------------------------------
  4. DGTEST_000012960
  5. /dev/raw/raw2DGTEST_00010

现在我们重新连上数据库实例并对表空间testtbs添加一个数据文件,以模拟在有offline磁盘存在情况下的数据修改:

  1. SQL>altertablespacetesttbsadddatafile'+DGTEST'size20m;
  2. Tablespacealtered.

接着把/dev/raw/raw1的权限改回来以模拟损坏的磁盘已经修好了(chown oracle.dba /dev/raw/raw1)。现在可以对/dev/raw/raw1所对应的DGTEST_0000执行online操作了:

  1. SQL>alterdiskgroupdgtestonlinediskDGTEST_0000;
  2. Diskgroupaltered.

等Oracle执行完快速镜像同步后,可以看到现在/dev/raw/raw1已经恢复正常:

  1. SQL>selectpath,header_status,mount_status
    fromv$asm_diskwhere
    group_number=1;
  2. PATHHEADER_STATUMOUNT_S
  3. ----------------------------------
  4. /dev/raw/raw2MEMBERCACHED
  5. /dev/raw/raw1MEMBERCACHED

分享到:
评论

相关推荐

    resync:收益节点样式回调

    重新同步特征节点回调管理,如同步代码承诺支持本机ES6承诺蓝鸟用法安装使用npm安装此软件包: npm install --save resync例子数据库查询 var Resync = require ( 'resync' ) ;var Pg = require ( 'postgres' ) ;var...

    MD_raid5新手见解

    错误之处,还请指出,谢谢。

    sketch-71-symbol-resync:修复了Sketch 71中缺少的库ID问题

    草绘71符号重新同步 此插件可为在Sketch 71.0中打开的Cloud Libraries恢复正确的ID。 如果文档中的符号和共享样式已停止在检查器中显示其源库,而是显示“此文档”,则您将遇到此问题。 用法 下载并安装插件(有关更...

    IDT_Tsi578-Port-Error-Recovery-and-Resync_APN_20091207

    rapidio 端口错误恢复参考手册,错误恢复流程是rapidio标准操作,该手册将此过程讲述直观、易理解,

    srt-resync-tool:一个C ++代码,可根据用户意愿创建指定srt文件的新移位版本

    栏目介绍这是为srt文件制作的重新同步工具。 这些二进制文件在“ Excutables”目录中可用,并且提供了Linux开发的源代码。 我计划保持代码更新,以后再添加更多功能,并达到相同的界面和可能相同的源代码。笔记该...

    Rsync

    Rsync是一款功能强大的网络备份软件。 本资源是其源码。

    SubSync:ReSync *.srt 字幕:SubSync.m 通过定义时移或开始/结束时间来调整 *.srt 字幕。-matlab开发

    SubSync.m 通过定义 timeshift 或 begin-/endtimes 来调整 *... 子同步(文件夹、旧文件、新文件、dt) % 方法 2 % % T1=[00 03 03 500]; %HMS % % Te=[01 58 06 000]; % % SubSync(文件夹,旧文件,新文件,T1,Te)

    DVI encode and decode source code for FPGA

    DVI 1.0 encode and decode source code, write with verilog, with simulation project, synplify project and all soure code. They're have been running on xilinx spartan3A FPGA. ...resync_part_new.vhd

    2012Windows系统脚本技术大全.zip

    2012Windows系统脚本技术大全.zip;[本站资源全部免费];2012年最新整理;2012最新...

    taskit:轻量级的任务管理库

    resync.py提供了一种新颖的方法来充分利用同步和异步世界,它具有一个简单而强大的API,该API允许诸如基本的生产者-消费者模型,将回调的结果传递给另一个函数等功能。 threaded.py集中了从thread / _thread的导入...

    subtitle.js:基于流的库,用于解析和处理字幕文件

    下面的示例解析一个SRT文件,将其重新同步并输出一个VTT文件: import fs from 'fs' import { parse , resync , stringify } from 'subtitle' fs . createReadStream ( './my-subtitles.srt' ) . pipe ( parse ( ...

    mcreplicate:多核复制

    重复 目的 多核复制使蒙特卡洛仿真更加轻松快捷。基于重新考虑软件包中的mcreplicate函数。程序包需要安装 ,这可能是一个障碍,同时也没有为该功能添加功能。 注意:Windows不提供多核支持。 安装 ...

    Google Meet Randomizer-crx插件

    它包括4个命令:随机化(生成随机排序的名称列表)resync(保留列表订单相同,但添加/删除已加入或剩下的客人)复制(将名称列表复制到剪贴板)autopost ** new **(生成或重新同步列表时自动发布到聊天窗口)您可以...

    ortp wince

    rtp_session_resync rtp_session_set_time_jump_limit copymsg rtp_session_enable_jitter_buffer rtp_session_compute_recv_bandwidth rtp_session_compute_send_bandwidth rtp_session_set_rtp_socket...

    refetch:建立在`fetch`标准之上的强类型且不可变的API

    Resync . ( Refetch . ( get( "http://httpbin.org/get" ) |> Future . flatMap( fun | Response . Ok ( _ , response ) => Response . text(response) | _ => "oops!" |> Future . from) |> Future . ...

    nasman:基于Django的ZFS管理界面

    欢迎来到NASMan Django ZFS NAS管理系统。...$ docker exec nasman_web_1 python manage.py sitetree_resync_apps 您的安装现在将在主机的端口8000上运行并正在侦听。 目前,它正在使用Django运

    目前唯一可用的从Vobsub提取的SubResync

    Vobsub里自带的Subresync可以说是最方便好用的一个小工具了。然而后来的版本貌似与IE有冲突。网上有不少版本宣称是可以运行,实际上都是闪退。此版本在Win7 x64 IE11的环境上实测正常运行!

    phpbb论坛MOD插件库

    Resync(User) Post Counts 此hack将会 在管理员面版里面加入一个新的记录发贴数量的功能。一但帖子被删除或销毁,贴数数量并未被真实的反应出来。此hack将搜索所有帖子并重新计算贴子数量 Stats for the ...

    SQL语法大全

    SQL语法大全 SQL语法大全 1. ASP与Access数据库连接: dim conn,mdbfile mdbfile=server.mappath("数据库名称.mdb") set conn=server.createobject("adodb.connection") conn.open "driver={microsoft access ...

Global site tag (gtag.js) - Google Analytics