MySQLデータベースからAutonomous Databaseへのアプリケーションの移行
SQL文をMySQLからOracle SQLに移行し、Autonomous Databaseで文を実行できます。
- Oracle SQLへのMySQL文の変換
MySQLで記述されたSQL文をOracle SQLに変換し、Autonomous Databaseで変換された文を実行できます。 - Autonomous DatabaseでのMySQL文の実行
Autonomous DatabaseでMySQL文を対話形式で変換および実行できます。 - MySQLファイルのOracle SQLへの移行
MySQL文を含むファイルをOracle SQL文を含むファイルに移行できます。 - MySQL文のOracle SQLへの移行および変換に関する制限事項
この項では、MySQLからOracle SQLへの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プロシージャを使用したOracle SQLへのMySQL文の移行
次の例では、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ファンクションを使用したOracle SQLへのMySQL文の移行
次の例は、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文がサポートされていない場合、変換中にエラーが発生することがあります。詳細は、「MySQL文のOracle SQLへの移行および変換の制限事項」を参照してください。
-
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
を作成します。 -
データを表に挿入します。
-
表を問い合せます。
-
表に対して結合操作を実行します。たとえば、表に対して左外部結合を実行できます。
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プロシージャおよびファンクション」を参照してください。
MySQL文のOracle SQLへの移行および変換に関する制限事項
この項では、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)