加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql-server – 使用GUI恢复数据库 – 要恢复的文件错误

发布时间:2020-12-25 12:35:36 所属栏目:编程 来源:网络整理
导读:我只是搞乱了SSMS图形界面并研究了“恢复”任务的选项. 我注意到的一件事是当我点击“生成脚本”时,查询的第一行是: RESTORE DATABASE [MyDatabase] FROM DISK = N'Server_PatchDatabase_name_LOGSHIPPING.BKP' WITH FILE = 1,NORECOVERY,NOUNLOAD,STATS =

我只是搞乱了SSMS图形界面并研究了“恢复”任务的选项.

我注意到的一件事是当我点击“生成脚本”时,查询的第一行是:

RESTORE DATABASE [MyDatabase] FROM  DISK = N'Server_PatchDatabase_name_LOGSHIPPING.BKP' WITH  FILE = 1,NORECOVERY,NOUNLOAD,STATS = 5 ( and a lot of log backups for point in time )

好的,没问题,但是,我正在每天备份这个数据库.这个Database_name_LOGSHIPPING.BKP是我一个月前用于日志传送的文件的名称.

为什么当我尝试使用SSMS图形界面来恢复备份时,它指向此备份文件?我甚至没有这个文件了.

使用来自MSSQLTIPS的查询,我可以看到来自此数据库的所有备份:

SELECT 
CONVERT(CHAR(100),SERVERPROPERTY('Servername')) AS Server,msdb.dbo.backupset.database_name,msdb.dbo.backupset.backup_start_date,msdb.dbo.backupset.backup_finish_date,msdb.dbo.backupset.expiration_date,CASE msdb..backupset.type 
WHEN 'D' THEN 'Database' 
WHEN 'L' THEN 'Log' 
END AS backup_type,msdb.dbo.backupset.backup_size,msdb.dbo.backupmediafamily.logical_device_name,msdb.dbo.backupmediafamily.physical_device_name,msdb.dbo.backupset.name AS backupset_name,msdb.dbo.backupset.description 
FROM msdb.dbo.backupmediafamily 
INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id 
WHERE (CONVERT(datetime,102) >= GETDATE() - 7)   and  msdb..backupset.type ='D'
ORDER BY 
msdb.dbo.backupset.database_name,msdb.dbo.backupset.backup_finish_date

这可能有什么问题?我不是只使用COPY.

EDIT2:

我正在进行日常手动备份以进行测试,即使这样,SQL Server也会选择不再存在的旧备份.运行RESTORE HEADERONLY时……它显然(显然)文件不存在.

编辑3:

这个GUI打印:



哇哇哇哇哇!

此数据库是从另一台服务器(相同的服务器,不同的实例)还原. Huuum ……我认为问题出在这里.

你能在第二张图片中看到“服务器”吗?它有2台服务器.我正在使用名称为GDLIC2014的名称.

剧本:

备份脚本:

DECLARE @Patch varchar(1000)

SELECT @Patch = (SELECT 'PATCHFULLDATABASE_ ' + convert(varchar(500),GetDate(),112) + '.bkp') 

BACKUP DATABASE DATABASE TO DISK=@Patch with compression

使用MSSQLTIPS中的相同查询,我可以找到这些结果,使用它没有日期范围:

红色方块是旧实例的错误备份,蓝色方块是最后一次备份(GUI应该使用它)

编辑4:

好吧,使用此查询列出备份历史记录,我看到每个日志和完整列表都正确列出:

SELECT TOP 100
s.database_name,m.physical_device_name,CAST(CAST(s.backup_size / 1000000 AS INT) AS VARCHAR(14)) + ' ' + 'MB' AS bkSize,CAST(DATEDIFF(second,s.backup_start_date,s.backup_finish_date) AS VARCHAR(4)) + ' ' + 'Seconds' TimeTaken,CAST(s.first_lsn AS VARCHAR(50)) AS first_lsn,CAST(s.last_lsn AS VARCHAR(50)) AS last_lsn,CASE s.[type]
WHEN 'D' THEN 'Full'
WHEN 'I' THEN 'Differential'
WHEN 'L' THEN 'Transaction Log'
END AS BackupType,s.server_name,s.recovery_model
FROM msdb.dbo.backupset s
INNER JOIN msdb.dbo.backupmediafamily m ON s.media_set_id = m.media_set_id
WHERE s.database_name = DB_NAME() -- Remove this line for all the database
ORDER BY backup_start_date DESC,backup_finish_date
GO

EDIT5:

有什么东西可以重新启动数据库的标题

(我没有想法)

解决方法

备份历史记录表中的某些内容不同步,UI将进入最后一次“一致”完整备份.如果您真正感兴趣的是为什么它正在做它正在做的事情,请启动仅限于您的帐户的探查器跟踪,遍历GUI中的恢复步骤,并查看跟踪中捕获的命令,以显示UI在幕后执行的操作.这将为您提供您正在寻找的明确答案.

如果您只是想通过此操作,可以通过EXEC [msdb]清除备份历史记录.[dbo].[sp_delete_backuphistory] ??@ oldest_date = getdate()(根据您上次运行此时间,您可能希望清除它一次一个月),然后采取新的,等等.我怀疑这将重置GUI以使用正确的备份.

最后,另一种选择是在Wayne Sheffield之前运行this script.它可以提供有关备份链的任何问题的更多信息.在我最初发布这个答案之前,我没有遇到过这个问题,但希望将来可以帮助其他人.

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读