Sql server 如何检测通过附加数据文件或通过从Enterprise Manager还原创建的SQL Server数据库

Sql server 如何检测通过附加数据文件或通过从Enterprise Manager还原创建的SQL Server数据库,sql-server,database,sql-server-2008,Sql Server,Database,Sql Server 2008,我们的应用程序是基于SQL Server 2008-R2的Windows窗体应用程序。我们的软件附带了一个备份/恢复实用程序,它在恢复备份之前执行一些逻辑检查,以确保备份在功能上有效 但是,我们的客户端通常使用SQL Server Enterprise Manager实用程序来: 恢复备份或 在直接格式化之前附加保留在一旁的数据文件。 这种类型的操作绕过所有功能检查,允许用户恢复无效备份 我们想检测数据库是否已恢复/连接,如果发生这种情况,我们可能会停止加载软件。我们认为此信息附加/恢复应该在S

我们的应用程序是基于SQL Server 2008-R2的Windows窗体应用程序。我们的软件附带了一个备份/恢复实用程序,它在恢复备份之前执行一些逻辑检查,以确保备份在功能上有效

但是,我们的客户端通常使用SQL Server Enterprise Manager实用程序来:

恢复备份或 在直接格式化之前附加保留在一旁的数据文件。 这种类型的操作绕过所有功能检查,允许用户恢复无效备份

我们想检测数据库是否已恢复/连接,如果发生这种情况,我们可能会停止加载软件。我们认为此信息附加/恢复应该在SQL Server本身的某些表中可用,但不知道正确的位置/查询

如果我们的软件需要进行任何更改以实现上述目标,我们也准备进行更改,例如,我们可能需要在某个时间点存储一些数据以进行检测,请告知

那么,我们怎样才能发现呢

已使用SQL Server管理实用程序还原数据库备份

注意:MSDB.Restorehistory可能不是一个好的选项,因为我们经常会发现,即使在备份被还原之后,由于未知原因,此表仍然为空。如果用户由于数据损坏而从MSDB备份或MSDB模板还原MSDB,则可能是由于系统异常关闭,那么Restorehistory表数据将丢失

通过使用SQL Server管理实用程序附加数据/日志文件来创建数据库

我们非常感谢您在这方面提供的任何帮助

拉贾希方法1:

您可以使用SQL Server Audit Security\Server Audit Specification,并向其添加Backup-Restore\u Group选项,以便记录服务器中的所有备份和还原

您还可以通过以下查询读取已审核数据:

SELECT *
FROM sys.fn_get_audit_file('Your Audit File Path',DEFAULT, DEFAULT)
此功能在SQL Server 20088 R2及更高版本中,在SQL Server 2008中不存在

方法2:

您可以使用SQL server错误日志来获取备份和还原历史记录:

要获取数据库的备份日志,请执行以下操作:

EXEC sys.sp_readerrorlog @p1 = 0, -- int
    @p2 = 1, -- int
    @p3 = N'Database backed up. Database: Attach', -- nvarchar(4000)
    @p4 = N'' -- nvarchar(4000)
EXEC sys.sp_readerrorlog @p1 = 0, -- int
    @p2 = 1, -- int
    @p3 = N'Database was restored: Database: Attach, -- nvarchar(4000)
    @p4 = N'' -- nvarchar(4000)
要获取数据库的还原日志,请执行以下操作:

EXEC sys.sp_readerrorlog @p1 = 0, -- int
    @p2 = 1, -- int
    @p3 = N'Database backed up. Database: Attach', -- nvarchar(4000)
    @p4 = N'' -- nvarchar(4000)
EXEC sys.sp_readerrorlog @p1 = 0, -- int
    @p2 = 1, -- int
    @p3 = N'Database was restored: Database: Attach, -- nvarchar(4000)
    @p4 = N'' -- nvarchar(4000)

您可以在SQL Server Express 2008-R2版上使用此方法。

我想我忘了提到我们正在使用SQL Server Express 2008-R2版,因此一些建议的功能可能不可用。非常感谢。执行了基本的备份/还原操作,此方法能够检测到。将在更多场景下进行测试并恢复。检测数据库“附加”操作的字符串是什么?@Rajarshi。我编辑了答案并在示例中添加了附加数据库。我找不到附加方案的任何结果。请您通过分离>附加然后运行此查询来进行验证。@Rajarshi。我使用方法2来获取备份和恢复日志,直到现在才用于附加和分离日志。