setSessionAttr()

语法

db.setSessionAttr ( )

设置会话属性。

参数描述

参数名参数类型描述是否必填
optionsJson 对象会话属性选项

options 格式

属性名描述格式
PreferedInstance会话读操作优先选择的实例,取值列表:”M”、”m”、”S”、”s”、”A”、”a”、1-255。可以使用数组指定多个取值。
“M”, “m”:可读写实例(主实例)
“S”, “s”:只读实例(备实例)
“A”, “a”:任意实例
1-255:通过 —instanceid 指定实例 ID 的实例。
PreferedInstance : “M”
PreferedInstance : [ 1, 10 ]
PreferedInstanceMode指定会话当多个实例符合 PreferedInstance 的条件时的选择模式。
“random”:从候选的实例中随机选择。
“ordered”:从候选的实例中按照 PerferedInstance 的顺序进行选择。
PreferedInstaceMode : “random”
PreferedStrict指定节点选择是否为严格模式,当为严格模式时,节点只能从 preferedinstance 指定的ID中选取PreferedStrict : true
Timeout指定会话执行操作的超时时间(单位:毫秒)。
-1 表示不进行超时检测。
最小值为 1000 毫秒。
Timeout : 10000
TransIsolation会话事务的隔离级别,0为RU级别,1为RC级别,2为RS级别。TransIsolation : 1
TransTimeout会话事务锁等待超时时间(单位:秒)。TransTimeout : 10
TransLockWait会话事务在RC隔离级别下是否需要等锁。TransLockWait : true
TransUseRBS会话事务是否使用回滚段。TransUseRBS : true
TransAutoCommit会话事务是否支持自动事务提交。TransAutoCommit : true
TransAutoRollback会话事务在操作失败时是否自动回滚。TransAutoRollback : true
TransRCCount会话事务是否使用读已提交来处理 count() 查询。TransRCCount : true

Note:

  • PreferedInstance 和 PreferedInstaceMode 的缺省值是协调节点配置中 —preferedinstance 和 —preferedinstancemode 的取值。
    • 协调节点配置 —preferedinstance 的默认值是 “M”,—preferedinstacemode 的默认值是 “random”。
    • 实例的 ID 可以通过数据节点的配置项 —instanceid 进行设置,同一个数据组中可以配置多个相同实例 ID 的数据节点。
    • 修改数据节点的配置项 —instanceid 不能动态生效,需要手工停启数据节点。重启之后也需要手工调用 Sdb.invalidateCache() 清空各个协调节点的缓存。
    • 如果多个 1-255 的实例和 “M” 一起指定,则满足指定实例中的主实例会优先选择;如果多个 1-255 的实例和 “M” 或 “m” 一起指定,则当没有满足指定的实例时选择主实例。如 [ 1, 2, “M” ] 表示优先从实例 1 和实例 2 中的主实例读取;如果不存在实例 1 和实例 2,则从主实例读取。
    • 如果多个 1-255 的实例和 “S” 一起指定,则满足指定实例中的备实例会被优先选择;如果多个 1-255 的实例和 “S” 或 “s” 一起指定,则当没有满足指定的实例时选择备实例。如 [ 1, 2, “S” ] 表示优先从实例 1 和实例 2 中的备实例读取;如果不存在实例 1 和实例 2,则从任意一个备实例读取。
    • 如果指定多个 “M”、”m”、”S”、”s”、”A”、”a” 实例,则只有第一个生效。
    • 如果没有符合 PreferedInstance 的实例,会话将随机选择使用上一次写操作的实例,即可读写(主)实例进行查询(如无写操作,则随机选取实例)。
    • 在节点配置了instanceid的情况下,按照instanceid进行获取。在节点没有配置instanceid的情况下,按照节点的nodeid在组内的排序序列(从1开始)作为instanceid来进行选取,例如 组 db1 中有3个节点 [ { NodeID:1001}, {NodeID:1004}, {NodeID:1002} ],那么其节点的 instanceid 分别为 1, 3, 2。如果指定的1-255的实例ID大于数据组内的节点总数,则实例ID对节点总数取模后在组内按照nodeid的排序顺序选取。
  • Timeout 的默认值是 -1,即不进行超时检测。
  • 事务相关属性只有 TransTimeout 允许在事务中设置,其它事务属性需要在非事务中设置。
  • 获取会话属性请参考 Sdb.getSessionAttr()

返回值

无返回值,出错抛异常,并输出错误信息,可以通过getLastErrMsg()获取错误信息或通过getLastError()获取错误码。

  • SDB_INVALIDARG( -6 ) options 属性的输入错误,请检查设置属性的值和范围等。

更多错误处理可以参考常见错误处理指南

示例

  • 设置会话优先从“主”数据库实例获取数据
  1. > db.setSessionAttr( { PreferedInstance: "M" } )
  • 设置会话优先从 1 和 3 的备实例读取数据
  1. > db.setSessionAttr( { PreferedInstance : [ 1, 3, "S" ] } )
  • 设置会话的操作超时时间为 10 秒
  1. > db.setSessionAttr( { Timeout : 10000 } )