首页 > 代码库 > MSSQL段落还原脚本
MSSQL段落还原脚本
--段落还原:数据库损坏范围比较大,跨多个数据文件甚至跨文件组的时候,我们不得不恢复整个数据库。
--这时如果数据库特别大,数据库恢复时间将会很长。但我们可以使用SQL Server提供的段落还原,来逐步恢复数据库。--首先备份尾日志:BACKUP LOG [AdventureWorks] TO DISK =N‘D:\BACKUP_TEST\LOG_BACK_TAIL.trn‘ WITH NO_TRUNCATE ,NORECOVERY,COMPRESSION,STATS=10--部分还原主文件组PRIMARY:RESTORE DATABASE [AdventureWorks] FILEGROUP=N‘PRIMARY‘ FROM DISK=N‘D:\BACKUP_TEST\AD_FULL.bak‘ WITH PARTIAL,NORECOVERY,STATS=10--还原副文件组MST:RESTORE DATABASE [AdventureWorks] FILEGROUP=N‘MST‘ FROM DISK=N‘D:\BACKUP_TEST\AD_FULL.bak‘ WITH NORECOVERY,STATS=10--依次还原日志:RESTORE LOG [AdventureWorks] FROM DISK=N‘D:\BACKUP_TEST\LOG_BACK_1.TRN‘ WITH NORECOVERY,STATS=10RESTORE LOG [AdventureWorks] FROM DISK=N‘D:\BACKUP_TEST\LOG_BACK_2.TRN‘ WITH NORECOVERY,STATS=10--还原尾日志并恢复RESTORE LOG [AdventureWorks] FROM DISK=N‘D:\BACKUP_TEST\LOG_BACK_TAIL.TRN‘ WITH RECOVERY,STATS=10--此时AdventureWorks数据库中位于PRIMARY和MST文件组中的文件已经可以访问。--但是位于其他文件组如:TRN文件组中的表还不能访问。--消息 8653,级别 16,状态 1,第 2 行--查询处理器无法为表或视图“****”生成计划,因为该表驻留在不处于联机状态的文件组中。
--接下来还原副文件组TRN:RESTORE DATABASE [AdventureWorks] FILEGROUP=N‘TRN‘ FROM DISK=N‘D:\BACKUP_TEST\AD_FULL.bak‘ WITH NORECOVERY,STATS=10
--如果数据库不是企业版,以上还原将会提示“尚未备份数据库 "AdventureWorks" 的日志尾部。”
--需要再次备份一次日志尾部,意味着还原副文件组TRN的时候整个数据库都处于正在还原状态。所以对于非企业版而言,只能离线段落还原,个人觉得意义不是很大......--依次还原日志:RESTORE LOG [AdventureWorks] FROM DISK=N‘D:\BACKUP_TEST\LOG_BACK_1.TRN‘ WITH NORECOVERY,STATS=10RESTORE LOG [AdventureWorks] FROM DISK=N‘D:\BACKUP_TEST\LOG_BACK_2.TRN‘ WITH NORECOVERY,STATS=10--还原尾日志并恢复RESTORE LOG [AdventureWorks] FROM DISK=N‘D:\BACKUP_TEST\LOG_BACK_TAIL.TRN‘ WITH RECOVERY,STATS=10--此时位于副文件组TRN中的表已经可以访问了。--段落还原全部完成
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。