可使用下列方法之一部署 UltraLite 数据库模式升级:
单个 DDL 语句 例如,在 UltraLite C 中,可运行下列语句创建新发布:
dbconnection->ExecuteStatement("CREATE PUBLICATION p (table t)"); |
ALTER DATABASE SCHEMA FROM FILE 语句 不知道 DDL 语句要求或不想指定单个 DDL 语句时,可使用此语句进行模式升级。使用的 SQL 文件必须包含整个新模式。
在模式升级过程中不要重置设备。如果在模式升级过程中重置了设备,则数据将会丢失且 UltraLite 数据库标记为 "bad"。
使用 ALTER DATABASE SCHEMA FROM FILE 语句升级 UltraLite 数据库模式时,UltraLite 执行下列步骤:
比较新数据库模式和现有数据库模式的不同之处。
现有数据库的模式会发生变更。
删除不适合新模式的行。例如:
如果将唯一性约束添加到表并有多行拥有相同的值,则将删除除一行之外的所有行。
如果您尝试更改列域并出现转换错误时,则将删除那一行。例如,如果您有一列 VARCHAR 列并将其转换为 INT 列,而某一行的值是 ABCD,则删除该行。
如果新模式拥有新的外键,其中外行没有匹配的主键,则删除这些行。
删除行时会出现 SQLE_ROW_DROPPED_DURING_SCHEMA_UPGRADE (130) 警告。
创建 DDL 语句的 SQL 脚本以创建全新模式。
可在开发计算机上保存主模式,并随着应用程序的更改来更新模式。
使用 ulinit 或 ulunload 实用程序抽取您的脚本所需的 DDL 语句。通过使用这些带以下选项的实用程序,确保 DDL 语句在语法上是正确的:
对于 UltraLite 数据库,使用带有 -n 和 -s [schema-file] 选项的 ulunload 实用程序。例如:
ulunload -c dbf=mydatabase.udb -n -s MySchema.sql |
对于 SQL Anywhere 数据库,使用带有 -a 和 -l [schema-file] 选项的 ulinit 实用程序。例如:
ulinit -a "dsn=mysqlanywheredatabase" -l MySchema.sql |
如果您未使用 ulunload 和 ulinit 实用程序,则查看脚本以确保:
脚本通过 CREATE 语句声明整个所需模式。
未重命名表、列和发布。不支持 RENAME 操作。重命名的表按照 DROP TABLE 和 CREATE TABLE 操作进行处理。
没有非 DDL 语句,包括可能不具有预期效果的非 DDL 语句。
SQL 语句中的字以空格分隔。
一行只能出现一条 SQL 语句。
用双连字符 (-) 作为注释的前缀,并只出现在行首。
每条语句由一个包含单词 GO 的行分隔。
部署新 SQL 脚本文件。
确保数据库已同步。
在设备上运行新语句。例如:
ALTER DATABASE SCHEMA FROM FILE 'MySchema.sql'; |
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |