Migrar utilizadores do Oracle® para o Cloud SQL para PostgreSQL: terminologia e funcionalidade

Este documento faz parte de uma série que fornece informações e orientações importantes relacionadas com o planeamento e a execução de migrações de bases de dados Oracle® 11g/12c para o Cloud SQL para PostgreSQL versão 12. Além da parte de configuração introdutória, a série inclui as seguintes partes:

Terminologia

Esta secção detalha as semelhanças e as diferenças na terminologia das bases de dados entre o Oracle e o Cloud SQL para PostgreSQL. Reveja e compare os aspetos principais de cada uma das plataformas de base de dados. A comparação distingue entre as versões 11g e 12c do Oracle, devido a diferenças arquitetónicas (por exemplo, o Oracle 12c introduz a funcionalidade multi-inquilino). A versão do Cloud SQL para PostgreSQL referenciada aqui é a 12.

Esta secção realça as principais diferenças de terminologia entre o Oracle e o Cloud SQL para PostgreSQL. Uma descrição de baixo nível é detalhada mais adiante neste documento.

Oracle 11g Descrição Cloud SQL para PostgreSQL Principais diferenças
instance Uma única instância do Oracle 11g só pode conter uma base de dados. instance Uma instância do Cloud SQL para PostgreSQL contém exatamente um cluster de base de dados. Um cluster de base de dados é uma coleção de bases de dados armazenada numa área de dados comum.
base de dados Uma base de dados é qualificada como uma única instância (o nome da base de dados é idêntico ao nome da instância). base de dados Várias ou uma única base de dados servem várias aplicações.
schema O esquema e os utilizadores são idênticos porque ambos são considerados proprietários de objetos da base de dados (é possível criar um utilizador sem especificar ou atribuir a um esquema). schema Uma base de dados contém um ou mais esquemas. Os objetos, como tabelas, estão contidos em esquemas. Pode usar o mesmo nome de objeto em esquemas diferentes na mesma base de dados sem conflitos.
user Idêntico ao esquema, uma vez que ambos são proprietários de objetos de base de dados. Por exemplo, instância → base de dados → esquemas/utilizadores → objetos de base de dados. função Uma função pode ser um utilizador da base de dados ou um grupo de utilizadores da base de dados, consoante a forma como está configurada. Pode ser proprietário de objetos da base de dados, como tabelas.

As funções têm âmbito num cluster de base de dados completo e é possível conceder a associação de uma função a outra função.
função Conjunto definido de autorizações da base de dados que podem ser encadeadas como um grupo e podem ser atribuídas a utilizadores da base de dados
admin/
Utilizadores do SISTEMA
Utilizadores administradores da Oracle com o nível de acesso mais elevado:
SYS
SYSTEM
cloudsqlsuperuser O Cloud SQL para PostgreSQL é fornecido com o utilizador postgres predefinido. Este utilizador faz parte da função cloudsqlsuperuser e tem os seguintes atributos (privilégios): CREATEROLE, CREATEDB e LOGIN.

Uma vez que o Cloud SQL para PostgreSQL é um serviço gerido, restringe o acesso a determinadas tabelas e procedimentos do sistema que exigem privilégios avançados. Por conseguinte, o utilizador postgres não tem os atributos SUPERUSER nem REPLICATION. Não pode criar nem ter acesso a utilizadores com atributos superuser.
dictionary/
metadata
A Oracle usa as seguintes tabelas de metadados:

USER_TableName
ALL_TableName
DBA_TableName
dictionary/
metadata
O Cloud SQL para PostgreSQL usa a norma ANSIINFORMATION_SCHEMA para fornecer informações de dicionário e metadados.
Vistas dinâmicas do sistema Vistas dinâmicas da Oracle:
V$ViewName
sistema
visualizações dinâmicas
O Cloud SQL para PostgreSQL tem as seguintes vistas de estatísticas dinâmicas:
pg_stat_ViewName
pg_statio_ViewName
tablespace As estruturas de armazenamento lógicas principais das bases de dados Oracle; cada tablespace pode conter um ou mais ficheiros de dados. tablespace No Cloud SQL para PostgreSQL, os ficheiros de dados são armazenados em conjunto no diretório de dados de um cluster de base de dados PGDATA através de uma estrutura de diretórios predefinida. Os espaços de tabelas no Cloud SQL para PostgreSQL oferecem um mecanismo para definir localizações personalizadas no sistema de ficheiros onde os ficheiros de dados podem ser armazenados.

Uma vez que o Cloud SQL para PostgreSQL é um serviço gerido, Google Cloud gere o sistema de ficheiros subjacente da máquina anfitriã por si. Não pode criar novos espaços de tabelas no Cloud SQL para PostgreSQL.
ficheiros de dados Os elementos físicos
de uma base de dados Oracle que contêm os dados e são definidos num tablespace específico.

Um único ficheiro de dados é definido pelo tamanho inicial e pelo tamanho máximo, e pode conter dados para várias tabelas.

Os ficheiros de dados do Oracle usam o sufixo .dbf (não obrigatório).
ficheiros de dados O Cloud SQL para PostgreSQL armazena cada base de dados num cluster de bases de dados no seu próprio subdiretório. Cada tabela e índice numa base de dados é armazenado num ficheiro separado nesse subdiretório.
system tablespace Contém as tabelas do dicionário de dados e os objetos de visualização para toda a base de dados Oracle. Não existe As tabelas do dicionário de dados e os objetos de visualizações são armazenados em INFORMATION_SCHEMA no diretório de dados de um cluster de base de dados PGDATA através de uma estrutura de diretórios predefinida.
espaço de tabelas temporário Contém objetos de esquema válidos durante uma sessão; além disso,
suporta a execução de operações que não cabem na memória do servidor.
ficheiros temporários Os ficheiros temporários são usados para armazenar operações em execução que não cabem na memória do servidor. Estes ficheiros são armazenados num diretório denominado pgsql_tmp e são criados apenas enquanto a declaração SQL está a ser executada.
Anule o tablespace Um tipo especial de espaço de tabelas permanente do sistema usado pela Oracle para gerir
operações de reversão quando a base de dados é executada no modo de gestão de anulação automática (predefinição).
Não existe Para permitir operações de reversão, o Cloud SQL para PostgreSQL retém linhas atualizadas ou eliminadas no próprio ficheiro de dados da tabela. A limpeza é o processo de recuperação ou reutilização do espaço em disco ocupado por linhas atualizadas ou eliminadas.
ASM O Oracle Automatic Storage Management é um sistema de ficheiros de base de dados integrado de elevado desempenho e um gestor de discos, tudo feito automaticamente por uma base de dados Oracle configurada com o ASM. Não suportado O Cloud SQL para PostgreSQL baseia-se no sistema de ficheiros do SO para armazenar ficheiros de dados e não tem um equivalente do Oracle ASM. No entanto, o Cloud SQL para PostgreSQL suporta muitas funcionalidades que oferecem automatização do armazenamento, como aumentos automáticos do armazenamento, desempenho e escalabilidade.
tabelas/vistas Objetos de base de dados fundamentais criados pelo utilizador. tabelas/vistas Idêntico ao Oracle.
vistas materializadas Definidos com
declarações SQL específicas e podem ser atualizados manual ou automaticamente com base em configurações específicas.
vistas materializadas As vistas materializadas funcionam de forma semelhante ao Oracle. São atualizados manualmente através de declarações REFRESH MATERIALIZED VIEW.
sequência Gerador de valores únicos da Oracle. sequência Semelhante à Oracle.
sinónimo Objetos da base de dados Oracle que funcionam como identificadores alternativos para outros objetos da base de dados. Não suportado O Cloud SQL para PostgreSQL não oferece sinónimos. Como solução alternativa, pode usar vistas ao definir as autorizações adequadas.
particionamento A Oracle oferece muitas soluções de partição para dividir tabelas grandes em partes geridas mais pequenas. particionamento O Cloud SQL para PostgreSQL suporta a partição declarativa no estilo Oracle e a partição através da herança, o que permite uma maior flexibilidade de partição.
Base de dados de reversão Funcionalidade proprietária da Oracle que pode ser usada para inicializar uma base de dados Oracle para uma hora definida anteriormente, o que lhe permite consultar ou restaurar dados que foram modificados ou corrompidos por engano. Não suportado Como solução alternativa, pode usar cópias de segurança do Cloud SQL e a recuperação num ponto específico no tempo para restaurar uma base de dados para um estado anterior (por exemplo, restaurar antes de eliminar uma tabela).
sqlplus Interface de linhas de comando da Oracle que lhe permite consultar e gerir a instância da base de dados. psql Interface de linhas de comando equivalente ao Cloud SQL para PostgreSQL para consultar e gerir. Pode ser estabelecida ligação a partir de qualquer cliente com as autorizações adequadas para o Cloud SQL.
PL/SQL A Oracle estendeu a linguagem processual ao SQL ANSI. PL/pgSQL O Cloud SQL para PostgreSQL tem a sua própria linguagem procedural denominada PL/pgSQL, que é semelhante ao PL/SQL da Oracle em muitos aspetos. Para ver um resumo das principais diferenças entre os dois idiomas, consulte o artigo Transferir do Oracle PL/SQL.
pacote e corpo do pacote Funcionalidade específica da Oracle para agrupar procedimentos e funções armazenados sob a mesma referência lógica. Não suportado O Cloud SQL para PostgreSQL organiza as funções através de esquemas.
procedimentos e funções armazenados Usa PL/SQL para implementar a funcionalidade do código. Procedimentos e funções armazenados O Cloud SQL para PostgreSQL suporta a implementação de procedimentos e funções armazenados através de várias linguagens de programação, como PL/pgSQL e C.
acionar Objeto Oracle usado para controlar a implementação de DML em tabelas. acionar Semelhante à Oracle.
PFILE/SPFILE Os parâmetros ao nível da instância e da base de dados do Oracle são mantidos num ficheiro binário conhecido como SPFILE (nas versões anteriores, o ficheiro chamava-se PFILE), que pode ser usado como um ficheiro de texto para definir parâmetros manualmente. Flags da base de dados do Cloud SQL para PostgreSQL Pode definir ou modificar os parâmetros do Cloud SQL para PostgreSQL através do utilitário de sinalizadores de base de dados.
SGA/PGA/
AMM
Parâmetros de memória do Oracle que controlam a atribuição de memória à instância da base de dados. Uma variedade de parâmetros relacionados com a memória O Cloud SQL para PostgreSQL tem os seus próprios parâmetros de memória. Alguns parâmetros semelhantes são shared_buffers, temp_buffers e work_mem. No Cloud SQL para PostgreSQL, estes parâmetros são predefinidos pelo tipo de instância escolhido, e o valor é alterado em conformidade. Pode ajustar alguns destes parâmetros através do utilitário de flags da base de dados.
cache de buffer Reduz as operações de E/S de SQL ao obter dados em cache da cache de buffer. Os parâmetros de memória podem ser geridos ao nível da base de dados e ao nível da sessão através de sugestões de consultas. Funcionalidade semelhante O tamanho da cache de buffer do Cloud SQL para PostgreSQL é controlado pelo parâmetro shared_buffer, que não está exposto no Cloud SQL. O Cloud SQL fornece uma métrica de utilização de memória, que é usada para dimensionar corretamente a instância.
sugestões de base de dados Capacidade da Oracle de fornecer um impacto controlado nas declarações SQL que vão influenciar o comportamento do otimizador para obter um melhor desempenho. A Oracle tem mais de 50 sugestões de bases de dados diferentes. Não suportado O Cloud SQL para PostgreSQL não suporta sugestões de bases de dados. Pode controlar o planeador de consultas do Cloud SQL para PostgreSQL até certo ponto através da sintaxe JOIN explícita.
RMAN Utilitário Oracle Recovery Manager. Usado para fazer cópias de segurança da base de dados com funcionalidade alargada para suportar vários cenários de recuperação de desastres e muito mais (clonagem, etc.). Cópia de segurança do Cloud SQL para PostgreSQL O Cloud SQL para PostgreSQL oferece dois métodos para aplicar cópias de segurança completas: cópias de segurança a pedido e automáticas.
Data Pump
(EXPDP/
IMPDP)
Utilitário de geração de despejos do Oracle que pode ser usado para muitas funcionalidades, como: exportação/importação, cópia de segurança da base de dados (ao nível do esquema ou do objeto), metadados do esquema, geração de ficheiros SQL do esquema e muito mais. Exportação/importação do Cloud SQL para PostgreSQL O Cloud SQL para PostgreSQL oferece dois formatos de exportação/importação para e a partir de contentores do Cloud Storage: SQL e CSV.

Em alternativa, pode estabelecer ligação à instância da base de dados através de utilitários de exportação/importação, como o pg_dump.
SQL*Loader Ferramenta que lhe permite carregar dados de ficheiros externos, como ficheiros de texto, ficheiros CSV e muito mais. psql \copy O comando \copy no cliente psql permite-lhe carregar ficheiros de texto, CSV ou binários (o Oracle suporta formatos de ficheiros adicionais) para uma tabela de base de dados com uma estrutura correspondente.
Data Guard Solução de recuperação de desastres da Oracle que usa uma instância em espera, o que permite aos utilizadores realizar operações READ a partir da instância em espera. Alta disponibilidade e replicação do Cloud SQL para PostgreSQL Para alcançar a recuperação de desastres ou a elevada disponibilidade, o Cloud SQL para PostgreSQL oferece a arquitetura de réplica de failover e, para operações só de leitura (separação READ/WRITE), usa a réplica de leitura.
Active Data Guard/
GoldenGate
As principais soluções de replicação da Oracle, que podem servir vários propósitos, como Standby (DR), instância só de leitura, replicação bidirecional (vários mestres), armazenamento de dados e muito mais. Réplica de leitura do Cloud SQL para PostgreSQL Réplica de leitura do Cloud SQL para PostgreSQL para implementar o clustering com separação de LEITURA/ESCRITA. Atualmente, não existe suporte para a configuração de vários mestres, como a replicação bidirecional do GoldenGate ou a replicação heterogénea.
RAC Oracle Real Application Cluster. Solução de clustering proprietária da Oracle para fornecer alta disponibilidade através da implementação de várias instâncias da base de dados com uma única unidade de armazenamento. Não suportado O Cloud SQL para PostgreSQL não suporta uma arquitetura com vários mestres. O Cloud SQL para PostgreSQL oferece alta disponibilidade através de uma instância de reserva e maior escalabilidade de leitura através de réplicas de leitura.
Grid/Cloud Control (OEM) Software Oracle para gerir e monitorizar bases de dados e outros serviços relacionados num formato de aplicação Web. Esta ferramenta é útil para a análise de bases de dados em tempo real, de modo a compreender cargas de trabalho elevadas. Google Cloud consola
Cloud Monitoring
Use o Cloud SQL para PostgreSQL para a monitorização, incluindo gráficos detalhados baseados no tempo e nos recursos. Use também o Cloud Monitoring para reter métricas de monitorização específicas do Cloud SQL for PostgreSQL e análise de registos para capacidades de monitorização avançadas.
Registos de refazer Registos de transações do Oracle que consistem em dois (ou mais) ficheiros definidos pré-atribuídos que armazenam todas as modificações de dados à medida que ocorrem. O objetivo principal do registo de repetição é proteger a base de dados em caso de falha de uma instância. Registos WAL O Cloud SQL para PostgreSQL usa o Write-Ahead Logging (WAL) para que as alterações aos ficheiros de dados sejam descarregadas para o armazenamento permanente para permitir a recuperação em caso de falha.
arquivar registos Os registos de arquivo oferecem suporte para operações de cópia de segurança e replicação, entre outras. A Oracle escreve nos registos de arquivo (se ativados) após cada operação de comutação de registos de refazimento. Arquivo WAL Implementação do Cloud SQL para PostgreSQL da retenção de registos WAL. O arquivo WAL é usado e ativado com a recuperação num determinado momento.
ficheiro de controlo O ficheiro de controlo do Oracle contém informações sobre a base de dados, como ficheiros de dados, nomes de registos de repetição, localizações, o número de sequência de registos atual e informações sobre o ponto de verificação da instância. PGDATA and pg_control A arquitetura do Cloud SQL para PostgreSQL não partilha um conceito equivalente a um ficheiro de controlo do Oracle. Os ficheiros relacionados com a base de dados estão organizados num diretório normalmente denominado PGDATA. As informações WAL relacionadas com registos e pontos de verificação são armazenadas em pg_control.
Número de alteração do sistema (SCN) O SCN marca um ponto específico no tempo numa base de dados Oracle. Número de sequência do registo (LSN) O equivalente do Cloud SQL para PostgreSQL é o LSN. Tal como os SCNs, os LSNs aumentam monotonicamente ao longo do tempo.
AWR O AWR (repositório de carga de trabalho automático) da Oracle é um relatório detalhado que fornece informações detalhadas sobre o desempenho da instância da base de dados Oracle e é considerado uma ferramenta de DBA para diagnósticos de desempenho. coletor de estatísticas O Cloud SQL para PostgreSQL não tem um relatório equivalente ao AWR da Oracle, mas o PostgreSQL recolhe dados de desempenho recolhidos pelo coletor de estatísticas. As estatísticas recolhidas são expostas através das vistas pg_stat_* e pg_statio_*.
DBMS_SCHEDULER Utilitário Oracle usado para definir e sincronizar operações predefinidas. Não suportado O Cloud SQL para PostgreSQL não oferece uma utilidade de agendamento integrada.

Google Cloud oferece o Cloud Scheduler, que lhe permite agendar tarefas de base de dados, como exportações.
Encriptação de dados transparente Encripta os dados armazenados em discos como proteção de dados em repouso. Norma de encriptação avançada do Cloud SQL O Cloud SQL para PostgreSQL usa o Advanced Encryption Standard (AES-256) de 256 bits para proteger os dados em repouso e em trânsito.
Compressão avançada Para melhorar a área de armazenamento da base de dados, reduzir os custos de armazenamento e melhorar o desempenho da base de dados, a Oracle oferece capacidades de compressão avançadas de dados (tabelas/índices). TOAST Embora não seja diretamente comparável à compressão avançada da Oracle, o Cloud SQL para PostgreSQL usa uma infraestrutura denominada TOAST para comprimir automaticamente e de forma transparente dados de comprimento variável que são demasiado grandes para caber numa única página de dados.
SQL Developer GUI de SQL gratuita da Oracle para gerir e executar declarações de SQL e PL/SQL. pgAdmin A GUI de SQL gratuita do Cloud SQL para PostgreSQL para gerir e executar declarações de código SQL e PostgreSQL.
Registo de alertas O registo principal da Oracle para operações e erros gerais da base de dados. Relatórios e registos de erros do PostgreSQL Use o Visualizador de registos do Cloud Logging para inspecionar os registos de erros do PostgreSQL.
Tabela DUAL Tabela especial da Oracle para obter valores de pseudocolunas, como SYSDATE ou USER. Não existe O Cloud SQL para PostgreSQL permite que as cláusulas FROM sejam omitidas das declarações SQL. Por exemplo:

SELECT NOW();
é uma declaração válida no PostgreSQL.
tabela externa O Oracle permite que os utilizadores criem tabelas externas com os dados de origem em ficheiros fora da base de dados. Não suportado Como um serviço gerido, o Cloud SQL para PostgreSQL não expõe o sistema de ficheiros subjacente do anfitrião que executa a instância da base de dados.

Como solução alternativa, pode importar os dados de origem para uma tabela do PostgreSQL para consultar os dados.
Ouvinte Processo de rede da Oracle encarregado de ouvir as ligações de bases de dados recebidas. Redes autorizadas do Cloud SQL O Cloud SQL para PostgreSQL aceita ligações de origens remotas assim que forem permitidas na página de configuração de redes autorizadas do Cloud SQL.
TNSNAMES Ficheiro de configuração de rede do Oracle que define endereços de bases de dados para estabelecer ligações através de alias de ligação. Não existe O Cloud SQL para PostgreSQL aceita ligações externas através do nome de ligação da instância do Cloud SQL ou do endereço IP privado/público. O proxy do Cloud SQL é um método de acesso seguro adicional para estabelecer ligação ao Cloud SQL para PostgreSQL sem ter de permitir endereços IP específicos ou configurar o SSL.
Porta predefinida da instância 1521 Porta predefinida da instância 5432
Link da base de dados Objetos de esquema do Oracle que podem ser usados para interagir com objetos de base de dados locais/remotos. Foreign Data Wrapper (FDW) A extensão postgres_fdw no Cloud SQL para PostgreSQL permite que as tabelas de outras bases de dados PostgreSQL ("externas") sejam expostas como tabelas "externas" na base de dados atual. Essas tabelas ficam disponíveis para utilização, quase como se fossem tabelas locais.

