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

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 11 - 更改和升级 » 升级到 SQL Anywhere 11 » 升级 SQL Anywhere

 

为版本 11 重建版本 9 及更早版本的数据库

本节介绍如何卸载数据库并将其重装到新的版本 11 数据库中。

有关升级 Windows Mobile 数据库的信息,请参见在 Windows Mobile 上重建数据库

重建 Mac OS X 数据库

PPC 上支持用于 Mac OS X 的 SQL Anywhere 9.0.2 版,而 Intel 上支持用于 Mac OS X 的 SQL Anywhere 10.0.0 及更高版本。如果在 Mac OS X 上有 9.0.2 或更早版本的数据库,可以使用两种方法卸载数据库:

  • 使用 9.0.2 版软件卸载数据库。

  • 将数据库复制到安装了 SQL Anywhere 11 的其它平台上,然后使用版本 11 软件卸载数据库。

卸载数据库后,可以使用版本 11 软件在 Mac OS X 上执行重装。

小心

卸载并重装大数据库既耗时又需要大量磁盘空间。此过程需要访问大小约为数据库两倍的磁盘空间,以容纳已卸载的数据和新的数据库文件。

升级限制

使用版本 11 工具重建版本 9 或更早版本的数据库时,需要注意以下限制:

  • 必须断开此数据库与任何更低版本的数据库服务器之间的连接,同时必须关闭在计算机上运行的任何更低版本的数据库服务器。还必须关闭在计算机上运行的任何版本 11 数据库服务器。如果 dbunload 因检测到上述任一情况而无法继续运行,它会发出一条错误消息并失败。

  • 对于旧数据库, 要在 dbunload 连接字符串中包含 ENG、START 或 LINKS 连接参数(在 -c 选项中指定)。如果指定这些参数,它们将被忽略并出现一条警告。在 Sybase Central 的 [连接] 窗口中,不要在 [服务器名] 和 [启动行] 字段中输入任何值。

  • 必须在能够对旧数据库进行直接文件系统访问的计算机上运行 dbunload(dbunload 必须 能够使用共享内存连接到数据库)。

  • 不能在进行重建的计算机上运行名为 dbunload_support_engine 的数据库服务器。

特殊注意事项
  • 口令区分大小写   在新建的 SQL Anywhere 11 数据库中,所有口令均区分大小写,与数据库是否区分大小写无关。新数据库的缺省 DBA 口令是 sql

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

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

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

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

  • 页面大小   SQL Anywhere 11 数据库的缺省数据库页面大小为 4096 个字节。版本 11 中支持的页面大小为 2048 个字节、4096 个字节、8192 个字节、16384 个字节和 32768 个字节。如果旧数据库使用不受支持的页面大小,则缺省情况下新数据库的页面大小为 4096 字节。可以使用 dbinit -p 选项或 dbunload -ap 选项指定不同的页面大小。请参见初始化实用程序 (dbinit)卸载实用程序 (dbunload)

  • 归类   在版本 9 及更早版本中,SQL Anywhere 支持一个与 CHAR 数据类型共同使用的归类。此归类使用 SQL Anywhere 归类算法(SQL Anywhere Collation Algorithm,简称 SACA)。版本 10 及更高版本的 SQL Anywhere 支持两种归类算法,即 SACA 和 UCA(Unicode Collation Algorithm,Unicode 归类算法)。除非为重建的数据库指定了一个新的或不同的归类,否则旧数据库中的 SACA 归类会被卸载并在重建的数据库中重新使用。

    如果要重建具有自定义归类的数据库,则仅当执行单步重建(内部卸载)时,该归类才能够保留。如果选择卸载数据库,然后将模式和数据装载到您创建的数据库中,则必须使用所提供归类中的一种。请参见支持的归类和替代归类

  • 数据库文件大小   由于 SQL Anywhere 中索引的更改,当通过卸载和重装来重建数据库时,重建的数据库可能会比原始数据库小。数据库大小的减小并 表示出现了问题或有数据丢失。

从 Sybase Central 重建版本 9 或更早版本的数据库

可以使用 [卸载数据库向导] 重建旧的数据库。使用此向导可将数据库卸载到重装文件和数据文件、卸载并重装到新的数据库或卸载并重装到现有数据库。强烈建议您先备份数据库,然后再重建数据库。

Sybase Central 升级注意事项
  • 数据库文件必须位于安装 SQL Anywhere 11 的计算机上。

  • 不能卸载数据库中表的子集。必须使用 dbunload 实用程序完成此操作。

  • 如果 [卸载数据库向导] 确定数据库文件已运行,则在数据库停止之后才会继续进行卸载。

