• Oracle数据库的备份及恢复策略研讨


    滥觞:网海拾贝




     

      弁言

      随着信息系统在种种商务举止中重要性的不休加强');,维护系统数据的可用性已成为今后一个特别很是重要的课题。为了无效地坚持安康的信息系统,必需回收必定的步调防止在由介质、操纵系统、软件和别的事宜招致重要数据库文件垂危毁坏的景遇下影响RDBMS(关连数据库管理系统),进而影响信息系统的正常运转。

      数据库备份、恢复的根柢端方

      1、多工联机重作日志文件

      每个数据库实例都有其自己的联机重作日志组,在操纵数据库时,Oracle起首将数据库的扫数改变生计在重作日志缓冲区中,随后日志记载器进程(LGWR)将数据从系统共用区SGA(System Global Area)的重作日志缓冲区写入联机重作日志文件,在磁盘溃逃或实例掉败时,可以颠末议定与之相关的联机重作日志来维护数据库,将损掉降至最低,但Oracle在默许的方法下只创设一组重作日志文件(每一组只要一个项目文件),为了淘汰损掉这些重要的重作日志文件的危害,是以需求对此中断镜像拷贝。

      在Oracle级多工联机重作日志文件,即增添多个文件到每个组以便镜像数据,如许I/O阻碍或写损掉只毁坏一个拷贝,从而包管了LGWR后台进程至少可以或许向一个成员写入信息,数据库仍然可以陆续运转。同时应包管日志组的成员不该驻存在一致物理扶植上,因为这将减弱多重日志文件的作用。

      2、镜像拷贝节制文件

      节制文件描绘通用的数据库布局,它存储了年夜量数据库状态信息,网罗物理结交涉联机重作日志文件在事先的称呼、位置、状态。节制文件在数据库启动时被Oracle实例读取,坚持翻开并随着操纵而文件内容更新,直到实例封锁为止。在它翻开的进程中可以或许同步需求恢复的信息,网罗反省点信息,是以若毁坏或损掉了节制文件,Oracle将不克不及陆续事变,是以应在系统中坚持节制文件的多个拷贝,且这些拷贝应置于安插于不同磁盘节制器下的不同磁盘扶植中。

      因为Oracle没有供应对节制文件多工的完备支持,是以应在对节制文件运用操纵系统或硬件镜像,即在修正初始化文件的control_files参数后重新启动数据库前,应将节制文件复制到定义的新位置,不然数据库启动时将会掉足。

      3、激活归档进程

      当数据库运转于NOARCHIVELOG体式格局下时,只能在完全封锁数据库后中断数据库的一概备份,而且同时禁用了联机重作日志的存档,如许在Oracle实例掉败时只能将数据库修复到比来的完备数据库备份时的那一点上,不克不及在掉效点处对实例中断恢复。而在ARCHIVELOG体式格局下,数据库不只可以中断一概备份,还可以在数据库翻开的景遇下中断联机备份。颠末议定数据库的备份和联机与存档的重作日志文件,用户可以恢复扫数已提交的事件,并答理将数据库恢复到指定的工夫、SCN或日志系列号处,增年夜了恢复的灵动性,淘汰了阻碍时的数据损掉。是以数据库应运转于ARCHIVELOG体式格局。

      在ARCHIVELOG体式格局下为了防止文件毁坏和介质阻碍,应把日志归档到差异的磁盘上,这可以颠末议定在初始化文件中为归档重作日志指定多个目的完成。

      4、数据库执行较年夜改变时备份

      因为节制文件中生计了数据库的体式格局布局信息,是以在对数据库中断较年夜改变(网罗改变表布局,增添、删除日志文件或数据文件等)时应立即备份节制文件及响应的数据文件。

      5、运用RESETLOGS选项翻开数据库后中断备份

      在以RESETLOGS选项翻开数据库后,应对整个数据库中断脱机或联机的备份,不然将不克不及恢复重置日志后的改变。

      当以RESETLOGS选项翻开数据库时,Oracle将扔掉恢复中没有运用的反复信息,并确保永远不再运用,同时还将初始化节制文件中关于联机日志和重作线程的信息、断根联机日志中的内容。是以,RESETLOGS前的归档日志的序列号将与RESETLOGS后的Oracle节制文件的要求值不切合(备份文件中的反省点比节制文件中的反省点旧),即在恢复中不克不及运用从前的归档日志文件,从而招致RESETLOGS操纵之前的备份在新形体中无用。

      6、防止备份联机重作日志文件

      因为文中提出了多工联机重作日志文件且数据库运转于ARCHIVELOG体式格局,ARCH进程可以或许将联机重作日志归档,是以不用对此中断备份。若用备份的联机重作日志文件重建它,年夜概会惹起日志文件序列号的芜杂,从而破碎摧毁数据库,获得拔苗滋长的结果。

      7、重置联机日志

      在中断了不完全恢复或用备份节制文件中断恢复后,应重置联机日志。

      为了确保数据库的一概性,必需包管在恢复后扫数数据文件都恢复到一致个工夫点,但不完全恢复年夜概招致数据文件中具有一个与别的文件差异的反省点,招致数据库的一概性遭到破碎摧毁。极端,备份的节制文件中生计的SCN和计数器与今后日志文件中的值年夜概不同,从而也破碎摧毁了数据库的一概性,是以应在中断完上述两项操纵后重置联机日志。

      8、数据库的逻辑备份

      以上所述备份都为物理备份,是现实物理数据库文件从一处拷贝到另一处的备份,除此之外还可运用Oracle供应的导出实用法式中断数据库的逻辑备份。Oracle同时还供应了响应的导入实用法式重建逻辑备份中生计的信息。

      逻辑备份只拷贝数据库中的数据,而不记载数据位置的备份进程。它应用SQL语句,从数据库中导出数据到一个寄存在妥当位置的内部文件中,同时并可检测到数据块的毁坏,是以可用其作为物理备份的抵偿。

      备份策略

      思考到如往年夜局部信息系统每周的业务是24×7操纵,是以回收联机备份,不然可每隔肯守工夫中断一次脱机备份。

      运用上述端方,可得出下述典范的备份策略:

      ①镜像拷贝重作日志文件;

      ②镜像拷贝节制文件;

      ③激活归档进程,即以ARCHIVELOG体式格局操纵数据库;

      ④每天中断数据库的局部联机备份(每天中断数据库的完全热备份将无畏地增添数据库的承担且没有需要,同时也增添了数据库恢复时的灵动性);

      ⑤每隔一周或几周中断一次数据库的逻辑备份。

      理想项目运用

      当数据库中的文件达到必定数量后,DBA年夜概记不住该备份的文件的名或位置,是以,若能使备份进程自动化可无效地加重DBA的承担,同时不会漏掉应备份的文件,运用自动批措置文件及剧本文件可完成备份、恢复的自动化。上面简介了在理想项目开辟中运用本文所提出的自动备份、恢复策略,颠末议定理想运用,证明了该策略的正确性和可行性。

      (1)下述剧本完成联机重作日志的多工:

    connect 账户名/暗码
    alter database ktgis add logfile member 日志文件的存储位置 to group 联机日志组号;
    shutdown immediate
    startup pfile=初始化文件的寄存位置 exclusive mount; 装载数据库且不翻开
    alter database archivelog; 激活归档进程
    alter database open;
    exit

      (2)下列VB代码自动创设联机备份的批措置文件及响应的剧本文件。

    Set adoTmp = objConnect.Execute("select tablespace_name from sys.dba_data_files") '获得数据库中的表空间名
    Dim lnum1 As Long
    Dim lnum2 As Long
    lNum = FreeFile
    Open 自动备份批措置文件途径 For Binary As lNum
    lnum1 = FreeFile
    Open "onlinebegin.sql" For Binary As lnum2 onlinebegin.sql为设置表空间进入热备份体式格局的剧本文件文件名
    lnum2 = FreeFile
    Open "onlineend.sql" For Binary As lnum2 onlinebegin.sql为结束表空间热备份体式格局的剧本文件文件名
    strTmp = " connect 账户名/暗码" & Chr(13) & Chr(10)
    Put lnum1, , strTmp
    strTmp = "shutdown immediate" & Chr(13) & Chr(10)
    Put lnum1, , strTmp
    strTmp = "startup pfile=初始化文件的寄存位置exclusive mount; " & Chr(13) & Chr(10)
    Put lnum1, , strTmp
    strTmp = "alter database archivelog; " & Chr(13) & Chr(10)
    Put lnum1, , strTmp
    strTmp = "alter database open; " & Chr(13) & Chr(10)
    Put lnum1, , strTmp
    strTmp = " connect 账户名/暗码" & Chr(13) & Chr(10)
    Put lnum2, , strTmp
    strTmp = Oracle办事管理器途径 & " @" & " onlinebegin.sql " & Chr(13) & Chr(10) 在办事管理器中执行剧本文件onlinebegin.sql
    Put lNum, , strTmp
    Do While Not adoTmp.EOF
    Set adoTmp1 = objConnect.Execute("select file_name from sys.dba_data_files where tablespace_name='" & adoTmp.Fields(0) & "'") 取妥当前表空间所对应的扫数数据文件名,颠末议定轮回即可获得知数表空间所对应数据文件名,若只备份指定的表空间,可指定表空间名从而获得其对应的物理数据文件
    strTmp = "alter tablespace " & adoTmp.Fields(0) & " begin backup;" & Chr(13) & Chr(10) 将表空间置于热备份体式格局
    Put lnum1, , strTmp
    strTmp = Oracle的ocopy.exe对象全途径 " & adoTmp1.Fields(0) & " " & 备份文件寄存途径 & Chr(13) & Chr(10)
    Put lNum, , strTmp
    strTmp = "alter tablespace " & adoTmp.Fields(0) & " end backup;" & Chr(13) & Chr(10) 表空间恢复正常体式格局
    Put lnum2, , strTmp
    adoTmp.MoveNext
    Loop
    strTmp = Oracle办事管理器途径 & " @" & " onlineend.sql" & Chr(13) & Chr(10) 在办事管理器中执行剧本文件onlineend.sql
    Put lNum, , strTmp
    strTmp = "exit" & Chr(13) & Chr(10) 退理由事管理器
    Put lnum1, , strTmp
    strTmp = "alter system switch logfile;" & Chr(13) & Chr(10) 强迫日志转换,使Oracle创设一个归档日志文件
    Put lnum2, , strTmp
    strTmp = "exit" & Chr(13) & Chr(10)
    Put lnum2, , strTmp
    Close
    Set adoTmp = Nothing
    Set adoTmp1 = Nothing

      运转获得的自动批措置文件,即可自动中断数据库的联机备份。

      (3)在从备份中恢双数据文件后,执行下列剧本将数据库的恢复法式。

    connect账户名/暗码
    shutdown abort
    startup mount pfile=初始化文件的寄存位置; 装载数据库
    set autorecovery on; 翻开自动恢复
    recover database;
    alter database open; 翻开数据库

      结束语

      提高数据库劫难后恢复的巩固性正越来越多地遭到人们的存眷,本文凭据个人在理想项目开辟进程中的阅历及恢复时的灵动性对Oracle数据库的备份及恢复中断了商讨,并提出了典范的备份策略,用户可以凭据自己的现原形形及数据库布局在此根蒂根底上灵动运用。




    版权声明: 原创作品,答理转载,转载时请务必以超链接体式格局标明文章 原始理由 、作者信息和本声明。不然将追查功令责任。

  • 相关阅读:
    有关远程设置的问题
    QT使用tableWidget显示双排列表 而且选中用红框圈出来
    一个程序猿的跨洋找工作分享
    linux块设备的IO调度算法和回写机制
    基于servlet实现一个web框架
    Java中的条件编译(转)
    Android NDK 使用第三方静态库(转)
    Android 使用动态库或静态库来编译生成动态库(转)
    Android应用运行过程(转)
    android NDK编译(导入).a文件和编译多个so文件(转)
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1976410.html
Copyright © 2020-2023  润新知