Migra usuarios de Oracle® a Cloud SQL para PostgreSQL: terminología y funcionalidad

Este documento es parte de una serie que proporciona información clave y orientación relacionada con la planificación y realización de migraciones de bases de datos de Oracle® 11g/12c a Cloud SQL para PostgreSQL versión 12. Además de la sección de configuración de introducción, la serie incluye las siguientes partes:

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 PostgreSQL. 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 PostgreSQL a la que se hace referencia aquí es la 12.

En esta sección, se destacan las principales diferencias de terminología entre Oracle y Cloud SQL para PostgreSQL. Una descripción de bajo nivel se detalla más adelante en este documento.

Oracle 11g Descripción Cloud SQL para PostgreSQL Diferencias clave
instancia Una sola instancia de Oracle 11g puede contener solo una base de datos. instancia Una instancia de Cloud SQL para PostgreSQL contiene exactamente un clúster de base de datos. Un clúster de base de datos es una colección de bases de datos que se almacena en un área de datos común.
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.
schema 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). schema Una base de datos contiene uno o más esquemas. Los objetos como las tablas se encuentran contenidos dentro de los esquemas. El mismo nombre de objeto podría usarse en diferentes esquemas dentro de la misma base de datos sin que se generen conflictos.
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. rol Un rol puede ser un usuario de una base de datos o un grupo de usuarios de bases de datos, según cómo esté configurado. Puede ser propietario de objetos de la base de datos, como tablas.

Los roles se limitan a un clúster de base de datos completo y es posible otorgar la membresía de un rol a otro rol.
rol 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
usuarios administradores
/del SISTEMA
Usuarios administradores de Oracle con el nivel de acceso más alto:
SYS
SYSTEM
cloudsqlsuperuser Cloud SQL para PostgreSQL viene con el usuario postgres predeterminado. Este usuario es parte del rol cloudsqlsuperuser y tiene los siguientes atributos (privilegios): CREATEROLE, CREATEDB y LOGIN.

Debido a que Cloud SQL para PostgreSQL es un servicio administrado, restringe el acceso a ciertas tablas y procedimientos del sistema que requieren privilegios avanzados. Por lo tanto, el usuario postgres no tiene los atributos SUPERUSER ni REPLICATION. No puedes crear usuarios con atributos superuser ni tener acceso a ellos.
diccionario/
metadatos
Oracle usa las siguientes tablas de metadatos:

USER_TableName
ALL_TableName
DBA_TableName
diccionario/
metadatos
Cloud SQL para PostgreSQL usa el INFORMATION_SCHEMA estándar ANSI a fin de proporcionar información de diccionario y metadatos.
vistas dinámicas del sistema Vistas dinámicas de Oracle:
V$ViewName
Vistas dinámicas
del sistema
Cloud SQL para PostgreSQL tiene las siguientes vistas de estadísticas dinámicas:
pg_stat_ViewName
pg_statio_ViewName
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 En Cloud SQL para PostgreSQL, los archivos de datos se almacenan juntos en el directorio de datos PGDATA de un clúster de base de datos mediante una estructura de directorio predefinida. Los espacios de tablas en Cloud SQL para PostgreSQL proporcionan un mecanismo a fin de definir ubicaciones personalizadas en el sistema de archivos en el que se pueden almacenar los archivos de datos.d

