対象製品とバージョン:Forguncy 3.x、4.x、6.x
※この現象は6.0.40.0で修正されました。6.0.40.0以降を使用する場合、回避方法を適用する必要はありません。
現象
特定の操作を行った際に内部データベースが破損する可能性があります。対象となる操作は次の2つです。
- [構造変化の反映]を選択してアプリケーションを発行する
- 本ケースの場合、不具合が発生する対象のデータベースは、発行先のForguncy Server上にあるデータベースです。
- デバッグ実行によってデータベースのデータを変更し、それを開発用のデータベースに反映する
- 本ケースの場合、不具合が発生する対象のデータベースは、開発環境の(FGCPファイル内に含まれる)データベースです。
不具合の原因
本不具合は、特定条件を満たすことで再現ができるものではなく、確率論的に発生する現象です。現時点では弊社にて再現ができないことや、これまでの累計報告数から、極めてまれな確率で発生する現象と推察できます。
しかしながら、これまでの報告内容を基にForguncyの内部におけるデータベースファイルの取り扱い箇所を調査した結果、最適ではない方法でデータベースファイルのコピー処理を行っていることが分かりました。
ForguncyはSQLiteを内部データベースとして使用しています。SQLiteが提供する公式ドキュメントでは、データベースのファイルをコピーする際の最適で安全な方法として、SQLiteが提供するbackup APIを使用することが推奨されています。しかしながら、Forguncyは通常のファイルコピーの仕組みを使用してデータベースファイルのコピーを行っています。
現象に再現性がないことから、断定することはできませんが、現時点では上記内容が本不具合の原因であると弊社では判断しています。
回避方法
[構造変化の反映]機能をできるだけ使用しない
「[構造変化の反映]を選択してアプリケーションを発行する」方法の代わりに、[運用データベースの取得]機能を使用してデータベースの変更を含むアプリケーションの発行を使用することを検討してください。具体的な方法については、次のページにある「稼働中のアプリケーションからデータベースを開発環境に移動し、上書き発行して更新」部分を参照してください。
Forguncyマニュアル - アプリの更新(データベースを変更する場合)
なお、[構造変化の反映]機能を使用する必要がある場合には、運用しているアプリケーションをメンテナンスモードにするか、もしくは停止するなどし、アプリケーションを誰も利用していな状態としたうえで行うようにしてください。
開発用のデータベースにデバッグ実行によるデータ変更を反映させる場合は、データ変更が確実に完了していることを確認したうえで実施する
たとえば、アプリケーションのデバッグ実行処理において、大量データを内部データベースに書き込むなどのデータベース更新に時間がかかる操作を行った場合、それらの更新処理が確実に完了したことを確認したうえで、開発用データベースへ反映させるダイアログの[OK]ボタンをクリックするようにします。
本不具合が発生した場合の備えと復旧方法
本不具合が発生した場合に備え、バックアップをこまめに行うことが重要となります。データベースファイルが破損していない状態のバックアップファイルがあれば、それを使用することで正常な状態へと戻すことができます。
具体的な方法については、次のナレッジベースの内容を参照してください。
内部データベースの破損に対する備えと復旧方法 – Forguncy サポート
対応状況
バージョン6.0.40.0にて、本現象への対策となるbackup APIを使用する方法に変更されています。Forguncy Server 6.0.21.0以前を使用している場合、アップデートを行ってください。
なお、Forguncy 4での同対策は互換性問題などのリスクを鑑み対応しない判断をしました。バージョン4を引き続き使用する必要がある場合、上記の回避方法を検討してください。
検索キーワード: fgcbug fgcdatabase fgcdevelopment fgcdeploy fgcoperation