远程Sybase数据库技术支持,联系手机:13811580958,QQ:289965371!

 

随着Sybase被完全整合到SAP下,Sybase原来的支持网站被SAP Support Portal取代。
只有购买了SAP服务的用户才能使用账号登录SAP Support Portal进行介质下载、补丁升级、报Incident等。
目前,原Sybase所有产品(包括:Adaptive Server Enterprise、Sybase IQ、Replication Server、PowerDesigner等)的官方手册仍然可以从http://infocenter.sybase.com/help/index.jsp进行浏览或下载。暂不清楚该网站http://infocenter.sybase.com/help/index.jsp何时会被完全迁移到SAP Support上!
Sybase官方手册英文版有html和pdf两种格式,而中文版手册只有pdf一种格式。为了国内Sybase用户更方便、快捷地搜索Sybase常见产品的官方手册内容,特将中文版Sybase官方手册转为html格式!
Sybase产品官方手册中文版的html格式所有内容的版权归SAP公司所有!本博客站长是Sybase数据库的铁杆粉丝!

如有Sybase数据库技术问题需要咨询,请联系我!

  QQ :289965371 点击这里给我发消息
  Email:

以下官方手册为ASE 15.7 ESD#2中文版:

  1. 新增功能公告 适用于 Windows、Linux 和 UNIX 的 Open Server 15.7 和 SDK 15.7
  2. 新增功能摘要
  3. 新增功能指南
  4. ASE 15.7 发行公告
  5. 配置指南(windows)
  6. 安装指南(windows)
  7. 参考手册:构件块
  8. 参考手册:命令
  9. 参考手册:过程
  10. 参考手册:表
  11. Transact-SQL® 用户指南
  12. 系统管理指南,卷 1
  13. 系统管理指南,卷 2
  14. 性能和调优系列:基础知识
  15. 性能和调优系列:锁定和并发控制
  16. 性能和调优系列:监控表
  17. 性能和调优系列:物理数据库调优
  18. 性能和调优系列:查询处理和抽象计划
  19. 性能和调优系列:使用 sp_sysmon 监控 Adaptive Server
  20. 性能和调优系列:利用统计分析改进性能
  21. 程序员参考 jConnect for JDBC 7.0.7
  22. Adaptive Server Enterprise 中的 Java
  23. 组件集成服务用户指南
  24. Ribo 用户指南
  25. 内存数据库用户指南
  26. Sybase Control Center for Adaptive Server® Enterprise
  27. 安全性管理指南
  28. 实用程序指南

 


< 上一个 | 内容 | 下一步 >

set

说明 在用户的工作会话期间设置 Adaptive Server 查询处理选项;在触发器或 存储过程内设置某些选项。

语法 set advanced_aggregation on/off

set @variable = expression [, @variable = expression...] set ansinull {on | off}

set ansi_permissions {on | off}

set arithabort [arith_overflow | numeric_truncation] {on | off} set arithignore [arith_overflow] {on | off}

set bulk array size number

set bulk batch size number

set builtin_date_strings number

set {chained, close on endtran, nocount, noexec, parseonly, self_recursion, showplan, sort_resources} {on | off}

set char_convert {off | on [with {error | no_error}] |

charset [with {error | no_error}]} set cis_rpc_handling {on | off}

set [clientname client_name | clienthostname host_name

| clientapplname application_name] set compression {on | off | default}

set cursor rows number for cursor_name

set {datefirst number, dateformat format, language language} set delayed_commit {on | off | default}

set deferred_name_resolution { on | off } set dml_logging {minimal | default}

set encryption passwd 'password_phrase'

for {key | column} {keyname | column_name} set export_options [on | off]

set fipsflagger {on | off} set flushmessage {on | off} set fmtonly {on | off}

set forceplan {on | off}

set identity_insert [database.[owner.]]table_name {on | off} set identity_update table_name {on | off}

set index_union on | off


set literal_autoparam on | off

set lock {wait [numsecs] | nowait} set logbulkcopy {on | off }

set materialized_view_optimization {disable | fresh | stale} set metrics_capture on | off

set mon_stateful_history on | off set nodata

set offsets {select, from, order, compute, table, procedure, statement, param, execute} {on | off}

set option show

set opttimeoutlimit

set parallel_degree number

set plan {dump | load} [group_name] {on | off} set plan exists check {on | off}

set plan for show

set plan optgoal {allrows_oltp | allrows_mix | allrows_dss | user_defined_goal_identifier}

set plan optlevel value

set plan opttimeoutlimit number

set plan replace {on | off} set prefetch [on|off]

set print_minlogged_mode_override set proc_output_params {on | off} set proc_return_status {on | off}

set process_limit_action {abort | quiet | warning} set proxy login_name

set quoted_identifier {on | off} set repartition_degree number set repthreshold number

set resource_granularity number

set role {"sa_role" | "sso_role" | "oper_role" |

role_name [with passwd "password"]} {on | off} set {rowcount number, textsize number}

set scan_parallel_degree number

set send_locator {on | off }


set session authorization login_name

set switch [serverwide] {on | off} trace_flag ,[trace_flag,] [with option [, option] set show_exec_info ["on" | "off"]

set show_permission_source ["on" | "off" ] set show_permission_source, {on|off}

set show_sqltext {on | off}

set show_transformed_sql, {on|off} set statement_cache on | off

set statistics {io, subquerycache, time, plancost} {on | off} set statistics simulate {on | off}

set strict_dtm_enforcement {on | off} set string_rtruncation {on | off}

set system_view {instance | cluster | clear} set textsize {number}

set tracefile [filename] [off] [for spid]

set transaction isolation level { [read uncommitted | 0] | [read committed | 1] | [repeatable read | 2] | [serializable | 3]}

set transactional_rpc {on | off}

参数 set advanced_aggregation

在会话级别启用和禁用高级集合。

set @variable = expression

允许在一个语句中对多个变量赋值。set @variable = expression 命令与

Transact-SQL 中的 select @variable = expression 相同 (其替代方法)。

expression 可以是常量、函数、常量的任意组合以及由算术运算符或 逐位运算符连接的函数,也可以是子查询。

set ansinull {on | off} 影响集合行为和比较行为。有关集合行为和比较行为的详细信息,请 参见 628 页的 “集合行为

set ansi_permissions {on | off}

决定是否检查 delete update 语句的 ANSI SQL 权限要求。缺省值是

off 1-30 总结了权限要求:


1-30: update delete 所需的权限


命令

set ansi_permissions 的权限要求:

Off

On

update

针对要设置值的列的 update

权限

针对要设置值的列的 update 权限

针对出现在 where 子句中的所有列的 select 权限

针对set 子句右侧的所有列的 select 权限

delete

表的 delete 权限

表的 delete 权限

针对出现在 where 子句中的所有列的 select 权限


set arithabort [arith_overflow | numeric_truncation] {on | off}

决定出现算术错误时, Adaptive Server 如何工作。两个 arithabort 选项

arithabort arith_overflow arithabort numeric_truncation)可处理不同类 型的算术错误。您可以单独地设置每一个选项,或者用单个的 set arithabort on set arithabort off 语句来设置这两个选项。

arithabort arith_overflow – 指定在出现被零除错误、在显式或隐式 数据类型转换过程中出现范围溢出错误或出现域错误后 Adaptive Server 的行为。这种类型的错误是很严重的。缺省设置为 arithabort arith_overflow on,它将回退发生错误的整个事务。如果 错误发生在不包含事务的批处理中,则 arithabort arith_overflow on 不回退批处理中以前的命令,但 Adaptive Server 也不执行批处理 中生成错误的语句之后的任何语句。

arith_overflow 设置为 on 指的是执行时间,而不是指将 Adaptive Server 设置成的规范化级别。

如果设置了 arithabort arith_overflow offAdaptive Server 将中止导致 错误的语句,但会继续处理事务或批处理中的其它语句。

arithabort numeric_truncation – 指定精确数值类型在隐式数据类型 转换过程中发生标度损失后 Adaptive Server 的行为。(当显式转 换导致标度损失时,将截断结果而不发出任何警告。)缺省设置 arithabort numeric_truncation on 将中止导致错误的语句,但 Adaptive Server 会继续处理事务或批处理中的其它语句。如果设 置了 arithabort numeric_truncation offAdaptive Server 就会截断查询 结果并继续进行处理。

set arithignore [arith_overflow] {on | off} 确定在出现被零除错误或精度损失后 Adaptive Server 是否显示消息。 缺省情况下,将 arithignore 选项设置为 off。这会使 Adaptive Server 在 任何导致数字溢出的查询之后显示警告消息。若要使 Adaptive Server 忽略溢出错误,请使用 set arithignore on。忽略可选的 arith_overflow 关 键字不会有任何影响。


set bulk array size number 建立在使用批量复制接口传送之前在本地服务器内存中放入缓冲区的 行数。

请将此选项仅与 CIS 一起使用,以通过 select into 将行传送到远程服 务器。

可使用 @@bulkarraysize 全局变量查看当前设置。

number – 指示放入缓冲区的行数。如果传送的行包含 textunitextimage java ADT,则批量复制接口将忽略数组大小的当前设置,而 使用值 1。同时,实际使用的数组大小不应超过 @@bulkbatchzise 的 值。如果 @@bulkbatchsize 的值小于数组大小,则使用较小的值。

新连接将继承来自配置属性 cis bulk insert array size 当前设置的初始数 组大小,缺省值为 50。将此值设置为 0 将其重设为缺省值。

set bulk batch size number

建立使用批量接口时通过 select into proxy_table 传送到远程服务器的行 数。批量接口适用于所有 Adaptive Server,就像 DirectConnect 适用于 Oracle 版本 12.5.1 一样。

请将此选项仅与 CIS 一起使用,以通过 select into 将行传送到远程服 务器。

可使用 @@bulkbatchsize 全局变量查看当前设置。

批量接口允许在传送指定的行数之后执行 commit。这样远程服务器就 可以释放由批量传送操作占用的任何日志空间,并可启用在两个服务 器之间的大数据组的传送,而不会填满事务日志。

新连接将继承来自配置属性 cis bulk insert batch size 当前设置的初始批 处理大小,缺省值为 0。值为 0 表示传送完所有行之前不应该提交任 何行。

set builtin_date_strings number 如果给定的字符串作为参数代替按时间顺序的值,则服务器会将其解 释为 datetime 值 (而不考虑其外观精度)。这是缺省行为,由 builtin_date_strings 0 表示。

如果将 builtin_date_strings 的值更改为 1,服务器会将参数字符串解释 为 bigdatetime。这将影响按时间顺序的 builtin 的结果。


set {chained, close on endtran, nocount, noexec, parseonly, self_recursion, showplan, sort_resources} {on | off}

chained – 恰好在会话起点的第一个数据检索或数据修改语句之

前,以及在事务结束之后开始事务。在链式模式中, Adaptive Server 在下列语句之前会隐式执行一个 begin transaction 命令: deletefetchinsertlock tableopenselect update。不能在事 务中执行 set chained

close on endtran – 导致 Adaptive Server 在事务结束时关闭该事务 内所有打开的游标。可使用 commit rollback 语句结束事务。不 过,仅影响在设置此选项 (存储过程、触发器等等)的范围内声 明的游标。有关游标范围的详细信息,请参见 《Transact-SQL 用 户指南》。

