ADC

高级策略表达式:DataStream

NetScaler 设备上的策略基础架构包括表达式,当设备部署在应用程序服务器群与其关联的数据库服务器之间时,您可以使用这些表达式来评估和处理数据库服务器流量。

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

  • 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。返回客户端尝试连接到数据库的用户名(在身份验证数据包中)。这是用户属性。

  • MYSQL.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
    • 调试
    • 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 请求或响应长度的 CONTENT_LENGTH 方法。

  • 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>th 对应的数据包</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(MySQL 5.0 中的新增内容)
    • BIT(MySQL 5.0 中的新增内容)
    • NEWDECIMAL(MySQL 5.0 中新增)
    • ENUM
    • SET
    • TINY_BLOB
    • MEDIUM_BLOB
    • LONG_BLOB
    • BLOB
    • VAR_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. 返回列的长度。这是字段数据包的长度属性的值。返回的值可能大于实际值。例如,即使列仅包含一个字符,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_count 属性)。

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

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

  • MYSQL.RES.OK.INSERT_ID。识别 OK 数据包的 unique_id 属性。如果当前 MySQL 语句或查询未生成自动增量身份,则 unique_id 的值以及表达式返回的值均为 0。

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

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

    • IN TRANSACTION
    • AUTO_COMMIT
    • 更多结果
    • MULTI QUERY
    • BAD INDEX USED
    • NO INDEX USED
    • 游标存在
    • LAST ROW SEEN
    • DATABASE DROPPED
    • 没有反斜杠转义符
  • MYSQL.RES.OK.WARNING_COUNT。返回 OK 数据包的 warning_count 属性。

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

    参数:

    i - 行号

  • MYSQL.RES.ROW(<i>).DOUBLE_ELEM(<j>). 检查表的 i<sup>th</sup> 行的 j<sup>th</sup> 列是否为 NULL。按照 C 惯例,索引 i 和 j 都从 0 开始。因此,i 行和 j 列实际上分别是 (i+1)<sup>th</sup> 行和 (j+1)<sup>th</sup> 列。

    参数:

    i - 行号

    j - 列号

  • MYSQL.RES.ROW(<i>).IS_NULL_ELEM(j). 检查表的 i<sup>th</sup> 行的 j<sup>th</sup> 列是否为 NULL。按照 C 惯例,索引 i 和 j 都从 0 开始。因此,i 行和 j 列实际上分别是 (i+1)<sup>th</sup> 行和 (j+1)<sup>th</sup> 列。

    参数:

    i - 行号

    j - 列号

  • MYSQL.RES.ROW(<i>).NUM_ELEM(<j>). 返回表的 i<sup>th</sup> 行的 j<sup>th</sup> 列。按照 C 惯例,索引 i 和 j 都从 0 开始。因此,i 行和 j 列实际上分别是 (i+1)<sup>th</sup> 行和 (j+1)<sup>th</sup> 列。

    参数:

    i - 行号

    j - 列号

  • MYSQL.RES.ROW(<i>).TEXT_ELEM(j). 返回来自表的 i<sup>th</sup> 行的 j<sup>th</sup> 列。按照 C 惯例,索引 i 和 j 都从 0 开始。因此,i 行和 j 列实际上分别是 (i+1)<sup>th</sup> 行和 (j+1)<sup>th</sup> 列。

    参数:

    i - 行号

    j - 列号

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

用于评估 Microsoft SQL 服务器连接的表达式

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

