Oracle Spatial の DBTUNE 格納パラメータ

Oracle Spatial の格納パラメータは通常、ArcSDE で使用される Oracle データベースとは異なるため、ここでは、Oracle Spatial で格納パラメータを使用する方法について説明し、その例を示します。

新しいビジネス テーブルの作成

ArcSDE では、B_STORAGE、B_INDEX_ROWID、B_INDEX_USER 格納パラメータを使用して、ビジネス テーブルとその非空間インデックスが格納されます。

新しいフィーチャクラスの Oracle Spatial メタデータの作成

データベース ビュー USER_SDO_GEOM_METADATA は、ArcSDE ではなく Oracle Spatial の一部です。このデータベース ビューには、ユーザが所有する既存のテーブルの SDO_GEOMETRY 列に関するメタデータが含まれています。ユーザごとに独自の USER_SDO_GEOM_METADATA ビューがあります。インデックスを作成したり、クエリを発行したりするには、テーブルの所有者が USER_SDO_GEOM_METADATA に各 SDO_GEOMETRY 列のメタデータを登録する必要があります。ArcSDE のクライアントはフィーチャクラスを作成する際に、このメタデータから作成するフィーチャクラスに使用するメタデータを選択します。多くの場合、これらのクライアントは、DBTUNE テーブルのパラメータ グループに対応するコンフィグレーション キーワードを使用します。

Oracle Spatial フィーチャクラスのメタデータを制御する格納パラメータは、次のとおりです。

SDO_DIMNAME_<n>
SDO_LB_<n>
SDO_UB_<n>
SDO_TOLERANCE_<n>	
SDO_SRID

フィーチャクラスの作成時に指定したコンフィグレーション キーワードに、有効な座標参照系に設定された SDO_SRID パラメータ セットが含まれている場合、その SDO_SRID 値が使用され、USER_SDO_GEOM_METADATA ビューに書き込まれます。このことは、クライアントによって別の座標参照系が提供されている場合でも当てはまります。

Oracle Spatial では、2 次元、3 次元、4 次元のフィーチャ ジオメトリを x/y、x/y/z、x/y/m(メジャー)、または x/y/z/m の組み合わせで使用することができます。これらの格納パラメータを通じて、ArcSDE で各次元のメタデータを指定することができます。パラメータ名の <n> は、次元の数に応じて、1、2、3、4 のいずれかの数字に置き換えます。これらの格納パラメータを指定しない場合は、フィーチャクラスを作成する ArcSDE クライアント アプリケーションによって、各次元の名前、上限と下限(範囲)、許容値が決定されます。

メモメモ:

Oracle Spatial では、x/y/m/z のフィーチャ ジオメトリも使用できますが、このジオメトリを ArcSDE で使用することはできません。

空間インデックスの作成

DBTUNE の SDO_INDEX_SHAPE パラメータは、Oracle Spatial での空間インデックスの作成方法を定義します。ArcSDE では、Oracle に CREATE INDEX ステートメントを発行する前に、このパラメータの内容(コンフィグレーション文字列)をステートメントに追加します。コンフィグレーション文字列は、次に示すように、SQL ステートメントの PARAMETERS キーワードの後に挿入されます。例を次に示します。

CREATE INDEX MY_SP_INDEX ON MY_SP_TABLE(SHAPE)
INDEXTYPE IS MDSYS.SPATIAL_INDEX PARAMETERS ( <configuration string is inserted here> );

コンフィグレーション文字列は、<パラメータ> = <値> エレメントのリストからなる文字列を引用符で囲んだものです。コンフィグレーション文字列には、多くのパラメータを指定することができます。Oracle Spatial のインデックス パラメータとその相互作用については、『Oracle Spatial ユーザーズガイドおよびリファレンス』の該当するセクションをご参照ください。

空間インデックスのコンフィグレーション文字列と(B_STORAGE で指定される)ビジネス テーブルのコンフィグレーション文字列では、物理的な格納パラメータは異なります。また、これらのパラメータを SQL ステートメントに指定する方法が異なります。Oracle の SQL ステートメントの形式が違うため、コンフィグレーション文字列の形式も異なります。また、テーブルの作成に使用できるすべての物理的な格納パラメータを、空間インデックスの作成に使用できるわけではありません。

B_STORAGE	"TABLESPACE ORSPBIZ PCTFREE 10 INITRANS 4 STORAGE(INITIAL 512000)"
SDO_INDEX_SHAPE	"tablespace=ORSPIDX initial=512000"

Oracle Spatial フィーチャクラスで使用される DBTUNE パラメータ グループの例

このセクションでは、いくつかの一般的な状況で使用できる DBTUNE パラメータ グループを紹介します。(パラメータはコンフィグレーション キーワードによってグループ化されることに注意してください。)これらのサンプルでは、Oracle Spatial フィーチャクラスの格納パラメータに焦点を当てています。

Oracle と Esri では、SDO_GEOMETRY 格納で R ツリー空間インデックスを使用することを推奨します。次の例のいくつかには、「sdo_indx_dims=2」パラメータが含まれています。このパラメータは、R ツリー空間インデックスを使用してインデックス付けするディメンションの数を指定するものです。Oracle 9.2 のデフォルト値は 2(最初の 2 つのディメンションである X、Y)です。Oracle の以前のバージョンのデフォルト値は、USER_SDO_GEOM_METADATA に登録されたディメンションの数です。X、Y 以外のディメンションでの R ツリー空間インデックスの作成には、さまざまな問題があります。たとえば、Oracle はメジャー ディメンションについて、R ツリー空間インデックスをサポートしません。R ツリー空間インデックスを作成していて、かつ Oracle 9.2 以前のバージョンを使用している場合は、必ずこのパラメータを使用することをお勧めします。

デフォルトで Oracle Spatial を使用しない場合は、Oracle Spatial フィーチャクラスを作成するためのシンプルなパラメータ グループを、デフォルト設定を使用して作成することができます。DEFAULTS パラメータ グループ以外で指定されていない限り、テーブルとインデックスは、デフォルトの物理的な格納パラメータに基づいて、ユーザのデフォルト表領域に作成されます。空間インデックスは 2 次元の R ツリーになります。

##SDO_GEOMETRY
GEOMETRY_STORAGE		"SDO_GEOMETRY"
SDO_INDEX_SHAPE	"sdo_indx_dims=2"
UI_TEXT	"Oracle Spatial: default settings"
END

Oracle Spatial を使用して測地系 SRID 8307(Latitude/Longitude WGS 84)など、特定の空間参照系識別子(SRID)を使用してデータを頻繁にロードする場合は、上記のパラメータ グループを拡張したバージョンを作成します。座標値の上限、下限、許容差は必ずしも指定する必要はありませんが、これらを指定すると、すべてのフィーチャクラスで X、Y ディメンションに同じメタデータを使用できます。これは同一フィーチャ データセット内のフィーチャクラスを使用する場合に便利です。また、これにより、逆回転のポリゴン境界がある場合には、ArcSDE クライアントに送信される前に並べ替えられます。

メモメモ:

Oracle9i の測地データでは、範囲は 10 進経緯度で指定され、許容値はメートルで指定されます。

##SDO_GEOMETRY_8307
GEOMETRY_STORAGE		"SDO_GEOMETRY"
SDO_INDEX_SHAPE	"sdo_indx_dims=2"
SDO_SRID	8307
SDO_DIMNAME_1	"Lon"
SDO_LB_1	-180.000000
SDO_UB_1	180.000000
SDO_TOLERANCE_1	0.05
SDO_DIMNAME_2	"Lat"
SDO_LB_2	-90.000000
SDO_UB_2	90.000000
SDO_TOLERANCE_2	0.05
UI_TEXT	"Oracle Spatial: WGS84"
END

R ツリー空間インデックスを持つフィーチャクラスを ORSPBIZ という名前の表領域に読み込むときは、次の例を使用できます。R ツリー空間インデックスが、ORSPIDX という名前の表領域に作成されます。メタデータの値は、データを読み込む ArcSDE クライアントによって決定されます。

##SDO_GEOMETRY_ORSPBIZ
GEOMETRY_STORAGE		"SDO_GEOMETRY"
B_STORAGE	"TABLESPACE ORSPBIZ"
SDO_INDEX_SHAPE	"tablespace=ORSPIDX sdo_indx_dims=2"
UI_TEXT	"Tablespace ORSPBIZ / ORSPIDX"
END

次の例は、タイル レベル(分割レベル)が固定サイズ(6)のクワッドツリー空間インデックスを持つフィーチャクラスを読み込む場合に使用できます。空間インデックスが ORSPIDX 表領域に作成されます。

クワッドツリー インデックスではコミット間隔が重要です(R ツリー空間インデックスでは無視されます)。コミット間隔により、インデックス データをコミットする前に処理されるビジネス テーブルのレコード数が設定されます。コミット間隔を指定しないと、インデックス データをコミットする前に、ビジネス テーブルのすべてのレコードが処理されます。このため、インデックス テーブルのレコード数が多い場合は問題になります。

メモメモ:

sdo_commit_interval パラメータは非常に重要なので、SDO_INDEX_SHAPE パラメータの一部として指定していなくても、ArcSDE によって、Oracle Spatial テーブルの SQL インデックス作成ステートメントに自動的に追加されます。このパラメータは 1,000 に設定されます。

##SDO_GEOMETRY_QT_6
GEOMETRY_STORAGE		"SDO_GEOMETRY"
SDO_INDEX_SHAPE	"tablespace=ORSPIDX sdo_level=6 sdo_commit_interval=1000"
END

カスタム パラメータ グループを作成する際には、ジオメトリック ネットワークやテレインなど他のジオデータベース構造をサポートするパラメータの追加が必要になることがあります。DEFAULTS パラメータ グループのパラメータを設定することで、これらの要件を満たすこともできます。

たとえば、DEFAULTS キーワードの GEOMETRY_STORAGE パラメータが SDO_GEOMETRY に設定されている場合は、トポロジ、ネットワーク、またはテレインを作成する際にそれらのデフォルトのコンポジット キーワードが使用されます。デフォルトのコンポジット キーワードは GEOMETRY_STORAGE を指定しないので、DEFAULTS の GEOMETRY_STORAGE、つまりこの場合は SDO_GEOMETRY が使用されます。

一方、DEFAULTS キーワードの GEOMETRY_STORAGE パラメータの設定が SDO_GEOMETRY 以外になっているときに、SDO_GEOMETRY 格納を使用するテレインを作成するような場合は、テレインを SDO_GEOMETRY 格納で格納するように設計した新しいテレイン キーワードのセットを作成する必要があります。次に、dbtune.sde ファイルでのこの例を示します。

##TERRAIN_SDO
UI_TERRAIN_TEXT    "The terrain default configuration"

GEOMETRY_STORAGE  "SDO_GEOMETRY"

B_STORAGE           "PCTFREE 0 INITRANS 4 TABLESPACE ter_tblspc"
                    
B_INDEX_ROWID       "PCTFREE 0 INITRANS 4 TABLESPACE ter_tblspc NOLOGGING"

B_INDEX_SHAPE       "PCTFREE 0 INITRANS 4 TABLESPACE ter_tblspc NOLOGGING"

B_INDEX_USER        "PCTFREE 0 INITRANS 4 TABLESPACE ter_tblspc NOLOGGING"

END

##TERRAIN_SDO::EMBEDDED
GEOMETRY_STORAGE  "SDO_GEOMETRY"

B_STORAGE           "PCTFREE 0 INITRANS 4 TABLESPACE ter_tblspc"

B_INDEX_ROWID       "PCTFREE 0 INITRANS 4 TABLESPACE ter_tblspc NOLOGGING"

B_INDEX_SHAPE       "PCTFREE 0 INITRANS 4 TABLESPACE ter_tblspc NOLOGGING"

B_INDEX_USER        "PCTFREE 0 INITRANS 4 TABLESPACE ter_tblspc NOLOGGING"

END


3/6/2012