翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
を使用した Oracle から Amazon RDS for MySQL または Amazon Aurora MySQL への移行 AWS Schema Conversion Tool
変換した MySQL コードで Oracle データベース関数をエミュレートするには、 AWS SCTで Oracle から MySQL への拡張パックを使用します。拡張機能の詳細については、「での拡張パックの使用 AWS Schema Conversion Tool」を参照してください。
トピック
MySQL をターゲットデータベースとする場合の権限
ターゲットとして MySQL に必要な権限を以下に示します。
CREATE ON *.*
ALTER ON *.*
DROP ON *.*
INDEX ON *.*
REFERENCES ON *.*
SELECT ON *.*
CREATE VIEW ON *.*
SHOW VIEW ON *.*
TRIGGER ON *.*
CREATE ROUTINE ON *.*
ALTER ROUTINE ON *.*
EXECUTE ON *.*
CREATE TEMPORARY TABLES ON *.*
AWS_LAMBDA_ACCESS
INSERT, UPDATE ON AWS_ORACLE_EXT.*
INSERT, UPDATE, DELETE ON AWS_ORACLE_EXT_DATA.*
バージョン 5.7 以前の MySQL データベースをターゲットとして使用する場合は、AWS_LAMBDA_ACCESS の代わりに INVOKE LAMBDA *.* 権限を付与します。MySQL データベースバージョン 8.0 以降の場合は、AWS_LAMBDA_ACCESS 権限を付与します。
次のコード例を使用してデータベースユーザーを作成し、権限を付与できます。
CREATE USER '
user_name
' IDENTIFIED BY 'your_password
'; GRANT CREATE ON *.* TO 'user_name
'; GRANT ALTER ON *.* TO 'user_name
'; GRANT DROP ON *.* TO 'user_name
'; GRANT INDEX ON *.* TO 'user_name
'; GRANT REFERENCES ON *.* TO 'user_name
'; GRANT SELECT ON *.* TO 'user_name
'; GRANT CREATE VIEW ON *.* TO 'user_name
'; GRANT SHOW VIEW ON *.* TO 'user_name
'; GRANT TRIGGER ON *.* TO 'user_name
'; GRANT CREATE ROUTINE ON *.* TO 'user_name
'; GRANT ALTER ROUTINE ON *.* TO 'user_name
'; GRANT EXECUTE ON *.* TO 'user_name
'; GRANT CREATE TEMPORARY TABLES ON *.* TO 'user_name
'; GRANT AWS_LAMBDA_ACCESS TO 'user_name
'; GRANT INSERT, UPDATE ON AWS_ORACLE_EXT.* TO 'user_name
'; GRANT INSERT, UPDATE, DELETE ON AWS_ORACLE_EXT_DATA.* TO 'user_name
';
前述の例では、[user_name
] をお客様の設定のユーザー名に置き換えます。your_password
を安全なパスワードに置き換えます。
バージョン 5.7 以前の MySQL データベースをターゲットとして使用する場合は、GRANT AWS_LAMBDA_ACCESS TO '
の代わりに user_name
'GRANT INVOKE LAMBDA ON *.* TO '
を使用してください。user_name
'
Amazon RDS for MySQL または Aurora MySQL をターゲットとして使用するには、lower_case_table_names
パラメータを 1
に設定します。この値は、MySQL サーバーがテーブル、インデックス、トリガー、データベースなどのオブジェクト名の識別子を、大文字と小文字を区別せずに処理することを意味します。ターゲットインスタンスでバイナリログを有効にしている場合は、log_bin_trust_function_creators
パラメータを 1
と設定します。この場合、ストアド関数を作成するのに、DETERMINISTIC
特性、READS SQL DATA
特性、NO SQL
特性を使用する必要はありません。これらのパラメータを設定するには、新しい DB パラメータグループを作成するか、既存の DB パラメータグループを変更します。
Oracle から MySQL への変換設定
Oracle から MySQL への変換設定を編集するには、「 での設定」を選択し AWS SCT、「変換設定」を選択します。上部のリストから Oracle を選択し、Oracle – MySQL を選択します。Oracle から MySQL への変換に使用できるすべての設定 AWS SCT を表示します。
の Oracle から MySQL への変換設定 AWS SCT には、以下のオプションが含まれています。
-
変換されたコード内のアクション項目に関するコメントの数を制限する。
選択した重要度以上のアクション項目の変換されたコードにコメントを追加する で、アクション項目の重要度を選択します。 は、選択した重要度以上のアクション項目の変換されたコードにコメント AWS SCT を追加します。
たとえば、変換したコード内のコメントの数を最小限に抑えるには、[エラーのみ] を選択します。変換したコードのすべてのアクション項目にコメントを含めるには、[すべてのメッセージ] を選択します。
-
ソース Oracle データベースが擬似列を使用できるが、MySQL
ROWID
は同様の機能をサポートしていないことに対応するために、 は変換されたコードでROWID
擬似列をエミュレート AWS SCT できます。そのためには、[行 ID を生成しますか] で [ID として生成] を選択します。Oracle のソースコードで
ROWID
疑似列を使用していない場合は、[行 ID を生成しますか] で [生成しない] を選択します。この場合、変換されたコードの処理が速くなります。 -
MySQL がサポートしていないパラメータを持つ
TO_CHAR
、TO_DATE
、TO_NUMBER
関数が含まれているソースの Oracle コードを操作する。デフォルトでは、 AWS SCT は変換後のコードでこれらのパラメータの使用法をエミュレートします。ソース Oracle コードに PostgreSQL がサポートするパラメータのみが含まれている場合は、ネイティブの MySQL
TO_CHAR
、TO_DATE
、TO_NUMBER
関数を使用できます。この場合、変換されたコードの処理が速くなります。これらのパラメータのみを含めるには、以下の値を選択します。関数 TO_CHAR () は Oracle 固有のフォーマット文字列を使用しません。
関数 TO_DATE () は Oracle 固有のフォーマット文字列を使用しません
関数 TO_NUMBER () は Oracle 固有のフォーマット文字列を使用しません
-
データベースとアプリケーションが異なるタイムゾーンで実行されているかどうかを調べる。デフォルトでは、 AWS SCT は変換されたコードのタイムゾーンをエミュレートします。ただし、データベースとアプリケーションが同じタイムゾーンを使用している場合は、このエミュレーションは必要ありません。この場合、[クライアント側のタイムゾーンをサーバーのタイムゾーンと一致させる] を選択してください。
移行に関する考慮事項
Oracle を RDS for MySQL または Aurora MySQL に変換する場合、ステートメントの実行順序を変更するには、GOTO
ステートメントとラベルを使用できます。GOTO ステートメントに続くすべての GOTO
ステートメントはスキップされ、ラベルで処理が継続されます。GOTO
ステートメントとラベルは、プロシージャ、バッチ、またはステートメント ブロック内のどこでも使用できます。GOTO ステートメントをネストすることもできます。
MySQL は GOTO
ステートメントを使用しません。は、 GOTO
ステートメントを含むコードを AWS SCT 変換するときに、 ステートメントを BEGIN…END
または LOOP…END LOOP
ステートメントを使用するように変換します。
GOTO
がステートメントを AWS SCT 変換する方法の例を次の表に示します。
Oracle ステートメント | MySQL ステートメント |
---|---|
|
|
|
|
|
|
Oracle の WITH ステートメントから RDS for MySQL または Amazon Aurora MySQL への変換
名前 (query_name) をサブクエリのブロックに割り当てるには、WITH 句 (subquery_factoring) を Oracle で使用します。サブクエリブロックをクエリの複数の場所で参照するには、query_name を指定します。サブクエリブロックにリンクやパラメータ (ローカル、プロシージャ、関数、パッケージ) が含まれていない場合、 は 句をビューまたは一時テーブル AWS SCT に変換します。
句を一時テーブルに変換する利点は、サブクエリへの繰り返し参照がより効率的であることです。各参照によって要求されるのではなく、一時テーブルからデータが簡単に取得されるために効率が向上します。追加のビューまたは一時テーブルを使用して、これをエミュレートできます。ビュー名には <procedure_name>$<subselect_alias>
の形式が使用されます。
次の表で例を確認できます。
Oracle ステートメント | MySQL ステートメント |
---|---|
|
|
|
|
|
|