简单的新建一个跟踪就不在这里多说了。文件 --> 新建 --> 跟踪。(也可以直接使用功能按钮)
我们这里主要是讲一个精确的跟踪。注:如果事件探测器在处理过程中检测到了Password,则事件探查器中根本看不到一句数据库SQL语句,所有的操作全部都用语句句柄来做了,看到最多的就是 exec sp_execute 11,1,即便在事件探查器中添加参数SP:StmtStaring,SP:StmtCompleted,也没有结果,探查器给替换了文本。真是万恶,这样就起到了隐藏代码的目的。1、跟踪指定的数据库
有时我们机器上跑了几个服务,连了不止一个数据库,而我们又只想探测其中的一个或几个数据库。这时我们可以设置事件探测器的筛选条件。① 文件 --> 属性 --> “筛选”选项卡。(注意:此时需要将运行的跟踪提前停止,这样才能在这里设置筛选条件,否则只能查看)② 找到“DatabaseID”,然后将你需要探测的数据库的id填入即可。查找数据库id的方法:(假设数据库名为scm02)SELECT dbid FROM master.dbo.sysdatabases WHERE (name = 'scm02')这里也有一个DatabaseName的筛选条件,我试了,但是没有效果,暂时不知道这个筛选条件是怎么用的。
2、设置筛选的数据列
我们新建跟踪时,默认选择的“跟踪模板”是SQLProfilerStander标准模板,里面筛选的数据列有些是不必要的。我们如果想把多余的筛选数据去掉的话,可以按如下操作:文件 --> 属性 --> “数据列”选项卡。(注意:需要暂停当前跟踪)筛选条件详解:()
数据列名称 | 数据类型 | 说明 | 列 ID | 可筛选 |
---|---|---|---|---|
ApplicationName | nvarchar | 客户端应用程序的名称,该客户端应用程序创建了指向 SQL Server 实例的连接。 此列由应用程序传递的值填充,而不是由所显示的程序名填充。 | 10 | 是 |
ClientProcessID | int | 主机为运行该客户端应用程序的进程分配的 ID。 如果客户端提供了客户端进程 ID,则填充此数据列。 | 9 | 是 |
CPU | int | 用户在连接过程中使用的 CPU 时间(毫秒)。 | 18 | 是 |
DatabaseID | int | 由 USE database 语句指定的数据库的 ID;如果未对给定实例发出 USE database 语句,则为默认数据库的 ID。 如果在跟踪中捕获 ServerName 数据列而且服务器可用,则 SQL Server Profiler 将显示数据库名。 可使用 DB_ID 函数来确定数据库的值。 | 3 | 是 |
DatabaseName | nvarchar | 正在其中运行用户语句的数据库的名称。 | 35 | 是 |
Duration | bigint | 用户自登录开始持续的时间(大约时间)。 | 13 | 是 |
EndTime | datetime | 注销的结束时间。 | 15 | 是 |
EventClass | int | 事件类型 = 15。 | 27 | 否 |
EventSequence | int | 特定事件在请求中的顺序。 | 51 | 否 |
EventSubClass | int | 登录使用的连接类型。 1 = 非共用,2 = 共用。 | 21 | 是 |
HostName | nvarchar | 正在运行客户端的计算机的名称。 如果客户端提供了主机名,则填充此数据列。 若要确定主机名,请使用 HOST_NAME 函数。 | 8 | 是 |
IsSystem | int | 指示事件是发生在系统进程中还是发生在用户进程中。 1 = 系统,0 = 用户。 | 60 | 是 |
LoginName | nvarchar | 用户的登录名(SQL Server 安全登录名或 Microsoft Windows 登录凭据,格式为“DOMAIN\username”)。 | 11 | 是 |
LoginSid | image | 登录用户的安全标识号 (SID)。 您可以在 sys.server_principals 目录视图中找到此信息。 服务器中的每个登录名都具有唯一的 SID。 | 41 | 是 |
NTDomainName | nvarchar | 用户所属的 Windows 域。 | 7 | 是 |
NTUserName | nvarchar | Windows 用户名。 | 6 | 是 |
Reads | bigint | 用户在连接过程中发出的逻辑读取 I/O 的数量。 | 16 | 是 |
RequestID | int | 包含该语句的请求的 ID。 | 49 | 是 |
ServerName | nvarchar | 所跟踪的 SQL Server 实例的名称。 | 26 | |
SessionLoginName | Nvarchar | 发起会话的用户的登录名。 例如,如果您使用 Login1 连接到 SQL Server,再以 Login2 的身份执行语句,则SessionLoginName 将显示 Login1,而 LoginName 将显示 Login2。 此列将同时显示 SQL Server 登录名和 Windows 登录名。 | 64 | 是 |
SPID | int | 发生该事件的会话的 ID。 | 12 | 是 |
StartTime | datetime | 该事件(如果存在)的启动时间。 | 14 | 是 |
Success | int | 1 = 成功。 0 = 失败。 例如,值为 1 时表示权限检查成功;值为 0 时表示权限检查失败。 | 23 | 是 |
Writes | bigint | 用户在连接过程中发出的逻辑写入 I/O 的数量。 | 17 | 是 |
GroupID | int | 在其中激发 SQL 跟踪事件的工作负荷组的 ID。 | 66 | 是 |
3、探测数据库的连接名和密码、数据库id等
有时候我们使用数据库时不知道这个数据库的连接名和密码,有时还需要查看某个数据库的id(DatabaseID),这个时候我们就可以借助事件探测器来得到我们想要的数据。新建一个跟踪,然后执行一条sql语句,可以是客户端执行,也可以是企业管理器或查询分析器中执行。对应查看事件探测器中探测到的结果:LoginName:连接名(一般为sa)ClientProcessID:连接的密码(通常我们设置的是123)DatabaseID:数据库的id(需要我们在筛选列中添加这一列)