建议重建数据库之前先对其进行备份。
数据库的页面大小(以字节为单位)可以是 2048、4096、8192、16384 或 32768,缺省值为原数据库的页面大小。
有关升级 Windows Mobile 数据库的信息,请参见在 Windows Mobile 上重建数据库。
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 12 的其它平台上,然后使用版本 12 软件卸载数据库。
卸载数据库后,可以使用版本 12 软件在 Mac OS X 上执行重装。
卸载并重装大数据库既耗时又需要大量磁盘空间。此过程需要访问大小约为数据库两倍的磁盘空间,以容纳已卸载的数据和新的数据库文件。
使用版本 12 工具重建版本 9 或更早版本的数据库时,需要注意以下限制:
必须断开此数据库与任何更低版本的数据库服务器之间的连接,同时必须关闭在计算机上运行的任何更低版本的数据库服务器。还必须关闭在计算机上运行的任何版本 12 数据库服务器。如果 dbunload 因检测到上述任一情况而无法继续运行,它会发出一条错误消息并失败。
对于旧数据库,不要在 dbunload 连接字符串中包含 ENG、START 或 LINKS 连接参数(在 -c 选项中指定)。如果指定这些参数,它们将被忽略并出现一条警告。在 Sybase Central 的 [连接] 窗口中,不要在 [服务器名] 或 [启动行] 字段中输入任何值。
必须在能够对旧数据库进行直接文件系统访问的计算机上运行 dbunload(dbunload 必须能够使用共享内存连接到数据库)。
不能在进行重建的计算机上运行名为 dbunload_support_engine 的数据库服务器。
在数据库文件需要恢复时,不能卸载版本 9 或更早版本的数据库。当对需要恢复的数据库文件使用卸载实用程序 (dbunload) 时,将返回一条消息,表示数据库不能启动。使用版本 9 数据库服务器启动数据库,然后停止数据库,再重试 dbunload。要卸载版本 9 或更高版本的数据库,必须能够以只读模式启动数据库。请参见-r dbeng12/dbsrv12 数据库选项。
口令区分大小写 在新建的 SQL Anywhere 12 数据库中,所有口令均区分大小写,与数据库是否区分大小写无关。新数据库的缺省 DBA 口令是 sql。
重建现有数据库时,SQL Anywhere 按以下条件确定口令的大小写:
如果口令最初是在不区分大小写的数据库中输入的,则目前的口令依然不区分大小写。
如果口令最初是在区分大小写的数据库中输入的,则大写和混合大小写的口令依然区分大小写。不过,如果口令全部以小写输入,则口令不区分大小写。
对现有口令和新口令进行的更改均区分大小写。
页面大小 SQL Anywhere 12 数据库的缺省数据库页面大小为 4096 个字节。版本 12 中支持的页面大小为 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 中索引的更改,当通过卸载和重装来重建数据库时,重建的数据库可能会比原始数据库小。数据库大小的减小并不表示出现了问题或有数据丢失。
如果运行 dbunload 或 [卸载数据库向导] 时重建过程失败,则可以使用以下步骤来帮助诊断失败原因。
在旧数据库上运行 dbunload -n。数据未卸载,因为指定了 -n。
dbunload -c "connection-string" -n directory-name |
创建一个新的版本 12 空数据库。
dbinit test.db |
将 reload.sql 文件应用到空数据库。
dbisql -c "DBF=test.db;UID=DBA;pwd=sql" reload.sql |
根据在将 reload.sql 文件应用到新数据库时所收到的消息,对 reload.sql 文件或原始数据库进行更改。
下表列出了导致重建失败的已知问题及其解决方案。
已知问题 | 解决方案 | ||
---|---|---|---|
如果使用所有者的名称作为表名的前缀,则过程或触发器中的 DECLARE LOCAL TEMPORARY TABLE 语句会引起语法错误。 | 删除所有者名称。 | ||
如果 CREATE TRIGGER 语句不包含定义了触发器的表的所有者名称,并且在执行 reload.sql 文件的用户引用该表时必须使用所有者名称限定该表,则语句执行会失败,并返回错误,说明找不到该表。 | 将所有者名称作为表名的前缀。 | ||
如果对象名(比如表、列、变量或参数名)与 SQL Anywhere 高版本中所引入的保留字(比如 NCHAR)相同,则重装失败。例如:
|
将所有对保留字的引用改为使用不同的名称。对于变量名,将 @ 作为名称前缀是防止命名冲突的一个通用约定。 有关保留字的完整列表,请参见保留字。 |
||
如果使用 dbunload 的版本 9 或更早版本的副本卸载数据库,则 reload.sql 文件可以包含对 ml_add_property 系统过程的调用,但该过程在新的版本 12 数据库中不提供。 |
使用版本 12 dbunload 实用程序卸载数据库。 有关如何确保使用正确版本的数据库实用程序的信息,请参见实用程序版本和升级过程。 |
||
如果使用版本 9 或更低版本的 dbunload 卸载数据库,则可能不会在重装使用 Transact-SQL 外连接(通过指定 *= 或 =*)的视图时正确创建这些视图。 |
向重装脚本添加以下代码行:
您应在稍后对使用 Transact-SQL 外连接的任何视图重新编写代码。 |
||
CREATE PROCEDURE 和 ALTER PROCEDURE 语句中不支持 [NOT] DETERMINISTIC 子句。如果存在该子句,重装将失败并返回语法错误。 | 如果升级包含用户定义过程的数据库,而该过程又包含 [NOT] DETERMINISTIC 子句,则必须在卸载并重装数据库之前删除该子句。 |
可以使用 [卸载数据库向导] 重建旧的数据库。使用此向导可将数据库卸载到重装文件和数据文件、卸载并重装到新的数据库或卸载并重装到现有数据库。强烈建议您先备份数据库,然后再重建数据库。
数据库文件必须位于安装 SQL Anywhere 12 的计算机上。
不能卸载数据库中表的子集。必须使用 dbunload 实用程序完成此操作。
如果 [卸载数据库向导] 确定数据库文件已运行,则在数据库停止之后才会继续进行卸载。
按照升级软件的标准预防措施操作。请参见升级预防措施。
如果可能,请对要存储新数据库的驱动器执行碎片整理,因为如果驱动器有太多碎片,会降低数据库性能。
确保对要卸载并重装的数据库具有独占访问权。禁止任何其他用户连接到数据库。
单击 [开始] » [程序] » [SQL Anywhere 12] » [管理工具] » [Sybase Central]。
单击 [工具] » [SQL Anywhere 12] » [卸载数据库]。
阅读 [卸载数据库向导] 介绍页的内容,然后单击 [下一步]。
单击 [卸载在较早版本服务器上运行的数据库或当前未运行的数据库]。指定数据库的连接信息。单击 [下一步]。
单击 [卸载并重装到一个新的数据库]。单击 [下一步]。
为数据库指定一个新的文件名。单击 [下一步]。
可以为新数据库指定页面大小。在版本 12 中,缺省(推荐使用)的页面大小为 4096 个字节。
如果需要,可以加密数据库文件。如果选择高度加密,那么每次启动数据库时都需要加密密钥。请参见数据库加密和解密。
选择卸载结构和数据。单击 [下一步]。
指定重建完成后是否要连接到新建的数据库。
单击 [完成]。检查新数据库以确认是否正确完成重建过程。
可以使用卸载实用程序 (dbunload) 并使用 -an 或 -ar 选项重建旧的数据库。建议使用 -an 选项,因为它会创建一个新的数据库而保留原始数据库不变。若使用 -ar 选项,则会用新的版本 12 数据库替换旧数据库。
按照升级软件的标准预防措施操作。请参见升级预防措施。
确保系统路径中版本 12 实用程序在其它实用程序之前。请参见实用程序版本和升级过程。
关闭所有 SQL Anywhere 和 Adaptive Server Anywhere 数据库服务器,因为版本 12 的 dbunload 实用程序不能用于在之前版本的数据库服务器上运行的数据库。例如:
dbstop -c "DBF=mydb.db;UID=DBA;PWD=sql" |
如果可能,请对要存储新数据库的驱动器执行碎片整理,因为如果驱动器有太多碎片,会降低数据库性能。
备份数据库。例如:
dbbackup -c "DBF=mydb.db;UID=DBA;PWD=sql" old-db-backup-dir |
请参见备份数据库。
使用 -an 或 -ar 选项运行卸载实用程序 (dbunload),以创建新数据库。
dbunload -c "connection-string" -an database-filename |
例如:
dbunload -c "DBF=mydb.db;UID=DBA;PWD=sql" -an mydb12.db |
在 connection-string 中指定的数据库用户必须使用 DBA 特权连接到要卸载的数据库。此命令创建一个新的数据库(通过指定 -an)。如果指定 -ar 选项,则现有数据库会被重建后的数据库所替换。若要使用 -ar 选项,必须连接到个人数据库服务器,或卸载实用程序 (dbunload) 所在计算机上的网络数据库服务器。
有关卸载实用程序 (dbunload) 其它可用选项的信息,请参见卸载实用程序 (dbunload)。
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |