如果有人从我的数据库中删除任何对象,如table,view,sp等,那么如何获取那些删除和从事务日志中删除的详细信息。可能吗。请告诉我简单的方法来阅读交易日志,因此我可以正确地获得这些细节。
感谢
答案 0 :(得分:2)
不,为不同目的创建了ransaction日志。有些产品不同的供应商试图从事务日志中获取信息,但这不是正确的方法。
谁删除和删除时
如果您需要此信息,则需要为表创建触发器以进行删除或更新,并收集此信息。
如果您使用MS SQL 2008,则可以使用Change Data Capture功能。
答案 1 :(得分:2)
显然你可以使用第三方产品,例如Apex SQL Log,虽然我个人没有使用它。
根据事件发生的最近时间,您还可以从SQL Server 2005中的内置报告中提取所需的信息,例如“架构更改历史记录报告”。您可以通过默认跟踪访问此信息。有关详细信息,请参阅using the Default Trace。
您真正需要从事件中消除的是使用本课程为您的环境设计架构审核策略。互联网上有很多文章详细介绍了如何使用触发器实现这一目标。例如,请参阅Using DDL Triggers in SQL Server 2005 to Capture Schema Changes
答案 2 :(得分:1)
您可以从完整备份/事务日志备份还原数据库(不覆盖它!),然后从那里复制已删除的对象。最好将数据库外部的存储过程,视图和表的源代码保存在源代码控制系统中,这样您就不必恢复数据库备份来获取它们。
答案 3 :(得分:1)
您可以使用DDL触发器或SQL Server审核功能
DDL触发CREATE,ALTER,DROP以及与数据库对象安全设置相关的操作(例如GRANT,DENY ......)
在以下示例中,DDL触发器跟踪对数据库表,存储过程,函数和视图执行的CREATE,ALTER和DROP操作。触发器示例使用先前创建的存储库表(DDL_Events_by_DDL_TRIGGER)和适当的行
CREATE TRIGGER DDL_TRIGGER ON DATABASE
FOR CREATE_TABLE ,
ALTER_TABLE ,
DROP_TABLE ,
CREATE_PROCEDURE ,
ALTER_PROCEDURE ,
DROP_PROCEDURE ,
CREATE_FUNCTION ,
ALTER_FUNCTION ,
DROP_FUNCTION ,
CREATE_VIEW ,
ALTER_VIEW ,
DROP_VIEW
AS
DECLARE
@event xml;
SET
@event = EVENTDATA();
INSERT INTO DDL_Events_by_DDL_TRIGGER
VALUES
(
REPLACE(CONVERT(varchar(58),
@event.query('data(/EVENT_INSTANCE/PostTime)')), 'T', ' ')
,
CONVERT(varchar(185),
@event.query('data(/EVENT_INSTANCE/LoginName)'))
,
CONVERT(varchar(185),
@event.query('data(/EVENT_INSTANCE/DatabaseName)'))
,
CONVERT(varchar(185),
@event.query('data(/EVENT_INSTANCE/SchemaName)'))
,
CONVERT(varchar(185),
@event.query('data(/EVENT_INSTANCE/ObjectName)'))
,
CONVERT(varchar(185),
@event.query('data(/EVENT_INSTANCE/ObjectType)'))
,
CONVERT(varchar(max),
@event.query('data(/EVENT_INSTANCE/TSQLCommand/CommandText)'))
);
存储库表将包含(在触发器中指定)对数据库模式的DDL操作,以及有关更改者,时间和内容的信息
可用于确定SQL Server数据库是否已被更改的另一种本机方法是SQL Server Audit feature。该功能是在SQL Server 2008中引入的,它收集SQL Server扩展事件功能引发的服务器和数据库级别操作。但是,数据库级别操作组仅在SQL Server Enterprise和Developer Edition中可用