Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.0 (中文) » SQL Anywhere 12 - 更改和升级 » 10.0.0 版中的新功能 » SQL Anywhere » 行为更改

 

杂类

  • 重命名了 Adaptive Server Anywhere   在 10.0.0 版中,Adaptive Server Anywhere 已重命名为 SQL Anywhere。

  • 升级更改   [升级数据库] 向导、升级实用程序 (dbupgrad) 和 ALTER DATABASE UPGRADE 语句不能用于将版本 9.0.2 和更早版本的数据库升级到版本 10。要将早期版本的数据库升级到版本 10,必须通过执行卸载和重装来重建数据库。请参见升级 SQL Anywhere

  • 口令更改   在新建的数据库中,所有口令均区分大小写,与数据库是否区分大小写无关。新数据库的缺省 DBA 口令是 sql

    重建现有数据库时,按以下条件确定口令的大小写:

    • 如果口令最初是在不区分大小写的数据库中输入的,则目前的口令依然不区分大小写。

    • 如果口令最初是在区分大小写的数据库中输入的,则大写和混合大小写的口令依然区分大小写。不过,如果口令全部以小写输入,则口令不区分大小写

    • 对现有口令和新口令进行的更改均区分大小写。

    数据库服务器现在使用 SHA256 来散列口令。旧(专有)散列算法仍然支持从旧数据库重装的口令,但所有新口令将使用 SHA256。

    现在口令的存储格式是 UTF-8,因此如果数据库被重装入带有不同字符集的数据库时,口令将继续有效。

    在先前的版本中,当从嵌入式 SQL 进行连接时,有可能使用 DBA 权限连接到数据库,然后在不指定口令的情况下,为任何用户成功建立到同一数据库的第二个连接。现在必须指定每个连接的口令。

  • 空格填充更改   在 SQL Anywhere 先前的版本中,带有空格填充的数据库的字符串比较的语义就好像是用无限数量的空格填充两个正在比较的字符串。在 10 版中,对这些语义进行了更改,从而可以通过忽略每个字符串中的尾随空白来执行这种比较。

    对于等于 (=) 和不等于 (<>) 比较,语义方面没有变化;两种技术(空格填充和忽略尾随空白)会生成相同的结果。但是,对于不等式比较是有差别的。例如,假定您有双字节字符串值 'a*',其中 '*' 代表数据库归类中的一个字符,该字符小于空格的值。在 SQL Anywhere 先前的版本中,比较谓语 'a*' < 'a' 返回 TRUE。在版本 10 中,该谓语生成 FALSE,这是因为较短的字符串在被比较之前并没有用空格进行填充。

    有关空格填充的详细信息,请参见初始化实用程序 (dbinit)CREATE DATABASE 语句

  • 属性返回值的大小写   由 PROPERTY 函数返回的服务器属性在以前的版本中返回 YES 或 NO,现在则返回 Yes 或 No。由 DB_PROPERTY 函数返回数据库属性和由 CONNECTION_PROPERTY 函数返回的连接属性在以前的版本中返回 ON 或 OFF,现在则返回 On 或 Off。此更改可能会影响区分大小写的数据库或应用程序,它们使用区分大小写的字符串比较。

  • 对服务器属性返回值进行的更改   在先前的版本中,服务器属性 ConnsDisabled 和 RememberLastStatement 返回值 ON 和 OFF。它们现在返回值 Yes 和 No。请参见数据库服务器属性

  • sasrv.ini 文件的缺省位置已更改   在 Windows 上 sasrv.ini 的缺省位置是 %ALLUSERSPROFILE%\Application Data\SQL Anywhere 10,而在 Unix 上为 $HOME/.sqlanywhere10。在先前的版本中,该 Unix 文件称为 .sasrv.ini。在所有的平台上,该文件现在均称为 sasrv.ini

  • 连接到名称较长的数据库服务器   在 Windows 和 Unix 上,9.0.2 版及更早版本的客户端无法连接到名称长于 40 个字节的 10.0.0 版和更高版本的数据库服务器。

  • 数据库服务器始终启用字符集转换   不再支持用于启用和禁用字符集转换的 -ct 数据库服务器选项。数据库服务器始终启用字符集转换,但如果数据库服务器决定不再需要此功能,则不再使用它。指定 CharSet=none,就可以从客户端禁用字符集转换。请参见CharSet (CS) 连接参数

  • Windows CE 不支持字符集转换   Windows CE 不支持字符集转换。在先前的版本中,Windows CE 的数据库服务器禁用字符集转换,因此您可以对数据库使用任意字符集。现在,您必须使用操作系统字符集或 UTF-8 创建 Windows CE 的数据库。请参见安装注意事项:在 Windows Mobile 上使用 ICU

  • 对系统过程和函数进行的更改   以下是对系统过程和函数进行的更改的列表:

    • 若干系统过程已成为内部过程   外部系统过程 xp_read_file、xp_write_file、xp_sprintf、xp_scanf 和 xp_cmdshell 现在是内部系统过程。

    • sa_validate 系统过程   sa_validate 系统过程现在需要 VALIDATE 权限。请参见sa_validate 系统过程

    • sa_reset_identity 系统过程   现在需要 table-name 参数。此外,如果不指定 owner-name 参数,则 table-name 参数必须唯一标识数据库中的某个表。请参见sa_reset_identity 系统过程

    • sa_locks 系统过程   sa_locks 系统过程的输出已更改为返回其它信息,其中包括连接 ID、用户 ID、表名、锁类和锁持续时间。请参见sa_locks 系统过程

    • RAND 函数   以前,每个连接都带有相同的种子值,从而 RAND 函数将为每个连接返回相同的序列。现在,每个连接都被提供唯一的种子,从而每个连接将得到不同的随机序列。请参见RAND 函数 [Numeric]

    • DB_CALLBACK_START 和 DB_CALLBACK_FINISH 回调函数   现在,所有的平台都支持 DB_CALLBACK_START 和 DB_CALLBACK_FINISH 回调函数(以前,只有 Windows 平台才支持它们)。请参见db_register_a_callback 函数

  • 分散读取不再用于使用 UNC 名称指定的文件   分散读取不再用于远程计算机上的文件,也不再用于使用 UNC 名称(如 \\mycomputer\myshare\mydb.db)指定的文件。请参见使用适当的页大小

  • 主键和外键约束中的列排序   创建主键约束时,可以指定列的任意顺序,与列在表中出现的顺序无关。另外,倘若指定了外键列和主键列之间的映射,现在还可以创建外键列顺序不同于其所引用的主键的外键。请参见CREATE TABLE 语句中的 PRIMARY KEY 子句。

  • 索引中不允许有重复的列名称   以前,索引中允许对列的重复引用(主键、外键和唯一约束说明除外)。现在,该行为在所有类型的索引中都一致;指定重复列名称就会返回一个错误。此外,如果较旧数据库包含一个带有重复列引用的索引,则 dbunload 实用程序将在生成 reload.sql 时删除该索引的重复列。请参见CREATE TABLE 语句

  • Encryption 数据库属性   现在,执行 SELECT DB_PROPERTY( 'Encryption' ) 可能会返回 None 以外的值,即使在数据库未加密的情况下也是如此。这种情况将在为数据库启用表加密时发生。如果您的应用程序执行此命令,将其作为检查数据库是否加密的方法,则将改用 SELECT DB_PROPERTY( 'EncryptionScope' )。请参见数据库属性

  • 使用 FIPS 启动 HTTPS 的语法中的更改   以前,您将指定 -xs HTTPS_FIPS(...)。现在,您必须指定 -xs HTTPS(FIPS=yes;...)。仍然支持以前的语法,但不建议使用。请参见-xs dbeng12/dbsrv12 服务器选项

  • 用户 ID 的最大长度为 128 字节   在先前的版本中,当某语句需要用户 ID 时,数据库服务器将在使用长度超过 128 个字节的用户 ID 之前,先将其截断。如果设置了 string_rtruncation 选项,将返回一个截断错误。现在,如果指定了长度超过 128 个字节的用户 ID,则无论 string_rtruncation 选项的设置是什么,数据库服务器都将返回一个错误。请参见标识符

  • 服务器名称的最大长度   TCP/IP 和共享内存连接上的数据库服务器名称的最大长度已经从 40 字节增加到 250 字节。请参见-n dbeng12/dbsrv12 服务器选项

  • 对标识符中可接受字符进行的更改   标识符中不再允许使用双引号和反斜线。请参见标识符

  • 重命名了 LicensesInUse 服务器属性   服务器属性 LicensesInUse 已重命名为 UniqueClientAddresses。请参见数据库服务器属性

  • SQL Anywhere OLE DB 提供程序名称已更改   SQL Anywhere OLE DB 提供程序(以前有 ASAProv、ASAProv.90、ASAProv.80)现在称为 SAOLEDB。版本 10 提供程序可以由名称 SAOLEDB.10 专门引用。

  • SQL Anywhere 示例数据库 ODBC DSN 已更改   ODBC 数据源(以前是 ASA 9.0 Sample)现在称为 SQL Anywhere 10 Demo。

  • 对连接字符串进行的更改   对于 ODBC 和 OLE DB 连接,现在,连接参数的优先级为:连接字符串、SQLCONNECT 环境变量、数据源。以前,在 ODBC 和 OLE DB 中,数据源的优先级高于 SQLCONNECT。请参见连接参数的语法规则

  • 现在空值连接参数视为未指定的参数   对于所有的 API,使用空值指定的连接参数被视为未指定该参数。在先前的版本中,根据指定空值的位置和所使用的 API ,将空值视为未指定的参数或一个空字符串。请参见连接参数的语法规则

  • 当开启审计时无法关闭事务日志   在该软件先前的版本中,当某数据库的审计已打开时,您可以停止该数据库的事务日志。现在,如果打开了数据库的审计,就必须使用事务日志。如果想要停止使用事务日志,则必须关闭审计。

  • 不能以只读模式启动打开了审计的数据库   在该软件先前的版本中,您可以以只读模式启动打开了审计的数据库。现在,不能以只读模式启动开启了审计的数据库。

  • 现在带符号 BIGINT 列的精度是 19 而不是 20   以前,当 ODBC 应用程序使用 SQL_BIGINT 描述带符号的 BIGINT 列时,会返回精度值 20,这个值并不正确。现在,则返回值 19。您需要更改任何依赖先前(不正确的)值的应用程序。

  • Java VM 增强   SQL Anywhere 不再将 Java 选项作为单独授权的组件提供。数据库中的 Java 现在使用外部 VM(而不是使用内部 VM)运行 Java 代码。因此,您现在可以使用任何想要的 Java VM,并且不再局限于特定的 JDK 版本或 Java 目标。新初始化的数据库始终启用 Java。

    这将产生以下的更改:

    • 不支持的数据库选项   SQL Anywhere 不再支持以下的选项:

      • describe_java_format
      • java_heap_size
      • java_namespace_size
      • java_page_buffer_size
      • java_input_output
      • return_java_as_string

    • 不支持的属性   不再支持以下的属性:

      • 数据库属性:

        • JDKVersion
        • JavaHeapSize
        • JavaNSSize
      • 数据库服务器属性:

        • IsJavaAvailable
        • JavaGlobFix
      • 连接属性:

        • JavaHeapSize
        • java_input_output

    • 新的 JavaVM 属性   JavaVM 数据库属性返回数据库服务器在数据库中执行 Java 时所使用的 Java VM 的路径。

    • 不支持的兼容性视图列   以下的列不再可用于系统兼容性视图:

      • SYSINFO.classes_version
      • SYSJAVACLASS.replaced_by
      • SYSJAVACLASS.type_id

    • 数据库实用程序不建议使用的 Java 选项   以下的数据库实用程序选项已不建议使用:

      • 初始化实用程序 (dbinit):-ja, -jdk
      • 卸载实用程序 (dbunload):-jr
      • 升级实用程序 (dbupgrad):-ja, -jdk, -jr, -j

    • Java 支持 CREATE DATABASE 和 ALTER DATABASE 语句中不建议使用的某些与 Java 相关的子句   CREATE DATABASE 语句不再支持 JAVA ON | OFF 和 JDK 版本子句,ALTER DATABASE 语句不再支持 REMOVE JAVA 子句。

    • 新的 Java 文件   除了所提到的更改外,还增加了以下文件:java\sajvm.jar

  • Ping 实用程序 (dbping)   以前,如果数据库服务器返回的某属性值为 NULL,则 Ping 实用程序 (dbping) 报告一个错误。现在,dbping 在属性值未知时输出 NULL 并退出,同时返回成功返回代码。如果想要 dbping 在属性值未知时退出并返回失败的返回代码,可以指定 -en 选项。请参见Ping 实用程序 (dbping)

  • 重命名的环境变量   此版本已重命名了以下的环境变量:

    以前的名称 新名称
    ASTMP SATMP
    ASDIR SADIR
    ASLOGDIR SALOGDIR
    ASLANG SALANG
    ASCHARSET SACHARSET

  • 对 PHP 模块文件名称进行的更改   PHP 模块文件的命名约定已更改。在先前的版本中,这些文件命名为 phpX_sqlanywhereY.dll,其中 X 为 PHP 主版本号,Y 为 SQL Anywhere 主版本号。现在,PHP 模块文件命名为 php-a.b.c_sqlanywhereY.dll,其中 a.b.c 是构建文件时依据的 PHP 源的完全版本号,而 Y 是 SQL Anywhere 主版本号。例如,php-5.0.2_sqlanywhere10.dll

  • 指定 PrefetchBuffer 连接参数的值   为了向后兼容,PrefetchBuffer 连接参数现在将小于 16384 的值解释为千字节。不建议使用没有 k 后缀的千字节。如果因为 PrefetchBuffer 的值在有效范围之外或在没有 k 后缀的千字节中进行定义而使该值得到了调整,则客户端日志文件将显示使用的实际 PrefetchBuffer 值。请参见PrefetchBuffer (PBUF) 连接参数

  • 无法删除系统定义的域   不再可以从数据库中删除系统定义的域(如 MONEY 或 UNIQUEIDENTIFIERSTR)。请参见DROP DOMAIN 语句

  • 对数据库实用程序进行的更改   以下为对数据库实用程序所做的更改的列表,如下所述:

    • 服务实用程序 (dbsvc) 可以授予 "作为服务登录" 的特权。   如果使用 -a 选项,并且尝试用没有启用 "作为服务登录" 的特权的帐户运行服务,则服务实用程序 (dbsvc) 将提示您授予 "作为服务登录" 的特权。如果使用 -y 选项,则 dbsvc 将尝试授予 "作为服务登录" 的特权而不提示您。请参见用于 Windows 的服务实用程序 (dbsvc)

    • 可以针对远程服务器使用卸载实用程序 (dbunload) -an 选项   在进行此更改之前,您可以仅针对同一计算机上的服务器运行 dbunload -an。现在可以针对不同计算机上运行的服务器运行 dbunload -an。请参见卸载实用程序 (dbunload)

    • 服务器枚举实用程序 (dblocate) 主机名或 IP 地址格式   主机名或 IP 地址可以使用任何格式,与是否指定 -n 无关。例如,如果某个服务器运行在 myhost.mycompany.com(其 IP 地址为 1.2.3.4)上,要从使用 mycompany.com 域的任何计算机中仅列出在此计算机上运行的服务器,则可以使用 dblocate myhostdblocate myhost.mycompany.comdblocate 1.2.3.4 中的任意一个。在先前的版本中,只有 dblocate myhost.mycompany.comdblocate -n 1.2.3.4 会起作用,因为给定的主机名或 IP 地址必须匹配 dblocate 所显示的地址字符串(不包括端口号)。请参见服务器枚举实用程序 (dblocate)

  • 缺省相关的更改   对缺省设置进行了以下的更改:

    • 为个人数据库服务器更改了缺省 TCP/IP 监听地址   在 Windows 上,个人数据库服务器现在监听 127.0.0.1(而不是 0.0.0.0)上的连接。此更改意味着运行 SQL Anywhere 且启用了 Windows 防火墙的用户在能够使用 dbeng10 之前无需将其添加到异常列表中。

      由于这一更改,同 LINKS=tcpip(HOST=hostname;DOBROADCAST=none) 相连接的尝试在 hostname 是计算机的实际主机名或 IP 地址的情况下将不起作用。但是,使用主机名 localhost127.0.0.1 将有效。

    • 缺省数据库页面大小更改为 4096   SQL Anywhere 数据库的缺省数据库页面大小已从 2048 字节更改为 4096 字节。此页面大小在许多环境中已证实能提高性能。请参见CREATE DATABASE 语句

      如果没有指定 -gp 选项并在启动数据库服务器没有装载数据库,则数据库服务器的缺省页面大小为 4096。

    • 对缺省最大高速缓存大小进行的更改   已增加了 Windows(非 AWE)的缺省最大高速缓存大小。现在将缺省最大高速缓存大小限制为下列各项中较小者:

      • 90% of (total_physical_memory - 4 MB),但不小于 2 MB

      • (available address space - 512 MB)

    • Unix 高速缓存大小   计算 Unix 上最大高速缓存大小的方法已更改。现在,缺省的最大高速缓存大小的计算方法如下:

      • 在 32 位 Unix 平台上,它是总物理内存的 90% 或 1,834,880 KB 的较小者。

        在 64 位 Unix 平台上,它是总物理内存的 90% 和 8,589,672,320 KB 的较小者。

      请参见-ch dbeng12/dbsrv12 服务器选项

    • Unix 存储过程   升级现有的 Unix 应用程序时,如果您使用的是 64 位数据库服务器,则必须将任何现有的外部存储过程更改为 64 位。

    • 将 NULL 常量转换为 NUMERIC 或字符串数据类型时的缺省大小   将 NULL 常量转换为 NUMERIC 数据类型或字符串数据类型(如 CHAR 和 VARCHAR)时,此长度现在设置为 0(而不是 32767)。

    • openxml 系统过程的缺省 URI 已更改   使用 openxml 系统过程时,如果未指定命名空间声明,则缺省情况下将前缀 mp 绑定到统一资源定位符 (URI)。在该软件的先前版本中,此 URI 为 urn:ianywhere-com:asa-xpath-metaprop。缺省 URI 已重命名为 urn:ianywhere-com:sa-xpath-metaprop。请参见openxml 系统过程

  • 对服务器选项 -c、-ch- 和 -cl 的高速缓存大小百分比计算进行的更改   使用 -c、-ch 或 -cl 的 P(百分比)时,系统现在将针对物理系统内存的数量或可用地址空间的数量(取较低者)计算百分比。这就消除了为高速缓存分配的内存多于寻址可用的内存的风险。请参见-c dbeng12/dbsrv12 服务器选项-ch dbeng12/dbsrv12 服务器选项-cl dbeng12/dbsrv12 服务器选项

  • 重命名了 Procedure_profiling 服务器选项   用于控制过程分析的服务器选项的正确名称现在为 ProcedureProfiling。仍接受以前的格式 Procedure_profiling,但未来的版本将不会支持它。请参见sa_server_option 系统过程

  • 在 HP-UX 上,当连接到不使用缺省端口的数据库服务器时,TCP/IP 端口号无需由客户端指定   在该软件先前的版本中,如果在 HP-UX 上启动数据库服务器,而且缺省端口 (2638) 已被使用或不想使用此缺省端口,则必须使用 ServerPort [PORT] 协议选项来指定一个端口号。

    在 HP-UX 上,当在一台计算机上启动多台数据库服务器时,就不再需要 TCP/IP ServerPort 协议选项。在 Mac OS X 上,当启动网络服务器时如果已有一个服务器在同一计算机上运行,则仍必须指定 TCP/IP ServerPort 选项。请参见ServerPort (PORT) 协议选项

  • SOAP CONCRETE 响应从 ASADataSet 重命名为 SimpleDataset   CONCRETE 响应已从 ASADataSet 重命名为 SimpleDataset。请参见CREATE SERVICE 语句

  • 对 [卸载数据库向导] 行为进行的更改   不再可以将数据库卸载到早于版本 10 的数据库版本中。在将版本 9.0.2 或更早版本的数据库卸载到版本 10 数据库时,一旦完成了重建,您就无法自动连接到数据库。

  • 对 [抽取数据库向导] 行为进行的更改   无法抽取版本 9.0.2 和更早版本的数据库。必须从版本 10 数据中抽取。

  • 在 Solaris 上不支持服务器选项 -ui 和 -ux   在 Solaris 上不再支持 -ui 和 -ux 选项。它们在 Linux 上仍然可用。

  • 转换数值数据类型   将 DOUBLE 类型转换为 NUMERIC 时,SQL Anywhere 现在使用一种更加精确的算法(近似于原始的 DOUBLE 值)。有了这些更改,具有 15 个或更少有效位的 DOUBLE 值将被精确地转换为 NUMERIC。有时这可能会导致不同于先前 SQL Anywhere 版本的答案。请参见数字集之间的转换

  • 对 sa_validate 系统过程进行的更改   不再需要 sa_validate 系统过程的数据、索引和完整选项,也不建议使用它们。除非您请求的是快速校验或校验和校验,否则现在将缺省执行使用以前的数据、索引和完整选项执行的检查。请参见sa_validate 系统过程

  • 对 a_validate_type 枚举进行的更改   不再需要 a_validate_type 枚举的 VALIDATE_DATA、VALIDATE_INDEX 和 VALIDATE_FULL 参数,也不建议使用它们。当指定 VALIDATE_NORMAL 时,现在将缺省执行由这些选项执行的校验。请参见a_validate_type 枚举

  • SQLPATH 环境变量语法更改   SQLPATH 环境变量的语法在 Unix 上已发生更改。在以前的版本中,所有操作系统的路径元素都由分号 (;) 分隔。在 SQL Anywhere 10 中,在 Unix 平台上由冒号 (:) 分隔路径元素,在其它平台上由分号分隔。