MySQLデータベースからAutonomous Databaseへのアプリケーションの移行
MySQLからOracle SQLにSQL文を移行し、Autonomous Databaseで文を実行できます。
- MySQL文のOracle SQLへの変換
MySQLで記述されたSQL文をOracle SQLに変換し、Autonomous Databaseで変換された文を実行できます。 - Autonomous DatabaseでのMySQL文の実行
Autonomous DatabaseでMySQL文を対話形式で変換および実行できます。 - Oracle SQLへのMySQLファイルの移行
MySQL文を含むファイルをOracle SQL文を含むファイルに移行できます。 - MySQL文のOracle SQLへの移行および変換の制限事項
この項では、SQL文をMySQLからOracle SQLに移行する際の制限事項をまとめます。
MySQL文のOracle SQLへの変換
MySQLで記述されたSQL文をOracle SQLに変換し、Autonomous Databaseで変換された文を実行できます。
DBMS_CLOUD_MIGRATION.MIGRATE_SQL
を使用して、MySQL文をOracle SQLに変換します。DBMS_CLOUD_MIGRATION.MIGRATE_SQL
にはプロシージャおよびファンクションのバリアントがあります。
MIGRATE_SQLプロシージャを使用したMySQL文のOracle SQLへの移行
次の例では、MySQLで記述された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 movie (movie_id INT, title VARCHAR(255));',
output_sql => output_sql_result,
source_db => 'MYSQL');
DBMS_OUTPUT.PUT_LINE (output_sql_result);
END;
/
OUTPUT
–-------------------------------------------------------------
CREATE TABLE movie (movie_id NUMBER(10), title VARCHAR2(255));
original_sql
パラメータは、MySQL文を指定します。
output_sql
パラメータには、変換されたSQLが格納されます。
source_db
パラメータは、データベース名としてMySQLを指定します。
詳細は、MIGRATE_SQLプロシージャおよびファンクションを参照してください。
MIGRATE_SQL関数を使用したMySQL文のOracle SQLへの移行
次の例は、SELECT
文内のDBMS_CLOUD_MIGRATION.MIGRATE_SQL
関数を示しています。ファンクション入力はMySQL文で、ファンクションはOracle SQLで変換された文を返します。
SELECT DBMS_CLOUD_MIGRATION.MIGRATE_SQL
(
'CREATE TABLE movie (film_id INT, title VARCHAR(255));','MYSQL') AS output FROM DUAL;
OUTPUT
------------------------------------------------------------------------------
create table cars (brand VARCHAR2(255), model VARCHAR2(255);
詳細は、MIGRATE_SQLプロシージャおよびファンクションを参照してください。
DBMS_CLOUD_MIGRATION.MIGRATE_SQL
の実行に関するノート:
-
Oracle SQLで入力SQL文がサポートされていない場合、変換中にエラーが発生することがあります。詳細は、Oracle SQLへのMySQL文の移行および変換の制限事項を参照してください。
-
DBMS_CLOUD_MIGRATION.MIGRATE_SQL
サブプログラムは、入力として1つのSQL文のみを受け入れます。そのため、コールごとに変換できるSQL文は1つのみです。
Autonomous DatabaseでのMySQL文の実行
Autonomous DatabaseでMySQL文を対話形式で変換および実行できます。
ENABLE_TRANSLATION
プロシージャを使用して、MySQLで記述されたSQL文のリアルタイム変換を有効にします。セッションで変換を有効にすると、MySQL文が自動的に変換されてOracle SQL文として実行され、結果を確認できます。
ENABLE_TRANSLATION
を実行して変換を有効にした後、セッションで対話的に次の操作を実行できます。
-
表を作成します。たとえば、表
MOVIE
およびINVENTORY
を作成します。 -
データを表に挿入
-
問合せ表
-
表に対してJOIN操作を実行します。たとえば、表に対して左外部結合を実行できます。
MySQLを使用して変換を有効にし、コマンドを実行するには:
V$MAPPED_SQL
ビューを問い合せると、メモリーに変換されてOracle SQL文にマップされるMySQL文をリストできます。
たとえば:
SELECT v.*
FROM v$mapped_sql v, dba_objects o
WHERE v.sql_translation_profile_id = o.object_id
AND o.object_name = 'MYSQL'
AND o.object_type = 'TRANSLATION PROFILE';
詳細は、V$MAPPED_SQLを参照してください。
Oracle SQLへのMySQLファイルの移行
MySQL文を含むファイルをOracle SQL文を含むファイルに移行できます。
DBMS_CLOUD_MIGRATION.MIGRATE_FILE
プロシージャは、オブジェクト・ストレージのMySQLファイル内のSQL文を変換し、Oracle SQLを含む新しいファイルを生成します。
前提条件として、.sql
拡張子を持つ1つ以上のMySQLファイルをオブジェクト・ストレージの場所にアップロードします。次の例では、オブジェクト・ストレージにアップロードされるファイルmysqltest.sql
を使用します。詳細は、オブジェクト・ストレージへのデータの格納を参照してください。
MySQLファイルをOracle SQLに移行するには:
次の問合せを実行して、mysqltest_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;
DROP TABLE inventory;
CREATE TABLE movie (film_id NUMBER(10), title VARCHAR2(255));
INSERT INTO movie (film_id, title) VALUES (123, 'Tangled');
INSERT INTO movie (film_id, title) VALUES (234, 'Frozen');
CREATE TABLE movie (film_id NUMBER(10), inventory_id NUMBER(10));
INSERT INTO movie (film_id, inventory_id) VALUES (123, 223);
INSERT INTO inventory (film_id, inventory_id) VALUES (234, 334);
SELECT * FROM movie;
または、リソース・プリンシパルOCI$RESOURCE_PRINCIPAL
のかわりに資格証明を作成する場合は、credential_name
パラメータに資格証明名を指定します。
詳細は、「GET_OBJECTプロシージャおよびファンクション」を参照してください。
Oracle SQLへのMySQL文の移行および変換の制限
この項では、SQL文をMySQLからOracle SQLに移行する際の制限事項の概要を示します。
MySQLデータベース・フレーバからOracle SQLに移行する場合、次の制限に注意してください。
-
ユーザー定義グローバル変数:
@var_name
形式を使用して宣言されたMySQLユーザー定義グローバル変数は、Oracle SQLへの変換時にはサポートされていません。 -
引用符付き識別子: バックティック(`)で囲まれたMySQL識別子(
`var_name`
など)は、Oracle SQLへの変換ではサポートされていません。引用符なしまたは二重引用符で囲まれた識別子のみがサポートされます。 -
デリミタ:
-
ファンクションおよびプロシージャでは、
$$
および//
デリミタのみがサポートされています。 -
SQL文では、
;
デリミタのみがサポートされています。
-
-
ADDTIME(datetime, time)
-
AES_DECRYPT(crypt_str, key_str)
-
AES_ENCRYPT(str, key_str)
-
BIN(num)
-
CONV(num, from_base, to_base)
-
CONVERT_TZ(datetime, from, to)
-
CRC32(exp)
-
DATE_ADD(date, interval)