笔记40-徐 页面还原步骤

笔记40-徐 页面还原步骤

  1 --页面还原步骤
  2 --文件还原、页面还原、段落还原都需要日志备份
  3 --如果为了少数几个页面而恢复整个数据库,代价可谓高昂
  4 --SQL2005引入了页面还原,可以只还原指定若干页面,从而大大节省数据库
  5 --恢复时间,可以说是个能够救急的功能
  6 
  7 --页面还原用于修复隔离的损坏页。还原和恢复少量页面的速度可能比还原一个文件
  8 --更快,减少还原操作中处于离线状态的数据量。
  9 --但是如果文件中要还原的不只是少量页面而是多数页面,则还原整个文件更有效!!!!!!!!!!!!!!!!!!!!!!!!!!
 10 
 11 
 12 --例如,如果某个文件上的大量页面都指出此文件有未解决的故障,不妨考虑直接还原该文件
 13 --通常,要进行还原的页面已经由于在访问该页面时遇到错误而标记为“可疑”。可疑页在
 14 --msdb数据库的suspect_pages表中进行了标识。可以立即还原多个数据库页面。
 15 --跟文件还原一样,在页面还原之后,也要恢复所有的日志文件备份。每次传递日志重做,
 16 --前滚集都会前进一步
 17 
 18 --需要注意的是,页面还原仅仅可以还原数据页。页面还原不能还原下列内容:
 19 --事务日志
 20 --分配页:全局分配映射页GAM,共享全局分配映射SGAM页和页可用空间PFS页
 21 --所有数据文件的页0(文件启动页)
 22 --页1:9(数据库启动页)
 23 --全文目录(fulltext search catalog)
 24 
 25 --页面还原还要符号下面要求:
 26 --(1)数据库必须使用完整恢复模式。使用大容量日志恢复模式可能不能成功。简单恢复模式不能使用
 27 --这一功能
 28 
 29 
 30 --(2)只读文件组中的页面无法还原
 31 
 32 
 33 --(3)还原顺序必须从完整备份、文件备份或文件组备份中恢复页面开始。所以如果没有一份
 34 --数据页面损坏之前做的备份,也无法进行还原
 35 
 36 --(4)页面还原需要截至到当前日志文件的连续日志备份,并且必须恢复所有这些日志备份后,页面
 37 --才能恢复到当前正常状态。所以如果数据库曾经做过截断日志动作,或者有份日志备份现在找不到了
 38 --也无法进行页面恢复
 39 
 40 --(5)数据库备份和页面还原不能同时运行
 41 
 42 
 43 --页面还原基本语法:
 44 --若要在restore database 语句中指定一页,需要知道该页所在文件的文件ID和该页的页ID
 45 --语法:
 46 --RESTORE DATABASE GPOSDB
 47 --PAGE='file:page[,...]'[,...n]
 48 --FROM <backup_device>[,...n]
 49 --WITH norecovery
 50 
 51 
 52 
 53 --页面还原的步骤:
 54 --(1)获取要还原的损坏页的页面ID。校验和或残缺写错误将返回页ID,并提供指定页所需的信息
 55 --可以通过查询msdb数据库里的suspect_pages表,或者监视事件和SQL errorlog文件里所报出的
 56 --错误信息,查找损坏页的页ID
 57 
 58 
 59 EXEC sys.sp_readerrorlog
 60 --查看损坏的页面,从而进行页面还原
 61 USE msdb
 62 SELECT * FROM dbo.suspect_pages
 63 
 64 
 65 
 66 
 67 --(2)从包含损坏页的完整数据库备份、文件备份或者文件组备份开始进行页面还原。在
 68 --RESTORE DATABASE语句中,使用Page子句列出所有要还原的页的页ID
 69 --PAGE='file:page'
 70 
 71 --(3)应用最近的差异备份
 72 
 73 --(4)应用后续日志备份
 74 
 75 --(5)创建新的数据库尾日志备份
 76 
 77 --(6)还原新的尾日志备份。应用这个新的日志备份后,就完成了页面还原,可以开始
 78 --正常访问页面了
 79 
 80 --示例:使用norecovery还原数据文件A的4个损坏页。随后,将使用norecovery应用两个日志
 81 --备份,然后是尾日志备份(使用recovery还原)
 82 
 83 
 84 --数据文件A的文件ID为1,假设损坏页的页ID分别为67,233,879,1026
 85 --(1)查看损坏页
 86 EXEC sys.sp_readerrorlog
 87 --查看损坏的页面,从而进行页面还原
 88 USE msdb
 89 SELECT * FROM dbo.suspect_pages
 90 
 91 
 92 
 93 --(2)查出损坏页的页ID之后,使用restore database恢复
 94 --如果有多个数据文件的话,因为不知道损坏页面所属的数据文件,
 95 --这里只给出最简单的情况,数据库只有一个主数据文件mdf
 96 --那么fileid就是1
 97 RESTORE DATABASE GPOSDB PAGE='1:67, 1:233 ,1:879 ,1:1016'
 98 FROM <file_backup_of_file_A>
 99 WITH norecovery;
100 
101 RESTORE LOG GPOSDB FROM <log_backup>
102 WITH norecovery;
103 
104 RESTORE LOG GPOSDB FROM <log_backup>
105 WITH norecovery;
106 
107 BACKUP LOG GPOSDB TO <new_log_bakcup>
108 RESTORE LOG GPOSDB FROM <new_log_backup> WITH recovery;
109 GO

 

posted @ 2013-07-27 16:12 桦仔 阅读(...) 评论(...)  编辑 收藏