Citrix ADC

高级策略表达式:DataStream

Citrix ADC 设备上的策略基础结构包括表达式,可用于在应用程序服务器场及其关联的数据库服务器之间部署该设备时评估和处理数据库服务器流量。

本主题包括以下几个部分:

  • MySQL 协议的表达式
  • 用于评估 Microsoft SQL Server 连接的表达式

MySQL 协议的表达式

以下表达式评估与 MySQL 数据库服务器关联的流量。您可以在策略中使用基于请求的表达式(以 MYSQL.Client 和 MYSQL.REQ 开头的表达式)在内容交换虚拟服务器绑定点和基于响应的表达式(以 MYSQL.RES 开头的表达式)来评估服务器对用户的响应-配置的运行状况监视器。

  • MYSQL.CLIENT。对 MySQL 连接的客户端属性进行操作。

  • MYSQL.CLIENT.CAPABILITIES。返回身份验证期间客户端在握手初始化数据包的功能字段中设置的标志集。设置的标志示例有客户端 CLIENT_FOUND_ROWS, CLIENT_COMPRESS 和 CLIENT_SSL.。

  • MYSQL.CLIENT.CHAR_SET。返回分配给客户端使用的字符集的枚举常量。EQ(<m>) 和 NE(<m>) 运算符与此前缀一起使用,它们返回布尔值以指示比较结果。下面是字符集枚举常量:

    • LATIN2_CZECH_CS
    • DEC8_SWEDISH_CI
    • CP850_GENERAL_CI
    • GREEK_GENERAL_CI
    • LATIN1_GERMAN1_CI
    • HP8_ENGLISH_CI
    • KOI8R_GENERAL_CI
    • LATIN1_SWEDISH_CI
    • LATIN2_GENERAL_CI
    • SWE7_SWEDISH_CI
    • ASCII_GENERAL_CI
    • CP1251_BULGARIAN_CI
    • LATIN1_DANISH_CI
    • HEBREW_GENERAL_CI
    • LATIN7_ESTONIAN_CS
    • LATIN2_HUNGARIAN_CI
    • KOI8U_GENERAL_CI
    • CP1251_UKRAINIAN_CI
    • CP1250_GENERAL_CI
    • LATIN2_CROATIAN_CI
    • CP1257_LITHUANIAN_CI
    • LATIN5_TURKISH_CI
    • LATIN1_GERMAN2_CI
    • ARMSCII8_GENERAL_CI
    • UTF8_GENERAL_CI
    • CP1250_CZECH_CS
    • CP866_GENERAL_CI
    • KEYBCS2_GENERAL_CI
    • MACCE_GENERAL_CI
    • MACROMAN_GENERAL_CI
    • CP852_GENERAL_CI
    • LATIN7_GENERAL_CI
    • LATIN7_GENERAL_CS
    • MACCE_BIN
    • CP1250_CROATIAN_CI
    • LATIN1_BIN
    • LATIN1_GENERAL_CI
    • LATIN1_GENERAL_CS
    • CP1251_BIN
    • CP1251_GENERAL_CI
    • CP1251_GENERAL_CS
    • MACROMAN_BIN
    • CP1256_GENERAL_CI
    • CP1257_BIN
    • CP1257_GENERAL_CI
    • ARMSCII8_BIN
    • ASCII_BIN
    • CP1250_BIN
    • CP1256_BIN
    • CP866_BIN
    • DEC8_BIN
    • GREEK_BIN
    • HEBREW_BIN
    • HP8_BIN
    • KEYBCS2_BIN
    • KOI8R_BIN
    • KOI8U_BIN
    • LATIN2_BIN
    • LATIN5_BIN
    • LATIN7_BIN
    • CP850_BIN
    • CP852_BIN
    • SWE7_BIN
    • UTF8_BIN
    • GEOSTD8_GENERAL_CI
    • GEOSTD8_BIN
    • LATIN1_SPANISH_CI
    • UTF8_UNICODE_CI
    • UTF8_ICELANDIC_CI
    • UTF8_LATVIAN_CI
    • UTF8_ROMANIAN_CI
    • UTF8_SLOVENIAN_CI
    • UTF8_POLISH_CI
    • UTF8_ESTONIAN_CI
    • UTF8_SPANISH_CI
    • UTF8_SWEDISH_CI
    • UTF8_TURKISH_CI
    • UTF8_CZECH_CI
    • UTF8_DANISH_CI
    • UTF8_LITHUANIAN_CI
    • UTF8_SLOVAK_CI
    • UTF8_SPANISH2_CI
    • UTF8_ROMAN_CI
    • UTF8_PERSIAN_CI
    • UTF8_ESPERANTO_CI
    • UTF8_HUNGARIAN_CI
    • INVAL_CHARSET
  • MYSQL.CLIENT.DATABASE。返回客户端发送到数据库服务器的身份验证数据包中指定的数据库的名称。这是数据库名称属性。

  • MYSQL.CLIENT.USER. 返回客户端尝试连接到数据库的用户名(身份验证数据包中)。这是用户属性。

  • MSQL.REQ。在 MySQL 请求上运行。

  • MYSQL.REQ.COMMAND。标识分配给请求中命令类型的枚举常量。EQ(<m>) 和 NE(<m>) 运算符与此前缀一起使用,它们返回布尔值以指示比较结果。下面是枚举常量值:

    • SLEEP
    • QUIT
    • INIT_DB
    • QUERY
    • FIELD_LIST
    • CREATE_DB
    • DROP_DB
    • REFRESH
    • SHUTDOWN
    • STATISTICS
    • PROCESS_INFO
    • CONNECT
    • PROCESS_KILL
    • DEBUG
    • PING
    • TIME
    • DELAYED_INSERT
    • CHANGE_USER
    • BINLOG_DUMP
    • TABLE_DUMP
    • CONNECT_OUT
    • REGISTER_SLAVE
    • STMT_PREPARE
    • STMT_EXECUTE
    • STMT_SEND_LONG_DATA
    • STMT_CLOSE
    • STMT_RESET
    • SET_OPTION
    • STMT_FETCH
  • MYSQL.REQ.QUERY。标识 MySQL 请求中的查询。

  • MYSQL.REQ.QUERY.COMMAND。返回 MySQL 查询中的第一个关键字。

  • MYSQL.REQ.QUERY.SIZE。以整数格式返回请求查询的大小。SIZE 方法类似于返回 HTTP 请求或响应长度的内容 _LIGHT 方法。

  • MYSQL.REQ.QUERY.TEXT。返回覆盖整个查询的字符串。

  • MYSQL.REQ.QUERY.TEXT(<n>)。以字符串的形式返回 MySQL 查询的前 n 个字节。这与 HTTP.BODY(<n>))类似。

    参数:

    n-要返回的字节数

  • MYSQL.RES. 在 MySQL 响应上运行。

  • MYSQL.RES.ATLEAST_ROWS_COUNT(<i>)。检查响应是否至少有 i 行数,并返回布尔值 TRUE 或 FALSE 以指示结果。

    参数:

    i-行数

  • MYSQL.RES.ERROR。标识 MySQL 错误对象。错误对象包括错误编号和错误消息。

  • MYSQL.RES.ERROR.MESSAGE。返回从服务器的错误响应中检索的错误消息。

  • MYSQL.RES.ERROR.NUM. 返回从服务器的错误响应中检索的错误编号。

  • MYSQL.RES.ERROR.SQLSTATE。返回服务器错误响应中 SQLSTATE 字段的值。MySQL 服务器将错误编号值转换为 SQLSTATE 值。

  • MYSQL.RES.FIELD(<i>)。服务器响应中的 标识与第 i<sup> 个对应的数据包</sup> 单个字段。每个字段数据包描述关联列的属性。数据包计数 (i) 从 0 开始。

    参数:

    i-数据包编号

  • MYSQL.RES.FIELD(<i>).CATALOG。返回字段数据包的目录属性。

  • MYSQL.RES.FIELD(<i>).CHAR_SET。返回列的字符集。EQ(<m>) 和 NE(<m>) 运算符与此前缀一起使用,它们返回布尔值以指示比较结果。

  • MYSQL.RES.FIELD(<i>).DATATYPE。返回表示列数据类型的枚举常量。这是列的类型(也称为 enum_field_type)属性。EQ(<m>) 和 NE(<m>) 运算符与此前缀一起使用,它们返回布尔值以指示比较结果。各种数据类型的可能值为:

    • DECIMAL
    • TINY
    • SHORT
    • LONG
    • FLOAT
    • DOUBLE
    • NULL
    • TIMESTAMP
    • LONGLONG
    • INT24
    • DATE
    • TIME
    • DATETIME
    • YEAR
    • NEWDATE
    • VARCHAR (new in MySQL 5.0)
    • BIT (new in MySQL 5.0)
    • NEWDECIMAL (new in MySQL 5.0)
    • ENUM
    • SET
    • TINY_BLOB
    • MEDIUM_BLOB
    • LONG_BLOB
    • BLOB
    • VAR_STRING
    • STRING
    • GEOMETRY
  • MYSQL.RES.FIELD(<i>).DB。返回字段数据包的数据库标识符 (db) 属性。

  • MYSQL.RES.FIELD(<i>).DECIMALS。返回小数点后的位置数(如果类型为 DECIMAL 或 NUMERIC)。这是字段数据包的小数位属性。

  • MYSQL.RES.FIELD(<i>).FLAGS。返回字段数据包的 flags 属性。下面是可能的十六进制标志值:

    • 0001: NOT_NULL_FLAG
    • 0002: PRI_KEY_FLAG
    • 0004: UNIQUE_KEY_FLAG
    • 0008: MULTIPLE_KEY_FLAG
    • 0010: BLOB_FLAG
    • 0020: UNSIGNED_FLAG
    • 0040: ZEROFILL_FLAG
    • 0080: BINARY_FLAG
    • 0100: ENUM_FLAG
    • 0200: AUTO_INCREMENT_FLAG
    • 0400: TIMESTAMP_FLAG
    • 0800: SET_FLAG
  • MYSQL.RES.FIELD(<i>).LENGTH。返回列的长度。这是字段数据包的 length 属性的值。返回的值可能大于实际值。例如,VARCHAR (2) 列的实例可能返回值 2,即使它只包含一个字符。

  • MYSQL.RES.FIELD(<i>).NAME。返回列标识符(如果有的话,则为 as 子句后的名称)。这是字段数据包的名称属性。

  • MYSQL.RES.FIELD(<i>).ORIGINAL_NAME。返回原始列标识符(如果有的话,则在 as 子句之前)。这是字段数据包的 org_name 属性。

  • MYSQL.RES.FIELD(<i>).ORIGINAL_TABLE。返回列的原始表标识符(如果有的话,则在 as 子句之前)。这是字段数据包的 org_table 属性。

  • MYSQL.RES.FIELD(<i>).TABLE。返回列的表标识符(如果有的话,则在 as 子句之后)。这是字段数据包的表属性。

  • MYSQL.RES.FIELDS_COUNT。返回响应中的字段数据包数(OK 数据包的 field d_count 属性)。

  • MYSQL.RES.OK. 标识数据库服务器发送的 OK 数据包。

  • MYSQL.RES.OK.AFFECTED_ROWS。返回受插入、更新或删除查询影响的行数。这是确定数据包的受影响的 _rows 属性的值。

  • MYSQL.RES.OK.INSERT_ID。标识确定数据包的唯一 _id 属性。如果当前 MySQL 语句或查询不生成自动增量标识,则 unique_id 的值以及表达式返回的值为 0。

  • MYSQL.RES.OK.MESSAGE。返回确定数据包的消息属性。

  • MYSQL.RES.OK.STATUS。标识 OK 数据包的 server_status 属性中的位字符串。客户端可以使用服务器状态检查当前命令是否是正在运行的事务的一部分。server_status 位字符串中的位对应于以下字段(按给定顺序):

    • IN TRANSACTION
    • AUTO_COMMIT
    • MORE RESULTS
    • MULTI QUERY
    • BAD INDEX USED
    • NO INDEX USED
    • CURSOR EXISTS
    • LAST ROW SEEN
    • DATABASE DROPPED
    • NO BACKSLASH ESCAPES
  • MYSQL.RES.OK.WARNING_COUNT。返回确定数据包的警告计数属性。

  • MYSQL.RES.ROW(<i>)。 标识与第 i<sup> 个对应的数据包</sup> 数据库服务器响应中的单个行。

    参数:

    i - 行号

  • MYSQL.RES.ROW(<i>).DOUBLE_ELEM(<j>)。分别为 检查第 j<sup> 个</sup> 列中的第 i<sup>个</sup>表的第 行为 NULL。 遵循 C 约定,索引 i 和 j 都从 0 开始。 因此,行 i 和列 j 实际上是第 (i+1)<sup></sup> 行和第 (j+1)<sup></sup> 列。

    参数:

    i - 行号

    j - 列号

  • MYSQL.RES.ROW(<i>).IS_NULL_ELEM(j)。分别为 检查第 j<sup> 个</sup> 列中的第 i<sup>个</sup>表的第 行为 NULL。 遵循 C 约定,索引 i 和 j 都从 0 开始。 因此,行 i 和列 j 实际上是第 (i+1)<sup></sup> 行和第 (j+1)<sup></sup> 列。

    参数:

    i - 行号

    j - 列号

  • MYSQL.RES.ROW(<i>).NUM_ELEM(<j>)。分别为 从第 j<sup> 个返回一个整数值</sup> 列中的第 i<sup>个</sup>表的 行。 遵循 C 约定,索引 i 和 j 都从 0 开始。 因此,行 i 和列 j 实际上是第 (i+1)<sup></sup> 行和第 (j+1)<sup></sup> 列。

    参数:

    i - 行号

    j - 列号

  • MYSQL.RES.ROW(<i>).TEXT_ELEM(j)。分别为 返回从第 j<sup> 起的字符串</sup> 列中的第 i<sup>个</sup>表的 行。 遵循 C 约定,索引 i 和 j 都从 0 开始。 因此,行 i 和列 j 实际上是第 (i+1)<sup></sup> 行和第 (j+1)<sup></sup> 列。

    参数:

    i - 行号

    j - 列号

  • MYSQL.RES.TYPE。返回响应类型的枚举常量。它的值可以是错误、确定和结果集。EQ(<m>) 和 NE(<m>) 运算符与此前缀一起使用,它们返回布尔值以指示比较结果。

用于评估 Microsoft SQL Server 连接的表达式

以下表达式评估与 Microsoft SQL Server 数据库服务器关联的流量。您可以在策略中使用基于请求的表达式(以 MSSQL.Client 和 MSSQL.REQ 开头的表达式)在内容交换虚拟服务器绑定点和基于响应的表达式(以 MSSQL.RES 开头的表达式)来评估服务器对用户的响应-配置的运行状况监视器。

表达式 说明
MSSQL.CLIENT.CAPABILITIES 以 4 字节整数的顺序返回 LOGIN7authentication 数据包的 OptionFlags1、OptionFlags2、OptionFlags3 和 TypeFlags 字段。每个字段长度为 1 字节,并指定一组客户端功能。
MSSQL.CLIENT.DATABASE 返回客户端数据库的名称。返回的值为文本类型。
MSSQL.CLIENT.USER 返回用于对客户端进行身份验证的用户名。返回的值为文本类型。
MSSQL.REQ.COMMAND 返回枚举常量,该常量标识发送到 Microsoft SQL Server 数据库服务器的请求中的命令类型。返回的值为文本类型。枚举常量值的示例是查询、响应、RPC 和注意事项。EQ(<m>) 和 NE(<m>) 运算符与此表达式一起使用,它们返回布尔值以指示比较结果。
MSSQL.REQ.QUERY.COMMAND 返回 SQL 查询中的第一个关键字。返回的值为文本类型。
MSSQL.REQ.QUERY.SIZE 返回请求中 SQL 查询的大小。返回的值是一个数字。
MSSQL.REQ.QUERY.TEXT 以字符串形式返回整个 SQL 查询。返回的值为文本类型。
MSSQL.REQ.QUERY.TEXT(<n>) 返回 SQL 查询的前 n 个字节。返回的值为文本类型。参数:n-字节数
MSSQL.REQ.RPC.NAME 返回正在远程过程调用 (RPC) 请求中调用的过程的名称。该名称以字符串的形式返回。
MSSQL.REQ.RPC.IS_PROCID 返回一个布尔值,该值指示远程过程调用 (RPC) 请求是包含过程 ID 还是 RPC 名称。返回值 True表示请求包含过程 ID,返回值 FALSE 表示请求包含 RPC 名称。
MSSQL.REQ.RPC.PROCID 以整数形式返回远程过程调用 (RPC) 请求的过程 ID。
MSSQL.REQ.RPC.BODY 注意: 不适用于 10.1 之前的版本。 以字符串的形式返回 SQL 请求的主体,表示为“a=b”子句,其中“a”是 RPC 参数名称,“b”是其值。
MSSQL.REQ.RPC.BODY(n) 注意: 不适用于 10.1 之前的版本。 返回 SQL 请求正文的一部分,以参数形式表示为“a=b”子句,其中“a”是 RPC 参数名称,“b”是其值。参数仅从请求的第一个“n”字节返回,跳过 SQL 标头。仅返回完整的名称-值对。
MSSQL.RES.ATLEAST_ROWS_COUNT(i) 检查响应是否至少有 i 行数。返回的值是布尔值 TRUE 或假值。参数:i-行数
MSSQL.RES.DONE.ROWCOUNT 返回受插入、更新或删除查询影响的行数计数。返回的值为无符号长度类型。
MSSQL.RES.DONE.STATUS 从 Microsoft SQL Server 数据库服务器发送的完成令牌返回状态字段。返回的值是一个数字。
MSSQL.RES.ERROR.MESSAGE 从 Microsoft SQL Server 数据库服务器发送的错误令牌返回错误消息。这是错误令牌中的 msgText 字段的值。返回的值为文本类型。
MSSQL.RES.ERROR.NUM 从 Microsoft SQL Server 数据库服务器发送的错误令牌返回错误编号。这是错误令牌中的数字字段的值。返回的值是一个数字。
MSSQL.RES.ERROR.STATE 从 Microsoft SQL Server 数据库服务器发送的错误令牌返回错误状态。这是 ERROR 令牌中的状态字段的值。返回的值是一个数字。
MSSQL.RES.FIELD(<i>).DATATYPE 返回服务器响应中第 i 个字段的数据类型。EQ (<m>) 和 NE (<m>) 函数与此前缀一起使用,它们返回布尔值以指示比较结果。例如,如果数据类型函数返回响应中的第三个字段的日期时间值,以下表达式返回布尔值 TRUE:MSSQL.RES.FIELD(<2>).DATATYPE.EQ(datetime) Parameters: i - Row number
MSSQL.RES.FIELD(<i>).LENGTH 返回服务器响应中第 i 个字段的最大可能长度。返回的值是一个数字。参数:i-行号
MSSQL.RES.FIELD(<i>).NAME 返回服务器响应中第 i 个字段的名称。返回的值为文本类型。参数:i-行号
MSSQL.RES.ROW(<i>).DOUBLE_ELEM(<j>) 从表的第 i 行的第 j 列返回一个双精度类型的值。如果该值不是双精度值,则会引发一个 UnDF 条件。遵循 C 约定,索引 i 和 j 都从 0(零)开始。因此,行 i 和列 j 实际上分别是 (i + 1) 第一行和 (j + 1) 第一列。参数:i-行号 j-列号
MSSQL.RES.ROW(<i>).NUM_ELEM(j) 从表中第 i 行的第 j 列返回一个整数值。如果该值不是整数值,则会引发一个 INDF 条件。遵循 C 约定,索引 i 和 j 都从 0(零)开始。因此,行 i 和列 j 实际上分别是 (i + 1) 第一行和 (j + 1) 第一列。参数:i-行号 j-列号
MSSQL.RES.ROW(<i>).IS_NULL_ELEM(j) 检查表第 i 行的第 j 列是否为 NULL,并返回布尔值 TRUE 或 FALSE 以指示结果。遵循 C 约定,索引 i 和 j 都从 0(零)开始。因此,行 i 和列 j 实际上分别是 (i + 1) 第一行和 (j + 1) 第一列。参数:i-行号 j-列号
MSSQL.RES.ROW(<i>).TEXT_ELEM(j) 从表格第 i 行的第 j 列返回一个文本字符串。遵循 C 约定,索引 i 和 j 都从 0(零)开始。因此,行 i 和列 j 实际上分别是 (i + 1) 第一行和 (j + 1) 第一列。参数:i-行号 j-列号
MSSQL.RES.TYPE 返回用于标识响应类型的枚举常量。下面是可能的返回值:错误、确定和结果集。EQ(<m>) 和 NE(<m>) 运算符与此表达式一起使用,它们返回布尔值以指示比较结果。

高级策略表达式:DataStream