Este documento faz parte de uma série que fornece informações e orientações importantes relacionadas com o planeamento e a execução de migrações de bases de dados Oracle® 11g/12c para o Cloud SQL para MySQL versão 5.7, instâncias de segunda geração. A série inclui as seguintes partes:
- Migrar utilizadores do Oracle para o Cloud SQL para MySQL: terminologia e funcionalidade (este documento)
- Migrar utilizadores do Oracle para o Cloud SQL para MySQL: tipos de dados, utilizadores e tabelas
- Migrar utilizadores do Oracle para o Cloud SQL para MySQL: consultas, procedimentos armazenados, funções e acionadores
- Migrar utilizadores do Oracle para o Cloud SQL para MySQL: segurança, operações, monitorização e registo
Terminologia
Esta secção detalha as semelhanças e as diferenças na terminologia de bases de dados entre o Oracle e o Cloud SQL para MySQL. Reveja e compare os aspetos principais de cada uma das plataformas de base de dados. A comparação distingue entre as versões 11g e 12c do Oracle, devido a diferenças arquitetónicas (por exemplo, o Oracle 12c introduz a funcionalidade multi-inquilino). A versão do Cloud SQL para MySQL referenciada aqui é a 5.7.x.
Diferenças na terminologia entre o Oracle 11g e o Cloud SQL para MySQL
Oracle 11g | Descrição | Cloud SQL para MySQL | Principais diferenças |
---|---|---|---|
Instância | Uma única instância do Oracle 11g só pode conter uma base de dados. | Instância | Uma instância do MySQL pode conter várias bases de dados. |
Base de dados | Uma base de dados é qualificada como uma única instância (o nome da base de dados é idêntico ao nome da instância). | Base de dados | Várias ou uma única base de dados servem várias aplicações. |
Esquema | O esquema e os utilizadores são idênticos porque ambos são considerados proprietários de objetos da base de dados (é possível criar um utilizador sem especificar ou atribuir a um esquema). | Esquema | Um esquema é denominado base de dados, enquanto os objetos da base de dados são criados num determinado esquema/base de dados. |
Utilizador | Idêntico ao esquema, uma vez que ambos são proprietários de objetos de base de dados. Por exemplo, instância → base de dados → esquemas/utilizadores → objetos de base de dados. | Utilizador | Um utilizador da base de dados com autorizações específicas para associar ou modificar objetos da base de dados em esquemas/bases de dados específicos, por exemplo, instância → bases de dados/esquemas → objetos da base de dados. |
Role | Conjunto definido de autorizações da base de dados que podem ser encadeadas como um grupo e podem ser atribuídas a utilizadores da base de dados. | Privilégios do MySQL | O MySQL 5.7 não suporta a gestão de funções. As autorizações podem ser configuradas através da cláusula GRANT para que os utilizadores tenham privilégios em objetos da base de dados a diferentes níveis (LEITURA/ESCRITA, etc.). |
Utilizadores de administrador/SISTEMA | Utilizadores administradores da Oracle com o nível de acesso mais elevado:SYS SYSTEM |
Superutilizadores | Após a implementação, o Cloud SQL para MySQL tem o utilizador root@'%' (pode estabelecer ligação a partir de qualquer anfitrião) e um utilizador adicional denominado mysql.sys , que só pode estabelecer ligação a partir do anfitrião local. |
Dicionário/metadados | A Oracle usa as seguintes tabelas de metadados:USER_TableName ALL_TableName DBA_TableName |
Dicionário/metadados | O MySQL usa várias bases de dados/esquemas para dicionários/metadados:MYSQL INFORMATION_SCHEMA PERFORMANCE_SCHEMA SYS |
Vistas dinâmicas do sistema | Vistas dinâmicas da Oracle:V$ViewName |
Vistas dinâmicas do sistema | As vistas dinâmicas do MySQL podem ser encontradas em várias das bases de dados do sistema:INFORMATION_SCHEMA PERFORMANCE_SCHEMA SYS |
Tablespace | As estruturas de armazenamento lógicas principais das bases de dados Oracle; cada tablespace pode conter um ou mais ficheiros de dados. | Tablespace | Semelhante ao Oracle, um tablespace do MySQL é uma unidade lógica, mas representa apenas uma única tabela, ao contrário do tablespace do Oracle, que pode ter vários ficheiros de dados (contém dados para várias tabelas). O MySQL suporta a criação de um novo tablespace com um ficheiro de dados atribuído e, em seguida, a criação de uma nova tabela anexada ao tablespace recém-criado. Tenha em atenção que as definições de configuração do espaço na tabela, como o dimensionamento e os limites, são definidas através de parâmetros da base de dados e não durante a criação do espaço na tabela. |
Ficheiros de dados | Os elementos físicos de uma base de dados Oracle que contêm os dados e são definidos num tablespace específico. Um único ficheiro de dados é definido pelo tamanho inicial e pelo tamanho máximo e pode conter dados para várias tabelas. Os ficheiros de dados do Oracle usam o sufixo .dbf (não obrigatório). |
Ficheiros de dados | O Cloud SQL para MySQL usa o parâmetro innodb_file_per_table
com o valor "ON " (predefinição). Esta configuração
gera um novo ficheiro de dados para cada tabela e um tablespace dedicado.Os ficheiros de dados do MySQL usam ficheiros .ibd (dados) e .frm (metadados). |
Espaço de tabelas do sistema | Contém as tabelas do dicionário de dados e os objetos de visualização para toda a base de dados Oracle. | Espaço de tabelas do sistema | Igual ao Oracle, contém as tabelas de dicionário/metadados. Armazenados no espaço de tabelas innodb_system anexado ao ibdata1 ficheiro de dados. |
Tablespace temporário | Contém objetos de esquema válidos durante uma sessão; além disso, suporta a execução de operações que não cabem na memória do servidor. | Tablespace temporário | O objetivo é idêntico ao do Oracle, armazenado no espaço de tabelas do MySQL
innodb_temporary anexado ao ibtmp1
ficheiro de dados. |
Anular tablespace |
Um tipo especial de espaço de tabelas permanente do sistema usado pelo Oracle para gerir as operações de reversão quando a base de dados é executada no modo de gestão de anulação automática (predefinição). | Anule o tablespace | Semelhante ao Oracle, o espaço de tabelas de anulação do MySQL contém registos de anulação para fins de reversão. Por predefinição, esta opção está definida como OFF e é mencionada como descontinuada para futuras versões do MySQL. |
ASM | O Oracle Automatic Storage Management é um sistema de ficheiros de base de dados integrado de elevado desempenho e um gestor de discos executados automaticamente por uma base de dados Oracle configurada com o ASM. | Não suportado | O MySQL usa o termo motores de armazenamento para descrever diferentes implementações de processamento de dados, mas não suporta o Oracle ASM. O Cloud SQL para MySQL suporta muitas funcionalidades que oferecem automatização do armazenamento, como aumentos automáticos do armazenamento, desempenho e escalabilidade. |
Tabelas/vistas | Objetos de base de dados fundamentais criados pelo utilizador. | Tabelas/vistas | Idêntico ao Oracle. |
Vistas materializadas | Definidos com declarações SQL específicas e podem ser atualizados manual ou automaticamente com base em configurações específicas. | Não suportado pelo MySQL | Como solução alternativa, podem ser usados acionadores/vistas em vez de vistas materializadas do Oracle. |
Sequência | Gerador de valores únicos da Oracle. | Incremento automático | O MySQL não suporta sequências Oracle. Use o AUTO_INCREMENT como solução alternativa à funcionalidade de geração automática de sequências. |
Sinónimo | Objetos da base de dados Oracle que funcionam como identificadores alternativos para outros objetos da base de dados. | Não suportado | O MySQL não suporta sinónimos do Oracle. Como solução alternativa, podem ser usadas visualizações ao definir as autorizações adequadas. |
Criar partições | A Oracle oferece muitas soluções de partição para dividir tabelas grandes em partes geridas mais pequenas. | Criar partições | O MySQL tem um suporte de partição mais limitado para melhorar o desempenho, ao mesmo tempo que retém as operações de gestão e manutenção de dados, como as partições Oracle. |
Base de dados de reversão | Funcionalidade proprietária da Oracle que pode ser usada para inicializar uma base de dados da Oracle para uma hora definida anteriormente, o que lhe permite consultar ou restaurar dados que foram modificados ou corrompidos por engano. | Não suportado | Como solução alternativa, pode usar cópias de segurança do Cloud SQL e a recuperação num determinado momento para restaurar uma base de dados para um estado anterior (por exemplo, restaurar antes de eliminar uma tabela). |
sqlplus | Interface de linhas de comando da Oracle que lhe permite consultar e gerir a instância da base de dados. | mysql | Interface de linhas de comando equivalente ao MySQL para consultar e gerir. Pode ser ligada a partir de qualquer cliente com as autorizações adequadas para o Cloud SQL. |
PL/SQL | A Oracle estendeu a linguagem processual ao SQL ANSI. | MySQL | O MySQL tem a sua própria linguagem processual alargada com uma sintaxe e uma implementação diferentes e não tem uma nomenclatura adicional para esta linguagem alargada. |
Pacote e corpo do pacote | Funcionalidade específica da Oracle para agrupar procedimentos e funções armazenados sob a mesma referência lógica. | Não suportado | O MySQL suporta procedimentos e funções armazenados como objetos únicos com atribuição de grupos. |
Procedimentos e funções armazenados | Usa PL/SQL para implementar a funcionalidade do código. | Procedimento armazenado e funções | A criação de procedimentos e funções armazenados é suportada pelo MySQL com a respetiva implementação de linguagem processual proprietária. |
Acionador | Objeto Oracle usado para controlar a implementação de DML em tabelas. | Acionador | Idêntico ao Oracle. |
PFILE/SPFILE | Os parâmetros ao nível da instância e da base de dados do Oracle são mantidos num ficheiro binário conhecido como SPFILE (nas versões anteriores, o ficheiro chamava-se PFILE ), que pode ser usado como um ficheiro de texto para definir parâmetros manualmente. |
Flags da base de dados do Cloud SQL para MySQL | Pode definir ou modificar os parâmetros do Cloud SQL para MySQL através do utilitário database flags. Não pode alterar os parâmetros da base de dados no Cloud SQL para MySQL através da interface de linha de comandos do cliente MySQL (por exemplo, mysql>
SET GLOBAL ... ). Só pode alterar estes parâmetros através do utilitário de flags da base de dados. |
SGA/PGA/AMM | Parâmetros de memória do Oracle que controlam a atribuição de memória à instância da base de dados. |
INNODB_BUFFER_POOL_SIZE
|
O MySQL tem os seus próprios parâmetros de memória. Um parâmetro equivalente pode ser
INNODB_BUFFER_POOL_SIZE . No Cloud SQL para MySQL, este parâmetro é predefinido pelo tipo de instância escolhido e o valor é alterado em conformidade. |
Cache de resultados | Reduz as operações de E/S de SQL ao obter linhas da cache de buffer, que podem ser geridas através de parâmetros e sugestões da base de dados ao nível da sessão. | Cache de consultas | Tem o mesmo objetivo fundamental que a cache de resultados do Oracle e pode ser gerida ao nível da base de dados e ao nível da sessão. |
Sugestões de bases de dados | Impacto controlado nas declarações SQL que influenciam o comportamento do otimizador para alcançar um melhor desempenho. A Oracle tem mais de 50 sugestões de bases de dados diferentes. | Sugestões de bases de dados | O MySQL suporta um conjunto limitado de sugestões de bases de dados em comparação com o Oracle (sugestões de otimização e sugestões de índice). Tenha em atenção que o MySQL usa sugestões, sintaxe e nomenclatura de base de dados diferentes. |
RMAN | Utilitário Oracle Recovery Manager. Usado para fazer cópias de segurança da base de dados com funcionalidade alargada para suportar vários cenários de recuperação de desastres e muito mais (clonagem, etc.). | Cópia de segurança do Cloud SQL para MySQL | O Cloud SQL para MySQL oferece dois métodos para aplicar uma cópia de segurança completa: cópias de segurança a pedido e automáticas. |
Data Pump (EXPDP/IMPDP) | Utilitário de geração de despejos do Oracle que pode ser usado para muitas funcionalidades, como: exportação/importação, cópia de segurança da base de dados (ao nível do esquema ou do objeto), metadados do esquema, geração de ficheiros SQL do esquema e muito mais. | mysqldump/mysqlimport |
Utilitário de captura (exportação) do MySQL que pode ser ligado como um cliente (remotamente) e gerar um ficheiro de captura (SQL). Mais tarde, pode comprimir o ficheiro de despejo e
movê-lo para o Cloud Storage. O utilitário mysqldump destina-se apenas ao passo de exportação. |
SQL*Loader | Ferramenta que permite carregar dados de ficheiros externos, como ficheiros de texto, ficheiros CSV e muito mais. | mysqlimport/ |
O utilitário mysqlimport permite carregar ficheiros de texto ou CSV (a Oracle suporta formatos de ficheiros adicionais) para uma tabela de base de dados com uma estrutura correspondente. |
Data Guard | Solução de recuperação de desastres da Oracle que usa uma instância em espera, o que permite aos utilizadores executar operações de `LEITURA` a partir da instância em espera. | Alta disponibilidade e replicação do Cloud SQL para MySQL | Para alcançar a recuperação de desastres ou a elevada disponibilidade, o Cloud SQL para MySQL oferece a arquitetura de réplica de failover e, para operações só de leitura (separação de LEITURA/ESCRITA), usa a réplica de leitura. |
Active Data Guard/Golden Gate | As principais soluções de replicação da Oracle, que podem servir vários fins, como Standby (DR), instância só de leitura, replicação bidirecional (várias origens), armazenamento de dados e muito mais. | Réplica de leitura do Cloud SQL para MySQL | Réplica de leitura do Cloud SQL para MySQL Read Replica para implementar o clustering com separação de LEITURA/ESCRITA. Atualmente, não existe suporte para a configuração de várias origens, como a replicação bidirecional do Golden Gate ou a replicação heterogénea. |
RAC | Oracle Real Application Cluster. Solução de clustering proprietária da Oracle para fornecer alta disponibilidade através da implementação de várias instâncias da base de dados com uma única unidade de armazenamento. | Não suportado | A arquitetura de várias origens ainda não é suportada no Google Cloud Cloud SQL. Para alcançar uma arquitetura de clustering com separação de LEITURA/ESCRITA e alta disponibilidade, use a alta disponibilidade do Cloud SQL e a réplica de leitura. |
Grid/Cloud Control (OEM) | Software Oracle para gerir e monitorizar bases de dados e outros serviços relacionados num formato de app Web. Esta ferramenta é útil para a análise de bases de dados em tempo real, de modo a compreender cargas de trabalho elevadas. | Consola do Cloud SQL para MySQL, Cloud Monitoring | Use o Cloud SQL para MySQL para a monitorização, incluindo gráficos detalhados baseados no tempo e nos recursos. Use também o Cloud Monitoring para guardar métricas de monitorização específicas do MySQL e analisar registos para capacidades de monitorização avançadas. |
Registos de refazer | Registos de transações do Oracle que consistem em dois (ou mais) ficheiros definidos pré-atribuídos que armazenam todas as modificações de dados à medida que ocorrem. O objetivo do registo de repetição é proteger a base de dados em caso de falha de uma instância. | Registos de refazer | O MySQL também tem ficheiros de registos de repetição, que são usados durante a recuperação de falhas para corrigir os dados escritos pelo mecanismo de registos de repetição de transações incompletas. |
Arquive registos | Os registos de arquivo oferecem suporte para operações de cópia de segurança e replicação, entre outras. A Oracle escreve nos registos de arquivo (se ativados) após cada operação de comutação de registos de refazimento. | binlogs | Implementação do MySQL da retenção de registos de transações. Usado principalmente para fins de replicação (ativado por predefinição com o Cloud SQL). |
Ficheiro de controlo | O ficheiro de controlo do Oracle contém informações sobre a base de dados, como ficheiros de dados, nomes e localizações de registos de repetição, o número de sequência de registos atual e informações sobre o ponto de verificação da instância. | MySQL | A arquitetura do MySQL não inclui um ficheiro de controlo semelhante à implementação do Oracle. Isto é controlado através dos parâmetros do MySQL e da utilização do comando SHOW MASTER STATUS para ver a posição atual do registo binário. |
SCN | O SCN (número de alteração do sistema) da Oracle é o método principal de manter a consistência dos dados por todos os componentes da base de dados Oracle para satisfazer o modelo ACID de transação. | Número de sequência do registo | A implementação do MySQL para a consistência da base de dados usa o LSN (número de sequência de registo). |
AWR | O AWR (repositório de carga de trabalho automático) da Oracle é um relatório detalhado que fornece informações detalhadas sobre o desempenho da instância da base de dados Oracle e é considerado uma ferramenta de DBA para diagnósticos de desempenho. | performance_schema |
O MySQL não tem um relatório equivalente ao Oracle AWR, mas recolhe dados de desempenho recolhidos pelo performance_schema . Uma solução alternativa seria usar os painéis de controlo de desempenho do Workbench do MySQL. |
DBMS_SCHEDULER |
Utilitário Oracle usado para definir e sincronizar operações predefinidas. | EVENT_SCHEDULER |
Funcionalidade do agendador interno da base de dados MySQL. Por predefinição, esta funcionalidade está definida como OFF . |
Encriptação de dados transparente | Encripta os dados armazenados em discos como proteção de dados em repouso. | Norma de encriptação avançada do Cloud SQL | O Cloud SQL para MySQL usa o Advanced Encryption Standard (AES-256) de 256 bits para proteção de segurança de dados em repouso, bem como para dados em trânsito |
Compressão avançada | Para melhorar a área de armazenamento da base de dados, reduzir os custos de armazenamento e melhorar o desempenho da base de dados, a Oracle oferece capacidades de compressão avançadas de dados (tabelas/índices). | Compressão de tabelas InnoDB | O MySQL oferece compressão
de tabelas através da criação de uma tabela com o parâmetro ROW_FORMAT definido como COMPRESSED . Leia mais acerca da compressão
de índice. |
SQL Developer | GUI de SQL gratuita da Oracle para gerir e executar declarações SQL e PL/SQL (também pode ser usada com o MySQL). | MySQL Workbench | GUI de SQL gratuita do MySQL para gerir e executar declarações de código SQL e MySQL. |
Registo de alertas | Registo principal da Oracle para operações e erros gerais da base de dados. | Registo de erros do MySQL | Usa o visualizador de registos do Cloud Logging para monitorizar os registos de erros do MySQL |
Tabela DUAL |
Tabela especial da Oracle que contém principalmente valores de pseudocolunas, como SYSDATE ou USER |
Tabela DUAL | O MySQL permite que DUAL seja especificado como uma tabela em declarações SQL que não dependem de dados de nenhuma tabela. |
Tabela externa | O Oracle permite que os utilizadores criem tabelas externas com os dados de origem em ficheiros fora da base de dados. | Não suportado. | Sem equivalente direto. |
Ouvinte | Processo de rede da Oracle encarregado de ouvir as ligações de bases de dados recebidas | Redes autorizadas do Cloud SQL | O MySQL aceita ligações de origens remotas assim que forem permitidas na página de configuração de redes autorizadas do Cloud SQL |
TNSNAMES | Ficheiro de configuração de rede do Oracle que define endereços de bases de dados para estabelecer ligações através de alias de ligação. | Não existe | O MySQL aceita ligações externas através do nome de ligação da instância do Cloud SQL ou do endereço IP privado/público. O proxy do Cloud SQL é um método de acesso seguro adicional para estabelecer ligação ao Cloud SQL para MySQL (instâncias de segunda geração) sem ter de permitir endereços IP específicos nem configurar o SSL. |
Porta predefinida da instância | 1521 | Porta predefinida da instância | 3306 |
Link da base de dados | Objetos de esquema do Oracle que podem ser usados para interagir com objetos de base de dados locais/remotos. | Não suportado | Como alternativa, use o código da aplicação para se ligar e obter dados de uma base de dados remota. |
Diferenças na terminologia entre o Oracle 12c e o Cloud SQL para MySQL
Oracle 12c | Descrição | Cloud SQL para MySQL | Principais diferenças |
---|---|---|---|
Instância | A capacidade multi-inquilino introduzida na instância do Oracle 12c que pode conter várias bases de dados como uma base de dados conectável (PDB), ao contrário do Oracle 11g, onde uma instância do Oracle só pode obter uma base de dados. | Instância | O Cloud SQL para MySQL pode conter várias bases de dados com nomes diferentes, o que permite servir vários serviços e aplicações. |
CDB | Uma base de dados de contentores (CDB) multi-inquilino pode suportar uma ou mais PDBs, enquanto os objetos globais da CDB (afetam todas as PDBs) podem ser criados, como funções. | Instância do MySQL | A instância do MySQL é comparável ao CDB da Oracle. Ambos fornecem uma camada do sistema para as PDBs. |
PDB | As PDBs (bases de dados conectáveis) podem ser usadas para isolar serviços e aplicações uns dos outros e podem ser usadas como uma coleção portátil de esquemas. | Bases de dados/esquemas do MySQL | Uma base de dados do MySQL pode servir vários serviços e aplicações, bem como muitos utilizadores da base de dados. |
Sequências de sessões | A partir do Oracle 12c, as sequências podem ser criadas ao nível da sessão (devolvem valores únicos apenas numa sessão) ou ao nível global (por exemplo, quando usa tabelas temporárias). | Auto increment |
As sequências não são suportadas pelo MySQL, mas os utilizadores podem usar a propriedade da coluna AUTO_INCREMENT como solução alternativa. |
Colunas de identidade | O tipo IDENTITY do Oracle 12c gera uma sequência e associa-a a uma coluna de tabela sem necessidade de criar manualmente um objeto de sequência separado. |
Incremento automático | Use a propriedade da coluna AUTO_INCREMENT para simular a mesma funcionalidade que a coluna de identidade do Oracle 12c (uma solução alternativa à funcionalidade de geração de sequências automática). |
Fragmentação | A fragmentação da Oracle é uma solução em que uma base de dados Oracle é dividida em várias bases de dados mais pequenas (fragmentos) para permitir a escalabilidade, a disponibilidade e a geodistribuição para ambientes OLTP. | Não suportado (como funcionalidade) | O MySQL não tem uma funcionalidade de divisão equivalente. A divisão em partições pode ser implementada através do MySQL (como plataforma de dados) com uma camada de aplicação de apoio. |
Base de dados na memória | A Oracle oferece um conjunto de funcionalidades que podem melhorar o desempenho da base de dados para o processamento de transações online (OLTP), bem como para cargas de trabalho mistas. | Não suportado | O MySQL não tem uma funcionalidade equivalente. Pode usar o Memorystore como alternativa. |
Ocultação | Como parte das funcionalidades de segurança avançadas da Oracle, a ocultação pode realizar a ocultação de colunas para impedir que os dados confidenciais sejam apresentados por utilizadores e aplicações. | Não suportado | O MySQL não tem uma funcionalidade equivalente. |
Funcionalidade
Embora as bases de dados Oracle 11g/12c e Cloud SQL para MySQL funcionem em arquiteturas diferentes (infraestrutura e linguagens processuais alargadas), partilham os mesmos aspetos fundamentais de uma base de dados relacional. Suportam objetos de base de dados, cargas de trabalho de concorrência multiutilizador e transações (compatibilidade com ACID). Também gerem contestações de bloqueio que suportam vários níveis de isolamento (com base nas necessidades da empresa) e atendem aos requisitos de aplicações contínuos como um armazenamento de dados relacionais para operações de processamento de transações online (OLTP) e processamento analítico online (OLAP).
A secção seguinte apresenta uma vista geral de algumas das principais diferenças funcionais entre o Oracle e o Cloud SQL para MySQL. Em alguns casos, quando necessário, a secção inclui comparações técnicas detalhadas.
Criar e ver bases de dados existentes
Oracle 11g/12c | Cloud SQL para MySQL 5.7 |
---|---|
Normalmente, cria bases de dados e vê as existentes através do utilitário Oracle
Database
Creation Assistant (DBCA). As bases de dados ou as instâncias criadas manualmente requerem que especifique parâmetros adicionais:SQL> CREATE DATABASE ORADB USER SYS IDENTIFIED BY password USER SYSTEM IDENTIFIED BY password EXTENT MANAGEMENT LOCAL DEFAULT TEMPORARY TABLESPACE temp UNDO TABLESPACE undotbs1 DEFAULT TABLESPACE users; |
Use uma declaração do formulário CREATE DATABASE Name; , como neste exemplo:
mysql> CREATE DATABASE MYSQLDB; |
Oracle 12c | Cloud SQL para MySQL 5.7 |
No Oracle 12c, pode criar PDBs a partir da seed, quer a partir de um modelo de base de dados de contentor (CDB) ou clonando uma PDB a partir de uma PDB existente. Usa vários parâmetros:SQL> CREATE PLUGGABLE DATABASE PDB ADMIN USER usr IDENTIFIED BY passwd ROLES = (dba) DEFAULT TABLESPACE sales DATAFILE '/disk1/ora/dbs/db/db.dbf' SIZE 250M AUTOEXTEND ON FILE_NAME_CONVERT = ('/disk1/oracle/dbs/pdbseed/', '/disk1/oracle/dbs/salespdb/') STORAGE (MAXSIZE 2G) PATH_PREFIX = '/disk1/oracle/dbs/salespdb/'; |
Use uma declaração do formulário CREATE DATABASE Name; , como neste exemplo:mysql> CREATE DATABASE MYSQLDB; |
Listar todas as PDBs:SQL> SHOW is PDBS; |
Apresentar todas as bases de dados existentes:mysql> SHOW DATABASES; |
Associe a um PDB diferente:SQL> ALTER SESSION SET CONTAINER=pdb; |
Associe a uma base de dados diferente:mysql> use databaseName; mysql> \u databaseName; |
Abra ou feche um PDB específico (abrir/só de leitura):SQL> ALTER PLUGGABLE DATABASE pdb CLOSE; |
Não suportado para uma única base de dados. Todas as bases de dados estão na mesma instância do Cloud SQL para MySQL. Por isso, estão todas ativas ou todas inativas. |
Gerir uma base de dados através da consola do Cloud SQL
Na Google Cloud consola, aceda a Armazenamento > SQL > Instância > Bases de dados > Ver/criar.
Bases de dados e esquemas do sistema
As instâncias da base de dados Oracle obtêm determinados esquemas do sistema, por exemplo,
SYS/SYSTEM
, com a função de proprietários de objetos de metadados da base de dados.
Por outro lado, o MySQL contém várias bases de dados do sistema (ao contrário dos esquemas da Oracle), que servem a camada de metadados (tenha em atenção que os nomes das bases de dados são sensíveis a maiúsculas e minúsculas):
-
A base de dados do sistema
mysql
contém tabelas que armazenam informações necessárias pelo servidor MySQL durante a execução, como as seguintes:- Tabelas de privilégios do sistema
- Tabelas de informações de objetos
- Registe tabelas do sistema
- Tabelas do sistema de replicação
- Tabelas do sistema do otimizador
- Tabelas do sistema de fuso horário
-
INFORMATION_SCHEMA
serve como o dicionário de dados da base de dados principal e o catálogo do sistema. Fornece acesso aos metadados da base de dados, que são informações internas da base de dados sobre o servidor MySQL, como o nome de uma base de dados ou de uma tabela, o tipo de dados da coluna e os privilégios de acesso. -
Uma base de dados do sistema que recolhe informações estatísticas sobre a instância do MySQL. A base de dados do sistema
performance_schema
contém métricas para a monitorização da execução do servidor a um nível muito detalhado. O esquema fornece inspeção de execução interna do servidor no tempo de execução e pode servir como a principal fonte para analisar problemas de desempenho da base de dados.O
performance_schema
não está ativado por predefinição através do Cloud SQL para MySQL. Para ativar o esquema, use a ferramenta de linha de comandosgcloud
:gcloud sql instances patch INSTANCE_NAME --database-flags performance_schema=on
Para concluir esta configuração, tem de reiniciar a instância. Não pode modificar o parâmetro
--database-flags
através da página de flags da base de dados do Cloud SQL para MySQL na consola Google Cloud . -
O esquema
sys
existe desde a versão 5.5.7 do MySQL e contém principalmente visualizações nas tabelas do sistemaperformance_schema
. Este esquema fornece um conjunto de vistas mais legível que resume os dadosperformance_schema
num formato mais facilmente compreensível. O esquemasys
também contém vários procedimentos e funções armazenados para realizar operações como a configuraçãoperformance_schema
e a geração de relatórios de diagnóstico.O esquema
sys
apresenta informações apenas quando a opçãoperformance_schema
está ativada.
Visualizar metadados e vistas dinâmicas do sistema
Esta secção fornece uma vista geral de algumas das tabelas de metadados mais comuns e vistas dinâmicas do sistema usadas no Oracle e os respetivos objetos de base de dados no Cloud SQL para MySQL versão 5.7.
A Oracle oferece centenas de tabelas e vistas de metadados do sistema, enquanto o MySQL só tem várias dezenas. Para cada caso, pode haver mais do que um objeto de base de dados, que cumpre um propósito específico.
A Oracle oferece vários níveis de objetos de metadados, cada um dos quais requer privilégios diferentes:
USER_TableName
: pode ser visto pelo utilizador.ALL_TableName
: pode ser visto por todos os utilizadores.DBA_TableName
: só pode ser visto por utilizadores com o privilégio de DBA, comoSYS
eSYSTEM
.
Para as vistas de desempenho dinâmicas, a Oracle usa os prefixos V$
e GV$
. Para que um utilizador do MySQL possa ver tabelas ou vistas de metadados do sistema, tem de ter autorizações específicas em objetos do sistema. Para mais informações sobre segurança, consulte a secção Segurança.
Tipo de metadados | Tabela/vista Oracle | Tabela/vista/apresentação do MySQL (CMD do MySQL) |
---|---|---|
Sessões abertas | V$SESSION |
SHOW PROCESSLIST INFORMATION_SCHEMA.PROCESSLIST performance_schema.threads |
Executar transações | V$TRANSACTION |
INFORMATION_SCHEMA.INNODB_TRX |
Objetos da base de dados | DBA_OBJECTS |
Não suportado. Consulte cada objeto pelo respetivo tipo. |
Tabelas | DBA_TABLES |
INFORMATION_SCHEMA.TABLES INFORMATION_SCHEMA.INNODB_SYS_TABLES |
Colunas da tabela | DBA_TAB_COLUMNS |
INFORMATION_SCHEMA.COLUMNS INFORMATION_SCHEMA.INNODB_SYS_COLUMNS |
Privilégios de tabelas e colunas | TABLE_PRIVILEGES DBA_COL_PRIVS ROLE_TAB_PRIVS |
INFORMATION_SCHEMA.COLUMN_PRIVILEGES |
Partições | DBA_TAB_PARTITIONS DBA_TAB_SUBPARTITIONS |
INFORMATION_SCHEMA.PARTITIONS SHOW CREATE TABLE TableName SHOW TABLE STATUS LIKE 'TableName' |
Visualizações | DBA_VIEWS |
INFORMATION_SCHEMA.VIEWS |
Restrições | DBA_CONSTRAINTS |
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS SHOW CREATE TABLE TableName |
Índices | DBA_INDEXES DBA_PART_INDEXES |
INFORMATION_SCHEMA.STATISTICS INFORMATION_SCHEMA.INNODB_SYS_INDEXES INFORMATION_SCHEMA.KEY_COLUMN_USAGE |
Vistas materializadas | DBA_MVIEWS |
Não suportado |
Procedimentos armazenados | DBA_PROCEDURES |
INFORMATION_SCHEMA.ROUTINES |
Funções armazenadas | DBA_PROCEDURES |
INFORMATION_SCHEMA.ROUTINES |
Acionadores | DBA_TRIGGERS |
INFORMATION_SCHEMA.TRIGGERS |
Utilizadores | DBA_USERS |
mysql.user |
Privilégios do utilizador | DBA_SYS_PRIVS DBA_ROLE_PRIVS SESSION_PRIVS |
INFORMATION_SCHEMA.USER_PRIVILEGES |
Empregos/ Programador |
DBA_JOBS DBA_JOBS_RUNNING DBA_SCHEDULER_JOBS DBA_SCHEDULER_JOB_LOG |
INFORMATION_SCHEMA.EVENTS |
Tablespaces | DBA_TABLESPACES |
INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES |
Ficheiros de dados | DBA_DATA_FILES |
INFORMATION_SCHEMA.FILES INFORMATION_SCHEMA.INNODB_SYS_DATAFILES |
Sinónimos | DBA_SYNONYMS |
Não suportado |
Sequências | DBA_SEQUENCES |
Não suportado |
Links de base de dados | DBA_DB_LINKS |
Não suportado |
Estatísticas | DBA_TAB_STATISTICS DBA_TAB_COL_STATISTICS DBA_SQLTUNE_STATISTICS DBA_CPU_USAGE_STATISTICS |
INFORMATION_SCHEMA.STATISTICS INFORMATION_SCHEMA.KEY_COLUMN_USAGE SHOW INDEXES FROM TableName |
Fechaduras | DBA_LOCK DBA_DDL_LOCKS DBA_DML_LOCKS V$SESSION_BLOCKERS V$LOCKED_OBJECT |
INFORMATION_SCHEMA.INNODB_LOCKS INFORMATION_SCHEMA.INNODB_LOCK_WAITS INFORMATION_SCHEMA.INNODB_TRX performance_schema.metadata_locks performance_schema.rwlock_instances SHOW PROCESSLIST |
Parâmetros da base de dados | V$PARAMETER V$NLS_PARAMETERS SHOW PARAMETER Param |
performance_schema.global_variables performance_schema.session_variables INFORMATION_SCHEMA.CHARACTER_SETS SHOW VARIABLES LIKE '%variable%'; |
Segmentos | DBA_SEGMENTS |
A tabela de segmentos não é suportada. Consulte cada objeto pelo respetivo tipo. |
Funções | DBA_ROLES DBA_ROLE_PRIVS USER_ROLE_PRIVS |
Roles not supported use instead: information_schema.COLUMN_PRIVILEGES information_schema.SCHEMA_PRIVILEGES information_schema.TABLE_PRIVILEGES information_schema.USER_PRIVILEGES mysql.columns_priv mysql.procs_priv mysql.proxies_priv mysql.tables_priv |
Histórico de sessões | V$ACTIVE_SESSION_HISTORY DBA_HIST_* |
sys.statement_analysis performance_schema.events_stages_history performance_schema.events_stages_history_long performance_schema.events_statements_history performance_schema.events_statements_history_long performance_schema.events_transactions_history performance_schema.events_transactions_history_long performance_schema.events_waits_history performance_schema.events_waits_history_long |
Versão | V$VERSION |
sys.version SHOW VARIABLES LIKE '%version%'; |
Eventos de espera | V$WAITCLASSMETRIC V$WAITCLASSMETRIC_HISTORY V$WAITSTAT V$WAIT_CHAINS |
performance_schema.events_waits_current performance_schema.events_waits_history performance_schema.events_waits_history_long sys.innodb_lock_waits sys.io_global_by_wait_by_bytes sys.io_global_by_wait_by_latency sys.schema_table_lock_waits sys.wait_classes_global_by_avg_latency sys.wait_classes_global_by_latency sys.waits_by_host_by_latency sys.waits_by_user_by_latency sys.waits_global_by_latency |
Ajuste e análise de SQL |
V$SQL V$SQLAREA V$SESS_IO V$SYSSTAT V$STATNAME V$OSSTAT V$ACTIVE_SESSION_HISTORY V$SESSION_WAIT V$SESSION_WAIT_CLASS V$SYSTEM_WAIT_CLASS V$LATCH V$SYS_OPTIMIZER_ENV V$SQL_PLAN V$SQL_PLAN_STATISTICS |
performance_schema.events_statements_current performance_schema.events_statements_history performance_schema.events_statements_history_long sys.statement_analysis sys.host_summary_by_statement_latency sys.host_summary_by_statement_type sys.statements_with_errors_or_warnings sys.statements_with_full_table_scans sys.statements_with_runtimes_in_95th_percentile sys.statements_with_sorting sys.statements_with_temp_tables sys.user_summary_by_statement_latency sys.user_summary_by_statement_type slow-query-log general-log SHOW STATUS LIKE '%StatusName%'; |
Ajuste da memória da instância |
V$SGA V$SGASTAT V$SGAINFO V$SGA_CURRENT_RESIZE_OPS V$SGA_RESIZE_OPS V$SGA_DYNAMIC_COMPONENTS V$SGA_DYNAMIC_FREE_MEMORY V$PGASTAT |
information_schema.INNODB_CMPMEM_RESET information_schema.INNODB_CMPMEM performance_schema.memory_summary_by_account_by_event_name performance_schema.memory_summary_by_host_by_event_name performance_schema.memory_summary_by_thread_by_event_name performance_schema.memory_summary_by_user_by_event_name performance_schema.memory_summary_global_by_event_name performance_schema.replication_group_member_stats performance_schema.replication_group_members sys.memory_by_host_by_current_bytes sys.memory_by_thread_by_current_bytes sys.memory_by_user_by_current_bytes sys.memory_global_by_current_bytes sys.memory_global_total |
Motores de armazenamento do MySQL
Ao contrário de muitos outros SGBDRs (incluindo o da Oracle), o MySQL pode funcionar de forma polimórfica devido ao seu sistema de armazenamento conectável. A arquitetura do motor de armazenamento conectável do MySQL permite que um administrador da base de dados selecione um motor de armazenamento especializado para uma necessidade específica da aplicação.
O componente do motor de armazenamento conectável do MySQL no servidor de base de dados MySQL é responsável por realizar as operações de E/S de dados, incluindo o armazenamento dos dados nos discos ou nas memórias intermédias. A arquitetura do motor de armazenamento conectável oferece um conjunto padrão de serviços de gestão e apoio técnico comuns a todos os motores de armazenamento subjacentes.
A partir da versão 5.5 do MySQL, o motor de armazenamento predefinido é o motor de armazenamento InnoDB, enquanto o InnoDB também processa as tabelas temporárias. Pode configurar os motores de armazenamento durante a CREATE
ou a ALTER
da tabela, como no seguinte exemplo:
mysql> SHOW CREATE TABLE JOBS \G;
O resultado é o seguinte:
*************************** 1. row *************************** Table: JOBS Create Table: CREATE TABLE `JOBS` ( `JOB_ID` varchar(10) NOT NULL, `JOB_TITLE` varchar(35) NOT NULL, `MIN_SALARY` decimal(6,0) DEFAULT NULL, `MAX_SALARY` decimal(6,0) DEFAULT NULL, PRIMARY KEY (`JOB_ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
Para mais informações, consulte os diferentes motores de armazenamento do MySQL.
Pode ver a configuração do motor de armazenamento através da seguinte consulta:
mysql> SHOW VARIABLES LIKE '%storage%';
O resultado é semelhante ao seguinte:
+----------------------------------+--------+ | Variable_name | Value | +----------------------------------+--------+ | default_storage_engine | InnoDB | | default_tmp_storage_engine | InnoDB | | disabled_storage_engines | | | enforce_storage_engine | Innodb | | internal_tmp_disk_storage_engine | InnoDB | +----------------------------------+--------+
Pode ver todos os motores de armazenamento incorporados:
mysql> SHOW STORAGE ENGINES;
O resultado é semelhante ao seguinte:
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | CSV | YES | CSV storage engine | NO | NO | NO | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
Tenha em atenção que o InnoDB é o motor de armazenamento predefinido e o único motor de armazenamento compatível com transações (em conformidade com ACID). Uma vez que o InnoDB é o único motor de armazenamento que se aproxima da funcionalidade do Oracle, recomendamos que use o InnoDB em todos os momentos. O Cloud SQL para MySQL de segunda geração só suporta o motor de armazenamento InnoDB.
Parâmetros do sistema
As bases de dados Oracle e Cloud SQL para MySQL podem ser configuradas especificamente para alcançar determinadas funcionalidades além da configuração predefinida. Para
alterar os parâmetros de configuração no Oracle, são necessárias determinadas autorizações de administração (principalmente as autorizações de utilizador SYS/SYSTEM
).
Segue-se um exemplo de alteração da configuração do Oracle através da declaração ALTER SYSTEM
. Neste exemplo, o utilizador altera o parâmetro "maximum
attempts for failed logins" apenas ao nível da configuração spfile
(com a modificação válida apenas após um reinício):
SQL> ALTER SYSTEM SET SEC_MAX_FAILED_LOGIN_ATTEMPTS=2 SCOPE=spfile;
No exemplo seguinte, o utilizador está a pedir para ver simplesmente o valor do parâmetro Oracle:
SQL> SHOW PARAMETER SEC_MAX_FAILED_LOGIN_ATTEMPTS;
O resultado é semelhante ao seguinte:
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ sec_max_failed_login_attempts integer 2
A modificação de parâmetros da Oracle funciona em três âmbitos:
- SPFILE: as modificações dos parâmetros são escritas no Oracle
spfile
, sendo necessário reiniciar a instância para que o parâmetro entre em vigor. - MEMORY: as modificações de parâmetros são aplicadas apenas na camada de memória, enquanto não é permitida nenhuma alteração de parâmetros estáticos.
- BOTH: as modificações de parâmetros são aplicadas no ficheiro de parâmetros do servidor e na memória da instância, onde não é permitida nenhuma alteração de parâmetros estáticos.
Flags de configuração do Cloud SQL para MySQL
Pode modificar os parâmetros do sistema do Cloud SQL para MySQL através das flags de configuração na Google Cloud consola, na CLI gcloud ou no CURL. Consulte a lista completa de todos os parâmetros suportados pelo Cloud SQL para MySQL que pode alterar.
Os parâmetros do MySQL podem ser divididos em vários âmbitos:
- Parâmetros dinâmicos: podem ser alterados no momento da execução.
- Parâmetros estáticos: requerem um reinício da instância para entrarem em vigor.
- Parâmetros globais: têm um efeito global em todas as sessões atuais e futuras.
- Parâmetros da sessão: podem ser alterados ao nível da sessão apenas durante a duração da sessão atual, isolados de outras sessões.
O parâmetro de memória do Cloud SQL para MySQL
innodb_buffer_pool_size
(um dos parâmetros cruciais a ter em conta ao planear e dimensionar um ambiente do MySQL) é determinado pelo tipo de instância e não pode ser alterado através das flags de configuração nem de qualquer outro método. Por exemplo:
- O tipo de instância
db-n1-standard-1
tem 1,4 GB de alocação de memória. - O tipo de instância
db-n1-highmem-8
tem 38 GB de alocação de memória.
Exemplos de alteração dos parâmetros do Cloud SQL para MySQL
Consola
Use a Google Cloud consola para ativar o parâmetro event_scheduler
.
Aceda à página Editar instância do Cloud Storage.
Em Sinalizações, clique em Adicionar item e pesquise
event_scheduler
, como na captura de ecrã seguinte.
gcloud
Use a CLI gcloud para ativar o parâmetro
event_scheduler
:gcloud sql instances patch INSTANCE_NAME \ --database-flags event_scheduler=on
O resultado é o seguinte:
WARNING: This patch modifies database flag values, which may require your instance to be restarted. Check the list of supported flags - /sql/docs/mysql/flags - to see if your instance will be restarted when this patch is submitted. Do you want to continue (Y/n)?
Sessão do MySQL
Desative o modo AUTOCOMMIT
ao nível da sessão. Esta alteração permanece em vigor para a sessão atual e é válida apenas durante a duração da sessão.
Mostrar variáveis como
autocommit
:mysql> SHOW VARIABLES LIKE '%autoc%';
Vê o seguinte resultado, em que
autocommit
éON
:+---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | ON | +---------------+-------+
Desative a
autocommit
:mysql> SET autocommit=off;
Mostrar variáveis como
autocommit
:mysql> SHOW VARIABLES LIKE '%autoc%';
Vê o seguinte resultado, em que
autocommit
éOFF
:+---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | OFF | +---------------+-------+
Transações e níveis de isolamento
Esta secção descreve as principais diferenças entre o Oracle e o Cloud SQL para MySQL relevantes para as migrações de transações e de nível de isolamento.
Modo de aplicação
Por predefinição, o Oracle funciona no modo de não confirmação automática, em que cada transação DML tem de ser determinada com declarações COMMIT/ROLLBACK
. Uma das diferenças fundamentais entre o Oracle e o MySQL é que o MySQL funciona por predefinição no modo de confirmação automática, e cada transação DML é confirmada automaticamente com a especificação explícita das declarações COMMIT/ROLLBACK
.
Para forçar o MySQL a funcionar num modo sem confirmação automática, existem várias opções:
- Quando gere transações no âmbito de procedimentos armazenados, use a cláusula
START TRANSACTION
para introduzir o mesmo modo transacional que o Oracle. Use a seguinte declaração para definir o parâmetro do sistema
autocommit
comoOFF
ao nível da sessão e use explicitamente declaraçõesCOMMIT/ROLLBACK
nas transações DML:mysql> SET autocommit=off;
Níveis de isolamento
A norma SQL ANSI/ISO (SQL92) define quatro níveis de isolamento. Cada nível oferece uma abordagem diferente para processar a execução concorrente de transações da base de dados:
- Leitura não comprometida: uma transação processada atualmente pode ver dados não comprometidos feitos pela outra transação. Se for feita uma reversão, todos os dados são restaurados para o estado anterior.
- Read Committed: uma transação só vê alterações de dados que foram confirmadas; não são possíveis alterações não confirmadas("dirty reads").
- Leitura repetível: uma transação pode ver as alterações feitas pela outra transação apenas depois de ambas as transações terem emitido um
COMMIT
ou ambas terem sido revertidas. - Serializável: o nível de isolamento mais rigoroso/forte. Este nível bloqueia todos os registos aos quais se acede e bloqueia o recurso para que não seja possível anexar registos à tabela.
Os níveis de isolamento de transações gerem a visibilidade dos dados alterados, conforme visto por outras transações em execução. Além disso, quando vários transações simultâneas acedem aos mesmos dados, o nível de isolamento de transações selecionado afeta a forma como as diferentes transações interagem.
O Oracle suporta os seguintes níveis de isolamento:
- Read Committed (predefinição)
- Serializável
- Só de leitura (não faz parte da norma ANSI/ISO SQL [SQL92])
MVCC (Multiversion Concurrency Control) da Oracle:
- O Oracle usa o mecanismo MVCC para fornecer consistência de leitura automática em toda a base de dados e em todas as sessões.
- O Oracle baseia-se no número de alteração do sistema (SCN) da transação atual para obter uma vista consistente da base de dados. Por conseguinte, todas as consultas da base de dados só devolvem dados comprometidos relativamente ao SCN no momento da execução da consulta.
- Os níveis de isolamento podem ser alterados ao nível da transação e da sessão.
Segue-se um exemplo de definição de níveis de isolamento:
-- Transaction Level
SQL> SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SQL> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SQL> SET TRANSACTION READ ONLY;
-- Session Level
SQL> ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE;
SQL> ALTER SESSION SET ISOLATION_LEVEL = READ COMMITTED;
O Cloud SQL para MySQL, tal como o Oracle, suporta os seguintes quatro níveis de isolamento de transações especificados na norma ANSI SQL:92:
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ (default)
SERIALIZABLE
O nível de isolamento predefinido do Cloud SQL para MySQL é REPEATABLE READ
. Todos os
novos dados ficam disponíveis para ambas apenas depois de ambas as transações emitirem um comando COMMIT
. Estes níveis de isolamento podem ser alterados ao nível SESSION
e ao nível GLOBAL
(a modificação ao nível global está atualmente na fase beta com flags de configuração).
Para validar os níveis de isolamento atuais ao nível SESSION
e GLOBAL
, use a seguinte declaração:
mysql> SELECT @@GLOBAL.tx_isolation, @@tx_isolation;
O resultado é o seguinte:
+-----------------------+-----------------+ | @@GLOBAL.tx_isolation | @@tx_isolation | +-----------------------+-----------------+ | REPEATABLE-READ | REPEATABLE-READ | +-----------------------+-----------------+
Pode modificar a sintaxe do nível de isolamento da seguinte forma:
SET [SESSION] TRANSACTION ISOLATION LEVEL [READ WRITE | READ ONLY]
| REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE]
Além disso, pode modificar o nível de isolamento ao nível de SESSION
:
mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
-- Verify
mysql> SELECT @@GLOBAL.tx_isolation, @@tx_isolation;
O resultado é o seguinte:
+-----------------------+------------------+ | @@GLOBAL.tx_isolation | @@tx_isolation | +-----------------------+------------------+ | REPEATABLE-READ | READ-UNCOMMITTED | +-----------------------+------------------+
Estrutura das transações do Cloud SQL para MySQL
Sintaxe de Transações:
START TRANSACTION [transaction_characteristic [, transaction_characteristic] ...] |
---|
As transações podem ser implementadas com START TRANSACTION
ou BEGIN
.
A opção WITH CONSISTENT SNAPSHOT
inicia uma transação READ
consistente, que é efetivamente igual à emissão de um START TRANSACTION
, seguido de um SELECT
de qualquer tabela. A cláusula WITH CONSISTENT SNAPSHOT
que inicia uma leitura
consistente READ
(uma operação READ
que usa informações de instantâneos para apresentar
resultados da consulta com base num ponto no tempo) não altera o nível de
isolamento da transação e só é suportada pelo nível de isolamento REPEATABLE READ
.
Uma leitura consistente READ
usa informações de resumo para disponibilizar resultados de consultas
com base num momento específico, independentemente das modificações realizadas por transações
concorrentes. Se os dados consultados tiverem sido alterados por outra transação, os dados originais são reconstruídos através do registo de anulação. Isto ajuda a evitar problemas de bloqueio que podem reduzir a concorrência.
Com o nível de isolamento REPEATABLE READ
, o instantâneo baseia-se na hora em que a primeira operação READ
é realizada. Com o nível de isolamento READ COMMITTED
, a imagem instantânea é reposta para a hora de cada operação READ
consistente.
Segue-se um exemplo da definição do nível de transação e isolamento:
mysql> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
mysql> START TRANSACTION;
mysql> INSERT INTO tbl1 VALUES (1, 'A');
mysql> UPDATE tbl2 SET col1 = 'Done' WHERE KeyColumn = 1;
mysql> COMMIT;