2019年6月20日木曜日

ビルド④ - DB再編成に関するオプション

 4.DB再編成に関するオプション


通常、GeneXus開発者はDB再編成処理を意識的に実行する必要はありません。GeneXusは前回ビルドの状態を記憶しているので、次のビルドタイミングでデータモデルに変更がある時だけDB再編成レポートを表示し開発者にDB再編成処理を実行するか否かを判断させます。

しかし、状況によっては開発者が意図的にDB再編成処理を実行する/実行しない/実行させない事を選択したい場合があります。そういったケースでのオプションを紹介します。





①Reorganize server tablesプロパティ


ジェネレータープロパティにある設定で、「No」と指定する事で当該ジェネレータでは一切DB再編成を行わない設定が可能です。

例としては環境を跨いで同じDBを使用する場合、一方のジェネレーターではDB再編成処理を実行し、もう一方のジェネレーターでは実行させない。といったケースです。









②ビルドメニューのデータベーステーブルを作成

通常DB再編成処理はその名の通り「再編成」なのでデータモデルでの変更差分のみを処理対象とします。しかし、一からテーブルを作成し直したい場合には「データベーステーブルを作成」を実行する事により、テーブルをDrop→Createを実施してくれます。



③ツールメニューの再編成済みとしてデータベースをマーク


このオプションは①とは違い一時的にDB再編成を行いたいくない場合に実行します。

正確には「DB再編成処理を実行しない」のではなく、「DB再編成済み」という状態に環境の状態を変更する。という事です。

例としてはDB再編成処理途中でなんらかの原因でエラーになりストップしてしまった場合です。

DB再編成処理はいわゆるDDL(Data Define Language)を実行しているためロールバックが効きません。従って途中でエラーが発生して処理が止まるとそこまでの変更処理は適用されますが、エラー以降の処理は適用されず変更が中途半端な状態になってしまいます。

この様な状態でDB再編成処理を再実行しても、作成すべきものが既に存在していたり、削除すべきものが存在していないというエラーとなり、にっちもさっちもいかなくなります。

こうなるとGeneXusでの自動的な対応は無理ですのでリカバリが必要になります。適用済みの部分を手動で変更前に戻すか、適用されなかった部分を手動で変更するか、のどちらかです。

しかし、手動によるリカバリが終わってもGeneXus上ではまだDB再編成処理が行われていない状態のままですので、再度ビルドを行えばDB再編成処理を実行しようとしてしまいますので「ツール」メニュー→「詳細」→「再編成済みとしてデータベースをマーク」を実行すると、GeneXusは当該環境は再編成済みとして状態が書き換わるので、以降その時のDB再編成処理は実行しなくなります。
(その後にトランザクションを変更しデータベースに新たな変更が必要になった場合にはDB再編成処理は実行されます)




0 件のコメント:

コメントを投稿