在线文件还原:若是比较大的MSSQL数据库的损坏只是集中在其中某一个文件或者文件组上,使用在线文件还原技术,
只是把坏掉的数据文件或者文件组重建,能节约不少时间。
如下是测试脚本(假设损坏的文件时Trn01):数据库
--首先还原损坏的文件Trn01(执行这一步以前,你必须取得数据库的独占访问权): RESTORE DATABASE [AdventureWorks] FILE=N'Trn01' FROM DISK=N'D:\BACKUP_TEST\AD_FULL.BAK' WITH NORECOVERY,STATS=10 --若是不是企业版,将会出现错误消息 3159,提示你须要使用BACKUP LOG WITH NORECOVERY 备份尾日志,意味着您只能离线文件还原。
--BACKUP LOG [AdventureWorks] TO DISK =N'D:\BACKUP_TEST\Log_BACK_TAIL.TRN' WITH NORECOVERY,COMPRESSION,STATS=10 --啰嗦一句,若是是企业版,执行完成后此时你能够放开独占访问权了。(若是是经过更改成SINGLE_USER模式的话,如今能够改成MULTI_USER放开访问了) --但此时Trn01所属的文件组TRN不能被访问,TRN文件组之外的数据库内容能够被访问。 --若是试图访问Trn01中的表,将出现以下的错误消息: --消息 8653,级别 16,状态 1,第 2 行 --查询处理器没法为表或视图“***”生成计划,由于该表驻留在不处于联机状态的文件组中。 --备份文件离线时点的日志: BACKUP LOG [AdventureWorks] TO DISK =N'D:\BACKUP_TEST\Log_BACK_TAIL.TRN' WITH COPY_ONLY,COMPRESSION,STATS=10 --依次还原日志: RESTORE LOG [AdventureWorks] FROM DISK=N'D:\BACKUP_TEST\LOG_BACK_1.TRN' WITH NORECOVERY,STATS=10 RESTORE 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