3.16 データベース間でのGeoRasterデータの転送
GeoRasterデータは、同じデータベース内のスキーマ間、またはデータベース間で転送できます。GeoRasterデータを転送する方法はいくつかあります。
- GDALまたはGeoRaster ETLツールを使用して、同じデータベース内のスキーマ間、またはデータベース間でGeoRasterデータを転送します。この方法では、ソースGeoRaster表からGeoTIFFなどの交換ファイル形式にラスターをエクスポートし、その後、ターゲット・スキーマまたはデータベースにそれらをインポートします。
- SDO_GEOR.copyまたはSDO_GEOR.changeFormatCopyプロシージャを使用して、同じデータベース内のスキーマ間でGeoRasterデータを転送します。アクセス権が付与されている場合、GeoRasterオブジェクトはスキーマ間で直接コピーされます。
- データ・ポンプ・エクスポート・ユーティリティおよびインポート・ユーティリティを使用して、同じデータベース内のスキーマ間、またはデータベース間でGeoRasterデータを転送します。詳細は、データ・ポンプ・ユーティリティを使用したGeoRasterデータの転送を参照してください。
- トランスポータブル表領域を使用して、データベース間でGeoRasterデータを転送します。詳細は、トランスポータブル表領域を使用したGeoRasterデータの転送を参照してください。
- Oracleデータベース・リンクを使用して、データベース間でGeoRasterデータを転送します。詳細は、GeoRasterデータでのデータベース・リンクの使用を参照してください。
GeoRasterデータベースでは、各ラスター・データ表(RDT)の名前は一意である必要があり、GeoRasterオブジェクトの(rasterDataTable, rasterID)
のペアはデータベース内で一意である必要があります(「ラスター・データ表」を参照)。そのため、データ・ポンプ、トランスポータブル表領域またはデータベース・リンクの方法を使用してデータベース間でGeoRasterデータを転送する場合、ターゲット・データベース内のrasterDataTable
名またはrasterID
の競合が発生する可能性があります。RDT名を変更して一意にすると属性のペア(rasterDataTable, rasterID)
が自動的に一意になるため、これらの各データ転送方法に関する以降のサブセクション内の例で示すように、RDTの名前を変更することで競合を必ず解決することをお薦めします。また、同じ名前のGeoRaster表がターゲット・データベースにすでに存在する場合は、ターゲット・データベース内の転送されたGeoRasterオブジェクトを既存のGeoRaster表に追加するのではなく、それらのオブジェクト用に新しいGeoRaster表を作成することをお薦めします。
親トピック: GeoRasterのデータベース作成および管理
3.16.1 データ・ポンプ・ユーティリティを使用したGeoRasterデータの転送
データ・ポンプ・ユーティリティを使用すると、同じデータベース内のスキーマ間、またはデータベース間でGeoRasterデータを転送できます。次に、データベース間でGeoRasterデータを転送する手順を示します。ただし、それらはスキーマ間のGeoRasterデータ転送にも適用できます。データ・ポンプ・エクスポート・ユーティリティおよびインポート・ユーティリティの詳細は、『Oracle Databaseユーティリティ』を参照してください。
データ・ポンプを使用してGeoRasterデータをエクスポートする方法は、他のタイプのデータをエクスポートする場合と同様ですが、GeoRasterの内部DMLトリガー(名前がGRDMLTR_
で始まるもの)および内部DDLトリガー(名前がSDO_GEOR_ADDL_TRIGGER
およびSDO_GEOR_BDDL_TRIGGER
)は除外します。たとえば:
expdp herman DIRECTORY=dump_dir DUMPFILE=data.dmp
TABLES=herman.georaster_table,herman.rdt_1,herman.rdt_2
PARFILE=exclude.par
Enter password: password
前述のコードでは、exclude.par
ファイルの内容は次のとおりです。
exclude=trigger:"like 'GRDMLTR_%'"
exclude=trigger:"= 'SDO_GEOR_ADDL_TRIGGER'"
exclude=trigger:"= 'SDO_GEOR_BDDL_TRIGGER'"
次に、データ・ポンプを使用してGeoRasterデータ(つまり、GeoRaster表および関連するラスター・データ表(RDT))をターゲット・データベースにインポートするための一般的な手順を示します。
親トピック: データベース間でのGeoRasterデータの転送
3.16.2 トランスポータブル表領域を使用したGeoRasterデータの転送
Oracle Databaseトランスポータブル表領域機能を使用して、データベース間でGeoRasterデータを転送できます。空間データでの表領域転送機能の使用の詳細は、Oracle Database管理者ガイド のデータベース間での表領域の転送を参照してください。
トランスポートする表領域に、GeoRaster表またはラスター・データ表(RDT)に対する空間索引が含まれる場合、状況によってはいくつかの準備ステップを実行する必要があります。空間データでのトランスポータブル表領域機能の使用の詳細は、Oracle Spatial開発者ガイドのSDO_UTIL.INITIALIZE_INDEXES_FOR_TTSプロシージャの使用上のノートを参照してください。
次の項で説明する手順で、トランスポータブル表領域を使用してデータベース間でGeoRasterデータを転送できます。
3.16.3 GeoRasterデータでのデータベース・リンクの使用
Oracle Databaseリリース12.2以降、データベース・リンクを使用して、あるデータベースから別のデータベースにGeoRasterデータを転送できます。
データベース・リンクを介してSQL問合せを実行し、ラスター・データ表(RDT)内のリモートGeoRasterオブジェクトの属性およびバイナリ・データにアクセスできます。GeoRaster PL/SQLパッケージで提供されるGeoRasterデータ操作は、データベース・リンクを介してリモートGeoRasterオブジェクトで使用することはできません。
ノート:
異なるリリースのデータベース間の相互運用性サポートは、Oracle相互運用性サポートで確認できます。
データベース・リンクを介してGeoRasterデータを転送するには:
- ターゲット・データベース・スキーマがGeoRasterに対応していることを確認します。スキーマ・レベルでのGeoRasterの有効化で説明されているステップに従います。
- 次のSQL文を実行して、ターゲット・データベースにデータベース・リンクを作成します。
CREATE PUBLIC DATABASE LINK <dblink name> CONNECT TO <username> IDENTIFIED BY <password> USING '<tnsname>';
前述のコードで:
<dblink name>:
データベース・リンクの名前<username>:
GeoRaster表が存在するソース・データベース・スキーマに接続するためのユーザー名<password>:
ソース・データベース・ユーザーのパスワード<tnsname>:
ターゲット・データベースのtnsname.ora
に定義されているソース・データベース接続名
- ソース・データベースから転送するGeoRaster表およびRDTを特定します。ターゲット・データベースから次の問合せを実行して、GeoRaster表内のGeoRasterオブジェクトに関連付けられているRDTを取得します。
SELECT UNIQUE t.<column_name>.rasterDataTable FROM <source_georaster_table>@<dblink_name> t;
前述のコードでは、
<column_name>
は、ソース・データベース内の<source_georaster_table>
のGeoRaster列名です。 - ソース・データベースからターゲット・データベースにRDTデータを転送します。
前述のコードのCREATE TABLE <target_rdt_table> AS (SELECT * FROM <source_rdt_table>@<dblink_name>);
<source_rdt_table>
は、ステップ3で特定したRDTです(この例では、<source_rdt_table>
には転送するラスター・データのみが含まれていると想定しています)。<source_rdt_table>
がターゲット・データベース内で一意である場合(SDO_GEOR_ADMIN.isRDTNameUnique(<source_rdt_table>)
がtrue
を返す)、<target_rdt_table>
は<source_rdt_table>
と同じである必要があります。それ以外の場合は、<target_rdt_table>
の一意の名前を選択します。 - ソース・データベースからターゲット・データベースにGeoRaster表内のGeoRasterオブジェクトを転送します。次のように、新しいGeoRaster表をターゲット・データベース内に作成できます。
CREATE TABLE <target_georaster_table> AS (SELECT * FROM <source_georaster_table>@<dblink_name>);
ステップ4でターゲット・データベース内で作成した新しいRDTの名前<target_rdt_table>
がソース・データベース内のRDT名<source_rdt_table>
と異なる場合は、<target_georaster_table>
内のGeoRasterオブジェクトのrasterDataTable
属性を次のように更新する必要があります。- スキーマ・ユーザーとして接続し、GeoRaster表のGeoRaster DMLトリガー名を確認します。
SELECT trigger_name FROM user_triggers WHERE table_name = ‘<target_georaster_table>’ AND trigger_name LIKE 'GRDMLTR_%';
前述のコードでは、
<target_georaster_table>
はターゲット・データベース内のGeoRaster表名です - DBAとして接続し、GeoRaster DMLトリガーを無効にします。
ALTER TRIGGER <owner>.<trigger_name> DISABLE;
- スキーマ・ユーザーとして接続し、GeoRasterオブジェクトの
rasterDataTable
属性を更新します。UPDATE <target_georaster_table> t SET t.<column_name>.rasterDataTable = ‘<target_rdt_table>’ WHERE t.<column_name>.rasterDataTable=’<source_rdt_table>’;
前述のコードでは、
<source_rdt_table>
および<target_rdt_table>
は、ステップ4で使用した表名です。<column_name>
は、<target_georaster_table>
内のGeoRaster列名です。 - DBAとして接続し、GeoRaster DMLトリガーを有効にします。
ALTER TRIGGER <owner>.<trigger_name> ENABLE;
- スキーマ・ユーザーとして接続し、GeoRaster表のGeoRaster DMLトリガー名を確認します。
- スキーマ・ユーザーとして接続し、ターゲット・データベース内の転送されたGeoRasterオブジェクトを登録します。
EXECUTE SDO_GEOR_ADMIN.registerGeorasterObjects;
データ・ポンプ・インポート・ユーティリティでデータベース・リンクを使用して、ソース・データベースからターゲット・データベースにGeoRasterデータを直接転送することもできます。データ・ポンプ・インポート・ユーティリティを使用してGeoRasterデータを転送する方法の詳細は、データ・ポンプ・ユーティリティを使用したGeoRasterデータの転送を参照してください。
親トピック: データベース間でのGeoRasterデータの転送