Este documento es parte de una serie que proporciona información clave y orientación relacionada con la planificación y la realización de migraciones de bases de datos de Oracle® 11g o 12c a instancias de segunda generación con versión 5.7 de Cloud SQL para MySQL. En la serie, se incluyen las siguientes partes:
- Migra usuarios de Oracle a Cloud SQL para MySQL: terminología y funcionalidad (este documento)
- Migra usuarios de Oracle a Cloud SQL para MySQL: tipos de datos, usuarios y tablas
- Migra usuarios de Oracle a Cloud SQL para MySQL: consultas, procedimientos almacenados, funciones y activadores
- Migra usuarios de Oracle a Cloud SQL para MySQL: seguridad, operaciones, supervisión y registro
Terminología
En esta sección, se detallan las similitudes y las diferencias en la terminología de la base de datos entre Oracle y Cloud SQL para MySQL. Revisa y compara los aspectos principales de cada una de las plataformas de bases de datos. En la comparación, se hace una distinción entre las versiones 11g y 12c de Oracle debido a diferencias arquitectónicas (por ejemplo, Oracle 12c presenta la característica de multiusuarios). La versión de Cloud SQL para MySQL a la que se hace referencia aquí es la 5.7.x.
Diferencias en la terminología entre Oracle 11g y Cloud SQL para MySQL
Oracle 11g | Descripción | Cloud SQL para MySQL | Diferencias clave |
---|---|---|---|
Instancia | Una sola instancia de Oracle 11g puede contener solo una base de datos. | Instancia | Una instancia de MySQL puede contener varias bases de datos. |
Base de datos | Una base de datos califica como una sola instancia (el nombre de la base de datos es idéntico al nombre de la instancia). | Base de datos | Varias bases de datos, o una sola, entregan varias aplicaciones. |
Esquema | El esquema y los usuarios son idénticos porque se los considera propietarios de los objetos de la base de datos (se puede crear un usuario sin especificarlo ni asignarlo a un esquema). | Esquema | Un esquema se conoce como una base de datos, mientras que los objetos de la base de datos se crean en un esquema o una base de datos determinados. |
Usuario | Es idéntico al esquema porque ambos son propietarios de objetos de base de datos, por ejemplo, instancia → base de datos → esquemas/usuarios → objetos de base de datos. | Usuario | Un usuario de base de datos con permisos específicos para conectar o modificar objetos de base de datos en esquemas o bases de datos específicos, por ejemplo, instancia → bases de datos/esquemas → objetos de base de datos. |
Función | Conjunto definido de permisos de la base de datos que se puede encadenar como un grupo y se puede asignar a los usuarios de la base de datos. | Privilegios de MySQL | MySQL 5.7 no admite la administración de funciones. Los permisos se pueden configurar mediante la cláusula GRANT para que los usuarios tengan privilegios en los objetos de la base de datos en diferentes niveles (LECTURA/ESCRITURA, etcétera). |
Usuarios administradores/del sistema | Usuarios administradores de Oracle con el nivel de acceso más alto:SYS SYSTEM |
Superusuarios | Una vez implementado, Cloud SQL para MySQL tiene el usuario root@'%' (puede conectarse desde cualquier host) y un usuario adicional llamado mysql.sys , que puede conectarse solo desde el localhost. |
Diccionario/metadatos | Oracle usa las siguientes tablas de metadatos:USER_TableName ALL_TableName DBA_TableName |
Diccionario/metadatos | MySQL usa varias bases de datos/esquemas para diccionario/metadatos:MYSQL INFORMATION_SCHEMA PERFORMANCE_SCHEMA SYSCada una de estas bases de datos también son bases de datos del sistema y se crean con cada implementación de Cloud SQL para MySQL. |
Vistas dinámicas del sistema | Vistas dinámicas de Oracle:V$ViewName |
Vistas dinámicas del sistema | Las vistas dinámicas de MySQL se pueden encontrar en varias de las bases de datos del sistema:INFORMATION_SCHEMA PERFORMANCE_SCHEMA SYS |
Espacio de tabla | Las estructuras de almacenamiento lógicas principales de las bases de datos de Oracle; cada espacio de tabla puede contener uno o más archivos de datos. | Espacio de tabla | Al igual que en Oracle, un espacio de tabla de MySQL es una unidad lógica, pero representa solo una tabla, a diferencia del espacio de tabla de Oracle, que puede tener varios archivos de datos (contiene datos para varias tablas). MySQL admite la creación de un espacio de tabla nuevo con un archivo de datos asignado y, luego, se puede crear una tabla nueva conectada al espacio de tabla recién creado. Ten en cuenta que la configuración de los espacios de tabla, como el tamaño y los límites, se establece mediante los parámetros de la base de datos y no durante la creación de los espacios de tabla. |
Archivos de datos | Los elementos físicos de una base de datos de Oracle que contienen los datos y se definen en un espacio de tabla específico. Un único archivo de datos se define por el tamaño inicial y el tamaño máximo, y puede contener datos para varias tablas. Los archivos de datos de Oracle usan el sufijo .dbf (no obligatorio). |
Archivos de datos | Cloud SQL para MySQL usa el parámetro innodb_file_per_table con el valor “ON ” (predeterminado); esta configuración genera un archivo de datos nuevo para cada tabla y un espacio de tabla dedicado.Los archivos de datos de MySQL usan archivos .ibd (datos) y .frm (metadatos). |
Espacio de tabla del sistema | Contiene las tablas del diccionario de datos y los objetos de vistas para toda la base de datos de Oracle. | Espacio de tabla del sistema | Igual que Oracle, contiene las tablas de diccionario/metadatos. Almacenado en el espacio de tabla innodb_system conectado al archivo de datos ibdata1 . |
Espacio de tabla temporal | Contiene objetos de esquema válidos por la duración de una sesión; además, admite operaciones en ejecución que no caben en la memoria del servidor. | Espacio de tabla temporal | El propósito es idéntico al de Oracle, almacenado en el espacio de tabla innodb_temporary de MySQL conectado al archivo de datos ibtmp1 . |
Espacio de tabla para deshacer |
Un tipo especial de espacio de tabla permanente que usa Oracle a fin de administrar las operaciones de reversión cuando se ejecuta la base de datos en el modo de administración para deshacer automático (predeterminado). | Espacio de tabla para deshacer | Al igual que en Oracle, el espacio de tabla de MySQL para deshacer contiene registros de deshacer con fines de reversión. De forma predeterminada, esta opción se establece en OFF y se menciona como obsoleta para las versiones futuras de MySQL. |
ASM | La Administración automática de almacenamiento de Oracle es un administrador de discos y sistema de archivos de base de datos integrado y de alto rendimiento que se ejecuta de forma automática mediante una base de datos de Oracle configurada con ASM. | No compatible | MySQL usa el término motores de almacenamiento para describir diferentes implementaciones de control de datos, pero no es compatible con Oracle ASM. Cloud SQL para MySQL es compatible con muchas características que proporcionan automatización del almacenamiento, como el aumento de almacenamiento automático, el rendimiento y la escalabilidad. |
Tablas/vistas | Objetos de base de datos fundamentales creados por el usuario. | Tablas/vistas | Idénticas a Oracle. |
Vistas materializadas | Se definen con instrucciones de SQL específicas y se pueden actualizar de forma manual o automática según opciones de configuración específicas. | No compatible con MySQL | Como solución alternativa, se pueden usar activadores o vistas en lugar de las vistas materializadas de Oracle. |
Secuencia | Generador de valor único de Oracle. | Incremento automático | MySQL no admite secuencias de Oracle; usa AUTO_INCREMENT como una solución alternativa a la funcionalidad de generación automática de secuencias. |
Sinónimo | Objetos de base de datos de Oracle que sirven como identificadores alternativos para otros objetos de base de datos. | No compatible | MySQL no admite el sinónimo de Oracle; como solución alternativa, las vistas se pueden usar si se configuran los permisos adecuados. |
Partición | Oracle proporciona muchas soluciones de partición para dividir tablas grandes en partes administradas más pequeñas. | Partición | MySQL tiene una compatibilidad de partición más limitada para mejorar el rendimiento y, al mismo tiempo, conservar las operaciones de administración y mantenimiento de datos, como las particiones de Oracle. |
Base de datos flashback | Característica exclusiva de Oracle que se puede usar para inicializar una base de datos de Oracle en un momento anterior definido, lo que te permite consultar o restablecer datos que se modificaron o dañaron por error. | No compatible | Como una solución alternativa, puedes usar las copias de seguridad de Cloud SQL y la recuperación de un momento determinado a fin de restablecer una base de datos a un estado anterior (por ejemplo, restablecer antes de que se descarte una tabla). |
sqlplus | Interfaz de línea de comandos de Oracle que te permite consultar y administrar la instancia de base de datos. | mysql | Interfaz de línea de comandos equivalente a MySQL para consultas y administración. Se puede conectar desde cualquier cliente con los permisos adecuados a Cloud SQL. |
PL/SQL | Oracle extendió el lenguaje de procedimiento a ANSI SQL. | MySQL | MySQL tiene su propio lenguaje de procedimiento extendido con diferente implementación y sintaxis, y no tiene nombres adicionales para este lenguaje extendido. |
Paquete y cuerpo del paquete | Funcionalidad específica de Oracle para agrupar procedimientos y funciones almacenados en la misma referencia lógica. | No compatible | MySQL admite procedimientos y funciones almacenados como objetos individuales con asignación de grupo. |
Funciones y procedimientos almacenados | Usa PL/SQL para implementar la funcionalidad de código. | Funciones y procedimiento almacenados | MySQL admite la creación de procedimientos y funciones almacenados con su propia implementación de lenguaje de procedimiento. |
Activador | Objeto de Oracle que se usa para controlar la implementación de DML en las tablas. | Activador | Idéntico a Oracle. |
PFILE/SPFILE | Los parámetros del nivel de instancia y la base de datos de Oracle se guardan en un archivo binario conocido como el SPFILE (en versiones anteriores, el archivo se llamaba PFILE ), que se puede usar como un archivo de texto para configurar parámetros de forma manual. |
Marcas de base de datos de Cloud SQL para MySQL | Puedes configurar o modificar los parámetros de Cloud SQL para MySQL a través de la utilidad de marcas de base de datos. No puedes cambiar los parámetros de la base de datos en Cloud SQL para MySQL mediante la interfaz de línea de comandos del cliente MySQL (por ejemplo, mysql>
SET GLOBAL ... ). Solo puedes cambiar estos parámetros mediante la utilidad de marcas de base de datos. |
SGA/PGA/AMM | Parámetros de memoria de Oracle que controlan la asignación de memoria a la instancia de base de datos. |
INNODB_BUFFER_POOL_SIZE
|
MySQL tiene sus propios parámetros de memoria. Un parámetro equivalente podría ser INNODB_BUFFER_POOL_SIZE . En Cloud SQL para MySQL, este parámetro está predefinido por el tipo de instancia elegido y el valor cambia según corresponda. |
Almacenamiento en caché de los resultados | Reduce las operaciones de E/S de SQL mediante la recuperación de filas de la caché del búfer, que se puede administrar mediante parámetros de base de datos y sugerencias a nivel de sesión. | Almacenamiento en caché de la consulta | Tiene el mismo propósito fundamental que el almacenamiento en caché de los resultados de Oracle y se puede administrar a nivel de base de datos y de sesión. |
Sugerencias para la base de datos | Impacto controlado en las instrucciones de SQL que influyen en el comportamiento del optimizador para lograr un mejor rendimiento. Oracle tiene más de 50 sugerencias diferentes para la base de datos. | Sugerencias para la base de datos | MySQL admite un conjunto limitado de sugerencias para la base de datos en comparación con Oracle (sugerencias de optimizador y de índice). Ten en cuenta que MySQL usa sugerencias de base de datos, sintaxis y nombres diferentes. |
RMAN | Utilidad de administrador de recuperación de Oracle. Se usa para crear copias de seguridad de bases de datos con funciones extendidas que admiten varias situaciones de recuperación ante desastres y más (clonación, etcétera). | Copia de seguridad de Cloud SQL para MySQL | Cloud SQL para MySQL ofrece dos métodos para aplicar copias de seguridad completas: a pedido y automáticas. |
Volcado de datos (EXPDP/IMPDP) | Utilidad de generación de volcado de Oracle que se puede usar para muchas características, como exportar o importar, crear copias de seguridad de la base de datos (a nivel de esquema o de objeto), metadatos de esquema, generar archivos SQL del esquema y más opciones. | mysqldump/mysqlimport |
Utilidad de volcado (exportación) de MySQL que se puede conectar como cliente (de forma remota) y generar un archivo de volcado (SQL). Luego, puedes comprimir el archivo de volcado y moverlo a Cloud Storage. La utilidad mysqldump es solo para el paso de exportación. |
SQL*Loader | Herramienta que permite subir datos desde archivos externos, como archivos de texto, CSV y muchos más. | mysqlimport/ |
La utilidad mysqlimport proporciona la capacidad de cargar archivos de texto o CSV (Oracle admite formatos de archivo adicionales) en una tabla de base de datos con una estructura correspondiente. |
Data Guard | Solución de recuperación ante desastres de Oracle mediante una instancia en espera, lo que permite a los usuarios realizar operaciones de “LECTURA” desde la instancia en espera. | Alta disponibilidad y replicación de Cloud SQL para MySQL | Para lograr una recuperación ante desastres o una alta disponibilidad, Cloud SQL para MySQL ofrece la arquitectura de réplica de conmutación por error y para operaciones de solo lectura (separación LECTURA/ESCRITURA) mediante la réplica de lectura. |
Data Guard/Golden Gate activas | Las principales soluciones de replicación de Oracle, que pueden tener varios propósitos, como instancia de solo lectura, en espera (DR), replicación bidireccional (de varias fuentes), almacenamiento de datos y mucho más. | Réplica de lectura de Cloud SQL para MySQL | Réplica de lectura de Cloud SQL para MySQL con el fin de implementar la agrupación en clústeres con separación LECTURA/ESCRITURA. Por el momento, no hay compatibilidad con la configuración de varias fuentes, como la replicación bidireccional de Golden Gate o heterogénea. |
RAC | Clústeres de aplicación real de Oracle. Solución de agrupamiento en clústeres, propiedad de Oracle, para proporcionar alta disponibilidad mediante la implementación de varias instancias de bases de datos con una sola unidad de almacenamiento. | No compatible | Aún no se admite la arquitectura de varias fuentes en Cloud SQL de Google Cloud. Para lograr una arquitectura de agrupamiento en clústeres con separación LECTURA/ESCRITURA y alta disponibilidad, usa la alta disponibilidad y la réplica de lectura de Cloud SQL. |
Grid/Cloud Control (OEM) | Software de Oracle para administrar y supervisar bases de datos y otros servicios relacionados en un formato de aplicación web. Esta herramienta es útil para el análisis de bases de datos en tiempo real a fin de comprender las cargas de trabajo altas. | Consola de Cloud SQL para MySQL, Cloud Monitoring | Usa Cloud SQL para MySQL para la supervisión, incluidos los gráficos detallados de tiempo y recursos. También usa Cloud Monitoring para contener métricas de supervisión y análisis de registros de MySQL específicos a fin de obtener capacidades de supervisión avanzadas. |
Registros REDO | Registros de transacciones de Oracle que constan de dos (o más) archivos definidos asignados con anterioridad que almacenan todas las modificaciones de datos a medida que ocurren. El propósito del registro redo es proteger la base de datos en caso de una falla de la instancia. | Registros REDO | MySQL también tiene archivos de registros redo, que se usan durante la recuperación ante fallas para corregir los datos escritos por el mecanismo de registros redo de transacciones incompletas. |
Registros de archivo | Los registros de archivo brindan asistencia para operaciones de copia de seguridad y replicación, y mucho más. Oracle escribe en los registros (si están habilitados) después de cada operación de cambio de registro redo. | binlogs | Implementación de MySQL de retención de registros de transacciones. Se usa en particular para fines de replicación (habilitada de forma predeterminada con Cloud SQL). |
Archivo de control | El archivo de control de Oracle contiene información sobre la base de datos, como archivos de datos, nombres y ubicaciones de registros redo, el número de secuencia de registro actual y la información sobre el punto de control de la instancia. | MySQL | La arquitectura de MySQL no incluye un archivo de control similar a la implementación de Oracle. Se controla a través de los parámetros de MySQL y mediante el comando SHOW MASTER STATUS para ver la posición del registro binario actual. |
SCN | El SCN (número de cambio del sistema) de Oracle es el método principal para mantener la coherencia de los datos de todos los componentes de la base de datos de Oracle a fin de satisfacer el modelo de transacción ACID. | Número de secuencia de registro | La implementación de MySQL para la coherencia de la base de datos usa el LSN (número de secuencia de registro). |
AWR | Oracle AWR (repositorio automático de cargas de trabajo) es un informe de verbosidad que proporciona información detallada sobre el rendimiento de las instancias de bases de datos de Oracle y se considera una herramienta de DBA para el diagnóstico del rendimiento. | performance_schema |
MySQL no tiene un informe equivalente a Oracle AWR, pero MySQL junta datos de rendimiento recopilados por performance_schema . Una solución alternativa sería usar los paneles de rendimiento de Workbench de MySQL. |
DBMS_SCHEDULER |
Utilidad de Oracle que se usa para establecer y determinar el tiempo de las operaciones predefinidas. | EVENT_SCHEDULER |
Funcionalidad del programador interno de la base de datos de MySQL. De forma predeterminada, esta función está configurada en OFF . |
Encriptación de datos transparente | Encripta los datos almacenados en discos como protección de datos en reposo. | Estándar de encriptación avanzada de Cloud SQL | Cloud SQL para MySQL usa el Estándar de encriptación avanzada (AES-256) de 256 bits para la protección de seguridad de datos en reposo y datos en tránsito. |
Compresión avanzada | Para mejorar la huella de almacenamiento de la base de datos, reducir los costos de almacenamiento y mejorar el rendimiento de la base de datos, Oracle proporciona capacidades avanzadas de compresión de datos (tablas/índices). | Compresión de tablas de InnoDB | MySQL ofrece compresión de tablas si se crea una tabla mediante el parámetro ROW_FORMAT establecido en COMPRESSED . Obtén más información sobre la compresión de índices. |
SQL Developer | La GUI de SQL gratuita de Oracle para administrar y ejecutar instrucciones de SQL o PL/SQL (también se puede usar con MySQL). | MySQL Workbench | La GUI de SQL gratuita de MySQL para administrar y ejecutar instrucciones de código de SQL y MySQL. |
Registro de alerta | Registro principal de Oracle para operaciones y errores generales de la base de datos. | Registro de errores de MySQL | Usa el Visor de registros de Cloud Logging para mirar los registros de errores de MySQL. |
Tabla DUAL |
Tabla especial de Oracle que se conserva sobre todo para recuperar valores de seudocolumnas como SYSDATE o USER |
Tabla DUAL | MySQL permite especificar DUAL como una tabla en las instrucciones de SQL que no dependen de los datos de ninguna tabla. |
Tabla externa | Oracle permite a los usuarios crear tablas externas con los datos de origen en archivos fuera de la base de datos. | No compatible. | Sin equivalente directo. |
Objeto de escucha | Proceso de red de Oracle con tareas de escucha de las conexiones de bases de datos entrantes. | Redes autorizadas de Cloud SQL | MySQL acepta conexiones de fuentes remotas una vez permitidas en la página de configuración de las redes autorizadas de Cloud SQL. |
TNSNAMES | Archivo de configuración de red de Oracle que define direcciones de bases de datos para establecer conexiones mediante el uso de alias de conexión. | No existe | MySQL acepta conexiones externas mediante el nombre de conexión de la instancia de Cloud SQL o la dirección IP privada o pública. Si deseas conectarte a Cloud SQL para MySQL (instancias de segunda generación) sin tener que permitir direcciones IP específicas o configurar SSL, el proxy de Cloud SQL es un método de acceso seguro adicional. |
Puerto predeterminado de la instancia | 1521 | Puerto predeterminado de la instancia | 3306 |
Vínculo a la base de datos | Objetos de esquema de Oracle que se pueden usar para interactuar con objetos de bases de datos locales o remotas. | No compatible | Para obtener una solución alternativa, usa el código de la aplicación a fin de conectarte y recuperar datos de una base de datos remota. |
Diferencias en la terminología entre Oracle 12c y Cloud SQL para MySQL
Oracle 12c | Descripción | Cloud SQL para MySQL | Diferencias clave |
---|---|---|---|
Instancia | La capacidad multiusuario incorporada en la instancia de Oracle 12c que puede contener varias bases de datos como una base de datos conectable (PDB), como contraparte de Oracle 11g, en la que una instancia de Oracle solo puede obtener una base de datos. | Instancia | Cloud SQL para MySQL puede contener varias bases de datos con diferentes nombres que entregan varios servicios y aplicaciones. |
CDB | Una base de datos de contenedores multiusuario (CDB) puede admitir una o más PDB, mientras que se pueden crear objetos globales de CDB (afecta a todas las PDB), como las funciones. | Instancia de MySQL | La instancia de MySQL es similar a la de CDB de Oracle. Ambas proporcionan una capa de sistema para las PDB. |
PDB | Las PDB (bases de datos conectables) se pueden usar para aislar servicios y aplicaciones entre sí, y como una colección portátil de esquemas. | Bases de datos/esquemas de MySQL | Una base de datos de MySQL puede entregar varios servicios y aplicaciones, así como muchos usuarios de bases de datos. |
Secuencias de sesión | A partir de Oracle 12c, las secuencias se pueden crear a nivel de sesión (solo muestran valores únicos dentro de una sesión) o a nivel global (por ejemplo, cuando se usan tablas temporales). | Incremento automático |
Las secuencias no son compatibles con MySQL, pero los usuarios pueden usar la propiedad de columna AUTO_INCREMENT como una solución alternativa. |
Columnas de identidad | El tipo IDENTITY de Oracle 12c genera una secuencia y la asocia con una columna de tabla sin necesidad de crear de forma manual un objeto de secuencia por separado. |
Incremento automático | Usa la propiedad de columna AUTO_INCREMENT para simular la misma funcionalidad que la columna de identidad de Oracle 12c (una solución alternativa a la funcionalidad de generación automática de secuencias). |
Fragmentación | La fragmentación de Oracle es una solución en la que una base de datos de Oracle se particiona en varias bases de datos más pequeñas (fragmentos) a fin de permitir la escalabilidad, la disponibilidad y la distribución geográfica para entornos de OLTP. | No compatible (como una característica) | MySQL no tiene una característica de fragmentación equivalente. La fragmentación se puede implementar mediante MySQL (como la plataforma de datos) con una capa de aplicación compatible. |
Base de datos en memoria | Oracle proporciona un conjunto de características que pueden mejorar el rendimiento de la base de datos para OLTP y cargas de trabajo mixtas. | No compatible | MySQL no tiene una característica equivalente. Puedes usar Memorystore como alternativa. |
Ocultamiento | Como parte de las características de seguridad avanzadas de Oracle, el ocultamiento puede realizar el enmascaramiento de columnas para evitar que los usuarios y las aplicaciones muestren datos sensibles. | No compatible | MySQL no tiene una característica equivalente. |
Funcionalidad
Aunque las bases de datos de Oracle 11g o 12c y Cloud SQL para MySQL funcionan en diferentes arquitecturas (infraestructura y lenguajes de procedimiento extendidos), comparten los mismos aspectos fundamentales de las bases de datos relacionales. Admiten objetos de base de datos, cargas de trabajo de simultaneidad multiusuario y transacciones (compatibilidad con ACID). También administran las contenciones de bloqueo que admiten varios niveles de aislamiento (según las necesidades de la empresa) y cumplen con los requisitos de aplicaciones actuales como un almacén de datos relacional para operaciones de transacción en línea (OLTP) y procesamiento analítico en línea (OLAP).
En la siguiente sección, se proporciona una descripción general de algunas de las principales diferencias funcionales entre Oracle y Cloud SQL para MySQL. En algunos casos, cuando es necesario, la sección incluye comparaciones técnicas detalladas.
Crea y visualiza bases de datos existentes
Oracle 11g/12c | Cloud SQL para MySQL 5.7 |
---|---|
Por lo general, puedes crear bases de datos y ver las existentes mediante la utilidad asistente de creación de base de datos (DBCA) de Oracle. Las instancias o bases de datos creadas de forma manual requieren que especifiques parámetros adicionales: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; |
Usa una declaración con el formato CREATE DATABASE Name; , como en este ejemplo:mysql> CREATE DATABASE MYSQLDB; |
Oracle 12c | Cloud SQL para MySQL 5.7 |
En Oracle 12c, puedes crear PDB desde el origen, ya sea desde una plantilla de base de datos de contenedores (CDB) o mediante la clonación de una PDB desde una PDB existente. Usa varios 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/'; |
Usa una declaración con el formato CREATE DATABASE Name; , como en este ejemplo:mysql> CREATE DATABASE MYSQLDB; |
Enumera todas las PDB:SQL> SHOW is PDBS; |
Enumera todas las bases de datos existentes:mysql> SHOW DATABASES; |
Conéctate a otra PDB:SQL> ALTER SESSION SET CONTAINER=pdb; |
Conéctate a una base de datos diferente de este modo:mysql> use databaseName;O de este otro modo: mysql> \u databaseName; |
Abre o cierra una PDB específica (abierta/solo lectura):SQL> ALTER PLUGGABLE DATABASE pdb CLOSE; |
No es compatible con una sola base de datos. Todas las bases de datos están en la misma instancia de Cloud SQL para MySQL; por lo tanto, todas las bases de datos están activas o inactivas. |
Administra una base de datos a través de la consola de Cloud SQL
En la consola de Google Cloud, ve a Almacenamiento > SQL > Instancia > Databases (Bases de datos) > Ver/crear.
Esquemas y bases de datos del sistema
Las instancias de base de datos de Oracle obtienen ciertos esquemas del sistema, por ejemplo, SYS/SYSTEM
, con la función de propietarios de los objetos de metadatos de la base de datos.
Por el contrario, MySQL contiene varias bases de datos del sistema (a diferencia de los esquemas de Oracle) que entregan la capa de metadatos (ten en cuenta que los nombres de las bases de datos distinguen entre mayúsculas y minúsculas):
-
La base de datos del sistema
mysql
contiene tablas que almacenan información requerida por el servidor MySQL mientras se ejecuta, como se muestra a continuación:- Tablas de privilegios del sistema
- Tablas de información de objetos
- Tablas del sistema de registros
- Tablas del sistema de replicación
- Tablas del sistema optimizador
- Tablas del sistema por zonas horarias
-
INFORMATION_SCHEMA
funciona como el diccionario de datos y catálogo del sistema de la base de datos principal. Proporciona acceso a los metadatos de la base de datos, que es información interna de la base de datos sobre el servidor de MySQL, como el nombre de una base de datos o tabla, el tipo de datos de columna y los privilegios de acceso. -
Una base de datos del sistema que recopila información estadística sobre la instancia de MySQL. La base de datos del sistema
performance_schema
contiene métricas para la supervisión de la ejecución del servidor a un nivel muy detallado. El esquema proporciona una inspección de ejecución interna del servidor al momento de la ejecución y puede servir como fuente principal para analizar problemas de rendimiento de la base de datos.El
performance_schema
no está habilitado de forma predeterminada cuando se usa Cloud SQL para MySQL. Para habilitar el esquema, usa la herramienta de línea de comandos degcloud
:gcloud sql instances patch INSTANCE_NAME --database-flags performance_schema=on
Para completar esta configuración, debes reiniciar la instancia. No puedes modificar el parámetro
--database-flags
mediante la página de marcas de la base de datos de Cloud SQL para MySQL en la consola de Google Cloud. -
El esquema
sys
existe desde la versión 5.5.7 de MySQL y conserva más que nada las vistas en las tablas del sistemaperformance_schema
. Este esquema proporciona un conjunto de vistas más legibles que resumen los datos deperformance_schema
en un formulario más fácil de comprender. El esquemasys
también contiene varios procedimientos y funciones almacenados para realizar operaciones como configurarperformance_schema
y generar informes de diagnóstico.El esquema
sys
muestra información solo cuandoperformance_schema
está habilitado.
Visualiza metadatos y vistas dinámicas del sistema
En esta sección, se proporciona una descripción general de algunas de las tablas de metadatos y vistas dinámicas del sistema más comunes que se usan en Oracle y sus objetos de base de datos correspondientes en Cloud SQL para MySQL 5.7.
Oracle proporciona cientos de tablas y vistas de metadatos del sistema, mientras que MySQL solo contiene varias decenas. Para cada caso, puede haber más de un objeto de base de datos con un propósito específico.
Oracle proporciona varios niveles de objetos de metadatos, cada uno de los cuales requiere privilegios diferentes:
USER_TableName
: El usuario puede verlo.ALL_TableName
: Todos los usuarios pueden verlo.DBA_TableName
: Solo pueden verlo los usuarios con el privilegio de DBA, comoSYS
ySYSTEM
.
Para las vistas de rendimiento dinámico, Oracle usa los prefijos V$
y GV$
. Para que un usuario de MySQL pueda ver las tablas o vistas de metadatos del sistema, debe tener permisos específicos sobre los objetos del sistema. Para obtener más información sobre la seguridad, consulta la sección Seguridad.
Tipo de metadatos | Vista/Tabla de Oracle | Tabla/Vista/Muestra de MySQL (CMD de MySQL) |
---|---|---|
Sesiones abiertas | V$SESSION |
SHOW PROCESSLIST INFORMATION_SCHEMA.PROCESSLIST performance_schema.threads |
Transacciones en ejecución | V$TRANSACTION |
INFORMATION_SCHEMA.INNODB_TRX |
Objetos de base de datos | DBA_OBJECTS |
No compatible. Consulta cada objeto por su tipo. |
Tablas | DBA_TABLES |
INFORMATION_SCHEMA.TABLES INFORMATION_SCHEMA.INNODB_SYS_TABLES |
Columnas de la tabla | DBA_TAB_COLUMNS |
INFORMATION_SCHEMA.COLUMNS INFORMATION_SCHEMA.INNODB_SYS_COLUMNS |
Privilegios de tablas y columnas | TABLE_PRIVILEGES DBA_COL_PRIVS ROLE_TAB_PRIVS |
INFORMATION_SCHEMA.COLUMN_PRIVILEGES |
Particiones | DBA_TAB_PARTITIONS DBA_TAB_SUBPARTITIONS |
INFORMATION_SCHEMA.PARTITIONS SHOW CREATE TABLE TableName SHOW TABLE STATUS LIKE 'TableName' |
Vistas | DBA_VIEWS |
INFORMATION_SCHEMA.VIEWS |
Limitaciones | 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 |
No compatible |
Procedimientos almacenados | DBA_PROCEDURES |
INFORMATION_SCHEMA.ROUTINES |
Funciones almacenadas | DBA_PROCEDURES |
INFORMATION_SCHEMA.ROUTINES |
Activadores | DBA_TRIGGERS |
INFORMATION_SCHEMA.TRIGGERS |
Usuarios | DBA_USERS |
mysql.user |
Privilegios de usuario | DBA_SYS_PRIVS DBA_ROLE_PRIVS SESSION_PRIVS |
INFORMATION_SCHEMA.USER_PRIVILEGES |
Trabajos/ Programador |
DBA_JOBS DBA_JOBS_RUNNING DBA_SCHEDULER_JOBS DBA_SCHEDULER_JOB_LOG |
INFORMATION_SCHEMA.EVENTS |
Espacios de tabla | DBA_TABLESPACES |
INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES |
Archivos de datos | DBA_DATA_FILES |
INFORMATION_SCHEMA.FILES INFORMATION_SCHEMA.INNODB_SYS_DATAFILES |
Sinónimos | DBA_SYNONYMS |
No compatible |
Secuencias | DBA_SEQUENCES |
No compatible |
Vínculos a bases de datos | DBA_DB_LINKS |
No compatible |
Estadí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 |
Bloqueos | 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 de base de datos | 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 |
La tabla Segmentos no es compatible. Consulta cada objeto por su tipo. |
Funciones | 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 |
Historial de sesiones | 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 |
Versión | 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 y análisis 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 de memoria de la instancia |
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 almacenamiento de MySQL
A diferencia de muchos otros RDBMS (incluido el de Oracle), MySQL puede funcionar de manera polimórfica debido a su sistema de almacenamiento conectable. La arquitectura del motor de almacenamiento conectable de MySQL permite que un administrador de base de datos seleccione un motor de almacenamiento especializado para una necesidad en particular de una aplicación.
El componente del motor de almacenamiento conectable de MySQL en el servidor de la base de datos de MySQL es responsable de realizar las operaciones de E/S de los datos, incluido el almacenamiento de datos en los discos o búferes de memoria. La arquitectura del motor de almacenamiento conectable proporciona un conjunto estándar de servicios de asistencia y administración que son comunes entre todos los motores de almacenamiento subyacentes.
En MySQL 5.5 y versiones posteriores, el motor de almacenamiento predeterminado es el motor de almacenamiento InnoDB, mientras que InnoDB también maneja las tablas temporales. Puedes configurar los motores de almacenamiento durante los pasos CREATE
o ALTER
de la tabla, como en el siguiente ejemplo:
mysql> SHOW CREATE TABLE JOBS \G;
Este es el resultado:
*************************** 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 obtener más información, consulta los diferentes motores de almacenamiento de MySQL.
Puedes ver la configuración del motor de almacenamiento mediante la siguiente consulta:
mysql> SHOW VARIABLES LIKE '%storage%';
El resultado es similar a este:
+----------------------------------+--------+ | 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 | +----------------------------------+--------+
Puedes ver todos los motores de almacenamiento integrados:
mysql> SHOW STORAGE ENGINES;
El resultado es similar a este:
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | 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 | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
Ten en cuenta que InnoDB es el motor de almacenamiento predeterminado y es el único que admite transacciones (cumple con ACID). Debido a que InnoDB es el único motor de almacenamiento que se aproxima a la funcionalidad de Oracle, te recomendamos usar InnoDB en todo momento. La segunda generación de Cloud SQL para MySQL solo admite el motor de almacenamiento InnoDB.
Parámetros del sistema
Las bases de datos de Oracle y Cloud SQL para MySQL pueden configurarse de manera específica para lograr cierta funcionalidad más allá de la configuración predeterminada. Para alterar los parámetros de configuración en Oracle, se requieren ciertos permisos de administración (en especial, los permisos del usuario SYS/SYSTEM
).
A continuación, se muestra un ejemplo de cómo alterar la configuración de Oracle mediante la declaración ALTER SYSTEM
. En este ejemplo, el usuario cambia el parámetro “cantidad máxima de intentos de acceso con errores” solo en el nivel de configuración spfile
(con la modificación válida solo después de un reinicio):
SQL> ALTER SYSTEM SET SEC_MAX_FAILED_LOGIN_ATTEMPTS=2 SCOPE=spfile;
En el siguiente ejemplo, el usuario solo solicita ver el valor del parámetro de Oracle:
SQL> SHOW PARAMETER SEC_MAX_FAILED_LOGIN_ATTEMPTS;
El resultado es similar a este:
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ sec_max_failed_login_attempts integer 2
La modificación del parámetro de Oracle funciona en tres permisos:
- SPFILE: Las modificaciones de parámetros se escriben en el
spfile
de Oracle, con un reinicio de instancia necesario para que el parámetro surta efecto. - MEMORIA: Las modificaciones de parámetros se aplican en la capa de memoria solo cuando no se permite el cambio de parámetros estáticos.
- AMBOS: Las modificaciones de parámetros se aplican en el archivo de parámetros del servidor y en la memoria de la instancia, en la que no se permite el cambio de parámetros estáticos.
Marcas de configuración de Cloud SQL para MySQL
Puedes modificar los parámetros del sistema de Cloud SQL para MySQL mediante las marcas de configuración en la consola de Google Cloud, la CLI de gcloud o CURL. Consulta la lista completa de todos los parámetros compatibles con Cloud SQL para MySQL que puedes modificar.
Los parámetros de MySQL se pueden dividir en varios permisos:
- Parámetros dinámicos: se pueden modificar en el tiempo de ejecución.
- Parámetros estáticos: requieren que se reinicie la instancia para surtir efecto.
- Parámetros globales: tendrán un efecto global en todas las sesiones actuales y futuras.
- Parámetros de sesión: se pueden modificar a nivel de la sesión solo durante la vida útil de la sesión actual, aislada de otras sesiones.
El parámetro de memoria innodb_buffer_pool_size
de Cloud SQL para MySQL (uno de los parámetros fundamentales que se debe tener en cuenta cuando se planifica y ajusta el tamaño de un entorno de MySQL) se determina por el tipo de instancia y no se puede alterar mediante el uso de marcas de configuración ni por cualquier otro método, por ejemplo:
- El tipo de instancia
db-n1-standard-1
tiene 1.4 GB de asignación de memoria. - El tipo de instancia
db-n1-highmem-8
tiene 38 GB de asignación de memoria.
Ejemplos de alteración de los parámetros de Cloud SQL para MySQL
Console
Usa la consola de Google Cloud para habilitar el parámetro event_scheduler
.
Ve a la página Edit instance (Editar instancia) de Cloud Storage.
En Marcas, haz clic en Agregar elemento y busca
event_scheduler
, como en la siguiente captura de pantalla.
gcloud
Usa la CLI de gcloud para habilitar el parámetro
event_scheduler
:gcloud sql instances patch INSTANCE_NAME \ --database-flags event_scheduler=on
Este es el resultado:
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)?
Sesión de MySQL
Inhabilita el modo AUTOCOMMIT
a nivel de sesión. Esta alteración se mantiene vigente durante la sesión actual y solo durante el ciclo de vida de la sesión.
Muestra variables como
autocommit
:mysql> SHOW VARIABLES LIKE '%autoc%';
Verás el siguiente resultado, en el que
autocommit
estáON
:+---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | ON | +---------------+-------+
Inhabilita
autocommit
:mysql> SET autocommit=off;
Muestra variables como
autocommit
:mysql> SHOW VARIABLES LIKE '%autoc%';
Verás el siguiente resultado, en el que
autocommit
estáOFF
:+---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | OFF | +---------------+-------+
Transacciones y niveles de aislamiento
En esta sección, se describen las principales diferencias entre Oracle y Cloud SQL para MySQL relevantes para las migraciones a nivel de transacción y aislamiento.
Modo de confirmación
Oracle funciona de forma predeterminada en el modo sin confirmación automática, en el que cada transacción de DML se debe determinar con declaraciones COMMIT/ROLLBACK
. Una de las diferencias fundamentales entre Oracle y MySQL es que MySQL funciona de forma predeterminada en el modo de confirmación automática y cada transacción de DML se confirma de manera automática con la especificación explícita de declaraciones COMMIT/ROLLBACK
.
Para forzar el funcionamiento de MySQL en un modo sin confirmación automática, existen varias opciones:
- Cuando administres transacciones dentro del alcance de los procedimientos almacenados, usa la cláusula
START TRANSACTION
para ingresar al mismo modo transaccional que el de Oracle. Usa la siguiente declaración para establecer el parámetro del sistema
autocommit
enOFF
a nivel de la sesión y usa de forma explícita las declaracionesCOMMIT/ROLLBACK
en las transacciones de DML:mysql> SET autocommit=off;
Niveles de aislamiento
El estándar ANSI/ISO de SQL (SQL92) define cuatro niveles de aislamiento. Cada nivel proporciona un enfoque diferente para manejar la ejecución simultánea de transacciones de bases de datos:
- Lectura no confirmada: Una transacción en proceso en ese momento puede ver los datos no confirmados que realiza otra transacción. Si se realiza una reversión, todos los datos se restablecen a su estado anterior.
- Lectura confirmada: Una transacción solo ve los cambios de datos que se confirmaron; no es posible ver los cambios no confirmados (“lecturas sucias”).
- Lectura repetible: Una transacción puede ver los cambios realizados por la otra transacción solo después de que ambas transacciones emiten una
COMMIT
o ambas se revierten. - Serializable: El nivel de aislamiento más estricto y potente. Este nivel bloquea todos los registros a los que se accede, y bloquea el recurso para que no se puedan agregar registros a la tabla.
Los niveles de aislamiento de transacciones administran la visibilidad de los datos modificados según cómo lo ven otras transacciones en ejecución. Además, cuando varias transacciones simultáneas acceden a los mismos datos, el nivel de aislamiento de transacción seleccionado afecta la forma en que interactúan las diferentes transacciones.
Oracle admite los siguientes niveles de aislamiento:
- Lectura confirmada (predeterminado)
- Serializable
- Solo lectura (no es parte del estándar ANSI/ISO de SQL (SQL92)
MVCC en Oracle (Control de simultaneidad de varias versiones):
- Oracle usa el mecanismo de VMCC para proporcionar coherencia de lectura automática en toda la base de datos y en todas las sesiones.
- Oracle depende del número de cambio del sistema (SCN) de la transacción actual para obtener una vista coherente de la base de datos. Por lo tanto, todas las consultas de bases de datos solo muestran datos confirmados con respecto al SCN al momento de la ejecución de la consulta.
- Los niveles de aislamiento se pueden cambiar a nivel de transacción y de sesión.
Este es un ejemplo de configuración de los niveles de aislamiento:
-- 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;
Cloud SQL para MySQL, como Oracle, admite los siguientes cuatro niveles de aislamiento de transacciones especificados en el estándar ANSI SQL:92:
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ (default)
SERIALIZABLE
El nivel de aislamiento predeterminado de Cloud SQL para MySQL es REPEATABLE READ
. Cualquier dato nuevo estará disponible para ambos solo después de que ambas transacciones emitan un comando COMMIT
. Estos niveles de aislamiento se pueden modificar a nivel de SESSION
y a nivel de GLOBAL
(la modificación de nivel global se encuentra en etapa Beta mediante marcas de configuración).
Para verificar los niveles de aislamiento actuales en los niveles SESSION
y GLOBAL
, usa la siguiente declaración:
mysql> SELECT @@GLOBAL.tx_isolation, @@tx_isolation;
Este es el resultado:
+-----------------------+-----------------+ | @@GLOBAL.tx_isolation | @@tx_isolation | +-----------------------+-----------------+ | REPEATABLE-READ | REPEATABLE-READ | +-----------------------+-----------------+
Puedes modificar la sintaxis del nivel de aislamiento de la siguiente manera:
SET [SESSION] TRANSACTION ISOLATION LEVEL [READ WRITE | READ ONLY]
| REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE]
Además, puedes modificar el nivel de aislamiento a nivel de SESSION
:
mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
-- Verify
mysql> SELECT @@GLOBAL.tx_isolation, @@tx_isolation;
Este es el resultado:
+-----------------------+------------------+ | @@GLOBAL.tx_isolation | @@tx_isolation | +-----------------------+------------------+ | REPEATABLE-READ | READ-UNCOMMITTED | +-----------------------+------------------+
Estructura de transacciones de Cloud SQL para MySQL
Sintaxis de las transacciones:
START TRANSACTION [transaction_characteristic [, transaction_characteristic] ...] |
---|
Las transacciones se pueden implementar con START TRANSACTION
o BEGIN
.
La opción WITH CONSISTENT SNAPSHOT
inicia una transacción READ
coherente, que es lo mismo que emitir START TRANSACTION
, seguido de un SELECT
de cualquier tabla. La cláusula WITH CONSISTENT SNAPSHOT
que inicia una READ
coherente (una operación READ
que usa información de instantáneas para presentar resultados de consultas basadas en un momento determinado) no cambia el nivel de aislamiento de la transacción y solo es compatible con el nivel de aislamiento REPEATABLE READ
.
Una READ
coherente usa información de instantáneas para que los resultados de las consultas estén disponibles en función de un momento determinado, sin tener en cuenta las modificaciones realizadas por transacciones simultáneas. Si otra transacción cambió los datos consultados, los datos originales se reconstruyen mediante el registro de deshacer. Esto ayudará a evitar problemas de bloqueo que puedan reducir la simultaneidad.
Con el nivel de aislamiento REPEATABLE READ
, la instantánea se basa en el momento en que se realiza la primera operación READ
. Con el nivel de aislamiento READ COMMITTED
, la instantánea se restablece al momento de cada operación READ
coherente.
Este es un ejemplo de configuración del nivel de la transacción y del aislamiento:
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;