本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
從甲骨文遷移到 Amazon 我RDS的SQL或 Amazon Aurora 我SQL與 AWS Schema Conversion Tool
要在轉換後的我的SQL代碼中模擬 Oracle 數據庫函數,請使用 Oracle 到我的SQL擴展包。 AWS SCT如需詳細了解延伸套件,請參閱:使用擴充功能套件 AWS Schema Conversion Tool。
SQL作為目標資料庫的「我的」權限
「我的」SQL 作為目標所需的權限如下:
CREATE開啟 * 。 *
ALTER開啟 * 。 *
DROP開啟 * 。 *
INDEX開啟 * 。 *
REFERENCES開啟 * 。 *
SELECT開啟 * 。 *
CREATEVIEW開啟 * 。 *
SHOWVIEW開啟 * 。 *
TRIGGER開啟 * 。 *
CREATEROUTINE開啟 * 。 *
ALTERROUTINE開啟 * 。 *
EXECUTE開啟 * 。 *
CREATETEMPORARYTABLES開啟 * 。 *
AWS_LAMBDA_ACCESS
INSERT,UPDATE上 AWS _ ORACLE _ EXT。 *
INSERT,UPDATE,DELETE上 AWS _ ORACLE _ EXT _ DATA。 *
如果您使用「我的SQL資料庫 5.7 版或更低版本」做為目標,請授與 INVOKE LAMBDA *.* 權限,而不是 AWS _ LAMBDA _ ACCESS。對於 8.0 版及更高版本的「我的SQL資料庫」,授予 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
使用安全密碼。
如果您使用「我的SQL資料庫」5.7 或更低版本作為目標,請GRANT INVOKE LAMBDA ON *.* TO '
改用user_name
'GRANT AWS_LAMBDA_ACCESS TO '
。user_name
'
若要將 Amazon 用RDS於我的SQL或 Aurora 我SQL的目標,請將lower_case_table_names
參數設定為1
。此值表示「我的SQL伺服器」會以不區分大小寫的方式處理資料表、索引、觸發程序和資料庫等物件名稱的識別碼。如果您已在目標執行個體中開啟二進位記錄功能,請將 log_bin_trust_function_creators
參數設定為 1
。在這種情況下,您不需要使用 DETERMINISTIC
、READS SQL DATA
或 NO SQL
特性來建立已儲存的函數。若要設定這些參數,請建立新的參數群組,或是修改現有的資料庫參數群組。
甲骨文到我的SQL轉換設置
若要編輯「Oracle 到我的SQL轉換設定」,請在中選擇「設定」 AWS SCT,然後選擇「轉換設定」。從上方的清單中選擇 Oracle,然後選擇 Oracle — 我的SQL。 AWS SCT 顯示「Oracle 到我的SQL轉換」的所有可用設定。
「Oracle 到我的SQL轉換設定」中 AWS SCT 包含下列項目的選項:
-
用於限制轉換後代碼中行動項目的註釋數量。
針對所選嚴重性及更高之行動項目的已轉換程式碼中新增註解,請選擇行動項目的嚴重性。 AWS SCT 在所選嚴重性及更高之行動項目的轉換程式碼中加入註解。
例如,若要將已轉換程式碼中的註解數量降到最低,請選擇僅限錯誤。若要在已轉換的程式碼中包含所有動作項目的註解,請選擇所有訊息。
-
為了解決您的源 Oracle 數據庫可以使用
ROWID
偽列,但 My SQL 不支持類似的功能。 AWS SCT 可以模擬轉換後的ROWID
代碼中的偽列。要這樣做,請選擇生成為生成行 ID 的標識? 。如果您的源 Oracle 代碼不使用
ROWID
偽列,請選擇不生成為生成行 ID? 在此情況下,轉換後的程式碼運作得更快。 -
在原始 Oracle 程式碼包含
TO_CHAR
TO_DATE
、和TO_NUMBER
函數時使用 My SQL 不支援的參數。默認情況下, AWS SCT 模擬這些參數在轉換後的代碼的使用。當您的原始 Oracle 程式碼只包含 Postgre SQL 支援的參數時,您可以使用原生的 My SQL
TO_CHAR
TO_DATE
、和TO_NUMBER
函數。在此情況下,轉換後的程式碼運作得更快。若只要包括這些參數,請選取下列值:函數 TO_ CHAR () 不使用 Oracle 特定的格式化字符串
函數 TO_ DATE () 不使用 Oracle 特定的格式化字符串
函數 TO_ NUMBER () 不使用 Oracle 特定的格式化字符串
-
為了補充您的數據庫和應用程序是否在不同的時區中運行。默認情況下, AWS SCT 模擬轉換後的代碼中的時區。但是,當您的資料庫和應用程式使用相同的時區時,就不需要此模擬。在此情況下,請選取用戶端上的「時區」與伺服器上的時區相符。
遷移考量事項
當您將 Oracle 轉換RDS為我的SQL或 Aurora My 時SQL,若要變更陳述式執行的順序,您可以使用GOTO
陳述式和標籤。會略過SQL陳述式後面的任何 PL/ 陳述式,並在標籤處繼續處理。GOTO
您可以在程序、批次或GOTO
陳述式區塊中的任何位置使用陳述式和標籤。您也可以接下來的GOTO語句。
我SQL不使用GOTO
語句。當 AWS SCT 轉換包含GOTO
陳述式的程式碼時,會將陳述式轉換為使用 BEGIN…END
or LOOP…END LOOP
陳述式。
您可以在下表中找到如何 AWS SCT 轉換GOTO
陳述式的範例。
Oracle 陳述式 | 我的SQL陳述 |
---|---|
|
|
|
|
|
|
將甲骨文中的WITH語句轉換RDS為我的SQL或 Amazon Aurora 我的 SQL
您可以在 Oracle 中使用子WITH句(子查詢分解)將名稱(query_name)分配給子查詢塊。接著,您即可透過指定 query_name 在查詢中的多處位置參考該子查詢區塊。如果子查詢塊不包含鏈接或參數(本地,過程,函數,包),則 AWS SCT 將子句轉換為視圖或臨時表。
將子句轉換為暫時資料表的優點是,對子查詢的重複引用可能會更有效率。效率更高的是因為資料很容易從暫時資料表中檢索,而不是每個引用都需要。您可以通過使用其他視圖或臨時表來模擬這一點。視圖名稱會使用格式 <procedure_name>$<subselect_alias>
。
您可以在下表中找到範例。
Oracle 陳述式 | 我的SQL陳述 |
---|---|
|
|
|
|
|
|