Debido a que Cloud SQL para PostgreSQL es un servicio administrado, Google Cloud administra el sistema de archivos subyacente de la máquina host por ti. No puedes crear espacios de tablas nuevos en Cloud SQL para PostgreSQL.
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 Oracle usan el sufijo .dbf (no es obligatorio).
archivos de datos Cloud SQL para PostgreSQL almacena cada base de datos en un clúster de base de datos en su propio subdirectorio. Cada índice y tabla dentro de una base de datos se almacena en un archivo separado en ese subdirectorio.
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. No existe Las tablas del diccionario de datos y los objetos de vistas se almacenan en INFORMATION_SCHEMA en el directorio de datos PGDATA del clúster de una base de datos mediante una estructura de directorio predefinida.
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.
archivos temporales Los archivos temporales se usan para almacenar operaciones en ejecución que no caben en la memoria del servidor. Estos archivos se almacenan en un directorio llamado pgsql_tmp y se crean solo mientras se ejecuta la instrucción de SQL.
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).
No existe Para permitir operaciones de reversión, Cloud SQL para PostgreSQL retiene las filas que se actualizan o borran dentro del archivo de datos de la tabla. El vaciado es el proceso de recuperación o reutilización del espacio en disco que ocupan las filas actualizadas o borradas.
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 Cloud SQL para PostgreSQL depende del sistema de archivos del SO para almacenar archivos de datos y no tiene un equivalente de ASM. Sin embargo, Cloud SQL para PostgreSQL admite muchas funciones que proporcionan automatización del almacenamiento, como el aumento automático de almacenamiento, el rendimiento y la escalabilidad.
tablas/vistas Objetos de base de datos fundamentales creados por el usuario. tablas/vistas Idéntico 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.
vistas materializadas Las vistas materializadas funcionan de manera similar a Oracle. Se actualizan de forma manual mediante declaraciones REFRESH MATERIALIZED VIEW.
secuencia Generador de valor único de Oracle. secuencia Similar a Oracle.
sinónimo Objetos de base de datos de Oracle que sirven como identificadores alternativos para otros objetos de base de datos. No compatible Cloud SQL para PostgreSQL no ofrece sinónimos. Como solución alternativa, las vistas se pueden usar cuando se configuran los permisos correspondientes.
partición Oracle proporciona muchas soluciones de partición para dividir tablas grandes en partes administradas más pequeñas. partición Cloud SQL para PostgreSQL admite la partición declarativa y la partición mediante herencia, lo que permite una mayor flexibilidad de partición.
Base de datos flashback Función 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. psql Interfaz de línea de comandos equivalente de Cloud SQL para PostgreSQL a fin de realizar consultas y administrar. Se puede conectar desde cualquier cliente con los permisos adecuados a Cloud SQL.
PL/SQL Oracle extendió el lenguaje de procedimiento a ANSI SQL. PL/pgSQL Cloud SQL para PostgreSQL tiene su propio lenguaje de procedimiento llamado PL/pgSQL, que es similar a PL/SQL de Oracle en muchos aspectos. Para obtener un resumen de las principales diferencias entre los dos lenguajes, consulta Portabilidad desde Oracle PL/SQL.
paquete y cuerpo del paquete Funcionalidad específica de Oracle para agrupar procedimientos y funciones almacenados en la misma referencia lógica. No compatible Cloud SQL para PostgreSQL organiza funciones mediante esquemas.
funciones y procedimientos almacenados Usa PL/SQL para implementar la funcionalidad de código. Funciones y procedimientos almacenados Cloud SQL para PostgreSQL admite la implementación de funciones y procedimientos almacenados con una variedad de lenguajes de programación, como PL/pgSQL y C.
activador Objeto de Oracle que se usa para controlar la implementación de DML en las tablas. activador Similar 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 PostgreSQL Puedes configurar o modificar los parámetros de Cloud SQL para PostgreSQL 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. Una variedad de parámetros relacionados con la memoria Cloud SQL para PostgreSQL tiene sus propios parámetros de memoria. Algunos parámetros similares son shared_buffers, temp_buffers y work_mem. En Cloud SQL para PostgreSQL, estos parámetros están predefinidos por el tipo de instancia elegido y el valor cambia según corresponda. Puedes ajustar algunos de estos parámetros mediante la utilidad de marcas de la base de datos.
caché de búfer Reduce las operaciones de E/S de SQL mediante la recuperación de los datos almacenados en caché desde la caché del búfer. Los parámetros de memoria se pueden administrar a nivel de base de datos y de sesión a través de sugerencias de consulta. Funcionalidad similar El tamaño de la caché del búfer de Cloud SQL para PostgreSQL se controla mediante el parámetro shared_buffer, que no se expone en Cloud SQL. Cloud SQL proporciona una métrica de uso de memoria, que se usa para ajustar el tamaño de la instancia.
sugerencias para la base de datos Capacidad de Oracle para proporcionar un impacto controlado en las instrucciones de SQL que afectarán el comportamiento del optimizador a fin de obtener un mejor rendimiento. Oracle tiene más de 50 sugerencias diferentes para la base de datos. No compatible Cloud SQL para PostgreSQL no admite sugerencias de bases de datos. Con un grado limitado, puedes controlar el planificador de consultas de Cloud SQL para PostgreSQL mediante la sintaxis de JOIN explícita.
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 PostgreSQL Cloud SQL para PostgreSQL ofrece dos métodos para aplicar backups completas: copias de seguridad automáticas y a pedido.
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. Importación y exportación de Cloud SQL para PostgreSQL Cloud SQL para PostgreSQL ofrece dos formatos de exportación/importación y desde buckets de Cloud Storage: SQL y CSV.

De manera alternativa, puedes conectarte a la instancia de base de datos mediante utilidades de importación y exportación como pg_dump.
SQL*Loader Herramienta que te permite subir datos desde archivos externos, como archivos de texto, CSV y muchos más. psql \copy El comando \copy en el cliente psql te permite cargar archivos de texto, CSV o binarios (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 READ desde la instancia en espera. Alta disponibilidad y replicación de Cloud SQL para PostgreSQL Para lograr una recuperación ante desastres o alta disponibilidad, Cloud SQL para PostgreSQL ofrece la arquitectura de réplica de conmutación por error y las operaciones de solo lectura (separación READ/WRITE) mediante el uso de la claseLeer réplicas.
Active Data Guard/
GoldenGate
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 instancias principales), almacenamiento de datos y más. Réplica de lectura de Cloud SQL para PostgreSQL Réplica de lectura de Cloud SQL para PostgreSQL con el fin de implementar la agrupación en clústeres con separación LECTURA/ESCRITURA. En la actualidad, no hay compatibilidad con la configuración de varias instancias principales, 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 Cloud SQL para PostgreSQL no admite una arquitectura de varias instancias principales. Cloud SQL para PostgreSQL ofrece alta disponibilidad a través de una instancia en espera y mayor escalabilidad de lectura a través de réplicas de lectura.
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 Google Cloud,
Cloud Monitoring
Usa Cloud SQL para PostgreSQL para la supervisión, incluidos gráficos detallados basados en el tiempo y los recursos. También usa Cloud Monitoring con el fin de almacenar métricas de supervisión específicas de Cloud SQL para PostgreSQL y análisis de registros para 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 principal del registro de rehacer es proteger la base de datos en caso de una falla de la instancia. Registros WAL Cloud SQL para PostgreSQL usa el registro de escritura anticipada (WAL) de manera que los cambios en los archivos de datos se envíen al almacenamiento permanente para permitir la recuperación de fallas.
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. El archivado de WAL Implementación de Cloud SQL para PostgreSQL de la retención de registros WAL. El archivado de WAL se usa y se habilita con la recuperación de un momento determinado.
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. PGDATA and pg_control La arquitectura de Cloud SQL para PostgreSQL no comparte un concepto equivalente a un archivo de control de Oracle. Los archivos relacionados con la base de datos se organizan en un directorio conocido comúnmente como PGDATA. La información de WAL relacionada con los registros y los puntos de control se almacena en pg_control.
Número de cambio del sistema (SCN) El SCN marca un punto específico en el tiempo en una base de datos de Oracle. Número de secuencia de registro (LSN) El equivalente de Cloud SQL para PostgreSQL es el LSN. Al igual que los SCN, los LSN aumentan de forma monótona con el tiempo.
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. recopilador de estadísticas Cloud SQL para PostgreSQL no tiene un informe equivalente a Oracle AWR, pero PostgreSQL recopila datos de rendimiento recopilados por el recopilador de estadísticas. Las estadísticas recopiladas se exponen a través de las vistas pg_stat_* y pg_statio_*.
DBMS_SCHEDULER Utilidad de Oracle que se usa para establecer y determinar el tiempo de las operaciones predefinidas. No compatible Cloud SQL para PostgreSQL no proporciona una utilidad de programación incorporada.

