如何在sql server 2005+中跟踪哪个用户上次修改了存储过程?

时间:2009-11-13 14:58:56

标签: sql sql-server sql-server-2005

受到这个问题的启发How can I quickly identify most recently modified stored procedures in SQL Server我想知道我们是否能同时识别用户? 如何使用sql程序(如果可能的话)?我很想知道。

提前致谢

6 个答案:

答案 0 :(得分:1)

如果您正在谈论“prod DB中使用的是什么”,而不是“源代码控制”,那么

您需要SQL Server 2005及更高版本和DDL triggers

答案 1 :(得分:1)

两个选项:

尝试运行SQL Server Management Studio报告“架构更改历史记录”
右键单击“数据库”
选择“标准报告”
选择“架构更改历史记录”

如果这不起作用,你真的很绝望:
试试“:: fn_dblog” 示例:

SELECT * FROM ::fn_dblog(NULL, NULL)  

这将让您直接查看事务日志。

答案 2 :(得分:0)

事实上,我不相信这是可能的。这与此问题Microsoft SQL Server - Who created a Stored Procedure?

非常相似

答案 3 :(得分:0)

如果存储的过程存储在版本控制系统中,那么您可以完全访问已检出存储过程的人员的历史记录,已完成的修改以及文件何时被提交回存储库。当然,这仅适用于文件本身,而不适用于在SQL服务器本身上修改存储过程的时间。

答案 4 :(得分:0)

我们将所有Sprocs放在单独的文件中(带版本控制等) - 而不仅仅是直接在数据库中使用RightClick和Edit!

我们在每个SProc脚本的顶部都有这个

EXEC dbo.MyLogScriptRun 'MySProcName', '091113'

这会在脚本日志记录表中创建一个创建MySproc并且其版本为091113的条目。我们还记录当前登录的用户,以及数据库和服务器名称(这有助于将数据库还原到另一台服务器时我们想知道MySproc如何在这台服务器上成为那个版本!)

我们还使用它来检查特定客户端数据库上安装的版本,例如在诊断问题时,以及了解使用哪个起始版本(从版本控制)部署修复程序的基础;也用于进行升级(因此我们可以确定哪些SProcs更新,需要合并到“发布包”中)

大部分可以使用DDL触发器(在SQL2005以后),但我不确定是否能够存储版本号。

我们使用它来记录我们运行的其他脚本 - 在更新期间运行DDL操作脚本等等。

编写日志记录段以便执行

EXEC dbo.MyLogScriptRun 'MySProcName'

提供日志列表。 (即我可以突出显示该行的第一部分,不包括版本号,以获取列表,或执行整行以创建日志条目)。

答案 5 :(得分:0)

您可以使用SQL Server Profiler来跟踪DDL操作。在事件选择中,检查以下事件:

对象/对象:改变

Objects / Object:Created

对象/对象:已删除

还有很多自定义选项:您可以将输出保存到文件或表格,根据任何列等进一步过滤输出等。

相关问题