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