广东省企业项目:如何截获提交道SQLServer服务器上的SQL语句?

来源:百度文库 编辑:神马品牌网 时间:2024/05/09 12:36:58
我想通过钩子之类的技术截获提交道SQL Server服务器上的SQL指令,请问要截取哪些DLL的函数呢?
还有如果能不编程就能监控这些SQL命令就更好了,SQL Server提供了这些工具了吗?

SQL2000自带的有一个叫事件侦察器的工具.你可以用这个开一个跟踪.这样,那边企业管理器或是查询分析器里有什么命令或操作执行都会被跟踪到的.不错的.
我们一般用这个工具来监测软件(和数据库相接的部分)的运行情况.

打开
"开始"-"所有程序"-"Microsoft SQL Server"-"事件探查器"
打开程序之后点菜单栏的
"文件"-"新建"-"跟踪"
然后执行你要看SQL语句的程序.事件探查器就会把该时间段内所有执行的SQL语句列出来.

相关知识如下:
使用 SQL 事件探查器进行监视
SQL 事件探查器是图形工具,使系统管理员得以监视 Microsoft® SQL Server™ 实例中的事件。可以捕获有关每个事件的数据并将其保存到文件或 SQL Server 表中供以后分析。例如,可以对生产环境进行监视,了解执行速度太慢而妨碍性能的存储过程。

使用 SQL 事件探查器只监视感兴趣的事件。如果跟踪变得太大,可以基于需要的信息进行筛选,以便只收集事件数据的子集。监视太多事件类会增加服务器和监视进程的开销,并且可能导致跟踪文件或跟踪表变得很大,尤其是在进行长时间监视时。

在跟踪事件后,SQL 事件探查器允许重播在 SQL Server 实例上捕获的事件数据,因此可以如事件当初发生时一样有效地重新执行保存的事件。

使用 SQL 事件探查器可以:

监视 SQL Server 实例的性能。

调试 Transact-SQL 语句和存储过程。

识别执行慢的查询。

在工程开发阶段,通过单步执行语句测试 SQL 语句和存储过程,以确认代码按预期运行。

通过捕获生产系统中的事件并在测试系统中重播它们来解决 SQL Server 中的问题。这对测试和调试很有用,并使得用户可以不受干扰地继续使用生产系统。

审核和复查在 SQL Server 实例中发生的活动。这使得安全管理员得以复查任何审核事件,包括登录尝试的成功与失败,以及访问语句和对象的权限成功与失败。
SQL 事件探查器为用于监视 SQL Server 实例的一组存储过程提供图形用户界面。例如,可以创建您自己的应用程序,以便使用 SQL 事件探查器存储过程监视 SQL Server。

必须有至少 10 MB 的可用空间用以运行 SQL 事件探查器。当使用 SQL 事件探查器时,如果可用空间降至 10 MB 以下,SQL 事件探查器的所有功能都将停止。

SQL 事件探查器术语
若要使用 SQL 事件探查器,需要了解描述工具功能的术语。例如,创建模板来定义要收集的数据。通过在模板中所定义的事件上运行跟踪来收集这些数据。当运行跟踪时,描述事件数据的事件类和数据列显示在 SQL 事件探查器中。

模板
模板定义想要使用 SQL 事件探查器监视的每个事件的准则。例如,可以创建一个模板以指定使用哪些事件、数据列和筛选。然后可以保存该模板,并用当前的模板设置启动跟踪。捕获的跟踪数据基于模板中指定的选项。模板不执行且必须用 .tdf 扩展名保存到文件。

跟踪
跟踪基于选定的事件、数据列和筛选捕获数据。例如,可创建模板监视异常错误。为此,应选择跟踪 Exception 事件类以及 Error、State 和 Severity 数据列,这些都是为了使跟踪结果提供有意义的数据而需收集的。保存模板后,便可将其作为跟踪运行,并且可收集关于服务器中发生的任何 Exception 事件的数据。可保存此跟踪数据,然后稍后重播或立即用于分析。

筛选

当创建跟踪或模板时,可以定义筛选由事件收集的数据的准则。如果跟踪变得太大,可以基于想要的信息进行筛选,以便只收集事件数据的子集。如果没有设置筛选,跟踪输出中将返回选定事件类的所有事件。例如,可以将跟踪中的 Microsoft Windows® 2000 用户名限制为特定用户,以将输出数据减少到感兴趣的那些用户。
事件分类
事件分类定义事件的分组方法。例如,所有锁事件类都在锁事件分类内分组。但是,事件分类只存在于 SQL 事件探查器中。该术语不反映引擎事件的分组方法。

事件
事件是在 Microsoft® SQL Server™ 引擎中生成的操作。例如:

登录连接、失败和断开。

Transact-SQL SELECT、INSERT、UPDATE 和 DELETE 语句。

远程过程调用 (RPC) 批处理状态。

存储过程的开始或结束。

存储过程内的语句的开始或结束。

SQL 批处理的开始或结束。

写入 SQL Server 错误日志的错误。

在数据库对象上获取或释放的锁。

打开的游标。

安全权限检查。
由事件生成的所有数据显示在单个行中的跟踪内 。该行包含详细描述事件的数据列,称为事件类。

事件类
事件类是描述由服务器生成的事件的列。事件类确定收集的数据类型,因此并不是所有数据列都适用于所有事件类。事件类示例包括:

SQL:BatchCompleted,表示已完成 SQL 批处理。

运行客户端的计算机的名称。

受事件影响的对象 ID(如表名)。

发出语句的用户的 SQL Server 名称。

正在执行的 Transact-SQL 语句文本或存储过程文本。

事件开始和结束的时间。
数据列
数据列描述为跟踪内捕获的每个事件类所收集的数据。事件类确定收集的数据类型,因此并不是所有数据列都适用于所有事件类。例如,为 Lock:Acquired 事件类捕获 Binary Data 数据列时,该数据列包含锁定的页 ID 或行的值,但没有 Integer Data 事件类的值。对于所有事件类,默认数据列均为自动填充。