表达式 说明
MSSQL.CLIENT.CAPABILITIES 以 4 字节整数的形式按顺序返回 Login7Authentication 数据包的 optionFlags1、optionFlags2、optionFlags3 和 TypeFlags 字段。每个字段的长度为 1 字节,用于指定一组客户端功能。
MSSQL.CLIENT.DABASE 返回客户端数据库的名称。返回的值类型为文本。
MSSQL.CLIENT.USER 返回客户端进行身份验证时使用的用户名。返回的值类型为文本。
MSSQL.REQ.COMMAND 返回一个枚举常量,该常量标识发送到 Microsoft SQL Server 数据库服务器的请求中的命令类型。返回的值类型为文本。枚举常量值的示例有 QUERY、RESPONSE、RPC 和注意。EQ() 和 NE() 运算符在此表达式中使用,返回布尔值以表示比较结果。
MSSQL.REQ.QUERY.COMMAND 返回 SQL 查询中的第一个关键字。返回的值类型为文本。
MSSQL.REQ.QUERY.SIZE 返回请求中 SQL 查询的大小。返回的值是一个数字。
MSSQL.REQ.QUERY.TEXT 以字符串形式返回整个 SQL 查询。返回的值类型为文本。
MSSQL.REQ.QUERY.TEXT() 返回 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 或 falseValue。参数:i-行数
MSSQL.RES.DONE.ROWCOUNT 返回受 INSERT、UPDATE 或 DELETE 查询影响的行数的计数。返回的值类型为无符号长整型。
MSSQL.RES.DONE.STATUS 返回 Microsoft SQL Server 数据库服务器发送的 DONE 令牌中的状态字段。返回的值是一个数字。
MSSQL.RES.ERROR.MESSAGE 返回来自 Microsoft SQL Server 数据库服务器发送的错误令牌的错误消息。这是 ERROR 令牌中 msgText 字段的值。返回的值类型为文本。
MSSQL.RES.ERROR.NUM 返回 Microsoft SQL Server 数据库服务器发送的错误令牌中的错误编号。这是 ERROR 令牌中“数字”字段的值。返回的值是一个数字。
MSSQL.RES.ERROR.STATE 返回 Microsoft SQL Server 数据库服务器发送的错误令牌中的错误状态。这是 ERROR 令牌中“状态”字段的值。返回的值是一个数字。
MSSQL.RES.FIELD().DATATYPE 返回服务器响应中第 i 个字段的数据类型。EQ() 和 NE() 函数与此前缀一起使用,返回布尔值以表示比较结果。例如,如果 DATATYPE 函数返回响应中第三个字段的日期时间值,则以下表达式返回布尔值 TRUE:MSSQL.RES.FIELD (<2>) .DATATYPE.EQ (datetime) 参数:i-行号
MSSQL.RES.FIELD().LENGTH 返回服务器响应中第 i 个字段的最大可能长度。返回的值是一个数字。参数:i-行号
MSSQL.RES.FIELD().NAME 返回服务器响应中第 i 个字段的名称。返回的值类型为文本。参数:i-行号
MSSQL.RES.ROW().DOUBLE_ELEM() 从表第 i 行的第 j 列返回类型为 double 的值。如果该值不是双精度值,则引发 UNDEF 条件。按照 C 惯例,索引 i 和 j 都从 0(零)开始。因此,第 i 行和列 j 实际上分别是第 (i + 1) 行和 (j + 1) 第 4 列。参数:i-行号 j-列号
MSSQL.RES.ROW().NUM_ELEM(j) 返回表第 i 行第 j 列的整数值。如果该值不是整数值,则引发 UNDEF 条件。按照 C 惯例,索引 i 和 j 都从 0(零)开始。因此,第 i 行和列 j 实际上分别是第 (i + 1) 行和 (j + 1) 第 4 列。参数:i-行号 j-列号
MSSQL.RES.ROW().IS_NULL_ELEM(j) 检查表第 i 行的第 j 列是否为 NULL,并返回布尔值 TRUE 或 FALSE 来表示结果。按照 C 惯例,索引 i 和 j 都从 0(零)开始。因此,第 i 行和列 j 实际上分别是第 (i + 1) 行和 (j + 1) 第 4 列。参数:i-行号 j-列号
MSSQL.RES.ROW().TEXT_ELEM(j) 返回表第 i 行的第 j 列的文本字符串。按照 C 惯例,索引 i 和 j 都从 0(零)开始。因此,第 i 行和列 j 实际上分别是第 (i + 1) 行和 (j + 1) 第 4 列。参数:i-行号 j-列号
MSSQL.RES.TYPE 返回标识响应类型的枚举常量。以下是可能的返回值:ERROR、OK 和 RESULT_SET。EQ() 和 NE() 运算符在此表达式中使用,返回布尔值以表示比较结果。
高级策略表达式:DataStream