マルチバージョン対応ビューと SQL による Oracle のバージョン対応データの編集

データに対して作成されたマルチバージョン対応ビューを編集することで、ジオデータベースのバージョン対応データを編集できます。

マルチバージョン対応ビューの操作に使用するストアド プロシージャが ArcSDE とともにインストールされます。そのコンポーネントと説明を以下に示します。

ストアド プロシージャ

目的

構文と説明

sde.version_user_ddl.create_version

新しいジオデータベース バージョンを作成します。

必ず、ユーザ自身の個別のバージョンを編集してください。マルチバージョン対応のビューで複数の編集者が同一のバージョンを編集することはできません。

EXEC sde.version_user_ddl.create_version

('<parent_version>', :<child_version_variable>, <name_rule>, <access>, '<description>')

<parent_version> はバージョンの作成元となるバージョンです。

<child_version> は作成するバージョンの名前です。

<access> はバージョンの権限レベルです。0 はプライベート、1 はパブリック、2 はプロテクトです。

<description> はテキストによる子バージョンの説明です。

sde.version_util.set_current_version

アクセスするジオデータベース バージョンを設定します。

EXEC sde.version_util.set_current_version('<version_name>')

<version_name> は接続するジオデータベース バージョンの名前です。

sde.version_user_ddl.edit_version

編集セッションを開始もしくは終了します。

EXEC sde.version_user_ddl.edit_version('<version_name>',<1 or 2>)

編集セッションを開始するときは、1 を指定します。終了するときは、2 を指定します。

sde.version_user_ddl.delete_version

ジオデータベース バージョンを削除します。

EXEC sde.version_user_ddl.delete_version('<version_name>')

マルチバージョン対応ビュー経由でバージョン対応テーブルを編集するときは、デルタ テーブルに変更が加えられ、新しいレコードの行 ID(object ID)の値は自動的に生成されます。ただし、ArcGIS 編集セッションでバージョン対応データを編集するときとは違って、編集時に内部でバージョンのリコンサイルは実行されません。

さらに、マルチバージョン対応ビューで編集セッションを開始すると、バージョンが参照しているステートに排他ロックがかかります。
したがって、マルチバージョン対応ビューを使用して、DEFAULT バージョン、または、他のユーザから同時編集またはリコンサイルを受ける可能性のあるバージョンは編集しないようにしてください。競合が検出されず、ロックによって他のユーザがブロックされるからです。代わりに、マルチバージョン対応ビューの編集セッション専用の独自バージョンを作成します。

注意注意:
  • リコンサイル、競合解決、ポストのようなバージョン管理操作は、ArcGIS ソフトウェアを使用して実行する必要があります。バージョン管理が不適切な場合、マルチバージョン対応ビューの操作によってジオデータベースが破壊される可能性があります。
  • ArcSDE によってデータベース内に維持される行 ID(object ID)フィールドを、データベース管理システム(DBMS)のツールを使用して更新しないでください。
この object ID フィールドはジオデータベースによって割り当てられ管理されます。
SQL を使用して変更しないでください。
  • SQL を使用してジオデータベースの DEFAULT バージョンを編集しないでください。
バージョンに対して編集セッションを開始すると、そのバージョンが参照しているステートに排他ロックがかかります。
DEFAULT バージョンがロックされた場合、他の ArcGIS ユーザはジオデータベースに接続できなくなります。


以下の手順は、マルチバージョン対応ビューの作成から、編集を実行するバージョンの作成、編集するバージョンの設定、編集セッションの開始、マルチバージョン対応ビュー経由での編集の実行、編集セッションの終了、編集内容のデータベースへのコミット、編集用に作成したバージョンの削除までの、一連の手順を示しています。例では、テーブルを編集するために作成するマルチバージョン対応ビューは code_mv で、作成して編集に使用するバージョンは mvedits です。

ヒントヒント:

マルチバージョン対応ビュー経由で編集するデータセットは、バージョン対応登録されている必要があります。

手順:
  1. MS-DOS(Windows)またはシェル(UNIX または Linux)コマンド プロンプトで sdetable ユーティリティを実行して、マルチバージョン対応ビューを作成します。
    sdetable –o create_mv_view –T code_mv –t code_enf 
    –i sde:oracle11g –u sarja –p not4U@orasvc
  2. SQL クライアントを開いて、次の手順で作成するバージョンを格納するための変数を宣言します。
    VARIABLE mv_version NVARCHAR2(10); 
    EXEC :mv_version := 'mvedits';

    この例では、mv_version が変数名、NVARCHAR2(10) が変数のデータ タイプ、mvedits がバージョン名になります。

  3. 編集を実行する新しいバージョンを作成します。
    EXEC sde.version_user_ddl.create_version 
    ('sde.DEFAULT', :mv_version, sde.version_util.C_take_name_as_given, sde.version_util.C_version_private, 'multiversioned view edit version');
  4. 作成した子バージョンに対して編集セッション用のバージョンを設定します。
    EXEC sde.version_util.set_current_version('mvedits');
  5. 1 を指定して version_user_ddl.edit_version ストアド プロシージャを実行し、編集セッションを開始します。1 は編集セッションの開始を意味します。
    EXEC sde.version_user_ddl.edit_version('mvedits',1);
  6. SQL を使用してマルチバージョン対応ビューに最初の編集を加えます。

    この例では、既存のレコードを更新します。

    UPDATE code_mv 
    SET propowner = 'C. Industry' 
    WHERE vid = 2233
  7. SQL を使用してマルチバージョン対応ビューに次の編集を加えます。

    この例では、テーブルに新規のレコードを挿入します。

    INSERT INTO code_mv (codenum,propowner,shape) 
    VALUES 
    (567, 'Anjo Badsu', sde.ST_PointFromText('point (40 40)', 12));
    ヒントヒント:

    INSERT ステートメントでは object ID 値を指定しません。マルチバージョン対応ビューでは、次に使用可能なオブジェクト ID が自動的に取得されて行に挿入されます。

    ArcSDE に登録され、ユーザ管理の object ID 列を持つテーブルをバージョン対応登録することは可能ですが、推奨されません。この方法の場合、INSERT ステートメントで object ID を指定する必要があります。マルチバージョン対応ビューが自動的に値を生成することはできません。

  8. COMMIT または ROLLBACK ステートメントを実行します。
  9. 今回は 2 を指定して version_user_ddl.edit_version ストアド プロシージャを実行し、編集セッションを終了します。

    2 は編集セッションの終了を意味します。

    EXEC sde.version_user_ddl.edit_version('mvedits',2);
  10. すべての編集が終了したら、ArcGIS Desktop 経由で編集内容のリコンサイルとポストを実行して、ステップ 3 で作成したジオデータベース バージョンを削除できます。データの変更を適用しない場合は、編集内容のリコンサイルとポストを実行しないで、ステップ 3 で作成したバージョンを削除することもできます。

    EXEC sde.version_user_ddl.delete_version('mv_version');

関連項目


3/6/2012