SQL クライアントからバージョン対応登録されたデータを編集するには、ベース (ビジネス) テーブル自体ではなく、データのバージョン対応ビューを編集する必要があります。バージョン対応登録されたテーブルは変更内容を記録するために、ADD テーブルと DELETE テーブル (まとめて差分テーブルと呼びます) という 2 つの関連テーブルを使用します。テーブルのバージョン対応ビューを編集するとき、編集データは ADD テーブルと DELETE テーブルに書き込まれます。ベース テーブルを直接編集すると、この書き込み処理が行われないため、レコードが孤立したりデータが損失したりする可能性があります。
バージョン対応ビューに対して SQL データ操作ステートメントを実行する場合、それぞれの種類のステートメントについて、データベースで次の処理が発生します。*
- 挿入: 基のベース テーブルの ADD テーブルに行が追加され、新しい行の object ID 値が自動的に生成されます。
- 更新: 更新は、実際には、元の行を削除して、新しい情報を持つ新しい行を追加します。そのため、UPDATE ステートメントを実行すると、基のベース テーブルの ADD テーブルと DELETE テーブルの両方に行が追加されます。
- 削除: 基のベース テーブルの差分テーブルに行が追加されます。
* ステート 0 を指しているデフォルト バージョンを編集している場合は、すべての編集データがすぐにベース テーブルに移されます。
SQL による編集の場合、内部でバージョンのリコンサイルは実行されないので注意してください。そのため、編集を終了したら、ArcGIS for Desktop または Python スクリプトを使用して、編集データを親バージョンとリコンサイルする必要があります。
編集オプション
新しい名前付きジオデータベース バージョンを作成してそのバージョンを編集することも、デフォルト バージョンを直接編集することもできます。どちらを行うかは、システムの要件に依存します。優れたパフォーマンスとスケーラビリティを実現するには、名前付きバージョンとデフォルト バージョンのどちらを編集するか、適切なモデルを選択することが大切です。
名前付きバージョンの編集
システムが次に当てはまる場合、名前付きバージョンを作成し、SQL を使用してバージョン対応ビューで編集します。
- 複数の編集者が同じデータを変更しなくてはならない場合。
- 明確に定義された品質管理プロセスが必要な場合。
- 他のユーザーが変更内容をすぐに利用できなくても構わない場合。変更内容をリコンサイルおよびポストするまでは、個別に作業できる場合。
- 編集するバージョン対応フィーチャクラスが、バイナリ ジオメトリ格納タイプを使用している場合。
- 編集するバージョン対応登録されたフィーチャクラスまたはテーブルが、編集データをベーステーブルに移行するオプションを選択した状態でバージョン対応登録されている場合。
バージョン対応ビューで編集するとき、編集データは ADD テーブルおよび DELETE テーブルに記録されます。編集データは、名前付きバージョンが参照しているステートに書き込まれます。
以下に名前付きバージョンのデータを編集する場合の手順を示します。記載どおりの順序で行ってください。
- バージョン対応登録されたテーブルまたはフィーチャクラスのバージョン対応ビューが存在しない場合は作成します。
- 編集作業用のジオデータベース バージョンを作成します。
- set_current_version プロシージャを使用して、新しいバージョンにアクセスします。これにより、編集セッションが参照するステートが名前付きバージョンが参照しているステートに設定され、このバージョンがロックされます。
- edit_version プロシージャまたはデータベースに適した関数を実行して、編集セッションを開始します。
- SQL を使用してバージョン対応ビューに対して編集を実行します。
- データベースの編集をコミットまたはロールバックします。
- edit_version プロシージャまたはデータベースに適した関数を実行して、編集セッションを終了します。
- ArcGIS で編集内容をリコンサイルしてポストします。
- ArcGIS を使用して親バージョンにすべての変更をポストしたら、バージョン対応ビューでの編集用に作成したバージョンは削除できます。
デフォルト バージョンの編集
システムが次の 1 つ以上に当てはまる場合は、SQL を使用してバージョン対応ビューでデフォルト バージョンを編集できます。
- 編集にショート トランザクションを用いる場合。
- バージョン対応ビューで行われた編集データを他のユーザーがただちに利用できるようにする必要がある場合。
- フィーチャクラスの編集時に、フィーチャクラスがバイナリ ジオメトリ格納ではなく、SQL 空間タイプを使用する場合。
- 編集するテーブルまたはフィーチャクラスが、編集データをベーステーブルに移行するオプションを選択した状態でバージョン対応登録されていない場合。
- 編集するデータは複製されません。複製されたデータのデフォルト バージョンを編集する場合、編集データは同期化されません。
デフォルト バージョンを編集する場合は、名前付きバージョンと同様に、編集データが差分テーブルに記録されます。ただし、デフォルト バージョンを編集すると、デフォルト バージョンを表示しているすべてのユーザーが編集データを参照できるようになります。
デフォルト バージョンがステート 0 を参照している場合、各編集データはバージョン対応登録されたテーブルまたはフィーチャクラスのベース テーブルに直接適用されます。デフォルト バージョンが ArcGIS クライアントで編集されると、保存時に新しいデータベースのステートを参照するようにバージョンが更新されます。バージョン対応ビューでデフォルト バージョンを直接編集すると、挿入、更新、削除の各処理は、デフォルト バージョンが参照している現在のステートに書き込まれます。
たとえば、デフォルトバージョンが ArcGIS クライアントで更新され、複数の変更がバージョン対応ビューで実行されている場合は、バージョン対応ビューによって加えられた変更が複数のステートに適用される可能性があります。
コミットされた編集はただちに以下のユーザーやアプリケーションからアクセスできるようになります。
- バージョン対応登録されているテーブルとデフォルト バージョンを操作しているユーザーまたはアプリケーション
- デフォルト バージョンの現在のステートを含むステート系統が設定された子バージョンを操作しているユーザーまたはアプリケーション
バージョン対応ビューでデフォルト バージョンのジオデータベース内のデータを編集する場合は、バージョンを設定したり、編集セッションを開始したりしないでください。実行手順は次のとおりです。
- バージョン対応登録されたテーブルまたはフィーチャクラスのバージョン対応ビューが存在しない場合は作成します。
- SQL を使用してバージョン対応ビューに対して編集を実行します。デフォルト バージョンの現在のステートが自動的に編集されることになります。
- データベースの編集をコミットまたはロールバックします。トランザクションが開いているとき、差分テーブルには排他ロックがかかっているため、各編集の後にコミットまたはロールバックすることをお勧めします。ロックは、トランザクションが終了するまで解除されません。