Google Cloud proporciona Cloud Scheduler, que te permite programar tareas de bases de datos, como las exportaciones.
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 PostgreSQL usa el Estándar de encriptación avanzada (AES-256) de 256 bits para proteger los datos en reposo y 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). TOAST Si bien no se puede comparar directamente con la compresión avanzada de Oracle, Cloud SQL para PostgreSQL usa una infraestructura llamada TOAST para comprimir de forma automática y transparente los datos de longitud variable que son demasiado grandes para caber en una página de datos única.
SQL Developer La GUI de SQL gratuita de Oracle para administrar y ejecutar instrucciones de SQL o PL/SQL. pgAdmin La GUI de SQL gratuita de Cloud SQL para PostgreSQL a fin de administrar y ejecutar instrucciones de código de SQL y PostgreSQL.
Registro de alerta Registro principal de Oracle para errores y operaciones generales de la base de datos. Informes y registros de errores de PostgreSQL Usa el Visor de registros de Cloud Logging para inspeccionar los registros de errores de PostgreSQL.
Tabla DUAL Tabla especial de Oracle para recuperar valores de seudocolumnas, como SYSDATE o USER. No existe Cloud SQL para PostgreSQL permite que las cláusulas FROM se omitan de las instrucciones de SQL. Por ejemplo:

SELECT NOW();
es una declaración válida en PostgreSQL.
tabla externa Oracle permite a los usuarios crear tablas externas que tengan los datos de origen en archivos fuera de la base de datos. No compatible Como un servicio administrado, Cloud SQL para PostgreSQL no expone el sistema de archivos subyacente del host que ejecuta la instancia de la base de datos.

Como solución alternativa, puedes importar los datos de origen a una tabla de PostgreSQL para consultar los datos.
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 Cloud SQL para PostgreSQL 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 Cloud SQL para PostgreSQL acepta conexiones externas mediante el nombre de conexión de la instancia de Cloud SQL o la dirección IP privada/pública. Cloud SQL Proxy es un método de acceso seguro adicional para conectarte a Cloud SQL para PostgreSQL sin tener que permitir direcciones IP específicas o configurar SSL.
Puerto predeterminado de la instancia 1521 Puerto predeterminado de la instancia 5432
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. Wrapper de datos externo (FDW) La extensión postgres_fdw en Cloud SQL para PostgreSQL permite que las tablas de otras bases de datos de PostgreSQL (“eignon”) se expongan como tablas “externas” en la base de datos actual. Esas tablas están disponibles para que se usen, casi como si fueran tablas locales.

Diferencias en la terminología entre Oracle 12c y Cloud SQL para PostgreSQL

Oracle 12c Descripción Cloud SQL para PostgreSQL Diferencias clave
Instancia La capacidad multiusuario incluida en Oracle 12c permite que una instancia mantenga varias bases de datos como bases de datos conectables (PDB), en lugar de Oracle 11g, en la que una instancia de Oracle puede alojar una sola base de datos. Instancia Una instancia de Cloud SQL para PostgreSQL contiene exactamente un clúster de base de datos. Un clúster de base de datos es una colección de bases de datos que se almacena en un área de datos común.
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 PostgreSQL La instancia de Cloud SQL para PostgreSQL es comparable con la CDB de Oracle. Ambas proporcionan una capa de sistema para las bases de datos alojadas.
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. esquemas/
bases de datos PostgreSQL
Una base de datos de Cloud SQL para PostgreSQL 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). Secuencia temporal La secuencia temporal se crea para la sesión de base de datos actual y se descarta automáticamente cuando se cierra la sesión.
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. Columna SERIAL Cuando defines el tipo de datos de una columna como SERIAL, Cloud SQL para PostgreSQL crea de forma automática una secuencia y propaga el valor de la columna con esa secuencia cuando se insertan filas nuevas en la tabla.
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) Cloud SQL para PostgreSQL no tiene una característica de fragmentación equivalente. La fragmentación se puede implementar con Cloud SQL para PostgreSQL (como la plataforma de datos) con una capa de aplicación compatible.
Base de datos en memoria Oracle proporciona un conjunto de funciones que pueden mejorar el rendimiento de la base de datos para OLTP y para cargas de trabajo mixtas. No compatible Cloud SQL para PostgreSQL no tiene una característica equivalente integrada. Sin embargo, puedes usar nuestro servicio administrado de Redis, 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 Cloud SQL para PostgreSQL no tiene una característica equivalente integrada. Sin embargo, la Protección de datos sensibles se puede aprovechar para desidentificar datos sensibles.

