Otimizando operações RMAN
May 23, 2011

Todo operação seja ela restore ou um recover do banco de dados por mais simples que seja, o tempo é fundamental. Cada minuto se torna precioso para o DBA.

Uma forma de simples de otimizar, seja ela um restore ou um recover é sincronizar o catalogo do RMAN com os backups existentes em disco.

Veja abaixo nesse ambiente que estive a pouco tempo a quantidade de backups inexistente em disco (EXPIRED) que é mostrado quando executamos o crosscheck.

Backup´s expired são ineficientes ao banco visto que eles não estão mais presentes no disco. Se o seu catalogo não está sincronizado, o rman vai tentar ler e não vai encontrar. Ele vai ter que procurar em todo seu catalog novamente por um piece disponível.

RMAN> crosscheck backup;

using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=864 devtype=DISK
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/quarta/DB_c-control--20110406-00.bkp recid=15077 stamp=747747400
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/quarta/DB_26420_1.bkp recid=15078 stamp=747747629
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/quarta/DB_26421_1.bkp recid=15079 stamp=747748097
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/quarta/DB_26422_1.bkp recid=15080 stamp=747748464
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/quarta/DB_26423_1.bkp recid=15081 stamp=747748771
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/quarta/DB_26424_1.bkp recid=15082 stamp=747748988
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/quarta/DB_26425_1.bkp recid=15083 stamp=747749316
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/quarta/DB_26426_1.bkp recid=15084 stamp=747749633
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/quarta/DB_26427_1.bkp recid=15085 stamp=747749950
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/quarta/DB_26428_1.bkp recid=15086 stamp=747750258
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/quarta/DB_26429_1.bkp recid=15087 stamp=747750726
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/quarta/DB_26430_1.bkp recid=15088 stamp=747751423
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26619_1.bkp recid=15487 stamp=748632681
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26620_1.bkp recid=15488 stamp=748632779
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_c-control--20110416-07.bkp recid=15489 stamp=748632894
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26622_1.bkp recid=15490 stamp=748637136
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26623_1.bkp recid=15491 stamp=748637425
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26624_1.bkp recid=15492 stamp=748637664
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_c-control--20110416-08.bkp recid=15493 stamp=748637675
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26626_1.bkp recid=15494 stamp=748639019
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26627_1.bkp recid=15495 stamp=748639223
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26628_1.bkp recid=15496 stamp=748639560
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26629_1.bkp recid=15497 stamp=748639606
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26631_1.bkp recid=15498 stamp=748639796
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_c-control--20110416-09.bkp recid=15499 stamp=748639800
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26633_1.bkp recid=15500 stamp=748640417
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26634_1.bkp recid=15501 stamp=748640585
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_c-control--20110416-0a.bkp recid=15502 stamp=748640767
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26636_1.bkp recid=15503 stamp=748641617
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_c-control--20110416-0b.bkp recid=15504 stamp=748641689
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26638_1.bkp recid=15505 stamp=748642817
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_c-control--20110416-0c.bkp recid=15506 stamp=748642826
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26640_1.bkp recid=15507 stamp=748644016
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_c-control--20110416-0d.bkp recid=15508 stamp=748644026
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26642_1.bkp recid=15509 stamp=748645216
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_c-control--20110416-0e.bkp recid=15510 stamp=748645238
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26644_1.bkp recid=15511 stamp=748646416
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_c-control--20110416-0f.bkp recid=15512 stamp=748646458
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26646_1.bkp recid=15513 stamp=748647617
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_c-control--20110416-10.bkp recid=15514 stamp=748647660
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26648_1.bkp recid=15515 stamp=748648818
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_c-control--20110416-11.bkp recid=15516 stamp=748648851
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26650_1.bkp recid=15517 stamp=748650017
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_c-control--20110416-12.bkp recid=15518 stamp=748650070
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26652_1.bkp recid=15519 stamp=748651223
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_c-control--20110416-13.bkp recid=15520 stamp=748651278
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26654_1.bkp recid=15521 stamp=748652424
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_c-control--20110416-14.bkp recid=15522 stamp=748652478
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26656_1.bkp recid=15523 stamp=748653622
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_c-control--20110416-15.bkp recid=15524 stamp=748653646
backup piece handle=/backup/rman/sabado/DB_c-control--20110417-03.bkp recid=15534 stamp=748659641
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26668_1.bkp recid=15535 stamp=748660821
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_c-control--20110417-04.bkp recid=15536 stamp=748660846
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26670_1.bkp recid=15537 stamp=748662025
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_c-control--20110417-05.bkp recid=15538 stamp=748662048
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/backup/rman/sabado/DB_26672_1.bkp recid=15539 stamp=748663225

...

crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/backup/rman/domingo/DB_27321_1.bkp recid=17039 stamp=751790542
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/backup/rman/domingo/DB_27322_1.bkp recid=17040 stamp=751790950
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/backup/rman/segunda/DB_27326_1.bkp recid=17043 stamp=751874607
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/backup/rman/segunda/DB_27326_2.bkp recid=17044 stamp=751875392
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/backup/rman/segunda/DB_27326_3.bkp recid=17045 stamp=751876167
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/backup/rman/segunda/DB_27326_4.bkp recid=17046 stamp=751876962
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/backup/rman/segunda/DB_27327_1.bkp recid=17047 stamp=751877167
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/backup/rman/segunda/DB_27327_2.bkp recid=17048 stamp=751877912
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/backup/rman/segunda/DB_27331_2.bkp recid=17062 stamp=751886845
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/backup/rman/segunda/DB_27331_3.bkp recid=17063 stamp=751887670
Crosschecked 1619 objects

Para removermos esses backup que não estão mais disponível no disco (EXPIRED).

Usamos o delete expired backup

RMAN> delete expired backup;

using channel ORA_DISK_1

