SQL ServerデータベースからAutonomous Databaseへのアプリケーションの移行
SQL文をSQL ServerからOracle SQLに移行し、Autonomous Databaseで文を実行できます。
- SQL Server文のOracle SQLへの変換
SQL Serverで記述されたSQL文をOracle SQLに変換し、Autonomous Databaseで変換された文を実行できます。 - Autonomous DatabaseでのSQL Server文の実行
Autonomous DatabaseでSQL Server文を対話形式で変換および実行できます。 - SQL ServerファイルのOracle SQLへの移行
SQL Server文を含むファイルをOracle SQL文を含むファイルに移行できます。 - SQL Server文のOracle SQLへの移行および変換の制限事項
この項では、SQL文をSQL ServerからOracle SQLに移行する際の制限事項をまとめます。
SQL Server文のOracle SQLへの変換
SQL Serverで記述されたSQL文をOracle SQLに変換し、Autonomous Databaseで変換された文を実行できます。
DBMS_CLOUD_MIGRATION.MIGRATE_SQL
を使用して、SQL Server文をOracle SQLに変換します。DBMS_CLOUD_MIGRATION.MIGRATE_SQL
にはプロシージャおよびファンクションのバリアントがあります。
MIGRATE_SQLプロシージャを使用したSQL Server文のOracle SQLへの移行
次の例では、SQL Serverで記述されたSQL文を入力として受け入れ、文をOracle SQLに変換し、変換されたSQL文をoutput_sql_result
に割り当てて、結果を出力します。
SET SERVEROUTPUT ON
declare output_sql_result CLOB;
BEGIN
DBMS_CLOUD_MIGRATION.MIGRATE_SQL
(
original_sql => 'CREATE TABLE [dbo].[movie] ([film_id] [int], [title] [varchar](20));',
output_sql => output_sql_result,
source_db => 'SQLSERVER');
DBMS_OUTPUT.PUT_LINE (output_sql_result);
END;
/
Output
–-------------------------------------------------------------
CREATE TABLE movie (film_id NUMBER(10), title VARCHAR2(20));
original_sql
パラメータは、SQL Server SQL文を指定します。
output_sql
パラメータには、変換されたSQLが格納されます。
source_db
パラメータは、SQL Serverデータベースを指定します。
詳細は、MIGRATE_SQLプロシージャおよびファンクションを参照してください。
MIGRATE_SQLファンクションを使用したSQL Server文のOracle SQLへの移行
次の例は、SELECT
文内のDBMS_CLOUD_MIGRATION.MIGRATE_SQL
関数を示しています。ファンクション入力はSQL Server文で、ファンクションはOracle SQLで変換された文を返します。
SELECT DBMS_CLOUD_MIGRATION.MIGRATE_SQL
(
'CREATE TABLE [dbo].[movie] ([film_id] [int], [title] [varchar](20));','SQLSERVER') AS OUTPUT
FROM DUAL;
OUTPUT
------------------------------------------------------------------------------
CREATE TABLE movie (film_id NUMBER(10), title VARCHAR2(20));
SQLSERVER
パラメータを使用して、Microsoft SQL Serverから変換します。
詳細は、MIGRATE_SQLプロシージャおよびファンクションを参照してください。
DBMS_CLOUD_MIGRATION.MIGRATE_SQL
の実行に関するノート:
-
Oracle SQLで入力SQL文がサポートされていない場合、変換中にエラーが発生することがあります。詳細は、Oracle SQLへのSQL Server文の移行および変換の制限事項を参照してください。
-
DBMS_CLOUD_MIGRATION.MIGRATE_SQL
サブプログラムは、入力として1つのSQL文のみを受け入れます。そのため、コールごとに変換できるSQL文は1つのみです。
Autonomous DatabaseでのSQL Server文の実行
Autonomous DatabaseでSQL Server文を対話形式で変換および実行できます。
ENABLE_TRANSLATION
プロシージャを使用して、SQL Serverで記述されたSQL文のリアルタイム変換を有効にします。セッションで変換を有効にすると、Oracle以外のSQL文が自動的に変換されてOracle SQL文として実行され、結果を確認できます。
ENABLE_TRANSLATION
を実行して変換を有効にした後、セッションで対話的に次の操作を実行できます。
-
表を作成します。たとえば、表
MOVIE
およびINVENTORY
を作成します。 -
データを表に挿入
-
問合せ表
-
表に対してJOIN操作を実行します。たとえば、表に対して左外部結合を実行できます。
SQL Server文を使用した翻訳を有効にし、コマンドを実行するには:
V$MAPPED_SQL
ビューを問い合せると、メモリーに変換されてOracle SQL文にマップされるSQL Server文をリストできます。
たとえば:
SELECT v.*
FROM v$mapped_sql v, dba_objects o
WHERE v.sql_translation_profile_id = o.object_id
AND o.object_name = 'SQLSERVER'
AND o.object_type = 'TRANSLATION PROFILE';
詳細は、V$MAPPED_SQLを参照してください。
SQL ServerファイルのOracle SQLへの移行
SQL Server文を含むファイルをOracle SQL文を含むファイルに移行できます。
DBMS_CLOUD_MIGRATION.MIGRATE_FILE
プロシージャは、オブジェクト・ストレージのSQL ServerファイルのSQL文を変換し、Oracle SQLを含む新しいファイルを生成します。
前提条件として、.sql
拡張子を持つ1つ以上のSQL Serverファイルをオブジェクト・ストレージ上の場所にアップロードします。次の例では、オブジェクト・ストレージにアップロードされるファイルmssqltest.sql
を使用します。詳細は、オブジェクト・ストレージへのデータの格納を参照してください。
SQL ServerファイルをOracle SQLに移行するには:
次の問合せを実行して、mssqltest_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
--------------------------------------------------------------------------------
DROP TABLE movie;
CREATE TABLE movie (film_id NUMBER(10), title VARCHAR2(20));
INSERT INTO movie (film_id, title) VALUES (123, 'Tangled');
INSERT INTO movie (film_id, title) VALUES (234, 'Frozen');
CREATE TABLE inventory(film_id NUMBER(10), inventory_id NUMBER(10));
INSERT INTO inventory(film_id, inventory_id) VALUES (123, 223);
INSERT INTO inventory(film_id, inventory_id) VALUES (234, 334);
SELECT * FROM movie;
SELECT * FROM inventory;
SELECT m.film_id, m.title, inventory_id FROM movie m LEFT JOIN inventory ON inventory.film_id = m.film_id;
または、リソース・プリンシパルOCI$RESOURCE_PRINCIPAL
のかわりに資格証明を作成する場合は、credential_name
パラメータに資格証明名を指定します。
詳細は、「GET_OBJECTプロシージャおよびファンクション」を参照してください。