Migre Aplicativos de MySQL Databases para o Autonomous AI Database
Você pode migrar instruções SQL de MySQL para o Oracle SQL e executar as instruções no Autonomous AI Database.
Converter Instruções MySQL em Oracle SQL
Você pode traduzir instruções SQL gravadas no MySQL para o Oracle SQL e executar as instruções traduzidas no Autonomous AI Database.
Use DBMS_CLOUD_MIGRATION.MIGRATE_SQL para traduzir uma instrução MySQL para o Oracle SQL. Há variantes de procedimento e função de DBMS_CLOUD_MIGRATION.MIGRATE_SQL.
Migrar Instrução MySQL para o Oracle SQL com Procedimento MIGRATE_SQL
O exemplo a seguir aceita a instrução SQL gravada no MySQL como entrada, traduz a instrução para o Oracle SQL, designa a instrução SQL traduzida para output_sql_result e imprime o resultado:
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));O parâmetro original_sql especifica a instrução MySQL.
O parâmetro output_sql armazena o SQL traduzido.
O parâmetro source_db especifica MySQL como o nome do banco de dados.
Consulte Procedimento e Função MIGRATE_SQL para obter mais informações.
Migrar Instrução MySQL para o Oracle SQL com a Função MIGRATE_SQL
O exemplo a seguir mostra a função DBMS_CLOUD_MIGRATION.MIGRATE_SQL em uma instrução SELECT. A entrada da função é uma instrução MySQL e a função retorna a instrução traduzida no 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);Consulte Procedimento e Função MIGRATE_SQL para obter mais informações.
Observações para executar DBMS_CLOUD_MIGRATION.MIGRATE_SQL:
-
Você poderá encontrar um erro durante a tradução se a instrução SQL de entrada não for suportada no Oracle SQL. Consulte Limitações para Migração e Tradução de Instruções do MySQL para o Oracle SQL para obter mais informações.
-
Os subprogramas
DBMS_CLOUD_MIGRATION.MIGRATE_SQLsó aceitam uma instrução SQL como entrada. Portanto, apenas uma instrução SQL pode ser traduzida por chamada.
Executar Instruções MySQL no Autonomous AI Database
Você pode traduzir e executar interativamente instruções MySQL no Autonomous AI Database.
Use o procedimento ENABLE_TRANSLATION para ativar a tradução em tempo real de instruções SQL gravadas no MySQL. Depois de ativar a tradução em uma sessão, as instruções MySQL são convertidas automaticamente e executadas como instruções Oracle SQL, e você pode ver os resultados.
Por exemplo, depois de ativar a tradução executando ENABLE_TRANSLATION, você pode fazer o seguinte de forma interativa em uma sessão:
-
Crie as tabelas. Por exemplo, crie as tabelas
MOVIEeINVENTORY. -
Insira dados em tabelas.
-
Tabelas de consulta.
-
Execute operações JOIN em tabelas. Por exemplo, você pode fazer uma junção externa esquerda nas tabelas.
Para ativar a tradução com MySQL e executar comandos:
-
Estabeleça conexão com o Autonomous AI Database usando um cliente SQL.
Consulte Estabelecer Conexão com o Autonomous AI Database para obter mais informações.
Observação
Observação:DBMS_CLOUD_MIGRATION.ENABLE_TRANSLATIONnão é suportado no Database Actions e não é suportado com o Oracle APEX Service. -
Execute
DBMS_CLOUD_MIGRATION.ENABLE_TRANSLATIONpara ativar a tradução de SQL em tempo real em sua sessão. Use o parâmetroMYSQLpara traduzir do MySQL.BEGIN DBMS_CLOUD_MIGRATION.ENABLE_TRANSLATION('MYSQL'); END; /Use a seguinte consulta para verificar a linguagem de tradução SQL da sua sessão:
SELECT SYS_CONTEXT('USERENV','SQL_TRANSLATION_PROFILE_NAME') FROM DUAL;Consulte Procedimento ENABLE_TRANSLATION para obter mais informações.
-
Informe instruções MySQL. Por exemplo:
CREATE TABLE movie (film_id int, title varchar(255)); Table MOVIE created.Isso traduz e executa automaticamente a instrução
CREATE TABLEdo MySQL.Você pode verificar usando o comando
DESC. Por exemplo:DESC movie; Name Null? Type ------- ----- ------------- FILM_ID NUMBER(38) TITLE VARCHAR2(255)A tabela
MOVIEé criada e os tipos de dados de cada coluna são automaticamente convertidos em tipos de dados Oracle.Você poderá encontrar um erro durante a tradução se a instrução SQL de entrada não for suportada. Consulte Limitações para Migração e Tradução de Instruções do MySQL para o Oracle SQL para obter mais informações.
-
Insira dados na tabela
MOVIE. Por exemplo:INSERT INTO movie (film_id, title) VALUES (123, 'Tangled'); 1 row inserted. INSERT INTO movie (film_id, title) VALUES (234, 'Frozen'); 1 row inserted.Verifique a inserção de dados consultando a tabela
MOVIE. Por exemplo:SELECT * FROM movie; FILM_ID TITLE -------- --------- 123 Tangled 234 Frozen -
Crie uma tabela
INVENTORY:CREATE TABLE inventory (film_id int, inventory_id int); Table INVENTORY created.Você pode verificar essa etapa com o comando
DESC. Por exemplo:DESC inventory; Name Null? Type ------- ----- ------------- FILM_ID NUMBER(38) INVENTORY_ID NUMBER(38)A tabela
INVENTORYé criada e os tipos de dados de cada coluna são automaticamente convertidos em tipos de dados Oracle. -
Insira dados na tabela
INVENTORY. Por exemplo:INSERT INTO inventory(film_id, inventory_id) VALUES (123, 223); 1 row inserted. INSERT INTO inventory(film_id, inventory_id) VALUES (234, 334); 1 row inserted.Verifique a inserção de dados consultando
INVENTORY. Por exemplo:SELECT * FROM inventory; FILM_ID INVENTORY_ID -------- ------------- 123 223 234 334 -
Execute uma junção externa esquerda nas tabelas
MOVIEeINVENTORY:SELECT m.film_id, m.title, inventory_id FROM movie AS m LEFT JOIN inventory ON inventory.film_id = m.film_id; FILM_ID TITLE INVENTORY_ID ---------- ---------- ------------ 234 Frozen 334 123 Tangled 223Este exemplo executa um
LEFT OUTER JOINnas tabelasmovieeinventory. A palavra-chaveASpara aliases de tabela na cláusulaFROMnão é suportada no Oracle SQL. A consulta é traduzida primeiro para o Oracle SQL e, em seguida, executada em sua sessão. -
Use o procedimento
DBMS_CLOUD_MIGRATION.DISABLE_TRANSLATIONpara desativar a tradução do idioma SQL em tempo real para sua sessão.BEGIN DBMS_CLOUD_MIGRATION.DISABLE_TRANSLATION; END; /Isso retornará um erro se a tradução do idioma SQL não estiver ativada para sua sessão.
Consulte Procedimento DISABLE_TRANSLATION
Você pode consultar a view V$MAPPED_SQL para listar as instruções MySQL que são traduzidas e mapeadas na memória para instruções Oracle SQL.
Por exemplo:
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';Consulte V$MAPPED_SQL para obter mais informações.
Migrar Arquivos MySQL para o Oracle SQL
Você pode migrar um arquivo que contenha instruções MySQL para um arquivo que contenha instruções Oracle SQL.
O procedimento DBMS_CLOUD_MIGRATION.MIGRATE_FILE traduz instruções SQL em um arquivo MySQL no Object Storage e gera um novo arquivo que contém o Oracle SQL.
Como pré-requisito, faça upload de um ou mais arquivos MySQL com uma extensão .sql para um local no serviço Object Storage. Os exemplos a seguir usam o arquivo mysqltest.sql que é submetido a upload no Object Storage. Consulte Colocar dados no armazenamento de objetos para obter mais informações.
Para migrar arquivos MySQL para o Oracle SQL:
-
Conecte-se à sua instância do Autonomous AI Database.
Consulte Estabelecer Conexão com o Autonomous AI Database para obter mais informações.
-
Configure o acesso ao Cloud Object Storage usando um controlador de recursos ou criando um objeto de credencial.
Esta etapa fornece acesso ao Cloud Object Storage no qual você coloca os arquivos que está migrando:
-
Usar um controlador de recursos para acessar o Cloud Object Storage:
Defina políticas e atribuições para acessar o Oracle Cloud Infrastructure Object Storage com um controlador de recursos. Consulte Usar Controlador de Recursos para Acessar Recursos do Oracle Cloud Infrastructure e Usar Controlador de Recursos com DBMS_CLOUD para obter mais informações.
Se seus arquivos residirem no Cloud Object Storage de outro fornecedor, defina as políticas e atribuições apropriadas para acessar o recurso. Consulte Configurar Políticas e Atribuições para Acessar Recursos para obter mais informações.
-
Crie uma credencial para acessar o Cloud Object Storage:
Você pode criar uma credencial para acessar o Cloud Object Storage.
Por exemplo:
BEGIN DBMS_CLOUD.CREATE_CREDENTIAL ( credential_name => 'OBJ_STORE_CRED', username => 'user1@example.com', password => 'password' ); END; /Consulte Procedimento CREATE_CREDENTIAL para obter mais informações.
-
-
Opcionalmente, você pode listar os arquivos no Object Storage. Por exemplo:
VAR function_list CLOB; SELECT object_name FROM DBMS_CLOUD.LIST_OBJECTS (credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => 'https://objectstorage.region.oraclecloud.com/n/namespace/b/bucket/o/files'); OBJECT_NAME --------------------- mysqltest.sqlSe preferir, se você criar uma credencial em vez do controlador de recursos,
OCI$RESOURCE_PRINCIPAL, especifique o nome da credencial no parâmetrocredential_name.Consulte Função LIST_OBJECTS para obter mais informações.
-
Execute
DBMS_CLOUD_MIGRATION.MIGRATE_FILEpara migrar o arquivo MySQL para o Oracle SQL:BEGIN DBMS_CLOUD_MIGRATION.MIGRATE_FILE ( credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => 'https://objectstorage.region.oraclecloud.com/n/namespace/b/bucket/o/files/mysqltest.sql', source_db => 'MYSQL' ); END; /O parâmetro
credential_nameespecifica a credencial para acessar o URI do Cloud Object Storage. O usuário que executaDBMS_CLOUD_MIGRATION.MIGRATE_FILEdeve ter o privilégioEXECUTEpara o objeto de credencial usado para acessar o URI do serviço Object Storage. Ou seja, a credencial que você especifica com o parâmetrocredential_name. Se você usar uma credencial em vez de um controlador de recursos, especifique o nome da credencial no parâmetrocredential_name.O parâmetro
location_uriespecifica o URI do arquivo de origem. O formato do URI depende do serviço do Cloud Object Storage que você estiver usando. Consulte Formatos de URI DBMS_CLOUD para obter mais informações.O parâmetro
source_dbespecifica o MySQL como o idioma do banco de dados. Use o valorMYSQLpara traduzir arquivos MySQL para o Oracle SQL.A execução deste comando traduz o arquivo MySQL
mysqltest.sqlpara o Oracle SQL e gera um novo arquivo com o nome original_filename_oracle.sql.Para este exemplo, a execução de
DBMS_CLOUD_MIGRATION.MIGRATE_FILEcom o arquivo de entradamysqltest.sqlgeramysqltest_oracle.sql. Após a etapa de tradução, o procedimento faz upload demysqltest_oracle.sqlpara o serviço Object Storage.Opcionalmente, use o parâmetro
target_uripara especificar o local em que o arquivo traduzido será submetido a upload. O valor padrão desse parâmetro éNULL, o que significa que o arquivo traduzido é submetido a upload para o mesmo local especificado no parâmetrolocation_uri.Consulte Procedimento MIGRATE_FILE para obter mais informações.
-
Verifique se o arquivo de saída foi gerado.
SELECT object_name FROM DBMS_CLOUD.LIST_OBJECTS ( credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => 'https://objectstorage.region.oraclecloud.com/n/namespace/b/bucket/o/files'); OBJECT_NAME --------------------- mysqltest.sql mysqltest_oracle.sqlSe preferir, se você criar uma credencial em vez do controlador de recursos,
OCI$RESOURCE_PRINCIPAL, especifique o nome da credencial no parâmetrocredential_name.Consulte Função LIST_OBJECTS para obter mais informações.
Execute a seguinte consulta para exibir o conteúdo do arquivo 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;Se preferir, se você criar uma credencial em vez do controlador de recursos, OCI$RESOURCE_PRINCIPAL, especifique o nome da credencial no parâmetro credential_name.
Consulte Procedimento e Função GET_OBJECT para obter mais informações.
Limitações para Migração e Tradução de Instruções MySQL para o Oracle SQL
Esta seção resume as limitações para migrar instruções SQL de MySQL para o Oracle SQL.
Observe as seguintes restrições ao migrar da versão do banco de dados MySQL para o Oracle SQL:
-
Variáveis Globais Definidas pelo Usuário: As variáveis globais definidas pelo usuário do MySQL declaradas usando o formato
@var_namenão são suportadas ao traduzir para o Oracle SQL. -
Identificadores com aspas: os identificadores MySQL que são delimitados por backticks (`), como
var_name, não são suportados ao traduzir para o Oracle SQL. Somente identificadores sem aspas ou entre aspas duplas são suportados. -
Delimitadores:
-
Para funções e procedimentos, somente os delimitadores
$$e//são suportados. -
Para instruções SQL, apenas o delimitador
;é suportado.
-
A seguinte lista de funções MySQL não é suportada:
-
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)