有关已评估配置的详细信息,请参见 《系统管理指南》。

nocount – 控制受语句影响的行的显示。set nocount on 禁用行的显 示;set nocount off 重新启用行计数。

noexec – 编译每个查询但不执行。noexec 通常与 showplan 一起使 用。设置 noexec on 之后,不执行任何后续命令 (包括其它 set 命 令),直到设置 noexec off 为止。

parseonly – 检查每个查询的语法并返回所有错误消息,但不编译 或执行查询。不在存储过程或触发器内使用 parseonly

self_recursion – 确定 Adaptive Server 是否允许触发器再次自行引发

(这称为 自递归)。缺省情况下, Adaptive Server 不允许触发器自 递归。可以仅在当前客户端会话期间打开此选项,其作用受设置 此选项的触发器的范围的限制。例如,如果设置了 self_recursion on 的触发器返回或引起其它触发器引发,则此选项将还原为 off。 此选项仅能在触发器内工作,对用户会话没有影响。

showplan – 生成查询处理计划的说明。 showplan 的结果在性能诊 断中是有用的。在存储过程或触发器中使用时 showplan 不输出结 果。对于并行查询, showplan 还输出运行时调整的查询计划 (如 果适用)。请参见 《性能和调优指南》。

sort_resources – 生成 create index 语句的排序计划的说明。 sort_resources 的结果在决定排序操作是串行还是并行时非常有 用。当 sort_resouces on 时, Adaptive Server 会输出排序计划, 但不会执行 create index 语句。请参见 《性能和调优指南》中的 “并行排序”。


set char_convert {off | on [with {error | no_error}] | charset [with {error | no_error}]} 启用或禁用 Adaptive Server 和客户端之间的字符集转换。如果客户端 使用 Open Client DB-Library 版本 4.6 或更高版本,而客户端和服务器 使用不同的字符集,则登录进程中会打开转换,并基于客户端使用的 字符集将转换设置为缺省值。也可以使用 set char_convert charset 启动 服务器字符集和不同的客户端字符集之间的转换。

charset 可以是 syscharsets type 值小于 2000 的字符集 ID 或名称。

set char_convert off 会关闭转换,这样发送和接收字符时都不会进行转 换。若转换已关闭,则 set char_convert on 会打开转换。如果字符集转 换未在登录进程中打开,也未通过 set char_convert 命令打开,则 set char_convert on 会生成一条错误消息。

如果请求使用 set char_convert charset 进行字符集转换,而 Adaptive Server 不能执行请求的转换,则转换状态与请求前的转换状态保持一 致。例如,如果在 set char_convert charset 命令之前将转换设置为 off, 则如果请求失败,转换仍然是关闭的。

当包含了 with no_error 选项时,如果来自 Adaptive Server 的字符不能 转换为客户端的字符集时, Adaptive Server 不会通知应用程序。当客 户端与 Adaptive Server 连接时,错误报告最初是打开的:如果您不需 要错误报告,就必须使用 set char_convert {on | charset} with no_error 关 闭每个会话的错误报告。若要在会话内打开已关闭的错误报告,请使 用 set char_convert {on | charset} with error

无论错误报告是否打开,不可转换的字节都会替换为 ASCII 问号 (?)。 有关字符集转换中的错误处理的详细信息,请参见 《系统管理指南》。

set cis_rpc_handling {on | off}

CIS 设为集群环境中用于处理 RPC 的缺省机制。


set [clientname client_name | clienthostname host_name | clientapplname

application_name]

为客户端指派名称。

clientname client_name – 为客户端指派单独的名称。在一个系统 中,多个客户端使用相同的客户端名称与 Adaptive Server 连接 时,该命令对区分这些客户端是有用的。为用户指派新名称后, 这些客户端会以此新名称显示在 sysprocesses 表中。

client_name 是指派给用户的新名称。

clienthostname host_name – 为主机指派单独的名称。在一个系统 中,多个客户端使用相同的主机名与 Adaptive Server 连接时,该 命令对区分这些客户端是有用的。为主机指派一个新名称后,它 会以此新名称显示在 sysprocesses 表中。

host_name 是指派给主机的新名称。

clientapplname application_name – 为应用程序指派单独的名称。在 一个系统中,多个客户端使用相同的应用程序名与 Adaptive Server 连接时,该命令对区分这些客户端是有用的。为应用程序 指派一个新名称后,它会以此新名称显示在 sysprocesses 表中。

application_name 是指派给应用程序的新名称。


set compression {on | off | default}

针对会话启用或禁用压缩:

on – 对配置了压缩的表和分区的新数据启用数据压缩。Adaptive Server 会压缩所有符合条件的行。

off – 插入并更新所有未压缩的新数据。触发页压缩的插入会忽 略未压缩的行。更新的行会保持不压缩。在 update 期间压缩的解 压缩行 (作为 uncompressed 插入的行会保持不压缩,直到显式 指定压缩为止)。

default – 将压缩级别重新设置为缺省设置 (插入和更新是根据表 或分区设置进行压缩的)。


image

注释 与大多数 set 参数不同,如果您在嵌套过程中发出 set compression 之前执行 set export_optionsAdaptive Server does 就不 会将压缩级别导出到父过程的上下文中。

image


set cursor rows number for cursor_name

导致 Adaptive Server 为客户端应用程序中的每个游标的 fetch请求返回 number 行。 number 可以是无小数点的数值文字,也可以是 integer 类 型的局部变量。如果 number 小于或等于零,则将此值设置为 1。您可 以为游标设置 cursor rows 选项,无论它是打开的还是关闭的。不过, 此选项不影响包含 into 子句的 fetch 请求。 cursor_name 指定要为其设 置 返回的行数的游标。


set {datefirst number, dateformat format, language language}

指定下列设置:

datefirst number – 使用数值设置指定一周的第一天。us_english 语 言中该缺省值为 Sunday。若要设置一周的第一天,请使用下面的 设置:


将一周的第一天设置为

使用设置

Monday

1

Tuesday

2

Wednesday

3

Thursday

4

Friday

5

Saturday

6

Sunday us_english 语言中的缺省值)

7


image

注释 无论您将哪一天设置为一周的第一天,这天的值都为 1。 该值与您在 set datefirst n 中使用的数值设置不同。例如,如果将 “Sunday”设置为一周的第一天,则其值为 1。如果将 “Monday”设置为一周的第一天,则 “Monday”的值变为 1。 如果将 “Wednesday”设置为一周的第一天,则 “Wednesday” 的值变为 1,依此类推。

image


dateformat format – 设置输入 datetimesmalldatetimedate time 数据时的日期分量 month / day / year 的顺序。有效参数为 mdydmyymdydmmyd dymus_english 语言中该缺省值为 mdy

language language – 是显示系统消息的语言的正式名称。该语言 必须安装在 Adaptive Server 上。缺省值为 us_english

set deferred_name_resolution

设置仅适用于当前会话的延迟名称解析。

set delayed_commit {on | off | default}

确定将日志记录写入磁盘的时间。当 delayed_commit 参数设置为 true 时,日志记录将以异步方式写入磁盘并且控制将返回客户端,而不等 待 IO 完成。

会话级设置将覆盖任何现有的数据库级设置。将 delayed_commit 更改为 其缺省值可恢复数据库级设置。


image

注释 注意:在使用 delayed_commit 之前,须仔细考虑应用的注意事项。

image


set dml_logging {minimal | default}

确定 insertupdate delete (DML) 操作的记录量。有效值包括:

minimal Adaptive Server 尝试不记录对 DML 语句所做的任何更改。 在大多数情况下, Adaptive Server 很少或根本不记录到 syslogs

default Adaptive Server 禁用特定于会话的最少日志记录,并使 用基于特定于表的日志记录级别和数据库范围的日志记录级别为 单个表启用的记录模式。

对日志记录进行的更改仅应用于此会话中的用户所拥有的对象 (如 果适用)。另外, set dml_logging 只影响会话所有者拥有的表:

任何用户都可以执行 set dml_logging 以进行 minimal 记录以及恢复 为 default 记录模式。此 set 成功后,将为当前会话最低限度记录 在任何数据库中执行语句的用户拥有的所有表上的 DML,直到 执行 set dml_logging default

当为会话启用了 minimal 记录但 DML 在不是由会话用户拥有的表 上操作时, DML 记录缺省为数据库和表级别的设置。

会话或过程中的 DML 记录设置由过程继承,但只影响运行会话 的用户拥有的表。

set encryption passwd 'password_phrase'

for {key | column} {keyname | column_name}

创建加密密钥的口令以在 insertupdatedeleteselectalter table

select into 语句中加密或解密数据。

password_phrase – 是使用 create encryption key alter encryption key 命令指定的显式口令,用于保护密钥。

key – 表示当访问由命名密钥加密的任何列时, Adaptive Server

将使用此口令解密密钥

keyname – 可作为完全限定名提供。例如:

[[database.][owner].]keyname

column – 指定 Adaptive Server 只在加密或解密命名列的上下文中 使用此口令。最终用户不必知道加密给定列的密钥的名称。

column_name – 要设置加密口令的列的名称。 column_name 提供为:

[[ database.][ owner ].]table_name.column_name


set export_options [on | off]

Adaptive Server 的缺省行为是在触发器或系统过程运行完成后重置它 们设置的任何设置参数更改。通过启用 set export_options 可在会话期 间保留由系统过程或触发器设置的会话设置。

例如,以下语句将启用 set export_options

set export_options on

以下语句将禁用 set export_options 并使 Adaptive Server 恢复缺省行为:

set export_options off

set fipsflagger {on | off}

决定使用初级 ANSI SQL Transact-SQL 扩展时 Adaptive Server 是否 显示警告消息。缺省情况下,使用非标准 SQL Adaptive Server 不 会通知您。此选项不会禁用 SQL 扩展。发出非 ANSI SQL 命令时,处 理完成。

set flushmessage {on | off}

确定 Adaptive Server 何时向用户返回消息。缺省情况下,在生成消息 的查询完成之前或者缓冲区达到容量上限之前,消息存储在缓冲区 中。使用 set flushmessage on 可在消息生成时立即将它们返回给用户。

set fmtonly {on | off}

在存储过程中捕获计划,但不实际执行。

set forceplan {on | off}

导致查询优化程序将查询的 from 子句中表的顺序用作查询计划的连 接顺序。 forceplan 通常用于优化程序不能选择好的计划时。强制执行 不正确的计划会对 I/O 和性能产生严重的负面影响。请参见 《性能和 调优指南》。


image

注释 查询优化程序忽略强制对外部连接使用非法连接顺序的尝试,如 以下示例所示:

1> set forceplan on

2> select * from table1, table2 where table2.id *= table1.id

image


set identity_insert [ database.[owner.]]table_name {on | off} 确定是否允许显式插入到表的 IDENTITY 列中。此选项只能用于基 表。它不能用于视图,也不能在触发器内进行设置。

为表设置 identity_insert on 之后,表所有者或对列具有 insert 权限的用 户可手动插入任何大于 5 的合法值。例如,如果插入值 55,则会使 IDENTITY 列值产生很大间隔:


insert stores_cal

(syb_identity, stor_id, stor_name) values (55, "5025", "Good Reads") select syb_identity from stores_cal id_col

-------

1

5

55


(3 rows affected)

如果随后将 identity_insert 设置为 off,则 Adaptive Server 在下一次插入 时为 IDENTITY 列指派值 55 + 1 (即 56)。如果回退包含 insert 语句 的事务, Adaptive Server 将放弃值 56,并在下一次插入时使用值 57

除非创建了 IDENTITY 列的唯一索引,否则 Adaptive Server 不会检验 插入的值的唯一性;您可以插入任何正整数。

设置 identity_insert table_name off 可通过禁止显式插入到 IDENTITY 列 而恢复缺省行为。无论何时,都可以在会话中对单一数据库表使用 set identity_insert table_name on

set identity_insert table_name on|off 的权限检查因您的细化权限设置 而异。

image

细化权限已启用 在启用细化权限的情况下,您必须是表所有者或是对表拥有 identity_insert 权 限的用户。表所有者或具有 manage any object permission 特权的用户可以将权 限授予其他用户。

细化权限已禁用 在禁用细化权限的情况下,您必须是数据库所有者、表所有者或是具有

sa_role 的用户。 identity_insert 权限不能移交。


set identity_update table_name {on | off}

set identity_update 设置为 on 时,可以显式地更新表上的 IDENTITY 列的值。 identity_update 更改限定行的标识列值。启用 identity_update 时,可以更新任何大于 0 的标识值。不过,如果输入值大于 identity burn max 值,就会分配一组新的 ID 值,而且会相应更新 OAM 页上的 identity burn max 值。如果事务中包含 update,则不能回退新的 identity burn max 值。可以使用 syb_identity 指向标识列来进行 update。例如:

update table_name set syb_identity = value


where 子句

Adaptive Server 不检查是否有重复条目,也不检验条目是否唯一。可 将现有值更新为列的声明精度所允许范围内的任何正整数。可通过在 标识列上创建唯一索引来检查是否有重复条目。

set identity_update table_name on|off 的权限检查因您的细化权限设置 而异。

image

细化权限已启用 在启用细化权限的情况下,您必须是表所有者或是对表拥有 identity_update 权 限的用户。表所有者或具有 manage any object permission 特权的用户可以将权 限授予其他用户。

细化权限已禁用 在禁用细化权限的情况下,您必须是数据库所有者、表所有者或是具有

sa_role 的用户。 identity_update 权限不能移交。


set index_union on | off

启用时,设置索引联合以使用 or 子句限制表扫描。

索引联合 (也称为 or 策略)用于包含 or 子句的查询。例如:

select * from titleauthor where au_id = "409-56-7008" or title_id = "PC8888"

如果 index_union 为:

已启用 则此示例使用 au_id 上的索引来查找所有 au_id = "409- 56-7008" titleauthor 元组的行 ID (RID);并使用 title_id 上的索引 来查找所有 title_id = "PC8888" titleauthor 元组的 RIDAdaptive Server 然后对所有 RID 执行联合以删除重复项。结果 RID 将与 RidJoin 连接以访问数据元组。

已禁用 – Adaptive Server 在查询中不使用索引联合策略来限制表 扫描,而是使用表上的其它访问路径 (在上面的示例中,它对表 titleauthor 使用表扫描),并在扫描运算符中将 or 子句作为过滤器 进行应用。

set literal_autoparam on | off

缺省情况下为 on。如果 literal_autoparam 的服务器级设置为 on,则此 选项可启用和禁用该功能的使用。如果服务器级设置是 off,则此设 置不起作用。


set lock {wait [ numsecs] | nowait}

指定锁的设置。

wait – 指定命令在中止和返回错误之前,等待获取锁的时间长度。

numsecs – 指定命令等待获取锁的秒数。有效值介于 0

2147483647 之间,后者是最大的整数值。

lock nowait – 指定如果命令不能立即获取锁,则返回一个错误并失 败。 set lock nowait 等同于 set lock wait 0

set logbulkcopy {on | off }

为会话配置快速记录 bcp

set materialized_view_optimization {disable | fresh | stale}

确定查询优化过程中要考虑的预先计算结果集。以下各项之一:

disabled - (缺省值) Adaptive Server 在查询优化中不使用任何预 先计算结果集。

fresh – 只有使用 immediate refresh 策略时,Adaptive Server 才会考 虑预先计算结果集。

stale – 查询优化时, Adaptive Server 会考虑所有启用的预先计算 结果集,即使这些结果集已失效也是如此。

set metrics_capture {on | off}

在会话级启用查询处理 (QP) 指标的捕获,将该捕获设置为 onQP 指 标用于标识和比较查询执行中的经验指标值。执行查询时,查询与一 组作为 QP 指标比较基础的已定义指标关联。

set mon_stateful_history on | off

禁用后,对历史监控表 (monSysStatementmonErrorLogmonSysSQLTextmonSysPlanText monDeadLock)的查询将返回表缓 冲区中的所有行。

启用后,对历史监控表的查询将仅返回自 mon_stateful_history 禁用后 添加到表中的行。

set nodata

指定查询完成后不将任何数据传送到客户端。如果指定 set nodata on,则只将 TDS 格式流发送到客户端,查询的行为就像没有符合条 件的任何行。


set offsets {select, from, order, compute, table, procedure, statement, param, execute} {on | off}

返回 Transact-SQL 语句中指定的关键字的位置 (相对于查询的起始

位置)。关键字列表是一个用逗号分隔的列表,可以包括下面的任何 Transact-SQL 结构:selectfromordercomputetableprocedurestatement param execute。如果没有错误, Adaptive Server 返回偏 移量。

此选项仅适用于 Open Client DB-Library

set option show_option {normal | brief | long | on | off}

以文本格式生成诊断输出。 有效的 show_option 值包括:

show – 显示所有模块通用的基本语法

show_lop – 显示所用的逻辑运算符 (扫描、连接等)

show_managers – 显示优化期间所用的数据结构管理器

show_log_props – 显示计算出的逻辑属性 (行计数、选择性等)

show_parallel – 显示并行查询优化的详细信息

show_histograms – 显示与 SARG/Join 列关联的直方图的处理

show_abstract_plan – 显示抽象计划的详细信息

show_search_engine – 显示连接顺序算法的详细信息

show_counters – 显示优化计数器

show_best_plan – 显示优化程序选定的最佳查询计划的详细信息

show_pio_costing – 显示物理输入/输出 (读写磁盘)评估值

show_lio_costing – 显示逻辑输入/输出 (读写内存)评估值

show_elimination – 显示分区排除

show_missing_stats – 显示 SARG/Join 列中缺失的有用统计信息的 详细信息

有关详细信息,请参见 Query Optimizer (《查询优化程序》)中的 “Displaying Query Optimization Strategies and Estimates”(显示查询优 化策略和评估)。

set option show_option 的权限检查因您的细化权限设置而异。

image

细化权限已启用 在启用细化权限的情况下,您必须是具有 set tracing 特权或 monitor qp performance 特权的用户。


image

细化权限已禁用 在禁用细化权限的情况下,您必须是具有 set tracing 特权的用户或是具有

sa_role 的用户。


set opttimeoutlimit

设置优化程序的超时限制。 opttimeoutlimit 值的有效范围为 0

4000 毫秒,其中 0 表示没有优化限制。

set parallel_degree number 指定在一个查询的并行执行中可使用的工作进程数上限。此数目应小 于或等于每个查询中的工作进程数目,后者由 max parallel degree 配置 参数设置。 @@parallel_degree 全局变量存储当前设置。

set plan {dump | load} [group_name] {on | off}

引入一个抽象计划命令。

dump – 启用或禁用为当前连接捕获抽象计划。如果不指定

group_name,则计划存储在缺省组 ap_stdout 中。

load – 启用或禁用为当前连接装载抽象计划。如果不指定

group_name,则从缺省组 ap_stdin 中装载计划。

group_name – 是用于装载或存储计划的抽象计划组的名称。

有关详细信息,请参见 《性能和调优指南》中的 “创建和使用抽象 计划”。

set plan exists check {on | off}

当和 set plan load 一起使用时,可为多达 20 个查询存储散列键,这些 查询来自每个用户的高速缓存中的抽象计划组。


set plan for show

为诊断输出生成一个 XML 文档。 show 的有效值为:

show_exec_xml – 以 XML 形式获取编译的计划输出,显示每个查 询计划运算符。

show_execio_xml – 获取计划输出以及估计的和实际的 IO。这也 包括查询文本。

show_opt_xml – 获取优化程序诊断输出 (显示各种不同的组件, 如逻辑运算符)、管理器输出、某些搜索引擎诊断输出和最佳查 询计划输出。

show_lop_xml – 以 XML 形式获取输出逻辑运算符树。

show_managers_xml – 显示查询优化程序准备阶段中各组件管理 器的输出。

show_log_props_xml – 显示给定等效类 (查询中的一个或多个关 系组)的逻辑属性。

show_parallel_xml – 显示生成并行查询计划时与优化程序有关的 诊断。

show_histograms_xml – 显示与直方图和直方图合并有关的诊断。

show_abstract_plan_xml – 显示 AP 生成/应用。

show_search_engine_xml – 显示与搜索引擎相关的诊断。

show_counters_xml – 显示计划对象构造/析构计数器。

show_best_plan_xml – 以 XML 形式显示最佳计划。

show_pio_costing_xml – 以 XML 形式显示实际的 PIO 开销计算。

show_lio_costing_xml – 以 XML 形式显示实际的 LIO 开销计算。

show_elimination_xml – 以 XML 形式显示分区排除。

client – 如果指定,则将输出传送到客户端。

message – 如果指定,则将输出传送到内部消息缓冲区。

有关详细信息,请参见 《性能和调优系列:查询处理和抽象计划》 中的 “显示查询优化策略和估计值”。

set plan for show 的权限检查因您的细化权限设置而异。

image

细化权限已启用 在启用细化权限的情况下,您必须是具有 set tracing 特权或 monitor qp performance 特权的用户。

细化权限已禁用 在禁用细化权限的情况下,您必须是具有 set tracing 特权的用户或是具有

sa_role 的用户。


set plan optgoal {allrows_oltp | allrows_mix | allrows_dss | user_defined_goal_identifier}

设置优化目标。

allrows_mix – 缺省优化目标,以及混合查询环境中最有用的目 标。它均衡考虑了 OLTP DSS 查询环境的需要。

allrows_dss – 中等到高度复杂性可操作 DSS 查询的最有用目标。 目前,在实验基础上提供该目标。

有关优化计划的详细信息,请参见 《性能和调优系列:查询处理和 抽象计划》中的 “了解 Adaptive Server 中的查询处理”。

set plan optlevel value

设置会话的优化级别。每个 Adaptive Server 版本或 ESD 都可能包括 一个新优化级别。例如:

ase_current – 启用当前及之前版本中的所有优化程序更改。

ase_default – 禁用自 15.0.3 ESD #1 版本以来的所有优化程序更改。

ase1503esd2 – 启用 15.0.3 ESD #2 版本及之前版本中的所有优化 程序更改。

ase1503esd3 – 启用 15.0.3 ESD #3 版本及之前版本中的所有优化 程序更改。

请参见 《性能和调优系列:查询处理和抽象计划》中的 “控制优化”。

set plan opttimeoutlimit number

在会话级设置超时,其中 n 0 1000 之间的任意整数。有关优化 计划的详细信息,请参见 《性能和调优系列:查询处理和抽象计划》 中的 “了解 Adaptive Server 中的查询处理”。

