事件监视器自描述数据流

写入管道或文件的事件监视器会生成逻辑数据分组的二进制流;对于管道事件监视器和文件事件监视器,这些分组完全相同。可通过使用 db2evmon 命令或通过开发客户机应用程序来设置该数据流的格式。 此数据流显示为自描述格式。
图 1 显示数据流的结构,而 表 1 提供可能返回的逻辑数据组和监视元素的一些示例。
注: 在示例和表中,将对标识使用描述性名称。在实际数据流中,将在这些名称前加上 SQLM_ELM_ 前缀。例如,db_event 在事件监视器输出中显示为 SQLM_ELM_DB_EVENT。在实际数据流中,将在类型前加上 SQLM_TYPE_ 前缀。例如,HEADER 在数据流中将显示为 SQLM_TYPE_HEADER。
图 1. 管道或文件事件监视数据流
事件监视器自描述的数据流
  1. sqlm_event_log_data_stream_header 的结构与数据流中的其他头不同。版本字段确定是否能作为自描述数据流来处理输出。
    此头的大小和类型与 V6 之前的事件监视流的大小和类型相同。这允许应用程序确定事件监视器输出是自描述格式还是 V6 之前的静态格式。
    注: 将通过从数据流读取 sizeof(sqlm_event_log_data_stream) 字节来抽取此监视元素。
  2. 每个逻辑数据组以指示其大小和元素名称的头开始。因为大小元素包含哑元值以保留向后兼容性,所以这不适用于 event_log_stream_header。
  3. 头中的大小元素指示该逻辑数据组中的所有数据的大小。
  4. 监视元素信息在逻辑数据组头后面,并且也是自描述格式。

表 1. 样本事件数据流
逻辑数据组 数据流 描述
event_log_stream_header ┬►sqlm_little_endian 未使用(因为与前发行版的兼容性)。
├►200 未使用(因为与前发行版的兼容性)。
└►sqlm_dbmon_version9 返回数据的数据库管理器的版本。事件监视器以自描述格式写入数据。
log_header_event ┬►100 逻辑数据组的大小。
├►header 指示逻辑数据组的开头。
├►log_header 逻辑数据组的名称。
─►4 此监视元素中存储的数据的大小。
├►u32bit 监视元素类型 - 32 位数字。
├►byte_order 收集的监视元素的名称。
└►little_endian 此元素的已收集值。
┬►2 此监视元素中存储的数据的大小。
  ├►u16bit 监视元素类型 - 不带符号的 16 位数字。
  ├►codepage_id 收集的监视元素的名称。
  └►850 此元素的已收集值。
db_event ┬►100 逻辑数据组的大小。
├►header 指示逻辑数据组的开头。
├►db_event 逻辑数据组的名称。
─►4 此监视元素中存储的数据的大小。
  ├►u32bit 监视元素类型 - 不带符号的 32 位数字。
  ├►lock_waits 收集的监视元素的名称。
  └►2 此元素的已收集值。

event_log_stream_header 标识返回数据的数据库管理器的版本。事件监视器以自描述格式写入它们的数据。与快照监视器不同,事件监视器没有用来返回跟踪总大小的大小元素。event_log_stream_header 中显示的数字是为向后兼容性提供的哑元值。写入 event_log_stream_header 时,事件跟踪的总大小未知。通常可读取事件监视器跟踪直到文件或管道末尾。

日志头描述跟踪的特征,它包含各种信息,如在其中收集跟踪的服务器的内存模型(如小尾数法)和数据库的代码页。如果在其中读取跟踪的系统的内存模型与服务器的内存模型不同(例如,如果在 Windows 2000 系统上从 UNIX 服务器读取跟踪),那么您可能必须对数字值执行字节交换。如果配置数据库时使用的语言与在其中读取跟踪的机器使用的语言不同,那么可能还需要进行代码页转换。读取跟踪时,可使用大小元素来跳过跟踪中的逻辑数据组。