Diferenças na terminologia entre o Oracle 12c e o Cloud SQL para PostgreSQL

Oracle 12c Descrição Cloud SQL para PostgreSQL Principais diferenças
Instância A capacidade multi-inquilino introduzida no Oracle 12c permite que uma instância contenha várias bases de dados como bases de dados conectáveis (PDBs), ao contrário do Oracle 11g, em que uma instância do Oracle pode alojar uma única base de dados. Instância Uma instância do Cloud SQL para PostgreSQL contém exatamente um cluster de base de dados. Um cluster de base de dados é uma coleção de bases de dados armazenada numa área de dados comum.
CDB Uma base de dados de contentor multiinquilino (CDB) pode suportar uma ou mais PDBs, enquanto podem ser criados objetos globais da CDB (afetam todas as PDBs), como funções. Instância do PostgreSQL A instância do Cloud SQL para PostgreSQL é comparável ao CDB do Oracle. Ambos fornecem uma camada de sistema para as bases de dados alojadas.
PDB As PDBs (bases de dados conectáveis) podem ser usadas para isolar serviços e aplicações uns dos outros e podem ser usadas como uma coleção portátil de esquemas. Bases de dados PostgreSQL/
esquemas
Uma base de dados do Cloud SQL para PostgreSQL pode servir vários serviços e aplicações, bem como muitos utilizadores de bases de dados.
Sequências de sessões A partir do Oracle 12c, as sequências podem ser criadas ao nível da sessão (devolvem valores únicos apenas numa sessão) ou ao nível global (por exemplo, quando usa tabelas temporárias). Sequência temporária A sequência temporária é criada para a sessão da base de dados atual e é eliminada automaticamente quando a sessão é terminada.
Colunas de identidade O tipo IDENTITY do Oracle 12c gera uma sequência e associa-a a uma coluna de tabela sem necessidade de criar manualmente um objeto de sequência separado. Coluna SERIAL Ao definir o tipo de dados de uma coluna como SERIAL, o Cloud SQL para PostgreSQL cria automaticamente uma sequência e preenche o valor da coluna com essa sequência quando são inseridas novas linhas na tabela.
Fragmentação A fragmentação da Oracle é uma solução em que uma base de dados Oracle é dividida em várias bases de dados mais pequenas (fragmentos) para permitir a escalabilidade, a disponibilidade e a geodistribuição para ambientes OLTP. Não suportado (como funcionalidade) O Cloud SQL para PostgreSQL não tem uma funcionalidade de divisão equivalente. A divisão horizontal pode ser implementada através do Cloud SQL para PostgreSQL (como plataforma de dados) com uma camada de aplicação de apoio.
Base de dados na memória A Oracle oferece um conjunto de funcionalidades que podem melhorar o desempenho da base de dados para OLTP, bem como para cargas de trabalho mistas. Não suportado O Cloud SQL para PostgreSQL não tem uma funcionalidade equivalente incorporada. No entanto, pode usar o nosso serviço Redis gerido, o Memorystore, como alternativa.
Ocultação Como parte das funcionalidades de segurança avançadas da Oracle, a ocultação pode realizar a ocultação de colunas para impedir que os dados confidenciais sejam obtidos por utilizadores e aplicações. Não suportado O Cloud SQL para PostgreSQL não tem uma funcionalidade equivalente incorporada. No entanto, a proteção de dados confidenciais pode ser usada para remover a identificação de dados confidenciais.

Funcionalidade

Embora as bases de dados Oracle 11g/12c e Cloud SQL para PostgreSQL sejam criadas em arquiteturas diferentes (infraestrutura e linguagens processuais alargadas), partilham os mesmos aspetos fundamentais de um sistema de base de dados relacional. Suportam objetos de base de dados, cargas de trabalho de concorrência multiutilizador e transações com propriedades ACID. Também gerem contestações de bloqueio com vários níveis de isolamento (com base nas necessidades da aplicação) e atendem aos requisitos da aplicação em curso para operações de processamento transacional online (OLTP) e processamento analítico online (OLAP).

A secção seguinte oferece uma vista geral de algumas das principais diferenças funcionais entre o Oracle e o Cloud SQL para PostgreSQL. Em alguns casos, quando for considerado necessário realçar as diferenças, a secção inclui comparações técnicas detalhadas.

Criar e ver bases de dados existentes

Oracle 11g/12c Cloud SQL para PostgreSQL 12
Normalmente, cria bases de dados e vê as existentes através do utilitário Oracle Database Creation Assistant (DBCA). As bases de dados ou as instâncias criadas manualmente requerem que especifique parâmetros adicionais:

SQL> CREATE DATABASE ORADB
USER SYS IDENTIFIED BY password
USER SYSTEM IDENTIFIED BY password
EXTENT MANAGEMENT LOCAL
DEFAULT TEMPORARY TABLESPACE temp
UNDO TABLESPACE undotbs1
DEFAULT TABLESPACE users;
Use uma declaração do formulário CREATE DATABASE Name;, como neste exemplo:

postgres=> CREATE DATABASE PGSQLDB;
Oracle 12c Cloud SQL para PostgreSQL 12
No Oracle 12c, pode criar PDBs a partir da seed, quer a partir de um modelo de base de dados de contentor (CDB) ou clonando uma PDB a partir de uma PDB existente. Usa vários parâmetros:

SQL> CREATE PLUGGABLE DATABASE PDB
ADMIN USER usr IDENTIFIED BY passwd
ROLES = (dba)
DEFAULT TABLESPACE sales
DATAFILE '/disk1/ora/dbs/db/db.dbf'
SIZE 250M AUTOEXTEND ON
FILE_NAME_CONVERT =
('/disk1/oracle/dbs/pdbseed/',
'/disk1/oracle/dbs/salespdb/')
STORAGE (MAXSIZE 2G)
PATH_PREFIX =
'/disk1/oracle/dbs/salespdb/';
Use uma declaração do formulário CREATE DATABASE Name;, como neste exemplo:

postgres=> CREATE DATABASE PGSQLDB;
Listar todas as PDBs:

SQL> SHOW is PDBS;
Apresentar todas as bases de dados existentes:

postgres=> \list
Associe a uma PDB diferente:

SQL> ALTER SESSION SET CONTAINER=pdb;
Associe a uma base de dados diferente:

postgres=> \connect databaseName;
Ou:

postgres=> \c databaseName
Abrir ou fechar um PDB específico (abrir/só de leitura):

SQL> ALTER PLUGGABLE DATABASE pdb CLOSE;
Não suportado para uma única base de dados.

Todas as bases de dados estão na mesma instância do Cloud SQL para PostgreSQL; por isso, todas as bases de dados estão todas ativas ou todas inativas.

Gerir uma base de dados através da Google Cloud consola

  • Na Google Cloud consola, aceda a Bases de dados>SQL>Instância>(selecione a sua instância do PostgreSQL)>Bases de dados.

    Gerir uma base de dados através da consola Google Cloud .

Dicionário de dados e vistas dinâmicas

As bases de dados Oracle fornecem um dicionário de dados juntamente com vistas de desempenho dinâmicas (V$vistas) que facilitam uma variedade de tarefas de manutenção e monitorização de bases de dados. O dicionário de dados armazena todas as informações usadas para gerir os objetos na base de dados, enquanto as vistas de desempenho dinâmicas contêm muitas informações relacionadas com o desempenho da base de dados. Estas vistas são atualizadas continuamente enquanto a base de dados está em execução.

Por outro lado, o PostgreSQL oferece vários catálogos de metadados que servem um propósito semelhante ao dicionário de dados e às vistas de desempenho dinâmicas da Oracle:

  • Catálogo do sistema: metadados sobre todos os objetos da base de dados.
  • Vistas de recolha de estatísticas: relatórios sobre as atividades do PostgreSQL.
  • Vistas do esquema de informações: metadados sobre todos os objetos da base de dados comunicados de acordo com a norma ANSI SQL.

Visualizar metadados e vistas dinâmicas do sistema

Esta secção oferece uma vista geral de algumas das tabelas de metadados mais comuns e das vistas dinâmicas do sistema usadas no Oracle e os respetivos objetos de base de dados no Cloud SQL para PostgreSQL versão 12.

A Oracle fornece centenas de tabelas e vistas de metadados do sistema (em determinados esquemas do sistema, por exemplo, SYS ou SYSTEM), enquanto o PostgreSQL contém apenas várias dezenas. Em cada caso, pode haver mais do que um objeto da base de dados, que serve um objetivo específico.

A Oracle oferece vários níveis de objetos de metadados, cada um dos quais requer privilégios diferentes:

  • USER_TableName: visível para o utilizador.
  • ALL_TableName: visível para todos os utilizadores.
  • DBA_TableName: visível apenas para utilizadores com o privilégio de DBA, como SYS e SYSTEM.

Para as visualizações de desempenho dinâmicas, a Oracle usa os prefixos V$/GV$. Por outro lado, os metadados e as vistas do Cloud SQL para PostgreSQL residem nos esquemas information_schema e pg_catalog.

Tipo de metadados Tabela/vista da Oracle Tabela/vista/consulta do Cloud SQL para PostgreSQL
Sessões abertas V$SESSION pg_catalog.pg_stat_activity
Executar transações V$TRANSACTION Não suportado. Como solução alternativa, pg_locks fornece uma lista de transações abertas que contêm um ou mais bloqueios.
Objetos da base de dados DBA_OBJECTS pg_catalog.pg_class
Tabelas DBA_TABLES pg_catalog.pg_tables
Colunas da tabela DBA_TAB_COLUMNS pg_catalog.pg_attribute
Privilégios de tabelas e colunas TABLE_PRIVILEGES
DBA_COL_PRIVS ROLE_TAB_PRIVS
information_schema.table_privileges information_schema.column_privileges
Partições DBA_TAB_PARTITIONS DBA_TAB_SUBPARTITIONS pg_catalog.pg_partitioned_table
Visualizações DBA_VIEWS pg_catalog.pg_views
Restrições DBA_CONSTRAINTS pg_catalog.pg_constraint
Índices DBA_INDEXES
DBA_PART_INDEXES
pg_catalog.pg_index
Vistas materializadas DBA_MVIEWS pg_catalog.pg_matviews
Procedimentos armazenados DBA_PROCEDURES pg_catalog.pg_proc
Funções armazenadas DBA_PROCEDURES pg_catalog.pg_proc
Acionadores DBA_TRIGGERS pg_catalog.pg_trigger
Utilizadores DBA_USERS pg_catalog.pg_user
Privilégios do utilizador DBA_SYS_PRIVS
DBA_ROLE_PRIVS
SESSION_PRIVS
pg_catalog.pg_roles
Empregos/
programador
DBA_JOBS
DBA_JOBS_RUNNING
DBA_SCHEDULER_JOBS
DBA_SCHEDULER_JOB_LOG
Não suportado.
Tablespaces DBA_TABLESPACES pg_catalog.pg_tablespace
Ficheiros de dados DBA_DATA_FILES Não suportado.
Sinónimos DBA_SYNONYMS Não suportado.
Sequências DBA_SEQUENCES pg_catalog.pg_sequence
Links de base de dados DBA_DB_LINKS pg_catalog.pg_foreign_server
Estatí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
Fechaduras DBA_LOCK
DBA_DDL_LOCKS
DBA_DML_LOCKS
V$SESSION_BLOCKERS
V$LOCKED_OBJECT
pg_catalog.pg_locks
Parâmetros da base de dados V$PARAMETER
V$NLS_PARAMETERS
SHOW PARAMETER <Param>

pg_catalog.pg_settings show
Segmentos DBA_SEGMENTS Não suportado.
Funções DBA_ROLES
DBA_ROLE_PRIVS
USER_ROLE_PRIVS
pg_catalog.pg_roles
Histórico de sessões V$ACTIVE_SESSION_HISTORY
DBA_HIST_*
Não suportado.
Versão V$VERSION select version();
Eventos de espera V$WAITCLASSMETRIC
V$WAITCLASSMETRIC_HISTORY
V$WAITSTAT
V$WAIT_CHAINS
Não suportado.
Ajuste e
análise de SQL
V$SQL
V$SQLAREA
V$SESS_IO
V$SYSSTAT
V$STATNAME
V$OSSTAT
V$ACTIVE_SESSION_HISTORY
V$SESSION_WAIT
V$SESSION_WAIT_CLASS
V$SYSTEM_WAIT_CLASS
V$LATCH
V$SYS_OPTIMIZER_ENV
V$SQL_PLAN
V$SQL_PLAN_STATISTICS
Não suportado.
Ajuste da memória
da instância
V$SGA V$SGASTAT V$SGAINFO V$SGA_CURRENT_RESIZE_OPS V$SGA_RESIZE_OPS V$SGA_DYNAMIC_COMPONENTS V$SGA_DYNAMIC_FREE_MEMORY V$PGASTAT Não está integrado no Cloud SQL para PostgreSQL. Use a extensão pg_buffercache para examinar a cache de buffer partilhada em tempo real.

Parâmetros do sistema

As bases de dados Oracle e Cloud SQL para PostgreSQL podem ser configuradas especificamente para alcançar determinadas funcionalidades além da configuração predefinida. Para alterar os parâmetros de configuração no Oracle, são necessárias determinadas autorizações de administração (principalmente as autorizações de utilizador SYS/SYSTEM).

Segue-se um exemplo de alteração da configuração do Oracle através da declaração ALTER SYSTEM. Neste exemplo, o utilizador altera o parâmetro "maximum attempts for failed logins" apenas ao nível da configuração spfile (com a modificação válida apenas após um reinício):

SQL> ALTER SYSTEM SET SEC_MAX_FAILED_LOGIN_ATTEMPTS=2 SCOPE=spfile;

No exemplo seguinte, o utilizador está a pedir para ver o valor do parâmetro Oracle:

SQL> SHOW PARAMETER SEC_MAX_FAILED_LOGIN_ATTEMPTS;

O resultado é semelhante ao seguinte:

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sec_max_failed_login_attempts        integer     2

A modificação de parâmetros da Oracle funciona em três âmbitos:

  • SPFILE: as modificações dos parâmetros são escritas no Oracle spfile, sendo necessário reiniciar a instância para que o parâmetro entre em vigor.
  • MEMORY: as modificações de parâmetros são aplicadas apenas na camada de memória, enquanto não é permitida nenhuma alteração de parâmetros estáticos.
  • BOTH: as modificações de parâmetros são aplicadas no ficheiro de parâmetros do servidor e na memória da instância, onde não é permitida nenhuma alteração de parâmetros estáticos.

Flags de configuração do Cloud SQL para PostgreSQL

Pode modificar os parâmetros do sistema do Cloud SQL para PostgreSQL através das flags de configuração na Google Cloud consola, na CLI gcloud ou no CURL. Consulte a lista completa de todos os parâmetros suportados pelo Cloud SQL para PostgreSQL que pode alterar.

Os parâmetros do PostgreSQL podem ser divididos em vários âmbitos:

  • Parâmetros dinâmicos: podem ser alterados no momento da execução.
  • Parâmetros da base de dados: aplicam-se apenas a uma base de dados específica numa instância do PostgreSQL.
  • Parâmetros de função: aplicam-se apenas a uma função de base de dados específica.
  • Parâmetros estáticos: requerem um reinício da instância para entrarem em vigor.
  • Parâmetros da sessão: podem ser alterados ao nível da sessão apenas durante a duração da sessão atual, isolados de outras sessões.
  • Parâmetros globais: têm um efeito global em todas as sessões atuais e futuras.

Exemplos de alteração dos parâmetros do Cloud SQL para PostgreSQL

Consola

