触发器在发布端?在订阅服务器的订阅库 LIS_Dxp上,建一个 DDL 审计触发器,把所有改表动作落库:
[SQL] 纯文本查看 复制代码 USE LIS_Dxp;
GO
IF OBJECT_ID('dbo.DDLAuditLog') IS NULL
CREATE TABLE dbo.DDLAuditLog(
id INT IDENTITY(1,1) PRIMARY KEY,
PostTime DATETIME DEFAULT GETDATE(),
LoginName SYSNAME,
HostName SYSNAME,
ProgramName SYSNAME,
SPID INT,
EventType SYSNAME,
ObjectName SYSNAME,
TSQLCommand NVARCHAR(MAX)
);
GO
CREATE OR ALTER TRIGGER trg_AuditDDL_Subscriber
ON DATABASE
FOR ALTER_TABLE, CREATE_TABLE, DROP_TABLE, RENAME
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ed XML = EVENTDATA();
INSERT INTO dbo.DDLAuditLog(PostTime, LoginName, HostName, ProgramName, SPID, EventType, ObjectName, TSQLCommand)
SELECT GETDATE(), SUSER_SNAME(), HOST_NAME(), PROGRAM_NAME(), @@SPID,
@ed.value('(//EventType)[1]','SYSNAME'),
@ed.value('(//ObjectName)[1]','SYSNAME'),
@ed.value('(//TSQLCommand/CommandText)[1]','NVARCHAR(MAX)');
END;
GO
等出现问题后,复查
[SQL] 纯文本查看 复制代码 SELECT * FROM dbo.DDLAuditLog
WHERE ObjectName = 'Exam_Sample' OR TSQLCommand LIKE '%BatchVerified%'
ORDER BY PostTime DESC;
应该就能查到元凶了 |