Oracle Databases以外からAutonomous Databaseへのアプリケーションの移行
Oracle以外のデータベースからOracle SQLにSQL文を移行し、Autonomous Databaseで文を実行できます。
- アプリケーションの移行の概要
アプリケーションの移行には、ある環境から別の環境へのアプリケーションの移動が含まれます。移行プロセスには、Oracle以外のデータベースからOracle SQLへのSQL文の移行など、様々なタスクが含まれます。 - PostgreSQL文のOracle SQLへの変換
PostgreSQLで記述されたSQL文をOracle SQLに変換し、Autonomous Databaseで変換された文を実行できます。 - Oracle SQLへのPostgreSQLファイルの移行
PostgreSQL文を含むファイルをOracle SQL文を含むファイルに移行できます。 - Autonomous DatabaseでのPostgreSQL文の実行
Autonomous DatabaseでPostgreSQL文を対話形式で変換および実行できます。 - Oracle以外のSQLからOracle SQLへの移行および変換の制限事項
この項では、Oracle以外のデータベースからOracle SQLへのSQL文の移行に関する制限事項について説明します。
親トピック: Autonomous Databaseへの移行
アプリケーション移行の概要
アプリケーションの移行には、ある環境から別の環境へのアプリケーションの移動が含まれます。移行プロセスには、Oracle以外のデータベースからOracle SQLへのSQL文の移行など、様々なタスクが含まれます。
DBMS_CLOUD_MIGRATION
パッケージを使用すると、Oracle以外のデータベース用に書き込まれたSQL文をOracle SQLに変換できます。これにより、異なるSQLフレーバを使用するOracle以外のデータベース用にアプリケーションを開発したときに、アプリケーションをAutonomous Databaseに簡単に移行できます。
DBMS_CLOUD_MIGRATION
パッケージは、次のOracle以外のデータベースからのSQLコードの移行をサポートしています。
-
PostgreSQL
DBMS_CLOUD_MIGRATION
パッケージには、次のことを可能にするルーチンが用意されています。
-
個々のSQL文をOracle以外のデータベースからOracle SQLに変換します。詳細は、「PostgreSQL文のOracle SQLへの変換」を参照してください。
-
SQLコードを含むファイルをOracle以外のデータベースからOracle SQLに変換し、変換されたOracle SQLを含む新しいファイルを生成します。詳細は、Oracle SQLへのPostgreSQLファイルの移行を参照してください。
-
セッション内で対話的に作業し、Oracle以外のシステムからSQL文を入力します。この場合、Oracle以外の文は変換され、セッション内で対話的に実行されます。詳細は、Autonomous DatabaseでのPostgreSQL文の実行を参照してください。
DBMS_CLOUD_MIGRATION
でサブプログラムを実行するには、ADMIN
ユーザーとしてログインするか、DBMS_CLOUD_MIGRATION
に対するEXECUTE
権限を持っている必要があります。
PostgreSQL文のOracle SQLへの変換
PostgreSQLで記述されたSQL文をOracle SQLに変換し、Autonomous Databaseで変換された文を実行できます。
DBMS_CLOUD_MIGRATION.MIGRATE_SQL
を使用して、Oracle以外のSQL文をOracle SQLに変換します。DBMS_CLOUD_MIGRATION.MIGRATE_SQL
にはプロシージャおよびファンクションのバリアントがあります。
MIGRATE_SQLプロシージャを使用したPostgreSQL文のOracle SQLへの移行
次の例では、PostgreSQLで記述されたSQL文を入力として受け入れ、文をOracle SQLに変換し、変換されたSQL文をoutput_sql_result
に割り当てて、結果を出力します。
SET SERVEROUTPUT ON
declare output_sql_result CLOB;
BEGIN
DBMS_CLOUD_MIGRATION.MIGRATE_SQL
(
original_sql => 'SELECT e.employee_id, e.last_name, e.salary FROM employees AS e;',
output_sql => output_sql_result,
source_db => 'POSTGRES'),
DBMS_OUTPUT.PUT_LINE (output_sql_result);
END;
/
Output
–-------------------------------------------------------------
SELECT e.employee_id, e.last_name, e.salary FROM employees e;
original_sql
パラメータは、Oracle以外のSQL文を指定します。
output_sql
パラメータには、変換されたSQLが格納されます。
source_db
パラメータは、Oracle以外のSQLデータベース名を指定します。
詳細は、MIGRATE_SQLプロシージャおよびファンクションを参照してください。
MIGRATE_SQL関数を使用して、PostgreSQL文をOracle SQLに移行します
次の例は、SELECT
文内のDBMS_CLOUD_MIGRATION.MIGRATE_SQL
関数を示しています。ファンクション入力はPosgresSQL文で、ファンクションはOracle SQLで変換された文を返します。
SELECT DBMS_CLOUD_MIGRATION.MIGRATE_SQL
(
'CREATE TABLE IF NOT EXISTS cars (brand VARCHAR(255), model VARCHAR(255), year INT)',
'POSTGRES') AS output FROM DUAL;
OUTPUT
------------------------------------------------------------------------------
create table cars (brand VARCHAR2(255), model VARCHAR2(255), year NUMBER(10);
詳細は、MIGRATE_SQLプロシージャおよびファンクションを参照してください。
DBMS_CLOUD_MIGRATION.MIGRATE_SQL
の実行に関するノート:
-
Oracle SQLで入力SQL文がサポートされていない場合、変換中にエラーが発生することがあります。詳細は、Oracle以外のSQLからOracle SQLへの移行および翻訳の制限事項を参照してください。
-
DBMS_CLOUD_MIGRATION.MIGRATE_SQL
サブプログラムは、入力として1つのSQL文のみを受け入れます。そのため、コールごとに変換できるSQL文は1つのみです。
Oracle SQLへのPostgreSQLファイルの移行
PostgreSQL文を含むファイルをOracle SQL文を含むファイルに移行できます。
DBMS_CLOUD_MIGRATION.MIGRATE_FILE
プロシージャは、オブジェクト・ストレージのPostgreSQLファイル内のSQL文を変換し、Oracle SQLを含む新しいファイルを生成します。
前提条件として、.sql
拡張子を持つ1つ以上のPostgreSQLファイルをオブジェクト・ストレージの場所にアップロードします。次の例では、オブジェクト・ストレージにアップロードされるファイルpostgrestest.sql
を使用します。詳細は、「オブジェクト・ストレージへのデータの配置」を参照してください。
PostgreSQLファイルをOracle SQLに移行するには:
次の問合せを実行して、postgrestest_oracle.sql
ファイルの内容を表示します。
SELECT UTL_RAW.CAST_TO_VARCHAR2 (DBMS_CLOUD.GET_OBJECT(
credential_name => 'OCI$RESOURCE_PRINCIPAL',
object_uri => 'https://objectstorage.region.oraclecloud.com/n/namespace/b/bucket/o/files'))
FROM dual;
UTL_RAW.CAST_TO_VARCHAR2(DBMS_CLOUD.GET_OBJECT(CREDENTIAL_NAME=>'CRED1',OBJECT_U
--------------------------------------------------------------------------------
SELECT f.film_id, f.title, inventory_id
FROM film f LEFT JOIN inventory
ON inventory.film_id = f.film_id;
または、リソース・プリンシパルOCI$RESOURCE_PRINCIPAL
のかわりに資格証明を作成する場合は、credential_name
パラメータに資格証明名を指定します。
詳細は、GET_OBJECTプロシージャおよびファンクションを参照してください。
Autonomous DatabaseでのPostgreSQL文の実行
Autonomous DatabaseでPostgreSQL文を対話形式で変換および実行できます。
ENABLE_TRANSLATION
プロシージャを使用して、指定したOracle以外のデータベース言語(PostgreSQLなど)で記述されたSQL文のリアルタイム変換を有効にします。セッションで変換を有効にすると、Oracle以外のSQL文が自動的に変換されてOracle SQL文として実行され、結果を確認できます。
ENABLE_TRANSLATION
を実行して変換を有効にした後、セッションで対話的に次の操作を実行できます。
-
表を作成します。たとえば、表
MOVIE
およびINVENTORY
を作成します。 -
データを表に挿入
-
問合せ表
-
表に対してJOIN操作を実行します。たとえば、表に対して左外部結合を実行できます。
PostgreSQLを使用して変換を有効にし、コマンドを実行するには:
V$MAPPED_SQL
ビューを問い合せると、メモリーに変換されてOracle SQL文にマップされるPostgreSQL文をリストできます。
たとえば:
SELECT v.*
FROM v$mapped_sql v, dba_objects o
WHERE v.sql_translation_profile_id = o.object_id
AND o.object_name = 'POSTGRES'
AND o.object_type = 'TRANSLATION PROFILE';
詳細は、V$MAPPED_SQLを参照してください。
Oracle以外のSQLからOracle SQLへの移行および変換の制限
この項では、Oracle以外のデータベースからOracle SQLへのSQL文の移行に関する制限事項の概要を示します。
PostgreSQL文の移行および翻訳の制限
CREATE DOMAIN
CREATE EXTENSION
CREATE DATABASE
CREATE TYPE
SET
ALTER TABLE
: Autonomous Databaseに移行する場合、ALTER TABLE ADD CONSTRAINT
のみがサポートされます。DELETE
:DELETE
文のRETURNING *
キーワードは、Autonomous Databaseではサポートされていません。RETURNING *
句は、RETURNING INTO
句に置き換える必要があります。たとえば、DELETE FROM tasks WHERE status = 'DONE' RETURNING *;
です。詳細は、RETURNING INTO句を参照してください。
CREATE FUNCTION
:CREATE FUNCTION
では、次はサポートされていません。SETOF
戻り型。SETOF
をCURSORS
またはCOLLECTIONS
戻り型に置き換える必要があります。IMMUTABLE
句。FUNCTION_NAME (DATATYPE, DATATYPE)
形式のパラメータ宣言。
ALTER FUNCTION
:ALTER FUNCTION
関数の引数(RENAME TO
、OWNER TO
、SET SCHEMA
など)はサポートされていません。