♦  重建数据库 (Sybase Central)
  1. 执行升级软件的标准预防措施。请参见重要的升级预防措施

  2. 如果可能,请对要存储新数据库的驱动器执行碎片整理,因为如果驱动器有太多碎片,会降低数据库性能。

  3. 确保对要卸载并重装的数据库具有独占访问权。禁止任何其他用户连接到数据库。

  4. 选择 [开始] » [程序] » [SQL Anywhere 11] » [Sybase Central]。

  5. 选择 [工具] » [SQL Anywhere 11] » [卸载数据库]。

  6. 阅读 [卸载数据库向导] 介绍页的内容,然后单击 [下一步]。

  7. 选择 [卸载在较早版本服务器上运行的数据库或当前未运行的数据库]。输入数据库的连接信息。单击 [下一步]。

  8. 选择 [卸载并重装到一个新的数据库]。单击 [下一步]。

  9. 为数据库指定一个新的文件名。单击 [下一步]。

    可以为新数据库指定页面大小。在版本 11 中,缺省(推荐使用)的页面大小为 4096 个字节。

    如果需要,可以加密数据库文件。如果选择高度加密,那么每次启动数据库时都需要加密密钥。请参见加密和解密数据库

  10. 选择卸载结构和数据。单击 [下一步]。

  11. 指定重建完成后是否要连接到新建的数据库。

  12. 单击 [完成]。检查新数据库以确认是否正确完成重建过程。

使用卸载实用程序重建版本 9 或更早版本的数据库

可以使用卸载实用程序 (dbunload) 并使用 -an 或 -ar 选项重建旧的数据库:

  • 建议使用 -an 选项,因为它会创建一个新的数据库而保留原始数据库不变。

  • 若使用 -ar 选项,则会用新的版本 11 数据库替换旧数据库。

建议重建数据库之前先对其进行备份。

注意

数据库的页面大小(以字节为单位)可以是 2048、4096、8192、16384 或 32768,缺省值为原数据库的页面大小。

♦  重建数据库(命令行)
  1. 执行升级软件的标准预防措施。请参见重要的升级预防措施

  2. 确保系统路径中版本 11 实用程序在其它实用程序之前。请参见使用实用程序

  3. 关闭所有 SQL Anywhere 和 Adaptive Server Anywhere 数据库服务器,因为版本 11 的 dbunload 实用程序不能用于在之前版本的数据库服务器上运行的数据库。例如:

    dbstop -c "DBF=mydb.db;UID=DBA;PWD=sql"
  4. 如果可能,请对要存储新数据库的驱动器执行碎片整理,因为如果驱动器有太多碎片,会降低数据库性能。

  5. 备份数据库。例如:

    dbbackup -c "DBF=mydb.db;UID=DBA;PWD=sql" old-db-backup-dir

    请参见备份快速入门

    注意

    确保使用正确版本的 dbbackup 来备份数据库。请参见使用实用程序

  6. 使用 -an 或 -ar 选项运行卸载实用程序 (dbunload),以创建新数据库。

    dbunload -c "connection-string" -an database-filename

    例如:

    dbunload -c "DBF=mydb.db;UID=DBA;PWD=sql" -an mydb11.db

    connection-string 中指定的数据库用户必须使用 DBA 特权连接到要卸载的数据库。此命令创建一个新的数据库(通过指定 -an)。如果指定 -ar 选项,则现有数据库会被重建后的数据库所替换。若要使用 -ar 选项,必须连接到个人数据库服务器,或卸载实用程序 (dbunload) 所在计算机上的网络数据库服务器。

    有关卸载实用程序 (dbunload) 其它可用选项的信息,请参见卸载实用程序 (dbunload)

已知问题

如果运行 dbunload 或 [卸载数据库向导] 时重建过程失败,则可以使用以下步骤来帮助诊断失败原因。

♦  诊断重建失败
  1. 在旧数据库上运行 dbunload -n。

    dbunload -c "connection-string" -n directory-name
  2. 创建一个新的版本 11 空数据库。

    dbinit test.db
  3. reload.sql 文件应用到空数据库。

    dbisql -c "DBF=test.db;UID=DBA;pwd=sql" reload.sql
  4. 根据在将 reload.sql 文件应用到新数据库时所收到的消息,对 reload.sql 文件或原始数据库进行更改。

下表列出了导致重建失败的已知问题及其解决方案。

已知问题 解决方案
如果使用所有者的名称作为表名的前缀,则过程或触发器中的 DECLARE LOCAL TEMPORARY TABLE 语句会引起语法错误。 删除所有者名称。
如果 CREATE TRIGGER 语句不包含定义了触发器的表的所有者名称,并且在执行 reload.sql 文件的用户引用该表时必须使用所有者名称限定该表,则语句执行会失败,并返回错误,说明找不到该表。 将所有者名称作为表名的前缀。

如果对象名(比如表、列、变量或参数名)与 SQL Anywhere 高版本中所引入的保留字(比如 NCHAR)相同,则重装失败。例如:

CREATE PROCEDURE p( )
BEGIN
 DECLARE NCHAR INT;
 SET NCHAR = 1;
END;

将所有对保留字的引用改为使用不同的名称。对于变量名,将 @ 作为名称前缀是防止命名冲突的一个通用约定。

有关保留字的完整列表,请参见保留字

如果使用 dbunload 的版本 9 或更低版本的副本卸载数据库,则 reload.sql 文件可以包含对 ml_add_property 系统过程的调用,但该过程在新的版本 11 数据库中不提供。

使用版本 11 dbunload 实用程序卸载数据库。

有关如何确保使用正确版本的数据库实用程序的信息,请参见使用实用程序

如果使用版本 9 或更低版本的 dbunload 卸载数据库,则可能不会在重装使用 Transact-SQL 外连接(通过指定 *= 或 =*)的视图时正确创建这些视图。

向重装脚本添加以下代码行:

SET TEMPORARY OPTION tsql_outer_joins='on';

您应在稍后对使用 Transact-SQL 外连接的任何视图重新编写代码。