以下列出了在 12.0.0 版中引入的对 SQL Anywhere 的行为更改。有关平台支持和版本支持的信息,请参见 http://www.sybase.com/detail?id=1061806。
缺省情况下已启用新数据库的校验和 现在,在创建新数据库时,缺省情况下会启用全局校验和。每次读取或写入数据库页面时都会计算和验证全局校验和,同时,全局校验和可用于确定磁盘上的数据库页面是否已发生修改。要控制是否为数据库启用全局校验和,可以在初始化实用程序中使用 -s[ + | - ] 选项,或者使用 CREATE DATABASE 语句的 CHECKSUM 子句。请参见:
检查点日志更改 在以前的版本中,当停止数据库时,SQL Anywhere 会完全截断检查点日志。在 12 版中,检查点日志使用的历史记录会保留在数据库中,用于确定下一会话的检查点日志的正确大小。
在会话间保留检查点日志可以避免在数据库下次启动时分配检查点日志的开销,同时可避免在扩展文件时可能产生的文件碎片。现在,当数据库关闭时,数据库文件会比以前版本中的文件大,但额外的空间可供检查点日志在数据库重新启动时重复使用。请参见检查点日志。
网络数据库服务器现在可以分配最大数量的工作 在以前的版本中,网络数据库服务器在启动时会分配与数据库服务器进程并发水平相对应工作数量。在 12 版网络服务器中,分配的工作数量与最高服务器进程并发水平相对应。这种工作数量的增加将提高工作堆栈对网络数据库服务器的地址空间需求,可能影响数据库服务器可以分配的数据库高速缓存量。
例如,在 32 位 Windows 平台上,缺省情况下每个工作的堆栈需要 1 MB 地址空间。在 Windows 上启动的 11 版网络服务器需要为工作堆栈提供 20 MB 地址空间,因为它的缺省进程并发水平为 20。但是,在 Windows 上启动的 12 版网络服务器需要 80 MB 地址空间,因为缺省的最大工作数量为 80。这一变化不会影响到个人服务器或 Windows Mobile。请参见SQL Anywhere 线程。
重建数据库时不再装载旧统计信息 当重建 11 版或更早版本的数据库时,LOAD STATISTICS 语句会静默跳过将旧字符串统计信息装载到新数据库中的过程,但是会升级字符串统计信息的版本。请参见LOAD STATISTICS 语句。
使用升级实用程序升级数据库不会升级字符串统计信息的版本。
定位的 DELETE 和 UPDATE 语句 以前,可以在定位的 UPDATE 或 DELETE 语句中指定 TOP 或 FIRST 子句,但这些子句将被忽略。现在,在定位的 UPDATE 或 DELETE 语句中指定 TOP 或 FIRST 将返回语法错误。请参见UPDATE(定位)语句 [ESQL] [SP]和DELETE 语句(定位) [ESQL] [SP]。
JDBC 驱动程序现在报告 CHAR 和 VARCHAR,而不是都报告 CHAR 以前,当应用程序使用 iAnywhere JDBC 驱动程序连接并尝试描述包含 CHAR 列的表或结果集的元数据时,元数据将以 CHAR 的形式返回该列的类型名称,但 SQL 类型将仍然以 Types.VARCHAR 的形式返回。如果 JDBC 应用程序希望 JDBC 驱动程序以 Types.CHAR 的形式返回 CHAR 列的 SQL 类型,则必须为应用程序设置 odbc_distinguish_char_and_varchar 数据库选项。现在,无论数据库选项设置如何,新的 SQL Anywhere JDBC 驱动程序和不建议使用的 iAnywhere JDBC 驱动程序为 CHAR 类型表列和结果集列返回类型名 CHAR 和 SQL 类型 Types.CHAR,为 VARCHAR 类型列返回类型名 VARCHAR 和 SQL 类型 Types.VARCHAR。
对 CURRENT UTC TIMESTAMP 和 UTC TIMESTAMP 空间值的更改 CURRENT UTC TIMESTAMP 空间值的基础数据类型,以及 UTC TIMESTAMP 空间值的缺省值,现在均为 TIMESTAMP WITH TIME ZONE。如果这些值与定义为 TIMESTAMP 的列一起使用,时区偏移将被截断,并且难以察觉明显的行为差异。但是,如果这些值与 CHAR 或 VARCHAR 列一起使用,偏移将导致生成与以前不同的值。请参见CURRENT UTC TIMESTAMP 特殊值和UTC TIMESTAMP 特殊值。
缺省情况下,个人服务器不再启动 TCP/IP 缺省情况下,个人数据库服务器仅启动共享内存协议。如果想要使用 TCP/IP 协议,必须在启动个人数据库服务器时使用 -x 服务器选项指定该协议。请参见-x 数据库服务器选项和通信协议注意事项。
TCP/IP 连接 通过 TCP/IP 进行连接时,如果与 HOST 连接参数一起提供了主机名,则数据库服务器名称(由 ServerName (SERVER) 连接参数指定)便不再是必需项。请参见主机连接参数。
Host (IP) 协议选项 在以前的版本中,HOST 协议选项会指定一个或多个主机来运行数据库服务器,但该协议选项被视为对客户端库的提示。如果在这些主机上未找到数据库服务器,则会执行网络广播来查找数据库服务器。在本版本中,如果已指定 HOST 选项,则缺省情况下仅在指定的主机中搜索数据库服务器,并且客户端不会执行广播来查找数据库服务器。
此行为相当于将 DoBroadcast 协议选项设置为 Direct。如果数据库服务器正在一个不是由 HOST 协议选项所指定的计算机上运行,则不会发现此数据库服务器。如果想要执行与以前版本相同的行为,可在连接字符串中指定 DoBroadcast=All。请参见Host (IP) 协议选项(仅客户端)和DoBroadcast (DOBROAD) 协议选项。
ServerPort (PORT) 协议选项 在以前的版本中,PORT 协议选项会指定一个或多个端口号来监听数据库服务器,但该协议选项被视为对客户端库的提示。当客户端库发出广播时,它会使用由 PORT 协议选项所指定的端口号,以及缺省端口号 2638。在本版本中,如果已指定 PORT 选项,则只有指定的端口可用于查找数据库服务器。请参见ServerPort (PORT) 协议选项。
为共享内存连接而考虑使用的 Idle 连接参数 Idle 连接参数可指定连接的空闲超时时间。现在,共享内存连接会考虑使用此连接参数。共享内存连接的缺省空闲超时值为零(空闲永不超时)。请参见Idle 连接参数。
数据库服务器名称不能与由 ServerName (Server) 连接参数指定的名称相同。 在以前的版本中,Name 数据库属性值始终与在 ServerName (Server) 连接参数中指定的值相匹配。但是,如果客户端连接到一个数据库并使用新 NodeType (NODE) 连接参数,然后该客户端被重定向为连接到另一个数据库服务器上,则此时这两个名称不相匹配。请参见NodeType (NODE) 连接参数。
使用替代服务器名称进行连接时,某些操作不受支持 在以前的版本中,如果客户端使用替代服务器名称连接到一个数据库,则可以创建、停止和删除同一数据库服务器中的其它数据库。而现在,当使用替代服务器名称进行连接时,将不再支持这些操作。
数据库镜像行为更改和不建议使用的功能 使用 -xp 服务器选项可定义数据库镜像选项(例如仲裁服务器名称、验证字符串),且不建议使用同步模式。但是,如果想要在镜像系统中使用数据库服务器,仍需要指定 -xp on。请参见-xp 数据库选项。
现在,可以使用以下 SQL 语句定义数据库镜像设置:
在本版本中引入了对数据库镜像的以下行为更改:
有关本版本中数据库镜像增强的信息,请参见数据库镜像增强。
嵌入式 SQL 游标行为更改 现在,嵌入式 SQL 游标缺省设置为 READ ONLY。而且,必须在 PREPARE 语句而不是在 DECLARE 语句中指定显式 FOR READ ONLY 或 FOR UPDATE 子句。请参见:
为 CREATE OR REPLACE PROCEDURE 语句关闭游标 当执行 CREATE OR REPLACE PROCEDURE 语句时,任何因连接而打开的游标都将关闭。请参见CREATE PROCEDURE 语句。
反引号界定标识符 现在,反引号可用作界定标识符。请参见标识符。
锁定行为中的更改 要实现最大并发性,可以单独锁定一行中的键值部分和非键值部分。更新某行的非键值列时不会妨碍对引用该行的外键行执行插入和删除操作。请参见锁定的工作方式。
ODBC 驱动程序行为更改 ODBC 函数 SQLTables 可用于获取所有模式(用户)的列表,方法是使用 SQL_ALL_SCHEMAS 参数来调用该函数。在以前的版本中,由此函数返回的用户列表仅包括拥有表的用户。在新初始化的数据库中,这种结果会排除某些用户,特别是 DBA 用户。现在,返回的是完整模式列表,包括那些不具有表的用户。
divide_by_zero_error 选项 在版本 11 中不受支持的 divide_by_zero_error 选项已在版本 12 中得到支持。如果您在使用实例化视图,则必须将此选项设置为 On(缺省设置)方可创建新的实例化视图。请参见divide_by_zero_error 选项和实例化视图限制。
PrefetchBuffer (PBUF) 连接参数 在以前的版本中,由 PrefetchBuffer (PBUF) 连接参数指定的用于缓冲行的内存量在所有连接中共享。在本版本中,由此连接参数指定的内存量适用于每个连接。请参见PrefetchBuffer (PBUF) 连接参数。
自动删除已删除用户的外部登录 现在,如果从数据库中删除了一个用户,则会自动删除该用户的所有外部登录。在以前的版本中,必须单独删除外部登录。请参见删除用户 (Sybase Central)。
无法再同时执行数据库清理程序和数据库校验 在以前的版本中,可同时运行数据库校验和数据库清理程序,并报告因并发访问数据库页面而产生的错误。现在,在同一数据库上无法再同时执行数据库校验操作和数据库清理程序。需等待数据库清理程序结束后才可进行数据库校验,如果通过调用 sa_clean_database 启动数据库清理程序,则需要等待数据库校验结束后才可运行数据库清理程序。数据库清理程序可与表校验或索引校验同时操作。
更改了 sa_index_density 系统过程中各列的数据类型 密度列和分布偏差列的数据类型已从 numeric(8,6) 更改为 double。请参见sa_index_density 系统过程。
DATEDIFF 函数 在以前的版本中,DATEDIFF 函数为小时和更小单位时间的日期部分返回 INTEGER。现在,DATEDIFF 为这些日期部分返回 BIGINT。请参见DATEDIFF 函数 [Date and time]。
OPENXML 运算符 OPENXML 字符串运算符不再由 dbo 数据库用户所拥有。对于使用 dbo. 来限定名称的 OPENXML 运算符,任何查询在使用它们时都必须进行更改以删除 dbo.。现在运行类似以下语句时将会返回错误:
SELECT ... FROM dbo.OPENXML(...) |
在以前的版本中,OPENXML 运算符将 NCHAR 数据转换为 CHAR 编码,并以 CHAR 格式分析数据。现在,如果在输出内容中含有 NCHAR 列,则 NCHAR 数据在 NCHAR 编码过程中解析。
在以前的版本中,WITH 子句中的 XPath 参数只能是文字字符串。现在则可以是文字字符串和变量。请参见OPENXML 运算符。
从 11 或更早版本升级而来的数据库在 SYS.SYSPROCEDURE 系统视图中包含有关 OPENXML 的行,但是该定义不能用在 12 版的数据库中。如果试图如下所示使用运算符,将会返回一个语法错误:
SELECT * FROM dbo."OPENXML"(...) |
sa_text_index_vocab 系统过程 现在,尝试在 NCHAR 文本索引上调用 sa_text_index_vocab 将返回错误。已改用新的 sa_text_index_vocab_nchar 系统过程。请参见sa_text_index_vocab_nchar 系统过程。
此外:
tab_owner 参数现在是可选的。
sa_text_index_vocab 现在可与 CALL 语句一起使用。
sa_text_index_vocab 现在可在过程内的语句中使用。
参数值现在可以是主机变量或表达式。
更改了 Mac OS X 的缺省归类 在以前的版本中,如果缺少 Mac OS X 上的任何一个环境变量,初始化实用程序 (dbinit) 都将为其缺省 CHAR 字符集使用 ISO_8859-1:1987,为其 CHAR 归类选择 ISO1LATIN1(与 Linux 行为相同)。现在,则选择 UTF-8 编码的 UTF8BIN 归类。请参见建议的字符集和归类。
保留字 以下是添加到 SQL Anywhere 12.0.0 版的数据库中的保留字列表:
datetimeoffset
inner
openxml
spatial
treat
以下是在 SQL Anywhere 12.0.0 版的数据库中删除的保留字列表:
index_lparen
lock
with_cube
with_lparen
syntax_error
with_rollup
WITH ( index-hint ) 子句行为更改 以前,如果表中的主键索引、外键索引和/或普通索引名称相同,优化程序将解决主键或外键索引的名称。现在,优化程序解决普通索引的名称。如果名称不存在,优化程序将先解决主键名称,随后解决外键名称。请参见WITH table-hint 子句,FROM 子句。
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |