在一些时候,我们发现数据库中的一些对象(object)发生了改动,如表结构发生了改动(有Create/Alter/Delete操作)引发了应用程序出错,这时候Boss就会发问,为什么会发生这样错误,原因何在,到底是谁的责任。作为一名SQL Server数据库DBA,针对这个,我们要尽快查明结构被改动的对象,改动时间,操作人或PC等。
在SQL Server 2005 中,通过读取默认跟踪日志文件,查询出最近哪些结构被改动,为我们找出问题的根源。接下来,就介绍如何通过读取默认跟踪日志文件。
default trace enabled 选项
在SQL Server中,使用”default trace enabled” 选项,来启用或禁用默认跟踪日志文件。在系统默认情况下,”default trace enabled” 选项值为1,也就是默认启用。我们在Microsoft SQL Server Management Studio(MSSMS)查询中,可以通过下面Select语句查询其状态:
要是我们想设置“default trace enabled”选项,必须先要启用“show advanced options”选项。
Go
fn_trace_gettable系统函数
确认启用默认跟踪日志文件后,我们就要如何读取默认跟踪日志文件。SQL Server为我们提供了系统函数fn_trace_gettable,来读取根据这日志文件。
Go
上面的T-SQL语句,查询了对象的结构有改动的历史记录,根据实际的环境,可加更多的过滤条件来筛选返回的行,以满足我们的需要。
这里对T-SQL语句的条件中,用到的一些列做个简单的说明:
|
列名 |
说明 |
| EventClass |
46: Create Object 47: Drop Object 164: Alter Object |
| DatabaseID | 2: 临时数据库tempDB |
| objecttype | 21587:统计信息的对象类型,格式如,”_WA_Sys_Contact_186270A4” |
| EventSubclass |
0:Begin 1:Commit |
要了解系统函数fn_trace_gettable(),返回记录集合中有关其他列的更多说明,可以参考系统存储过程sp_trace_setevent。以下列出与这里相关的,有关Trace的几个系统的目录视图: