Ultra Light データベーススキーマのアップグレードは、次のいずれかの方法で配備できます。
個々の DDL 文 たとえば、Ultra Light C では、次の文を実行して新しいパブリケーションを作成できます。
dbconnection->ExecuteStatement("CREATE PUBLICATION p (table t)"); |
ALTER DATABASE SCHEMA FROM FILE 文 DDL 文の要件がわからない場合、または個々の DDL 文を指定したくない場合は、この文を使用してスキーマのアップグレードを実行できます。使用する SQL ファイルには、新しいスキーマ全体が含まれている必要があります。
スキーマのアップグレード中にデバイスをリセットしないでください。スキーマのアップグレード中にデバイスをリセットすると、データが失われ、Ultra Light データベースが「不正」としてマークされます。
ALTER DATABASE SCHEMA FROM FILE 文を使用して Ultra Light データベーススキーマをアップグレードすると、Ultra Light で次の手順が実行されます。
新しいデータベーススキーマと既存のデータベーススキーマの違いが比較されます。
既存のデータベースのスキーマは変更されます。
新しいスキーマに適合しないローは削除されます。次に例を示します。
テーブルに一意性制約を追加し、同じ値を持つローが複数ある場合は、1 つのロー以外すべて削除される。
カラムドメインを変更して変換エラーが発生した場合は、そのローが削除される。たとえば、VARCHAR カラムを INT カラムに変更した場合、ローの値が ABCD であれば、そのローは削除されます。
新しいスキーマに新しい外部キーがあり、外部ローに一致するプライマリローがない場合は、これらのローが削除される。
ローが削除されると、SQLE_ROW_DROPPED_DURING_SCHEMA_UPGRADE (130) 警告が発行されます。
完全に新しいスキーマを作成するには、DDL 文の SQL スクリプトを作成します。
配備先のマシン上にマスタースキーマを保持し、アプリケーションの変更に応じてスキーマをアップグレードすることができます。
スクリプトに必要な DDL 文を抽出するには、ulinit または ulunload のいずれかのユーティリティを使用します。これらのユーティリティを次のオプションとともに使用して、DDL 文が構文的に正しいことを確認してください。
Ultra Light データベースの場合、ulunload ユーティリティを使用し、-n および -s [ schema-file ] オプションを指定する。次に例を示します。
ulunload -c dbf=mydatabase.udb -n -s MySchema.sql |
SQL Anywhere データベースの場合、ulinit ユーティリティを使用し、-l [ file ] オプションを指定する。次に例を示します。
ulinit -a "dsn=mysqlanywheredatabase" -l MySchema.sql |
ulunload および ulinit ユーティリティを使用しない場合は、スクリプトで次の事項を確認してください。
スクリプトに、CREATE 文によって目的のスキーマ全体が宣言されている。
表、カラム、パブリケーションの名前が変更されていない。RENAME 操作はサポートされていません。テーブルの名前を変更すると、DROP TABLE 操作または CREATE TABLE 操作として処理されます。
影響が発生しない可能性がある文も含め、DDL 文以外の文が含まれていない。
SQL 文の語はスペースで区切る。
各行に 1 つの SQL 文だけが表示されている。
コメントの先頭には、二重ハイフン (-) を付ける。コメントを指定できるのは、行の先頭のみです。
各文が、GO という単語を含む 1 行によって区切られている。
新しい SQL スクリプトファイルの配備
データベースが同期されていることを確認します。
デバイス上で新しい文を実行します。次に例を示します。
ALTER DATABASE SCHEMA FROM FILE 'MySchema.sql'; |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |