この章では、GeoRasterの主な操作を実行する方法について説明します。GeoRasterの通常のワークフローは、次のほとんどまたはすべての手順で構成されます。
GeoRaster表およびラスター・データ表を作成します(3.1項を参照)。
GeoRasterオブジェクトを初期化または作成します(3.2項を参照)。
ラスター・イメージまたはグリッドをロードします(3.3項を参照)。
検証されていないGeoRasterオブジェクトを検証します(3.4項を参照)。
必要に応じて、GeoRasterオブジェクトを地理参照します(3.5項を参照)。
GeoRasterオブジェクトの空間エクステントを設定します(3.6項を参照)。
空間索引またはその他の索引(あるいはその両方)を作成します(3.7項を参照)。
必要に応じて、GeoRasterの記憶域形式を変更します(3.8項を参照)。
GeoRasterオブジェクトをコピーします(3.9項を参照)。
GeoRasterメタデータを問合せおよび更新します(3.10項を参照)。
セル・データを問合せおよび更新します(3.11項を参照)。
GeoRasterオブジェクトを処理します(3.12項を参照)。
必要に応じて、GeoRasterオブジェクトを圧縮します(3.13項を参照)。
GeoRasterオブジェクトを表示します(3.14項を参照)。
GeoRasterオブジェクトをエクスポートします(3.15項を参照)。
トランザクションをコミットする前にGeoRasterオブジェクトを更新します(3.16項を参照)。
テンプレート関連のサブプログラムを使用してGeoRasterアプリケーションを開発します(3.17項を参照)。
Workspace ManagerおよびLabel SecurityでGeoRasterを使用します(3.18項を参照)。
GeoRasterオブジェクトによる表領域の効率的な使用をメンテナンスします(3.19項を参照)。
データベースのGeoRasterオブジェクトおよびシステム・データをメンテナンスします(3.20項を参照)。
データベース間でGeoRasterデータを転送します(3.21項を参照)。
GeoRasterオブジェクトを作成し、データをロードしてGeoRasterオブジェクトを検証した後は、アプリケーションの要件に応じて、残りの操作を任意の順序で実行できます。特定の操作をスキップすることもできます。
一部の操作はSQLを使用して実行できます。また一部の操作はPL/SQLブロックを使用して実行する必要があります。GeoRasterオブジェクトのメタデータやセル・データを削除または編集した後は、その変更をコミットする前にGeoRasterオブジェクトを更新する必要があります(3.16項を参照)。これらの操作の例については、1.14項のデモ・ファイルおよび第4章に示す例を参照してください。
この章の項では、GeoRasterの主な操作について説明します。
後続の章では、SDO_GEOR、SDO_GEOR_ADMINおよびSDO_GEOR_UTLパッケージに関する詳細なリファレンス情報を示します。これらのパッケージには、GeoRasterのデータおよびメタデータを処理するサブプログラム(ファンクションおよびプロシージャ)が含まれています。
GeoRasterオブジェクトで操作を行う前に、GeoRaster表および(作成していない場合は)1つ以上のラスター・データ表を作成する必要があります。
GeoRaster表は、SDO_GEORASTER型の列を含む任意の表です。この列は、別のユーザー定義のオブジェクト型の属性列とすることも可能です。例3-1では、CITY_IMAGESというGeoRaster表を作成します。この表には、GeoRasterオブジェクトを格納するためのIMAGEという列が含まれています。
例3-1 City ImagesのGeoRaster表の作成
CREATE TABLE city_images (image_id NUMBER, image_description VARCHAR2(50), image SDO_GEORASTER);
GeoRaster表の詳細は、1.4項を参照してください。
GeoRaster表を作成したら、GeoRaster表のオブジェクトとともに使用する1つ以上のラスター・データ表(RDT)を作成する必要があります。ラスター・データ表を作成するには、従来のLOB記憶域パラダイムのBasicFile LOB(BasicFiles)を使用するか、リリース11.1で導入されたLOB記憶域形式のSecureFile LOB(SecureFiles)を使用します。
例3-2では、BasicFilesを使用してCITY_IMAGES_RDTという名前のラスター・データ表を作成します。このRDTを使用して、CITY_IMAGES表の各GeoRasterオブジェクトのブロックごとの情報を格納します。(GeoRasterオブジェクトを作成するまで、GeoRaster表とラスター表の関連は確立されません。(3.2項を参照))
例3-2 BasicFilesを使用したラスター・データ表の作成
CREATE TABLE city_images_rdt OF SDO_RASTER (PRIMARY KEY (rasterID, pyramidLevel, bandBlockNumber, rowBlockNumber, columnBlockNumber)) TABLESPACE im_tbs_1 LOB(rasterBlock) STORE AS lobseg ( CHUNK 32768 CACHE READS PCTVERSION 0 STORAGE (PCTINCREASE 0) );
例3-3では、例3-2と同じ名前のラスター・データ表を作成しますが、ここではSecureFilesを使用します。
例3-3 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 lobseg (NOCACHE NOLOGGING);
BasicFilesを使用する場合、より大きいCHUNKサイズ(16または32KB)を指定して、LOB記憶域のパフォーマンスを向上できます。SecureFilesでは、CHUNKサイズ・パラメータを指定する必要はありませんが、別のいくつかの記憶域パラメータを考慮する必要があります。SecureFile LOBを使用するラスター・データ表は、自動セグメント領域管理オプション付きの表領域に作成する必要があります。Oracle SecureFilesの使用方法とBasicFile LOBのパフォーマンス上の考慮事項の詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。
LOB記憶域の指定を含む、表の作成のリファレンス情報については、『Oracle Database SQL言語リファレンス』のCREATE TABLE文に関する項を参照してください。
ラスター・データ表を作成する場合のキーワードおよびオプションの詳細は、1.4.2項を参照してください。
GeoRasterの内部表とデータ構造の一貫性および整合性を保証するために、ユーザーがGeoRaster表(1つ以上のGeoRaster列を含む表)を作成すると、各GeoRaster列に対応する一意のDMLトリガーがGeoRasterにより自動的に作成されます。ただし、ALTER TABLE文を使用して1つ以上のGeoRaster列を追加する場合は、SDO_GEOR_UTL.createDMLTriggerプロシージャをコールして、追加した各GeoRaster列に対してDMLトリガーを作成する必要があります。
トリガーが起動されるのは、GeoRasterオブジェクトに影響を及ぼすデータ操作言語(DML)の各操作(行の挿入、GeoRasterオブジェクトの更新、および行の削除)の実行後です。
トリガーが起動されると、次のアクションが自動的に実行されます。
挿入操作を実行すると、トリガーによって、GeoRaster表の名前、GeoRaster列の名前、ラスター・データ表の名前およびrasterID
値を含む行がUSER_SDO_GEOR_SYSDATAビューに挿入されます(2.4項を参照)。同一のエントリがすでに存在する場合、例外が発生します。
更新操作を実行すると、新しいGeoRasterオブジェクトがNULLまたは空である場合、トリガーによって、古いGeoRasterオブジェクトが削除されます。古いGeoRasterオブジェクトのUSER_SDO_GEOR_SYSDATAビューにエントリが存在しない場合(古いGeoRasterオブジェクトがNULLの場合)、トリガーによって、新しいGeoRasterオブジェクトのビューに行が挿入されます。古いGeoRasterオブジェクトのUSER_SDO_GEOR_SYSDATAビューにエントリが存在する場合、トリガーによって、新しいGeoRasterオブジェクトを反映するように情報が更新されます。
削除操作を実行すると、トリガーによって、GeoRasterオブジェクトのラスター・データ・ブロックがラスター・データ表から削除され、そのGeoRasterオブジェクトの行がUSER_SDO_GEOR_SYSDATAビューから削除されます。
GeoRaster表にGeoRasterイメージを格納する前に、GeoRasterオブジェクトを作成し、作業の開始前にそのオブジェクトをGeoRaster表に挿入する必要があります。新しいGeoRasterオブジェクトを作成するには、次の方法があります。
SDO_GEOR.initファンクションを使用して、空のGeoRasterオブジェクトを初期化します。
SDO_GEOR.createBlankファンクションを使用して、空白のGeoRasterオブジェクトを作成します。
オブジェクトが適切に作成されていない場合(オブジェクトがアトミックなNULLの場合)、いずれのGeoRaster操作も実行できません。SDO_GEOR.initおよびSDO_GEOR.createBlankファンクションは、ラスター・データ表の名前およびラスターID値が指定されていない場合に、それらの値でGeoRasterオブジェクトを初期化します。GeoRaster DMLトリガーは、ラスター・データ表の名前とラスターID値の組合せが現行ユーザーに対して一意であることを保証します。
(SDO_GEOR.importFrom、SDO_GEOR.subset、SDO_GEOR.copyなどの別のGeoRasterプロシージャの結果として)新しいGeoRasterオブジェクトにラスター・セル・データが含まれ、この新しいGeoRasterオブジェクトに対するラスター・データ表が存在しない場合は、まずラスター・データ表を作成する必要があります。ラスター・データ表を作成する方法とその例については、3.1.2項を参照してください。
GeoRasterデータに発生する可能性がある問題を回避するには(一部の問題については3.20項を参照)、GeoRaster表にGeoRasterオブジェクトを挿入することによって、初期化されたGeoRasterオブジェクトをGeoRasterシステム・ビューに登録する必要があります。これは、GeoRasterオブジェクトになんらかの別の操作を実行する前に行います。ソースまたはターゲットのGeoRasterオブジェクトが登録されていない場合、ラスター・データ表を操作する必要のあるGeoRaster操作を実行すると、例外が発生します。
イメージまたはラスター・データをロードおよびエクスポートする場合、常にサード・パーティのETLツールの使用を検討してください(1.13項の「注意」を参照)。
GeoRasterの機能を使用してラスター・データをロードする場合、次の方法があります。
SDO_GEOR.importFromプロシージャをコールして、イメージをGeoRasterオブジェクトにロードします。
GeoRasterローダー・ツールまたはビューア・ツールを使用します(1.13項を参照)。
両方の方法で、次の操作を実行できます。
ラスター・データを圧縮し、データをJPEG圧縮またはDEFLATE圧縮されたGeoRasterオブジェクトに保存します。
ESRIワールド・ファイルまたはDigital Globe RPCテキスト・ファイル(.rpb)を既存のGeoRasterオブジェクトにロードし、リロードせずにラスター・データを地理参照します。ワールド・ファイルでSRIDを指定し、データの空間エクステントを生成することもできます。
ラスター・データの有無にかかわらず、地理参照とともにGeoTIFF形式のファイルをロードします。
GeoRasterオブジェクトにラスター・データをロードしたら、SDO_GEOR.validateGeoRasterファンクションをコールしてそのオブジェクトが有効であることを確認する必要があります(3.4項を参照)。
ESRIワールド・ファイルまたは.rpb
ファイルには座標系の情報が含まれていないため、ロード操作用に座標参照システムのSRID値を指定することができます。ただし、SRIDを指定しない場合は、ローダーによりGeoRasterオブジェクトのモデルSRIDが0(ゼロ)に設定されます。これは、GeoRasterオブジェクトが無効であり、そのため、SDO_GEOR.setModelSRIDプロシージャを使用してこのオブジェクトに有効なモデル空間を指定する必要があることを意味します。モデル空間の座標系が不明である場合は、SRIDの値を999999に指定できます。これは、座標参照システムが不明であることを意味します。(具体的には、SRID 999999はunknown CRS
という座標参照システムに関連付けられます。)モデル空間の実際の座標参照システムがわかった後で、それに応じてSRID値を設定できます。
unknown CRS
(SRID 999999)の座標参照システムの詳細は、『Oracle Spatial開発者ガイド』を参照してください。
GeoRasterローダーでは、BSQインターリーブ形式のソース・ラスター・ファイルがサポートされないため、ファイルが大きすぎるとメモリー不足のエラーが発生する可能性があります。また、その他の制限も適用される場合があります。このような問題を回避するには、ソース・ファイルが適切にロードされるようにソース・ファイルを再フォーマットおよび再ブロック化します。
この操作を行う方法の1つに、GDALの使用があります。GDALは、http://www.gdal.org
から入手できるオープン・ソースのラスター変換ライブラリであり、JAI(Java Advanced Imaging)で処理するためにイメージ・ファイルやラスター・ファイルを再フォーマットまたは再ブロック化できます。また、GDALを使用してTFWファイルを生成することもできます。たとえば、GDALコマンドラインまたは(一括変換の場合は)シェルを使用して、それぞれ単一行で次の2つのようなコマンドを実行します。
gdal_translate -of GTiff -co "TFW=YES" -co "INTERLEAVE=PIXEL" -co "TILED=YES" D:\my_image.tif D:\my_new_image.tif gdal_translate -of GTiff -co "TILED=YES" -co "TFW=YES" D:\my_image.ecw D:\my_new_image.tif
前述の例で、最初のコマンドはTFWファイルを生成し、インターリーブを(JAIでサポートされる)BIPに変更して、イメージを256x256に再ブロック化します。2つ目のコマンドは、ECWをTIFFに変換し、TFWを生成してイメージを再ブロック化します。
その後、GeoRasterローダー・ツール(1.13項を参照)を使用して再ブロック化を指定し、イメージを適切にロードして、後でデータベースから効率的に取得できるようにします。次に、単一コマンドの例を示します。
java -Xmx1024m oracle.spatial.georaster.tools.GeoRasterLoader mymachine db11 6521 georaster georaster thin 32 T globe image "blocking=true, blocksize=(512,512,3)" "D:my_image.tif,2,RDT_15, D:\my_image.tfw,82213"
SDO_GEOR.importFromをコールして非常に大きいイメージをロードしようとしたときにメモリー不足のエラーが発生した場合は、異なるブロック化サイズ・パラメータでイメージをロードするか、ロード前にGDALを使用してイメージをより小さい内部矩形サイズに再ブロック化してください。極端に大きいイメージの場合、GDALを使用して、そのイメージをより小さいサイズ(JAIで処理できるサイズ)の複数のイメージ・ファイルにタイル処理することも可能です。
GeoRasterオブジェクトを使用する前、またはGeoRasterオブジェクトのラスター・データおよびメタデータを手動で編集した後、そのオブジェクトが有効であることを確認する必要があります。GeoRasterオブジェクトの検証では、GeoRasterオブジェクトの登録の確認、メタデータとラスター・セル・データの確認、およびメタデータとデータに一貫性があるかどうかの確認が行われます。たとえば、検証では、ラスター型、ディメンション情報およびセル・ブロックの実際のサイズが確認され、その他の確認が行われます。
GeoRasterローダー・ツール(1.13項を参照)を使用した場合、GeoRasterオブジェクトはロード操作時に検証されています。
GeoRasterは、次の検証サブプログラムを提供します。
SDO_GEOR.validateGeoRaster: セル・データおよびメタデータを含む、GeoRasterオブジェクトを検証します。オブジェクトが有効な場合はTRUE
を戻します。有効でない場合は、GeoRasterオブジェクトが無効である理由を示すOracleエラー・コード、FALSE
(不明な理由によって検証が失敗した場合)、またはNULL
(GeoRasterオブジェクトがNULLの場合)のいずれかを戻します。GeoRasterオブジェクトの作成後は、常にこのファンクションを使用する必要があります。
SDO_GEOR.schemaValidate: GeoRasterのXMLスキーマに対してメタデータを検証します。SDO_GEOR.validateGeoRasterファンクションによってエラー・コード13454が戻された場合、このファンクションを使用してエラーの場所を特定できます。SDO_GEOR.schemaValidateおよびSDO_GEOR.validateGeoRasterファンクションは、空間エクステント・ジオメトリを検証しません。
SDO_GEOR.validateBlockMBR: ラスター・データ表に格納された各ラスター・ブロックに関連するblockMBR
ジオメトリを検証します。無効なblockMBR
ジオメトリが存在する場合は、SDO_GEOR.generateBlockMBRプロシージャをコールしてそれらを再生成します。
地理参照(1.6項を参照)によって、GeoRasterデータのセル座標と実際の地上座標(またはいくつかのローカル座標)が関連付けられます。GeoRasterオブジェクトを地理参照する必要がある場合、次の方法を使用できます。
元のイメージがすでに地理参照されており、その地理参照情報がESRIワールド・ファイルまたはRPC係数を含む.rpb
ファイルに格納されている場合は、SDO_GEOR.importFromプロシージャを使用して、ファイルまたはCLOBオブジェクトから、(FILEまたはBLOB形式の)イメージ・データ自体とともに、ESRIワールド・ファイルまたは.rpb
ファイルをロードできます。GeoRasterのクライアント側ローダー・ツール(1.13項を参照)を使用して、イメージ・ファイル自体とともに、ESRIワールド・ファイルまたは.rpb
ファイルをファイルからロードすることもできます。
ESRIワールド・ファイルまたは.rpb
ファイルではモデル座標系が指定されないため、Oracle SRIDを使用して地理参照されるGeoRasterオブジェクトのモデル空間を、次のいずれかの方法で設定できます。ワールド・ファイルとともにSDO_GEOR.importFromプロシージャまたはGeoRasterのクライアント側ローダー(1.13項を参照)に対してSRIDをパラメータとして指定するか、またはワールド・ファイルのロード後に、SDO_GEOR.setModelSRIDプロシージャをコールします。SDO_GEOR.setModelSRIDプロシージャをコールして、地理参照されるGeoRasterオブジェクトのモデル空間を変更することもできます。
元のイメージが、地理参照されるGeoTIFFイメージの場合、SDO_GEOR.importFromプロシージャを使用し、入力形式としてGEOTIFF
を指定することで、地理参照とともにイメージをロードできます。GeoTIFFイメージからラスター・イメージ・データなしで地理参照情報のみを既存のGeoRasterオブジェクトにロードするには、raster=false
記憶域パラメータを追加します。GeoTIFFの構成値が、Oracle Spatialによって認識されるSRIDと一致しない場合、srid
記憶域パラメータ付きでバックアップSRIDを指定できます。
GeoTIFF PixelIsArea
ラスター空間は、左上角を基準とするGeoRasterのセル座標系と同じです。GeoTiffへのエクスポートは、常にPixelIsArea
ラスター空間が対象となります(GeoRasterオブジェクトが中央を基準とするセル座標系の場合は、アフィン変換で2分の1ピクセル単位の調整が行われます)。GeoTIFFからのインポートは、常に中央を基準とするGeoRasterのセル座標系が対象となります(GeoTIFFファイルがPixelIsArea
ラスター空間で指定されている場合は、アフィン変換で2分の1ピクセル単位の調整が行われます)。
GeoRasterのクライアント側ローダー・ツール(1.13項を参照)を使用して、geotiff=true
記憶域パラメータの指定により地理参照とともにGeoTIFFイメージをロードすることもできます。このパラメータを省略するか、geotiff=false
を指定すると、イメージは地理参照なしの単純なTIFFイメージとしてロードされます。raster
およびsrid
記憶域パラメータも、クライアント側ローダー・ツールに適用されます。
GeoRasterのクライアント側ツールでGeoTIFFイメージをロードまたはエクスポートするには、次のGeoTIFFライブラリを現在のCLASSPATH定義に追加します。
xtiff-jai.jar
(SourceForge Extensible-TIFF-JAIグループから入手可能)
geotiff-jai.jar
(SourceForge GeoTIFF-JAIグループから入手可能)
SDO_GEOR.importFromまたはSDO_GEOR.exportToプロシージャでGeoTIFFイメージをロードまたはエクスポートする場合は、これらのライブラリをMDSYSスキーマにロードする必要があります。これを行うには、SYSTEMユーザーとしてデータベースに接続し、xtiff-jai.jar
およびgeotiff-jai.jar
ファイルへのパスを反映するように必要に応じて$ORACLE_HOME
/md/admin/sdoldgtf.sql
を編集し、sdoldgtf.sql
SQL*Plusスクリプトを実行します。 sdoldgtf.sql
スクリプトを使用するかわりに、次のコマンドを入力することもできます。
loadjava -user system/password@database -resolve -force -synonym -schema MDSYS -grant PUBLIC xtiff-jai.jar loadjava -user system/password@database -resolve -force -synonym -schema MDSYS -grant PUBLIC geotiff-jai.jar
データベースをOracle Database 11g より前のリリースにダウングレードする場合は、$ORACLE_HOME
/md/admin/sdormgtf.sql
のスクリプトを使用してこれらのライブラリをアンインストールする必要があります。これを行うには、xtiff-jai.jar
およびgeotiff-jai.jar
ファイルへのパスを反映するように必要に応じてスクリプトを編集し、sdormgtf.sql
スクリプトを実行するか、または次のコマンドを入力します。
dropjava -user system/password@database -resolve -force -synonym -schema MDSYS -grant PUBLIC xtiff-jai.jar dropjava -user system/password@database -resolve -force -synonym -schema MDSYS -grant PUBLIC geotiff-jai.jar
SDO_GEOR.setSRSプロシージャを使用して、GeoRaster SRSメタデータに直接アクセスすることで地理参照情報を追加、変更および削除できます。たとえば、SDO_GEOR_SRSオブジェクトを作成し、係数および関連する地理参照情報を割り当てた後、SDO_GEOR.setSRSプロシージャをコールして、任意のGeoRasterオブジェクトの空間リファレンス情報を追加または更新できます。SDO_GEOR.setSRSプロシージャを使用して、サポートされるすべての関数フィッティング地理参照モデルに対応する空間参照情報を設定できます。既存のDLTモデルや既存のRPCモデルからSRS情報を設定する方法の例は、SDO_GEOR.setSRSプロシージャのリファレンスの項を参照してください。
1つのGeoRasterオブジェクトが別のGeoRasterオブジェクトと同じSRS情報を持つことがわかっている場合、SDO_GEOR.getSRSファンクションをコールしてこのGeoRasterオブジェクトからSDO_GEOR_SRSオブジェクトを取得し、次にSDO_GEOR.setSRSプロシージャをコールして最初のGeoRasterオブジェクトを地理参照できます。
アフィン変換を使用してGeoRasterオブジェクトを地理参照できる場合、SDO_GEOR.georeferenceプロシージャをコールしてGeoRasterオブジェクトを直接地理参照できます。SDO_GEOR.georeferenceのリファレンス情報に記載されているとおり、このプロシージャでは、係数A
、B
、C
、D
、E
、F
およびその他の情報を使用し、それらを係数a
、b
、c
、d
、e
、f
に変換してGeoRasterオブジェクトの空間参照情報に格納します。元のラスター・データが幾何補正されており、基点(左上角)のモデル座標が(x0, y0)で、空間解像度値(スケール)がs
である場合、A = s、B = 0、C = x0、D = 0、E = -s、F = y0となります。
地理参照されるGeoRasterオブジェクトのSRS情報に基づいたGeoRasterの座標情報の変換では、特定のセル(ラスター)座標に関連付けられたモデル(地上)座標を検索します。または、その反対に特定のモデル(地上)座標に関連付けられたセル(ラスター)座標を検索します。つまり、次の操作を実行できます。
任意のセル座標に対して、SDO_GEOR.getModelCoordinateファンクションを使用して、関連付けられたモデル空間座標を検索できます。たとえば、イメージ上の点を指定して、その点に関連付けられた緯度と経度を検索できます。
モデル空間座標に対して、SDO_GEOR.getCellCoordinateファンクションを使用して、関連付けられたセル座標を検索できます。たとえば、緯度と経度の座標を指定して、これらの座標に関連付けられたイメージ上のセルを検索できます。
GeoRasterオブジェクトが作成される際、その空間エクステント(2.1.2項に示すspatialExtent
属性)は、モデル空間の座標系の中では囲まれたジオメトリである必要はありません。空間エクステント(フットプリント)・ジオメトリは、最初はNULLであるか、またはセル空間の座標系や他の座標系を表すことがあります。空間エクステントを生成および設定する機能は、世界的な規模の範囲や広い地域の範囲の大容量のGeoRasterデータベースを作成する場合に便利です。この場合、空間エクステントは世界的な規模の1つの測地座標系の中にあり、GeoRasterオブジェクト(イメージ、DEMなど)は異なる投影座標系の中にあります。このような場合には、空間エクステント上に空間(Rツリー)索引を作成できますが、すべての空間エクステント・ジオメトリは同じSRID値を持つ必要があります。
表内の各GeoRasterオブジェクトの空間エクステント・ジオメトリがモデル空間の座標系(または使用する他の座標系)に対して正しくなるようにするには、空間エクステントを設定する必要があります。また、空間エクステント・ジオメトリで空間索引を使用する(3.7項を参照)には、索引付けされたすべてのジオメトリが同じ座標系に基づいている(つまり同じSRID値を持つ)必要があります。
空間エクステントは、次のいずれかの方法で設定できます。SDO_GEOR.importFromプロシージャまたはGeoRasterクライアント側のローダー(1.13項を参照)に対してspatialExtent=TRUE
を記憶域パラメータとして指定するか、またはSQL UPDATE文を使用します。SDO_GEOR.importFromプロシージャまたはローダーを使用する場合、SRIDはNULLまたは0(ゼロ)にはできません。また、GeoRasterの空間エクステントにRツリー索引が存在する場合は、空間エクステントのSRIDは既存の空間索引のSRIDと一致する必要があります。それ以外の場合は、空間エクステントはNULLに設定されます。
さらに、空間エクステント・ジオメトリがない場合は、SDO_GEOR.generateSpatialExtentファンクションを使用して作成し、そのジオメトリを使用してGeoRasterオブジェクトを更新できます。次の例では、(3.1.1項の例3-1で作成した)CITY_IMAGES表のGeoRasterオブジェクトの空間エクステント・ジオメトリを更新し、そのオブジェクトの空間エクステント(モデル座標系を反映しているもの)を生成します。
UPDATE city_images c SET c.image.spatialExtent = sdo_geor.generateSpatialExtent(image) WHERE c.image_id = 100; COMMIT;
GeoRasterオブジェクトの空間エクステント・ジオメトリがわかっている場合、または空間エクステント・ジオメトリをモデル空間以外の座標系に基づくようにする場合は、SDO_GEOMETRYオブジェクトを作成するか、または表から選択します。その後、次の例に示すように、GeoRasterオブジェクトを更新して、その空間エクステント属性が対象のジオメトリに設定されるようにします。
DECLARE geom sdo_geometry; BEGIN -- Set geom to an SDO_GEOMETRY object that covers the spatial extent -- of the desired GeoRaster object. If necessary, perform coordinate -- system transformation before setting geom. -- geom := sdo_geometry(...); UPDATE city_images c SET c.image.spatialExtent = geom WHERE c.image_id = 100; COMMIT; END;
GeoRasterデータは、様々な方法で索引付けできます。GeoRasterオブジェクトに作成できる最も重要な索引は、GeoRasterオブジェクトの空間エクステント(フットプリント)・ジオメトリ(2.1.2項に示すspatialExtent
属性)に対する空間索引です。空間索引の作成については、『Oracle Spatial開発者ガイド』を参照してください。
次のような他の索引を作成することもできます。
Oracle XMLTypeまたはOracle Textドキュメントの索引付け機能を使用した、メタデータ・オブジェクトに対するファンクション索引
雲、河川、湖、海、植物など、GeoRaster表の他のユーザー定義列に対する標準の索引
各ラスター・データ表のrasterId
、pyramidLevel
、bandBlockNumber
、rowBlockNumber
およびcolumnBlockNumber
列に対して単一のBツリー索引も作成する必要があります。
ラスター・ブロック・サイズ、セル深度、インターリーブ・タイプなど、ラスター・イメージ・データを格納する方法の一部を変更できます。このような変更を行うには、SDO_GEOR.changeFormatCopyプロシージャを使用して、storageParam
パラメータで目的の記憶域パラメータ値を指定します。また、GeoRasterオブジェクトをロードおよび処理し、別のGeoRasterオブジェクトを作成する他のファンクションおよびプロシージャを使用して、記憶域パラメータを指定することもできます。
指定可能な記憶域パラメータの詳細は、1.4.1項を参照してください。
GeoRasterオブジェクトをコピーするには、そのオブジェクトを空のGeoRasterオブジェクトにコピーするか、既存の有効なGeoRasterオブジェクトを上書きする必要があります。(空のGeoRasterオブジェクトの詳細は、1.4.3項を参照してください。)ソースGeoRasterオブジェクトと同一のコピーを作成するには、SDO_GEOR.copyプロシージャを使用します。記憶域形式の変更を伴うコピーを作成するには、SDO_GEOR.changeFormatCopyプロシージャ(3.8項を参照)を使用します。
空のGeoRasterオブジェクトを使用してGeoRasterオブジェクトをコピーするには、次の手順を実行します。
空のGeoRasterオブジェクトを初期化して宛先表に挿入し、その空のGeoRasterオブジェクトを戻します。
SDO_GEOR.copyまたはSDO_GEOR.changeFormatCopyプロシージャを使用して、戻された空のGeoRasterオブジェクトに適切なGeoRasterオブジェクトをコピーします。
UPDATE文を使用して、コピーしたGeoRasterオブジェクトが宛先表のGeoRaster列に含まれるように宛先表の目的の行を更新します。
トランザクションのコミットの準備ができたら、COMMIT文を使用します。
空のGeoRasterオブジェクトを使用したコピー方法の例は、第4章のSDO_GEOR.copyプロシージャの例を参照してください。
既存のGeoRasterオブジェクトを上書き(置換)してGeoRasterオブジェクトをコピーするには、次の手順を実行します。
更新する既存のGeoRasterオブジェクトを選択します。
SDO_GEOR.copyまたはSDO_GEOR.changeFormatCopyプロシージャを使用して、選択したGeoRasterオブジェクトを既存の有効なGeoRasterオブジェクトにコピーするか、または空のGeoRasterオブジェクトにコピーします。
UPDATE文を使用して、コピーしたGeoRasterオブジェクトが宛先表のGeoRaster列に含まれるように宛先表の目的の行を更新します。
トランザクションのコミットの準備ができたら、COMMIT文を使用します。
既存のGeoRasterオブジェクトを置換し、その記憶域形式を変更してコピーする方法の例は、第4章のSDO_GEOR.changeFormatCopyプロシージャの例を参照してください。
GeoRasterオブジェクトのメタデータを問い合せ、そのメタデータの多くの属性を更新できます。
多くのファンクション(ほとんどのファンクションは名前がget で始まる)を使用すると、メタデータおよび補助情報(SDO_GEOR.getTotalLayerNumberやSDO_GEOR.hasPseudoColorなど)を問い合せることができます。
いくつかのサブプログラム(ほとんどのサブプログラムは名前がset で始まる)を使用すると、メタデータおよび補助情報(SDO_GEOR.setSRSやSDO_GEOR.setColorMapなど)を更新できます。
get ファンクションの多くには、名前がset で始まる、対応するプロシージャが存在します。これらのプロシージャは、メタデータ属性の値を設定、変更または削除します。ほとんどのset プロシージャでは、そのプロシージャがメタデータ属性の値を変更するように設計されている場合、メタデータ属性の値を削除するには、その属性値にNULLを指定します。たとえば、GeoRasterオブジェクトのレイヤーのビン表を削除するには、SDO_GEOR.setBinTableプロシージャをコールして、tableName
パラメータにNULLを指定します。ただし、ほとんどの場合、関連する他の属性に対してはNULL値は指定できません。たとえば、SDO_GEOR.setBinTableプロシージャへのコールでlayerNumber
パラメータにNULLを指定することはできません。
注意: ほとんどのGeoRasterメタデータは、XMLTypeのメソッドまたはXML固有のSQLファンクション( GeoRasterオブジェクトのrasterType属性は直接更新する必要はありません。かわりに、SDO_GEOR.setRasterTypeプロシージャをコールします。 |
ラスター・イメージの一部または全体を表示するには、GeoRasterオブジェクトに関連付けられた1つのセル(ピクセル)のデータ、特定の範囲のセルのデータまたはイメージ全体のデータを問い合せます。
SDO_GEOR.getCellValueは、GeoRasterオブジェクトの単一のセルの値を戻します。
SDO_GEOR.getRasterSubsetは、(ウィンドウ、レイヤーまたはバンド番号、およびピラミッド・レベルで指定された)GeoRasterオブジェクトの厳密なサブセットのすべてのセルが含まれる、単一のBLOBオブジェクトを作成します。このBLOBオブジェクトにはラスター・セルのみが含まれ、関連するメタデータは含まれません。
SDO_GEOR.getRasterDataは、GeoRasterオブジェクトの、指定されたピラミッド・レベルのすべてのセルが含まれる、単一のBLOBオブジェクトを作成します。このBLOBオブジェクトにはラスター・セルのみが含まれ、関連するメタデータは含まれません。
SDO_GEOR.getRasterBlocksは、指定されたウィンドウの内部に存在するか、またはそのウィンドウの境界に接するすべてのイメージ・データが含まれるオブジェクトを戻します。具体的には、指定されたピラミッド・レベルで、指定されたウィンドウの内部に存在するか、またはそのウィンドウの境界に接するすべてのブロックを識別する、SDO_RASTERSETコレクション型のオブジェクトを戻します。
SDO_GEOR.exportToプロシージャを使用して、ラスター・イメージの全体または一部を、BLOBオブジェクト(バイナリ・イメージ形式)または指定したファイル形式タイプのファイルにエクスポートすることもできます。
指定したウィンドウ内のラスター・セルの値を単一の値に更新または変更するには、SDO_GEOR.changeCellValueプロシージャを使用します。SDO_GEOR.updateRasterプロシージャをコールすると、指定した領域の指定したピラミッド(1つのGeoRasterオブジェクトの重複部分)を、別のGeoRasterオブジェクトの指定したピラミッドと指定したバンドまたはレイヤーで更新できます。SDO_GEOR.changeCellValueおよびSDO_GEOR.updateRasterプロシージャでは、元のラスター・データ(ピラミッド・レベル0)を含むすべてのピラミッド・レベルがサポートされます。
注意: 入力されたGeoRasterオブジェクトのデータに対して追加または上書きするプロシージャを使用する場合は、元のGeoRasterオブジェクトをコピーし、そのコピーしたオブジェクトに対してプロシージャを使用してください。プロシージャの結果を確認してから、必要に応じて元のGeoRasterオブジェクトを廃棄します。 |
ラスター・データ表の名前を変更する場合は、SDO_GEOR_UTL.renameRDTプロシージャを使用します。通常は、GeoRasterオブジェクトの属性を直接更新しないでください(spatialExtent
属性を除く)。
GeoRasterデータには、形式の変更、サブセット化(クロッピング)、スケール変更、ピラミッドの生成、統計およびヒストグラムの生成など、様々な処理操作を実行できます。関連するサブプログラムには、SDO_GEOR.changeFormatCopy、SDO_GEOR.subset、SDO_GEOR.mosaic、SDO_GEOR.generatePyramid、SDO_GEOR.deletePyramid、SDO_GEOR.scaleCopy、SDO_GEOR.mergeLayersおよびSDO_GEOR.generateStatisticsが含まれます。例および説明は、1.14項に記載されているGeoRaster PL/SQLデモ・ファイルも参照してください。
JPEG-B、JPEG-FまたはDEFLATE圧縮を使用してGeoRasterオブジェクトを圧縮することによって、GeoRasterオブジェクトに必要な記憶域を縮小できます。圧縮されたGeoRasterオブジェクトは解凍できます。ただし圧縮されていない(解凍されている)GeoRasterオブジェクト上で実行できるすべてのGeoRaster操作は、圧縮されたGeoRasterオブジェクトで実行できるため、解凍はすべてのGeoRaster操作で必須ではありません。
GeoRasterオブジェクトを圧縮または解凍するには、SDO_GEOR.changeFormatCopyプロシージャ、または他のGeoRasterオブジェクトを作成するためにGeoRasterオブジェクトをロードおよび処理する他のプロシージャ(SDO_GEOR.importFrom、SDO_GEOR.mosaic、SDO_GEOR.scaleCopy、SDO_GEOR.subsetなど)のstorageParam
パラメータで圧縮キーワードを使用します。(GeoRasterオブジェクトを圧縮および解凍するための個別のプロシージャはありません。)
GeoRasterの圧縮および解凍の詳細は、1.10項を参照してください(サード・パーティの圧縮ソリューションのサポート情報は、1.10.4項を参照)。
GeoRasterデータを表示するには、次の方法があります。
SDO_GEOR.exportToプロシージャをコールしてGeoRasterオブジェクトをイメージ・ファイルにエクスポートした後、イメージ・ツールまたはWebブラウザを使用してイメージを表示します。
スタンドアロンのGeoRasterビューア・ツール(1.13項に示すツールの1つ)を使用します。
GeoRasterのビューア・ツールでは、データベース・スキーマ(ユーザー)のGeoRasterオブジェクトの選択、GeoRasterオブジェクトの全体またはサブセットの問合せと表示、ズームイン、ズームアウト、スクロール、および他の基本操作を実行できます。マウス・ポインタの位置の点について、ピラミッド・レベル、セル座標およびモデル座標(オブジェクトが地理参照されている場合)が表示されます。個々のセル値を表示して、RGBフルカラー表示のために、マルチバンド・イメージまたはハイパースペクトル・イメージの複数のレイヤーを選択できます。表示の最前面にブロック境界を重ねて表示できます。ビューアでは、データおよびユーザーの要件に応じて、イントラネットまたはインターネット上でラスター・データをグレースケール、疑似カラーおよび24ビット・トゥルーカラーで表示できます。一部の基本的なGeoRasterメタデータも表示されます。
GeoRasterのビューア・ツールには、GeoRasterオブジェクトの表示機能を強化するためのイメージ処理演算子のセットが含まれます。これらの演算子は、特にGeoRasterオブジェクトのセル深度が8を超える場合や、浮動小数点数である場合に役立ちます。また、このツールでは、GeoRasterオブジェクトにビットマップ・マスクがある場合に、そのビットマップ・マスクを表示および適用できます。
GeoRasterのビューア・ツールには、GeoRasterローダーおよびエクスポータ・ツールをコールするためのメニュー・コマンドも含まれています。これにより、1つのツールを、すべてのGeoRasterツールの機能へのインタフェースとして使用できます。
イメージまたはラスター・データをロードおよびエクスポートする場合、常にサード・パーティのETLツールの使用を検討してください(1.13項の「注意」を参照)。
GeoRasterの機能を使用してGeoRasterオブジェクトをイメージ・ファイルにエクスポートする場合、次の方法があります。
SDO_GEOR.exportToプロシージャをコールします(ファイルまたはBLOBオブジェクトのいずれかにエクスポートできます)。
GeoRasterエクスポータ・ツールまたはビューア・ツールを使用します(1.13項を参照)。
GeoRasterのセル・データまたはメタデータを挿入、更新または削除するデータベース・トランザクションをコミットする前に、GeoRasterオブジェクトを更新する必要があります。セル・データの変更後にGeoRasterオブジェクトを更新しないと、無効なGeoRasterオブジェクト、ダングリング・ラスター・データ、および一貫性のないメタデータの1つ以上が発生する可能性があります。GeoRasterメタデータの変更後にGeoRasterオブジェクトを更新しないと、メタデータの変更は反映されません。
トランザクションをコミットしないでロールバックする場合は、UPDATE文は必要ありません。
例3-4では、UPDATE文はSDO_GEOR.changeFormatCopyプロシージャのコールの後およびCOMMIT文の前に必要です。
例3-4 コミット前のGeoRasterオブジェクトの更新
DECLARE gr1 sdo_georaster; gr2 sdo_georaster; BEGIN SELECT georaster INTO gr2 from georaster_table WHERE georid=11 FOR UPDATE; SELECT georaster INTO gr1 from georaster_table WHERE georid=1; sdo_geor.changeFormatCopy(gr1, 'blocksize=(2048,2048)', gr2); UPDATE georaster_table SET georaster=gr2 WHERE georid=11; COMMIT; END; /
SDO_GEOR.createTemplateおよびSDO_GEOR.getRasterBlockLocatorサブプログラムを使用すると、Oracle XMLType、GeoRaster XMLスキーマおよびOracle BLOBを直接操作せずにGeoRasterメタデータとバイナリ・ラスター・データの読取りおよび書込みを行うことで、GeoRasterアプリケーション(GeoRasterオブジェクトを処理するETLツールやイメージ処理システムなど)を開発できます。
新しいGeoRasterオブジェクトを作成(3.2項を参照)すると、SDO_GEOR.createTemplateファンクションを使用して、ラスター型、次元サイズ、ULTCoordinate、セル深度、インターリーブ・タイプ、ブロック化とブロック・サイズ、ピラミッド・リサンプリング・メソッドと縮小レベル、圧縮方法と圧縮品質などの基本情報をGeoRasterオブジェクトのメタデータに移入できます。このファンクションでは、オプションで、正しい行数および空のBLOBを含むラスター・ブロックで構成される行データをラスター・データ表に移入できます。
SDO_GEOR.createTemplateファンクションにより生成されるXMLメタデータは、GeoRasterメタデータのスキーマに準拠します。そのため、他のGeoRasterサブプログラムを使用してメタデータの問合せや更新を行うことができます(3.10項を参照)。
SDO_GEOR.getRasterBlockLocatorプロシージャを使用すると、ピラミッド・レベルとブロック番号を指定することでラスター・ブロックのロケータを取得できます。ラスター・ブロックのロケータを取得したら、OCIまたはJava JDBC LOBインタフェースを使用してバイナリ・ラスター・データの読取りおよび書込みを行うことができます。(SDO_GEOR.getRasterBlockLocatorプロシージャは、それ自体ではLOBデータの読取りや処理を行いません。)この方法を使用するには、ラスター・データの物理記憶域(1.4項を参照)を理解しておく必要があり、BLOBの読取りおよび書込みの前に必要に応じてデータの圧縮と解凍を行う必要があります。
Oracle Workspace ManagerまたはOracle Label SecurityでGeoRasterを使用するには、SDO_RASTER型のオブジェクト・ビューを定義し、そのオブジェクト・ビューをラスター記憶域として使用する必要があります。このオブジェクト・ビューは、必要なすべての列と主キー定義が含まれる単一のリレーショナル表(ラスター・データの実表)に対して定義する必要があります。次の例は、表およびビューを作成する一般的な形式の文を示しています。
CREATE TABLE <rdt_base_table> ( RASTERID NUMBER, PYRAMIDLEVEL NUMBER, BANDBLOCKNUMBER NUMBER, ROWBLOCKNUMBER NUMBER, COLUMNBLOCKNUMBER NUMBER, BLOCKMBR MDSYS.SDO_GEOMETRY, RASTERBLOCK BLOB, PRIMARY KEY (RASTERID,PYRAMIDLEVEL,BANDBLOCKNUMBER, ROWBLOCKNUMBER,COLUMNBLOCKNUMBER) ) LOB (RASTERBLOCK) STORE AS (NOCACHE NOLOGGING); CREATE VIEW <rdt_view> OF SDO_RASTER WITH OBJECT OID (RASTERID,PYRAMIDLEVEL,BANDBLOCKNUMBER, ROWBLOCKNUMBER,COLUMNBLOCKNUMBER) AS SELECT RASTERID,PYRAMIDLEVEL,BANDBLOCKNUMBER,ROWBLOCKNUMBER,COLUMNBLOCKNUMBER, BLOCKMBR,RASTRBLOCK FROM <rdt_base_table>;
オブジェクト・ビューの名前を使用して、GeoRasterオブジェクトを作成します。次に一般的な形式の例を示します。
INSERT INTO georaster_table (georid, georaster) VALUES (0, SDO_GEOR.init(<rdt_view>));
オブジェクト・ビューの名前は、GeoRasterシステム・データ・ビュー(2.4項を参照)のRDT_TABLE_NAME列で使用されます。オブジェクト・ビューに対する権限として、ラスター・オブジェクト表の場合と同じ権限を付与します。次に一般的な形式の例を示します。
GRANT SELECT,INSERT,UPDATE,DELETE on <rdt_view> TO SCOTT;
Workspace Managerでは、異なる作業領域にラスター・データの異なるバージョンを保存して変更を加えることで、ラスター・データに対する変更を容易に管理できます。Workspace ManagerでGeoRasterを使用するには、ラスター記憶域用のラスター・データ・ビューを使用し、基礎となるラスター・データの実表をバージョン対応にする必要があります。次に一般的な形式の例を示します。
EXECUTE DBMS_WM.EnableVersioning (<rdt_base_table>, 'VIEW_WO_OVERWRITE');
注意: バージョン対応にできるのは、ラスター・データ表のみです。GeoRasterオブジェクトが格納されているGeoRaster表は、バージョン対応にしないでください。また、作業領域での作業中にGeoRaster表を変更する必要のある操作は実行しないでください。 |
ラスター・データの実表(RDT実表)をバージョン対応にした後に、DBMS_WMパッケージのサブプログラムを使用してラスター・データの変更を管理できます。ラスター・ブロックを直接変更する必要がある場合は、次の例に示すとおり、操作の前にDBMS_WM.copyForUpdateプロシージャをコールします。
declare geor sdo_georaster; cond varchar2(1000); lb blob; r1 raw(1024); amt number; begin r1 := utl_raw.copies(utl_raw.cast_to_raw('0'),1024); select georaster into geor from georaster_table where georid=1; cond := 'rasterId=' || geor.rasterId || ' AND pyramidLevel=0 AND ' || ' bandBlockNumber=0 AND rowBlockNumber=0 AND columnBlockNumber=0'; dbms_wm.copyForUpdate(geor.rasterDataTable, cond); sdo_geor.getRasterBlockLocator(geor, 0, 0, 0, 0, lb, null, 'TRUE'); amt := 1024; dbms_lob.write(lb, amt, 1, r1); end; /
ただし、GeoRasterサブプログラムを使用してラスター・データを変更する場合は、事前にDBMS_WM.copyForUpdateプロシージャをコールする必要はありません。
Workspace Managerの詳細は、『Oracle Database Workspace Manager開発者ガイド』を参照してください。
Oracle Label Securityでは、ユーザーのセキュリティ・クリアランスのレベルに基づいて、機密データに対する行レベルのアクセス制御を実現できます。Label SecurityでGeoRasterを使用するには、次の基本手順を実行します。
GeoRaster表、RDT実表、および各RDTのSDO_RASTER型のオブジェクト・ビューを作成します。
Oracle Label Securityポリシーを作成してラベル・コンポーネントを定義します。
GeoRaster表とRDT実表に対してラベル付けファンクションを作成します。
GeoRaster表の行のラベルは、アプリケーションの要求に従って生成される必要があります。GeoRasterオブジェクトを格納する行と、関連するRDT実表のGeoRasterオブジェクトのラスター行には、両方とも同じラベルを使用してください。異なるラベルを使用すると、GeoRasterオブジェクトが無効になるか、一貫性のないステータスになる可能性があります。
次の例では、RDT実表に対してラベル付けファンクションを作成します。
CREATE OR REPLACE FUNCTION gen_rdt_label(rdt_view_name varchar2, rid number) RETURN LBACSYS.LBAC_LABEL AS tabname varchar2(80); schema varchar2(32); grcol varchar2(1024); colname varchar2(30); label NUMBER; BEGIN EXECUTE IMMEDIATE 'SELECT v.owner, v.table_name, v.column_name grcol, p.column_name ' || ' FROM all_sdo_geor_sysdata v, all_sa_policies p, all_sa_table_policies t ' || ' WHERE v.rdt_table_name=:1 AND v.raster_id=:2 AND ' || ' v.owner=t.schema_name AND v.table_name=t.table_name AND ' || ' p.policy_name=t.policy_name ' INTO schema, tabname, grcol, colname USING upper(rdt_view_name), rid; EXECUTE IMMEDIATE 'SELECT t.' || colname || ' FROM ' || schema || '.' || tabname || ' t ' || ' WHERE t.' || grcol || '.rasterdatatable=:1 AND ' || ' t.' || grcol || '.rasterid=:2' INTO label USING upper(rdt), rid; RETURN LBACSYS.LBAC_LABEL.NEW_LBAC_LABEL(label); END; /
Label SecurityポリシーをGeoRaster表とそれに関連するRDT実表に適用します。
次の一般的な形式の例では、前述の手順におけるラベル付けファンクションの例を使用して、Label Securityポリシーを1つのRDT実表に適用します。
BEGIN SA_POLICY_ADMIN.REMOVE_TABLE_POLICY(<policy_name>,<schema_name>,<rdt_base_table>); SA_POLICY_ADMIN.APPLY_TABLE_POLICY( POLICY_NAME => <policy_name>, SCHEMA_NAME => <schema_name>, TABLE_NAME => <rdt_base_table>, TABLE_OPTIONS => 'READ_CONTROL,WRITE_CONTROL,CHECK_CONTROL', LABEL_FUNCTION => '<schema_name>.gen_rdt_label(<rdt_view>,:new.rasterid)', PREDICATE => NULL); END; /
ユーザーを作成して認可を行い、Label Securityに関連する他の管理タスクを完了します。
ポリシーを表に適用する前または後に、GeoRasterデータをロードできます。
ALL_SDO_GEOR_SYSDATAビュー(2.4項を参照)には、現行ユーザーがアクセス可能なすべてのGeoRasterオブジェクトに関するシステム・データが含まれます。この場合のアクセス可能性は、任意アクセス制御(DAC)のコンテキストで定義されたユーザーの権限によって決定されます。
GeoRaster表の行のラベルが更新されたら、各ラベルが同期するように、RDT実表の関連するデータ・ラベルも更新される必要があります。
Label Securityの詳細は、『Oracle Label Security管理者ガイド』を参照してください。
操作を削除またはロールバックしても、ラスター・データ表に割り当てられた未使用の領域は、基礎となる表領域にすぐに戻されないことがあります。これにより、表領域が無駄に使用されることがあり、ラスター・データのサイズが大きい場合は重大な問題となる可能性があります。自動セグメント領域管理の表領域でBasicFile LOBを使用してラスター・データ表を作成した場合、ラスター・データ表を変更することでrasterBlock
LOBセグメントまたはラスター・データ表を明示的に縮小できます。次の例3-5および例3-6を参照してください。
例3-5 BasicFile rasterBlock LOBセグメントの縮小
ALTER TABLE city_images_rdt MODIFY LOB (rasterBlock) (SHRINK SPACE);
例3-6 ラスター・データ表の縮小
ALTER TABLE city_images_rdt ENABLE ROW MOVEMENT; ALTER TABLE city_images_rdt SHRINK SPACE CASCADE;
SecureFilesを使用している場合、または手動セグメント領域管理の表領域で割り当てられたBasicFilesを使用している場合、前述の例のようにALTER TABLE文を使用して未使用の領域を再利用することはできません。かわりに、一時的に使用する作業用のラスター・データ表を作成し、断続的に発生する結果をそのRDTに配置して、不要になったらその作業用RDTを削除する必要があります。
GeoRasterには、無効なGeoRasterオブジェクトおよびシステム・データの作成を防止する内部データベース・メカニズムがありますが、特に以前のリリースからのアップグレード後や、GeoRasterシステム・データに対する操作で複数のユーザー・エラーが発生した後には、データベース内にそのような無効なGeoRasterオブジェクトやシステム・データが発生することがあります。無効なオブジェクトおよびシステム・データの例は、次のとおりです。
GeoRasterシステム・データ・ビューのエントリ(2.4項のxxx_SDO_GEOR_SYSDATAを参照)が、存在しないGeoRaster表または列を示します。
2つ以上のGeoRasterオブジェクトに、RDT名とラスターID値の同じ組合せが含まれています。
一部のGeoRasterオブジェクト、表、列またはRDTが登録されていません。
RDT名が一意ではありません。
GeoRasterオブジェクトが空または空白ではないが、関連するRDTが存在しません。
データベースのアップグレード後に、SDO_GEOR_ADMIN.isUpgradeNeededファンクションをコールして、現在のリリースで無効なGeoRasterオブジェクトおよび無効なシステム・データを確認する必要があります。なんらかのエラーや無効なデータが検出された場合は、SDO_GEOR_ADMIN.upgradeGeoRasterファンクションをコールして問題を自動的に修正します。ユーザーMDSYSとして接続している場合、SDO_GEOR_ADMIN.upgradeGeoRasterファンクションをコールすると、データベース内のすべてのGeoRasterオブジェクトがアップグレードされます。それ以外の場合は、現行ユーザーのスキーマのGeoRasterオブジェクトのみがアップグレードされます。(詳細は、第5章でSDO_GEOR_ADMIN.upgradeGeoRasterに関するリファレンスおよび使用情報を参照してください。)
発生する可能性のあるユーザー・エラーに対する定期的なメンテナンスでは、無効なGeoRasterオブジェクトおよびシステム・データ・エントリを検出して修正するために次のファンクションおよびプロシージャが役立ちます。
エラーを検出するには、SDO_GEOR_ADMIN.checkSysdataEntriesおよびSDO_GEOR_ADMIN.listUnregisteredRDTをコールします。
ダングリング・ラスター・データを検出するには、SDO_GEOR_ADMIN.listDanglingRasterDataをコールします。
すべての無効なシステム・データ・エントリを修正するには、SDO_GEOR_ADMIN.maintainSysdataEntriesをコールします。
すべてのGeoRaster列に適切なDMLトリガーを作成するには、SDO_GEOR_ADMIN.registerGeoRasterColumnsをコールします。
すべての既存のGeoRasterオブジェクトをシステム・データ表に登録するには、SDO_GEOR_ADMIN.registerGeoRasterObjectsをコールします。
詳細は、第5章でこれらのプロシージャとファンクションに関するリファレンスおよび使用情報を参照してください。
データ・ポンプ・エクスポート・ユーティリティおよびインポート・ユーティリティまたは従来のエクスポート・ユーティリティおよびインポート・ユーティリティのいずれかを使用して、データベース間でGeoRasterデータを転送できます。GeoRaster表と関連するラスター・データ表の両方から行をエクスポートし、インポートする必要があります。データの転送後、インポートしたGeoRasterオブジェクトのGeoRasterシステム・データをターゲット・スキーマのUSER_SDO_GEOR_SYSDATAビュー(2.4項を参照)に挿入する必要はありません。ただし、これらのオブジェクトになんらかの操作を実行する前に、SDO_GEOR.validateGeoRasterファンクションを使用して、インポートしたGeoRasterオブジェクトが有効かどうかを確認する必要があります。
データ・ポンプ・エクスポート・ユーティリティとインポート・ユーティリティ、および従来のエクスポート・ユーティリティとインポート・ユーティリティの詳細は、『Oracle Databaseユーティリティ』を参照してください。
データベース間でGeoRasterデータを転送するには、次の一般的な手順に従います。
GeoRasterデータをターゲット・データベースに正常にインポートするには、ターゲット・スキーマのGeoRasterシステム・データが競合していない必要があります。次の条件では、競合が発生する可能性があります。
ターゲット・データベース内の別のスキーマに、同じ名前を持つラスター・データ表がすでに定義されている。
たとえば、ラスター・データ表(RDT)をターゲット・スキーマに作成してGeoRasterオブジェクトをインポートする場合、ターゲット・スキーマの既存のRDTにすでに同じ名前が割り当てられている可能性があります。この場合、SDO_GEOR_ADMIN.listRDTまたはSDO_GEOR_ADMIN.isRDTNameUniqueファンクションを使用して、ソース・データベースとターゲット・データベースの両方を調査し、RDT名の競合が存在するかどうかを確認する必要があります。競合が存在する場合は、SDO_GEOR_UTL.renameRDTプロシージャを使用してターゲット・データベースのRDT名を異なる名前に変更し、GeoRasterオブジェクトをインポートする前に競合を解決します。
ターゲット・スキーマのUSER_SDO_GEOR_SYSDATAビューに挿入するラスター・データ表の名前とラスターIDの組合せが一意ではない。
たとえば、ターゲット・データベースの既存のRDTにデータを追加することでRDTデータをインポートする場合に、この競合が発生する可能性があります。この場合、データをターゲット・データベースにインポートする前に、SDO_GEOR_ADMIN.listGeoRasterObjectsファンクションを使用してターゲット・スキーマに定義されているすべてのGeoRasterオブジェクトをリスト表示し、RDT名とラスターIDの組合せが既存のGeoRasterデータとインポートするGeoRasterデータの間で競合していないことを確認します。競合が存在する場合は、ターゲット・スキーマのGeoRasterオブジェクトのラスターIDを変更し、競合を解決します。この処理を行わないと、ダンプ・ファイル内に競合の存在するGeoRasterオブジェクトは、インポート・プロセスの実行時に拒否されます。
ダンプ・ファイルでラスター・データ表(RDT)の名前とラスターID(RID)の情報を確認する必要がある場合、いくつかの方法があります。ソース・データベースの情報を確認する方法、ダンプ・ファイルのプロバイダの情報をリクエストする方法、個別のテスト・データベースにダンプ・ファイルをロードしてそこでその情報を確認する方法、または(テスト用に個別のデータベースを使用できない場合)現行データベースのテスト・スキーマにダンプ・ファイルをロードしてその情報を確認する方法です。現行データベースのテスト・スキーマにダンプ・ファイルをロードして情報を確認するには、次の手順を実行します。
ターゲット・データベースにテスト・スキーマを作成します。
CONTENT = METADATA_ONLY
パラメータを指定してデータ・ポンプ・インポート・ユーティリティを使用し、ダンプ・ファイルからこのテスト・スキーマにすべてのGeoRaster表をロードします。
MDSYSユーザーとしてデータベースに接続し、前述の手順でロードしたGeoRaster表のすべてのDMLトリガーを無効化します。
CONTENT = DATA_ONLY
パラメータを指定してデータ・ポンプ・インポート・ユーティリティを使用し、GeoRaster表にデータをロードします。
テスト・スキーマのGeoRaster表からRDTとRID(ラスター・データ表の名前とラスターID)の組合せを直接取得します。
競合を解決したら、GeoRasterのメタデータおよびデータの整合性を確認する必要があります(3.20項を参照)。また、コミットなどの操作を実行する前に、修正したGeoRasterオブジェクトを検証する必要があります。
インポート操作時に競合を解決する方法の一般情報は、『Oracle Databaseユーティリティ』のデータ・ポンプ・インポートに関する章でTABLE_EXISTS_ACTION
パラメータの説明を参照してください。
あるデータベースのGeoRasterデータをエクスポートして別のデータベースにインポートすると、ターゲット・データベースにGeoRaster表およびオブジェクトがインポートされた後に、必要なDMLトリガーとシステム・データ・エントリがGeoRasterのデータベース管理システムによって自動的に生成されます。
GeoRasterデータをエクスポートする方法は、他のタイプのデータをエクスポートする場合と同様です。次に例を示します。
expdp scott schemas=scott directory=dump_dir dumpfile=exp.dmp
Enter password: password
GeoRasterデータをインポートする方法は、他のタイプのデータをインポートする場合と同様ですが、GeoRasterの内部DMLトリガーは除外します。次に例を示します。
インポートするGeoRasterデータとターゲット・データベース内の既存のGeoRasterデータ間に競合が存在しないことを確認します(3.21.1項を参照)。
競合が解決されていない場合、複数の例外が発生します。競合のないGeoRasterデータのみがターゲット・データベースにインポートされます。
他のタイプのデータをインポートする場合と同様にGeoRasterデータをインポートしますが、GeoRasterの内部DMLトリガー(名前がGRDMLTR_
で始まるトリガー)は除外します。次に例を示します。
impdp scott schemas=scott directory=dump_dir dumpfile=exp.dmp parfile=exclude.par
Enter password: password
exclude.par
ファイルの内容は次のとおりです。
exclude=trigger:"like 'GRDMLTR_%'"