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()和NE()操作符返回布尔值以指示比较结果,与此前缀一起使用。以下是字符集枚举常量:

    • 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。返回客户端发送给数据库服务器的身份验证包中指定的数据库名称。这是databasename属性。

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

  • MYSQL.REQ。操作一个MySQL请求。

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

    • 睡眠
    • 辞职
    • INIT_DB
    • 查询
    • FIELD_LIST
    • CREATE_DB
    • DROP_DB
    • 刷新
    • 关闭
    • 统计数据
    • PROCESS_INFO
    • 连接
    • PROCESS_KILL
    • 调试
    • 时间
    • 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方法类似于CONTENT_LENGTH方法,CONTENT_LENGTH方法返回HTTP请求或响应的长度。

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

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

    参数:

    n -返回字节数

  • MYSQL.RES。操作一个MySQL响应。

  • MYSQL.RES.ATLEAST_ROWS_COUNT(<我>)。检查响应是否至少有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(<我>)。标识对应于服务器响应中的ith个人字段的数据包。每个字段包描述相关列的属性。包计数(i)从0开始。

    参数:

    i -包号

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

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

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

    • 小数
    • 浮动
    • 时间戳
    • 龙龙的
    • INT24
    • 日期
    • 时间
    • DATETIME
    • 一年
    • NEWDATE
    • VARCHAR (MySQL 5.0新功能)
    • BIT (MySQL 5.0新增)
    • NEWDECIMAL (MySQL 5.0新功能)
    • 枚举
    • TINY_BLOB
    • MEDIUM_BLOB
    • LONG_BLOB
    • VAR_STRING
    • 字符串
    • 几何
  • MYSQL.RES.FIELD .DB(<我>)。返回字段包的数据库标识符(db)属性。

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

  • MYSQL.RES.FIELD .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 (< >) . length。返回列的长度。这是字段数据包的长度属性值。返回的值可能比实际值大。例如,VARCHAR(2)列的实例可能返回值2,即使它只包含一个字符。

  • 我MYSQL.RES.FIELD (< >) . name。返回列标识符(AS子句后面的名称,如果有的话)。这是字段包的name属性。

  • MYSQL.RES.FIELD .ORIGINAL_NAME(<我>)。返回原始列标识符(如果有的话,在AS子句之前)。字段报文的org_name属性。

  • MYSQL.RES.FIELD .ORIGINAL_TABLE(<我>)。返回列的原始表标识符(在AS子句之前,如果有的话)。字段报文的org_table属性。

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

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

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

  • MYSQL.RES.OK.AFFECTED_ROWS。返回受INSERT、UPDATE或DELETE查询影响的行数。这是OK包的affected_rows属性的值。

  • MYSQL.RES.OK.INSERT_ID。标识OK报文的unique_id属性。如果当前MySQL语句或查询没有生成自动递增标识,unique_id的值以及表达式返回的值为0。

  • MYSQL.RES.OK.MESSAGE。返回OK包的message属性。

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

    • 在事务
    • AUTO_COMMIT
    • 更多的结果
    • 多查询
    • 索引使用不当
    • 没有使用索引
    • 光标的存在
    • 最后一行
    • 数据库了
    • 没有反斜杠转义
  • MYSQL.RES.OK.WARNING_COUNT。返回OK包的warning_count属性。

  • MYSQL.RES.ROW(<我>)。标识对应于数据库服务器响应中的ith单个行的数据包。

    参数:

    i -行号

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

    参数:

    i -行号

    j -列号

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

    参数:

    i -行号

    j -列号

  • 我MYSQL.RES.ROW (< >) .NUM_ELEM(< >)。返回表中ith行的jth列的整数值。按照C的约定,索引i和j都从0开始。因此,第i行和第j列实际上分别是(i+1)th行和(j+1)th列。

    参数:

    i -行号

    j -列号

  • 我MYSQL.RES.ROW (< >) .TEXT_ELEM (j)。返回表中ith行的jth列的字符串。按照C的约定,索引i和j都从0开始。因此,第i行和第j列实际上分别是(i+1)th行和(j+1)th列。

    参数:

    i -行号

    j -列号

  • MYSQL.RES.TYPE。返回响应类型的枚举常量。取值为ERROR、OK和RESULT_SET。EQ()和NE()操作符返回布尔值以指示比较结果,与此前缀一起使用。

计算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 返回客户端数据库的名称。返回的值是text类型的。
MSSQL.CLIENT.USER 返回客户端通过身份验证的用户名。返回的值是text类型的。
MSSQL.REQ.COMMAND 返回一个枚举常量,用于标识发送到Microsoft SQL Server数据库服务器的请求中的命令类型。返回的值是text类型的。枚举常量的值示例有QUERY、RESPONSE、RPC和ATTENTION。EQ()和NE()操作符返回布尔值以指示比较结果,与此表达式一起使用。
MSSQL.REQ.QUERY.COMMAND 返回SQL查询中的第一个关键字。返回的值是text类型的。
MSSQL.REQ.QUERY.SIZE 返回请求中SQL查询的大小。返回值是一个数字。
MSSQL.REQ.QUERY.TEXT 以字符串形式返回整个SQL查询。返回的值是text类型的。
MSSQL.REQ.QUERY.TEXT (< n >) 返回SQL查询的前n个字节。返回的值是text类型的。参数说明: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行数。返回值为布尔值TRUE或false。参数说明如下:i -行数
MSSQL.RES.DONE.ROWCOUNT 返回受INSERT、UPDATE或DELETE查询影响的行数的计数。返回的值是unsigned long类型。
MSSQL.RES.DONE.STATUS 从Microsoft SQL Server数据库服务器发送的DONE令牌返回状态字段。返回值是一个数字。
MSSQL.RES.ERROR.MESSAGE 从Microsoft SQL Server数据库服务器发送的error令牌返回错误消息。这是ERROR令牌中MsgText字段的值。返回的值是text类型的。
MSSQL.RES.ERROR.NUM 从Microsoft SQL Server数据库服务器发送的error令牌返回错误号。这是ERROR令牌中Number字段的值。返回值是一个数字。
MSSQL.RES.ERROR.STATE 从Microsoft SQL Server数据库服务器发送的error令牌返回错误状态。这是ERROR令牌中State字段的值。返回值是一个数字。
MSSQL.RES.FIELD .DATATYPE(<我>) 返回服务器响应中第i个字段的数据类型。EQ()和NE()函数返回布尔值以指示比较结果,与此前缀一起使用。例如,如果DATATYPE函数为响应中的第三个字段返回datetime值,则下面的表达式将返回Boolean TRUE: MSSQL.RES.FIELD(<2>).DATATYPE.EQ(datetime)参数:i -行号
我MSSQL.RES.FIELD (< >) . length 返回服务器响应中第i个字段的最大可能长度。返回值是一个数字。参数说明:i -行号
我MSSQL.RES.FIELD (< >) . name 返回服务器响应中第i个字段的名称。返回的值是text类型的。参数说明:i -行号
我MSSQL.RES.ROW (< >) .DOUBLE_ELEM (< >) 返回表第i行第j列的double类型值。如果该值不是双精度值,则引发UNDEF条件。按照C的约定,索引i和j都从0(零)开始。因此,第i行和第j列实际上分别是第(i + 1)行和第(j + 1)列。参数说明如下:i -行号j -列号
我MSSQL.RES.ROW (< >) .NUM_ELEM (j) 返回表第i行第j列的整数值。如果该值不是整数值,则引发UNDEF条件。按照C的约定,索引i和j都从0(零)开始。因此,第i行和第j列实际上分别是第(i + 1)行和第(j + 1)列。参数说明如下:i -行号j -列号
我MSSQL.RES.ROW (< >) .IS_NULL_ELEM (j) 检查表的第i行第j列是否为NULL,并返回一个布尔值TRUE或FALSE来指示结果。按照C的约定,索引i和j都从0(零)开始。因此,第i行和第j列实际上分别是第(i + 1)行和第(j + 1)列。参数说明如下:i -行号j -列号
我MSSQL.RES.ROW (< >) .TEXT_ELEM (j) 返回表第i行第j列的文本字符串。按照C的约定,索引i和j都从0(零)开始。因此,第i行和第j列实际上分别是第(i + 1)行和第(j + 1)列。参数说明如下:i -行号j -列号
MSSQL.RES.TYPE 返回标识响应类型的枚举常量。以下是可能的返回值:ERROR、OK和RESULT_SET。EQ()和NE()操作符返回布尔值以指示比较结果,与此表达式一起使用。
高级策略表达式:DataStream