set plan replace {on | off} 启用或禁用在计划捕获模式期间替换现有抽象计划。缺省情况下,计 划替换是关闭的。

set prefetch {on | off}

启用或禁用数据高速缓存的大 I/O

set print_minlogged_mode_override 向会话输出生成跟踪信息,从而就已经由其它规则为其覆盖表的最 少记录模式的语句进行报告。这些跟踪信息包括:是否存在参照完 整性约束;延迟模式选择;受影响的表的名称;产生影响的规则的 说明等。


set proc_output_params {on | off} 控制将存储过程生成的输出参数发送回客户端。 set proc_output_params off 禁止将输出参数发送回客户端。此参数缺省值为 on

set proc_return_status {on | off}

控制将返回状态 TDS 标志发送回客户端。 set proc_return_status off 禁 止将返回状态标志发送回客户端,isql 客户端不显示 (return status

= 0) 消息。此参数缺省值为 on


image

警告!如果执行过程的客户端应用程序依赖于基于返回状态的过程的 成功与否,则不要使用 set proc_return_status off 选项。

image


set process_limit_action {abort | quiet | warning} 指定当没有足够的工作进程可用时, Adaptive Server 是否执行并行查 询。在这些情况下,如果:

process_limit_action 设置为 quiet,则 Adaptive Server 会自动调节计 划以使用不超过可用进程数的并行度。

没有足够的工作进程可用时, process_limit_action 设置为 warning, 则 Adaptive Server 会在调节计划时发出警告消息

process_limit_action 设置为 abortAdaptive Server 会中止查询,并 发出消息说明没有足够的工作进程可用。

set proxy login_name

允许您使用 login_name 的权限、登录名和 suid (服务器用户 ID)。对 于 login_name,指定来自 master..syslogins 的有效登录,并用引号引起 来。若要还原到初始登录名和 suid,请使用 set proxy (在该命令中使 用初始 login_name)。


image

注释 要使用 set proxy login_name,用户 (包括系统安全员)必须具有 显式授予的权限。不具有显式权限时,“sa_role”和 “sso_role”都不 能发出 set proxy login_name 命令。

image


有关详细信息,请参见 633 页的 “使用代理


set quoted_identifier {on | off}

确定 Adaptive Server 是否识别用双引号引起的分隔标识符。缺省情况 下, quoted_identifier 设置为 off,且所有标识符都必须满足下列条件之 一:

符合有效标识符的规则。

用中括号括起。

如果使用 set quoted_identifier on,则双引号的行为与中括号相同,通 过将标识符用双引号引起来,还可以使用以非字母字符开头的表名、 视图名和列名,包括其它情况下不能使用的字符或保留字字符。分隔 标识符不能超过 28 字节,可能不能被所有前端产品识别,而且当用 作系统过程的参数时还会产生意外的结果。

quoted_identifier on 时,用双引号引起来的所有字符串都被视作 标识符。对字符或二进制字符串使用单引号。

set repartition_degree number 是出于语义目的而对任何中间数据流重新分区的最大程度。有关为会 话设置 max repartition degree 值的详细信息,请参见 《性能和调优系 列:查询处理和抽象计划》中的 “并行查询处理”。

set repthreshold number

在会话级别设置 SQL 复制阈值。如果在存储过程中调用 set repthreshold,则其作用域为该过程。如果在用户会话中调用,则其作 用域为该会话。

用户可以更改阈值的作用域并使用登录触发器设置会话阈值,在这种 情况下,无需在登录时显式设置会话阈值。

例如,

create proc myproc as

set repthreshold 777

---------------------


alter login sa modify login script 'myproc'

----------------------

