3.3 GeoRaster表およびラスター・データ表の作成

GeoRasterオブジェクトで操作を行う前に、GeoRaster表および(作成していない場合は)1つ以上のラスター・データ表を作成する必要があります。

3.3.1 GeoRaster表の作成

GeoRaster表は、SDO_GEORASTER型の1つ以上の列を含む任意の表です。この列は、別のユーザー定義のオブジェクト型の属性列とすることも可能です。例3-1では、CITY_IMAGESというGeoRaster表を作成します。この表には、GeoRasterオブジェクトを格納するためのIMAGEという列が含まれています。

例3-1 City ImagesのGeoRaster表の作成

CREATE TABLE city_images (image_id NUMBER PRIMARY KEY, image_description VARCHAR2(50), image SDO_GEORASTER);

GeoRaster表の詳細は、「GeoRasterの物理記憶域」を参照してください。

3.3.2 ラスター・データ表の作成

GeoRaster表を作成したら、GeoRaster表のオブジェクトとともに使用する1つ以上のラスター・データ表(RDT)を作成する必要があります。RDTは、オブジェクト表として、またはリレーショナル表として作成できます。RDTを作成する場合、LOB記憶域形式のSecureFiles LOB (SecureFiles)を使用する必要があります。SecureFilesを使用すると、従来のLOB記憶域パラダイムのBasicFiles LOB (BasicFiles)を使用する場合と比較して、GeoRaster操作のパフォーマンスが大幅に向上します。

ノート:

RDTの名前は、「ラスター・データ表」での説明のとおり、データベース内で一意である必要があります。

例3-2では、SecureFilesを使用してRDTを作成します。RDTを使用して、CITY_IMAGES表または他のGeoRaster表に含まれる1つ以上のGeoRasterオブジェクトのすべてのラスター・ブロックを格納します。(GeoRasterオブジェクトを作成するまで、GeoRasterオブジェクトとRDTの関連は確立されません(「新しいGeoRasterオブジェクトの作成」を参照))。

例3-2 SecureFilesを使用したラスター・データ表の作成

CREATE TABLE city_images_rdt OF SDO_RASTER
  (PRIMARY KEY (rasterID, pyramidLevel, bandBlockNumber,
    rowBlockNumber, columnBlockNumber))
  TABLESPACE im_tbs_2
  LOB(rasterBlock) STORE AS SECUREFILE
    (CACHE);

例3-3 SecureFilesを使用したラスター・データ表(リレーショナル)の作成

例3-3では、同様にSecureFilesを使用して、例3-2と同じ名前のRDTを作成しますが、オブジェクト表ではなくリレーショナル表としてそれを作成します。

CREATE TABLE city_images_rdt
  (rasterID NUMBER,
  pyramidLevel NUMBER,
  bandBlockNumber NUMBER,
  rowBlockNumber NUMBER,
  columnBlockNumber NUMBER,
  blockMBR SDO_GEOMETRY,
  rasterBlock BLOB,
  CONSTRAINT pkey PRIMARY KEY (rasterId, pyramidLevel, bandBlockNumber,
    rowBlockNumber, columnBlockNumber))
  LOB (rasterblock) STORE AS SECUREFILE(cache);

RDTのCREATE TABLE文には、次の句を含める必要があります(前述の例に含まれています)。

  (PRIMARY KEY (rasterID, pyramidLevel, bandBlockNumber,
    rowBlockNumber, columnBlockNumber))

このPRIMARY KEY句によって、ラスター・データ表にBツリー索引を作成します(この索引は、最適な問合せパフォーマンスのために必須です)。

BasicFilesを使用する場合、より大きいCHUNKサイズ(16または32KB)を指定して、LOB記憶域のパフォーマンスを向上できます。SecureFilesでは、CHUNKサイズ・パラメータを指定する必要はありませんが、別のいくつかの記憶域パラメータを考慮する必要があります。SecureFiles LOBを使用するラスター・データ表は、自動セグメント領域管理オプション付きの表領域に作成する必要があります。Oracle SecureFilesの使用方法とBasicFiles LOBのパフォーマンス上の考慮事項の詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

LOB記憶域の指定を含む、表の作成のリファレンス情報については、『Oracle Database SQL言語リファレンス』のCREATE TABLE文に関する項を参照してください。

RDTを作成する場合のキーワードおよびオプションの詳細は、「ラスター・データ表」を参照してください。

3.3.3 GeoRaster DMLトリガーの作成

GeoRasterの内部表とデータ構造の一貫性および整合性を確保するために、GeoRasterでは、ユーザーがGeoRaster表(1つ以上のGeoRaster列を含む表)を作成すると、GeoRaster列ごとに一意のDMLトリガーが自動的に作成されます。これは、通常はGeoRaster DMLトリガーを手動で作成する必要はないということです。

ただし、例外が1つあります。ALTER TABLE文を使用して1つ以上のGeoRaster列を追加する場合は、SDO_GEOR_UTL.createDMLTriggerプロシージャをコールして、追加した各GeoRaster列にDMLトリガーを作成する必要があります。たとえば、新しい列added_geor_colを表my_geor_tabに追加した場合、次のコマンドを実行する必要があります。
EXECUTE SDO_GEOR_UTL.createDMLTrigger('MY_GEOR_TAB', 'ADDED_GEOR_COL');

また、データベース・アップグレードやデータ移行などの一部の使用例では、SDO_GEOR_UTL.recreateDMLTriggersプロシージャをコールしてすべてのGeoRaster列にDMLトリガーを再作成できます。

トリガーが起動されるのは、GeoRasterオブジェクトに影響を及ぼすデータ操作言語(DML)の各操作(行の挿入、GeoRasterオブジェクトの更新、および行の削除)の実行後です。

トリガーが起動されると、次のアクションが自動的に実行されます。

  • 挿入操作を実行すると、トリガーによって、GeoRaster表の名前、GeoRaster列の名前、ラスター・データ表の名前およびrasterID値を含む行がUSER_SDO_GEOR_SYSDATAビューに挿入されます(「GeoRasterシステム・データ・ビュー(xxx_SDO_GEOR_SYSDATA)」を参照)。同一のエントリがすでに存在する場合、例外が発生します。

  • 更新操作を実行すると、新しいGeoRasterオブジェクトがNULLまたは空である場合、トリガーによって、古いGeoRasterオブジェクトが削除されます。古いGeoRasterオブジェクトのUSER_SDO_GEOR_SYSDATAビューにエントリが存在しない場合(古いGeoRasterオブジェクトがNULLの場合)、トリガーによって、新しいGeoRasterオブジェクトのビューに行が挿入されます。古いGeoRasterオブジェクトのUSER_SDO_GEOR_SYSDATAビューにエントリが存在する場合、トリガーによって、新しいGeoRasterオブジェクトを反映するように情報が更新されます。

  • 削除操作を実行すると、トリガーによって、GeoRasterオブジェクトのラスター・データ・ブロックがラスター・データ表から削除され、そのGeoRasterオブジェクトの行がUSER_SDO_GEOR_SYSDATAビューから削除されます。