笔记39-徐 段落还原步骤 partial选项
笔记39-徐 段落还原步骤 partial选项
1 --段落还原步骤 partial选项 2 --文件还原、页面还原、段落还原都需要日志备份 3 --文件还原和页面还原适用于数据库损坏的范围比较小的情况,因为恢复时间比完整备份 4 --恢复短,所以可以大大缩短数据库恢复所造成的不可访问时间。但是如果数据库的损坏 5 --范围很大,可能跨越了若干个数据文件甚至文件组,这时候不得不恢复整个数据库。 6 --如果数据库很大,这段不可访问的时间就很长了。有时候一个大数据库有若干数据文件组, 7 --有些文件组里存放的是应用程序现在经常访问的数据,有些文件组存放的是历史数据, 8 --不经常访问。如果管理员能把应用经常访问的数据所在的文件组恢复,数据库就恢复 9 --访问,那大部分应用程序就可以提前恢复正常。历史数据文件组可以在后台慢慢恢复 10 11 12 --为了满足这种需求,SQL提供了段落还原这种机制。段落还原包括从主文件组开始的 13 --一系列还原顺序,有时也可以从一个或多个辅助文件组开始。在还原顺序结束后, 14 --如果恢复的文件有效并且与数据库一致,则恢复的文件将能直接变为在线状态,恢复用户访问 15 16 17 18 --所有版本的SQL2005都支持离线段落还原。在SQL2005企业版中,段落还原还可以是在线的。 19 --离线和在线段落还原的含义如下: 20 21 --离线段落还原方案: 22 --在离线段落还原中,数据库在部分还原顺序之后处于在在线状态。尚未还原的文件组保持 23 --离线状态,而数据库必须进入离线状态后,才能继续还原没有还原的文件组 24 25 --在线段落还原方案: 26 --在进行在线段落还原时,数据库在完成部分还原顺序后,主文件组已经被恢复,他和所有 27 --其他已恢复的辅助文件组都处于可用状态,数据库进入在线状态,用户可以访问。尚未 28 --还原的文件组保持离线状态,而后面还原这些文件组时,数据库还能保持在线状态 29 30 --需要注意的是,如果仅仅还原了一部分文件组,则数据库和这些文件组有关的事务可能 31 --会被挂起,影响一部分数据页面的访问。这是正常现象,因为整个数据库必须一致 32 33 --无论数据库采用哪种恢复模式,部分还原顺序都从restore database语句开始,并且要 34 --指定partial选项。partial选项总是会启动一个新的段落还原,因此,在部分还原顺序 35 --初始语句中,只能指定partial一次。当部分还原顺序完成并且数据库在线后,由于 36 --余下文件的恢复被推迟,这些文件的状态将变为“恢复已经挂起recovering” 37 38 39 --此后,管理员可以安排应用恢复数据库访问,而暂缓其他的文件组的还原。其他文件组 40 --还原的时候,不但要还原文件组备份,还要还原日志备份,以将文件组恢复到与数据库 41 --一致的点 42 43 44 --简单恢复模式下,可以被推迟恢复的只有只读文件组。在完整恢复模式或大容量日志恢复 45 --模式下,任何包含多个文件组的数据库都可以使用段落还原,并且可以将数据库还原到 46 --任何时间点。段落还原的顺序如下: 47 48 --1、部分还原顺序 49 --部分还原顺序会还原主文件组和(可选的)部分辅助文件组。第一个restore database语句 50 --必须执行一下操作: 51 --(1)指定partial 选项。他表示段落还原的开始 52 --(2)使用包含主文件组的任何完整数据库备份。常见的做法是通过还原部分备份来启动部分还原 53 --顺序 54 --(3)若要还原到特定的时间点,必须在部分还原顺序中指定该时间。还原顺序的每个后续 55 --步骤都必须指定相同的时间点 56 57 58 --2、文件组还原顺序会使其他文件组在线并处于与数据库一致的某个点 59 --在SQL2005企业版中,当数据库在线时,可还原并恢复任何离线辅助文件组。 60 --如果特定只读文件未损坏并且与数据库一致,则该文件无须还原 61 62 --如果在文件备份创建之前,只读文件组就已经处于只读状态,则该文件组无须应用日志备份,并且 63 --文件还原会跳过日志备份的应用过程。如果文件组是读/写文件组,则必须将未中断的日志备份链 64 --应用于上一次完整还原或差异还原,文件组才能前进到当前的日志文件 65 66 67 --------------------------------------示例--------------------------------------------------- 68 --在下面的示例中,数据库adb将在发生灾难性事件后还原到一台新计算机上。该数据库使用完整恢复模式 69 --因此,开始进行还原之前必须先获取数据库的尾日志备份。发生灾难性事件前所有文件组都处于在线状态 70 --文件组B是只读的。必须还原所有辅助文件组,但这些辅助文件组将按重要性顺序进行还原: 71 --A:最高 B:最低 C:其次,此示例存在4个日志备份,其中包括尾日志备份 72 73 --尾日志备份 74 --在还原数据库之前,数据库管理员必须先备份日志尾部。由于数据库已经损坏,因此创建日志备份要 75 --使用no_truncate选项 76 77 78 BACKUP LOG adb TO taillogbakcup WITH norecovery,NO_TRUNCATE --不截断 79 --尾日志备份是后面还原顺序中将要应用的最后一个备份 80 81 --还原顺序: 82 --(1)部分还原主文件组和辅助文件组A 83 RESTORE DATABASE GPOSDB FILEGROUP='primary' FROM backup1 84 WITH partial ,NORECOVERY 85 86 RESTORE DATABASE GPOSDB FILEGROUP='A' FROM bakcup2 87 WITH norecovery 88 RESTORE LOG GPOSDB FROM bakcup3 WITH norecovery 89 RESTORE LOG GPOSDB FROM bakcup4 WITH norecovery 90 RESTORE LOG GPOSDB FROM bakcup5 WITH norecovery 91 RESTORE LOG GPOSDB FROM taillogbackup WITH recovery 92 93 --此时,主文件组和辅助文件组A处于在线状态。文件组B和C中的所有文件都处于恢复挂起状态 94 --这两个文件组处于离线状态 95 96 --步骤1的最后一条restore log语句的消息指出:由于文件组C不可用,因此涉及此文件组的事务回滚已经 97 --延迟。数据库可以继续执行常规操作,但这些事务会在相应的页面上持有锁,阻止别人的访问和修改 98 99 100 --(2)在线还原文件组C 101 --在第二个还原顺序中,DBA将还原文件组C,同时要把所有的日志备份再还原一遍 102 RESTORE DATABASE GPOSDB FILEGROUP='C' FROM backup2a WITH norecovery 103 RESTORE LOG GPOSDB FROM backup3 WITH norecovery 104 RESTORE LOG GPOSDB FROM bakcup4 WITH norecovery 105 RESTORE LOG GPOSDB FROM bakcup5 WITH norecovery 106 RESTORE LOG GPOSDB FROM taillogbackup WITH recovery 107 108 --(3)此时主文件组以及文件组A和C处于在线状态。文件组B中的文件处于恢复挂起状态,该文件组 109 --处于离线状态。解释延迟的事务后,日志被截断 110 111 --(4)在线还原文件组B 112 --在第三个还原顺序中,DBA将还原文件组B。文件组B的备份是在该文件组变为只读状态之后进行的,因此,在 113 --恢复过程中无须再恢复日志备份 114 RESTORE DATABASE GPOSDB FILEGROUP='B' FROM backup2b WITH recovery 115 116 --(5)所有文件组现在都处于在线状态 117 --虽然段落还原的过程比较复杂,但是通过这样的还原顺序,DBA可以让最重要的文件组A提前交给用户使用 118 --这个灾难恢复时,优势非常大。所以建议DBA还是要学会使用这种方式 119 120 121 122 123 124 125 126 --任何包含多个文件组的数据库都可以使用段落还原,并且可以将数据库还原到任何时间点。 127 USE partionTest 128 CREATE TABLE aa(aa INT) ON filegroup001 129 130 --由于数据库已损坏,因此创建尾日志备份要使用NO_TRUNCATE选项 131 BACKUP LOG AdventureWorks TO taillogbackup WITH norecovery,NO_TRUNCATE --不截断