Hot*_*les 2 sql-server sql-server-2016
我正在尝试恢复我的 .bak 文件,但我不断收到错误消息
数据库“DataWarehouse”恢复失败。(Microsoft.SqlServer.Management.RelationalEngineTasks)
System.Data.SqlClient.SqlError:还原数据库异常终止(Microsoft.SqlServer.SmoExtended)
我尝试恢复的 .bak 文件是否已损坏?
我采取的步骤是
1) 右键单击服务器名称并选择恢复
2) 导航到 .bak 文件的位置
3) 单击“确定”
在您尝试将数据库还原到的 SQL Server 实例上的 SQL Server Management Studio (SSMS) 中执行以下命令。
RESTORE VERIFYONLY FROM DISK = 'T:\DIRECTORY\DATAWAREHOUSE_FULL_20200115_190000.bak'
Run Code Online (Sandbox Code Playgroud)
这应该为您提供一个如下所示的结果集:
Run Code Online (Sandbox Code Playgroud)The backup set on file 1 is valid.
如果检查异常终止,则原因可能是以下检查之一失败:
RESTORE VERIFYONLY 执行的检查包括:
- 备份集完整且所有卷均可读取。
- 数据库页面的一些头字段,例如页面ID(就好像要写入数据一样)。
- 校验和(如果介质上存在)。
- 检查目标设备上是否有足够的空间。
参考:RESTORE 语句 - VERIFYONLY (Transact-SQL)(Microsoft | SQL 文档)
RESTORE HEADERONLY FROM DISK = 'T:\DIRECTORY\DATAWAREHOUSE_FULL_20200115_190000.bak'
Run Code Online (Sandbox Code Playgroud)
这应该为您提供一个如下所示的结果集:
Run Code Online (Sandbox Code Playgroud)BackupName BackupDescription BackupType ExpirationDate Compressed Position DeviceType UserName ServerName DatabaseName DatabaseVersion DatabaseCreationDate BackupSize FirstLSN LastLSN CheckpointLSN DatabaseBackupLSN BackupStartDate BackupFinishDate ........ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ........ NULL NULL 1 NULL 0 1 2 NT SERVICE\SQLSERVERAGENT NOTHING StackExchange 782 2019-07-24 09:17:00.000 1688399872 568000013810400037 568000013813600001 568000013810400037 568000013524000037 2020-01-15 19:25:27.000 2020-01-15 19:25:29.000 ........
RESTORE FILELISTONLY FROM DISK = 'T:\DIRECTORY\DATAWAREHOUSE_FULL_20200115_190000.bak'
Run Code Online (Sandbox Code Playgroud)
这应该为您提供一个如下所示的结果集:
Run Code Online (Sandbox Code Playgroud)LogicalName PhysicalName Type FileGroupName Size MaxSize FileId CreateLSN DropLSN UniqueId ReadOnlyLSN ReadWriteLSN BackupSizeInBytes SourceBlockSize FileGroupId LogGroupGUID DifferentialBaseLSN DifferentialBaseGUID IsReadOnly IsPresent TDEThumbprint ------------------------ ---------------------------------------------- ---- ---------------- ------------ --------------- ------- ------------------- -------- ------------------------------------ ------------------- ------------------ ------------------ --------------- ----------- ------------- -------------------- ------------------------------------ ---------- --------- -------------- StackExchange C:\SQL\SQL_DATA\StackExchange.mdf D PRIMARY 2623537152 35184372080640 1 0 0 725120E9-8DF3-4E09-9A89-94433A6EB49B 0 0 1687224320 4096 1 NULL 568000013524000037 707694EC-A36C-444A-8879-C807B2137455 0 1 NULL StackExchange_DefRO C:\SQL\SQL_DATA\StackExchangeRO.ndf D DEFAULTRO 5242880 35184372080640 3 89000000045300001 0 05C6BA44-123A-4749-8FB5-A0A16EF49A51 102000000014600005 90000000013100004 131072 4096 2 NULL 568000013524000037 707694EC-A36C-444A-8879-C807B2137455 1 1 NULL StackExchange_PUBL_SNAP C:\SQL\SQL_DATA\StackExchange_PUBL_SNAP.ndf D PUBL_SNAP_DBASE 5242880 35184372080640 4 286000001633700001 0 DCA761C4-6260-4BE3-8280-64099C98911D 0 0 131072 4096 3 NULL 568000013524000037 707694EC-A36C-444A-8879-C807B2137455 0 1 NULL StackExchange_log C:\SQL\SQL_LOGS\StackExchange_log.ldf L NULL 21798322176 2199023255552 2 0 0 364124B1-081E-45C5-971C-2CD1CBBF13EC 0 0 0 4096 0 NULL 0 00000000-0000-0000-0000-000000000000 0 1 NULL
如果上述任何步骤失败,那么您必须确定问题所在。该RESTORE ...
命令应提供足够的信息来帮助您找到根本原因。
如果备份文件已损坏,那么您将必须找到有效的备份文件。
如果磁盘已满,则必须添加额外空间。
如果所有其他方法都失败,那么您可能必须向 Microsoft 支持提出案例。
(强调我的)
测试你的备份!
在测试备份之前,您没有恢复策略。通过将数据库的副本恢复到测试系统上来彻底测试每个数据库的备份策略非常重要。您必须测试恢复您打算使用的每种类型的备份。还建议恢复备份后,通过数据库的 DBCC CHECKDB 执行数据库一致性检查,以验证备份介质没有损坏。
参考:SQL Server 数据库的备份和还原(Microsoft | SQL 文档)