Funcionalidad

Aunque las bases de datos de Oracle 11g o 12c y Cloud SQL para PostgreSQL se basan 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 con propiedades de ACID. También administran las contenciones de bloqueo con varios niveles de aislamiento (según las necesidades de la aplicación) y cumplen con los requisitos constantes de las aplicaciones para las operaciones de procesamiento de transacciones 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 PostgreSQL. En algunos casos, cuando se considera necesario destacar las diferencias, la sección incluye comparaciones técnicas detalladas.

Crea y visualiza bases de datos existentes

Oracle 11g/12c Cloud SQL para PostgreSQL 12
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:

postgres=> CREATE DATABASE PGSQLDB;
Oracle 12c Cloud SQL para PostgreSQL 12
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. Usas 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:

postgres=> CREATE DATABASE PGSQLDB;
Enumera todas las PDB:

SQL> SHOW is PDBS;
Enumera todas las bases de datos existentes:

postgres=> \list
Conéctate a otra PDB:

SQL> ALTER SESSION SET CONTAINER=pdb;
Conéctate a una base de datos diferente:

postgres=> \connect databaseName;
O:

postgres=> \c 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 PostgreSQL; 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 Google Cloud

  • En la consola de Google Cloud, ve a Bases de datos>SQL>Instancia>(Selecciona tu instancia de PostgreSQL)>Bases de datos.

    Administra una base de datos a través de la consola de Google Cloud.

Diccionario de datos y vistas dinámicas

Las bases de datos de Oracle proporcionan un diccionario de datos junto con vistas de rendimiento dinámicas (vistas de V$) que facilitan una variedad de tareas de mantenimiento y supervisión de bases de datos. El diccionario de datos almacena toda la información que se usa para administrar los objetos en la base de datos, mientras que las vistas de rendimiento dinámicas contienen mucha información relacionada con el rendimiento de la base de datos. Estas vistas se actualizan de forma continua mientras se ejecuta la base de datos.

Por el contrario, PostgreSQL proporciona varios catálogos de metadatos que tienen un propósito similar al diccionario de datos de Oracle y las vistas de rendimiento dinámicas:

  • Catálogo de sistemas: metadatos sobre todos los objetos de la base de datos.
  • Vistas de recolección estadística: Informes sobre las actividades de PostgreSQL.
  • Vistas de esquema de información: Metadatos sobre todos los objetos de la base de datos informados de acuerdo con el estándar ANSI SQL.

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 más comunes y las vistas dinámicas del sistema que se usaron en Oracle, así como sus objetos de base de datos correspondientes en Cloud SQL para PostgreSQL versión 12.

Oracle proporciona cientos de tablas y vistas de metadatos del sistema (por ejemplo, en algunos esquemas del sistema, por ejemplo, SYS o SYSTEM), mientras que PostgreSQL conserva solo varias docenas. 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, como SYS y SYSTEM.

Para las vistas de rendimiento dinámicas, Oracle usa los prefijos V$/GV$. Por el contrario, los metadatos y las vistas de Cloud SQL para PostgreSQL residen en esquemas information_schema y pg_catalog.

