Projeto de Migração do PostgreSQL 8.1 pra 8.2.5 – FASE 4 : O Pavoroso Dia D !!

Pois é minha gente vamos ao pavoroso dia D …
O dia que ninguém almoça, ninguém respira e ninguém dorme !!!

Bem .. posso dizer que essa migração foi bem tranqüila.

Para não esquecer algum passo eu fizemos uma especie de check list de migração. Segue abaixo os procedimentos

1 – Compila
Esse é um processo que já vimos anteriormente … sendo assim não tem mistério.

PS: Só lembrando que para compilação ocorrer se erros é necessário 2 pacotes … Caso ele não esteja instalado …. instale !!!

# aptitude install libreadline-dev
# aptitude install zlib-dev

$ tar -xvzf postgresql-8.2.5.tar.gz
$ cd postgresql-8.2.5
$ cd /src/include
$ vi pg_config_manual.h

$ cd ../../
$ ./configure –prefix=/home/postgres/postgresql-8.2.5 –with-python –with-perl
$ make
$ make install

2 – Cria o cluster
Esse passo também é tranqüilo

/home/postgres/postgresql-8.2.5/bin/initdb -D /pgteste/pg825/dados/ –encoding=latin1

3 – Cria o diretório pg_log
Bem .. isso é um passo que tem que se levado em consideração, senão todas as mensagens de log são exibidas na tela. Uma outra opção é mudar o diretório de log no postgresql.conf

$mkdir pg_log

4 – Copiar e imprimir o postgresql.conf da produção e compara com o novo (8.2.5). Basicamente nada muda, mas temos que nos atentar ao parâmetro DATESTYLE, pois nas versões anteriores a o formato da data é MDY e nessa nova versão é exibido como DMY. Isso pode causar sérios problemas la na frente.

scp -rv postgres@sd1cco:/postgres/pg812/dados/postgresql.conf .
lsten_addresses = ‘*’
port = 5432
max_connections = 25
shared_buffers = 300MB
work_mem = 100MB
search_path = ‘public’
datestyle = ‘iso, mdy

$cat /proc/sys/kernel/shmmax
841572800

5 – Muda as portas. Para não ter nenhum tipo de intervenção vamos mudar a porta padrão do atual banco de produção e no novo banco.

Antiga produção de 5432 para 5434 e novo de 5432 para 5436

6 – Altera o pg_hba.conf.

Colocar as configurações que estão em produção

7 – Copia o _database e o _deny. Arquivos esse que define quais usuários são permitidos acesso no banco.

8 – Mudar o /proc/sys/kernel/shmmax. Entende-se que esse parâmetro já foi modificado, pois nesse caso a nova versão vai rodar no mesmo servidor.

vi /etc/sysctl.conf
kernel.shmmax = <VALOR>
cat > /proc/sys/kernel/shmmax
<VALOR>
ctrl + d

9 – Sobe os bancos. Lembrando que estão subindo em portas diferentes do padrão.

/home/postgres/postgresql-8.2.5/bin/pg_ctl -D . start
/home/postgres/postgresql-8.1/bin/pg_ctl -D . start

10 – Altera a senha do postgres da nova versão

/home/postgres/postgresql-8.2.5/bin/psql -p 5436
postgres# ALTER Role postgres PASSWORD ‘SENHA’;
postgres# CREATE DATABASE BANCO
WITH OWNER = postgres
ENCODING = ‘LATIN1’;

11 – Altera o timezone do banco (isso somente no horário de verão)

ALTER DATABASE BANCO SET TimeZone=”Brazil/DeNoronha”;

12 – Para poder fazer a conexão é necessário configurar o pg_hba.conf

# “local” is for Unix domain socket connections only
local all all trust
# # IPv4 local connections:
host all all 127.0.0.1/32 trust
host all all 0.0.0.0/0 md5
# # IPv6 local connections:
host all all ::1/128 trust

13 – DUMPALL direto do banco de produção para o banco novo

/home/postgres/postgresql-8.2.5/bin/pg_dumpall -p 5434 -i | /home/postgres/postgresql-8.2.5/bin/psql -p 5436 -d pg03

Conferência pós migração

14 – Verifica se todos os objetos foram migrados. Esse passo é de extrema importância, pois todos os objetos devem estar no novo banco. Para isso basta apenas rodar a query abaixo nas 2 bases. (O Leo Cezar salvou o dia me ajudando a montar esse script … Obrigado Leo !!!!):

SELECT o.esquema,o.objecto,COUNT(o.nm_objecto) FROM
(
SELECT n.nspname AS “esquema”,
CASE c.relkind
WHEN ‘r’ THEN ‘TABELAS’
WHEN ‘v’ THEN ‘VISÃO’
WHEN ‘S’ THEN ‘SEQUENCE’
WHEN ‘i’ THEN ‘INDICE’
END as “objecto”,
c.relname as “nm_objecto”
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN (‘S’,’r’,’v’,’i’)
AND n.nspname NOT IN (‘dbateste’,’information_schema’,’pg_catalog’,’pg_temp_1′,
‘pg_toast’,’xmg’,’postgres’,’publico’,’public’)

UNION
SELECT trigger_schema AS “esquema”,

‘TRIGGER’ AS “objecto”,
trigger_name as “nm_objecto”

FROM information_schema.triggers

UNION
SELECT specific_schema AS “esquema”,

‘FUNÇÃO’ AS “objecto”,
specific_name as “nm_objecto”

FROM information_schema.routines
WHERE data_type <> ‘”trigger”‘

UNION

SELECT specific_schema AS “esquema”,
‘FUNÇÃO DE TRIGGER’ AS “objecto”,
specific_name as “nm_objecto”

FROM information_schema.routines
WHERE data_type = ‘”trigger”‘

) AS o
GROUP BY esquema,objecto
ORDER BY 1,2
;

15 – Muda o caminho do .bashrc. Precisamos mudar o path do postgres nessa etapa.

$ vi /home/postgres/.bashrc
PG=$HOME/postgresql-8.2.5/bin
PATH=$PATH:/$PG
PAGER=/usr/bin/less
export PATH PG PAGER

16 – É importante não esquece que o serviço não sobe automático, sendo assim é de extrema importância ter um script no init pra fazer esse trabalho. No caso desse projeto esses arquivos já existem, só alteramos o caminho para 8.2.5.

17 – É importante também não esquece dos backups, os comandos de dump devem apontar para o home da nova versão. No caso desse projeto alteramos os caminhos de onde os dumps são alocado para um diretório com o nome da nova versão.

18 – E por final, baixe o banco da versao 8.1, altere a porta da versão 8.2 e suba novamente.

19 – Por final, podemos acompanhar o andamento do banco através de algumas views que podemos criar para monitorar memória, disco, consulta corrente e muito mais. (O Marquinho criou algumas que facilitam a vida do pẽao !!!). Vou postar somente uma para dar água na boca.

View para verificar % de utilização de memória

CREATE OR REPLACE VIEW disco_mem AS

SELECT (sum(pg_stat_database.blks_hit) / sum(pg_stat_database.blks_read + pg_stat_database.blks_hit) * 100::numeric)::integer AS “% de Utilização de Mem”
FROM pg_stat_database;

COMMENT ON VIEW disco_mem IS ‘
Calcula através das estatisticas o percentual de utilização disco / memória.
Valores acima de 70% significa que o banco esta realizado mais tarefas em memória do que i/o em disco’;

E no final entre mortos e feridos sobrevivemos todos!!
Kenia Milene

PGCON 2007 Bombou !!!!!

É isso ai minha gente no ultimo sábado rolou o 1o PGCON aqui no Brasil.

Contamos com cases super interessantes como o do METRO de São Paulo e da FAB. Colaboradores do mundo livre também estavam la, como Telles, Diogo, Leo, Isis, David Fetter, Fike, Euler, Dutra e muito mais …

O evento bombou mesmo tinha muita gente !!!! as palestras foram muito bem recebidas e o auditório ficou cheio até a ultima (que foi de tunning do Fike).

No final rolou a chopada fornecida pela Lev Chopp e todos os organizadores terminaram a noite jantando no Rocks.

Se o primeiro foi surpreendente imagina só os próximos como serão!!!!!

Alguem já brincou de onde esta o Wally ????? Vamos brincar de onde esta  a Kenia?????. Acredite se quiser .. mas eu estou ai no meio !!!!!!

_c081110.jpg

Kenia Milene