Use a Google Cloud consola para ativar o parâmetro log_connections.

  1. Aceda à página Editar instância do Cloud Storage.

    Aceda a Instâncias

  2. Em Sinalizações, clique em Adicionar item e pesquise log_connections, como na captura de ecrã seguinte.

    Ativar ligações de registo na consola.

gcloud

  • Use a CLI gcloud para ativar o parâmetro log_connections:
gcloud sql instances patch INSTANCE_NAME \
    --database-flags log_connections=on

O resultado é o seguinte:

WARNING: This patch modifies database flag values, which may require
your instance to be restarted. Check the list of supported flags -
/sql/docs/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

Defina timezone ao nível da sessão. Esta alteração permanece em vigor para a sessão atual e é válida apenas durante a duração da sessão.

  1. Mostrar parâmetro de configuração timezone:

    postgres=> SHOW timezone;
    

    Vê o seguinte resultado, em que timezone é set to UTC:

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

    postgres=> SET timezone='UTC-9';
    
  3. Mostrar parâmetro de configuração timezone:

    postgres> SHOW timezone;
    

    Vê o seguinte resultado, em que timezone está definido como UTC-9:

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

Transações e níveis de isolamento

Esta secção descreve as principais diferenças na execução de transações e nos níveis de isolamento entre o Oracle e o Cloud SQL para PostgreSQL.

Modo de aplicação

Por predefinição, o Oracle funciona no modo de não confirmação automática, em que cada transação DML tem de ser determinada com declarações COMMIT/ROLLBACK. Uma das diferenças fundamentais entre o Oracle e o PostgreSQL é que o PostgreSQL emite implicitamente um COMMIT após cada comando que não segue START TRANSACTION (ou BEGIN). Isto também é conhecido por alguns outros motores de base de dados como confirmação automática. Embora a confirmação automática esteja ativada por predefinição, pode ser desativada ao nível da sessão através de SET AUTOCOMMIT OFF.

Níveis de isolamento

A norma SQL ANSI/ISO (SQL:92) define quatro níveis de isolamento. Cada nível oferece uma abordagem diferente para processar a execução concorrente de transações da base de dados:

  • Leitura não comprometida: uma transação processada atualmente pode ver dados não comprometidos feitos pela outra transação. Se for feita uma reversão, todos os dados são restaurados para o estado anterior.
  • Read Committed: uma transação só vê alterações de dados que foram confirmadas. As alterações não confirmadas ("leituras sujas") não são possíveis.
  • Leitura repetível: uma transação só pode ver as alterações feitas pela outra transação depois de ambas as transações terem emitido um COMMIT ou ambas terem sido revertidas.
  • Serializável: o nível de isolamento mais rigoroso/forte. Este nível bloqueia todos os registos acedidos e bloqueia o recurso para que não seja possível anexar registos à tabela.

Os níveis de isolamento de transações gerem a visibilidade dos dados alterados, conforme visto por outras transações em execução. Além disso, quando vários transações simultâneas acedem aos mesmos dados, o nível de isolamento de transações selecionado afeta a forma como as diferentes transações interagem.

O Oracle suporta os seguintes níveis de isolamento:

  • Read Committed (predefinição)
  • Serializável
  • Só de leitura (não faz parte da norma ANSI/ISO SQL [SQL:92])

MVCC (Multiversion Concurrency Control) da Oracle:

  • O Oracle usa o mecanismo MVCC para fornecer consistência de leitura automática em toda a base de dados e em todas as sessões.
  • O Oracle baseia-se no número de alteração do sistema (SCN) da transação atual para obter uma vista consistente da base de dados. Por conseguinte, todas as consultas da base de dados só devolvem dados comprometidos relativamente ao SCN no momento da execução da consulta.
  • Os níveis de isolamento podem ser alterados ao nível da transação e da sessão.

Segue-se um exemplo de definição dos níveis de isolamento:

-- Transaction Level
SQL> SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SQL> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SQL> SET TRANSACTION READ ONLY;

-- Session Level
SQL> ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE;
SQL> ALTER SESSION SET ISOLATION_LEVEL = READ COMMITTED;

O Cloud SQL para PostgreSQL suporta os seguintes quatro níveis de isolamento de transações especificados na norma ANSI SQL:92:

  • Leitura não comprometida (equivalente a leitura comprometida)
  • Read Committed (predefinição)
  • Leitura repetível
  • Serializável

O nível de isolamento predefinido do Cloud SQL para PostgreSQL é READ COMMITTED. Estes níveis de isolamento podem ser alterados ao nível SESSION, ao nível TRANSACTION e ao nível INSTANCE.

Para verificar os níveis de isolamento atuais ao nível TRANSACTION e SESSION, use a seguinte declaração:

postgres=> SELECT CURRENT_SETTING('TRANSACTION_ISOLATION');

O resultado é o seguinte:

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

Pode modificar a sintaxe do nível de isolamento da seguinte forma:

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

Além disso, pode modificar o nível de isolamento ao nível da SESSÃO:

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

-- Verify

postgres=> SELECT CURRENT_SETTING('TRANSACTION_ISOLATION');

O resultado é o seguinte:

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

O nível de isolamento nos níveis INSTANCE é controlado através da flag da base de dados default_transaction_isolation. Pode verificar esta situação através da seguinte declaração:

postgres=> SHOW DEFAULT_TRANSACTION_ISOLATION;

O resultado é o seguinte:

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

O que se segue?