Tipo de metadatos Vista/Tabla de Oracle Tabla/vista/consulta de Cloud SQL para PostgreSQL
Sesiones abiertas V$SESSION pg_catalog.pg_stat_activity
Transacciones en ejecución V$TRANSACTION No compatible. Como solución alternativa, pg_locks proporciona una lista de transacciones abiertas que contienen uno o más bloqueos.
Objetos de base de datos DBA_OBJECTS pg_catalog.pg_class
Tablas DBA_TABLES pg_catalog.pg_tables
Columnas de la tabla DBA_TAB_COLUMNS pg_catalog.pg_attribute
Privilegios de tablas y columnas TABLE_PRIVILEGES
DBA_COL_PRIVS ROLE_TAB_PRIVS
information_schema.table_privileges information_schema.column_privileges
Particiones DBA_TAB_PARTITIONS DBA_TAB_SUBPARTITIONS pg_catalog.pg_partitioned_table
Vistas DBA_VIEWS pg_catalog.pg_views
Limitaciones DBA_CONSTRAINTS pg_catalog.pg_constraint
Índices DBA_INDEXES
DBA_PART_INDEXES
pg_catalog.pg_index
Vistas materializadas DBA_MVIEWS pg_catalog.pg_matviews
Procedimientos almacenados DBA_PROCEDURES pg_catalog.pg_proc
Funciones almacenadas DBA_PROCEDURES pg_catalog.pg_proc
Activadores DBA_TRIGGERS pg_catalog.pg_trigger
Usuarios DBA_USERS pg_catalog.pg_user
Privilegios de usuario DBA_SYS_PRIVS
DBA_ROLE_PRIVS
SESSION_PRIVS
pg_catalog.pg_roles
Trabajos/
Programador
DBA_JOBS
DBA_JOBS_RUNNING
DBA_SCHEDULER_JOBS
DBA_SCHEDULER_JOB_LOG
No compatible.
Espacios de tabla DBA_TABLESPACES pg_catalog.pg_tablespace
Archivos de datos DBA_DATA_FILES No compatible.
Sinónimos DBA_SYNONYMS No compatible.
Secuencias DBA_SEQUENCES pg_catalog.pg_sequence
Vínculos a bases de datos DBA_DB_LINKS pg_catalog.pg_foreign_server
Estadísticas DBA_TAB_STATISTICS DBA_TAB_COL_STATISTICS DBA_SQLTUNE_STATISTICS DBA_CPU_USAGE_STATISTICS pg_catalog.pg_stats
pg_catalog.pg_statistic
pg_catalog.pg_stat_database
pg_catalog.pg_stat_all_tables
pg_catalog.pg_stat_all_indexes
pg_catalog.pg_statio_all_tables
pg_catalog.pg_statio_all_indexes
pg_catalog.pg_statio_all_sequences
Bloqueos DBA_LOCK
DBA_DDL_LOCKS
DBA_DML_LOCKS
V$SESSION_BLOCKERS
V$LOCKED_OBJECT
pg_catalog.pg_locks
Parámetros de base de datos V$PARAMETER
V$NLS_PARAMETERS
SHOW PARAMETER <Param>

pg_catalog.pg_settings show
Segmentos DBA_SEGMENTS No compatible.
Funciones DBA_ROLES
DBA_ROLE_PRIVS
USER_ROLE_PRIVS
pg_catalog.pg_roles
Historial de sesiones V$ACTIVE_SESSION_HISTORY
DBA_HIST_*
No compatible.
Versión V$VERSION select version();
Eventos de espera V$WAITCLASSMETRIC
V$WAITCLASSMETRIC_HISTORY
V$WAITSTAT
V$WAIT_CHAINS
No compatible.
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
No compatible.
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 No está integrado en Cloud SQL para PostgreSQL. Usa la extensión pg_buffercache para examinar la caché del búfer compartido en tiempo real.

Parámetros del sistema

Las bases de datos de Oracle y Cloud SQL para PostgreSQL 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 al siguiente:

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 PostgreSQL

Puedes modificar los parámetros del sistema de Cloud SQL para PostgreSQL mediante las marcas de configuración en la consola de Google Cloud, gcloud CLI o CURL. Consulta la lista completa de todos los parámetros compatibles con Cloud SQL para PostgreSQL que puedes modificar.