option changed. (Return status = 0

每次用户 sa 登录时都会调用 “myproc”过程,并确保整个会话的复 制阈值设置为 777

更改阈值作用域的另一种方法是使用 set export_options

create proc p2


as

set repthreshold222 set export_options on

---------------------------

执行 p2 后,阈值仍设置为 222。阈值的层次为:会话 > > 数据库 如果按上述顺序指定,则会话阈值设置为 0 时,仍然有效的复制阈值

仅包括表和数据库阈值。如果未设置阈值,则阈值缺省为 50 行。

要设置表级别阈值,请参见 sp_setrepdbmode;要设置数据库级别的 阈值,请参见 sp_setrepdefmode。有关这两个存储过程的信息,请参 见 《参考手册:过程》。

可以导出会话阈值;存储过程可以设置阈值并将 export options 设置配 置为 ONAdaptive Server 在调用过程或会话中强制执行新阈值。

set repthreshold 的权限检查因您的细化权限设置而异。

image

细化权限已启用 在启用细化权限的情况下,您必须是具有 manage replication 特权的用户。 细化权限已禁用 在禁用细化权限的情况下,您必须是具有 replication_role 的用户。


set resource_granularity number

覆盖全局值 max resource granularity 并将它设置为会话特定的值,这将 对 Adaptive Server 是否使用内存密集型操作产生影响。有关详细信 息,请参见 Query Processor (《查询处理器》)中的 “Parallel Query Processing”(并行查询处理)。


set role { role_name [with passwd "password"]} {on | off}

使用 set role role_name off 关闭角色,而在需要时可使用 set role

role_name on 打开角色。

role_name 可以是系统角色或用户定义角色的名称。当您登录时, 已授予您的所有角色都会自动激活。如果已向您授予 sa_role sso_role,您不能禁用这些角色,除非您是数据库中的指定用户 或别名用户,或者存在 “guest”用户。

role_name – 由系统安全员创建的任何用户定义角色的名称。缺 省情况下,用户定义的角色不启用。要将用户定义的角色设置为 在登录时激活,系统安全员必须在创建或者变更登录名或登录配 置文件时将此角色指定为缺省角色或自动激活的角色。

with passwd – 指定要激活角色的口令。如果用户定义的角色带有 口令,则必须指定此口令才能激活角色。

要使用 set role,必须已向您授予此角色。如果仅因为具有某个角色而 获得访问数据库的权利,则使用数据库期间不能关闭此角色。

如果已使用激活谓词向您授予角色,则 Adaptive Server 会在您执行 set role on 时评估该谓词。如果该谓词的评估结果为 false,则 Adaptive Server 将返回一条错误消息,并且不会激活该角色。

set {rowcount number, textsize number}

导致 Adaptive Server 在影响指定数目的行后停止处理查询 (selectinsertupdate delete)。 number 可以是无小数点的数值文字,也可 以是 integer 类型的局部变量。若要关闭该选项,请使用:

set rowcount 0

您可用 @@setrowcount 全局变量确定 set rowcount 的当前值。例如:

select @@setrowcount


image

37

set scan_parallel_degree number

指定基于散列的扫描 (未分区表上的并行索引扫描和并行表扫描) 的最大特定于会话的并行度。这个数值必须小于或等于 max scan parallel degree 配置参数的当前值。 @@ scan_parallel_degree 全局变量 可存储当前设置。

set send_locator {on | off }

指定 Adaptive Server 在发送到客户端的结果集中是发送 LOB 还是发 送引用 LOB 的定位符。当此选项为 off (缺省值)时, Adaptive Server 发送 LOB


set session authorization login_name

set proxy 相似,不同的是:set session authorization 遵循 SQL 标准, 而 set proxy Transact-SQL 扩展。

set show_exec_info

在命令执行时生成其它信息。

on – 生成有关 DML 语句的记录模式的额外诊断。显示当前语句 和会话的所选记录模式以及执行 DML 的用户。

off – 禁用 show_exec_infoset show_permission_source, {on|off}

以表形式显示被授予者、被授予者的类型、授予者、操作、对象以及

谓词。被授予者可以是 user_namerole_name group_nameType of grantee 列将显示被授予者是用户、角色还是组。如果没有谓 词, Adaptive Server 将返回 NULL

在使用 set show_permission_source, {on|off} 时,请考虑:

如果将权限授予属于某个层次的角色,那么不会直接将该权限授 予用户。例如,如果您将 role1 的权限授予 role2,进而又授予 role3,然后该权限被授予某个用户。 set show_permission_source 会在 grantee 列中显示 “role1”,而不是 “role3”,因为是向 role1 而不是 role3 授予了该权限。可使用 sp_displayroles ... expand_up 查看有关 role3 的信息。

如果有多个授予者授予特定操作的权限, set show_permission_source 会显示与具有最大用户 ID 的授予者相关 联的权限。

set show_permission_source 显示对象级而非列级的信息,因为同 一对象的多个行可能来自不同列的不同授予者。

如果对于操作和授予者的组合,对象的不同谓词存在多个权限, 则 set show_permission_source 会显示所有谓词名称,每个谓词对 应单独一行。

set show_sqltext {on | off}

用于为即席查询、存储过程、游标和动态准备的语句输出 SQL 文本。

在执行查询以收集 SQL 会话的诊断信息之前,无需启用 set show_sqltext (与 set showplan on 等命令的处理方式相同)。相反,可 以在命令运行时启用它,以帮助确定未正常执行的查询并诊断其存在 的问题。

在启用 show_sqltext 之前,必须先启用 dbcc traceon,以使输出显示为 标准输出:


dbcc traceon(3604)

set show_sqltext 的语法为:

set show_sqltext {on | off}

例如,以下语句将启用 show_sqltext

set show_sqltext on

一旦启用 set show_sqltextAdaptive Server 便会将您输入的每个命令 或系统过程的所有 SQL 文本都输出为标准输出。根据运行的命令或 系统过程,此输出可能非常详尽。

若要禁用 show_sqltext,请输入:

set show_sqltext off

set statement_cache on | off

缺省情况下为 on。如果 statement_cache 的服务器级设置为 on,则此 选项可启用和禁用该功能的使用。如果服务器级设置是 off,则此设 置不起作用。

set show_transformed_sql, {on|off}

Adaptive Server 查询处理期间将查询的中间形式显示为 SQL 文本 - 即,在对视图、谓词特权、加密等执行查询转换之后,但在执行子查 询的查询转换之前。


set statistics {io, subquerycache, time, plancost, simulate} {on | off}

显示各种类型的统计信息

io – 显示有关语句中引用的每个表的统计信息:

访问表的次数 (扫描计数)

逻辑读取次数 (内存中访问的页)

物理读取次数 (数据库设备访问)

statistics io 为每个命令显示写入的缓冲区数目。

如果 Adaptive Server 已配置为强制资源限制,则 statistics io 还显 示总的 I/O 开销。

subquerycache – 为每个子查询显示子查询高速缓存中的高速缓存 命中次数、未命中次数和行数。

time – 显示 Adaptive Server 分析和编译每个命令所用的时间。在 命令的每一个步骤,statistics time 显示 Adaptive Server 执行此命令 所需的时间。时间以毫秒或时钟周期为单位指定,其确切值与计 算机有关。

plancost – 以树格式显示查询统计信息。


image

注释 启用 set statistics plancost 后,Adaptive Server liopio

row 的名称分别缩写为 lp r

image

simulate – 指定优化程序应使用模拟统计信息来优化查询。

请参见 《性能和调优系列:利用统计分析改进性能》中的 “使用 set statistics 命令”。

set strict_dtm_enforcement {on | off}

决定服务器是否将事务传播到不支持 Adaptive Server 事务协调服务的 服务器。缺省值继承自 strict dtm enforcement 配置参数的值。

set string_rtruncation {on | off}

决定 insert update 命令截断 charunicharvarchar univarchar 字符 串时 Adaptive Server 是否引发 SQLSTATE 例外。如果截断的字符均为 空格,则不会引发例外。缺省设置 off 不会引发 SQLSTATE 例外,而 且会不加提示地截断字符串。


set system_view {instance | cluster | clear}

(仅限集群)为会话指定系统视图,并控制影响存储过程 (例如

sp_who)的输出的虚设表的实现。

instance – 为当前实例设置系统视图。

cluster – 为集群设置系统视图。

clear – 清除任何会话级别设置,返回到托管该 spid 的逻辑集群的

system_view 设置。输入 select @@system_view 来检查当前值。

set switch [serverwide] {on | off} trace_flag[,trace_flag] [,with option [, option]>

用于在本地和服务器范围内设置跟踪标志和开关名称。

serverwide – 可选项,将 serverwide 开关设置为 ON OFF。缺省 设置因会话而异。

on – 跟踪标志已打开。

off – 跟踪标志已关闭。

trace_flag – 编号 (原来的跟踪标志编号)和/或开关名称构成的 序列。

option – 可选的开关选项序列。有效值包括:

override – 此选项是启用未说明的开关名称或跟踪标志所必 需的

no_info – 此选项用来阻止任何信息性警告出现 对 set switch 的权限检查因您的细化权限设置而异。

image

细化权限已启用 在启用细化权限的情况下:

要设置跟踪标志 3604/3605,您必须具有 monitor qp performance 特权或 set switch 特权。

对于所有其它跟踪标志,您必须具有 set switch 特权。 细化权限已禁用 在禁用细化权限的情况下,您必须具有 sa_role


set textsize [ number]

指定 select 语句返回的 textunitext image 类型数据的最大大小(以 字节为单位)。 @@textsize 全局变量存储当前设置。

isql 中的缺省设置为 32K。有些客户端软件可设置其它缺省值。若要 将 textsize 重新设置为缺省大小 (32K),请使用:

set textsize 0


set tracefile [ filename] [off] [for spid]

一旦启用,便会将当前会话的所有 SQL 文本都保存至指定的文件, 每个 SQL 文本批处理都会附加到上一个批处理之后。

启用跟踪的语法为:

set tracefile file_name [off] [for spid

禁用跟踪的语法为:

set tracefile off [for spid]

其中:

file_name – 保存 SQL 文本的文件的完整路径。如果未指定目录 路径,Adaptive Server 将在 $SYBASE 中创建该文件。


image

注释 如果 file_name 包含数字和字母之外的特殊字符 (“:”、 “/”等),则必须用引号将 file_name 引起来。例如,以下 file_name 必须用引号引起来,因为目录结构中包含 “/”:

set tracefile '/tmp/mytracefile.txt' for 25

如果 file_name 不包含特殊字符,并且要将其保存到 $SYBASE,则 不需要用引号引起来。例如,以下 file_name 不需要用引号引起来:

set tracefile mytracefile.txt

image

off – 为此会话或 spid 禁用跟踪。

spid SQL 文本要保存至跟踪文件的服务器进程 ID。只有具有 SA 或系统安全员角色的用户才能为其它 spid 启用跟踪。不能保 存系统任务 (如管家或端口管理器)的 SQL 文本。


image

注释 对特定会话使用 set tracefile 后,会将所有后续 set 命令或 DBCC

跟踪的诊断输出重定向到跟踪文件。

确保在发出 set tracefile off 之前关闭已打开的所有诊断命令,否则本应转 到跟踪文件的输出会转到客户端。

image


set tracefile 的权限检查因您的细化权限设置而异。

image

细化权限已启用 在启用细化权限的情况下,要为您自己的会话设置跟踪文件,您必须具有 set tracing 特权或 monitor qp performance 特权。要为其他用户的会话设置跟踪文 件,您必须具有 set tracing any process 特权或 monitor qp performance 特权。

细化权限已禁用 在禁用细化权限的情况下,要为您自己的会话设置跟踪文件,您必须具有 set tracing 特权;要为其他用户的会话设置跟踪文件,您必须具有 sa_role sso_role


set transaction isolation level {[read uncommitted | 0] | [read committed | 1] | [repeatable read | 2] | [serializable | 3]}

设置会话的事务隔离级别。设置该选项后,当前或以后的所有事务都

会以此隔离级别操作。

read uncommitted | 0 – 以隔离级别 0 执行的扫描不要求任何锁。因 此,扫描过程中级别为 0 的扫描的结果集可能更改。如果扫描位 置因基础表中的更改而丢失,必须使用唯一索引才能重新启动该 扫描。如果没有唯一索引,该扫描可能会中止。

缺省情况下,如果对位于只读数据库之外的表进行 0 级扫描,就 需要使用唯一索引。可以强制 Adaptive Server 选择非唯一索引或 表扫描来覆盖此要求,如下所示:

select * from table_name (index table_name)

基础表上的活动可能会导致扫描在完成之前就中止。

read committed | 1 – 缺省情况下,Adaptive Server 的事务隔离级别 是 read committed 1,此级别允许持有数据上的共享读取锁。

repeatable read | 2 – 禁止非重复读取。

serializable | 3 – 指定隔离级别 3Adaptive Server holdlock 应用 到事务中的所有 select readtext 操作,该事务将持有查询的读取 锁,直到该事务结束为止。如果同时还设置了链式模式,那么对 于所有隐式开始事务的数据检索或修改语句,此隔离级别将继续 有效。

set transactional_rpc {on | off} 控制远程过程调用的处理。如果此选项设置为 on,则事务等待处理 时, Adaptive Server 会协调 RPC。如果此选项设置为 off,则远程过程 调用由 Adaptive Server 节点处理器处理。缺省值继承自 enable xact coordination 配置参数的值。

示例 示例 1 通知 Adaptive Server 对等于 (=) 和不等于 (!=) 比较计算和集合函数 中的 NULL 值操作数求值时要符合初级 ANSI SQL 标准:

set ansinull on

使用 set ansinull on 时,如果 Adaptive Server 在一个或多个列或行中发现 空值,则集合函数和行集合会引发下面的 SQLSTATE 警告:

Warning - null value eliminated in set function

如果等于操作数或不等于操作数中有值为 NULL,则比较的结果为 UNKNOWN。例如,下面的查询在 ansinull 模式下不会返回任何行:

select * from titles where price = null


如果使用 set ansinull off,同样的查询将返回 price NULL 的行。

示例 2 激活字符集转换,根据客户端所用的字符集将转换设置为缺省设 置。当无法将字符转换为客户端字符集时, Adaptive Server 还会通知客 户端或应用程序:

set char_convert on with error

示例 3 指定在缺省情况下 CIS 处理外发 RPC 请求:

set cis_rpc_handling on

示例 4 为此用户指派客户端名称 alison、主机名 money1 以及应用程序名 称 webserver2

set clientname 'alison' set clienthostname 'money1'

set clientapplname 'webserver2'

示例 5 使用 test_cursor 为客户端请求的每个后续 fetch 语句返回 5 行:

set cursor rows 5 for test_cursor

示例 6 通知 Adaptive Server 在会话期间保留由系统过程或触发器设置的 会话设置。

set export_options on

若要禁用 set export_options 并使 Adaptive Server 恢复为缺省行为,请使用:

set export_options off

可以使用 set export_options on 导出这些优化设置。


image

注释 缺省情况下,为登录触发器启用 set export_options

image


示例 7 如果使用 Transact-SQL 扩展,通知 Adaptive Server 显示一条警告 消息:

set fipsflagger on

然后,如果使用非标准 SQL,如下:

use pubs2 go

Adaptive Server 显示:

SQL statement on line number 1 contains Non-ANSI text. The error is caused due to the use of use database.


示例 8 将值 100 插入到 stores_south 表的 IDENTITY 列,然后禁止对此列 进行进一步的显式插入。注意 syb_identity 关键字的使用;Adaptive Server 使用 IDENTITY 列名替换此关键字:

set identity_insert stores_south on go

insert stores_south (syb_identity) values (100)

go

set identity_insert stores_south off go

示例 9 启用 idenity_update 并分别用值 1 10 更新表,然后禁用

identity_update

set identity_update t1 on

update t1 set c2 = 10 where c1 =1 select * from t1

c1 c2

-------- ------- 1 10


set identity_update t1 off

示例 10 如果会话或存储过程中的后续命令无法立即获取请求的锁,则 返回一个错误并失败:

set lock nowait

示例 11 当前会话或存储过程中的后续命令会无限期地等待直到获取锁:

set lock wait

示例 12 会话或存储过程中的后续命令将等待 5 秒以获取锁,若无法获取 锁,则生成错误消息且命令失败:

set lock wait 5

示例 13 dev_plans 组启用捕获抽象计划:

set plan dump dev_plans on

示例 14 对当前会话中的查询启用从 dev_plans 组中装载抽象计划:

set plan load dev_plans on

示例 15 禁止输出参数信息:

1> create procedure sp_pout (@x int output) as select

@x = @x + 1 2> go


1> set proc_output_params off 2> go

1> declare @x int 2> select @x = 1

3> exec sp_pout @x output

4> print "Value of @x returned from sproc is:%1!", @x 5> go


(1 row affected) (return status = 0)


Value of @x returned from sproc is:1

如果未执行 set proc_output_params off(return status = 0) 后的输出 将包含以下行:

Return parameters:


-----------

2


示例 16 禁止参数和返回状态 TDS 标记的输出:

set proc_output_params OFF go


set proc_return_status OFF go


declare @x int select @x = 2

exec sp_pout @x output

print "Value of @x returned from sproc is:%1!", @x go

(1 row affected)

Value of @x returned from sproc is:2 (1 row affected)

另外,还可以通过在运行此批处理之前使用 set nocount on 选项禁止报告 受影响行数的行,从而生成没有额外消息的输出。

示例 17 执行此命令的用户现在可以使用登录名 “mary”及 Mary 的服务 器用户 ID 在服务器上进行操作:

set proxy "mary"


示例 18 对于每个 insertupdatedelete selec t 语句,Adaptive Server 会 在查询影响前四行后停止查询。例如:

--- -----

--- -------

BU1032

19.99

BU1111

11.95

BU2075

2.99

BU7832

19.99

--- -----

--- -------

BU1032

19.99

BU1111

11.95

BU2075

2.99

BU7832

19.99

select title_id, price from titles title_id price


(4 rows affected)

set rowcount 4

示例 19 通知 Adaptive Server 将所有用双引号引起来的字符串作为标识符 处理。表名 !*&strange_table 和列名 emp s_name quoted_identifier on 时是合法的标识符名称:

set quoted_identifier on go

create table "!*&strange_table" ("emp's_name" char (10), age int)

go

set quoted_identifier off go

示例 20 将用中括号括起来的字符串视为标识符。即使 quoted_identifier off,表名 [!*&strange_table] 和列名 [emps_name] 也是合法的标识符名 称,因为这些名称是用中括号括起来的:

set quoted_identifier off go

create table [!*&strange_table]

([emps_name] char (10), age int)

go

有关带中括号的标识符用法的信息,请参见 630 页的 “分隔标识 符

示例 21 激活 “doctor”角色。用户可使用此命令指定他们想激活的角色:

set role doctor_role on

示例 22 停用用户在当前会话中的系统管理员角色:

set role "sa_role" off

示例 23 用户输入口令激活 “doctor”角色:

set role doctor_role with passwd "physician" on


示例 24 停用 “doctor”角色:

set role doctor_role off

示例 25 指定未分区表上的并行索引扫描和并行表扫描的最大并行度为 4

set scan_parallel_degree 4

示例 26 另一种声明示例 5 的方法:

set session authorization "mary"

示例 27 为每个查询返回处理计划的说明,但并不执行处理计划:

set showplan, noexec on go

select * from publishers go

示例 28 以树格式显示查询的统计信息:

set statistics plancost on select * from authors

au_id au_lname au_fname phone address city state country postalcode

----------- ----------- ----------- ------------ ---------------------

------------ ----- ---------- ------------------------------------

172-32-1176 White Johnson 408 496-7223 10932 Bigge Rd. Menlo Park CA USA 94025

213-46-8915 Green Marjorie 415 986-7020 309 63rd St. #411

Oakland CA USA 94618


. . .


998-72-3567 Ringer Albert 801 826-0752 67 Seventh Av. Salt Lake City UT USA 84152


==================== Lava Operator Tree ====================


Emit (VA = 1)

23 rows est:23 cpu:0


/ TableScan authors

(VA = 0)


23 rows est:23 lio:1 est:2 pio:0 est:2


============================================================


(23 rows affected)

示例 29 导致 Adaptive Server 在截断 charunichar nchar 字符串时生成 例外:

set string_rtruncation on

如果 insert update 语句会截断字符串,则 Adaptive Server 显示:

string data, right truncation

示例 30 将用 select 语句返回的 textunitext image 数据大小上限设置为

100 个字节:

set textsize 100

示例 31 serverwide 开关设置为 on,以便为未说明的跟踪标志 110 设置 跟踪标志,并且不显示其它信息性警告:

set switch serverwide on 110 with override, no_info

示例 32 为当前会话打开一个名为 sql_text_file 的跟踪文件:

set tracefile '/var/sybase/REL1502/text_dir/sql_text_file'

来自 set showplanset statistics io dbcc traceon(100) 的后续输出将保存 到 sql_text_file 中。

示例 33 不指定目录路径,所以该跟踪文件将保存到 $SYBASE/sql_text_file

中:

set tracefile 'sql_text_file' for 11

spid 11 上运行的任何 SQL 都将保存到此跟踪文件中。

示例 34 spid 86 保存 SQL 文本:

set tracefile '/var/sybase/REL1502/text_dir/sql_text_file' for 86

示例 35 指定事务等待执行时,由 CIS 访问方法而不是 Adaptive Server 节 点处理器处理 RPC

set transactional_rpc on

示例 36 会话中的所有后续查询都将在可重复读取事务隔离级别运行:

set transaction isolation level 2


示例 37 在事务期间对该事务中的每个 select 语句执行读取锁:

set transaction isolation level 3

示例 38 此示例演示当表最初在事务中是使用最少记录操作时,同一表 上的多个语句的 DML 日志记录模式如何保持不变。

1 开始事务,并将 DML 日志记录设置为最少:

begin tran

set dml_logging minimal

2 运行 insert 命令:

insert into tab1 values(1)

3 DML 日志记录设置回缺省值:

set dml_logging default

虽然将 DML 日志记录重新设置为缺省值,但因为 t1 以前在此事务 中是使用最少记录运行的,所以将使用最少记录执行此 insert

insert into tab1 values(1)

错误日志包括覆盖日志记录模式选择的原因。

示例 39 此示例在同一会话中将 show_exec_info minimal 更改为 full

1 登录到 Adaptive Server

isql -Ubob -Pbob123 use myimdb

2 创建表 tab1

create table tab1(col1 int)

3 启用 show_exec_info 并将 DML 日志记录设置为 minimal

set show_exec_info on set dml_login minimal

4 将值插入到 tab1 中:

insert into tab1 values(1)

5 Adaptive Server 显示表名和数据库名、运行命令的用户 ID 以及所用 的日志记录模式:

Operating on the table 'tab1', database 'myimdb' (owner ID 3) in 'minimal' logging mode by user ID 3.

6 DML 日志记录设置回缺省值:

set dml_logging default


7 tab1 中插入更多值:

insert into tab1 values(1)

8 Adaptive Server 显示表名和数据库名、运行命令的用户 ID 以及所用 的日志记录模式:

Operating on the table 'tab1', database 'myimdb' (owner ID 3) in 'full' logging mode by user ID 3.

用法 fipsflaggerstring_rtruncationansinullansi_permissionsarithabort

arithignore 影响 Adaptive Server 的错误处理以及与 SQL 标准的遵从性。

仅在启用 CIS 时才可使用 cis_rpc_handling transactional_rpc 选项。

async log service 选项和 delayed_commit 互斥。如果 async log service

设置为 “true”,则 delayed_commit 将不起作用。

如果将 Adaptive Server 配置为并行, parallel_degree scan_parallel_degree 将限制查询的并行度。使用这些选项时,应提 示优化程序限制并行查询,使其使用的工作进程少于配置参数允许 的数目。将这些参数设置为 0 可恢复全服务器范围的配置值。

如果指定值大于配置参数的允许值, Adaptive Server 会发出警告消 息并使用由配置参数设置的值。

如果在触发器或存储过程内使用 set 命令,则执行触发器和存储过 程后,大部分 set 选项都会回复到它们先前的设置。

下面的选项在过程或触发器执行后不会回复到其先前设置,但它们 会在整个 Adaptive Server 会话期间保持不变,除非您显式地重设它 们:

datefirst

dateformat

identity_insert

language

quoted_identifier

如果指定多个 set 选项,第一个语法错误会导致忽略后面的选项。 不过,在错误前指定的选项会得到执行,并会设置新的选项值。

如果为用户指派客户端名称、主机名或应用程序名,则这些指派仅 在当前会话中起作用。用户下次登录时您必须重新指派这些值。虽 然新名称出现在 sysprocesses 中,但它们并不用于权限检查,而 sp_who 仍将客户端连接显示为初始登录。有关设置用户进程的详细 信息,请参见 《系统管理指南》。


showplan char_convert 之外的所有 set 选项可立即生效。 showplan 在后面的批处理中生效。这里有两个使用 set showplan on 的示例:

set showplan on

select * from publishers go

pub_id pub_name city state

------- --------------------- ----------- ---

0736 New Age Books Boston MA 0877 Binnet & Hardley Washington DC 1389 Algodata Infosystems Berkeley CA


(3 rows affected)

但是:

set showplan on go

select * from publishers go

QUERY PLAN FOR STATEMENT 1 (at line 1).

STEP 1

The type of query is SELECT


FROM TABLE

publishers Nested iteration Table Scan Ascending Scan.

Positioning at start of table.


pub_id pub_name city state

- ----- --- ---------- ------- - --------- ----

0736 New Age Books Boston MA 0877 Binnet & Hardley Washington DC 1389 Algodata Infosystems Berkeley CA


(3 rows affected)

• Adaptive Server 会自动在 clientnameclienthostname clientapplname 列中存储一个或多个空格。因此,使用包含 “is null”的这三列 中任一列的查询不会返回预期结果集。

如果启用了 set fipsflagger 选项,则在发出 set proxy 命令时该命令会 发出以下警告:

SQL statement on line number 1 contains Non-ANSI


text.The error is caused due to the use of DBCC.

如果使用登录触发器设置当前执行属性,则在登录触发器中启用或 禁用的任何可导出的 set 选项在当前进程中生效。

有些 set 选项可以分成一组:

parseonlynoexecprefetchshowplanrowcount nocount 控制 着查询的执行方式。将 parseonly noexec 都设置为 on 是毫无 意义的。 rowcount 的缺省设置是 0 (返回所有行),其它的缺省 为 off

statistics 选项在每次查询后显示性能统计信息。 statistics 选项的 缺省设置是 off。有关 noexecprefetchshowplan statistics 的 详细信息,请参见 《性能和调优指南》。

可以使用从子查询返回的文字、变量或表达式在 set 子句中最多 更新 1024 列。

offsets 用于 DB-Library,以解读来自 Adaptive Server 的结果。此 选项的缺省设置为 on

datefirstdateformat language 影响日期函数、日期顺序和消息 显示。如果是在触发器或存储过程内使用,则这些选项不会还 原为其以前的设置。

在缺省语言 us_english 中, datefirst 1 (星期天), dateformat mdy,而消息是以 us_english 显示的。有的语言缺省 (包括 including us_english)产生 Sunday=1Monday=2,等等;其它 一些产生 Monday=1Tuesday=2,等等。

set language 暗指 Adaptive Server 应该使用所指定语言的第一种 星期和日期格式,但不会覆盖当前会话的早些时候发出的显式 set datefirst set dateformat 命令。

cursor rows close on endtran 影响 Adaptive Server 处理游标的方 式。所有游标的 cursor rows 的缺省设置都是 1close on endtran 的缺省设置是 off

chained transaction isolation level 允许 Adaptive Server 以符合

SQL 标准的方式处理事务。

对某些 set 参数的编译期更改

在使用抽象计划来创建存储过程或在 Transact-SQL 批处理中运行这些抽 象计划时,Adaptive Server 15.0.2 版及更高版本更改了其中部分 set 参数 的编译期行为。


Adaptive Server 的早期版本中,set 参数在执行或重新编译存储过程后 生效。Adaptive Server 15.0.2 允许您在编译时使用优化程序 set 参数来影 响存储过程或批处理中的优化程序。


image

注释 这一更改的行为可能会影响结果集的组成。Sybase 建议您在生产 系统中使用 15.0.2 版的 set 参数之前,先查看这些参数创建的结果集。

在从存储过程返回之前,必须先重置 set 参数,否则,后续存储过程的 执行可能会受到影响。如果计划将此更改传播给后续存储过程,请使用 export_options 参数。

image


1-31 显示使用 set export_options on 时可导出的优化程序选项。

1-31: 可使用set export_options on 导出的优化程序选项

optgoal opttimeout merge_join hash_join nl_join distinct_sorted distinct_sorting distinct_hashing group_sorted group_hashing group_inserting order_sorting

addend_union_all merge_union_all merge_union_distinct hash_union_distinct

store_index bushy_space_search parallel_query replicated_partitioning basic_optimization index_intersection index_union multi_gt_store_index opportunistic_grouping opportunistic_distinct auto_query_tuning streaming_sort nary_nl_join query_tuning_mem_limit query_tuning_time_limit showlop

showmanagers showlogprops showparallel showhistograms showabstractplan showsearchengine showcounters showbestplan showfinalplan showcodegen showpiocosting showliocosting showelimination showpllcosting shownostats showexecio

集合行为

ansinull 决定聚合函数中 NULL 值操作数的求值是否符合 ANSI SQL 标 准。如果使用 set ansinull on,则当聚合函数从计算中消除 NULL 值操作 数时, Adaptive Server 会生成警告消息。

例如,如果设置为 set ansinull off (缺省值),并对 titles 表执行下面的查 询:

select avg (total_sales) from titles

Adaptive Server 返回:


--- --------

6090

但是,如果在设置为 set ansinull on 的情况下执行相同的查询, Adaptive Server 会返回以下结果:

1> use pubs2

2> go

1> select avg (total_sales) from titles 2> go

-----------

6090

(1 row affected)

1>set ansinull on 2> go

1> select avg (total_sales) from titles 2> go

-----------

6090

Warning - null value eliminated in set function (1 row affected)

该消息表示 total_sales 中的某些条目包含 NULL 值,没有实际的数量, 因此您无法得到该表中所有书籍的总销售额的全部数据。然而,返回值 在获得的数据中是最高的。

比较行为

SQL 标准要求:如果一个等同性比较的两个操作数中有一个为 NULL 值,则结果为 UNKNOWNTransact-SQL NULL 值的处理是有区别 的。如果一个操作数是列、参数或变量,而另一个操作数是 NULL 常 量,或者是其值为 NULL 的参数或变量,则结果是 TRUE FALSE

• Sybase NULL 模式 -- val = NULL”在 “val”为 NULL 时为 true

• ANSI NULL 模式 -- val = NULL”在 “val”为 NULL 时为 unknown ANSI 规则的 where on 子句返回值为 true 的行,拒绝值为 false

unknown 的行。

ANSI 规则的 check 约束拒绝 false 值。因此,不会拒绝为 unknown

true 的结果。

如果:

启用 ansinull 模式 – 不要使用 Sybase NULL 比较 (val = NULL

val != NULL)。


希望在 insert update 时使用 ANSI-null 模式 – 不要在 check 约束中 使用 Sybase NULL 比较。

而应该使用 ANSI IS NULL IS NOT NULL 语法以避免生成预料之外的结果。

分隔标识符

quoted_identifier 选项设置为 on 时,如果语句的语法要求引用的字符串 包含一个标识符,则不需要用双引号将标识符括起来。例如:

set quoted_identifier on create table "1one" (c1 int)

然而, object_id 需要一个字符串,因此您必须将表名用引号引起来以选 择信息:

select object_id('1one')

----------------------- 896003192

您可以通过使引号加倍出现,从而在带引号的标识符中包括一个嵌入的 双引号:

create table "embedded""quote" (c1 int)

但是,在语句语法要求对象名表示为字符串时,无需使引号加倍出现:

select object_id('embedded"quote')

带中括号的标识符 Adaptive Server 支持一种可替代带引号的标识符的方 法,即使用中括号括起标识符。带中括号的标识符的行为与带引号的标 识符的行为相同,不同之处在于无需借助 set quoted_identifier on 就可使 用带中括号的标识符。

在使用带中括号的标识符代替带引号的标识符来创建对象时,对象名应 至少包含一个有效字符,例如:

create table [table name] create database [database name]

对象名中的所有尾随空格都被删除,因此以下语句均视为是相同的:

[tab1<space><space>] [tab1<space><space>] [tab1] [tab1<space><space><space>] tab1

这项规则适用于可使用带中括号的标识符创建的所有对象。 下面列出了在 Adaptive Server 中使用分隔标识符的限制:


标识符名称中都不能包含圆点 (.)

作为存储过程参数的对象名 – Adaptive Server 存储过程对象名可视 为字符串,因此不需要分隔符。例如,下面给出了实际存在名为 table 的表时的正确结果:

exec sp_help 'dbo.table'

但在下面的语句中,对象名中的中括号没有去掉:

exec sp_help 'dbo.[table]'

角色与 set 选项

您登录到 Adaptive Server 时,所有授予您的系统定义角色都会自动 激活。授予您的用户定义角色不会自动激活。要自动激活授予您的 用户定义角色,请使用 sp_modifylogin。请参见 《参考手册:过程》 中的 sp_modifylogin。请使用 set role role_name on set role role_name off 打开或关闭角色。

例如,如果授予了您系统管理员角色,您就可使用当前数据库中的 数据库所有者标识 (或用户 ID)。若要使用您真正的用户 ID,请 执行以下命令:

set role "sa_role" off

如果您不是当前数据库中的用户,而且没有 “guest”用户,则无法 设置 sa_role off

如果要激活的用户定义角色带有口令,则必须指定此口令才能打开 角色。因此,您应输入:

set role "role_name" with passwd "password" on

set role 期间,如果失败的角色激活尝试次数达到 max failed_logins 中设置的数值, Adaptive Server 会锁定该角色。发生这种情况时, locksuidlocdate lockreason 会在 syssrvroles 中更新。

内存数据库和宽松持久性数据库

将日志记录级别设置为 minimal 只会影响当前用户拥有的对象的日 志记录模式。但是,如果用户拥有系统管理员特权,则将日志记录 设置为 minimal 会影响用户会话中所有对象的日志记录模式。

将最低限度记录复制到使用 select into 创建的表中的数据。 with dml_logging = minimal 指定以后对此表执行的 DML 操作的记录模式

show_exec_info 不会显示 Adaptive Server 覆盖用户选择的最少记录模 式的原因。可使用 set switch print_minlogged_mode_override 查看此覆 盖原因。


特定于会话的日志记录模式设置将覆盖在表和数据库级别设置的日 志记录选项,并包括以下限制:

数据库范围的设置

基于日志记录模式禁用当前会话的 DML 日志记录:

数据库范围的日志记录模式设置

特定于表的日志记录模式设置

更新的表的所有权

如果将特定于会话的 DML 记录设置为 minimal,则运行 set dml_logging default 将会根据表和数据库范围的设置,使受影响的表 的日志记录模式恢复为其缺省日志记录模式。

如果数据库所有者或表所有者已经将表配置为以最少日志记录模式 运行,则不能使用 set dml_logging 执行完全记录 DML

针对会话设置压缩

对会话启用或禁用压缩不会更改现有数据的压缩级别。

更新的行会保持不压缩。 Adaptive Server 会在更新期间将所有压缩 行解压缩。

如果 set compression 设置为 off,则需要数据复制的命令 (例如,

reorg rebuild alter table)就会将数据行解压缩。

配置 set compression on 后,后续的更新会使用分区或表的压缩级别。

使用谓词特权

使用 set show_transformed_sql 并使 set noexec 运行但并不执行,查询 可显示 SQL 文本。

为会话启用 show_transformed_sql 时,DML select 命令会显示以下 各项的 SQL 文本:

谓词文本 (如果 SQL 命令中的表上存在谓词)。如果不存在谓 词, show_transformed_sql 显示 NULL

用户查询文本

执行集合处理、视图处理、加密和谓词合并后查询的 SQL 文 本。对于不访问任何谓词的查询, SQL 文本表示在执行视图处 理、加密等操作之后的文本。

执行子查询处理后查询的 SQL 文本。


分布式事务、 CIS set 选项

cis rpc handling 配置属性和 set transactional_rpc 命令的行为已随着 ASTC 的引入而发生了改变。在 12.0 以前的版本中,启用 cis rpc handling 会通过 CIS Client-Library 连接来传递所有 RPC。这样, 只要启用 cis rpc handling,无论是否明确设置 transactional_rpc,其行 为都会发生。对于 Adaptive Server 12.0,此行为已经更改。如果已 启用 cis rpc handling transactional_rpc off,事务内的 RPC 将通过 节点处理器来传递。在事务外执行的 RPC 则通过 CIS

Client-Library 连接来发送。

启用 Adaptive Server 分布式事务管理服务时,可以将 RPC 放入事务 中。这些 RPC 称为事务性 RPC。事务性 RPC 是其工作可以包含在 当前事务中的 RPC。远程工作单元可以和本地事务执行的工作一起 提交或回退。

若要使用事务性 RPC,请使用 sp_configure 启用 CIS 和分布式事务管 理,然后发出 set transactional_rpc 命令。当 set transactional_rpc on 且事务正等待处理时, Adaptive Server (而不是 Adaptive Server 节 点处理器)会协调 RPC

set transactional_rpc 命令缺省为 offset cis_rpc_handling 命令会覆盖 set transactional_rpc 命令。如果您设置 cis_rpc_handling on,则所有外 发 RPC 都由 CIS 处理。

有关使用 set transactional_rpcset cis_rpc_handling sp_configure 的 讨论,请参见 《组件集成服务用户指南》。

使用代理


image

注释 不具有显式权限时,“sa_role”和 “sso_role”都不能发出 set proxy login_name 命令。若要使用 set proxy login_name,所有用户 (包括 系统安全员)都必须具有系统安全员显式授予的权限。

image


您必须具有 master 数据库的 set proxy 特权或 set session authorization

特权,才能使用 set proxy set session authorization 命令。

可以使用以下命令将服务器用户标识切换成任何其它的服务器登录 名,并根据目标登录角色来限制其使用:

grant set proxy to user_or_role_list

[restrict role role_list | all | system]

有关详细信息,请参见 401 页的 “ grant”。

以初始 login_name 执行 set proxy set session authorization 会恢复先 前的标识。


不得在事务内执行 set proxy set session authorization

• Adaptive Server 仅允许一个级别的登录标识更改。因此,使用 set proxy set session authorization 更改标识后,在再次更改前必须恢复 为初始标识。例如,假定您的登录名为 “ralph”。若要以 “mary” 标识创建表,以 “joe”标识创建视图,然后返回到您自己的登录 标识,请使用以下语句:

set proxy "mary"

create table mary_sales (stor_id char (4),

ord_num varchar(20), date datetime)

grant select on mary_sales to public set proxy "ralph"

set proxy "joe"

create view joes_view (publisher, city, state)

as select stor_id, ord_num, date from mary_sales

set proxy "ralph"

如果用户发出 set proxy 来取得另一个用户的权限、登录名和 suid, 则 Adaptive Server 会检查代理用户对数据库对象的访问权,而不是 原始用户的访问权。

Adaptive Server 使用已登录用户的名称和口令信息,通过使用登录 凭据检查对加密密钥的自动访问。 Adaptive Server 不具有对代理用 户口令的访问权。通过登录口令对密钥的访问代表登录的用户,而 不是代表通过别名、 set proxy setuser 假定的用户。如果加密密钥 的副本是为登录关联而设置,但仍然由系统加密口令或主密钥进行 加密,则对这些加密密钥副本的访问会进行类似处理。

使用 lock wait

缺省情况下,不能立即获取锁的 Adaptive Server 任务会等待,直到 不兼容锁被释放,然后继续处理。这等同于未在 numsecs 参数中指 定值的 set lock wait

可以使用带 lock wait period 选项的 sp_configure 来设置服务器范围的 锁等待时间。

lock wait period (会话级设置为 set lock wait nnn)仅适用于用户定义 的表。这些设置对系统表毫无影响。

在会话级或在存储过程中使用 set lock 命令定义的锁等待时间会覆盖 服务器级别的锁等待时间。


如果 set lock wait 为其自身使用,且未为 numsecs 设置值,则当前会 话中的所有后续命令会无限期等待直到获取请求的锁。

sp_sysmon 报告等待锁的任务在等待期间未能获取锁的次数。

可重复读取的事务隔离级别

可重复读取的隔离级别 (也称为事务隔离级别 2)会持有语句读取 的所有页上的锁,直到事务完成为止。

当一个事务从表中读取行,而另一个事务可以修改相同的行,并在 第一个事务完成前提交更改时,会发生不可重复读取。如果第一个 事务重新读取这些行,这些行就具有了不同的值,因此初始读取是 不可重复的。可重复读取会在事务期间持有共享锁,阻止更新锁定 行或更新锁定页上的行的事务。

使用模拟统计信息

可以使用 optdiag 实用程序的 simulate 模式将模拟统计信息装载到数据库 中。如果在会话中发出了 set statistics simulate on,则查询会使用模拟统 计信息 (而不是使用表的实际统计信息)进行优化。

set 选项影响的全局变量

1-32 列出了包含有关 set 命令控制的会话选项的信息的全局变量。

1-32: 包含会话选项的全局变量

image

全局变量 说明

@@char_convert 如果字符集转换无效,则包含 0。如果字符集转换有效,则包含 1

@@client_csexpansion 返回从服务器字符集转换为客户端字符集时使用的扩展因子。例如,如果

@@client_csexpansion 包含一个值 2,则服务器字符集中的字符在转换为客户 端字符集后最多可以占用原来字节数的两倍。

@@cursor_rows 为可滚动游标专门设计的全局变量。该变量显示游标结果集中的总行数。返回 值 -1

@@datefirst 使用 set datefirst n 进行设置,其中, n 是介于 1 7 之间的值。返回

@@datefirst 的当前值,它指示为每个星期指定的第一天,表示为 tinyint

Adaptive Server 中,缺省值为星期日 (基于 us_language 缺省值),您可以 通过指定 set datefirst 7 来进行设置。有关这些设置和值的详细信息,请 参见 set 命令的 datefirst 选项。

@@isolation 包含 Transact-SQL 程序的当前隔离级别。 @@isolation 采用活动级别的值

01 3)。

@@lock_timeout 使用 set lock wait n 进行设置。返回当前的 lock_timeout 设置,单位为毫秒。

@@lock_timeout 返回值 n。缺省值为无超时。如果在会话开始时没有执行 set

l ock wait n@@lock_timeout 将返回 -1

@@options 包含以十六进制形式表示的会话的 set 选项。

@@parallel_degree 包含当前的最大并行度设置。


image

全局变量 说明

@@rowcount 包含最后的查询所影响的行数。任何不返回行的命令 (如 ifupdate delete 语句)都会将 @@rowcount 设置为 0。对于游标,@@rowcount 表示从游标结果 集返回到客户端 (直到最后一个 fetch 命令)的累积行数。

@@rowcount 即使在 nocount 设置为 on 时也可更新。

@@scan_parallel_degree 包含非聚簇索引扫描的当前最大并行度设置。

@@textsize 包含 select所返回的 textunitext image 数据的字节数的限制。 isql 的缺省限 制为 32KB;缺省值取决于客户端软件。它可以用 set textsize 为某个会话进行 更改。

如果使用 enable surrogate processing,则 Unicode 代理对 (两个 16 位值)将作 为单个字符返回,即使实际返回大小可能小于 @@text 大小值也是如此。

@@tranchained 包含 Transact-SQL 程序的当前事务模式。@@tranchained 为非链接模式则返回

0,为链式模式则返回 1


1-33 列出了用于 @@options set 选项和值。

1-33: @@options set 选项和值

数字值

十六进制值

set 选项

4

0x04

showplan

5

0x05

noexec

6

0x06

arithignore

8

0x08

arithabort

13

0x0D

control

14

0x0E

offsets

15

0x0F

statistics io statistics time

16

0x10

parseonly

18

0x12

procid

20

0x14

rowcount

23

0x17

nocount

77

0x4D

opt_sho_fi

78

0x4E

select

79

0x4F

set tracefile


对数据库中的 Java 使用 fipsflagger

fipsflagger on 时,如果使用下面的扩展, Adaptive Server 会显 示一条警告消息:

installjava 实用程序

remove java 命令

引用 Java 类作为数据类型的列和变量声明


Java-SQL 表达式用于成员引用的语句

fipsflagger 的状态不影响 Java 方法执行的算术表达式。

有关数据库中的 Java 的详细信息,请参见 Adaptive Server Enterprise

中的 Java

使用 set tracefile 的限制

不能保存系统任务 (如管家或端口管理器)的 SQL 文本。

必须具有 sa sso 角色,或被授予 set tracing 权限,才能运行启用或 禁用跟踪。

不允许 set tracefile 将现有文件打开以作为跟踪文件。

SA 或系统安全员会话期间,如果为指定 spid 启用 set tracfile,则 后续执行的所有跟踪命令都将对该 spid 而不是对系统管理员或系统 安全员 spid 生效。

如果 Adaptive Server 在写入跟踪文件时文件空间不足,它将关闭文 件并禁用跟踪。

如果 isql 会话为 spid 启动跟踪,但 isql 会话在未禁用跟踪的情况下 退出,则另一个 isql 会话可以开始跟踪此 spid

跟踪只在为其启用跟踪的会话中进行,而不在启用跟踪的会话中进 行。

不能从一个 sa sso 会话中同时跟踪多个会话。如果试图为已打开 一个跟踪文件的会话再打开一个跟踪文件, Adaptive Server 将发出 错误消息: tracefile is already open for this session.

不能从多个 sa sso 会话中跟踪同一会话。

当被跟踪的会话退出或禁用跟踪时,存储跟踪输出的文件会关闭。

在为跟踪分配资源之前,请记住,所有跟踪都要求每个引擎具有一 个文件描述符。

设置将诊断信息保存到跟踪文件的选项

可将 set tracefile 与其它可提供诊断信息以便更好地了解慢速查询的 set 命令和选项一起使用。以下是用于将诊断信息保存到文件的 set 命令和 选项:

set show_sqltext [on | off]

set showplan [on | off]

set statistics io [on | off]

set statistics time [on | off]


set statistics plancost [on | off]

以下是 set 选项:

set option show [normal | brief | long | on | off]

set option show_lop [normal | brief | long | on | off]

set option show_parallel [normal | brief | long | on | off]

set option show_search_engine [normal | brief | long | on | off]

set option show_counters [normal | brief | long | on | off]

set option show_managers [normal | brief | long | on | off]

set option show_histograms [normal | brief | long | on | off]

set option show_abstract_plan [normal | brief | long | on | off]

set option show_best_plan [normal | brief | long | on | off]

set option show_code_gen [normal | brief | long | on | off]

set option show_pio_costing [normal | brief | long | on | off]

set option show_lio_costing [normal | brief | long | on | off]

set option show_log_props [normal | brief | long | on | off]

set option show_elimination [normal | brief | long | on | off]

show_sqltext 的限制

必须具有 sa sso 角色才能运行 show_sqltext

不能使用 show_sqltext 为触发器输出 SQL 文本。

不能使用 show_sqltext 显示绑定变量或视图名。

从登录触发器导出 set 选项

Adaptive Server 可以使登录触发器内部的 set 选项对整个用户会话保持 有效。将自动导出以下 set 选项:


altnames

ansi_permissions

ansinull

arithabort [overflow | numeric_truncation]

arithignore [overflow]

cis_rpc_handling

close on endtran

colnames

command_status_reporting

dup_in_subquery

explicit_transaction_required

fipsflagger

flushmessage

fmtonly

forceplan

format

nocount

or_strategy

prefetch

proc_output_params

proc_return_status

procid

quoted_identifier

raw_object_serialization

remote_indexes

replication

rowcount

self_recursion

showplan

sort_resources

statistics io

statement_cache

strict_dtm_enforcement

string_rtruncation

textptr_parameters

transactional_rpc

triggers


标准 符合 ANSI SQL 的级别Transact-SQL 扩展。

ANSI SQL 标准指定与低于 15.7 Adaptive Server 版本中的

Transact-SQL 行为不同的行为。缺省情况下,会为所有 Embedded-SQL 预编译应用程序启用一致行为。其它需要匹配此标准行为的应用程序可 以使用以下 set 选项:

1-34: 符合初级 ANSI SQL set 选项

image

选项 设置

ansi_permissions on

ansinull on

arithabort off

arithabort numeric_truncation on

arithignore off

chained on

close on endtran on

fipsflagger on

quoted_identifier on

string_rtruncation on

transaction isolation level 3

权限 权限检查可能因您的细化权限设置而异。通常, set 权限缺省授予所有 用户,使用它不需要特殊的权限。但 set identity_insertset identity_updateset option show_optionset plan for showset proxyset repthresholdset roleset session authorizationset tracefile set switch 例 外。有关每个例外情况的权限要求,请参见上文的命令说明。

审计 sysaudits event extrainfo 列中的值如下:

image

事件 审计选项 审计的命令或访问权限 extrainfo 中的信息

88 security set proxy set session

authorization

角色 – 当前活动角色

关键字或选项 NULL

以前值 – 以前的 suid

当前值 – 新的 suid

其它信息 NULL

代理信息 – 当 set proxy set session authorization 无参 数时为初始登录名;否则为 NULL


另请参见 命令 create triggerfetchgrantinsert lock tablerevoke set .

函数 convert .

实用程序 isqloptdiag.

存储过程 sp_setrepdbmodesp_setrepdefmode.




--------------------------------------华丽的分割线-------------------------------------------------------------------------
之前就已经研发成功了能够从Sybase SQL Anywhere的DB文件中恢复数据的工具:ReadASADB。
此工具支持ASA v5.0,v6.0,v7.0,v8.0,v9.0,v10.0,v11.0,v12.0等版本。
恢复Sybase SQL Anywhere的工具在国内应该算首创。

ReadASADB功能
能够从损坏的SQL Anywhere数据文件(.db)和UltraLite数据文件(.udb)上提取数据的非常规恢复工具

  1. 适用于所有的SQL Anywhere版本    包括:5.x,6.x,7.x,8.x,9.x,10.x,11.x,12.x
  2. 适用于所有的UltraLite版本
  3. 能够恢复出来表结构和数据
  4. 能够恢复自定义数据类型
  5. 能够恢复存储过程等对象的语法
  6. 能够导出到目标数据库
  7. 能够导出到SQL文件并生成导入脚本
  8. 支持多种字符集  包括:cp850、cp936、gb18030、utf8等
  9. 能够恢复未加密或者简单加密类型的数据
  10. 简单易用
  11. 限制:不支持AES加密的数据文件
请参考:研发成功了从Sybase SQL Anywhere的DB文件上恢复数据的工具
            SQL Anywhere数据库非常规恢复工具ReadASADB使用介绍

ReadASADB适用场景

各种误操作:

  1. 误截断表(truncate table)
  2. 误删除表(drop table)
  3. 错误的where条件误删数据
  4. 误删除db或log文件
  5. 误删除表中的字段

本工具的应用场景:

1.因为物理磁盘故障、操作系统、系统软件方面或者掉电等等原因导致的Sybase SQL Anywhere数据库无法打开的情况;
2.误操作,包括truncate table,drop table,不正确的where条件导致的误删除等;
Sybase SQL Anywhere无法打开时,比较常见的错误是:Assertion failed。
如:
1、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Checkpoint log: invalid bitmap page -- transaction rolled back
2、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Page number on page does not match page requested -- transaction rolled back
3、Internal database error *** ERROR *** Assertion failed:200502 (9.0.2.2451) Checksum failure on page 23 -- transaction rolled back
4、File is shorter than expected
5、Internal database error *** ERROR *** Assertion failed: 201116 Invalid free list index page found while processing checkpoint log -- transaction rolled back
6、*** ERROR *** Assertion failed: 51901 Page for requested record not a table page or record not present on page等等。
+-------------------------------------华丽的分割线-------------------------------------------------------------------------