List of Backup Pieces
BP Key  BS Key  Pc# Cp# Status      Device Type Piece Name
------- ------- --- --- ----------- ----------- ----------
15077   10343   1   1   EXPIRED     DISK        /backup/rman/quarta/DB_c-control--20110406-00.bkp
15078   10344   1   1   EXPIRED     DISK        /backup/rman/quarta/DB_26420_1.bkp
15079   10345   1   1   EXPIRED     DISK        /backup/rman/quarta/DB_26421_1.bkp
15080   10346   1   1   EXPIRED     DISK        /backup/rman/quarta/DB_26422_1.bkp
15081   10347   1   1   EXPIRED     DISK        /backup/rman/quarta/DB_26423_1.bkp
15082   10348   1   1   EXPIRED     DISK        /backup/rman/quarta/DB_26424_1.bkp
15083   10349   1   1   EXPIRED     DISK        /backup/rman/quarta/DB_26425_1.bkp
15084   10350   1   1   EXPIRED     DISK        /backup/rman/quarta/DB_26426_1.bkp
15085   10351   1   1   EXPIRED     DISK        /backup/rman/quarta/DB_26427_1.bkp
15086   10352   1   1   EXPIRED     DISK        /backup/rman/quarta/DB_26428_1.bkp
15087   10353   1   1   EXPIRED     DISK        /backup/rman/quarta/DB_26429_1.bkp
15088   10354   1   1   EXPIRED     DISK        /backup/rman/quarta/DB_26430_1.bkp
15089   10355   1   1   EXPIRED     DISK        /backup/rman/quarta/DB_26431_1.bkp
15090   10356   1   1   EXPIRED     DISK        /backup/rman/quarta/DB_26432_1.bkp
15091   10357   1   1   EXPIRED     DISK        /backup/rman/quarta/DB_c-control--20110406-01.bkp
15124   10369   1   1   EXPIRED     DISK        /backup/rman/quinta/DB_c-control--20110407-00.bkp
15125   10370   1   1   EXPIRED     DISK        /backup/rman/quinta/DB_26446_1.bkp
15126   10371   1   1   EXPIRED     DISK        /backup/rman/quinta/DB_26447_1.bkp
15127   10372   1   1   EXPIRED     DISK        /backup/rman/quinta/DB_26448_1.bkp
15128   10373   1   1   EXPIRED     DISK        /backup/rman/quinta/DB_26449_1.bkp
15129   10374   1   1   EXPIRED     DISK        /backup/rman/quinta/DB_26450_1.bkp
15130   10375   1   1   EXPIRED     DISK        /backup/rman/quinta/DB_c-control--20110407-01.bkp
15163   10387   1   1   EXPIRED     DISK        /backup/rman/sexta/DB_c-control--20110408-00.bkp
15164   10388   1   1   EXPIRED     DISK        /backup/rman/sexta/DB_26464_1.bkp
15165   10389   1   1   EXPIRED     DISK        /backup/rman/sexta/DB_26465_1.bkp
15166   10390   1   1   EXPIRED     DISK        /backup/rman/sexta/DB_26466_1.bkp
15167   10391   1   1   EXPIRED     DISK        /backup/rman/sexta/DB_26467_1.bkp
15168   10392   1   1   EXPIRED     DISK        /backup/rman/sexta/DB_26468_1.bkp
15169   10393   1   1   EXPIRED     DISK        /backup/rman/sexta/DB_c-control--20110408-01.bkp
15202   10405   1   1   EXPIRED     DISK        /backup/rman/sabado/DB_c-control--20110409-00.bkp
15203   10406   1   1   EXPIRED     DISK        /backup/rman/sabado/DB_26482_1.bkp
15204   10407   1   1   EXPIRED     DISK        /backup/rman/sabado/DB_26483_1.bkp
15205   10408   1   1   EXPIRED     DISK        /backup/rman/sabado/DB_26484_1.bkp
15206   10409   1   1   EXPIRED     DISK        /backup/rman/sabado/DB_26485_1.bkp
15207   10410   1   1   EXPIRED     DISK        /backup/rman/sabado/DB_26486_1.bkp
15208   10411   1   1   EXPIRED     DISK        /backup/rman/sabado/DB_c-control--20110409-01.bkp

backup piece handle=/backup/rman/quarta/DB_27236_3.bkp recid=16839 stamp=751469698
deleted backup piece
backup piece handle=/backup/rman/quarta/DB_27236_4.bkp recid=16840 stamp=751470503
deleted backup piece
backup piece handle=/backup/rman/control.bkp recid=17042 stamp=751799073

Deleted 1358 EXPIRED objects

RMAN> crosscheck backup;

using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=871 devtype=DISK
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/backup/rman/terca/DB_27208_1.bkp recid=16760 stamp=751356257
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/backup/rman/terca/DB_27208_2.bkp recid=16761 stamp=751357040
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/backup/rman/terca/DB_27208_3.bkp recid=16762 stamp=751357795
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/backup/rman/terca/DB_27208_4.bkp recid=16763 stamp=751358590
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/backup/rman/terca/DB_27209_1.bkp recid=16764 stamp=751358626
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/backup/rman/terca/DB_27209_2.bkp recid=16765 stamp=751359351
crosschecked backup piece: found to be 'AVAILABLE'
...
backup piece handle=/backup/rman/segunda/DB_27329_1.bkp recid=17055 stamp=751882042
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/backup/rman/segunda/DB_27329_2.bkp recid=17056 stamp=751882824
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/backup/rman/segunda/DB_27329_3.bkp recid=17057 stamp=751883639
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/backup/rman/segunda/DB_27330_1.bkp recid=17058 stamp=751884137
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/backup/rman/segunda/DB_27330_2.bkp recid=17059 stamp=751884950
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/backup/rman/segunda/DB_27330_3.bkp recid=17060 stamp=751885825
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/backup/rman/segunda/DB_27331_1.bkp recid=17061 stamp=751886141
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/backup/rman/segunda/DB_27331_2.bkp recid=17062 stamp=751886845
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/backup/rman/segunda/DB_27331_3.bkp recid=17063 stamp=751887670
Crosschecked 261 objects

De 1619 arquivos backup somente 261 está disponível em disco.

Oracle GoldenGate 11.1.1.1
May 17, 2011

Depois de uma grande espera …
É liberado o release 11.1.1.1 do Oracle GoldenGate, que pode ser feito o download em https://edelivery.oracle.com.

Uma das grandes novidades é o suporte a tablespaces encrypted … confira o restante das novidades na documentação oficial http://download.oracle.com/docs/cd/E22355_01/index.htm

 

GoldenGate Bidirecional Oracle para Oracle
May 10, 2011

Instrodução

No meu post  anterior sobre GoldenGate, foi apresentado de uma forma sintetizada, como o Oracle GoldenGate usa seus processos internos para realizar a replicação. Hoje, estarei demonstrando a instalação e configuração de um ambiente de replicação Bidirecional de Oracle para Oracle.

Lembro que essa é uma instalação em um ambiente de teste, em um ambiente de produção deve seguir rigorosamente todos os pré requisitos solicitados de acordo com o recomendado pela documentação (Hardwares, Sofwtares, Versões, etc …).

O download do Oracle GoldenGate pode ser feito através do http://edelivery.oracle.com, quando você aceita os termos de utilização será redirecionado para a página “Media Pack Search”. Selecione o produto no combo “Select a Product Pack” e selecione “Oracle Fusion Middleware” e abaixo selecione sua plataforma, que no meu caso foi “Linux x86”.

Criando o cénario

  • Virtual Box 4.0.4
  • Oracle Enterprise Linux 5 x86
  • Oracle Database !0g Release 2
  • Oracle GoldenGate 11g Release 1

Para que os testes de replicação fosse feito, duas máquinas virtuais com Oracle 10gR2 foi criada. Fique atendo as configurações de HOSTNAME, IP e DATABASE NAME que será utilizado por todo o artigo. As configurações podem ser diferentes deste exemplo, desde que sejam coerentes.

Máquina Virtual 1 – SERVER SOURCE

  • Hostname = gg1
  • Database = ponta1
  • Ip = 10.0.0.12

Máquina Virtual 2 – SERVER TARGET

  • Hostname = gg2
  • Database = ponta2
  • Ip = 10.0.0.13

As configurações acima reflete o ambiente da imagem abaixo, temos um database SOURCE e um TARGET. Toda ação que sofre uma reação de DML ou DDL será transferida do SOURCE para o TARGET, nesse exemplo estaremos usando somente a replicação do usuário REPLICA que será criado mais a adiante.

Instalação

Após ser realizado o download do binário do GoldenGate é necessário descompactar, neste exemplo estarei colocando o GoldenGate dentro do ORACLE_BASE na pasta gg11.

flavio@shadowy:~$ ssh oracle@gg1
oracle@gg1's password:
Last login: Thu Apr 21 18:14:36 2011 from 10.0.0.1
[oracle@gg1 ~]$ cd $ORACLE_BASE/gg11
[oracle@gg1 gg11]$ ls -l
total 59880
-rw------- 1 oracle oinstall 61250823 Apr 21 18:11 V22228-01 GG 11g.zip
[oracle@gg1 gg11]$ unzip V22228-01\ GG\ 11g.zip
Archive: V22228-01 GG 11g.zip
inflating: ggs_Linux_x86_ora11g_32bit_v11_1_1_0_0_078.tar
inflating: OGG_WinUnix_Rel_Notes_11.1.1.0.0_078.pdf
inflating: README.txt
[oracle@gg1 gg11]$ ls -l
total 227292
-rw-rw---- 1 oracle oinstall 170721280 Jul 28 2010 ggs_Linux_x86_ora11g_32bit_v11_1_1_0_0_078.tar
-rwxrwxr-x 1 oracle oinstall 500964 Aug 6 2010 OGG_WinUnix_Rel_Notes_11.1.1.0.0_078.pdf
-rwxrwxr-x 1 oracle oinstall 26726 Aug 2 2010 README.txt
-rw------- 1 oracle oinstall 61250823 Apr 21 18:11 V22228-01 GG 11g.zip
[oracle@gg1 gg11]$ tar -xvof ggs_Linux_x86_ora11g_32bit_v11_1_1_0_0_078.tar
bcpfmt.tpl
bcrypt.txt
chkpt_ora_create.sql
...
[oracle@gg1 gg11]$

O mesmo procedimento deve ser feito no servidor gg2

flavio@shadowy:~$ ssh oracle@gg2
oracle@gg2's password:
Last login: Thu Apr 21 18:14:36 2011 from 10.0.0.1
[oracle@gg2 ~]$ cd $ORACLE_BASE/gg11
[oracle@gg2 gg11]$ ls -l
total 59880
-rw------- 1 oracle oinstall 61250823 Apr 21 18:11 V22228-01 GG 11g.zip
[oracle@gg2 gg11]$ unzip V22228-01\ GG\ 11g.zip
Archive: V22228-01 GG 11g.zip
inflating: ggs_Linux_x86_ora11g_32bit_v11_1_1_0_0_078.tar
inflating: OGG_WinUnix_Rel_Notes_11.1.1.0.0_078.pdf
inflating: README.txt
[oracle@gg2 gg11]$ ls -l
total 227292
-rw-rw---- 1 oracle oinstall 170721280 Jul 28 2010 ggs_Linux_x86_ora11g_32bit_v11_1_1_0_0_078.tar
-rwxrwxr-x 1 oracle oinstall 500964 Aug 6 2010 OGG_WinUnix_Rel_Notes_11.1.1.0.0_078.pdf
-rwxrwxr-x 1 oracle oinstall 26726 Aug 2 2010 README.txt
-rw------- 1 oracle oinstall 61250823 Apr 21 18:11 V22228-01 GG 11g.zip
[oracle@gg2 gg11]$ tar -xvof ggs_Linux_x86_ora11g_32bit_v11_1_1_0_0_078.tar
bcpfmt.tpl
bcrypt.txt
chkpt_ora_create.sql
...
[oracle@gg2 gg11]$

 

Variáveis de ambiente

Adicione em seu .bash_profile as linhas nos dois servidores (gg1 e gg2).

GGATE=$ORACLE_BASE/gg11; export GGATE
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:$GGATE; export LD_LIBRARY_PATH

O executável ggsci aparace quando descompactamos o ggs_Linux_x86_ora11g_32bit_v11_1_1_0_0_078.tar, ele é o principal utilitário do GoldenGate, com ele é possível configurar como será toda a replicação de dados.

[oracle@gg1 gg11]$ ./ggsci

Oracle GoldenGate Command Interpreter for Oracle
Version 11.1.1.0.0 Build 078
Linux, x86, 32bit (optimized), Oracle 11 on Jul 28 2010 13:22:25
Copyright (C) 1995, 2010, Oracle and/or its affiliates. All rights reserved.
GGSCI (gg1.localdomain) 1>

Algumas vezes ao executar o comando ggsci o seguinte erro é apresentando:

./ggsci: error while loading shared libraries: libnnz11.so: cannot open shared object file: No such file or directory

./ggsci: error while loading shared libraries: libclntsh.so.11.1: cannot open shared object file: No such file or directory

O erro é devido a falta dos arquivos da biblioteca do Oracle libnnz11.so e libclntsh.so.11.1. O erro é pode ser corrigido da seguinte maneira:

[oracle@gg1 gg11]$ ./ggsci
./ggsci: error while loading shared libraries: libnnz11.so: cannot open shared object file: No such file or directory
[oracle@gg1 gg11]$ ln -s $ORACLE_HOME/lib/libnnz10.so $ORACLE_HOME/lib/libnnz11.so
[oracle@gg1 gg11]$ ./ggsci
./ggsci: error while loading shared libraries: libclntsh.so.11.1: cannot open shared object file: No such file or directory
[oracle@gg1 gg11]$ ln -s $ORACLE_HOME/lib/libclntsh.so.10.1 $ORACLE_HOME/lib/libclntsh.so.11.1
[oracle@gg1 gg11]$ ./ggsci
Oracle GoldenGate Command Interpreter for Oracle
Version 11.1.1.0.0 Build 078
Linux, x86, 32bit (optimized), Oracle 11 on Jul 28 2010 13:22:25
Copyright (C) 1995, 2010, Oracle and/or its affiliates. All rights reserved.

GGSCI (gg1.localdomain) 1>

 Configuração do Database

Os procedimentos de configuração do banco de dado executados abaixo, devem ser feitos nos dois database, PONTA1 (SOURCE) e PONTA2 (TARGET). Aqui estarei demonstrando somente a execução do banco ponta1.

1. Assegure que o database está em modo archive

SYS@ponta1> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /oracle/archive/ponta1
Oldest online log sequence 23
Next log sequence to archive 25
Current log sequence 25

2. Desabilite a recyclebin

SYS@ponta1> alter system set recyclebin=off;
System altered.
SYS@ponta1> show parameter bin
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
recyclebin string OFF
SYS@ponta1> purge recyclebin;
Recyclebin purged.

3. Habilite o minimal supplemental logging a nível do database.

SYS@ponta1> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
Database altered.
SYS@ponta1> ALTER SYSTEM SWITCH LOGFILE;
System altered.
SYS@ponta1> SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;
SUPPLEME
--------
YES

4. Cria o usuário que será utilizado pelos processos GoldenGate

SYS@ponta1> create user goldengate identified by oracle default tablespace USERS;
User created.
SYS@ponta1> grant dba to goldengate;
Grant succeeded.
SYS@ponta1> grant connect, resource, select any dictionary, FLASHBACK ANY TABLE, SELECT ANY TABLE, CREATE TABLE to goldengate;
Grant succeeded.
SYS@ponta1> grant execute on utl_file to goldengate;
Grant succeeded.

5. Agora é hora de “deixar a casa organizada” para o GoldenGate.  Na verdade essa etapa é uma seqüencia de execuções de scripts.

1ª Script marker_setup.sql

[oracle@gg1 gg11]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.5.0 - Production on Fri Apr 22 16:37:59 2011

Copyright (c) 1982, 2010, Oracle. All Rights Reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SYS@ponta1> @$ORACLE_BASE/gg11/marker_setup.sql

Marker setup script

You will be prompted for the name of a schema for the GoldenGate database objects.
NOTE: The schema must be created prior to running this script.
NOTE: Stop all DDL replication before starting this installation.

Enter GoldenGate schema name:goldengate

Marker setup table script complete, running verification script...
Please enter the name of a schema for the GoldenGate database objects:
Setting schema name to GOLDENGATE

MARKER TABLE
-------------------------------
OK

MARKER SEQUENCE
-------------------------------
OK

Script complete.

2ª Script ddl_setup.sql

SYS@ponta1> @$ORACLE_BASE/gg11/ddl_setup.sql

GoldenGate DDL Replication setup script

Verifying that current user has privileges to install DDL Replication...
Checking user sessions...

Check complete.

You will be prompted for the name of a schema for the GoldenGate database objects.
NOTE: For an Oracle 10g source, the system recycle bin must be disabled. For Oracle 11g and later, it can be enabled.
NOTE: The schema must be created prior to running this script.
NOTE: Stop all DDL replication before starting this installation.

Enter GoldenGate schema name:goldengate

You will be prompted for the mode of installation.
To install or reinstall DDL replication, enter INITIALSETUP
To upgrade DDL replication, enter NORMAL
Enter mode of installation:INITIALSETUP

Working, please wait ...
Spooling to file ddl_setup_spool.txt

Using GOLDENGATE as a GoldenGate schema name, INITIALSETUP as a mode of installation.

Working, please wait ...

RECYCLEBIN must be empty.
This installation will purge RECYCLEBIN for all users.
To proceed, enter yes. To stop installation, enter no.

Enter yes or no:yes

DDL replication setup script complete, running verification script...
Please enter the name of a schema for the GoldenGate database objects:
Setting schema name to GOLDENGATE

DDLORA_GETTABLESPACESIZE STATUS:

Line/pos Error
---------- -----------------------------------------------------------------
No errors No errors

CLEAR_TRACE STATUS:

Line/pos Error
---------- -----------------------------------------------------------------
No errors No errors

CREATE_TRACE STATUS:

Line/pos Error
---------- -----------------------------------------------------------------
No errors No errors

TRACE_PUT_LINE STATUS:

Line/pos Error
---------- -----------------------------------------------------------------
No errors No errors

INITIAL_SETUP STATUS:

Line/pos Error
---------- -----------------------------------------------------------------
No errors No errors

DDLVERSIONSPECIFIC PACKAGE STATUS:

Line/pos Error
---------- -----------------------------------------------------------------
No errors No errors

DDLREPLICATION PACKAGE STATUS:

Line/pos Error
---------- -----------------------------------------------------------------
No errors No errors

DDLREPLICATION PACKAGE BODY STATUS:

Line/pos Error
---------- -----------------------------------------------------------------
No errors No errors

DDL HISTORY TABLE
-----------------------------------
OK

DDL HISTORY TABLE(1)
-----------------------------------
OK

DDL DUMP TABLES
-----------------------------------
OK

DDL DUMP COLUMNS
-----------------------------------
OK

DDL DUMP LOG GROUPS
-----------------------------------
OK

DDL DUMP PARTITIONS
-----------------------------------
OK

DDL DUMP PRIMARY KEYS
-----------------------------------
OK

DDL SEQUENCE
-----------------------------------
OK

GGS_TEMP_COLS
-----------------------------------
OK

GGS_TEMP_UK
-----------------------------------
OK

DDL TRIGGER CODE STATUS:

Line/pos Error
---------- -----------------------------------------------------------------
No errors No errors

DDL TRIGGER INSTALL STATUS
-----------------------------------
OK

DDL TRIGGER RUNNING STATUS
-----------------------------------
ENABLED

STAYMETADATA IN TRIGGER
-----------------------------------
OFF

DDL TRIGGER SQL TRACING
-----------------------------------
0

DDL TRIGGER TRACE LEVEL
-----------------------------------
0

LOCATION OF DDL TRACE FILE
--------------------------------------------------------------------------------
/oracle/admin/ponta1/udump/ggs_ddl_trace.log

Analyzing installation status...

STATUS OF DDL REPLICATION
--------------------------------------------------------------------------------
SUCCESSFUL installation of DDL Replication software components

Script complete.

3ª Script role_setup.sql

SYS@ponta1> @$ORACLE_BASE/gg11/role_setup.sql

GGS Role setup script

This script will drop and recreate the role GGS_GGSUSER_ROLE
To use a different role name, quit this script and then edit the params.sql script to change the gg_role parameter to the preferred name. (Do not run the script.)

You will be prompted for the name of a schema for the GoldenGate database objects.
NOTE: The schema must be created prior to running this script.
NOTE: Stop all DDL replication before starting this installation.

Enter GoldenGate schema name:goldengate
Wrote file role_setup_set.txt

PL/SQL procedure successfully completed.

Role setup script complete

Grant this role to each user assigned to the Extract, GGSCI, and Manager processes, by using the following SQL command:

GRANT GGS_GGSUSER_ROLE TO

where is the user assigned to the GoldenGate processes.

SYS@ponta1> GRANT GGS_GGSUSER_ROLE TO goldengate;

Grant succeeded.

4ª Script ddl_enable.sq

SYS@ponta1> @$ORACLE_BASE/gg11/ddl_enable.sql

Trigger altered.

5ª Script ddl_pin

SYS@ponta1> @$ORACLE_BASE/gg11/ddl_pin goldengate

PL/SQL procedure successfully completed.

PL/SQL procedure successfully completed.

PL/SQL procedure successfully completed.

 

Criando o usuário para a replicação

Nesse exemplo, estarei criando e utilizando o usuário REPLICA para demonstrar a transferência de dados do servidor GG1 (SOURCE) para o GG2 (TARGET). A criação do usuário deve ser feita nos dois bancos de dados PONTA1 e PONTA2, aqui estarei demonstrando a criação do banco PONTA1.

[oracle@gg1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.5.0 - Production on Sat Apr 23 18:52:06 2011

Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> create user replica identified by oracle; 

User created.

SQL> grant connect, resource to replica;

Grant succeeded.

SQL> create table replica.teste (id number primary key);

Table created.

 Configuração do GoldenGate

Os procedimentos de configuração do GoldenGate executados abaixo, devem ser feitos nos dois hosts, GG1 (SOURCE) e GG2 (TARGET). Aqui estarei demonstrando somente do host gg1.

1. Criação dos subdiretórios do GoldenGate.

[oracle@gg1 ~]$ cd $GGATE
[oracle@gg1 gg11]$ ./ggsci 

Oracle GoldenGate Command Interpreter for Oracle
Version 11.1.1.0.0 Build 078
Linux, x86, 32bit (optimized), Oracle 11 on Jul 28 2010 13:22:25

Copyright (C) 1995, 2010, Oracle and/or its affiliates. All rights reserved.

GGSCI (gg1.localdomain) 1> create subdirs

Creating subdirectories under current directory /oracle/gg11

Parameter files /oracle/gg11/dirprm: created
Report files /oracle/gg11/dirrpt: created
Checkpoint files /oracle/gg11/dirchk: created
Process status files /oracle/gg11/dirpcs: created
SQL script files /oracle/gg11/dirsql: created
Database definitions files /oracle/gg11/dirdef: created
Extract data files /oracle/gg11/dirdat: created
Temporary files /oracle/gg11/dirtmp: created
Veridata files /oracle/gg11/dirver: created
Veridata Lock files /oracle/gg11/dirver/lock: created
Veridata Out-Of-Sync files /oracle/gg11/dirver/oos: created
Veridata Out-Of-Sync XML files /oracle/gg11/dirver/oosxml: created
Veridata Parameter files /oracle/gg11/dirver/params: created
Veridata Report files /oracle/gg11/dirver/report: created
Veridata Status files /oracle/gg11/dirver/status: created
Veridata Trace files /oracle/gg11/dirver/trace: created
Stdout files /oracle/gg11/dirout: created

GGSCI (gg1.localdomain) 2>

2. Configuração da porta de comunicação através do MANAGER

GGSCI (gg1.localdomain) 1> info all

Program Status Group Lag Time Since Chkpt

MANAGER STOPPED

GGSCI (gg1.localdomain) 2> edit params mgr
PORT 7889
GGSCI (gg1.localdomain) 7> start manager

Manager started.

GGSCI (gg1.localdomain) 8> info all

Program Status Group Lag Time Since Chkpt

MANAGER RUNNING

3. Configuração do checkpointtable e trandata.

Estarei explicando melhor o funcionamento do CHECKPOINT e TRANDATA em um outro momento, o importante agora saber é que precisamos executar essas duas rotinas nos dois servidores o GG1 (SOURCE) e o GG2 (TARGER). Aqui estarei demonstrando somente a execução do servidor GG1 porém ele deve ser executado nos dois.

GGSCI (gg1.localdomain) 1> dblogin userid goldengate
Password:
Successfully logged into database.
GGSCI (gg1.localdomain) 2> ADD CHECKPOINTTABLE goldengate.checkpoint

Successfully created checkpoint table GOLDENGATE.CHECKPOINT.

GGSCI (gg1.localdomain) 3> add trandata replica.*
Logging of supplemental redo data enabled for table REPLICA.TESTE.

Configuração a replicação

Nesse momento estaremos configurando os processos extract e dump do database source (GG1 do banco PONTA1). Para quem não se lembra (ou não ouviu falar) dos processos internos do GoldenGate não se preocupa, aqui expliquei resumidamente o funcionamento de cada um deles.

* Configuração SERVIDOR SOURCE (server GG1 do banco PONTA1)

1. Configuração do EXTRACT

GGSCI (gg1.localdomain) 1> ADD EXTRACT ext1, TRANLOG, BEGIN now

EXTRACT added.

GGSCI (gg2.localdomain) 2> ADD EXTTRAIL /oracle/gg11/dirdat/lt, EXTRACT ext1

EXTTRAIL added.

GGSCI (gg1.localdomain) 3> edit params ext1
-- Identifica o nome do extract
EXTRACT ext1
-- Informa o login requerido para o database.
USERID goldengate, PASSWORD oracle
-- Informa o local trail para o extract escrever
EXTTRAIL /oracle/gg11/dirdat/lt
GETTRUNCATES
--Mapeamento de todas as alterações de tabelas no usuário replica.
TABLE replica.*;
--Mapeamento de toda operação DDL do banco
DDL

GGSCI (gg1.localdomain) 4>

2. Configuração do PUMP

GGSCI (gg1.localdomain) 1> ADD EXTRACT pump1, EXTTRAILSOURCE /oracle/gg11/dirdat/lt, BEGIN now

EXTRACT added.

GGSCI (gg1.localdomain) 2> ADD RMTTRAIL /oracle/gg11/dirdat/rt, EXTRACT pump1

RMTTRAIL added.

GGSCI (gg1.localdomain) 3> edit params pump1

--Informa o data pump atual.
EXTRACT pump1
-- Especifíca o IP nome do servidor standby, no nosso caso o gg2. E também é informado o manager porta feito acima
RMTHOST 10.0.0.13, MGRPORT 7889
-- Specify the remote trail on the standby system:
RMTTRAIL /oracle/gg11/dirdat/rt
-- Transfere a data sem mapiamento, filtro ou conversão
PASSTHRU
GETTRUNCATES
--Mapeia o usuário replica
TABLE replica.*;

GGSCI (gg1.localdomain) 7> info all

Program Status Group Lag Time Since Chkpt

MANAGER RUNNING

EXTRACT STOPPED EXT1 00:00:00 00:07:46

EXTRACT STOPPED PUMP1 00:00:00 00:03:16

Nesse momento os dois principais processos de replicação do SERVIDOR SOURCE(extract e pump) estão configurados. Observe que através do comando info all é informado que eles ainda não estão em funcionamento (STOPPED). Vamos agora configura o SERVIDOR GG2 (database TARGET). O servidor de destino é mais simples configurar, somente temos que criar o processo REPLICAT. Veja logo abaixo fico fica:

* Configuração SERVIDOR TARGET (server GG2 do banco PONTA2)

1. Configuração do REPLICAT

GGSCI (gg2.localdomain) 1> add replicat rep1, exttrail /oracle/gg11/dirdat/rt, begin now, checkpointtable goldengate.checkpoint
REPLICAT added.

GGSCI (gg2.localdomain) 2> EDIT PARAMS rep1
-- Informa o replicat que estamos trabalhando
REPLICAT rep1
-- Assume que as definições do source e target database são identicos.
ASSUMETARGETDEFS
-- Usuário de conexão do GoldenGate
USERID goldengate, PASSWORD oracle
GETTRUNCATES
--Mapeia o usuário replica.
MAP replica.*, TARGET replica.*;
DDL

GGSCI (gg2.localdomain) 3 >

Agora sim … tudo configurado e pronto para usar. Nesse momento devemos estar com os processos da seguinte maneira:

Servidor SOURCE (Banco PONTA1, host GG1)

GGSCI (gg1.localdomain) 1> info all

Program     Status      Group       Lag           Time Since Chkpt

MANAGER     RUNNING
EXTRACT     STOPPED     EXT1        00:00:00      00:32:12
EXTRACT     STOPPED     PUMP1       00:00:00      00:27:43

Servidor TARGET (Banco PONTA2, host GG2)

GGSCI (gg2.localdomain) 1> info all

Program     Status      Group       Lag           Time Since Chkpt

MANAGER     RUNNING
REPLICAT    STOPPED     REP1        00:00:00      00:05:40

Testes da replicação

Vamos iniciar os processos primeiro no servidor SOURCE depois no servidor TARGET. 

Servidor SOURCE (Banco PONTA1, host GG1)

GGSCI (gg1.localdomain) 1> start er *

Sending START request to MANAGER ...
EXTRACT EXT1 starting

Sending START request to MANAGER ...
EXTRACT PUMP1 starting

GGSCI (gg1.localdomain) 2> info all

Program     Status      Group       Lag           Time Since Chkpt

MANAGER     RUNNING
EXTRACT     RUNNING     EXT1        00:00:00      00:33:58
EXTRACT     RUNNING     PUMP1       00:00:00      00:29:29

Servidor TARGET (Banco PONTA2, host GG2)

GGSCI (gg2.localdomain) 1> start er *

Sending START request to MANAGER ...
REPLICAT REP1 starting

GGSCI (gg2.localdomain) 2> info all

Program     Status      Group       Lag           Time Since Chkpt

MANAGER     RUNNING
REPLICAT    RUNNING     REP1        00:00:37      00:00:01

Agora a parte mais legal, ver o GoldenGate em trabalho e ver a incrível ferramenta que é, veja:

Servidor SOURCE (Banco PONTA1, host GG1)

SQL> select table_name from user_tables;

TABLE_NAME
------------------------------
TESTE

Servidor TARGET (Banco PONTA2, host GG2)

SQL> select table_name from user_tables;

TABLE_NAME
------------------------------
TESTE

Ok … temos nos dois bancos a tabela TESTE no usuário REPLICA, até ai tudo bem. Vamos fazer um teste de replicação de DDL, vou criar a tabela TESTE_2 com o usuário REPLICA no servidor SOURCE (GG1) e ele tem que se ser replicado automáticamente para o banco PONTA2 lá no servidor TARGET (GG2).

Servidor SOURCE (Banco PONTA1, host GG1)

[oracle@gg1 ~]$ sqlplus replica/oracle

SQL*Plus: Release 10.2.0.5.0 - Production on Sun Apr 24 10:49:16 2011

Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> !hostname
gg1.localdomain

SQL> create table teste_2 (
  2  id number primary key,
  3  nome varchar2(50)
  4  );

Table created.

Servidor TARGET (Banco PONTA2, host GG2)

[oracle@gg2 ~]$ sqlplus replica/oracle

SQL*Plus: Release 10.2.0.5.0 - Production on Sun Apr 24 10:50:55 2011

Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> !hostname
gg2.localdomain

SQL> desc teste_2
 Name					   Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID					   NOT NULL NUMBER
 NOME						    VARCHAR2(50)
SQL> select * from teste_2;

no rows selected

Vimos aqui uma replicação realizada de DDL, criamos a tabela TESTE_2 no servidor SOURCE (GG1, database PONTA1) e ela foi criada no servidor TARGET (GG2, database PONTA2).

Observe que ela não tem nenhum dado contido, vamos fazer algumas inserções de dados na tabela TESTE_2 no servidor SOURCE e vamos ver se os dados foram transferidos para o servidor TARGET.

Servidor SOURCE (Banco PONTA1, host GG1)

SQL> show user
USER is "REPLICA"
SQL> !hostname
gg1.localdomain

SQL> insert into teste_2 values (1, 'Flavio');      

1 row created.

SQL> insert into teste_2 values (2, 'Soares');

1 row created.

SQL> insert into teste_2 values (3, 'GoldenGate');

1 row created.

SQL> commit;

Commit complete.

Servidor TARGET (Banco PONTA2, host GG2)

SQL> show user
USER is "REPLICA"
SQL> !hostname
gg2.localdomain

SQL> select * from teste_2;

	ID NOME
---------- --------------------------------------------------
	 1 Flávio
	 2 Soares
	 3 GoldenGate

Nesse post podemos ver a incrível ferramenta de replicação de dados que é o GoldenGate.

O mais impressionante é que com algumas pequenos ajustes, conseguimos trabalhar com versões diferentes entre bancos Oracle, ideal para aquelas migrações de versão onde não tem janela de parada disponível.

Com o GoldenGate também é possível migrar/replicar dados de diferentes plataformas, SqlServer para Oracle ou vice-versa, Mysql para Oracle ou vice-versa, DB2 para Oracle e vice-versa, etc …

Nos próximos posts estarei demonstrando outras funcionalidades da ferramenta … monitoramento, performance e outros atrativos.

Até lá …

Nome do clusterware
May 10, 2011

Está atrás de descobrir o nome do clusterware instalado?

Com o utilitário cemutlo fácil descobrir nome e versão do clusterware. Lembrando que esse deve ser executado como root.

$ORA_CRS_HOME/bin/cemutlo [-n] [-w]
-n Informa o nome do cluster
-w Informa a versão do clusterware.

[root@rac1 ~]# $ORA_CRS_HOME/bin/cemutlo -n
crs_vm
[root@rac1 ~]# $ORA_CRS_HOME/bin/cemutlo -w
2:1:
Desconsiderando a retenção do RMAN
May 10, 2011

Em algumas situações, há a necessidade de guardar determinado backup além da retenção definida pelo RMAN.

Hoje em dia, existem leis que exigem que determinado backup seja armazenado por um tempo definido. É nesse momento que a desconsiderar a retenção do RMAN faz toda diferença.

No exemplo abaixo, estou demonstrado que o backup do dataflie 4 será armazenado em minha retenção do RMAN como 30 dias ignorando minha retenção padrão, o backup do datafile 4 só será considerada obsolete depois de 30 dias.

RMAN> backup datafile 4 keep until time "sysdate+30"; 

Starting backup at 07-APR-11
current log archived

using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=55 device type=DISK
backup will be obsolete on date 07-MAY-11
archived logs required to recover from this backup will be backed up
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00004 name=/oracle/oradata/orcl/users01.dbf
channel ORA_DISK_1: starting piece 1 at 07-APR-11
channel ORA_DISK_1: finished piece 1 at 07-APR-11
piece handle=/oracle/backup/ORCL_1_4.bkp tag=TAG20110407T222922 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01

using channel ORA_DISK_1
backup will be obsolete on date 07-MAY-11
archived logs required to recover from this backup will be backed up
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 07-APR-11
channel ORA_DISK_1: finished piece 1 at 07-APR-11
piece handle=/oracle/backup/ORCL_1_5.bkp tag=TAG20110407T222922 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01

current log archived
using channel ORA_DISK_1
backup will be obsolete on date 07-MAY-11
archived logs required to recover from this backup will be backed up
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=7 RECID=5 STAMP=747872969
channel ORA_DISK_1: starting piece 1 at 07-APR-11
channel ORA_DISK_1: finished piece 1 at 07-APR-11
piece handle=/oracle/backup/ORCL_1_6.bkp tag=TAG20110407T222922 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01

using channel ORA_DISK_1
backup will be obsolete on date 07-MAY-11
archived logs required to recover from this backup will be backed up
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
channel ORA_DISK_1: starting piece 1 at 07-APR-11
channel ORA_DISK_1: finished piece 1 at 07-APR-11
piece handle=/oracle/backup/ORCL_1_7.bkp tag=TAG20110407T222922 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 07-APR-11

 

Veja que até os archives são guardados na retenção e também não são removidos caso seja requisitado a execução os archives obsoletos.
Agora, se você deseja deixar guardado somente o BACKUP ignorando os archives basta executar usar a palavra chave nologs, ou seja ele permite no entando, que o RMAN remova os archives logs que seriam necessário para recuperar o backup.

Itanium e Oracle
May 10, 2011

Usa Oracle?
Usa Itanium?

A Oracle anunciou a poucos dias que não irá continuar com a atualização dos produtos Oracles para os processadores Itanium.

Isso já era esperado … algumas empresas já vem descontinuando seus produtos para Itanium como a Microsoft e a RedHat. A maioria dos patchset já não estavam mais disponível para Itanium.

Confiram a noticia aqui: http://www.oracle.com/us/corporate/press/346696

Grande noticia, já estava cansado de tantos bugs oracle em Itanium …

Como GoldenGate trabalha?
May 10, 2011

GoldenGate

Como mostra a figura acima, esses são os principais processos e arquivos do Oracle GoldenGate, ele mostra também como é todo o processo de replicação realizado, que estarei explicando mais a frente.

O GoldenGate é composto pelos seguientes componentes

  • Manager
  • Extract
  • Data pump
  • Replicat
  • Trails files
  • Checkpoints
  • Collector

Manager
Manager é um processo do GoldenGate que desempenha a função de monitorar e restartar (quando necessário) os processos GoldenGate. Erros de eventos ou problemas de lentidão são reportados por ele e também desempenha a função de manter (período) os arquivos de trail e logs do GoldenGate.

Ele deve estar sendo executado em cada configuração GoldenGate antes dos processos Extract e Replicat serem iniciado.

Extract
Esse processo executa em cima do source database e tem a responsabilidade de caputrar os dados e gravar na forma de “trail files” que depois serão enviados para o target database.

Data Pump
Quando o extract escreve para um trail file no source database, o data pump lê esses trail´s e envia atráves de uma rede para o database de destino.

Replicat
Ao contrário do extract, o replicat executa em cima do target database. Ele lê os arquivos trail files enviados pelo Data Pump e então replica essas alterações seja ela DDL ou DML para o database de destino.

Trails files
Todas as mudanças realizadas pelo source database é registrados e armazenadas na forma de arquivos em series assim o GoldenGate é capaz de armazenar essas mudanças temporariamente no disco,
esses arquivos são chamados de trail. Um arquivo trail pode existir tanto no source como no target database.

Checkpoints
Checkpoints assegura que as mudanças feitas pelo database source sejam de certa forma sincronizados com a extração do processo Extract. Ele previne também a redundancia de execuções em ambientes bi-direcionais.

Através dele é permitido usar multiplos Extract e Replicat processos para ler o mesmo arquivo trail.

Collector
Quando o Data Pump envia as informações dos trails através da NetWork, o primeiro processo a lêr essa informação é o Collector, ele recebe as mudanças do database que são enviadas pelo TCP/IP e as escreves para os trails files. O processo manager é quem gerência o momento do Collector capturar os dados.

Em um próximo artigo sobre GoldenGate, estarei fazendo a instalação de uma replicação simples, de oracle para oracle.

Até mais

Quanto tempo falta para acabar?
May 10, 2011

Sempre quando ouço “Quanto tempo falta para …” já penso na view v$session_longops.

De acordo com a documentação da Oracle essa view mostra o estado de várias operações (Rman Backup/Restore, Parallel Query, Recovery, Full table scans, Sorting) que executam por mais de 6 segundos, com isso permite estimar um tempo de finalização da operação.

column sid format a10 heading 'Sid/Serial'
column operacao format a11 heading 'Operação'
column objeto format a35 heading 'Objeto'
column executado format 99999999 heading 'BLK|Lidos'
column total format 99999999 heading 'BLK|Total'
column pct format 990.90 heading 'PCT(%)'
column inicio format a11 heading 'Dt Start'
column decorrido format a11 heading 'Decorrido|DD:HH:MI:SS'
column restante format a11 heading 'Restante|DD:HH:MI:SS'
column unidade format a3 heading 'Uni'

select
to_char(sid) || ',' || ltrim(to_char(serial#)) sid,
decode(opname,
'Hash Join', 'Hash Join',
'Index Fast Full Scan', 'Index Scan',
'Sort Output', 'Sort Output',
'Sort/Merge', 'Sort Merge',
'Table Scan', 'Table Scan',
'-') operacao,
target objeto,
sofar executado,
totalwork total,
trunc((sofar/totalwork)*100,2) pct,
to_char(start_time, 'DD/MM HH24:MI') inicio,
trunc(elapsed_seconds/86400)|| ':'
|| to_char(to_date(mod(elapsed_seconds,86400), 'SSSSS'), 'HH24:MI:SS') decorrido,
trunc(time_remaining/86400)|| ':'
|| to_char(to_date(mod(time_remaining,86400), 'SSSSS'), 'HH24:MI:SS') restante,
decode(units,'Blocks','Blk','-') unidade
from v$session_longops
where time_remaining > 0
and sid = &SID;
Monitorando o uso dos índices
May 10, 2011

Existem muitos bancos de dados em que índices estão criados mais não são utilizados. Por exemplo, ter criado um índice para uma determinado procedimento, que é executado somente uma vez  e após seu uso não é removido, ou até mesmo o Oracle perceber que leitura por scans completos pode ser mais vantajosos do que utilizar um determinado índice (isso acontece).

Criar índice em uma base, deve ser algo realmente estudado, pois podem ter impacto negativo sobre o desempenho das operações DML. Além de modificar o valor do bloco da data, também é necessário atualizar o bloco do índice.

Por esse motivo que deve-se notar muito bem a utilização de um índice, caso não seja utilizado prejudica o desempenho do banco de dados.

Abaixo está um exemplo para descobrir se um índice está sendo ou não utilizado

Acompanhe …

SQL> create table t
2 (
3 id number,
4 nome varchar2(50)
5 )
6 ;

Table created.

SQL> create index t_id_idx on t (id);

Index created.
SQL> insert into t values (1, 'Flávio');
1 row created.
SQL> commit; SQL> select index_name, table_name, used from v$object_usage; INDEX_NAME                          TABLE_NAME                USE ------------------------------ ------------------------------ --- T_ID_IDX                             T                         NO SQL> alter index t_id_idx monitoring usage; Index altered. SQL> select * from t where id=1; ID           NOME ---------- -------------------------------------------------- 1            Flávio SQL> select index_name, table_name, used from v$object_usage; INDEX_NAME                       TABLE_NAME                   USE ------------------------------ ------------------------------ --- T_ID_IDX                          T                           YES SQL> alter index t_id_idx nomonitoring usage; Index altered.

Veja que a view v$OBJECT_USAGE, terá cada índice do seu esquema cujo uso está sendo monitorando, se por ventura o índice não for usado, pode ser uma ótima opção exclui-lo.

Movendo control file para ASM
May 10, 2011

Maneira simples de mover o control file para o ASM, tudo é feito através do RMAN.

[oracle@oel510gasm oradata]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Mar 16 21:52:56 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> show parameter control_files

NAME                                    TYPE     VALUE
------------------------------------ ----------- ------------------------------
control_files                          string     /u01/app/oracle/oradata/control01.ctl,
/u01/app/oracle/oradata/control02.ctl,
/u01/app/oracle/oradata/control03.ctl

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
[oracle@oel510gasm oradata]$ rman target /

Recovery Manager: Release 10.2.0.1.0 - Production on Wed Mar 16 21:54:17 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

connected to target database (not started)

RMAN> startup nomount;

Oracle instance started

Total System Global Area     167772160 bytes

Fixed Size                     1218316 bytes
Variable Size                 67111156 bytes
Database Buffers              96468992 bytes
Redo Buffers                   2973696 bytes

RMAN> restore controlfile to '+DGROUP1/orcl/controlfile/control01.ctl' from '/u01/app/oracle/oradata/control01.ctl';

Starting restore at 16-MAR-11
using channel ORA_DISK_1

channel ORA_DISK_1: copied control file copy
Finished restore at 16-MAR-11

RMAN> restore controlfile to '+DGROUP1/orcl/controlfile/control02.ctl' from '/u01/app/oracle/oradata/control01.ctl';

Starting restore at 16-MAR-11
using channel ORA_DISK_1

channel ORA_DISK_1: copied control file copy
Finished restore at 16-MAR-11

RMAN> restore controlfile to '+DGROUP1/orcl/controlfile/control03.ctl' from '/u01/app/oracle/oradata/control01.ctl';

Starting restore at 16-MAR-11
using channel ORA_DISK_1

channel ORA_DISK_1: copied control file copy
Finished restore at 16-MAR-11

Após fazer o RESTORE do control file no ASM é necessário sinalizar ao spfile.

RMAN> sql 'alter system set control_files="
2> +DGROUP1/orcl/controlfile/control01.ctl",
3> "+DGROUP1/orcl/controlfile/control02.ctl",
4> "+DGROUP1/orcl/controlfile/control03.ctl"
5> scope=spfile';

sql statement: alter system set control_files="+DGROUP1/orcl/controlfile/control01.ctl", "+DGROUP1/orcl/controlfile/control02.ctl", "+DGROUP1/orcl/controlfile/control03.ctl" scope=spfile

RMAN> startup

connected to target database (not started)
Oracle instance started
database mounted
database opened

Total System Global Area     167772160 bytes

Fixed Size                     1218316 bytes
Variable Size                 67111156 bytes
Database Buffers              96468992 bytes
Redo Buffers                   2973696 bytes

[oracle@oel510gasm oradata]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Mar 16 22:02:21 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> show parameter control_files

NAME                                   TYPE         VALUE
------------------------------------ ----------- ------------------------------
control_files                          string      +DGROUP1/orcl/controlfile/cont
 rol01.ctl, +DGROUP1/orcl/contr
 olfile/control02.ctl, +DGROUP1
 /orcl/controlfile/control03.ctl

Next Page »