从备份中检索登录触发器

G33*_*una 7 trigger sql-server sql-server-2012

在我们的生产数据库中添加和删除了一个登录触发器。master在添加触发器之后和删除之前,我有完整的备份。我正在尝试从备份中恢复,但在该server_triggers备份下看不到它。有没有办法从数据库备份中恢复登录触发器?

备份是从昨天晚上 11 点开始的。触发器是昨天早上添加的,今天早上删除了。

Mar*_*ith 12

恢复master有点痛苦。

我假设您只是想恢复定义?

我只是尝试创建一个登录触发器,备份 master 并在记事本中打开 *.bak 文件并搜索“CREATE TRIGGER” - 它在文件中清晰可见。

或者,您可以将其恢复为常规用户数据库(假设master2如下)并查看以下内容是否找到它(需要通过DAC连接)

USE master2

SELECT *,
       CAST(imageval AS NVARCHAR(MAX)),
       CAST(imageval AS VARCHAR(MAX))
FROM   sys.sysobjvalues
WHERE  CAST(imageval AS NVARCHAR(MAX)) LIKE N'%TRIGGER%'
        OR CAST(imageval AS VARCHAR(MAX)) LIKE '%TRIGGER%' 
Run Code Online (Sandbox Code Playgroud)

以上对我有用。YMMV 并确保您对任何结果进行理智检查(如果定义被拆分为多个页面并且可能会发现重影版本,则第一种方法肯定不起作用)。

如果触发器对象是加密的,我想它在sys.sysobjvalues使用 DAC 时是可见的,尽管我的LIKE子句肯定找不到它。您需要查看sys.sysschobjsobjid从名称中获取。希望它没有加密,否则需要好好阅读这篇文章:The Internals ofWITH ENCRYPTION