Guia de Atualização de Versão Principal do OCI Database with PostgreSQL
Faça upgrade das principais versões do OCI Database with PostgreSQL usando a abordagem pg_dump/pg_restore ou pglogical.
O OCI Database with PostgreSQL é um serviço totalmente gerenciado para executar o PostgreSQL na Oracle Cloud, projetado para reduzir a sobrecarga operacional associada ao gerenciamento da infraestrutura subjacente. Ele agiliza a administração diária por meio de provisionamento automatizado, patches suportados, backups automatizados e recursos de monitoramento integrado.
Manter ambientes OCI PostgreSQL atualizados é importante para aproveitar as vantagens dos aprimoramentos de desempenho mais recentes, atualizações de segurança e novos recursos.
As principais versões suportadas do PostgreSQL são 14, 15, 16 e 17.
As seguintes abordagens comumente adotadas para atualizações de versões principais oferecem métodos estruturados e repetíveis para migrar dados e fazer a transição de aplicativos para versões mais recentes.
pg_dump e pg_restore
O upgrade do OCI PostgreSQL usando pg_dump e pg_restore é uma abordagem simples e confiável, especialmente ao executar upgrades de versão principais ou migrar entre ambientes. Este método garante uma migração limpa e controlada de objetos e dados de banco de dados. Com o manuseio adequado de funções, paralelismo e validação, esse método garante um processo de migração suave e controlado.
Este documento percorre todo o processo de atualização usando os comandos exatos.
Observações Importantes
pg_dumpepg_restoresão ferramentas de backup lógico.- Adequado para atualizações de versão principal.
- Requer tempo de inatividade durante o switchover final.
- As atribuições sempre devem ser tratadas separadamente.
Atualizar Workflow
O processo de atualização usando pg_dump e pg_restore consiste nas etapas a seguir.
- Etapa 1: Despejar Objetos Globais (Funções)
Essa etapa ajuda a garantir que todas as funções, permissões e controles de acesso sejam preservados, permitindo que os usuários e aplicativos mantenham o acesso consistente após o upgrade.
- Etapa 2: Despejar o Banco de Dados
Esta etapa cria um backup lógico completo do banco de dados, fornecendo uma maneira confiável de transferir dados para o ambiente atualizado.
- Etapa 3: Modificar Arquivo de Dump Global
Esta etapa nos permite revisar e ajustar o dump conforme necessário, ajudando a garantir a compatibilidade com a versão de destino do PostgreSQL e um processo de restauração mais suave.
- Etapa 4: Restaurar Objetos Globais
A restauração de funções primeiro ajuda a garantir que os usuários e permissões apropriados estejam em vigor antes da reintrodução dos dados, oferecendo suporte a um ambiente consistente e seguro.
- Etapa 5: Restaurar o banco de dados
Esta etapa traz os dados para o sistema atualizado, completando a transição e tornando o banco de dados pronto para uso na nova versão do PostgreSQL.
Etapa 1: Despejar Objetos Globais (Funções)
Primeiro, exporte atribuições e objetos globais do banco de dados de origem (versão anterior):
/usr/lib/postgresql/bin/pg_dumpall -U psql -h <IP_of_Source_DB> -g --no-role-passwords --no-tablespaces -f <all_roles>.sql
-
-g: Despeja objetos globais, como atribuições e usuáriosEsta opção se concentra na extração de objetos em todo o cluster, como atribuições, usuários e seus privilégios associados, em vez de dados específicos do banco de dados. A captura desses elementos separadamente ajuda a garantir que os controles de acesso possam ser recriados de forma consistente no ambiente de destino.
-
--no-role-passwords: Evita problemas relacionados à senhaIsso exclui definições de senha de atribuição do dump, o que pode ajudar a simplificar o processo de restauração, especialmente quando as políticas de senha ou os métodos de autenticação diferem entre os ambientes. Ele também oferece flexibilidade para reconfigurar credenciais conforme necessário após o upgrade.
-
--no-tablespaces: Impede problemas de dependência de tablespaceIsso omite definições de tablespace do dump, ajudando a evitar dependências em configurações de armazenamento específicas que podem não existir no ambiente de destino. Isso pode tornar o processo de restauração mais portátil e mais fácil de se adaptar ao armazenamento gerenciado pela OCI.
-
-f <all_roles>.sql: Grava saída para um arquivo para reutilizaçãoIsso direciona a saída para um arquivo SQL, facilitando a revisão, a versão e a reutilização durante a fase de restauração. Ter um arquivo separado para objetos globais também suporta um processo de atualização mais controlado e gradual.
Etapa 2: Despejar o Banco de Dados
Execute um dump de banco de dados usando o formato de diretório:
/usr/lib/postgresql/bin/pg_dump -v -h < IP_of_Source_DB > -U <username> -d <databasename> -Fd -C -j <Num of parallel jobs> -Z0 -f sampledb_dir_format
-
-Fd: Formato de diretório (cria vários arquivos)A opção
-Fd(formato de diretório) é escolhida porque oferece suporte a despejos paralelos (-j), melhorando o desempenho de bancos de dados grandes e permite restaurações mais granulares e flexíveis de objetos individuais. Este formato armazena o dump como um diretório contendo vários arquivos em vez de um único arquivo. Ele suporta processamento paralelo e fornece maior flexibilidade durante a restauração, especialmente para bancos de dados maiores.Como alternativa, o formato personalizado (
-Fc) pode ser usado quando um backup de arquivo único é preferido, ao mesmo tempo em que oferece suporte a recursos de compactação e restauração seletiva. -
-C: Inclui o comando de criação do banco de dadosEsta opção adiciona as instruções necessárias para criar o banco de dados durante a restauração, ajudando a simplificar o processo de configuração no ambiente de destino.
-
-j: Ativa jobs paralelos para dump mais rápidoIsso permite que a operação de despejo execute vários trabalhos simultaneamente, o que pode reduzir significativamente o tempo geral necessário para conjuntos de dados grandes.
-
-Z0: Nenhuma compactação (melhora o desempenho)A desativação da compactação pode melhorar o desempenho do dump reduzindo a sobrecarga da CPU, o que pode ser benéfico quando a velocidade é uma prioridade e as restrições de armazenamento são mínimas.
-
-v: Modo detalhado para monitorar o andamentoEssa opção fornece uma saída detalhada durante a execução, facilitando o rastreamento do andamento e a identificação de problemas no início do processo de dump.
Etapa 3: Modificar Arquivo de Dump Global
Antes de restaurar funções:
Modifique o arquivo <all_roles>.sql conforme necessário com base na orientação a seguir.
Remova o seguinte do arquivo de dump de atribuição:
- Todas as instruções
CREATE,ALTER ROLE,GRANTpara atribuições que começam comoci_* - Quaisquer atributos de função não suportados (especialmente em serviços gerenciados, como OCI PostgreSQL)
- Todas as instruções
CREATEeALTER ROLEpara o usuário administrador que foi criado durante a configuração inicial do banco de dados PostgreSQL do OCI, pois ele precisa ser recriado ao provisionar o banco de dados da versão mais recente. Se você planeja usar outro nome de usuário de administrador, certifique-se de que o usuário de administrador apropriado seja especificado durante a criação do banco de dados PostgreSQL do OCI atualizado.
Além disso, atualize o arquivo de dump de atribuição para remover ou modificar qualquer comando que exija privilégios SUPERUSER, pois eles não são suportados em ambientes gerenciados.
Por exemplo:
Original:
ALTER ROLE test WITH NOSUPERUSER INHERIT CREATEROLE CREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'test';
Modificado:
ALTER ROLE/USER test WITH CREATEROLE CREATEDB LOGIN PASSWORD 'test';
Etapa 4: Restaurar Objetos Globais
Restaurar atribuições no sistema de banco de dados de destino (versão posterior):
/usr/lib/postgresql/bin/psql -U <username> -d <databasename> -h <IP_of_Target_Database_System> -f <all_roles>.sql
Esta etapa garante:
- Todos os usuários e atribuições são criados
- Permissões estão disponíveis antes da restauração de dados
Etapa 5: Restaurar o banco de dados
Ignore o seguinte do arquivo de dump toc.dat:
- Todas as instruções
CREATE,ALTER ROLEeGRANTestão falhando para atribuições cujos nomes começam comoci_*.
Restaure o banco de dados no sistema de banco de dados de destino usando:
/usr/lib/postgresql/bin/pg_restore -v -h <IP_of_Target_Database_System> -U <username> -j <Num of parallel jobs> -C -d <databasename> sampledb_dir_format
-C: Criar banco de dados, estabelecer conexão com ele e restaurá-lo no banco de dados-j: Restauração paralela para execução mais rápida-v: Saída verbosa para acompanhar o andamento
Esta etapa garante:
- Verifique a saída detalhada de qualquer mensagem
ERROR:e certifique-se de que o comando seja concluído com um código de saída de shell0. Os erros relacionados aos usuáriosoci_*podem ser ignorados.
Para ambientes com vários bancos de dados, recomendamos executar os comandos anteriores separadamente para cada banco de dados para garantir um processo de upgrade completo e consistente.
Considerações sobre Desempenho
- Usar valores
-jmais altos com base na CPU disponível - Use
-Z0durante o dump para obter um desempenho mais rápido - Garanta capacidade suficiente de E/S de disco
- Monitorar o progresso da restauração usando logs detalhados
Validação Pós-Restauração
Após concluir a restauração, execute as tarefas a seguir.
- Verificar contagens de linhas
Essa tarefa ajuda a confirmar se todos os dados foram migrados com sucesso e se não há discrepâncias entre os bancos de dados de origem e de destino.
- Verifique a conectividade do aplicativo
Esta tarefa garante que os aplicativos possam se conectar e interagir com o banco de dados atualizado conforme esperado.
- Validar atribuições e permissões
Essa tarefa ajuda a confirmar se os usuários e as funções têm o acesso e os privilégios apropriados no novo ambiente.
- Execute o comando a seguir para cada banco de dados
VACUUM ANALYZE <database_name>;Esse comando ajuda a atualizar as estatísticas internas usadas pelo planejador de consultas, permitindo que o OCI PostgreSQL gere planos de execução mais eficientes com base nos dados atuais. Ele também pode ajudar a otimizar o desempenho geral após a restauração, especialmente para bancos de dados ou cargas de trabalho maiores com consultas complexas.
pglógico
A extensão pglogical permite a replicação lógica em vários sistemas de banco de dados PostgreSQL da Oracle Cloud Infrastructure (OCI). Essa extensão oferece suporte à replicação PostgreSQL entre versões, tornando-a uma abordagem adequada e robusta para executar upgrades de banco de dados com tempo de inatividade mínimo. Ao permitir a replicação lógica entre os sistemas de origem e de destino, você pode migrar dados de forma integrada entre as versões, mantendo a disponibilidade do aplicativo.
pglogical é particularmente útil para as seguintes situações:
- Atualizações de versão principal
- Migrações entre ambientes
O pglogical permite a sincronização de dados perfeita entre:
- Instâncias do PostgreSQL em diferentes regiões e domínios de disponibilidade do OCI
- Bancos de dados implantados em diferentes VCNs (Virtual Cloud Networks)
- Serviços PostgreSQL gerenciados em vários provedores de nuvem
- Instâncias PostgreSQL autogerenciadas (na nuvem ou on-premises)
Essa flexibilidade torna o pglogical uma solução avançada para atualizações de banco de dados, migrações e implementações híbridas.
Requisitos de Conectividade de Rede
- Se ambos os sistemas de banco de dados estiverem dentro da mesma VCN, a conectividade estará automaticamente disponível.
- Se os bancos de dados estiverem em VCNs diferentes dentro da mesma região, configure o LPG (Local Peering Gateway) para estabelecer comunicação.
- Se os bancos de dados estiverem em VCNs diferentes dentro da região diferente, configure o Gateway de Roteamento Dinâmico (DRG) para estabelecer comunicação.
Ativar Extensão pglógica no Sistema de Banco de Dados de Origem e de Destino
Execute as seguintes etapas nos bancos de dados de origem (versão anterior) e destino (versão posterior):
- Acesse a Console do Oracle Cloud e navegue até o sistema de banco de dados do OCI PostgreSQL.
- Modifique a configuração acessando o arquivo de configuração.
- Selecione Copiar Configuração e atualize os parâmetros necessários. Em Variáveis do Usuário (Leitura/Gravação):
wal_level = logicaltrack_commit_timestamp = 1
- Ativar Extensão: em Configurar Extensões, selecione
pglogicale crie a configuração. - Navegue até o sistema de banco de dados, selecione Editar em Configuração e aplique a configuração criada anteriormente ao sistema de banco de dados.
O estado do sistema de banco de dados é inicialmente Atualizando. Aguarde até que ele se torne Ativo antes de continuar.
Essa configuração prepara ambos os ambientes para replicação lógica ativando as definições e extensões necessárias, permitindo que o
pglogicalcapture e sincronize alterações de forma confiável entre os bancos de dados de origem e de destino durante o processo de upgrade. - Depois que o sistema de banco de dados estiver ativo, conecte-se ao banco de dados e verifique as extensões ativadas usando a consulta a seguir.
SHOW oci.admin_enabled_extensions; - Crie a extensão
pglogicalusando o seguinte comando:CREATE EXTENSION pglogical;
Configurar Banco de Dados de Origem
Faça log-in como usuário administrador (o usuário especificado durante a criação do banco de dados OCI PostgreSQL) e conceda os privilégios necessários para ativar a replicação lógica.
alter role xxx with replication;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_reset() to xxx ;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_setup to xxx ;
grant all on FUNCTION pg_catalog.pg_replication_origin_session_setup to xxx;
xxx é o exemplo de usuário criado durante o provisionamento do sistema de banco de dados.
Configurar pglogical na origem (Editor)
- Crie o nó do editor no banco de dados de origem.
SELECT pglogical.create_node(node_name := 'provider1', dsn := 'host=<source_database_fqdn> port=5432 user=xxx password=xxxxx dbname=pglogical_source');node_name: Especifique o nome do editor a ser criado no banco de dados de origem.host: Informe o nome de domínio totalmente qualificado (FQDN) do banco de dados de origem.port_number: Forneça a porta na qual o banco de dados de origem está sendo executado.database_name: Especifique o banco de dados no qual criar a publicação.
- Adicione todas as tabelas no esquema
publicao conjunto de replicação padrão.SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']);
Configurar Banco de Dados de Destino
Faça log-in como usuário administrador (o usuário especificado durante a criação do banco de dados OCI PostgreSQL) e conceda os privilégios necessários para ativar a replicação lógica.
alter role xxx with replication;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_reset() to xxx ;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_setup to xxx ;
grant all on FUNCTION pg_catalog.pg_replication_origin_session_setup to xxx;
xxx é o exemplo de usuário criado durante a configuração do banco de dados.
Ignore o comando
alter role ...replication do usuário administrador no banco de dados PostgreSQL do OCI versão 16 e posterior, pois o usuário administrador herda a atribuição de replicação por padrão começando pelo OCI PostgreSQL 16.Antes de continuar, certifique-se de que:
-
Todos os esquemas e objetos necessários existem no destino
Os itens incluem esquemas, tabelas, índices, extensões e quaisquer objetos de banco de dados necessários. Ter essas informações em vigor ajuda a garantir que as operações de replicação ou restauração possam prosseguir sem erros de dependências ausentes. A existência pode ser confirmada comparando listagens de esquema (por exemplo, usando
\dne\dtno psql) e validando se as extensões necessárias estão instaladas na origem e no destino. -
A estrutura do banco de dados corresponde à origem
O banco de dados de destino deve se alinhar de perto com a origem em termos de definições de esquema, nomes de objeto e estrutura geral. Essa consistência ajuda a suportar uma migração de dados tranquila e reduz a probabilidade de conflitos ou inconsistências durante a sincronização. Verifique revisando definições de esquema (como o uso de
pg_dump --schema-only) ou comparando estruturas de tabela e contagens de objetos entre os sistemas de origem e de destino.
Configurar pglogical no destino (assinante)
- Crie o nó do assinante no banco de dados de destino:
SELECT pglogical.create_node(node_name := 'subscriber1', dsn := 'host=<target_database_fqdn> port=5432 user=xxx password=xxxxx dbname=pglogical_target');node_name: Defina o nome do assinante no banco de dados de destino.host: Informe o nome de domínio totalmente qualificado (FQDN) do banco de dados de destino.port_number: Informe a porta na qual o banco de dados de destino está sendo executado.database_name: Forneça o nome do banco de dados em que a assinatura será criada
- Crie a assinatura para iniciar os processos de sincronização e replicação em segundo plano:
SELECT pglogical.create_subscription(subscription_name := 'subscription1', provider_dsn := 'host=<source_database_fqdn> port=5432 user=xxx password=xxxxxx dbname=pglogical_source sslmode=require');subscription_name: Forneça o nome da assinatura.host: Fornecer o FQDN do banco de dados de origem.port_number: Forneça a porta na qual o banco de dados de destino está sendo executado.database_name: Informe o nome do banco e dados de origem.
Verificar Replicação
- Verifique o status da assinatura (destino): Execute a instrução a seguir para verificar o status da sua assinatura no banco de dados de destino.
SELECT * FROM pglogical.show_subscription_status(); - Verifique o status da replicação (origem): execute a instrução a seguir para verificar o status da replicação no banco de dados de origem.
SELECT * FROM pg_stat_replication;
Se ambas as verificações indicarem um status ativo sem atraso ou alterações pendentes, esse resultado sugerirá que a replicação foi concluída e que o banco de dados de destino está totalmente sincronizado com a origem.
Para obter mais informações sobre o pglogical, incluindo etapas e explicações detalhadas, consulte Sincronização entre regiões do OCI Database with PostgreSQL usando a Extensão pglógica
Conclusão
Em conclusão, os principais upgrades de versão usando pg_dump/pg_restore e pglogical oferecem vantagens distintas, dependendo do caso de uso. A abordagem pg_dump/pg_restore é simples e confiável para bancos de dados menores ou quando o tempo de inatividade é aceitável, mas pode ser demorado para grandes conjuntos de dados. Por outro lado, o pglogical permite atualizações de tempo de inatividade quase zero, replicando dados entre versões, tornando-o mais adequado para sistemas grandes ou de missão crítica.
A escolha do método correto depende de fatores como tamanho do banco de dados, tempo de inatividade aceitável e complexidade operacional. Independentemente da abordagem, o planejamento, os testes e a validação pós-atualização completos são essenciais para garantir a integridade dos dados e uma transição tranquila para a versão mais recente do OCI PostgreSQL.