如何跟踪检查数据库中对象的改动
来源:互联网 发布:java程序怎么运行 编辑:程序博客网 时间:2024/06/08 17:01
转自:http://www.cnblogs.com/wghao/archive/2011/09/23/2185704.html--学习
在一些时候,我们发现数据库中的一些对象(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语句查询其状态:
Select * From sys.configurations Where configuration_id = 1568
use master
Go
sp_configure 'show advanced options', 1
Go
Reconfigure
Go
sp_configure 'default trace enabled', 1
Go
Reconfigure
Go
fn_trace_gettable系统函数
use master
Go
Declare @Filename nvarchar(256),
@Index int
Set @Filename=(Select path From sys.traces Where is_default=1)
Set @Index=Patindex('%\%',Reverse(@Filename))
Set @Filename=Substring(@Filename,1,len(@Filename)-@Index)+'\Log.trc'
Select HostName,
ApplicationName,
LoginName,
StartTime,
ServerName,
ObjectName,
ObjectType,
DatabaseName,
Case EventClass
When 46 Then N'Create'
When 47 Then N'Drop'
When 164 Then N'Alter'
End As ddl_operation
From fn_trace_gettable(@Filename,0)
where EventClass in (46,47,164)
And EventSubclass = 0
And DatabaseID <> 2
And objecttype Not In (21587)
Go
上面的T-SQL语句,查询了对象的结构有改动的历史记录,根据实际的环境,可加更多的过滤条件来筛选返回的行,以满足我们的需要。
列名
说明
EventClass46: Create Object
47: Drop Object
164: Alter Object
DatabaseID2: 临时数据库tempDBobjecttype21587:统计信息的对象类型,格式如,”_WA_Sys_Contact_186270A4”EventSubclass0:Begin
1:Commit
Select * From sys.traces
用于查询当前的跟踪(Trace),其中列is_default描述为是否默认跟踪。在前面的T-SQL代码中有应用到。
Select * From sys.trace_categories
用于查询跟踪中,事件的类别。另外还有3个目录视图:
Select * From sys.trace_columns
Select * From sys.trace_event_bindings
Select * From sys.trace_subclass_values
分別描述跟踪的事件列、事件与跟踪咧的关系,和具体的跟踪项。
.
其他跟踪方法
跟踪数据库中对象的结构改动,在SQL Server中另外有两种方法可以实现。
第一种,在MSSMS界面中,通过SQL Server 提供的标准报表查阅结构的变化情况.
第二种,还可以通过SQL Server提供的DDL(Data Definition Language)触发器功能。注意,使用DDL触发器,需要在结构发生改动前,就开始创建DDL触发器,并把DDL触发的內容写入到DBA管理专用的数据库对应表中,方便日后查询使用。这方法真实现起来是有点繁琐,如要跟踪表结构的改动情况,需要在数据库实例的每一个数据库层层创建针对表结构改动的DDL触发器。
(备注: 在不同版本的SQL Server中,以上查询语句,返回的列,或使用方法可能存在差异,当碰到具体的问题可以查阅联机帮助文档)
小結
以上提供了三种方法,來跟踪数据库中对象(Object)的结构改动情况。当然还可以通过第三方检查日志文件的工具,在当前文章中,这方面不作描述。无论使用哪一种方法,我们都是要把问题原因找出來,并去解决它。作为一名SQL Server DBA,不管是新手,还是专家级。SQL Server提供的一些系统函数或存储过程,及其功能,我们都要认真的去了解并多次测试,这样才能在真实的工作中,灵活的运用,快速的发现问题根源,并快速的解决问题。
---------------------------------
问题摘录:
1.你可以通过Microsoft SQL Server Profiler来跟踪。可以把跟踪结果数据保存某一个数据库表中,日后可以检查使用。
(使用Microsoft SQL Server Profiler时,需要过滤掉一些不用的跟踪项,可以指定跟踪哪一个数据库,哪一张表,或某一个客户端的操作等)
2.只是跟踪某一些敏感信息的表Insert/Update/Delete操作,也可以通过触发器实现,把更新前后的数据写入都一个指定的表中,用于日后检查使用.
- 如何跟踪检查数据库中对象的改动
- git 库中已经有文件被跟踪,如何忽略本地改动后的跟踪
- 用SQL Server默认跟踪查看近期数据库对象的DDL改动
- hibernate中session中的update方法,改动了一下,让数据库中原有的属性不变,只更新传入对象中改动的属性
- 在开发中如何跟踪Oracle数据库SQL的执行
- Git忽略已跟踪文件的改动
- git 忽略已经跟踪文件的改动
- git 忽略已经跟踪文件的改动
- 在SharePoint对象模型中如何检查用户权限的网页、列表或SharePoint项目
- java中Set容器如何检查是否内部包含指定的对象
- oracle:通过触发器实现对数据库对象增删改动作的审计
- TMS中Struts的改动
- 为数据库生成表的改动日志
- 了解如何使用 Oracle 数据库的细粒度审计特性来跟踪对表中特定行的只读访问
- 检查数据库对象是否存在
- 跟踪事务代码检查的权限
- 如何让你的改动进入内核
- 如何判断数据窗体中具体的列 数值被改动过
- iPhone程序本地化
- Hibernate配置文件和映射元素解释
- ASP.NET中的AJAX应用开发总结
- How to import a certificate file into a Java key store file?
- 事务处理总结【JDBC事务|JTA事务|容器事务
- 如何跟踪检查数据库中对象的改动
- Struts 2核心配置文件struts.properties和struts.xml
- ASP.NET开发人员经常使用的三十三种代码
- Fix it to use EXTRA_CFLAGS. Stop.
- 多线程安全 Singleton
- struts2.2.1+spring3+hibernate3.1所需的JAR包以及配置
- mysql 日期以及时间的操作
- 变量种类
- 嵌入式系统设计主要的三个层次