网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > SQL语法 > 正文

SQLServer2005从入门到精通-灾难恢复技术保护数据库

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

【网学网提醒】:网学会员为您提供SQLServer2005从入门到精通-灾难恢复技术保护数据库参考,解决您在SQLServer2005从入门到精通-灾难恢复技术保护数据库学习中工作中的难题,参考学习。

     使用灾难恢复技术保护数据库
    在学习完这章之后,您将可以:决定自己需要哪种数据库备份策略配置正确的恢复模式执行完整数据库备份:差异备份以及事务日志备份还原用户和系统数据库安排数据库备份计划第2章讨论了数据库的安全问题——数据库安全可以保护数据以避免非授权用户的访问.这一章将关注如何保护数据以避免不可预见的数据丢失.防止数据丢失是数据库系统管理中最重要的内容之一.数据丢失可能由于以下多种原因造成:硬件故障病毒错误地使用UPDATE和DELETE语句软件错误自然灾害,例如火灾或者洪水等为了防止数据丢失,可以为数据库实施恢复策略.依据可能发生的错误和数据保护的级别,用户需要很好地规划,实施和测试恢复策略.在数据仓库中,数据可以从其他系统中恢复,因此不需要备份每一个事务,定期对数据进行完整的备份就足够了.然而,对于一个存储商店交易信息的数据库来说,我们可能希望备份每一笔交易的信息.SQLServer提供了非常丰富的备份功能以实现我们需要的备份方式.在这一章中,我们将讨论在SQLServer中最常用的数据保护策略.
    3.1
    使用完整数据库备份
    一种常用的数据库备份策略是依据事先定义好的时间(例如每晚一次)进行整个数据库的备份.这种备份策略可以将数据库还原到上一次备份发生时的最后状态.这种备份策略可以通过随后介绍的完整数据库备份来实现.完整数据库备份的备份内容包括还原数据库时需要的所有数据和数据库的元数据信息,其中包括全文目录.在还原完整数据库备份时,数据库将恢复所有数据库文件,这些文件包含备份结束时处于一致状态的所有数据.在执行数据库备份时,数据库即使处于联
    第3章
    使用灾难恢复技术保护数据库
    37
    机状态,用户依然可以像平常一样发起事务,更改数据."一致状态"是指在备份执行过程中,所有提交的事务将被接受,所有未完成的事务将被回滚.在SQLServer执行备份时可能存在事务正在修改数据的情形,而这种情形很可能导致数据不一致.因此,针对这种情形,SQLServer有一种特殊的处理过程以保证数据的一致性.这个过程包括向备份设备写数据页和事务日志记录.提示SQLServer数据库加入了全文目录以实现全文索引功能.全文索引可以让我们更快,更精确地搜索数据库中的数据.有关全文索引的更详细信息,请参考SQLServerBooksOnline中的主题"AboutFull-TextIndex
    es".
    SQLServer进行数据备份的速度取决于输入/输出设备(输入/输出设备用于收集和存储数据).为了获得最佳执行性能,SQLServer以顺序方式读取文件.如果用户的输入/输出设备足以同时处理数据备份和系统一般操作所产生的输入/输出请求,那么创建数据备份对数据库系统造成的影响并不大.不管怎样,最好在系统使用的非高峰时间进行完整数据库备份.下一节将讨论实现完整数据库备份策略的系统选项.
    3.1.1简单恢复模式
    由于SQLServer需要事先知道我们计划对数据库进行哪一种数据备份,因此,我们需要依据备份类型的不同对数据库进行不同的配置.此配置通过设置恢复模式选项来完成.数据库所用的默认恢复模式取决于数据库创建时指定的数据库恢复模式.为了实现只包括完整数据库备份的备份策略,恢复模式应该被设置为"简单模式".设置恢复模式为简单模式从"开始"菜单中选择"所有程序"|"MicrosoftSQLServer2005"|"SQLServerManagementStudio".在"连接到服务器"对话框中单击"连接"按钮.在"标准"工具栏中,单击"新建查询"按钮打开一个"新建查询"窗口.可以用ALTERDATABASE语句来设置恢复模式.键入以下语句:
    USEmaster;GOALTERDATABASEAdventureWorksSETRECOVERYSIMPLE;GO
    1.2.3.4.
    然后单击"执行"按钮.更多详情本章主要介绍如何使用T-SQL语句进行备份和还原.在第4章"将数据库迁移到其他系统"将讨论如何使用SQLServerManagementStudio用户界面(而不是T-SQL语句)来执行同样的过程.
    检查恢复模式设置1.可以使用DATABASEPROPERTYEX函数来查看数据库的恢复模式,该函数可以获取当前数据库的选项或特定数据库的属性.执行以下语句可以获取AdventureWorks数据
    38
    第I部分
    如何建立SQLServer数据库来保存应用程序的数据
    库的恢复模式:
    SELECTDATABASEPROPERTYEX('AdventureWorks','Recovery')
    2.3.
    检查执行结果,将显示恢复模式为SIMPLE.关闭SQLServerManagementStudio.
    3.1.2备份设备
    在开始备份之前,需要知道数据备份保存在哪里.备份的存储位置称为备份设备.每一个备份设备可以存储许多不同类型的多个备份.备份设备有两种不同的类型:磁带设备可以用于在磁带上备份数据.磁带设备必须挂接在本机.备份可以跨越多个磁带,并且SQLServer备份可以与Windows备份混合使用.磁盘设备是在本地或远程的磁盘或者磁盘存储媒体上的文件.它们通过备份存储的文件路径来引用.远程位置必须通过UNC路径引用.注意在本书中,我们只讨论备份到磁盘设备的备份过程.将SQLServer数据库备份到磁带设备上的做法已经不再常见.SQLServer备份存储在磁带设备上的时
    候,备份一般通过提供附加功能的第三方产品进行,例如远程磁带存储产品.对于已经备份到磁盘设备上的数据备份来说,也可以将其再备份到磁带设备上以提高保险系数.
    备份设备由设备名标识.设备名可以是一个逻辑设备名或者一个物理设备名.一个磁盘设备的物理设备名是备份文件的路径,例如"\\BACKUPSERVER\Backups\adv\AdventureWorks.bak".这个路径可以在备份语句中直接使用.逻辑设备名是存储在SQLServer中指向备份设备物理名的名称.当一个连接设备名在备份语句中使用的时候,SQLServer将在系统目录中搜寻相应的物理位置并在搜到的位置执行备份.可以使用系统存储过程sp_addumpdevice在系统目录中加入一个逻辑设备.以下示例定义了一个名为Adv_FullDb_Dev的逻辑设备:
    EXECsp_addumpdevice'disk','Adv_FullDb_Dev','T:\BACKUPS\AdvFullDbDev.bak';
    提示
    务必将上例中的文件路径改为本机器的有效路径.如果没有映射到T:\的驱动器,则需要更改上例中的文件路径以和机器上的驱动器映射相匹配.同样,路径中的文件夹也要在您的机器上.
    逻辑设备名和物理设备名可以在备份和还原数据库时交替使用.当然,一般来说,最好是始终只用这两种命名约定中的一种,这样不会使代码变得复杂.应该事先想好自己更倾向于哪种命名约定.数据备份决不能存储到相同的物理存储单元,例如数据库自身的磁盘设备.即使磁盘通过实施一些级别的RAID功能而具有容错能力,控制器还是可能经常出错并损坏磁盘上的数据.与此同时,还应考虑将备份文件备份到磁带上并将磁带保存在远程设备上.提示RAID是"redundantarrayofindependentdisks"(冗余独立磁盘阵列)的缩写.这
    第3章
    使用灾难恢复技术保护数据库
    39
    些阵列是用于提高可靠性和存储容量的具有多个驱动器的磁盘系统.
    3.1.3执行完整数据库备份
    将恢复模式设置为SIMPLE并确定使用哪些设备存储备份之后,就可以开始执行备份了.完整数据库备份是通过BACKUPDATABASE语句来执行的,它非常易于使用.在这个语句的最简单的形式中,只需告诉系统要备份哪个数据库到哪个设备.将数据库AdventureWorks备份到先前定义的逻辑设备Adv_FullDb_Dev,可以使用以下语句:
    USEmaster;GOBACKUPDATABASEAdventureWorksTOAdv_FullDb_Dev;
    如果要执行完整数据库备份到一个物理设备,必须在BACKUPDATABASE语句中指定设备的类型和位置.可以使用以下语句将数据库备份到位置t:\adv.bak:
    USEmaster;GOBACKUPDATABASEAdventureWorksTODISK='t:\adv.bak';
    如前所述,每一个备份设备都可以存储多个备份.可以通过BACKUPDATABASE语句的一个参数来指定是否希望SQLServer覆盖
    或者添加设备上已经存在的备份.用于覆盖和添加的两个选项分别为INIT和NOINIT.如果指定INIT,备份设备会在备份前被删除,备份将覆盖原来存在该设备上的任何备份.如果指定NOINIT,这是默认值,SQLServer将备份添加到备份设备中,保留已有的所有备份.这些选项由BACKUPDATABASE语句末端的WITH语句块设置.如果希望执行与前一个例子一样的备份,但要告诉SQLServer首先删除设备,可以使用以下语句:
    USEmaster;GOBACKUPDATABASEAdventureWorksTODISK='t:\adv.bak'WITHINIT;
    可以看出,执行完整数据库备份相当简单.在下一节中,将提到完整数据库备份是其他所有数据库备份类型都依赖的备份类型.由于其他数据库备份类型都需要一个重建的数据库才能工作,因此它们都依赖于完整数据库备份.这些包括差异备份在内的其他类型的数据库备份都通过存储上一次完整数据库发生后所产生的变化来实现备份.因此,完整数据库备份并不只在执行完整数据库备份的恢复策略中占有重要地位,对后面要讨论的备份策略同样重要.
    3.2
    使用差异备份
    完整数据库备份的重要优势在于它重建了这个数据库的所有数据.但这个优势同时是它的劣势.设想一个每天晚上都要进行完整备份的数据库.如果我们希望恢复这个数据库,就只能使用前一天晚上的备份,这会导致一天工作成果的丢失.减少潜在时间损失的方法
    40
    第I部分
    如何建立SQLServer数据库来保存应用程序的数据
    是更频繁地执行完整数据库备份,但这本身会成为一个问题.因为在执行完整数据库备份的时候,所有的数据和部分的事务日志将被写入备份设备,这使得执行一次备份非常耗时.同时需要许多存储空间保存这些备份,而且由于完整数据库备份会执行大量的I/O操作,因此会降低数据库的执行性能.如果在晚上执行一次完整数据库备份并且只备份在白天变化的数据是不是会更好?这种功能由差异备份提供.差异备份只存储在上一次完整备份之后发生改变的数据.当一些数据在上一次完整备份后被改变多次的时候,差异备份只存储更改数据的最新版本.由于差异备份包括自上次完整备份以后的所有变化,因此为了还原差异备份,首先需要还原上一次的完整数据库备份,然后只需应用最后一次差异备份,如图3.1所示.和完整数据库备份一样,差异备份包括部分的事务日志以恢复一致状态.
    图3.1
    具有差异备份的备份策略
    执行差异备份
    执行差异备份与执行完整备份非常相似.惟一的不同是需要在备份的WITH选项中指明要执行差异备份.为数据库AdventureWorks执行差异备份到一个物理设备并在备份设备上覆盖
    其他已有的备份,可采用下面的BACKUPDATABASE语句:
    USEmaster;GOBACKUPDATABASEAdventureWorksTODISK='t:\adv_diff.bak'WITHINIT,DIFFERENTIAL;
    如果要用逻辑设备进行差异备份,必须像进行完整数据库备份那样先创建它们:
    USEmaster;GOEXECsp_addumpdevice'disk','Adv_Diff_Dev','T:\BACKUPS\AdvDiffDev.bak';GOBACKUPDATABASEAdventureWorksTOAdv_Diff_DevWITHINIT,DIFFERENTIAL;
    重要提示为了还原差异备份,同样需要最新的完整数据库备份.注意,不要覆盖或者删除完整数据库备份,以便在进行差异备份的时候能用到它.
    第3章
    使用灾难恢复技术保护数据库
    41
    3.3
    使用事务日志备份
    结合使用完整数据库备份和差异备份,可以为数据创建快照并恢复它们.但在某些情况下,我们还是希望有数据库中发生的所有事件(例如每一个语句的执行记录)的备份.有了这种功能,可以将数据库恢复到任何状态.事务日志备份提供了这种功能.就像它的名字所示,事务日志备份是事务日志的备份,它包括在数据库中发生的所有事务.事务日志备份的主要优点如下:事务日志备份允许我们将数据库恢复到特定时间点由于事务备份日志是日志实体的备份,因此甚至是数据文件已被损坏,也可以执行事务日志备份.通过这种备份,数据库可以恢复到错误发生前最后那个事务发生后的状态.因此,在一个错误事件中,不会丢失任何一个提交的事务.像差异备份一样,需要在备份策略中包括一个完整数据库备份以通过事务日志备份来恢复数据库.图3.2描绘了使用事务日志备份的备份策略.完整数据库备份可以在数据库使用的非高峰期间进行,事务日志备份则在预先规定好的白天某一时间进行.一个事务日志备份包括自从上次事务日志备份后发生的所有事务.因此,为了使用事务日志备份还原数据库,需要完整数据库备份和完整数据库备份之后所备份的所有事务日志备份.可以看出,保证所有的备份可用是很重要的.如果完整数据库备份或者其中任何一个事务日志备份丢失了,将不可能如愿以偿地还原数据库.
    图3.2
    具有事务日志备份的备份策略
    在事务日志备份之间可以接受的时间周期取决于:在数据库中发生的事务大小.在这种备份策略下,SQLServer必须存储所有的事务直到事务日志备份把它们存储下来.因此,事务日志文件必须足够大以存储所有在两次连续事务日志备份时间间隔内发生的所有事务.如果日志文件的大小增长得太快,可以通过减少两次事务日志备份之间的时间间隔或者增大日志文件的大小来解决.对工作丢失的可接受程度.正如前面所讲的,即使是在数据文件丢失的情况下,也可能将数据库恢复到最
    后一个事务发生后的状态.但是,如果事务日志丢失或者损坏了,只能将数据库恢复到最后一次事务日志备份前的状态.减少在事
    42
    第I部分
    如何建立SQLServer数据库来保存应用程序的数据
    务日志备份之间的时间间隔将减少发生这种情况时所涉及到的工作量.结合使用事务日志备份和差异备份另一种可能的备份策略是结合使用完整数据库备份,差异备份和事务日志备份.在还原所有事务日志备份会花很多时间的时候可以使用这种策略.还原事务日志备份意味着将所有事务再次重新运行,因此这种做法会花费相对多的数据恢复时间,尤其是在应用于大型数据库的时候.由于差异备份只备份变化的数据,因此比重新执行所有事务的方式还原得更快.如图3.3所示,在使用组合还原策略的时候,为了还原数据库,首先需要还原最后一次备份的完整数据库备份,然后还原最后一次的差异备份,最后还原在差异备份后进行的所有事务日志备份.
    图3.3
    组合备份策略
    例如,为了恢复到事务日志备份点T3,必须恢复完整数据备份F1,差异备份D1和事务日志备份T3.
    3.3.1完整恢复模式
    如前所述,用户需要事先告诉SQLServer自己计划实施哪种备份策略.如果只使用完整数据库备份和差异备份,数据库必须置于简单恢复模式.如果也想使用事务日志备份,恢复模式必须置于完整恢复模式(FULL)或者大容量日志恢复模式(BULK_LOGGED).完整恢复模式会告诉SQLServer您希望执行事务日志备份.为此,SQLServer将所有事务保存在一个事务日志文件中直到一次事务日志备份发生.当事务日志备份发生时,SQLServer将在事务日志备份写入备份设备后删除事务日志.在简单恢复模式中,事务日志会在每一个检查点后被删除,这意味着提交的事务(已经写入数据文件)将在事务日志中被删除.因此,在简单恢复模式中,不能创建事务日志备份.重要提示在数据库置于完整恢复模式的时候,执行事务日志备份是非常重要的.如果没有进行事务日志备份,事务日志文件将不断增加直至其最大大小限制.事务日志已满且不能再增加的时候,就不能再执行事务了.执行事务日志备份
    第3章
    使用灾难恢复技术保护数据库
    43
    的代码可以在3.3.2节"执行事务日志备份"找到.还可以使用ALTERDATABASE将数据库的恢复模式设置为FULL.以下代码将AdventureWorks数据库的恢复模式设为FULL:
    USEmaster;GOALTERDATABASEAdventureWorksSETRECOVERYFULL;GO
    大容量日志恢复模式在完整恢复模式下,所有大容量操作(更改大量数据的单一操作)将被完整记录下来以便能还原事务日志备份.在有些数据库中,由于事务日志大小
    的限制和完整记录大容量操作时产生的性能问题,数据库不能在所有时间使用完整恢复模式.这正是大容量日志恢复模式存在的原因.大容量日志恢复模式可以允许事务日志既捕获日志又捕获大容量操作的结果.但它也存在缺点.在大容量日志恢复模式下,将数据库还原到特定的时间点是不可能的.而且,在数据文件损坏且在最后一次事务日志备份之后发生了大容量操作的情况下,不可能再执行事务日志备份.这恰好是事务日志备份的重要优点之一.因此,大容量日志恢复模式必须在执行大容量操作的时候打开,并且要让使用这种模式的时间尽量短.在其他时间,数据库使用完整备份模式.如果只需要使用完整日志操作,就不要使用大容量日志恢复模式.有关大容量日志恢复模式的更多信息,请参阅SQLServerBooksOnline中的相关主题"BackupUndertheBulk-LoggedRecoveryModel".
    3.3.2执行事务日志备份
    为了执行事务日志备份,数据库的恢复模式必须设置为完整恢复模式并且我们必须在数据库更改为完整恢复模式后至少执行一次完整数据库备份.事务日志备份通过BACKUPLOG语句执行.通常,必须在语句中指出数据库名和备份设备名.备份设备的类型与使用完整数据库备份和差异数据库备份时的设备类型相同.执行以下步骤将数据库AdventureWorks的事务日志备份到一个物理设备上.备份事务日志文件1.将恢复模式设置为FULL.2.至少执行一次完整数据库备份.3.使用以下语句将数据库AdventureWorks的事务日志备份到一个物理设备上:
    USEmaster;GOBACKUPLOGAdventureWorksTODISK='t:\adv_log.bak'
    同其他备份语句一样,备份的执行进程在BACKUP语句没有指定任何选项的时候会将备份添加到备份设备上.如果要覆盖设备,需要使用WITHINIT语句.
    USEmaster;GOBACKUPLOGAdventureWorks
    44
    第I部分
    如何建立SQLServer数据库来保存应用程序的数据
    TODISK='t:\adv_log.bak'WITHINIT
    3.4
    恢复数据库
    在前一节中,执行了不同类型的数据库备份.然而对于数据库恢复过程,尚停留在理论阶段.下面将介绍如何在不同的恢复场景下恢复数据库.
    3.4.1获取备份信息
    在开始还原数据库之前,自己要清楚要还原哪一个备份.SQLServer会存储备份历史记录,在数据库中进行的每一次备份都将记录在msdb数据库中.可以通过查询msdb数据库,找出所有的备份和还原记录.创建简单备份信息从"开始"菜单中选择"所有程序"|"MicrosoftSQLServer2005"|"SQLServerManagementStudio".在"连接到服务器"对话框中,单击"连接"按钮.在标准工具条中,单击"新建查询"按钮打开一个"新建查询"窗口.键入并执行以下BACKUP语句对Adventure
    Works数据库执行一次完整数据库备份和一次差异备份:
    ALTERDATABASEAdventureWorksSETRECOVERYSIMPLE;--PerformFullDatabaseBackupBACKUPDATABASEAdventureWorksTODISK='T:\BACKUPS\ADVFULL.BAK'WITHINIT;--PerformadifferentialBackupBACKUPDATABASEAdventureWorksTODISK='T:\BACKUPS\ADVDIFF.BAK'WITHINIT,Differential;
    1.2.3.4.
    1.
    获取简单备份信息要想知道数据库AdventureWorks发生了哪些备份,可以执行以下SELECT语句:
    USEmsdbGOSELECTbackup_start_date,type,physical_device_name,backup_set_idFROMbackupsetbsinnerjoinbackupmediafamilybmONbs.media_set_id=bm.media_set_idWHEREdatabase_name='AdventureWorks'ORDERBYbackup_start_datedesc
    下图所示的结果面板指出最近发生的备份的类型为"I",一个差异备份.前面曾提到,要还原一个差异备份,必须首先还原一个最近发生的完整数据库备份.这个备份可以在第二行找到,其类型为"D",指出这是一个完整数据库备份.2.每一个备份都有一个惟一标识称为"备份集标头"(backupsetid),可以在结果窗口中看到该标识,如图3.4所示.可从以上信息中找到备份所涉及的数据和日志文件以及它们所处的原始位置.以下查询将获得备份集标头为62的备份信息.在运行这个查询的时候,请确保将备份集标头
    第3章
    使用灾难恢复技术保护数据库
    45
    值"62"改为前一步所找到的完整数据库备份的备份集标头值:
    SELECTfilegroup_name,logical_name,physical_nameFROMmsdb..backupfileWHEREbackup_set_id=62--changetoyourbackup_set_id
    图3.4
    SELECT语句的执行结果
    3.在有些情况下,msdb数据库没有我们需要的备份历史信息.在msdb数据库被破坏或在其他系统上进行备份的时候会发生这种情况.此时,只能直接通过备份设备来获取备份信息.可以键入并执行以下语句来获取T:\BACKUPS\ADVFULL.BAK中存储的备份信息:
    RESTOREHEADERONLYFROMDISK='T:\BACKUPS\ADVFULL.BAK'
    4.可以执行RESTOREFILELISTONLY语句来获取受备份设备上所存备份所影响的数据文件和日志文件的有关信息:
    RESTOREFILELISTONLYFROMDISK='T:\BACKUPS\ADVFULL.BAK'
    3.4.2使用SQLServerManagementStudio还原数据库
    在许多情况下,还原数据库的最简单方式是使用SQLServerManagementStudio.SQLServerManagementStudio使用msdb数据库中存储的备份历史来展示还原数据库的这种最佳方法.在SQLServerManagementStudio中执行数据库还原1.在SQLServerManagementStudio的查询窗口中执行以下语句来模拟一个场景.在这个场景中,AdventureWorks数据库使用完整数据库备份和差异备份构成的简单恢复策略.要根据自己的实际情况更改备份设备的路径.
    ALTERDATABASEAdventureWorksSETRECOVERYSIMPLE;--PerformFull
    DatabaseBackupBACKUPDATABASEAdventureWorksTODISK='T:\BACKUPS\ADVFULL.BAK'WITHINIT;--SimulateatransactionUPDATEAdventureWorks.Person.ContactSETEmailAddress='kim@testbackup'WHEREContactID=3;--PerformadifferentialBackupBACKUPDATABASEAdventureWorksTODISK='T:\BACKUPS\ADVDIFF.BAK'WITHINIT,Differential;
    2.要还原数据库,请在"视图"菜单中选择"对象资源管理器"或按F8键打开"对象资
    46
    第I部分
    如何建立SQLServer数据库来保存应用程序的数据
    源管理器".3.在看到的树状视图中,展开SQLServer实例,打开数据库文件夹并用右键单击AdventureWorks数据库.在弹出菜单中选择"任务"|"还原"|"数据库".4.这时"还原数据库"窗口将打开,可以看出最近的备份集已经被选中以便进行还原,如图3.5所示.只需单击"确定"按钮完成还原.
    图3.5
    "还原数据库"窗口
    注意
    确保AdventureWorks数据库没有打开的连接.因为在进行还原的时候不允许有连接到数据库的连接.
    5.在还原成功之后,一个消息框会提示您对数据库"AdventureWorks"的还原已成功完成.6.打开一个"新建查询"窗口,键入并执行以下代码来检查上述备份和还原均被成功记录:
    USEAdventureWorksGOSELECTEmailAddressFROMPerson.ContactWHEREContactID=3;
    结果应该显示kim@testbackup.
    第3章
    使用灾难恢复技术保护数据库
    47
    注意
    可以看出,在进行数据库还原之前,不必首先删除数据库.数据库还原过程自动在第一步删除数据库.
    3.4.3使用T-SQL从简单备份策略还原数据库
    假设已经像前面那样对数据库进行了相同的备份.为了使用T-SQL来还原数据库,可以使用RESTOREDATABASE语句.这个语句与BACKUP语句的语法相似.需要我们提供数据库名和备份设备的位置.使用T-SQL还原完整数据库备份1.在SQLServerManagementStudio中,打开一个"新建查询"窗口.2.键入并执行以下RESTOREDATABASE语句来还原数据库AdventureWorks.要保证执行这个语句的时候没有其他连接到数据库的连接.
    USEMASTERGORESTOREDATABASEAdventureWorksFROMDISK='T:\BACKUPS\ADVFULL.BAK'
    3.执行以下查询.由于更新发生在完整数据库备份之后,因此查询结果将显示kim2@adventure-works.
    SELECTEmailAddressFROMAdventureWorks.Person.ContactWHEREContactID=3
    在这个过程中,只还原了完整数据库备份.在执行还原之后,还原过程自动将数据库联机.如果希望继续还原差异备份,则需要告诉SQLServer在完整数据库还原之后不要将数据库联机,因为这样将会使数据库不能还原差异备份.可以使用NORECOVERY选项来阻止自动联机.NORECOVERY选项必须与除了最后一个RESTORE语句外的每一个RESTORE
    语句一起使用.在以下的示例中,将使用NORECOVERY选项来还原先前执行的完整数据库备份和差异备份.使用T-SQL还原差异备份1.在SQLServerManagementStudio中,打开一个"新建查询"窗口.2.键入并执行以下带NORECOVERY选项的RESTOREDATABASE语句来还原数据库AdventureWorks.
    USEMASTERGORESTOREDATABASEAdventureWorksFROMDISK='T:\BACKUPS\ADVFULL.BAK'WITHNORECOVERY
    3.键入并执行以下RESTOREDATABASE语句来还原差异备份.
    USEMASTERGORESTOREDATABASEAdventureWorksFROMDISK='T:\BACKUPS\ADVDIFF.BAK'
    4.执行以下查询.结果应该是kim@testbackup.由于这个更新发生在完整数据库备份和差异备份之间,因此可以确认差异备份已经被成功还原.
    48
    第I部分
    如何建立SQLServer数据库来保存应用程序的数据
    SELECTEmailAddressFROMAdventureWorks.Person.ContactWHEREContactID=3
    3.4.4使用T-SQL从完整备份策略还原数据库
    在完整备份策略中,结合使用了完整数据库备份和事务日志备份.现在要介绍如何使用T-SQL语句来还原这些备份.还原完整数据库备份和事务日志备份1.执行以下代码创建一个AdventureWorks数据库的备份.这些代码还会更新一些数据,可以根据这些数据来判断还原是否生效.
    ALTERDATABASEAdventureWorksSETRECOVERYFULL;--PerformFullDatabaseBackupBACKUPDATABASEAdventureWorksTODISK='T:\BACKUPS\ADVFULL.BAK'WITHINIT;--SimulateatransactionUPDATEAdventureWorks.Person.ContactSETEmailAddress='AfterFull@test'WHEREContactID=3;--PerformaTransactionLogBackupBACKUPLOGAdventureWorksTODISK='T:\BACKUPS\ADVLOG1.BAK'WITHINIT;--SimulateatransactionUPDATEAdventureWorks.Person.ContactSETEmailAddress='AfterLog@test'WHEREContactID=3;
    2.现在假设AdventureWorks数据库的数据文件已经遭到破坏.如前所述,我们仍然可以通过执行事务日志备份来获取日志的结尾信息.其中包括最近一次事务日志备份之后完成的所有事务.这必须通过特定选项NO_TRUNCATE来完成.
    --PerformaTransactionLogBackupofthetailofthelogBACKUPLOGAdventureWorksTODISK='T:\BACKUPS\ADVLOG2.BAK'WITHINIT,NO_TRUNCATE;
    注意
    事务日志遭到破坏的时候,再也不可能执行此种备份.在这种情况下,只能还原已执行完的备份.
    3.在事务备份完成后,可以用RESTORE语句还原第一个完整数据库备份和随后的两个事务日志备份.像还原差异备份那样,要在除了最后一个RESTORE语句的其他RESTORE语句中使用NORECOVERY选项.还原事务日志备份通过RESTORELOG语句来进行.
    --SwitchtothemasterdbUSEmasterGO--RestorethefulldatabasebackupRESTOREDATABASEAdventureWorksFROMDISK='T:\BACKUPS\ADVFULL.BAK'WITHREPLACE,NORECOVERY;--RestorethefirstTransaction
    LogBackup
    第3章
    使用灾难恢复技术保护数据库
    49
    RESTORELOGAdventureWorksFROMDISK='T:\BACKUPS\ADVLOG1.BAK'WITHNORECOVERY;--RestorethesecondTransactionLogBackupRESTORELOGAdventureWorksFROMDISK='T:\BACKUPS\ADVLOG2.BAK';
    RESTOREDATABASE语句中的REPLACE选项指示SQLServer跳过安全检查并无条件地替换数据库.4.执行以下查询.结果应该为AfterLog@test,显示出所有事务都已成功还原.
    SELECTEmailAddressFROMAdventureWorks.Person.ContactWHEREContactID=3
    3.4.5还原系统数据库
    系统数据库(包括数据库master,msdb和model)是SQLServer安装的核心.没有系统数据库,SQLServer便无法正常工作.如果master数据库被破坏了,SQLServer根本无法工作.因此,将这些系统数据库进行备份以防系统错误是极其重要的.系统数据库一般通过使用完整数据库备份的简单模式定期完成.由于这些数据库表中的数据一般都保持不变,因此这是一种高效的备份策略.然而,在对系统进行重大更新之后,包括创建数据库,登录名或者改变配置信息之后,需要进行额外的系统数据库备份.SQLServer数据库备份和还原的过程都在联机状态下执行.因此,系统数据库在被还原之前,SQLServer必须处在运行状态.有两种方式可以让SQLServer启动并运行.如果数据库被破坏,但二进制文件(编译过的电脑程序或者执行文件)并没有受到影响,那么可以用SQLServer安装程序来重建系统数据库.对此过程的说明,可以参阅SQLServerBooksOnline的主题"Howto:InstallSQLServer2005fromCommandPrompt".如果整个系统都遭到破坏,则要使用安装程序进行全新安装.同样,在系统故障之前安装的所有服务包和补丁都需要重新安装到新装的系统上.现在,SQLServer应该可以启动并运行了,但它依然缺乏有关用户数据库,登录,作业,警告和配置的信息.为了校正这些错误,必须还原系统数据库.还原系统数据库的过程一般从还原master数据库开始.可以使用以下具体介绍的特殊过程来还原master数据库.重要提示只能在测试环境中练习这个过程.如果发生了错误,数据会丢失.这个示例假设SQLServer被安装为默认的实例.还原master数据库1.备份master,msdb和model数据库.
    --MASTERDATABASEBACKUPDATABASEMASTERTODISK='T:\BACKUPS\master.bak'WITHINIT--MSDBDATABASEBACKUPDATABASEMSDBTODISK='T:\BACKUPS\msdb.bak'WITHINIT--MODELDATABASEBACKUPDATABASEMODEL
    50
    第I部分
    如何建立SQLServer数据库来保存应用程序的数据
    TODISK='T:\BACKUPS\model.bak'WITHINIT
    2.关闭SQLServerManagementStudio和连接到SQLServer的所有程序.3.从"开始"菜单中选择"所有程序"|"MicrosoftSQLServer2005"|"配置工具"|"SQLServerConf
    igurationManager".4.在SQLServerConfigurationManager中,在左边的窗格中单击"SQLServer2005服务".此时,右侧的窗格显示当前的所有服务.分别用右键单击正在运行的所有服务并在弹出菜单中单击"停止".注意自己停止了哪些服务,随后需要重新启动它们.一旦所有服务都停止,屏幕显示将如图3.6所示.
    图3.6
    所有服务都已停止
    5.从"开始"菜单中选择"运行",在弹出的输入框中键入"cmd"并单击"确定"启动命令行窗口.6.使用以下语句将目录更改为SQLServer安装的"binn"文件夹.这个语句指定了SQLServer安装使用的默认路径.在一行中键入这个语句(这里显示为两行以适合版面大小)然后按回车键.
    C:\DocumentsandSettings\Administrator>cd"\ProgramFiles\MicrosoftSQLServer\MSSQL.1\MSSQL\binn"
    7.像以下语句演示的那样,使用"-m"选项在单用户管理模式下启动SQLServer.键入以下语句并按回车.
    C:\ProgramFiles\MicrosoftSQLServer\MSSQL.1\MSSQL\Binn>sqlservr–m
    8.保留这个命令行窗口,使用前面介绍的5个步骤启动另一个命令行窗口.9.在新的命令行窗口中键入sqlcmd-E以连接SQLServer.
    第3章
    使用灾难恢复技术保护数据库
    51
    10.在sqlcmd键入以下T-SQL来还原master数据库.在键入语句的时候,按回车键换行.一旦在行中键入GO并按下回车键,就会执行整个语句.
    RESTOREDATABASEmasterFROMDISK='T:\BACKUPS\master.bak';GO
    结果如图3.7所示.
    图3.7
    执行结果
    11.切换回第一个命令行窗口.SQLServer执行自动退出.现在可以关闭前面两个命令行窗口.12.切换回SQLServerConfigurationManager,然后只启动SQLServer服务(MSSQLSERVER).还原msdb及model数据库1.打开"SQLServerManagementStudio".可以像还原其他数据库那样还原msdb数据库.因为在还原期间不允许有其他程序连接到数据库,所以不能在前面的步骤中启动其他服务.2.打开一个"新建查询"窗口并执行以下RESTOREDATABASE语句来还原msdb和model数据库.
    --MSDBDATABASERESTOREDATABASEMSDBFROMDISK='T:\BACKUPS\msdb.bak'--MODELDATABASERESTOREDATABASEMODELFROMDISK='T:\BACKUPS\model.bak'WITHREPLACE
    3.
    切换到SQLServerConfigurationManager并启动前一节第4步停止的服务.这些服务可能包括SQLServerIntergrationServices,SQLServerFullTextSearch(MSSQLSERVER)和SQLServer(SQLEXPRESS).
    52
    第I部分
    如何建立SQLServer数据库来保存应用程序的数据
    3.5
    使用SQL维护计划向导安排备份
    到现在为止,我们已经通过SQLServerManagementStudio中的查询窗口执行了数据库备份.当然,在实际用于生产的系统中,备份需要安排在没有任何用户输入的情况下自动运行.这个工作
    可以通过任务计划软件来完成.SQLServer内建一个任务计划软件作为SQLServerAgentService的一部分.通过使用SQLServerAgent中的作业,我们可以定义在特定时间运行的T-SQL批处理.这个特性提供了自动执行恢复策略的功能.下面来看一下另一个使用向导来安排备份任务计划的简单方法.SQL维护计划向导是一个用于执行常规任务(例如备份,重新组织索引以进行碎片整理,检查数据库完整性)的的工具.由于这个工具可以在规定的时间安排执行SQLServerAgent启动的作业,因此它依赖于SQLServerAgentServices.因而,SQLServerAgentServices必须持续不断地运行.可以用SQLServerConfigurationManager来配置SQLServerAgentService.可以通过以下步骤将它配置为自动启动或者在需要的时候启动.自动启动SQLServerAgent1.通过前一节所描述的步骤打开SQLServerConfigurationManager.2.在左侧的面板中,"SQLServer2005服务"在右侧的面板中右键单击选择."SQLServerAgent"图标并且在弹出菜单中选择"属性".3.在"服务"选项卡中,找到"启动模式"项并将其设置为自动.单击"应用"按钮,然后单击"确定"按钮.4.现在可以通过右键单击"SQLServerAgent"图标并在弹出菜单中选择"启动"来启动SQLServerAgent.使用SQL维护计划向导在SQLServerManagementStudio中,通过在"视图"菜单中选择"对象资源管理器"或通过按F8键打开"对象资源管理器".在显示的树形视图中,展开SQLServer实例,打开"管理"文件夹,然后右键单击"维护计划"文件夹并在弹出菜单中选择"维护计划向导".随后会出现一个起始页面,在其中单击"下一步"按钮.在"名称"中键入维护计划的名字.在本例中使用"日常AdventureWorks数据库备份"作为维护计划名称,然后单击"下一步"按钮.选择"备份数据库(完整)",然后单击"下一步"按钮两次.在"数据库"下拉列表中选择AdventureWorks数据库,然后单击"确定"按钮.选择"为每个数据库创建备份文件"选项,选择"为每个数据库创建子目录"复选框,并指定存储备份的文件夹的路径.单击"下一步"按钮.单击"更改"按钮以创建计划.完成之后,单击"确定"按钮,然后单击"下一步"按钮.在随后显示的页面中,可以定义是将报告写入文本文件还是以电子邮件形式发送报告.根据自己的情况选择,然后单击"下一步"按钮.
    1.2.3.4.5.6.7.8.9.
    第3章
    使用灾难恢复技术保护数据库
    53
    10.单击"完成"按钮.数据库维护计划可以通过SQLServerManagementStudio进行更改.我们只需找到"对象资源管理器"中"管理"子文件夹中的"维护计划",然后右键单击需要更改的维护计划.还可以在弹出的菜单中选择"查看历史记录".
    小
    结
    这一章介绍了SQLServer
    提供的不同备份类型.如何组合这些备份类型以及如何规划这些不同类型备份的执行取决于能够满足系统性能和数据完整性需求的备份策略.备份策略有简有繁,从只使用完整数据库备份的简单模式到使用事务日志备份的完整模式,都能还原数据损坏前的所有数据.请记住,应该为所有数据库计划,实施和测试备份策略.不要等到数据损坏后再测试备份策略.
    第3章快速参考
    目设置恢复模式的做执行以下SQL语句:
    USEmaster;GOALTERDATABASEAdventureWorksSETRECOVERYSIMPLE;GO
    法
    验证恢复模式
    执行以下SQL语句:
    SELECTDATABASEPROPERTYEX('AdventureWorks','Recovery')
    获取简单备份信息
    执行以下SQL语句:
    USEmsdbGOSELECTbackup_start_date,type,physical_device_name,backup_set_idFROMbackupsetbsinnerjoinbackupmediafamilybmONbs.media_set_id=bm.media_set_idWHEREdatabase_name='AdventureWorks'ORDERBYbackup_start_datedesc
    通过备份标识找出哪些数据和文件受到了影响
    执行以下SQL语句:
    SELECTfilegroup_name,logical_name,physical_nameFROMmsdb..backupfileWHEREbackup_set_id=
    54
    第I部分
    如何建立SQLServer数据库来保存应用程序的数据续表-
    目
    的
    做执行以下SQL语句:
    法
    从备份设备中直接获取信息
    RESTOREHEADERONLYFROMDISK='T:\BACKUPS\ADVFULL.BAK'RESTOREFILELISTONLYFROMDISK='T:\BACKUPS\ADVFULL.BAK'
    用SQLServerManagementStudio还原数据库启动SQLServerAgentService
    在"对象资源管理器"中,右键单击需要还原的数据库并且依次选择"任务"|"还原"|"数据库"打开SQLServerConfigurationManager,打开SQLServerAgent属性窗口,在"服务"选项卡中将启动模式项改为"自动",右键单击SQLServerAgenticon图标,然后选择"启动"
    计划备份
    在SQLServerManagementStudio中,打开"对象资源管理器"窗口中的"管理"文件夹,选择"维护计划向导"并根据提示创建维护计划
    1
    
设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师