Los parámetros de PostgreSQL se pueden dividir en varios permisos:

  • Parámetros dinámicos: se pueden modificar en el tiempo de ejecución.
  • Parámetros de base de datos: se aplica solo a una base de datos específica dentro de una instancia de PostgreSQL.
  • Parámetros de rol: Se aplican solo a un rol específico de la base de datos.
  • Parámetros estáticos: requieren que se reinicie la instancia para surtir efecto.
  • 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.
  • Parámetros globales: tendrán un efecto global en todas las sesiones actuales y futuras.

Ejemplos de alteración de los parámetros de Cloud SQL para PostgreSQL

Console

Usa la consola de Google Cloud para habilitar el parámetro log_connections.

  1. Ve a la página Edit instance (Editar instancia) de Cloud Storage.

    Ir a Instancias

  2. En Marcas, haz clic en Agregar elemento y busca log_connections, como en la siguiente captura de pantalla.

    Habilitar conexiones de registro en la consola.

gcloud

  • Usa la CLI de gcloud para habilitar el parámetro log_connections:
gcloud sql instances patch INSTANCE_NAME \
    --database-flags log_connections=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/postgres/flags - to see if your
instance will be restarted when this patch is submitted.

Do you want to continue (Y/n)?

Cloud SQL para PostgreSQL

Establece timezone 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.

  1. Muestra el parámetro de configuración timezone:

    postgres=> SHOW timezone;
    

    Verás el siguiente resultado, en el que timezone está set to UTC:

     TimeZone
    ----------
     UTC
    (1 row)
    
  2. Establece timezone como UTC-9:

    postgres=> SET timezone='UTC-9';
    
  3. Muestra el parámetro de configuración timezone:

    postgres> SHOW timezone;
    

    Verás el siguiente resultado, en el que timezone está configurado como UTC-9:

     TimeZone
    ----------
     UTC-9
    (1 row)
    

Transacciones y niveles de aislamiento

En esta sección, se describen las principales diferencias en los niveles de aislamiento y ejecución de transacciones entre Oracle y Cloud SQL para PostgreSQL.

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 PostgreSQL es que PostgreSQL emite de forma implícita un COMMIT después de cada comando que no sigue a START TRANSACTION (o BEGIN). Otros motores de bases de datos también lo conocen como confirmación automática. Aunque la confirmación automática está habilitada de forma predeterminada, se puede inhabilitar a nivel de la sesión mediante SET AUTOCOMMIT OFF.

Niveles de aislamiento

El estándar ANSI/ISO de SQL (SQL:92) 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 (SQL:92)

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 PostgreSQL es compatible con los siguientes cuatro niveles de aislamiento de transacción especificados en el estándar ANSI SQL:92:

  • Lectura no confirmada (equivalente a lectura confirmada)
  • Lectura confirmada (predeterminado)
  • Lectura repetible
  • Serializable

El nivel de aislamiento predeterminado de Cloud SQL para PostgreSQL es READ COMMITTED. Estos niveles de aislamiento se pueden modificar a nivel de SESSION, a nivel de TRANSACTION y a nivel de INSTANCE.

Para verificar los niveles de aislamiento actuales en los niveles TRANSACTION y SESSION, usa la siguiente declaración:

postgres=> SELECT CURRENT_SETTING('TRANSACTION_ISOLATION');

Este es el resultado:

 current_setting
-----------------
 read committed
(1 row)

Puedes modificar la sintaxis del nivel de aislamiento de la siguiente manera:

SET [SESSION CHARACTERISTICS AS] TRANSACTION ISOLATION LEVEL [ REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE]

Además, puedes modificar el nivel de aislamiento a nivel de SESIÓN:

postgres=> SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ;

-- Verify

postgres=> SELECT CURRENT_SETTING('TRANSACTION_ISOLATION');

Esta es la salida:

 current_setting
-----------------
 repeatable read
(1 row)

El nivel de aislamiento en los niveles INSTANCE se controla mediante la marca de base de datos default_transaction_isolation. Para verificarlo, usa la siguiente instrucción:

postgres=> SHOW DEFAULT_TRANSACTION_ISOLATION;

Este es el resultado:

 default_transaction_isolation
-------------------------------
 repeatable read
(1 row)

¿Qué sigue?