Browse By

Upgrade ambiente Produção e Dataguard Oracle RAC 11.2.0.4 para 12.1.0.1

Esse era para ser o ultimo post de 2014, mas como ele se estendeu um pouco além do planejado e eu não queria publica-lo de qualquer jeito, acabei deixando para ser o primeiro do ano de 2015. Aproveito a oportunidade e desejo a todos um ótimo ano novo com muita saúde que é o mais importante, o resto vem como consequência do nosso trabalho. Que venham os desafios, novas fases da vida e assim por diante…

O post será um pouco extenso devido a amplitude do assunto por isso irei direto ao assunto. Tentarei passar as informações mais importantes, deixando os links das documentações utilizadas para uma análise mais profunda para quem desejar.

Iremos realizar o upgrade de um ambiente Oracle RAC 11.2.0.4 (2-nodes) e de seu ambiente Dataguard em RAC 11.2.0.4 (2-nodes), ambos para a versão 12.1.0.1.0 com o menor downtime possível.

Estrutura do ambiente:

Server Físico Spec Server VM
Hostname SO Versão atual Futura Versão Memória Processador Tipo Node number
Mac Air 8GB ram 500GB SSD core i7 OVM 4.3.0 oel1 oel 6.4 DB+GRID 11.2.0.4 DB+GRID 12.1.0.1 1300M 1 Produção 1
OVM 4.3.0 oel2 oel 6.4 DB+GRID 11.2.0.4 DB+GRID 12.1.0.1 1300M 1 Produção 2
OVM 4.3.0 oel1dg oel 6.4 DB+GRID 11.2.0.4 DB+GRID 12.1.0.1 1300M 1 Dataguard 1
OVM 4.3.0 oel2dg oel 6.4 DB+GRID 11.2.0.4 DB+GRID 12.1.0.1 1300M 1 Dataguard 2

 

Iniciaremos as atividades realizando o upgrade do Grid Infrastructure (Grid home) no ambiente Dataguard. Por que no Dataguard primeiro ?

Simples, essa seria uma forma inicial de homologarmos o upgrade antes que seja feito no ambiente de produção ( para quem não tem uma cópia fiel da estrutura em um ambiente de homologação ) além de que, existem aplicações que funcionam perfeitamente em um banco de dados READ ONLY, que é o caso da nossa combinação:  Dataguard ( Active Dataguard ) + aplicações que realizam Report/Extração de informações e assim poderemos homologar se teremos algum problema nessa camada antes de aplicarmos no ambiente de produção.

Alguns problemas que podem ser mapeados seguindo essa ordem incluem:

  • Análise de problema na camada de conexão;
  • Análise de problemas pelo novo home-cluster produzir algum tipo de bug nas instances após o upgrade;
  • Algum problema de incompatibilidade de alguma aplicação/resource com a nova versão;
  • Executar os procedimentos nessa ordem serve para homologar os scripts/action scripts/application programs customizados que o cluster utiliza para gerenciar outras aplicações non-database se for o seu caso e assim podemos desenvolver os ajustes necessários para aplica-los em produção rapidamente no momento certo;
  • Entre outras best-pratices;

Para essa atividade seguimos do principio que já temos instalado um ambiente Oracle RAC versão 11.2.0.4 (2-nodes) e um ambiente Dataguard em RAC (2-nodes) na mesma versão. Existem ótimos artigos e documentações na internet que podem auxiliar a criar esse ambiente. Se eu fosse colocar o how-to aqui o post ficaria mais extenso e também partimos do principio que já foi feito um backup full do ambiente (Grid e Database), ok ? Lembre-se disso antes de realizar qualquer procedimento.

Existem diversas maneiras de se realizar o objetivo do assunto do post e as descritas aqui tanto para o Grid Infrastructure e Banco de dados seriam:

Método Rolling Upgrade no Grid Infrastructure home, (aplica-se o upgrade em um ou mais nodes específicos de cada vez, permitindo que os outros fiquem online suportando o ambiente) onde o downtime dependerá de como você executará a estratégia do upgrade, de como é a característica do seu ambiente e o que é considerado downtime em seu ambiente, ex:

1. Se você garantir que o horário que o upgrade será feito existem somente REPORT/QUERY/SELECT’s sendo executados E se a opção de FAILOVER de sessão estiver configurada corretamente, o downtime será 0. Acontecerá um pequeno delay (caso não esteja usando PRECONNECT failover) no redirecionamento da sessão para o outro node, mas nada de downtime.

2. Se no momento do upgrade existir sessões realizando tanto REPORT/QUERY/SELECT’s quanto DML’s, as sessões executando as querys/report’s serão redirecionadas com sucesso para outro node com o pequeno delay informado acima, mas as transações (DML’s) sendo executadas por outras sessões serão interrompidas sendo necessário reinicia-las, mas sua sessão também será redirecionada para o outro node. Nesse caso em específico, (perca da transação) algumas pessoas/ambientes entendem como downtime mesmo a sessão sendo redirecionada para outro node com sucesso, mas não houve perca de conexão.

3. Outras várias combinações. Existem N tipos de estratégias e cabe a você programar o melhor cenário/horário da manutenção e saber os problemas que podem ocorrer nessa atividade e diminuir o seu risco.

continuando…..  e temos o:

Método Database Rolling Upgrades Made Easy by Using a Data Guard Physical Standby Database com downtime mínimo no database devido a automatização feita pelo script ( physru ) desenvolvido pela Oracle que utilizaremos nesse processo. Escreverei mais sobre esse processo (script physru) mais adiante quando formos realmente utiliza-lo.

Abaixo, um resumo das atividades bem como a disponibilidade esperada do banco de dados para a aplicação/users. Considerarei que meu ambiente esta na janela de report/query nesse momento.

Cronograma.

Etapa Status Objetivo Ambiente Local/home Disponibilidade OBS
1 Pendente Rolling upgrade 12.1.0.1 Dataguard Grid Infrastructure Sem Downtime
2 Pendente Rolling upgrade 12.1.0.1 Produção Grid Infrastructure Sem Downtime
3 Pendente Instalar nova versão Soft. database out-of-place 12.1.0.1 Dataguard Database Sem Downtime
4 Pendente Instalar nova versão Soft. database out-of-place 12.1.0.1 Produção Database Sem Downtime
5 Pendente Upgrade de versão do database – Rolling Upgrades Made Easy Primeira-Fase. Dataguard Database Sem Downtime Switchover produção para dataguard que estará na nova versão 12.1.0.1
6 Pendente Upgrade de versão do database – Rolling Upgrades Made Easy Segunda-Fase. Produção/Dataguard Database Pequeno Downtime devido ao tempo do switchover
7 Pendente Upgrade de versão do database – Rolling Upgrades Made Easy Terceira-Fase. Produção/Dataguard Database Pequeno Downtime devido ao tempo do switchover Switchover para voltar o ambiente original

Não deixe o simplório cronograma acima engana-lo pois coloquei somente o objetivo principal nele, mas além dos procedimentos citados acima, o post abordará checagens, troubleshooting, administração de resources do cluster como relocar, parar, iniciar application programs, Oracle Trace File Analyzer, criação e gerenciamento de serviços, analise de processos de S.O, failover, desinstalação dos softwares antigos, Acfs Replication, um pouco de Golden Gate entre outras dicas que espero que sejam úteis. Fique a vontade em comentar ou mandar um email caso encontre alguma problema ok :)

Observação: Em todo o ambiente aqui criado não houve a necessidade de aplicar qualquer patch antes de executar os processos informados, tanto na questão de upgrade do Grid Infrastructure quanto o upgrade do RDBMS por que o ambiente de origem esta na versão 11.2.0.4. Caso você queira realizar o upgrade a partir de uma versão anterior a 11.2.0.4, é de extrema importância que você verifique se existe a necessidade de aplicar algum patch antes de realizar os procedimentos descritos.

========================================================================================================================

Dataguard side

1. Checagem: Primeiramente vamos checar as informações atuais do Grid Infrastructure.

$GRID_HOME/bin/crsctl query crs activeversion 1$GRID_HOME/bin/crsctl query crs softwareversion 22. Criar um backup manual do OCR por garantia:

$GRID_HOME/bin/ocrconfig -manualbackup 3Analisando o backup:

$GRID_HOME/bin/ocrconfig -showbackup 43. Checando as informações/pré requisitos antes de realizarmos o upgrade de versão do Grid Infrastructure.

3.1 Antes de executar o cluvfy altere o arquivo /etc/resolve.conf para evitar erros sobre DNS.

cat /etc/resolv.conf 
# Generated by NetworkManager
search localdomain
nameserver 192.168.0.1
options timeout:1 attempts:1 rotate # # Adicionar linha para evitar erro PRVF-5636

 

3.2 Executar o comando cluvfy com a opção abaixo:

/pasta_software_12.1/runcluvfy.sh stage -pre crsinst -upgrade -n oel1dg,oel2dg -rolling -src_crshome /u01/app/11.2.0/grid -dest_crshome /u01/app/12.1/grid -dest_version 12.1.0.1.0 -verbose

Explicação de alguns parâmetros acima: (Leia mais aqui.)

-src_crshome  = Local onde esta instalado a versão atual.
-dest_crshome = Local onde será instalado a nova versão.
-dest_version = Versão da nova instalação.

 

Caso exista algum arquivo que precise de alteração, use o mesmo comando acima adicionando a opção -fixup para gerar o script que executará os acertos. ex:  ( runcluvfy.sh stage -pre crsinst -upgrade -rolling -src_crshome  /u01/app/11.2.0/grid -dest_crshome /u01/app/12.1.0/grid -dest_version 12.1.0.1 -fixup -verbose )

Resultado da execução:

[oracle@oel1dg grid]$ ./runcluvfy.sh stage -pre crsinst -upgrade -n oel1dg,oel2dg -rolling -src_crshome /u01/app/11.2.0/grid -dest_crshome /u01/app/12.1/grid -dest_version 12.1.0.1.0 -verbose
Performing pre-checks for cluster services setup
Checking node reachability...
Check: Node reachability from node "oel1dg"
  Destination Node                      Reachable?
  ------------------------------------  ------------------------
  oel1dg                                yes
  oel2dg                                yes
Result: Node reachability check passed from node "oel1dg"
Checking user equivalence...
Check: User equivalence for user "oracle"
  Node Name                             Status
  ------------------------------------  ------------------------
  oel2dg                                passed
  oel1dg                                passed
Result: User equivalence check passed for user "oracle"

Checking CRS user consistency
Result: CRS user consistency check successful
Checking ASM disk size consistency
All ASM disks are correctly sized

Checking node connectivity...
Checking hosts config file...
  Node Name                             Status
  ------------------------------------  ------------------------
  oel1dg                                passed
  oel2dg                                passed
Verification of the hosts config file successful
Interface information for node "oel1dg"
 Name   IP Address      Subnet          Gateway         Def. Gateway    HW Address        MTU
 ------ --------------- --------------- --------------- --------------- ----------------- ------
 eth0   192.168.0.60    192.168.0.0     0.0.0.0         192.168.0.1     08:00:27:DE:B3:0D 1500
 eth0   192.168.0.202   192.168.0.0     0.0.0.0         192.168.0.1     08:00:27:DE:B3:0D 1500
 eth0   192.168.0.201   192.168.0.0     0.0.0.0         192.168.0.1     08:00:27:DE:B3:0D 1500
 eth0   192.168.0.160   192.168.0.0     0.0.0.0         192.168.0.1     08:00:27:DE:B3:0D 1500
 eth1   10.10.10.60     10.10.0.0       0.0.0.0         192.168.0.1     08:00:27:A6:96:9C 1500
 eth1   169.254.24.182  169.254.0.0     0.0.0.0         192.168.0.1     08:00:27:A6:96:9C 1500

Interface information for node "oel2dg"
 Name   IP Address      Subnet          Gateway         Def. Gateway    HW Address        MTU
 ------ --------------- --------------- --------------- --------------- ----------------- ------
 eth0   192.168.0.61    192.168.0.0     0.0.0.0         192.168.0.1     08:00:27:84:F1:76 1500
 eth0   192.168.0.161   192.168.0.0     0.0.0.0         192.168.0.1     08:00:27:84:F1:76 1500
 eth0   192.168.0.200   192.168.0.0     0.0.0.0         192.168.0.1     08:00:27:84:F1:76 1500
 eth1   10.10.10.61     10.10.0.0       0.0.0.0         192.168.0.1     08:00:27:2A:C1:9E 1500
 eth1   169.254.251.62  169.254.0.0     0.0.0.0         192.168.0.1     08:00:27:2A:C1:9E 1500

Check: Node connectivity using interfaces on subnet "192.168.0.0"
Check: Node connectivity of subnet "192.168.0.0"
  Source                          Destination                     Connected?
  ------------------------------  ------------------------------  ----------------
  oel1dg[192.168.0.201]           oel1dg[192.168.0.160]           yes
  oel1dg[192.168.0.201]           oel2dg[192.168.0.161]           yes
  oel1dg[192.168.0.201]           oel1dg[192.168.0.202]           yes
  oel1dg[192.168.0.201]           oel2dg[192.168.0.61]            yes
  oel1dg[192.168.0.201]           oel1dg[192.168.0.60]            yes
  oel1dg[192.168.0.201]           oel2dg[192.168.0.200]           yes
  oel1dg[192.168.0.160]           oel2dg[192.168.0.161]           yes
  oel1dg[192.168.0.160]           oel1dg[192.168.0.202]           yes
  oel1dg[192.168.0.160]           oel2dg[192.168.0.61]            yes
  oel1dg[192.168.0.160]           oel1dg[192.168.0.60]            yes
  oel1dg[192.168.0.160]           oel2dg[192.168.0.200]           yes
  oel2dg[192.168.0.161]           oel1dg[192.168.0.202]           yes
  oel2dg[192.168.0.161]           oel2dg[192.168.0.61]            yes
  oel2dg[192.168.0.161]           oel1dg[192.168.0.60]            yes
  oel2dg[192.168.0.161]           oel2dg[192.168.0.200]           yes
  oel1dg[192.168.0.202]           oel2dg[192.168.0.61]            yes
  oel1dg[192.168.0.202]           oel1dg[192.168.0.60]            yes
  oel1dg[192.168.0.202]           oel2dg[192.168.0.200]           yes
  oel2dg[192.168.0.61]            oel1dg[192.168.0.60]            yes
  oel2dg[192.168.0.61]            oel2dg[192.168.0.200]           yes
  oel1dg[192.168.0.60]            oel2dg[192.168.0.200]           yes
Result: Node connectivity passed for subnet "192.168.0.0" with node(s) oel1dg,oel2dg

Check: TCP connectivity of subnet "192.168.0.0"
  Source                          Destination                     Connected?
  ------------------------------  ------------------------------  ----------------
  oel1dg:192.168.0.201            oel1dg:192.168.0.160            passed
  oel1dg:192.168.0.201            oel2dg:192.168.0.161            passed
  oel1dg:192.168.0.201            oel1dg:192.168.0.202            passed
  oel1dg:192.168.0.201            oel2dg:192.168.0.61             passed
  oel1dg:192.168.0.201            oel1dg:192.168.0.60             passed
  oel1dg:192.168.0.201            oel2dg:192.168.0.200            passed
Result: TCP connectivity check passed for subnet "192.168.0.0"
Check: Node connectivity using interfaces on subnet "10.10.0.0"
Check: Node connectivity of subnet "10.10.0.0"
  Source                          Destination                     Connected?
  ------------------------------  ------------------------------  ----------------
  oel2dg[10.10.10.61]             oel1dg[10.10.10.60]             yes
Result: Node connectivity passed for subnet "10.10.0.0" with node(s) oel2dg,oel1dg
Check: TCP connectivity of subnet "10.10.0.0"
  Source                          Destination                     Connected?
  ------------------------------  ------------------------------  ----------------
  oel2dg:10.10.10.61              oel1dg:10.10.10.60              passed
Result: TCP connectivity check passed for subnet "10.10.0.0"
Checking subnet mask consistency...
Subnet mask consistency check passed for subnet "192.168.0.0".
Subnet mask consistency check passed for subnet "10.10.0.0".
Subnet mask consistency check passed.
Result: Node connectivity check passed

Checking multicast communication...
Checking subnet "10.10.0.0" for multicast communication with multicast group "224.0.0.251"...
Check of subnet "10.10.0.0" for multicast communication with multicast group "224.0.0.251" passed.

Check of multicast communication passed.
Task ASM Integrity check started...

Starting check to see if ASM is running on all cluster nodes...
ASM Running check passed. ASM is running on all specified nodes
Starting Disk Groups check to see if at least one Disk Group configured...
Disk Group Check passed. At least one Disk Group configured
Task ASM Integrity check passed...
Checking OCR integrity...

OCR integrity check passed
Checking ASMLib configuration.
  Node Name                             Status
  ------------------------------------  ------------------------
  oel1dg                                passed
  oel2dg                                passed
Result: Check for ASMLib configuration passed.
Check: Total memory
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2dg        1.1415GB (1196936.0KB)    4GB (4194304.0KB)         failed
  oel1dg        1.2372GB (1297288.0KB)    4GB (4194304.0KB)         failed
Result: Total memory check failed

Check: Available memory
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2dg        374.8672MB (383864.0KB)   50MB (51200.0KB)          passed
  oel1dg        340.0625MB (348224.0KB)   50MB (51200.0KB)          passed
Result: Available memory check passed

Check: Swap space
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2dg        4.8828GB (5119996.0KB)    1.5GB (1572864.0KB)       passed
  oel1dg        4.8828GB (5119996.0KB)    1.5GB (1572864.0KB)       passed
Result: Swap space check passed

Check: Free disk space for "oel2dg:/usr,oel2dg:/var,oel2dg:/etc,oel2dg:/u01/app/11.2.0/grid,oel2dg:/sbin,oel2dg:/tmp"
  Path              Node Name     Mount point   Available     Required      Status
  ----------------  ------------  ------------  ------------  ------------  ------------
  /usr              oel2dg        /             6.8662GB      7.9635GB      failed
  /var              oel2dg        /             6.8662GB      7.9635GB      failed
  /etc              oel2dg        /             6.8662GB      7.9635GB      failed
  /u01/app/11.2.0/grid  oel2dg        /             6.8662GB      7.9635GB      failed
  /sbin             oel2dg        /             6.8662GB      7.9635GB      failed
  /tmp              oel2dg        /             6.8662GB      7.9635GB      failed
Result: Free disk space check failed for "oel2dg:/usr,oel2dg:/var,oel2dg:/etc,oel2dg:/u01/app/11.2.0/grid,oel2dg:/sbin,oel2dg:/tmp"

Check: Free disk space for "oel1dg:/usr,oel1dg:/var,oel1dg:/etc,oel1dg:/u01/app/11.2.0/grid,oel1dg:/sbin,oel1dg:/tmp"
  Path              Node Name     Mount point   Available     Required      Status
  ----------------  ------------  ------------  ------------  ------------  ------------
  /usr              oel1dg        /             7.57GB        7.9635GB      failed
  /var              oel1dg        /             7.57GB        7.9635GB      failed
  /etc              oel1dg        /             7.57GB        7.9635GB      failed
  /u01/app/11.2.0/grid  oel1dg        /             7.57GB        7.9635GB      failed
  /sbin             oel1dg        /             7.57GB        7.9635GB      failed
  /tmp              oel1dg        /             7.57GB        7.9635GB      failed
Result: Free disk space check failed for "oel1dg:/usr,oel1dg:/var,oel1dg:/etc,oel1dg:/u01/app/11.2.0/grid,oel1dg:/sbin,oel1dg:/tmp"

Check: User existence for "oracle"
  Node Name     Status                    Comment
  ------------  ------------------------  ------------------------
  oel2dg        passed                    exists(54321)
  oel1dg        passed                    exists(54321)

Checking for multiple users with UID value 54321
Result: Check for multiple users with UID value 54321 passed
Result: User existence check passed for "oracle"

Check: Group existence for "oinstall"
  Node Name     Status                    Comment
  ------------  ------------------------  ------------------------
  oel2dg        passed                    exists
  oel1dg        passed                    exists
Result: Group existence check passed for "oinstall"

Check: Group existence for "dba"
  Node Name     Status                    Comment
  ------------  ------------------------  ------------------------
  oel2dg        passed                    exists
  oel1dg        passed                    exists
Result: Group existence check passed for "dba"

Check: Membership of user "oracle" in group "oinstall" [as Primary]
  Node Name         User Exists   Group Exists  User in Group  Primary       Status
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel2dg            yes           yes           yes           yes           passed
  oel1dg            yes           yes           yes           yes           passed
Result: Membership check for user "oracle" in group "oinstall" [as Primary] passed

Check: Membership of user "oracle" in group "dba"
  Node Name         User Exists   Group Exists  User in Group  Status
  ----------------  ------------  ------------  ------------  ----------------
  oel2dg            yes           yes           yes           passed
  oel1dg            yes           yes           yes           passed
Result: Membership check for user "oracle" in group "dba" passed

Check: Run level
  Node Name     run level                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2dg        3                         3,5                       passed
  oel1dg        3                         3,5                       passed
Result: Run level check passed

Check: Hard limits for "maximum open file descriptors"
  Node Name         Type          Available     Required      Status
  ----------------  ------------  ------------  ------------  ----------------
  oel2dg            hard          65536         65536         passed
  oel1dg            hard          65536         65536         passed
Result: Hard limits check passed for "maximum open file descriptors"

Check: Soft limits for "maximum open file descriptors"
  Node Name         Type          Available     Required      Status
  ----------------  ------------  ------------  ------------  ----------------
  oel2dg            soft          1024          1024          passed
  oel1dg            soft          1024          1024          passed
Result: Soft limits check passed for "maximum open file descriptors"

Check: Hard limits for "maximum user processes"
  Node Name         Type          Available     Required      Status
  ----------------  ------------  ------------  ------------  ----------------
  oel2dg            hard          16384         16384         passed
  oel1dg            hard          16384         16384         passed
Result: Hard limits check passed for "maximum user processes"

Check: Soft limits for "maximum user processes"
  Node Name         Type          Available     Required      Status
  ----------------  ------------  ------------  ------------  ----------------
  oel2dg            soft          2047          2047          passed
  oel1dg            soft          2047          2047          passed
Result: Soft limits check passed for "maximum user processes"
There are no oracle patches required for home "/u01/app/11.2.0/grid".
There are no oracle patches required for home "/u01/app/11.2.0/grid".

Checking for suitability of source home "/u01/app/11.2.0/grid" for upgrading to version "12.1.0.1.0".
Result: Source home "/u01/app/11.2.0/grid" is suitable for upgrading to version "12.1.0.1.0".

Check: System architecture
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2dg        x86_64                    x86_64                    passed
  oel1dg        x86_64                    x86_64                    passed
Result: System architecture check passed

Check: Kernel version
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2dg        2.6.39-400.17.1.el6uek.x86_64  2.6.32                    passed
  oel1dg        2.6.39-400.17.1.el6uek.x86_64  2.6.32                    passed
Result: Kernel version check passed

Check: Kernel parameter for "semmsl"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1dg            250           250           250           passed
  oel2dg            250           250           250           passed
Result: Kernel parameter check passed for "semmsl"

Check: Kernel parameter for "semmns"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1dg            32000         32000         32000         passed
  oel2dg            32000         32000         32000         passed
Result: Kernel parameter check passed for "semmns"

Check: Kernel parameter for "semopm"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1dg            100           100           100           passed
  oel2dg            100           100           100           passed
Result: Kernel parameter check passed for "semopm"

Check: Kernel parameter for "semmni"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1dg            128           128           128           passed
  oel2dg            128           128           128           passed
Result: Kernel parameter check passed for "semmni"

Check: Kernel parameter for "shmmax"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1dg            4398046511104  4398046511104  664211456     passed
  oel2dg            4398046511104  4398046511104  612831232     passed
Result: Kernel parameter check passed for "shmmax"

Check: Kernel parameter for "shmmni"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1dg            4096          4096          4096          passed
  oel2dg            4096          4096          4096          passed
Result: Kernel parameter check passed for "shmmni"

Check: Kernel parameter for "shmall"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1dg            1073741824    1073741824    129728        passed
  oel2dg            1073741824    1073741824    119693        passed
Result: Kernel parameter check passed for "shmall"

Check: Kernel parameter for "file-max"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1dg            6815744       6815744       6815744       passed
  oel2dg            6815744       6815744       6815744       passed
Result: Kernel parameter check passed for "file-max"

Check: Kernel parameter for "ip_local_port_range"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1dg            between 9000 & 65500  between 9000 & 65500  between 9000 & 65535  passed
  oel2dg            between 9000 & 65500  between 9000 & 65500  between 9000 & 65535  passed
Result: Kernel parameter check passed for "ip_local_port_range"

Check: Kernel parameter for "rmem_default"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1dg            262144        262144        262144        passed
  oel2dg            262144        262144        262144        passed
Result: Kernel parameter check passed for "rmem_default"

Check: Kernel parameter for "rmem_max"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1dg            4194304       4194304       4194304       passed
  oel2dg            4194304       4194304       4194304       passed
Result: Kernel parameter check passed for "rmem_max"

Check: Kernel parameter for "wmem_default"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1dg            262144        262144        262144        passed
  oel2dg            262144        262144        262144        passed
Result: Kernel parameter check passed for "wmem_default"

Check: Kernel parameter for "wmem_max"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1dg            1048576       1048576       1048576       passed
  oel2dg            1048576       1048576       1048576       passed
Result: Kernel parameter check passed for "wmem_max"

Check: Kernel parameter for "aio-max-nr"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1dg            1048576       1048576       1048576       passed
  oel2dg            1048576       1048576       1048576       passed
Result: Kernel parameter check passed for "aio-max-nr"

Check: Package existence for "binutils"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2dg        binutils-2.20.51.0.2-5.36.el6  binutils-2.20.51.0.2      passed
  oel1dg        binutils-2.20.51.0.2-5.36.el6  binutils-2.20.51.0.2      passed
Result: Package existence check passed for "binutils"

Check: Package existence for "compat-libcap1"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2dg        compat-libcap1-1.10-1     compat-libcap1-1.10       passed
  oel1dg        compat-libcap1-1.10-1     compat-libcap1-1.10       passed
Result: Package existence check passed for "compat-libcap1"

Check: Package existence for "compat-libstdc++-33(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2dg        compat-libstdc++-33(x86_64)-3.2.3-69.el6  compat-libstdc++-33(x86_64)-3.2.3  passed
  oel1dg        compat-libstdc++-33(x86_64)-3.2.3-69.el6  compat-libstdc++-33(x86_64)-3.2.3  passed
Result: Package existence check passed for "compat-libstdc++-33(x86_64)"

Check: Package existence for "libgcc(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2dg        libgcc(x86_64)-4.4.7-3.el6  libgcc(x86_64)-4.4.4      passed
  oel1dg        libgcc(x86_64)-4.4.7-3.el6  libgcc(x86_64)-4.4.4      passed
Result: Package existence check passed for "libgcc(x86_64)"

Check: Package existence for "libstdc++(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2dg        libstdc++(x86_64)-4.4.7-3.el6  libstdc++(x86_64)-4.4.4   passed
  oel1dg        libstdc++(x86_64)-4.4.7-3.el6  libstdc++(x86_64)-4.4.4   passed
Result: Package existence check passed for "libstdc++(x86_64)"

Check: Package existence for "libstdc++-devel(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2dg        libstdc++-devel(x86_64)-4.4.7-3.el6  libstdc++-devel(x86_64)-4.4.4  passed
  oel1dg        libstdc++-devel(x86_64)-4.4.7-3.el6  libstdc++-devel(x86_64)-4.4.4  passed
Result: Package existence check passed for "libstdc++-devel(x86_64)"

Check: Package existence for "sysstat"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2dg        sysstat-9.0.4-20.el6      sysstat-9.0.4             passed
  oel1dg        sysstat-9.0.4-20.el6      sysstat-9.0.4             passed
Result: Package existence check passed for "sysstat"

Check: Package existence for "gcc"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2dg        gcc-4.4.7-3.el6           gcc-4.4.4                 passed
  oel1dg        gcc-4.4.7-3.el6           gcc-4.4.4                 passed
Result: Package existence check passed for "gcc"

Check: Package existence for "gcc-c++"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2dg        gcc-c++-4.4.7-3.el6       gcc-c++-4.4.4             passed
  oel1dg        gcc-c++-4.4.7-3.el6       gcc-c++-4.4.4             passed
Result: Package existence check passed for "gcc-c++"

Check: Package existence for "ksh"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2dg        ksh-20100621-19.el6_4.4   ksh-...                   passed
  oel1dg        ksh-20100621-19.el6_4.4   ksh-...                   passed
Result: Package existence check passed for "ksh"

Check: Package existence for "make"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2dg        make-3.81-20.el6          make-3.81                 passed
  oel1dg        make-3.81-20.el6          make-3.81                 passed
Result: Package existence check passed for "make"

Check: Package existence for "glibc(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2dg        glibc(x86_64)-2.12-1.107.el6  glibc(x86_64)-2.12        passed
  oel1dg        glibc(x86_64)-2.12-1.107.el6  glibc(x86_64)-2.12        passed
Result: Package existence check passed for "glibc(x86_64)"

Check: Package existence for "glibc-devel(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2dg        glibc-devel(x86_64)-2.12-1.107.el6  glibc-devel(x86_64)-2.12  passed
  oel1dg        glibc-devel(x86_64)-2.12-1.107.el6  glibc-devel(x86_64)-2.12  passed
Result: Package existence check passed for "glibc-devel(x86_64)"

Check: Package existence for "libaio(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2dg        libaio(x86_64)-0.3.107-10.el6  libaio(x86_64)-0.3.107    passed
  oel1dg        libaio(x86_64)-0.3.107-10.el6  libaio(x86_64)-0.3.107    passed
Result: Package existence check passed for "libaio(x86_64)"

Check: Package existence for "libaio-devel(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2dg        libaio-devel(x86_64)-0.3.107-10.el6  libaio-devel(x86_64)-0.3.107  passed
  oel1dg        libaio-devel(x86_64)-0.3.107-10.el6  libaio-devel(x86_64)-0.3.107  passed
Result: Package existence check passed for "libaio-devel(x86_64)"

Check: Package existence for "nfs-utils"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2dg        nfs-utils-1.2.3-36.el6    nfs-utils-1.2.3-15        passed
  oel1dg        nfs-utils-1.2.3-36.el6    nfs-utils-1.2.3-15        passed
Result: Package existence check passed for "nfs-utils"

Checking for multiple users with UID value 0
Result: Check for multiple users with UID value 0 passed

Check: Current group ID
Result: Current group ID check passed

Starting check for consistency of primary group of root user
  Node Name                             Status
  ------------------------------------  ------------------------
  oel2dg                                passed
  oel1dg                                passed

Check for consistency of root user's primary group passed
Starting Clock synchronization checks using Network Time Protocol(NTP)...
NTP Configuration file check started...
Network Time Protocol(NTP) configuration file not found on any of the nodes. Oracle Cluster Time Synchronization Service(CTSS) can be used instead of NTP for time synchronization on the cluster nodes
No NTP Daemons or Services were found to be running

Result: Clock synchronization check using Network Time Protocol(NTP) passed
Checking Core file name pattern consistency...
Core file name pattern consistency check passed.

Checking to make sure user "oracle" is not in "root" group
  Node Name     Status                    Comment
  ------------  ------------------------  ------------------------
  oel2dg        passed                    does not exist
  oel1dg        passed                    does not exist
Result: User "oracle" is not part of "root" group. Check passed

Check default user file creation mask
  Node Name     Available                 Required                  Comment
  ------------  ------------------------  ------------------------  ----------
  oel2dg        0022                      0022                      passed
  oel1dg        0022                      0022                      passed
Result: Default user file creation mask check passed
Checking integrity of file "/etc/resolv.conf" across nodes

Checking the file "/etc/resolv.conf" to make sure only one of domain and search entries is defined
"domain" and "search" entries do not coexist in any  "/etc/resolv.conf" file
Checking if domain entry in file "/etc/resolv.conf" is consistent across the nodes...
"domain" entry does not exist in any "/etc/resolv.conf" file
Checking if search entry in file "/etc/resolv.conf" is consistent across the nodes...
Checking file "/etc/resolv.conf" to make sure that only one search entry is defined
More than one "search" entry does not exist in any "/etc/resolv.conf" file
All nodes have same "search" order defined in file "/etc/resolv.conf"
Checking DNS response time for an unreachable node
  Node Name                             Status
  ------------------------------------  ------------------------
  oel1dg                                passed
  oel2dg                                passed
The DNS response time for an unreachable node is within acceptable limit on all nodes

Check for integrity of file "/etc/resolv.conf" passed
UDev attributes check for OCR locations started...
Result: UDev attributes check passed for OCR locations
UDev attributes check for Voting Disk locations started...
Result: UDev attributes check passed for Voting Disk locations

Check: Time zone consistency
Result: Time zone consistency check passed
Checking VIP configuration.
Checking VIP Subnet configuration.
Check for VIP Subnet configuration passed.
Checking VIP reachability
Check for VIP reachability passed.

Checking Oracle Cluster Voting Disk configuration...
Oracle Cluster Voting Disk configuration check passed
Clusterware version consistency passed.

Checking integrity of name service switch configuration file "/etc/nsswitch.conf" ...
Checking if "hosts" entry in file "/etc/nsswitch.conf" is consistent across nodes...
Checking file "/etc/nsswitch.conf" to make sure that only one "hosts" entry is defined
More than one "hosts" entry does not exist in any "/etc/nsswitch.conf" file
All nodes have same "hosts" entry defined in file "/etc/nsswitch.conf"
Check for integrity of name service switch configuration file "/etc/nsswitch.conf" passed

Checking daemon "avahi-daemon" is not configured and running
Check: Daemon "avahi-daemon" not configured
  Node Name     Configured                Status
  ------------  ------------------------  ------------------------
  oel2dg        no                        passed
  oel1dg        no                        passed
Daemon not configured check passed for process "avahi-daemon"
Check: Daemon "avahi-daemon" not running
  Node Name     Running?                  Status
  ------------  ------------------------  ------------------------
  oel2dg        no                        passed
  oel1dg        no                        passed
Daemon not running check passed for process "avahi-daemon"

Starting check for Reverse path filter setting ...
Reverse path filter setting is correct for all private interconnect network interfaces on node "oel2dg".
Reverse path filter setting is correct for all private interconnect network interfaces on node "oel1dg".
Check for Reverse path filter setting passed
Starting check for /dev/shm mounted as temporary file system ...
Check for /dev/shm mounted as temporary file system passed
Pre-check for cluster services setup was unsuccessful on all the nodes.

 

Os problemas que ocorreram no meu ambiente foram: Falta de memória RAM e Falta de espaço em disco (valores mínimos), mas como é um ambiente de HML eu vou prosseguir pois sei que isso não será um problema. Lembre-se: Em um ambiente de produção o ideal seria não ocorrer problemas, ok ? Ajuste o que for necessário antes de prosseguir. Instale os rpm’s necessários, ajuste parâmetros e execute o cluvfy novamente… Caso queira maiores informações antes de realizar o upgrade no cluster, pode-se executar o ORAchk para obter um health check para upgrade. (MOS 1457357.1)

4. Seguindo a documentação, unset variávies de ambiente. ( Lembre-se: estamos fazendo tudo isso primeiramente no ambiente Dataguard)

unset ORA_CRS_HOME
unset ORACLE_BASE
unset ORACLE_HOME
unset ORACLE_SID

 

5. Crie um alias no tnsnames.ora do seu client apontando especificamente para cada instância e uma para o SCAN, ex:

RACDBGO =
  (DESCRIPTION =
    (LOAD_BALANCE=on)
    (FAILOVER=on)
    (ADDRESS = (PROTOCOL = TCP)(HOST = oeldg-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = RACDBGO)
     (FAILOVER_MODE=
         (TYPE=select)
         (METHOD=basic)
      )  
   )
 )
RACDBGO1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oel1dg-vip )(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = RACDBGO)
      (SID=RACDB1)
   )
  )

RACDBGO2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oel2dg-vip)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = RACDBGO)
      (SID=RACDB2)
    )
  )

 

5.1 Vamos criar algumas sessões para cada instância do nosso ambiente Dataguard para acompanharmos o processo de upgrade, como se fosse sessões de um processo de reporting. A query utilizada será:

SELECT inst.INSTANCE_NUMBER, inst.INSTANCE_NAME,inst.DATABASE_STATUS,inst.INSTANCE_ROLE,inst.ACTIVE_STATE,db.open_mode from v$database db, v$instance inst ;

 

1 Sessão conectada diretamente na instância1: Screen Shot 2014-12-16 at 13.56.421 Sessão conectada diretamente na instância2: Screen Shot 2014-12-16 at 13.56.571 Sessão usando o SCAN, sendo redirecionada para a instância1: Screen Shot 2014-12-16 at 13.57.131 Sessão usando o SCAN, sendo redirecionada para a instância2: Screen Shot 2014-12-16 at 13.57.246. Executando o runInstaller: 5Selecione: Upgrade …. 6 7Como já existe uma instalação do Grid Infrastructure, o SSH já esta OK. Apenas clique em Test para comprovar. 8   Não vamos selecionar o Oracle Grid Infrastructure Management Repository (GIMR) por que minha VM tem pouca memória e mais uma instância poderia causar algum problema no ambiente. Para saber mais sobre o GIMR, acesse aqui. (Resumidamente… é um banco de dados que armazena em tempo real métricas do sistema operacional coletadas pelo Cluster Health Monitor que por sua vez, detecta e analisa degradação e falhas tanto do sistema operacional quanto recursos do cluster e etc) Lembrando que na versão 12.1.0.2 essa opção de não instalar o GIMR foi descontinuada ou seja, será obrigatório a criação da mesma. leia mais aqui. 9YES 10 11YES 12 13 Vamos configurar a opção de execução automática dos scripts como root. 15   Esse é o momento que você precisa definir a sua estratégia de rolling upgrade. No meu caso separei cada instância como um processo “batch” diferente ou seja, os scripts root*.sh que são responsáveis por atualizar o grid para a nova versão, rebootar as instâncias pertencentes ao node e reiniciar tudo novamente na nova versão (nova versão do Grid Infrastructure) será  feito primeiro nos nodes que estão no batch1 e depois de tudo pronto a instalação devolve o comando para você decidir quando o processo deve ser iniciado no segundo batch fazendo os mesmos processos que foram feitos no batch1(que já estará disponível para a aplicação) e assim por diante. 16Vou ignorar conforme informei no início do post: 17 19YES 20INSTALL 2126Yes, confirmar o início da execução dos scripts como root. 27Que mensagem linda .rs  Os scripts foram executados com sucesso nos “nodes” que pertencem ao batch1, no meu caso somente o node1. Veja a mensagem, ela devolve o controle para você clicar no continue para que os procedimentos sejam executados no batch2. Espere por um instante…..28Homework: Volte as sessões criadas anteriormente e veja o que aconteceu. Houve indisponibilidade na sua opinião ? Em quais sessões não houve problema ? Como esta configurado a sua conexão em seu ambiente ? Responderei isso quando aplicarmos o mesmo procedimento no ambiente de produção. Vamos checar como esta o node1 antes de continuarmos com os comandos:

$GRID_HOME/bin/crsctl query crs activeversion
$GRID_HOME/bin/crsctl query crs softwareversion

31Vejam acima que o ActiveVersion ainda continua na versão anterior pois ainda existem outros nodes que estão na versão antiga. Esse valor só será alterado quando o ultimo batch for executado, mas o valor para o SoftwareVersion já foi alterado para a nova versão. Vejam abaixo a confirmação de onde os processos do cluster estão sendo executados (sobre a nova versão):

Screen Shot 2015-01-06 at 15.48.01

Dica: Lembrando que esse é o momento que o procedimento solicita para você continuar a atualização nos outros batchs subsequentes, mas antes de continuar você pode querer realizar o relocate dos services ou de outras aplicações clusterwide para os nodes que já foram atualizados, no nosso caso os nodes que pertencem ao batch1.

Continuando com a instalação… Clique em continue… e vamos para a próxima tela…

Próxima tela:34Opssss… Houston we have a problem… Clicando em Details:

Cause - Installer has failed to execute the specified script on the last node. This might be because of exception occurred while executing the script on the last node.  
Action - Review the log file '/u01/app/12.1.0/grid/cfgtoollogs/crsconfig/rootcrs_<nodename>_<timestamp>.log' for further details.  More Details
Execution of GI Upgrade script is failed on nodes : [oel2dg]  Exception details  - 
PRCZ-2009 : Failed to execute command "/u01/app/12.1.0/grid/rootupgrade.sh" as root within 3,600 seconds on nodes "oel2dg"
  - PRCZ-2009 : Failed to execute command "/u01/app/12.1.0/grid/rootupgrade.sh" as root within 3,600 seconds on nodes "oel2dg"

 

Ok, no log da instalação encontrei as seguintes mensagens (vou colocar somente uma amostra):

2014-12-15 18:51:36: Invoking "/u01/app/oracle/product/11.2.0/db_1/bin/srvctl stop listener -l RAC_LISTENER -n oel1dg -f"
2014-12-15 18:51:36: trace file=/u01/app/12.1.0/grid/cfgtoollogs/crsconfig/srvmcfg0.log
2014-12-15 18:51:36: Executing /u01/app/oracle/product/11.2.0/db_1/bin/srvctl stop listener -l RAC_LISTENER -n oel1dg -f
2014-12-15 18:51:36: Executing cmd: /u01/app/oracle/product/11.2.0/db_1/bin/srvctl stop listener -l RAC_LISTENER -n oel1dg -f
2014-12-15 18:51:42: Command output:
>  PRCR-1014 : Failed to stop resource ora.RAC_LISTENER.lsnr
>  PRCR-1065 : Failed to stop resource ora.RAC_LISTENER.lsnr
>  CRS-5016: Process "/u01/app/oracle/product/11.2.0/db_1/bin/lsnrctl" spawned by agent "/u01/app/12.1.0/grid/bin/oraagent.bin" for action "stop" failed: details at "(:CLSN00010:)" in "/u01/app/12.1.0/grid/log/oel1dg/agent/crsd/oraagent_oracle/oraagent_oracle.log"
>  CRS-2675: Stop of 'ora.RAC_LISTENER.lsnr' on 'oel1dg' failed
>
>End Command output
2014-12-15 18:51:42:   "/u01/app/oracle/product/11.2.0/db_1/bin/srvctl stop listener -l RAC_LISTENER -n oel1dg -f" failed with status 1.
2014-12-15 18:51:42: Executing cmd: /u01/app/12.1.0/grid/bin/clsecho -p has -f clsrsc -m 180 "srvctl stop listener -l RAC_LISTENER -n oel1dg -f" "null"
2014-12-15 18:51:42: Command output:
>  CLSRSC-180: An error occurred while executing the command 'srvctl stop listener -l RAC_LISTENER -n oel1dg -f' (error code null)
>End Command output
2014-12-15 18:51:42: Executing cmd: /u01/app/12.1.0/grid/bin/clsecho -p has -f clsrsc -m 180 "srvctl stop listener -l RAC_LISTENER -n oel1dg -f" "null"
2014-12-15 18:51:42: Command output:
>  CLSRSC-180: An error occurred while executing the command 'srvctl stop listener -l RAC_LISTENER -n oel1dg -f' (error code null)

 

Interessante, o cluster esta tentando desligar o listener que eu tenho criado (devido a outros testes que fiz nesse mesmo ambiente) no home do database ( que ainda esta na versão antiga 11.2 pois não chegamos nessa parte ainda ). Sabemos que a partir da versão 11.2 o listener deve ser gerenciado pelo Grid Infrastructure, mas no meu ambiente eu criei no dbhome. Enfim analisei alguns traces do comando e alguns me mostraram erros do tipo:

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 15-DEC-2014 18:53:03
Copyright (c) 1991, 2013, Oracle.  All rights reserved.
NL-00857: wrong number (0 - 1 needed) of arguments to "stop"

 

e entre outros que me levaram a pensar em algum possível bug e voilà,  Doc ID 1906872.1. O problema é que o agent do listener passou um parâmetro adicional -no_crs_notify para desliga-lo, mas a versão 11.2 não reconhece esse parâmetro adicional (somente a partir da 12.1.0.1). O Workaround seria desligar o listener manualmente ou aplicar um patch, mas para o nosso caso o ideal seria desliga-lo manualmente. Após desligar clique em retry e o processo continuará com sucesso.

33O erro acima foi durante a execução do cluvfy, um erro conhecido de quem já instalou alguns RAC’s por aí. Para quem nunca instalou, fiquem tranquilos o erro pode ser desconsiderado. 35 Checando os serviços do grid:

$GRID_HOME/bin/crsctl stat res -t 36 Obs: Nova informação no State details = STABLE    …..hmmmmmm….

Checando a versão ativa do cluster novamente em ambos os nodes:

$GRID_HOME/bin/crsctl query crs activeversion Screen Shot 2014-12-16 at 18.20.28$GRID_HOME/bin/crsctl query crs softwareversion Screen Shot 2014-12-16 at 18.20.18Ok. Ambiente Dataguard com a nova versão do Grid Infrastructure 12.1.0.1 instalado com sucesso e bancos no ar (READ ONLY WITH APPLY ). Reparem que o Software Version foi atualizado agora em ambos os nodes. Antes de atualizar o cronograma, vamos checar se não existe mais nada executando no $GRID_HOME antigo.

[oracle@oel1dg ~]$ ps -ef |grep -i "11\.2\.0"
root      1397     1  2 08:27 ?        00:00:15 /u01/app/11.2.0/grid/jdk/jre/bin/java -Xms64m -Xmx256m -classpath /u01/app/11.2.0/grid/tfa/oel1dg/tfa_home/jar/RATFA.jar:/u01/app/11.2.0/grid/tfa/oel1dg/tfa_home/jar/je-4.0.103.jar:/u01/app/11.2.0/grid/tfa/oel1dg/tfa_home/jar/ojdbc6.jar oracle.rat.tfa.TFAMain /u01/app/11.2.0/grid/tfa/oel1dg/tfa_home

 

hmmm… O TFA (Oracle Trace File Analyzer Collector). Quando você instala ou atualiza a versão do Grid Infrastructure para 11.2.0.4 (nossa versão) o TFA é instalado por default. Esta é uma ferramenta que simplifica a coleta de dados de diagnóstico para o Clusterware, Oracle Grid Infrastructure, Oracle RAC e é iniciada automaticamente quando o node é reiniciado. (Leia mais aqui.) Esse é o runlevel que ele inicia no startup do S.O

[root@oel2 etc]# cat /etc/init/oracle-tfa.conf
# Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
#
# Oracle TFA startup

start on runlevel [35]
stop  on runlevel [!35]
kill timeout 20
respawn
exec /etc/init.d/init.tfa run >/dev/null 2>&1 </dev/null

 

Vamos desconfigurar o TFA da instalação antiga executando o comando abaixo na qual desliga o daemon TFA e remove as entradas a partir da configuração do sistema operacional. (Faça em ambos os nodes do Dataguard.) ex:

[root@oel1dg ~]# /etc/init.d/init.tfa shutdown
Shutting down TFA
oracle-tfa stop/waiting
. . . . .
Killing TFA running with pid 1397
. . .
Successfully shutdown TFA..

 

Averiguando se não existe mais nenhum processo executando no $GRID_HOME antigo:

[root@oel1dg etc]#  ps -ef |grep -i "11\.2\.0"
root      6215  5881  0 09:38 pts/0    00:00:00 grep -i 11.2.0
[root@oel2dg etc]# ps -ef |grep -i "11\.2\.0"
root     18493  2981  0 09:39 pts/0    00:00:00 grep -i 11.2.0

 

O comando lsof é utilizado para mostrar os arquivos que estão abertos no sistema, utilize-o.

[oracle@oel2dg bin]$ lsof |grep -i /u01/app/11.2.0

Antes que você questione, Onde esta o TFA da nova versão ? Por que não esta executando ? … vamos a resposta!!! Por mais que a versão 12.1.0.1 seja obviamente maior que a 11.2.0.4 o TFA não é instalado nela por default, mas na versão 12.1.0.2 ele volta com força total. (Leia mais aqui.) Próximo passo será realizar todo o procedimento acima, MAS no ambiente de produção.

Atualizando o cronograma.

Etapa Status Objetivo Ambiente Local/home Disponibilidade OBS
1 OK Rolling upgrade 12.1.0 Dataguard Grid Infrastructure Sem Downtime
2 Pendente Rolling upgrade 12.1.0. Produção Grid Infrastructure Sem Downtime
3 Pendente Instalar nova versão Soft. database out-of-place 12.1.0. Dataguard Database Sem Downtime
4 Pendente Instalar nova versão Soft. database out-of-place 12.1.0. Produção Database Sem Downtime
5 Pendente Upgrade de versão do database – Rolling Upgrades Made Easy Primeira-Fase. Dataguard Database Sem Downtime Switchover produção para dataguard que estará na nova versão 12.1.0.1
6 Pendente Upgrade de versão do database – Rolling Upgrades Made Easy Segunda-Fase. Produção/Dataguard Database Pequeno Downtime devido ao tempo do switchover
7 Pendente Upgrade de versão do database – Rolling Upgrades Made Easy Terceira-Fase. Produção/Dataguard Database Pequeno Downtime devido ao tempo do switchover Switchover para voltar o ambiente original

========================================================================================================================

Ambiente de produção

Eu poderia pular essa parte pois realmente não teria necessidade já que os passos são idênticos aos que foram feitos no ambiente DATAGUARD, mas é melhor sobrar do que faltar :)  …ahhhhh antes que me esqueça, no meu ambiente de produção existe o Golden Gate instalado sobre o ACFS, e um file system criado com o DBFS. Essas seriam as únicas diferenças, mas servem para acompanharmos como essas features se comportam no UPGRADE inclusive testar o que vai acontecer com os custom application’s (leia mais aqui) que adicionei no cluster que nada mais é que scripts que iniciam, desligam, realocam o DBFS/Golden Gate entre os nodes. ex:

[oracle@oel1 bin]$ ./crsctl stop resource dbfs_mount
CRS-2673: Attempting to stop 'dbfs_mount' on 'oel1'
CRS-2673: Attempting to stop 'dbfs_mount' on 'oel2'
CRS-2677: Stop of 'dbfs_mount' on 'oel2' succeeded
CRS-2677: Stop of 'dbfs_mount' on 'oel1' succeeded
[oracle@oel1 bin]$ ./crsctl start resource dbfs_mount
CRS-2672: Attempting to start 'dbfs_mount' on 'oel1'
CRS-2672: Attempting to start 'dbfs_mount' on 'oel2'
CRS-2676: Start of 'dbfs_mount' on 'oel2' succeeded
CRS-2676: Start of 'dbfs_mount' on 'oel1' succeeded
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              25G   15G  9.0G  62% /
tmpfs                 2.3G  444M  1.9G  20% /dev/shm
/dev/sda1             194M   51M  134M  28% /boot
Downloads             466G  452G   14G  98% /media/sf_Downloads
/dev/asm/acfs_gg-245  4.0G  640M  3.3G  16% /goldengate
dbfs-@racdbm.local:/  9.8G  160K  9.8G   1% /gg01    >> DBFS

 

PRODUÇÃO

1.Checagem: Primeiramente vamos checar as informações atuais do Grid Infrastructure

$GRID_HOME/bin/crsctl query crs activeversion Screen Shot 2014-12-17 at 10.16.48$GRID_HOME/bin/crsctl query crs softwareversion Screen Shot 2014-12-17 at 10.16.552. Criar um backup manual do OCR por garantia:

$GRID_HOME/bin/ocrconfig -manualbackup Screen Shot 2014-12-17 at 10.17.55Analisando o backup:

$GRID_HOME/bin/ocrconfig -showbackup Screen Shot 2014-12-17 at 10.18.233. Checando as informações/pré requisitos antes de realizarmos o upgrade de versão do Grid Infrastructure.

3.1 Antes de executar o cluvfy altere o arquivo /etc/resolve.conf para evitar erros sobre DNS.

cat /etc/resolv.conf 
# Generated by NetworkManager
search localdomain
nameserver 192.168.0.1
options timeout:1 attempts:1 rotate # Adicionar linha para evitar error PRVF-5636

 

3.2 File System (ACFS e DBFS)

Node1:( /goldengate = ACFS,  /gg01 = DBFS) Screen Shot 2014-12-17 at 12.03.49Node2:( /goldengate = ACFS,  /gg01 = DBFS) Screen Shot 2014-12-17 at 12.03.353.3 Status Golden Gate:

Node1: Screen Shot 2014-12-17 at 11.08.26Node2: Screen Shot 2014-12-17 at 11.08.36Obs: O processo PMPWMON1 (PUMP) esta com o status ABENDED devido a minha outra VM que recebe o sincronismo estar desligada, mas o principal aqui é gerenciar o extract extwmon1 para termos certeza que esta running e caputurando as modificações configuradas (não entra nesse escopo).

3.4 Checando instâncias: Screen Shot 2014-12-17 at 13.18.15 Screen Shot 2014-12-17 at 13.18.10 Local atual de execução do Grid Infrastructure: Screen Shot 2014-12-17 at 15.26.293.5 Executar o comando cluvfy com a opção abaixo:

/pasta_software_12.1/runcluvfy.sh stage -pre crsinst -upgrade -n oel1dg,oel2dg -rolling -src_crshome /u01/app/11.2.0/grid -dest_crshome /u01/app/12.1.0/grid -dest_version 12.1.0.1.0 -verbose

Resultado da minha execução:

[oracle@oel1 grid]$ ./runcluvfy.sh stage -pre crsinst -upgrade -n oel1dg,oel2dg -rolling -src_crshome /u01/app/11.2.0/grid -dest_crshome /u01/app/12.1.0/grid -dest_version 12.1.0.1.0 -verbose

Performing pre-checks for cluster services setup
Checking node reachability...
Check: Node reachability from node "oel1"
  Destination Node                      Reachable?
  ------------------------------------  ------------------------
  oel1                                  yes
  oel2                                  yes
Result: Node reachability check passed from node "oel1"

Checking user equivalence...
Check: User equivalence for user "oracle"
  Node Name                             Status
  ------------------------------------  ------------------------
  oel2                                  passed
  oel1                                  passed
Result: User equivalence check passed for user "oracle"

Checking CRS user consistency
Result: CRS user consistency check successful
Checking ASM disk size consistency
All ASM disks are correctly sized

Checking node connectivity...
Checking hosts config file...
  Node Name                             Status
  ------------------------------------  ------------------------
  oel1                                  passed
  oel2                                  passed

Verification of the hosts config file successful
Interface information for node "oel1"
 Name   IP Address      Subnet          Gateway         Def. Gateway    HW Address        MTU
 ------ --------------- --------------- --------------- --------------- ----------------- ------
 eth0   192.168.0.30    192.168.0.0     0.0.0.0         192.168.0.1     08:00:27:A6:B3:36 1500
 eth0   192.168.0.130   192.168.0.0     0.0.0.0         192.168.0.1     08:00:27:A6:B3:36 1500
 eth0   192.168.0.100   192.168.0.0     0.0.0.0         192.168.0.1     08:00:27:A6:B3:36 1500
 eth1   10.10.10.30     10.10.0.0       0.0.0.0         192.168.0.1     08:00:27:03:AC:F8 1500
 eth1   169.254.50.70   169.254.0.0     0.0.0.0         192.168.0.1     08:00:27:03:AC:F8 1500
 eth2   192.168.0.177   192.168.0.0     0.0.0.0         192.168.0.1     08:00:27:BE:6A:45 1500

Interface information for node "oel2"
 Name   IP Address      Subnet          Gateway         Def. Gateway    HW Address        MTU
 ------ --------------- --------------- --------------- --------------- ----------------- ------
 eth0   192.168.0.31    192.168.0.0     0.0.0.0         192.168.0.1     08:00:27:56:22:A7 1500
 eth0   192.168.0.101   192.168.0.0     0.0.0.0         192.168.0.1     08:00:27:56:22:A7 1500
 eth0   192.168.0.21    192.168.0.0     0.0.0.0         192.168.0.1     08:00:27:56:22:A7 1500
 eth0   192.168.0.102   192.168.0.0     0.0.0.0         192.168.0.1     08:00:27:56:22:A7 1500
 eth0   192.168.0.131   192.168.0.0     0.0.0.0         192.168.0.1     08:00:27:56:22:A7 1500
 eth1   10.10.10.31     10.10.0.0       0.0.0.0         192.168.0.1     08:00:27:35:AB:2A 1500
 eth1   169.254.248.242 169.254.0.0     0.0.0.0         192.168.0.1     08:00:27:35:AB:2A 1500

Check: Node connectivity using interfaces on subnet "192.168.0.0"

Check: Node connectivity of subnet "192.168.0.0"
  Source                          Destination                     Connected?
  ------------------------------  ------------------------------  ----------------
  oel2[192.168.0.21]              oel1[192.168.0.100]             yes
  oel2[192.168.0.21]              oel2[192.168.0.102]             yes
  oel2[192.168.0.21]              oel2[192.168.0.101]             yes
  oel2[192.168.0.21]              oel2[192.168.0.131]             yes
  oel2[192.168.0.21]              oel1[192.168.0.177]             yes
  oel2[192.168.0.21]              oel2[192.168.0.31]              yes
  oel2[192.168.0.21]              oel1[192.168.0.30]              yes
  oel2[192.168.0.21]              oel1[192.168.0.130]             yes
  oel1[192.168.0.100]             oel2[192.168.0.102]             yes
  oel1[192.168.0.100]             oel2[192.168.0.101]             yes
  oel1[192.168.0.100]             oel2[192.168.0.131]             yes
  oel1[192.168.0.100]             oel1[192.168.0.177]             yes
  oel1[192.168.0.100]             oel2[192.168.0.31]              yes
  oel1[192.168.0.100]             oel1[192.168.0.30]              yes
  oel1[192.168.0.100]             oel1[192.168.0.130]             yes
  oel2[192.168.0.102]             oel2[192.168.0.101]             yes
  oel2[192.168.0.102]             oel2[192.168.0.131]             yes
  oel2[192.168.0.102]             oel1[192.168.0.177]             yes
  oel2[192.168.0.102]             oel2[192.168.0.31]              yes
  oel2[192.168.0.102]             oel1[192.168.0.30]              yes
  oel2[192.168.0.102]             oel1[192.168.0.130]             yes
  oel2[192.168.0.101]             oel2[192.168.0.131]             yes
  oel2[192.168.0.101]             oel1[192.168.0.177]             yes
  oel2[192.168.0.101]             oel2[192.168.0.31]              yes
  oel2[192.168.0.101]             oel1[192.168.0.30]              yes
  oel2[192.168.0.101]             oel1[192.168.0.130]             yes
  oel2[192.168.0.131]             oel1[192.168.0.177]             yes
  oel2[192.168.0.131]             oel2[192.168.0.31]              yes
  oel2[192.168.0.131]             oel1[192.168.0.30]              yes
  oel2[192.168.0.131]             oel1[192.168.0.130]             yes
  oel1[192.168.0.177]             oel2[192.168.0.31]              yes
  oel1[192.168.0.177]             oel1[192.168.0.30]              yes
  oel1[192.168.0.177]             oel1[192.168.0.130]             yes
  oel2[192.168.0.31]              oel1[192.168.0.30]              yes
  oel2[192.168.0.31]              oel1[192.168.0.130]             yes
  oel1[192.168.0.30]              oel1[192.168.0.130]             yes
Result: Node connectivity passed for subnet "192.168.0.0" with node(s) oel2,oel1
Check: TCP connectivity of subnet "192.168.0.0"
  Source                          Destination                     Connected?
  ------------------------------  ------------------------------  ----------------
  oel2:192.168.0.21               oel1:192.168.0.100              passed
  oel2:192.168.0.21               oel2:192.168.0.102              passed
  oel2:192.168.0.21               oel2:192.168.0.101              passed
  oel2:192.168.0.21               oel2:192.168.0.131              passed
  oel2:192.168.0.21               oel1:192.168.0.177              passed
  oel2:192.168.0.21               oel2:192.168.0.31               passed
  oel2:192.168.0.21               oel1:192.168.0.30               passed
  oel2:192.168.0.21               oel1:192.168.0.130              passed
Result: TCP connectivity check passed for subnet "192.168.0.0"
Check: Node connectivity using interfaces on subnet "10.10.0.0"
Check: Node connectivity of subnet "10.10.0.0"
  Source                          Destination                     Connected?
  ------------------------------  ------------------------------  ----------------
  oel1[10.10.10.30]               oel2[10.10.10.31]               yes
Result: Node connectivity passed for subnet "10.10.0.0" with node(s) oel1,oel2
Check: TCP connectivity of subnet "10.10.0.0"
  Source                          Destination                     Connected?
  ------------------------------  ------------------------------  ----------------
  oel1:10.10.10.30                oel2:10.10.10.31                passed
Result: TCP connectivity check passed for subnet "10.10.0.0"

Checking subnet mask consistency...
Subnet mask consistency check passed for subnet "192.168.0.0".
Subnet mask consistency check passed for subnet "10.10.0.0".
Subnet mask consistency check passed.

Result: Node connectivity check passed
Checking multicast communication...
Checking subnet "10.10.0.0" for multicast communication with multicast group "224.0.0.251"...
Check of subnet "10.10.0.0" for multicast communication with multicast group "224.0.0.251" passed.

Check of multicast communication passed.
Task ASM Integrity check started...

Starting check to see if ASM is running on all cluster nodes...
ASM Running check passed. ASM is running on all specified nodes
Starting Disk Groups check to see if at least one Disk Group configured...
Disk Group Check passed. At least one Disk Group configured

Task ASM Integrity check passed...
Checking OCR integrity...
OCR integrity check passed
Checking ASMLib configuration.
  Node Name                             Status
  ------------------------------------  ------------------------
  oel1                                  passed
  oel2                                  passed
Result: Check for ASMLib configuration passed.

Check: Total memory
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2          1.2372GB (1297288.0KB)    4GB (4194304.0KB)         failed
  oel1          1.2372GB (1297288.0KB)    4GB (4194304.0KB)         failed
Result: Total memory check failed

Check: Available memory
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2          425.9258MB (436148.0KB)   50MB (51200.0KB)          passed
  oel1          399.6172MB (409208.0KB)   50MB (51200.0KB)          passed
Result: Available memory check passed

Check: Swap space
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2          4.8828GB (5119996.0KB)    1.5GB (1572864.0KB)       passed
  oel1          4.8828GB (5119996.0KB)    1.5GB (1572864.0KB)       passed
Result: Swap space check passed

Check: Free disk space for "oel2:/usr,oel2:/var,oel2:/etc,oel2:/u01/app/11.2.0/grid,oel2:/sbin,oel2:/tmp"
  Path              Node Name     Mount point   Available     Required      Status
  ----------------  ------------  ------------  ------------  ------------  ------------
  /usr              oel2          /             7.2939GB      7.9635GB      failed
  /var              oel2          /             7.2939GB      7.9635GB      failed
  /etc              oel2          /             7.2939GB      7.9635GB      failed
  /u01/app/11.2.0/grid  oel2          /             7.2939GB      7.9635GB      failed
  /sbin             oel2          /             7.2939GB      7.9635GB      failed
  /tmp              oel2          /             7.2939GB      7.9635GB      failed
Result: Free disk space check failed for "oel2:/usr,oel2:/var,oel2:/etc,oel2:/u01/app/11.2.0/grid,oel2:/sbin,oel2:/tmp"

Check: Free disk space for "oel1:/usr,oel1:/var,oel1:/etc,oel1:/u01/app/11.2.0/grid,oel1:/sbin,oel1:/tmp"
  Path              Node Name     Mount point   Available     Required      Status
  ----------------  ------------  ------------  ------------  ------------  ------------
  /usr              oel1          /             8.6706GB      7.9635GB      passed
  /var              oel1          /             8.6706GB      7.9635GB      passed
  /etc              oel1          /             8.6706GB      7.9635GB      passed
  /u01/app/11.2.0/grid  oel1          /             8.6706GB      7.9635GB      passed
  /sbin             oel1          /             8.6706GB      7.9635GB      passed
  /tmp              oel1          /             8.6706GB      7.9635GB      passed
Result: Free disk space check passed for "oel1:/usr,oel1:/var,oel1:/etc,oel1:/u01/app/11.2.0/grid,oel1:/sbin,oel1:/tmp"

Check: User existence for "oracle"
  Node Name     Status                    Comment
  ------------  ------------------------  ------------------------
  oel2          passed                    exists(54321)
  oel1          passed                    exists(54321)

Checking for multiple users with UID value 54321
Result: Check for multiple users with UID value 54321 passed
Result: User existence check passed for "oracle"

Check: Group existence for "oinstall"
  Node Name     Status                    Comment
  ------------  ------------------------  ------------------------
  oel2          passed                    exists
  oel1          passed                    exists
Result: Group existence check passed for "oinstall"

Check: Group existence for "dba"
  Node Name     Status                    Comment
  ------------  ------------------------  ------------------------
  oel2          passed                    exists
  oel1          passed                    exists
Result: Group existence check passed for "dba"

Check: Membership of user "oracle" in group "oinstall" [as Primary]
  Node Name         User Exists   Group Exists  User in Group  Primary       Status
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel2              yes           yes           yes           yes           passed
  oel1              yes           yes           yes           yes           passed
Result: Membership check for user "oracle" in group "oinstall" [as Primary] passed

Check: Membership of user "oracle" in group "dba"
  Node Name         User Exists   Group Exists  User in Group  Status
  ----------------  ------------  ------------  ------------  ----------------
  oel2              yes           yes           yes           passed
  oel1              yes           yes           yes           passed
Result: Membership check for user "oracle" in group "dba" passed

Check: Run level
  Node Name     run level                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2          3                         3,5                       passed
  oel1          3                         3,5                       passed
Result: Run level check passed

Check: Hard limits for "maximum open file descriptors"
  Node Name         Type          Available     Required      Status
  ----------------  ------------  ------------  ------------  ----------------
  oel2              hard          65536         65536         passed
  oel1              hard          65536         65536         passed
Result: Hard limits check passed for "maximum open file descriptors"

Check: Soft limits for "maximum open file descriptors"
  Node Name         Type          Available     Required      Status
  ----------------  ------------  ------------  ------------  ----------------
  oel2              soft          1024          1024          passed
  oel1              soft          1024          1024          passed
Result: Soft limits check passed for "maximum open file descriptors"

Check: Hard limits for "maximum user processes"
  Node Name         Type          Available     Required      Status
  ----------------  ------------  ------------  ------------  ----------------
  oel2              hard          16384         16384         passed
  oel1              hard          16384         16384         passed
Result: Hard limits check passed for "maximum user processes"

Check: Soft limits for "maximum user processes"
  Node Name         Type          Available     Required      Status
  ----------------  ------------  ------------  ------------  ----------------
  oel2              soft          16384         2047          passed
  oel1              soft          16384         2047          passed
Result: Soft limits check passed for "maximum user processes"

There are no oracle patches required for home "/u01/app/11.2.0/grid".
There are no oracle patches required for home "/u01/app/11.2.0/grid".

Checking for suitability of source home "/u01/app/11.2.0/grid" for upgrading to version "12.1.0.1.0".
Result: Source home "/u01/app/11.2.0/grid" is suitable for upgrading to version "12.1.0.1.0".

Check: System architecture
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2          x86_64                    x86_64                    passed
  oel1          x86_64                    x86_64                    passed
Result: System architecture check passed

Check: Kernel version
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2          2.6.39-400.17.1.el6uek.x86_64  2.6.32                    passed
  oel1          2.6.39-400.17.1.el6uek.x86_64  2.6.32                    passed
Result: Kernel version check passed

Check: Kernel parameter for "semmsl"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1              250           250           250           passed
  oel2              250           250           250           passed
Result: Kernel parameter check passed for "semmsl"

Check: Kernel parameter for "semmns"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1              32000         32000         32000         passed
  oel2              32000         32000         32000         passed
Result: Kernel parameter check passed for "semmns"

Check: Kernel parameter for "semopm"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1              100           100           100           passed
  oel2              100           100           100           passed
Result: Kernel parameter check passed for "semopm"

Check: Kernel parameter for "semmni"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1              128           128           128           passed
  oel2              128           128           128           passed
Result: Kernel parameter check passed for "semmni"

Check: Kernel parameter for "shmmax"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1              4398046511104  4398046511104  664211456     passed
  oel2              4398046511104  4398046511104  664211456     passed
Result: Kernel parameter check passed for "shmmax"

Check: Kernel parameter for "shmmni"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1              4096          4096          4096          passed
  oel2              4096          4096          4096          passed
Result: Kernel parameter check passed for "shmmni"

Check: Kernel parameter for "shmall"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1              1073741824    1073741824    129728        passed
  oel2              1073741824    1073741824    129728        passed
Result: Kernel parameter check passed for "shmall"

Check: Kernel parameter for "file-max"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1              6815744       6815744       6815744       passed
  oel2              6815744       6815744       6815744       passed
Result: Kernel parameter check passed for "file-max"

Check: Kernel parameter for "ip_local_port_range"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1              between 9000 & 65500  between 9000 & 65500  between 9000 & 65535  passed
  oel2              between 9000 & 65500  between 9000 & 65500  between 9000 & 65535  passed
Result: Kernel parameter check passed for "ip_local_port_range"

Check: Kernel parameter for "rmem_default"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1              262144        262144        262144        passed
  oel2              262144        262144        262144        passed
Result: Kernel parameter check passed for "rmem_default"

Check: Kernel parameter for "rmem_max"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1              4194304       4194304       4194304       passed
  oel2              4194304       4194304       4194304       passed
Result: Kernel parameter check passed for "rmem_max"

Check: Kernel parameter for "wmem_default"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1              262144        262144        262144        passed
  oel2              262144        262144        262144        passed
Result: Kernel parameter check passed for "wmem_default"

Check: Kernel parameter for "wmem_max"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1              1048576       1048576       1048576       passed
  oel2              1048576       1048576       1048576       passed
Result: Kernel parameter check passed for "wmem_max"

Check: Kernel parameter for "aio-max-nr"
  Node Name         Current       Configured    Required      Status        Comment
  ----------------  ------------  ------------  ------------  ------------  ------------
  oel1              1048576       1048576       1048576       passed
  oel2              1048576       1048576       1048576       passed
Result: Kernel parameter check passed for "aio-max-nr"

Check: Package existence for "binutils"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2          binutils-2.20.51.0.2-5.36.el6  binutils-2.20.51.0.2      passed
  oel1          binutils-2.20.51.0.2-5.36.el6  binutils-2.20.51.0.2      passed
Result: Package existence check passed for "binutils"

Check: Package existence for "compat-libcap1"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2          compat-libcap1-1.10-1     compat-libcap1-1.10       passed
  oel1          compat-libcap1-1.10-1     compat-libcap1-1.10       passed
Result: Package existence check passed for "compat-libcap1"

Check: Package existence for "compat-libstdc++-33(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2          compat-libstdc++-33(x86_64)-3.2.3-69.el6  compat-libstdc++-33(x86_64)-3.2.3  passed
  oel1          compat-libstdc++-33(x86_64)-3.2.3-69.el6  compat-libstdc++-33(x86_64)-3.2.3  passed
Result: Package existence check passed for "compat-libstdc++-33(x86_64)"

Check: Package existence for "libgcc(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2          libgcc(x86_64)-4.4.7-3.el6  libgcc(x86_64)-4.4.4      passed
  oel1          libgcc(x86_64)-4.4.7-3.el6  libgcc(x86_64)-4.4.4      passed
Result: Package existence check passed for "libgcc(x86_64)"

Check: Package existence for "libstdc++(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2          libstdc++(x86_64)-4.4.7-3.el6  libstdc++(x86_64)-4.4.4   passed
  oel1          libstdc++(x86_64)-4.4.7-3.el6  libstdc++(x86_64)-4.4.4   passed
Result: Package existence check passed for "libstdc++(x86_64)"

Check: Package existence for "libstdc++-devel(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2          libstdc++-devel(x86_64)-4.4.7-3.el6  libstdc++-devel(x86_64)-4.4.4  passed
  oel1          libstdc++-devel(x86_64)-4.4.7-3.el6  libstdc++-devel(x86_64)-4.4.4  passed
Result: Package existence check passed for "libstdc++-devel(x86_64)"

Check: Package existence for "sysstat"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2          sysstat-9.0.4-20.el6      sysstat-9.0.4             passed
  oel1          sysstat-9.0.4-20.el6      sysstat-9.0.4             passed
Result: Package existence check passed for "sysstat"

Check: Package existence for "gcc"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2          gcc-4.4.7-3.el6           gcc-4.4.4                 passed
  oel1          gcc-4.4.7-3.el6           gcc-4.4.4                 passed
Result: Package existence check passed for "gcc"

Check: Package existence for "gcc-c++"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2          gcc-c++-4.4.7-3.el6       gcc-c++-4.4.4             passed
  oel1          gcc-c++-4.4.7-3.el6       gcc-c++-4.4.4             passed
Result: Package existence check passed for "gcc-c++"

Check: Package existence for "ksh"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2          ksh-20100621-19.el6_4.4   ksh-...                   passed
  oel1          ksh-20100621-19.el6       ksh-...                   passed
Result: Package existence check passed for "ksh"

Check: Package existence for "make"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2          make-3.81-20.el6          make-3.81                 passed
  oel1          make-3.81-20.el6          make-3.81                 passed
Result: Package existence check passed for "make"

Check: Package existence for "glibc(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2          glibc(x86_64)-2.12-1.107.el6  glibc(x86_64)-2.12        passed
  oel1          glibc(x86_64)-2.12-1.107.el6  glibc(x86_64)-2.12        passed
Result: Package existence check passed for "glibc(x86_64)"

Check: Package existence for "glibc-devel(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2          glibc-devel(x86_64)-2.12-1.107.el6  glibc-devel(x86_64)-2.12  passed
  oel1          glibc-devel(x86_64)-2.12-1.107.el6  glibc-devel(x86_64)-2.12  passed
Result: Package existence check passed for "glibc-devel(x86_64)"

Check: Package existence for "libaio(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2          libaio(x86_64)-0.3.107-10.el6  libaio(x86_64)-0.3.107    passed
  oel1          libaio(x86_64)-0.3.107-10.el6  libaio(x86_64)-0.3.107    passed
Result: Package existence check passed for "libaio(x86_64)"

Check: Package existence for "libaio-devel(x86_64)"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2          libaio-devel(x86_64)-0.3.107-10.el6  libaio-devel(x86_64)-0.3.107  passed
  oel1          libaio-devel(x86_64)-0.3.107-10.el6  libaio-devel(x86_64)-0.3.107  passed
Result: Package existence check passed for "libaio-devel(x86_64)"

Check: Package existence for "nfs-utils"
  Node Name     Available                 Required                  Status
  ------------  ------------------------  ------------------------  ----------
  oel2          nfs-utils-1.2.3-36.el6    nfs-utils-1.2.3-15        passed
  oel1          nfs-utils-1.2.3-36.el6    nfs-utils-1.2.3-15        passed
Result: Package existence check passed for "nfs-utils"

Checking for multiple users with UID value 0
Result: Check for multiple users with UID value 0 passed

Check: Current group ID
Result: Current group ID check passed
Starting check for consistency of primary group of root user
  Node Name                             Status
  ------------------------------------  ------------------------
  oel2                                  passed
  oel1                                  passed

Check for consistency of root user's primary group passed

Starting Clock synchronization checks using Network Time Protocol(NTP)...

NTP Configuration file check started...
Network Time Protocol(NTP) configuration file not found on any of the nodes. Oracle Cluster Time Synchronization Service(CTSS) can be used instead of NTP for time synchronization on the cluster nodes
No NTP Daemons or Services were found to be running

Result: Clock synchronization check using Network Time Protocol(NTP) passed

Checking Core file name pattern consistency...
Core file name pattern consistency check passed.

Checking to make sure user "oracle" is not in "root" group
  Node Name     Status                    Comment
  ------------  ------------------------  ------------------------
  oel2          passed                    does not exist
  oel1          passed                    does not exist
Result: User "oracle" is not part of "root" group. Check passed

Check default user file creation mask
  Node Name     Available                 Required                  Comment
  ------------  ------------------------  ------------------------  ----------
  oel2          0022                      0022                      passed
  oel1          0022                      0022                      passed
Result: Default user file creation mask check passed
Checking integrity of file "/etc/resolv.conf" across nodes

Checking the file "/etc/resolv.conf" to make sure only one of domain and search entries is defined
"domain" and "search" entries do not coexist in any  "/etc/resolv.conf" file
Checking if domain entry in file "/etc/resolv.conf" is consistent across the nodes...
"domain" entry does not exist in any "/etc/resolv.conf" file
Checking if search entry in file "/etc/resolv.conf" is consistent across the nodes...
Checking file "/etc/resolv.conf" to make sure that only one search entry is defined
More than one "search" entry does not exist in any "/etc/resolv.conf" file
All nodes have same "search" order defined in file "/etc/resolv.conf"
Checking DNS response time for an unreachable node
  Node Name                             Status
  ------------------------------------  ------------------------
  oel1                                  passed
  oel2                                  passed
The DNS response time for an unreachable node is within acceptable limit on all nodes

Check for integrity of file "/etc/resolv.conf" passed
UDev attributes check for OCR locations started...
Result: UDev attributes check passed for OCR locations
UDev attributes check for Voting Disk locations started...
Result: UDev attributes check passed for Voting Disk locations

Check: Time zone consistency
Result: Time zone consistency check passed
Checking VIP configuration.
Checking VIP Subnet configuration.
Check for VIP Subnet configuration passed.
Checking VIP reachability
Check for VIP reachability passed.

Checking Oracle Cluster Voting Disk configuration...

Oracle Cluster Voting Disk configuration check passed

Clusterware version consistency passed.

Checking integrity of name service switch configuration file "/etc/nsswitch.conf" ...
Checking if "hosts" entry in file "/etc/nsswitch.conf" is consistent across nodes...
Checking file "/etc/nsswitch.conf" to make sure that only one "hosts" entry is defined
More than one "hosts" entry does not exist in any "/etc/nsswitch.conf" file
All nodes have same "hosts" entry defined in file "/etc/nsswitch.conf"
Check for integrity of name service switch configuration file "/etc/nsswitch.conf" passed

Checking daemon "avahi-daemon" is not configured and running
Check: Daemon "avahi-daemon" not configured
  Node Name     Configured                Status
  ------------  ------------------------  ------------------------
  oel2          no                        passed
  oel1          no                        passed
Daemon not configured check passed for process "avahi-daemon"

Check: Daemon "avahi-daemon" not running
  Node Name     Running?                  Status
  ------------  ------------------------  ------------------------
  oel2          no                        passed
  oel1          no                        passed
Daemon not running check passed for process "avahi-daemon"
Starting check for Reverse path filter setting ...
Reverse path filter setting is correct for all private interconnect network interfaces on node "oel2".
Reverse path filter setting is correct for all private interconnect network interfaces on node "oel1".

Check for Reverse path filter setting passed
Starting check for /dev/shm mounted as temporary file system ...
Check for /dev/shm mounted as temporary file system passed
Pre-check for cluster services setup was unsuccessful on all the nodes.

 

São os mesmos erros encontrados no ambiente Dataguard (memória e espaco em disco), podemos ignorar no MEU CASO.

3.6 Criando service.

Para manter o ambiente cada vez mais desafiador, vou criar um service que utilizarei para realizar a conexão ao banco de dados e testar o failover das sessões. Como nosso ambiente de Cluster é do tipo Administrator-managed database, vamos criar o service informando as instances que serão preferidas (PREFERRED - que receberão as conexões primariamente) e as disponíveis (AVAILABLE - que serão utilizadas quando alguma preferida der problema ). Se o nosso cluster fosse do tipo Policy-managed database, colocaríamos os services sobre server pool’s onde o banco esta executando. (Leia mais aqui.) Como quero testar a conexão-failover primariamente para as 2 instâncias, colocarei as 2 como preferidas. Segue:

srvctl add service -d RACDBSP -s racprod -r RACDB1,RACDB2 -y AUTOMATIC -P BASIC -q TRUE -j LONG -B SERVICE_TIME -e SELECT -m BASIC -z 180 -w 5
srvctl start serv -d RACDBSP -s racprod
srvctl status service -d RACDBSP -s racprod -v

 

( Leia mais aqui sobre os parâmetros do comando add service.)

Screen Shot 2014-12-17 at 13.52.02 faltou3.7 Criando o alias no tnsnames.ora de algum client que utilizarei para os testes:

RACDBSP =
  (DESCRIPTION =
    (LOAD_BALANCE=on)
    (FAILOVER=on)
    (ADDRESS = (PROTOCOL = TCP)(HOST = oel-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = RACPROD)
     (FAILOVER_MODE=
         (TYPE=select)
         (METHOD=basic)
      )  
   )
 )

RACDBSP1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oel1-vip)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = RACDBSP)
      (SID=RACDB1)
   )
  )

RACDBSP2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oel2-vip)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = RACDBSP)
      (SID=RACDB2)
    )
  )

 

RACDBSP seria o alias que deverá realizar o failover (coloquei os parâmetros de failover porque copiei de um alias existente, mas não há necessidades porque já criamos o service com as opções de failover definidas. ), os outros são só para teste.

Conexões:

1 Conexão usando o alias do SCAN + Novo Service failover Option enable, conectando na instância 1. Screen Shot 2014-12-17 at 14.19.111 Conexão usando o alias do SCAN + Novo Service failover Option enable, conectando na instância 2. Screen Shot 2014-12-17 at 14.21.19 4. Analisando as sessões:

Vamos executar a query abaixo para acompanharmos os estado das sessões no banco de dados.

select inst_id,
   username, 
   sid, 
   serial#, 
   failover_type, 
   failover_method, 
   failed_over
from
   gv$session
where username is not null
and username != 'SYS'
and (failover_type = 'SELECT' OR username = 'GGATE' OR username = 'DBFS_USER')
order by inst_id;

Screen Shot 2014-12-17 at 14.25.50Legal, temos as 2 sessões do user SYSTEM utilizando o novo service e sessões do Golden Gate (todas na instância 1) e sessões do DBFS (uma em cada instância ).  

5. Realocando alguma coisa

Em algum momento existirá a necessidade de você realocar algum servicecustom application (scripts/programs que gerenciam alguma outra aplicação que não seja core do cluster, ex: Golden Gate, Apache e etc) que foi adicionado no seu cluster por motivos como esse do nosso post (aplicação de patch, upgrade e etc), então vamos simular essa atividade também. No meu caso vou realocar o Golden Gate que esta executando no node1 (que será o primeiro node a ser atualizado com a versão 12.1.0.1 do Grid Infrastructure) para o node2, pois não quero que ele fique desligado no momento do upgrade. Não farei isso com o SERVICE pois quero que as sessões utilizem o failover de sessão automaticamente, mas eu poderia também realoca-lo para outro node/pool disponível que não seja o primário/atual(se fosse criado com a algum server como AVAILABLE).

Analisando o GG resource:

$GRID_HOME/bin/crsctl stat res ggate_app -v

Screen Shot 2015-01-05 at 12.03.25

Como disse, esta executando no node1: Screen Shot 2014-12-17 at 15.13.55Node2: (nada…) Screen Shot 2014-12-17 at 15.14.09Realocando:

$GRID_HOME/bin/crsctl relocate resource ggate_app -s oel1 -n oel2 -f   (A opção -f seria para mover todas as aplicações dependentes inclusive o vip dessa aplicação.)

$GRID_HOME/bin/crsctl stat res oragg-vip

$GRID_HOME/bin/crsctl stat res ggate_app

Screen Shot 2015-01-05 at 13.39.31Analisando…

NODE1: Screen Shot 2014-12-17 at 15.17.25NODE2: Screen Shot 2014-12-17 at 15.17.36 Sessões database: Screen Shot 2014-12-17 at 15.17.45Golden Gate: Screen Shot 2014-12-17 at 15.19.30Sucesso… Golden Gate realocado para o node2. (leia mais aqui sobre start, stop, relocate utilizando os comandos não depreciados.)

========================================================================================================================

Rolling Upgrade Produção

Vamos iniciar o processo de upgrade no node1, mas antes vamos ao tópico: Aprendendo com os problemas :)

Lembram que houve problema(BUG) no listener que estava executando no ORACLE_HOME do database do ambiente DATAGUARD no início do post ? que ainda estava/esta na versão 11.2 ? Pois então vamos desligar esse mesmo listener, mas do ambiente de PRODUÇÃO de ambos nodes. NODE1:

Screen Shot 2014-12-17 at 15.30.37NODE2: Screen Shot 2014-12-17 at 15.31.54continuando… Antes de mais nada, faça um backup geral do seu ambiente, inclusive de banco de dados.

Como não encontrei nenhuma informação sobre se devo parar ou não o ACFS e DBFS antes do UPGRADE, vou continuar com eles ligados e vamos ver o que acontecerá…  ./runInstaller  1 UPGRADE2 3 Test password4 NO, pelos mesmos motivos do Dataguard.5 YES6 7 YES8 Location9 Mesmo processo feito no Dataguard. (Automatizar execução dos scritps root*.sh)10 Mesma metodologia feita no Dataguard. Node1=Batch1, Node2=Batch211 Ignorando.. (Em ambiente de produção evite ignorar.)12 YES13 14 15 YES, inicio da execução automática dos scripts.16 Só um detalhe que eu não mencionei quando executei esse mesmo procedimento no amibiente Dataguard. Quando os scripts root*.sh estão sendo executados, um dos passos é realizar o shutdown abort nas instâncias dos nodes que estão sendo atualizados ( Lembre do início do post que informei a necessidade de termos os backup’s feitos, mesmo que seja um shutdown abort por batch de cada vez. Segurança nunca é demais…) Segue: 17 Vamos aproveitar e analisar o que houve com a sessão que havíamos criado nessa instância (inst 1).

Antes do início do upgrade elas estavam assim:18Depois do inicio do upgrade e indisponibilidade da instância 1: 19Vejam acima que a sessão foi movida para a instância 2 e a coluna FAILED_OVER esta como YES por que houve failover. Abaixo a sessão em si, criada anteriormente pelo sqlplus: 20Com isso vemos que não houve indisponibilidade nenhuma nesse meu processo. A sessão ainda esta ativa e pode continuar realizando suas atividades. ( Lembre-se do início do post sobre “Indisponibilidade” para abordar as variações. )

Continuando… Antes de iniciarmos o processo batch2, é necessário desligar novamente o listener que esta no DB_HOME  pois o processo de upgrade da instância 1 iniciou tudo novamente no restart do cluster, inclusive o listener.

Aguarde nessa tela. Desligue o listener e aproveite para checar como estão as coisas no NODE1. 21Processos do cluster executando na nova instalação/home 12.1.0 (node1) 22 Os filesystem’s (DBFS e ACFS) foram migrados e montado automaticamente com sucesso utilizando o novo home. 23Checando serviços do cluster: 25 26 Relocate Golden Gate:

Vamos fazer o processo inverso, relocar o Golden Gate de volta na instância 1, pois iremos realizar o upgrade na instância 2.

$GRID_HOME/bin/crsctl relocate resource ggate_app -s oel2 -n oel1 -f

Screen Shot 2015-01-05 at 14.10.24No comando do relocate a opção -s  seria o source o -n o target e o -f seria para mover as dependências. Leia mais aqui.

    Conferindo se as sessões foram criadas na instância 1: 29 Status Golden Gate:30 Checando versão do Grid Infrastructure depois do upgrade na instância 1:

31Lembrem-se o Software Version só será atualizado depois que o ultimo node for atualizado.

Desligando o listener no node1: $DB_HOME/bin/lsnrctl stop RAC_LISTENER

Volte a tela de instalação e clique em continue. (Perceba que até esse momento, nenhuma aplicação ficou indisponível, exceto o Golden Gate por 3 segundos. Tempo do stop/start.) 35 Ocorrendo shutdown na instância 2 do node2:36Checando as sessões do banco de dados:

Sessão criada originalmente na instância 1 (veja o sqlprompt  SCAN_INST1> ) e que foi migrada para a instância 2 (devido o upgrade inicial do node1) e agora retornando para a instância 1 devido ao failover novamente.

37 Sessão criada originalmente na instância 2 (veja o sqlprompt  SCAN_INST2> ) e migrada/failover para a instância 1 devido ao upgrade atual no node2.

38 Status das sessões e failover mode: (Agora as 2 como YES) 39 40O erro acima pode ser ignorado como já comentado. YES.42 43Checando NODE2 após update: Versão atualizada: (Notem que agora o Software Version foi atualizado pois o ultimo node foi atualizado) 47 49 Sessões do DBFS criadas com sucesso na instância 2. 46Filesystem’s (DBFS + ACFS) montados automaticamente: 45Processos do cluster executando no novo home/instalação: 44Um adendo que também ficou faltando mencionar no ambiente DATAGUARD e que logicamente ocorreu também no PRODUTIVO. Lembram do meu listener que existia no DB_HOME (11.2) chamado RAC_LISTENER, motivo do nosso BUG no procedimento ? Pois é, o procedimento do upgrade migrou ele para o home do Grid-infrastructure ($GRID_HOME) pois como comentei, a partir da versão 11.2 todos os listener’s devem ser gerenciados no Grid-infrastructure e ele só “arrumou” o que achou que era uma “cagada”rs. Fiquem atentos.

48Antes de atualizar o cronograma, vamos checar se não existe mais nada executando no $GRID_HOME antigo.

Node1:
[oracle@oel1 ~]$ ps -ef |grep -i "11\.2\.0"
root      1474     1  0 08:31 ?        00:00:51 /u01/app/11.2.0/grid/jdk/jre/bin/java -Xms64m -Xmx256m -classpath /u01/app/11.2.0/grid/tfa/oel1/tfa_home/jar/RATFA.jar:/u01/app/11.2.0/grid/tfa/oel1/tfa_home/jar/je-4.0.103.jar:/u01/app/11.2.0/grid/tfa/oel1/tfa_home/jar/ojdbc6.jar oracle.rat.tfa.TFAMain /u01/app/11.2.0/grid/tfa/oel1/tfa_home
oracle    6581     1  0 08:29 ?        00:00:00 /u01/app/11.2.0/grid/bin/dbfs_client /@racdbm.local -o allow_other,direct_io,wallet /gg01

 

Node2:
[oracle@oel2 ~]$ ps -ef |grep -i "11\.2\.0"
root      1361     1  0 08:33 ?        00:00:21 /u01/app/11.2.0/grid/jdk/jre/bin/java -Xms64m -Xmx256m -classpath /u01/app/11.2.0/grid/tfa/oel2/tfa_home/jar/RATFA.jar:/u01/app/11.2.0/grid/tfa/oel2/tfa_home/jar/je-4.0.103.jar:/u01/app/11.2.0/grid/tfa/oel2/tfa_home/jar/ojdbc6.jar oracle.rat.tfa.TFAMain /u01/app/11.2.0/grid/tfa/oel2/tfa_home
oracle    3929     1  0 08:36 ?        00:00:00 /u01/app/11.2.0/grid/bin/dbfs_client /@racdbm.local -o allow_other,direct_io,wallet /gg01

 

Temos o TFA novamente e também o DBFS. Vamos remover o TFA igual foi feito no DATAGUARD e alterar o resource dbfs_mount para que o mesmo leia o action script no novo $GRID_HOME.

Desconfigurando o TFA

Node1:
[root@oel1 etc]# /etc/init.d/init.tfa shutdown
Shutting down TFA
oracle-tfa stop/waiting
. . . . .
Killing TFA running with pid 1474
. . .
Successfully shutdown TFA..

 

Node2:
[root@oel2 etc]# /etc/init.d/init.tfa shutdown
Shutting down TFA
oracle-tfa stop/waiting
. . . . .
Killing TFA running with pid 1385
. . .
Successfully shutdown TFA..

 

Alterando resource DBFS: NODE1

Lembrando, no upgrade o resource (dbfs_mount) foi migrado com sucesso para a nova instalação do Grid Infrastructure, o que precisa ser feito agora é alterar o local de onde o script que faz a administração do DBFS é executado. (antigo $GRID_HOME) e atualizar as variáveis que utilizam o home antigo para o novo dentro do script.

Essa atividade desse ser feita com qualquer outro resource (non core) que você tenha criado em seu ambiente”.

Vamos checar como estão as configurações do resource:

[oracle@oel1 bin]$ ./crsctl stat res dbfs_mount -f
NAME=dbfs_mount
TYPE=local_resource
STATE=ONLINE
TARGET=ONLINE
ACL=owner:oracle:rwx,pgrp:oinstall:rwx,other::r--
ACTIONS=
ACTION_FAILURE_TEMPLATE=
ACTION_SCRIPT=/u01/app/11.2.0/grid/crs/script/mount-dbfs.sh  >> Caminho antigo
ACTION_TIMEOUT=60
AGENT_FILENAME=%CRS_HOME%/bin/scriptagent
ALERT_TEMPLATE=
ALIAS_NAME=
AUTO_START=restore
CHECK_INTERVAL=30
CHECK_TIMEOUT=0
CLEAN_TIMEOUT=60
CREATION_SEED=101
DEFAULT_TEMPLATE=
DEGREE=1
DELETE_TIMEOUT=60
DESCRIPTION=
ENABLED=1
ID=dbfs_mount
INSTANCE_COUNT=2
INSTANCE_FAILOVER=1
INTERMEDIATE_TIMEOUT=0
LOAD=1
LOGGING_LEVEL=1
MODIFY_TIMEOUT=60
NOT_RESTARTING_TEMPLATE=
OFFLINE_CHECK_INTERVAL=0
PROFILE_CHANGE_TEMPLATE=
RESTART_ATTEMPTS=10
SCRIPT_TIMEOUT=300
SERVER_CATEGORY=
START_CONCURRENCY=0
START_DEPENDENCIES=hard(ora.racdbsp.db)pullup(ora.racdbsp.db)
START_TIMEOUT=0
STATE_CHANGE_TEMPLATE=
STOP_CONCURRENCY=0
STOP_DEPENDENCIES=hard(ora.racdbsp.db)
STOP_TIMEOUT=0
UPTIME_THRESHOLD=1h
USER_WORKLOAD=no

 

Ajustando e copiando o script para o novo $GRID_HOME

[oracle@oel1 script]$ pwd
 /u01/app/11.2.0/grid/crs/script
 [root@oel1 script]# cp -r mount-dbfs.sh  mount-dbfs.sh_bkp
 [root@oel1 script]# sed -i 's|/u01/app/11.2.0/grid|/u01/app/12.1.0/grid|g' mount-dbfs.sh  --Alterando o conteúdo para o novo home dentro do script
 [root@oel1 script]# cp mount-dbfs.sh /u01/app/12.1.0/grid/crs/script/

 

Parando o resource no node1 (Vamos fazer um de cada vez para não gerar uma indisponibilidade total no DBFS):

[oracle@oel1 bin]$ ./crsctl stat res dbfs_mount
NAME=dbfs_mount
TYPE=local_resource
TARGET=ONLINE        , ONLINE
STATE=ONLINE on oel1, ONLINE on oel2
[oracle@oel1 bin]$ ./crsctl stop res dbfs_mount -n oel1
CRS-2673: Attempting to stop 'dbfs_mount' on 'oel1'
CRS-2677: Stop of 'dbfs_mount' on 'oel1' succeeded
[oracle@oel1 bin]$ ./crsctl stat res dbfs_mount
NAME=dbfs_mount
TYPE=local_resource
TARGET=OFFLINE, ONLINE
STATE=OFFLINE, ONLINE on oel2

 

Alterando o resource: (Apontando novo diretório no novo $GRID_HOME)

[oracle@oel1 bin]$ ./crsctl modify res dbfs_mount -attr "ACTION_SCRIPT=/u01/app/12.1.0/grid/crs/script/mount-dbfs.sh"

 

Leia mais sobre crsctl modify aqui.

Checando resource alterado:

[oracle@oel1 bin]$ ./crsctl stat res dbfs_mount -f
NAME=dbfs_mount
TYPE=local_resource
STATE=INTERMEDIATE
TARGET=ONLINE
ACL=owner:oracle:rwx,pgrp:oinstall:rwx,other::r--
ACTIONS=
ACTION_FAILURE_TEMPLATE=
ACTION_SCRIPT=/u01/app/12.1.0/grid/crs/script/mount-dbfs.sh   -- Agora esta OK
ACTION_TIMEOUT=60
AGENT_FILENAME=%CRS_HOME%/bin/scriptagent
ALERT_TEMPLATE=
ALIAS_NAME=
AUTO_START=restore
CHECK_INTERVAL=30
CHECK_TIMEOUT=0
CLEAN_TIMEOUT=60
CREATION_SEED=225
DEFAULT_TEMPLATE=
DEGREE=1
DELETE_TIMEOUT=60
DESCRIPTION=
ENABLED=1
ID=dbfs_mount
INSTANCE_COUNT=2
INSTANCE_FAILOVER=1
INTERMEDIATE_TIMEOUT=0
LOAD=1
LOGGING_LEVEL=1
MODIFY_TIMEOUT=60
NOT_RESTARTING_TEMPLATE=
OFFLINE_CHECK_INTERVAL=0
PROFILE_CHANGE_TEMPLATE=
RESTART_ATTEMPTS=10
SCRIPT_TIMEOUT=300
SERVER_CATEGORY=
START_CONCURRENCY=0
START_DEPENDENCIES=hard(ora.racdbsp.db)pullup(ora.racdbsp.db)
START_TIMEOUT=0
STATE_CHANGE_TEMPLATE=
STOP_CONCURRENCY=0
STOP_DEPENDENCIES=hard(ora.racdbsp.db)
STOP_TIMEOUT=0
UPTIME_THRESHOLD=1h
USER_WORKLOAD=no

 

Iniciando e checando resource:

[oracle@oel1 bin]$ ./crsctl start res dbfs_mount -n oel1
CRS-2672: Attempting to start 'dbfs_mount' on 'oel1'
CRS-2676: Start of 'dbfs_mount' on 'oel1' succeeded

[oracle@oel1 bin]$ ./crsctl stat res dbfs_mount
NAME=dbfs_mount
TYPE=local_resource
TARGET=ONLINE        , ONLINE
STATE=ONLINE on oel1, INTERMEDIATE on oel2
[oracle@oel1 bin]$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              25G   21G  2.7G  89% /
tmpfs                 2.3G  984M  1.3G  43% /dev/shm
/dev/sda1             194M   51M  134M  28% /boot
Downloads             466G  458G  7.2G  99% /media/sf_Downloads
/dev/asm/acfs_gg-245  4.0G  577M  3.4G  15% /goldengate
dbfs-@racdbm.local:/  9.8G  120K  9.8G   1% /gg01

 

NODE2: Para ajustar o DBFS (ou qualquer outro resource customizado) no node2, transfira o script já alterado do novo $GRID_HOME/crs/script do node1 para o mesmo diretório no node2. Restart o resource no node2 e pronto.

Atualizando o cronograma.

Etapa Status Objetivo Ambiente Local/home Disponibilidade OBS
1 OK Rolling upgrade 12.1.0 Dataguard Grid Infrastructure Sem Downtime
2 OK Rolling upgrade 12.1.0. Produção Grid Infrastructure Sem Downtime
3 Pendente Instalar nova versão Soft. database out-of-place 12.1.0. Dataguard Database Sem Downtime
4 Pendente Instalar nova versão Soft. database out-of-place 12.1.0. Produção Database Sem Downtime
5 Pendente Upgrade de versão do database – Rolling Upgrades Made Easy Primeira-Fase. Dataguard Database Sem Downtime Switchover produção para dataguard que estará na nova versão 12.1.0.1
6 Pendente Upgrade de versão do database – Rolling Upgrades Made Easy Segunda-Fase. Produção/Dataguard Database Pequeno Downtime devido ao tempo do switchover
7 Pendente Upgrade de versão do database – Rolling Upgrades Made Easy Terceira-Fase. Produção/Dataguard Database Pequeno Downtime devido ao tempo do switchover Switchover para voltar o ambiente original

========================================================================================================================

Instalação Software Database 12.1.0  

Dataguard Side

Continuando com as instalações, agora é o momento de realizar a instalação da nova versão do database em modo out-of-place ou seja, isso não causará indisponibilidade em nada pois esta sendo feito uma nova instalação sobre um novo diretório.

Crie os diretórios necessários ( mkdir -p /u01/app/oracle/product/12.1.0/db_1 )  (em ambos ambientes Produção e Dataguard e em todos os nodes) e execute o runInstaller.

Veja se existe algum PréRequisito no seu ambiente que precisa ser ajustado aqui. ou execute o cluvfy.

Como sempre, vamos iniciar a instalação no ambiente Dataguard por questão de segurança/homologação/best pratice e etc.

export ORACLE_HOME=/u01/app/oracle/product/12.1/db_1  — novo_diretório

/Past_install_new_version_db_121/runInstaller 1 2 3 Install Software Only 4 Oracle Real App. Cluster database Install…5 6 7 8 Adicione o novo Oracle Home database path9 10 Vou ignorar porque não estou usando DNS11 12 13 Executando root.sh em ambos nodes. 14 15 16 17

========================================================================================================================

Instalação Software Database 12.1.0  

Produção Side

Repita o passo a passo feito no Dataguard pois não compensa “duplicar” essa informação em específico pois o post já esta gigantesco. A instalação e os cuidados são os mesmos  :)

Atualizando o cronograma.

Etapa Status Objetivo Ambiente Local/home Disponibilidade OBS
1 OK Rolling upgrade 12.1.0 Dataguard Grid Infrastructure Sem Downtime
2 OK Rolling upgrade 12.1.0. Produção Grid Infrastructure Sem Downtime
3 OK Instalar nova versão Soft. database out-of-place 12.1.0. Dataguard Database Sem Downtime
4 OK Instalar nova versão Soft. database out-of-place 12.1.0. Produção Database Sem Downtime
5 Pendente Upgrade de versão do database – Rolling Upgrades Made Easy Primeira-Fase. Dataguard Database Sem Downtime Switchover produção para dataguard que estará na nova versão 12.1.0.1
6 Pendente Upgrade de versão do database – Rolling Upgrades Made Easy Segunda-Fase. Produção/Dataguard Database Pequeno Downtime devido ao tempo do switchover
7 Pendente Upgrade de versão do database – Rolling Upgrades Made Easy Terceira-Fase. Produção/Dataguard Database Pequeno Downtime devido ao tempo do switchover Switchover para voltar o ambiente original

========================================================================================================================

Deinstall Old Grid Infrastrucure 11.2.0

Geralmente deixaríamos esse passo para o final, mas como no meu ambiente o espaço em disco esta bem escasso, terei que deletar a antiga instalação do $GRID_HOME para liberar mais espaço para conseguir continuar com os procedimentos. Para desinstalar o antigo Grid Infrastructure Home, conforme a documentação, faça os seguintes passos apontando para o home antigo.

$OLD_GRID_HOME = /u01/app/11.2.0/grid
export ORACLE_HOME=$OLD_GRID_HOME

chown -R oracle:oinstall $OLD_GRID_HOME
chmod -R 775 $OLD_GRID_HOME
chown -R oracle:oinstall /u01/app/11.2.0

 

Faça o download da ferramenta standalone deinstallation (geralmente é o arquivo 7) compatível com a versão do software que você esta desinstalando e siga para o próximo passo, executando o comando abaixo:

/Software_deinstall/deinstall -home /u01/app/11.2.0/grid

Colocarei o resultado dessa execução referente a um ambiente somente, mas você pode fazer em todos os ambientes (Dataguard e Produção.)

######################
Log Deinstall produção:

[oracle@oel1 deinstall]$ ./deinstall -home /u01/app/11.2.0/grid
Location of logs /u01/app/oraInventory/logs/

############ ORACLE DEINSTALL & DECONFIG TOOL START ############

######################### CHECK OPERATION START #########################
## [START] Install check configuration ##

Checking for existence of the Oracle home location /u01/app/11.2.0/grid
Oracle Home type selected for deinstall is: Oracle Grid Infrastructure for a Cluster
Oracle Base selected for deinstall is: /u01/app/oracle
Checking for existence of central inventory location /u01/app/oraInventory
Checking for existence of the Oracle Grid Infrastructure home /u01/app/12.1.0/grid
The following nodes are part of this cluster: oel1,oel2
Checking for sufficient temp space availability on node(s) : 'oel1,oel2'

## [END] Install check configuration ##

Traces log file: /u01/app/oraInventory/logs//crsdc.log

Network Configuration check config START

Network de-configuration trace file location: /u01/app/oraInventory/logs/netdc_check2014-12-21_03-42-21-PM.log

Network Configuration check config END

Asm Check Configuration START

ASM de-configuration trace file location: /u01/app/oraInventory/logs/asmcadc_check2014-12-21_03-42-23-PM.log

ASM was not detected in the Oracle Home

######################### CHECK OPERATION END #########################

####################### CHECK OPERATION SUMMARY #######################
Oracle Grid Infrastructure Home is: /u01/app/12.1.0/grid
The cluster node(s) on which the Oracle home deinstallation will be performed are:oel1,oel2
Oracle Home selected for deinstall is: /u01/app/11.2.0/grid
Inventory Location where the Oracle home registered is: /u01/app/oraInventory
The home being deconfigured is NOT a configured Grid Infrastructure home (/u01/app/12.1.0/grid)
ASM was not detected in the Oracle Home
Do you want to continue (y - yes, n - no)? [n]: y
A log of this session will be written to: '/u01/app/oraInventory/logs/deinstall_deconfig2014-12-21_03-41-53-PM.out'
Any error messages from this session will be written to: '/u01/app/oraInventory/logs/deinstall_deconfig2014-12-21_03-41-53-PM.err'

######################## CLEAN OPERATION START ########################
ASM de-configuration trace file location: /u01/app/oraInventory/logs/asmcadc_clean2014-12-21_03-42-40-PM.log
ASM Clean Configuration END

Network Configuration clean config START

Network de-configuration trace file location: /u01/app/oraInventory/logs/netdc_clean2014-12-21_03-42-40-PM.log

De-configuring Naming Methods configuration file on all nodes...
Naming Methods configuration file de-configured successfully.

De-configuring Local Net Service Names configuration file on all nodes...
Local Net Service Names configuration file de-configured successfully.

De-configuring Directory Usage configuration file on all nodes...
Directory Usage configuration file de-configured successfully.

De-configuring backup files on all nodes...
Backup files de-configured successfully.

The network configuration has been cleaned up successfully.

Network Configuration clean config END

Setting the force flag to false
Setting the force flag to cleanup the Oracle Base
Oracle Universal Installer clean START

Detach Oracle home '/u01/app/11.2.0/grid' from the central inventory on the local node : Done

Failed to delete the directory '/u01/app/11.2.0/grid'. The directory is in use.
Delete directory '/u01/app/11.2.0/grid' on the local node : Failed <<<<

The Oracle Base directory '/u01/app/oracle' will not be removed on local node. The directory is in use by Oracle Home '/u01/app/oracle/product/11.2.0/db_1'.

Detach Oracle home '/u01/app/11.2.0/grid' from the central inventory on the remote nodes 'oel2' : Done

Delete directory '/u01/app/11.2.0/grid' on the remote nodes 'oel2' : Failed <<<<

Could not remove listed directories based on '/tmp/OraInstall2014-12-21_03-42-48-PM/installRemoveDirFile.lst' from nodes 'oel2'. [PRKC-1083 : Failed to remove listed directory in "/tmp/OraInstall2014-12-21_03-42-48-PM/installRemoveDirFile.lst" to any of the given nodes "oel2 ".
Error on node oel2:/bin/rm: cannot remove `/u01/app/11.2.0/grid': Permission denied]
The Oracle Base directory '/u01/app/oracle' will not be removed on node 'oel2'. The directory is in use by Oracle Home '/u01/app/oracle/product/11.2.0/db_1'.

Oracle Universal Installer cleanup completed with errors.

Oracle Universal Installer clean END

## [START] Oracle install clean ##

Clean install operation removing temporary directory '/tmp/deinstall2014-12-21_03-41-52PM' on node 'oel1'
Clean install operation removing temporary directory '/tmp/deinstall2014-12-21_03-41-52PM' on node 'oel2'

## [END] Oracle install clean ##

######################### CLEAN OPERATION END #########################

####################### CLEAN OPERATION SUMMARY #######################
The home being deconfigured is NOT a configured Grid Infrastructure home (/u01/app/12.1.0/grid)
Successfully detached Oracle home '/u01/app/11.2.0/grid' from the central inventory on the local node.
Failed to delete directory '/u01/app/11.2.0/grid' on the local node.
Successfully detached Oracle home '/u01/app/11.2.0/grid' from the central inventory on the remote nodes 'oel2'.
Failed to delete directory '/u01/app/11.2.0/grid' on the remote nodes 'oel2'.
Oracle Universal Installer cleanup completed with errors.

Oracle deinstall tool successfully cleaned up temporary directories.
#######################################################################

############# ORACLE DEINSTALL & DECONFIG TOOL END #############

[oracle@oel1 deinstall]$

 

Ocorreu um erro informando que o diretório não pode ser deletado ( Failed to delete directory ‘/u01/app/11.2.0/grid’ ) por que eu não tinha executado o comando ( chown -R oracle:oinstall /u01/app/11.2.0 ), mas fique tranquilo, o procedimento já deletou todas as subpastas e você poderá deleta-la manualmente após a execução acima. Novamente, faça esse procedimento em ambos os ambientes PRODUÇÃO e DATAGUARD executando a partir do node1.

========================================================================================================================

Rolling Upgrade Made Easy – Database 12.1.0

Dataguard Side

Esse procedimento pode ser utilizado para executar upgrades contínuos de banco de dados com o tempo de indisponibilidade quase zero para a atualização de novos patches ou releases do banco de dados. Essa atualização é realizada utilizando o processo “transient logical rolling upgrade“, introduzida no Oracle Database 11g Release 1. Esse procedimento é interessante pelos seguintes motivos (Segundo documentação):

* Ele permite utilizar o ambiente de standby físico para utilizar o método database rolling upgrade. Não existe a necessidade de criar um ambiente standby lógico para realizar essa atividade.
* O processo require a execução de upgrade de catalog somente uma vez para migrar ambos Produção e Dataguard para a nova versão.
* Quando o procedimento é finalizado, a configuração retorna o ambiente para o estado original. Database primário com o Standby Físico.

 

Enquanto a atualização começa com um banco de dados standby físico, o processo de transição usará SQL Apply para suportar a aplicação de redo gerado por um banco de dados em uma versão inferior para um banco de dados standby em uma versão superior.

Para maiores informações sobre SQL Apply, veja aqui. Para maiores informações sobre MAA Best Practices for Database Rolling Upgrades using the Transient Logical Standby process, veja aqui.

Resumidamente, o script physru realizará a conversão do standby físico para lógico, executará o switchover depois do banco já na nova release para sincronização de versão entre os ambientes e retornará a arquitetura original. O procedimento de standby rolling upgrade geralmente envolve inúmeras operações SQL e validações. O script physru reduz grandemente o número de passos, deixando os seguintes restantes para o dba:

1. Iniciar o standby database no novo Oracle Home.
2. Iniciar o DBUA ou executar o catupgrd.sql para realizar o upgrade do standby database.
3. Iniciar o antigo primary database no novo Oracle home.
4. Iniciar e parar as instâncias do RAC.
5. Desabilitar e habilitar o "RAC".

Pré requisito para physru upgrade script:

1.Garantir que as tabelas possuam identificadores únicos (Veja mais em 'Prerequisite Conditions for Creating a Logical Standby Database’ in the Oracle Data Guard Concepts and Administration Guide)
2.Habilitar Flashback database sobre os bancos envolvidos no processo de rolling upgrade
3.Desabilitar o Dataguard Broker se o mesmo estiver sendo utilizado incluindo parar os processo de background do mesmo. (DG_BROKER_START=FALSE)
4.Garantir que o log transport (LOG_ARCHIVE_DEST_n) esteja corretamente configurado para executar o switchover sobre ambas direções.
5.Definir um listener estatico para que o script possa conectar diretamente na instância sendo executado o procedimento.
6.Se seu ambiente possui multiplos standby's, veja maiores informações aqui.
7.A nova versão ja deve estar instalada em ambos ambientes e nodes. Conforme ja fizemos nos passos anteriores.

 

* O script physru deve ser executado em um total de 3 vezes e em cada execução o script irá interagir com o DBA para que o mesmo possa realizar os procedimentos necessários em conjunto com o script. Se por algum motivo a execução desse processo falhar em algum passo, o script tem capacidade de retornar a partir desse mesmo passo após o DBA ter realizado o fix do problema.

Argumentos:

O script physru aceita os seguintes argumentos:

     <username> = sys deve ser usado
     <primary_tns> = tns service name para o primary
     <standby_tns> = tns service name para o standby físico
     <primary_name> = db_unique_name do primário
     <standby_name> = db_unique_name do standby
     <upgrade_version> = Nova versão do rdbms

 

O script solicitará a senha do SYSDBA em toda execução.

Observação: Em todo o ambiente aqui criado não houve a necessidade de aplicar qualquer patch antes de executar os processos informados, tanto na questão de upgrade do Grid Infrastructure quanto o upgrade do RDBMS por que o ambiente de origem esta na ultima versão 11.2.0.4. Caso você queira realizar o upgrade a partir de uma versão anterior a 11.2.0.4, é de extrema importância que você verifique se existe a necessidade de aplicar algum patch antes de realizar os procedimentos descritos. Ex:

The following patches should be applied before you embark on the Transient Logical Standby Rolling Upgrade procedure.          Prior to upgrading an 11.1.0.X database to 11.2.0.X using the Transient Logical Standby Rolling Upgrade procedure, it is necessary to patch the 11.2.0.X Oracle Homes that will be used for the upgraded databases with fix for unpublished BUG 12753750.  For any 11.1.0.X and any 11.2.0.X Oracle Homes involved in the Transient Logical Standby Rolling Upgrade procedure, apply fix for unpublished Bug 14174798. If the original database is running from an 11.1.0.X Oracle Home(s), apply fix for unpublished Bug 12694192. If for any reason you need to perform a flashback before the second execution of the physru script (Step 3 in the Database Rolling Upgrades Made Easy whitepaper), additional actions are required to convert the transient logical standby database back to a physical standby due to a known bug to be resolved in a future patch.

Continuando

Pre-Upgrade Tasks: Crie o listener estático para as instâncias que serão utilizadas para o rolling upgrade no produção e DataGuard (Somente em uma instância de cada).

Produção (Node1):

SID_LIST_LISTENER_UPG =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME =RACDB1)
        (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
    )
   )

LISTENER_UPG =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oel1)(PORT = 1525))
  )

Dataguard (Node1):

SID_LIST_LISTENER_UPG =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME =RACDB1)
        (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
    )
   )

LISTENER_UPG =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oel1dg )(PORT = 1527))
  )

 

Adicionando ambos os alias no tnsnames de ambos os nodes1

Primário:

PRIM1UPGR =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = oel1)(PORT = 1525))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = RACDB1)
    )
  )

Dataguard:

SBY1UPGR =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = oel1dg)(PORT = 1527))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = RACDB1)
    )
  )
Testando as conexões:

Produção

NODE1_PRI>conn wmon@PRIM1UPGR
Enter password:
Connected.
NODE1_PRI>select instance_name, host_name from v$instance;
INSTANCE_NAME    HOST_NAME
---------------- ---------------
RACDB1           oel1
 
NODE1_PRI>conn wmon@SBY1UPGR
Enter password:
Connected.
NODE1_PRI>select instance_name, host_name from v$instance;
INSTANCE_NAME    HOST_NAME
---------------- ---------------
RACDB1           oel1dg

Dataguard

NODE1_DG>conn wmon@PRIM1UPGR
Enter password:
Connected.
NODE1_DG>select instance_name, host_name from v$instance;

INSTANCE_NAME    HOST_NAME
---------------- ---------------
RACDB1           oel1

NODE1_DG>conn wmon@SBY1UPGR
Enter password:
Connected.
NODE1_DG>select instance_name, host_name from v$instance;

INSTANCE_NAME    HOST_NAME
---------------- ---------------
RACDB1           oel1dg

 

Detalhes do upgrade  utilizando script physru

Abaixo, um resumo sobre o script physru e sua principais características.

Os seguintes passos serão feitos ao executar a primeira fase do script physru :
a. Valida o ambiente antes de proceder com o procedimento em si.
b. Cria backup do controlfile em ambos produção/primary e standby/dataguard. 
c .Cria o Ponto de restauração guarantido (Guaranteed Restore Point) em ambos ambientes produção/primary e standby/dataguard. O propósito disso seria: 
   i.  Fornece uma opção de reverter todas as mudanças que ocorreram como parte da atualização. 
   ii. Fornece o script com o ponto de partida necessário para a conversão de o banco de dados primário original em um banco de dados físico standby. 
d. Converte standby fisico em logical standby. Para converter o standby físico para lógico, o database precisa ser single-instance. Se o standby físico for rac-database, você será direcionado para: 
   i.   Shutdown todas as instâncias exceto uma instância que será utilizada para a conversão. 
   ii.  Alterar o parâmetro de inicialização CLUSTER_DATABASE=FALSE no spfile do standby. 
   iii. Shutdown e mount a instância utilizada para o processo. Depois de convertido para standby lógico, você será direcionado para manualmente fazer: 
         i.   Alterar o parâmetro de inicialização CLUSTER_DATABASE=TRUE no spfile no standby lógico. 
         ii.  Shutdown e startup nesta instância. 
         iii. Startup todas as outras instâncias do ambiente standby. O script será finalizado e o prompt será devolvido ao DBA.

 

Upgrade de versão no logical standby database:

Após a primeira fase de execução do script physru, é necessário a intervenção manual para atualizar a versão do database. Você poderá executar o upgrade manual ( executando o catupgr.sql ou o novo script catctl.pl Parallel Upgrade Utility, leia mais aqui) ou via DBUA sobre o logical database,  utilizando o novo home. (Não altere o parâmetro COMPATIBLE até tudo ser finalizado com sucesso.)

Nota: While the transient logical standby is running in OPEN MIGRATE mode, it rejects all redo logs the primary is attempting to transmit. These rejected logs will be resolved on the next start of SQL Apply.

Ao finalizar o upgrade, deve-se iniciar o SQL APPLY novamente para sincronizar o ambiente com o produção, ex: Conectar no sqlplus do logical standby ja “atualizado” e executar:

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

Alterar o listener do novo logical standby database para apontar para o novo ORACLE_HOME, ex:

SID_LIST_LISTENER_UPG =
  (SID_LIST =
   (SID_DESC =
    (SID_NAME = racdb1)
    (ORACLE_HOME = /u01/app/oracle/product/12.1/db_1)
   )
 )

 

Reiniciar o listener estático lsnrctl reload LISTENER_UPG

 

Os seguintes passos serão feitos ao executar a segunda fase do script physru :
a. Verificará se o banco de dados standby lógico foi atualizado para a versão de destino e não esta iniciado no modo OPEN MIGRATE.
Nota: Uma vez que o banco de dados standby lógico já não está no modo OPEN MIGRATE, o Data Guard inicia automaticamente
o "redo gap fetching". Dependendo da quantidade de redo gerado, este processo pode levar muito tempo. Monitore a view DBA_LOGSTBY_LOG para determinar o andamento do SQL Apply e redo gap fetching.

b. Verificará se o banco de dados standby lógico esta sincronizado com o primário. Isto inclui a aplicação de todas as mudanças que ocorreram ao banco de dados principal, enquanto o standby lógico estava sendo atualizado.

c. Executará o switchover para o standby lógico (que já esta na nova versão 12.1.0.1).
d. Flashback do banco de dados antigo-principal (original) para Guaranteed Restore Point que foi criado na Etapa 1.
Nota: Se o banco de dados antigo-principal (original) é um banco de dados Oracle RAC, todas as intâncias exceto uma (inst1) devem ser desligadas, antes de realizar a operação de flashback. A execução do script physru fará uma pausa e direcioná-lo para executar o shutdown no momento apropriado.

e. Converterá o banco de dados antigo-principal (original) em um banco de dados físico standby.
f. Shutdown o banco de dados novo standby físico (antigo produção/primário).

 

Após a execução, o script finaliza e devolve o prompt para o DBA.

Será necessário iniciar o antigo banco de produção em modo standby utilizando o novo database HOME ja instalado previamente.
Deve-se também modificar o LISTENER.ORA estatico criado, apontando para o novo home, ex:

SID_LIST_LISTENER_UPG =
   (SID_LIST =
     (SID_DESC =
       (SID_NAME =RACDB1)
         (ORACLE_HOME = /u01/app/oracle/product/12.1.0/db_1)
     )
    )

 

Reload o listener

lsnrctl reload LISTENER_UPG

g. Copie o password file, init.ora, listener.ora, tnsnames.ora para o novo home. Não esqueça de atualizar o /etc/oratab
h. Deve-se atualizar as informações do novo database home no Grid Infrastructure, removendo e re-add as informações,ex:

srvctl remove database -d RACDB 
srvctl add database -d RACDB -o /u01/app/oracle/product/12.1.0/db_1 -o open
srvctl add inst -d RACDB -i RACDB1 -n node1
srvctl add inst –- RACDB -i RACDB2 -n node2

 

Nota: Removendo o banco de dados do OCR, outros itens dependentes são deletados como os services definidos para o banco de dados e etc. É necessário recriar esses itens após o banco de dados ser redefinido no OCR.

i. Habilitar no atual primary o parametro LOG_ARCHIVE_DEST_STATE_n para garantia a transmissão de redo. Ex:

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_n=ENABLE;
O seguintes passos serão feitos na terceira e ultima fase de execução do script physru :
a. Verificará se o banco de dados físico standby atual foi montado com a versão de software correto. (Nova versão) 
b. Iniciará o Redo Apply para sincronizar o atual banco de dados standby físico com o banco de dados principal atual. Nota: Esta sessão de recuperação re-aplica toda a atividade da aplicação que ocorreu no banco de dados primário original enquanto o banco de dados lógico(original) estava sendo atualizado e todas as transações que ocorreram depois do primeiro switchover. 
c. Executar o switchover de volta. Você pode opcionalmente executar o switchover depois que o standby estiver sincronizado com o atual primário ou aguardar ate um momento ou janela apropriada. Se você optar por realizar o switchover e o banco de dados principal atual é um banco de dados Oracle RAC, você deve desligar manualmente todas, exceto uma instância do atual primário. O script Physru fará uma pausa e irá direcioná-lo para executar o shutdown no momento apropriado. Após o switchover ser concluído, os bancos de dados foram devolvidos às suas roles originais. 
d. Limpeza da execução do script. Isto implica a remoção dos vários GRP criados e produzindo estatísticas

 

Fim dos detalhes….

 

 

 

Pronto…. Após o resumo de alguns pontos importantes sobre o método rolling upgrade made easy, vamos a execução propriamente dita.

Importante: Analisei rapidamente o script physru.sh só para comprovar que, os procedimentos que devemos executar antes de qualquer tipo de upgrade, sendo ele manual ou via o “made easy” devem ser ainda seguidos, procedimentos do tipo:

Execução do  “Pre-Upgrade Information Tool” que nada mais é que a execução daqueles scripts de pré upgrade que fazem a checagem do ambiente atual e informa se existe algum ajuste a ser feito como resize de tablespace, memória, parâmetros obsoletos e etc. No caso do upgrade para o 12.1.0.1 o script será o preupgrd.sql. Vejam aqui maiores informações.

Ex: Copie o script preupgrd.sql e o utluppkg.sql localizado no novo 12.1.0.1 $ORACLE_HOME/rdbms/admin para alguma pasta stage e execute-o.

Produção (node1):

[oracle@oel1 admin]$ pwd
/u01/app/oracle/product/12.1.0/db_1/rdbms/admin
[oracle@oel1 admin]$ cp utluppkg.sql preupgrd.sql /tmp/stage/
[oracle@oel1 admin]$ cd /tmp/stage/
[oracle@oel1 stage]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Tue Dec 23 12:06:07 2014

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

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

SQL> @preupgrd.sql
Loading Pre-Upgrade Package...
Executing Pre-Upgrade Checks...
Pre-Upgrade Checks Complete.
      ************************************************************

Results of the checks are located at:
 /u01/app/oracle/cfgtoollogs/RACDBSP/preupgrade/preupgrade.log

Pre-Upgrade Fixup Script (run in source database environment):
 /u01/app/oracle/cfgtoollogs/RACDBSP/preupgrade/preupgrade_fixups.sql

Post-Upgrade Fixup Script (run shortly after upgrade):
 /u01/app/oracle/cfgtoollogs/RACDBSP/preupgrade/postupgrade_fixups.sql

      ************************************************************

         Fixup scripts must be reviewed prior to being executed.

      ************************************************************

      ************************************************************
                   ====>> USER ACTION REQUIRED  <<====
      ************************************************************

 The following are *** ERROR LEVEL CONDITIONS *** that must be addressed
                    prior to attempting your upgrade.
            Failure to do so will result in a failed upgrade.

 1) Check Tag:    PURGE_RECYCLEBIN
    Check Summary: Check that recycle bin is empty prior to upgrade
    Fixup Summary:
     "The recycle bin will be purged."

            You MUST resolve the above error prior to upgrade

      ************************************************************

 

Execute o script de fixup que foi gerado conforme informado acima e ajuste o que for necessário. Re-inicie a instância se for necessário atualizar algum parâmetro. No Dataguard, será necessário somente ajustar parâmetros de inicialização pois o restante foi sincronizado automaticamente com o banco de produção. No meu ambiente foi necessário executar as seguintes atividades:

################################################################

ALTER SYSTEM SET PROCESSES=300 SCOPE=SPFILE SID='BOTH';
SET ECHO ON;
SET SERVEROUTPUT ON;
-- emremove.sql scrip located in the 12c home.
@/u01/app/oracle/product/12.1.0/db_1/rdbms/admin/emremove.sql
EXECUTE dbms_stats.gather_dictionary_stats;
################################################################

 

Após os ajustes em todos os ambientes, vamos para a próxima fase, executar o script physru.sh. Lembram dos pré-requisitos informados antes da execução ? Desculpe a redundância, mas acho melhor colocar aqui o que foi feito para o conteúdo ficar melhor e se algum dia eu precisar, também poderei consultar aqui.

Enable Flashback database

Produção:

(RAC = shutdown immediate em todas as instances e inicie somente uma de cada ambiente.)
shutdown immediate; 
startup mount;  
select flashback_on from v$database; 
alter database flashback ON; 
select flashback_on from v$database; 
alter database open;
(RAC = Inicie as outras instances.)

aDataguard:

(RAC = shutdown immediate em todas as instances e inicie somente uma.) 
shutdown immediate;
startup mount; 
select flashback_on from v$database;
select PROCESS,CLIENT_PROCESS,THREAD#,SEQUENCE#,BLOCK# from v$managed_standby where process = 'MRP0' or client_process='LGWR';
alter database recover managed standby database cancel;
select PROCESS,CLIENT_PROCESS,THREAD#,SEQUENCE#,BLOCK# from v$managed_standby where process = 'MRP0' or client_process='LGWR';
alter database flashback ON;
select flashback_on from v$database;
alter database open;
select open_mode from v$database;
select PROCESS,CLIENT_PROCESS,THREAD#,SEQUENCE#,BLOCK# from v$managed_standby where process = 'MRP0' or client_process='LGWR';
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
select open_mode from v$database;
select PROCESS,CLIENT_PROCESS,THREAD#,SEQUENCE#,BLOCK# from v$managed_standby where process = 'MRP0' or client_process='LGWR';
(RAC = Inicie as outras instances.)

Screen Shot 2014-12-23 at 14.55.16Screen Shot 2014-12-23 at 14.55.52Screen Shot 2014-12-23 at 14.56.05Screen Shot 2014-12-23 at 14.56.15
Desabilitar Data Guard Broker

Produção:

dgmgrl:
SHOW CONFIGURATION; 
DISABLE CONFIGURATION;
sqlplus: (Somente esse passo é necessário, mas eu prefiro executar o acima também...)
ALTER SYSTEM SET DG_BROKER_START=FALSE SCOPE=BOTH SID='*';

b d Dataguard:

sqlplus:
 ALTER SYSTEM SET DG_BROKER_START=FALSE SCOPE=BOTH SID='*';
Screen Shot 2014-12-23 at 15.05.16

Ao final, você verá as seguintes mensagens (Completed: Data Guard Broker shutdown) no alertlog de cada instância do ambiente produção/dataguard:

Screen Shot 2014-12-23 at 15.12.36Screen Shot 2014-12-23 at 15.13.01Screen Shot 2014-12-23 at 15.13.08Screen Shot 2014-12-23 at 15.13.25
LOG_ARCHIVE_DEST_N

Já esta configurado desde quando o ambiente foi criado.

Produção:eDataguard: fOs listerner’s estáticos ja foram criados nos passos anteriores bem como a criação do alias que utilizaremos agora. Um ultimo teste, criei o alias abaixo sobre um client qualquer para testar a indisponibilidade do ambiente no momento certo.

RACDB =   
  (description =
   (address = (protocol=tcp)(host=oel-scan)(port=1521))
   (address = (protocol=tcp)(host=oeldg-scan)(port=1521))
   (FAILOVER = ON)
   (connect_data=
    (SERVER = DEDICATED)
    (service_name=racprod)
       (FAILOVER_MODE = (TYPE = select)(METHOD = basic)(DELAY = 10)(RETRIES = 3))
   ) 
  )

 

Criei 2 sessões uma em cada instância do ambiente de PRODUÇÃO:

Screen Shot 2014-12-24 at 11.21.58Screen Shot 2014-12-24 at 11.22.16

 

Execução physru Step 1

(Conectado no node1, ambiente de produção:)

./physru.sh SYS PRIM1UPGR SBY1UPGR RACDBSP RACDBGO 12.1.0.1.0

[oracle@oel1 stage]$ ./physru.sh SYS PRIM1UPGR SBY1UPGR RACDBSP RACDBGO 12.1.0.1.0
Please enter the sysdba password:

### Initialize script to either start over or resume execution
Dec 23 15:28:26 2014 [0-1] Identifying rdbms software version
Dec 23 15:28:26 2014 [0-1] database RACDBSP is at version 11.2.0.4.0
Dec 23 15:28:27 2014 [0-1] database RACDBGO is at version 11.2.0.4.0
Dec 23 15:28:27 2014 [0-1] verifying flashback database is enabled at RACDBSP and RACDBGO
Dec 23 15:28:27 2014 [0-1] verifying available flashback restore points
Dec 23 15:28:27 2014 [0-1] verifying DG Broker is disabled
Dec 23 15:28:27 2014 [0-1] looking up prior execution history
Dec 23 15:28:28 2014 [0-1] purging script execution state from database RACDBSP
Dec 23 15:28:28 2014 [0-1] purging script execution state from database RACDBGO
Dec 23 15:28:28 2014 [0-1] starting new execution of script

### Stage 1: Backup user environment in case rolling upgrade is aborted
Dec 23 15:28:29 2014 [1-1] stopping media recovery on RACDBGO
Dec 23 15:28:31 2014 [1-1] creating restore point PRU_0000_0001 on database RACDBGO
Dec 23 15:28:32 2014 [1-1] backing up current control file on RACDBGO
Dec 23 15:28:32 2014 [1-1] created backup control file /u01/app/oracle/product/11.2.0/db_1/dbs/PRU_0001_RACDBGO_f.f
Dec 23 15:28:32 2014 [1-1] creating restore point PRU_0000_0001 on database RACDBSP
Dec 23 15:28:34 2014 [1-1] backing up current control file on RACDBSP
Dec 23 15:28:34 2014 [1-1] created backup control file /u01/app/oracle/product/11.2.0/db_1/dbs/PRU_0001_RACDBSP_f.f

NOTE: Restore point PRU_0000_0001 and backup control file PRU_0001_RACDBGO_f.f
      can be used to restore RACDBGO back to its original state as a
      physical standby, in case the rolling upgrade operation needs to be aborted
      prior to the first switchover done in Stage 4.

### Stage 2: Create transient logical standby from existing physical standby
Dec 23 15:28:34 2014 [2-1] verifying RAC is disabled at RACDBGO

WARN: RACDBGO is a RAC database.  Before this script can continue, you
      must manually reduce the RAC to a single instance, disable the RAC, and
      restart instance RACDB1 in mounted mode.  This can be accomplished
      with the following steps:

        1) Shutdown all instances other than instance RACDB1.
           eg: srvctl stop instance -d RACDBGO -i RACDB2 -o abort

        2) On instance RACDB1, set the cluster_database parameter to FALSE.
           eg: SQL> alter system set cluster_database=false scope=spfile;

        3) Shutdown instance RACDB1.
           eg: SQL> shutdown abort;

        4) Startup instance RACDB1 in mounted mode.
           eg: SQL> startup mount;

      Once these steps have been performed, enter 'y' to continue the script.
      If desired, you may enter 'n' to exit the script to perform the required
      steps, and recall the script to resume from this point.

Are you ready to continue? (y/n):

 

Acima é o momento em que o script solicita que o RAC seja desabilitado e iniciado em modo single-instance. Após executar o procedimento acima, digite Y para continuar. Vamos executar o procedimento solicitado.

INSTÂNCIA2 – DATAGUARD

[oracle@oel2dg ~]$ sqlplus / as sysdba
SQL> shutdown abort;
ORACLE instance shut down.

 

INSTÂNCIA1 – DATAGUARD

[oracle@oel1dg ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Tue Dec 23 15:30:54 2014

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

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

SQL> alter system set cluster_database=false scope=spfile;

System altered.

SQL> shutdown abort;
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area  734892032 bytes
Fixed Size                  2256872 bytes
Variable Size             583008280 bytes
Database Buffers          146800640 bytes
Redo Buffers                2826240 bytes
Database mounted.

 

Volte a sessão do script physru, digite Y e continue…

Dec 23 15:32:57 2014 [2-1] continuing
Dec 23 15:32:57 2014 [2-1] verifying RAC is disabled at RACDBGO
Dec 23 15:32:57 2014 [2-1] verifying database roles
Dec 23 15:32:57 2014 [2-1] verifying physical standby is mounted
Dec 23 15:32:57 2014 [2-1] verifying database protection mode
Dec 23 15:32:57 2014 [2-1] verifying transient logical standby datatype support

WARN: Objects have been identified on the primary database which will not be
      replicated on the transient logical standby.  The complete list of
      objects and their associated unsupported datatypes can be found in the
      dba_logstdby_unsupported view.  For convenience, this script has written
      the contents of this view to a file - physru_unsupported.log.

      Various options exist to deal with these objects such as:
        - disabling applications that modify these objects
        - manually resolving these objects after the upgrade
        - extending support to these objects (see metalink note: 559353.1)

      If you need time to review these options, you should enter 'n' to exit
      the script.  Otherwise, you should enter 'y' to continue with the
      rolling upgrade.

Are you ready to proceed with the rolling upgrade? (y/n):

 

Acima, o script interrompeu sua execução e me informou que existem alguns objetos que não são suportados para o modo lógico do standby. Como esse é um ambiente teste eu vou continuar já que esses objetos não estão sendo utilizados e não corro o risco deles sofrerem modicações durante o processo, mas para garantir eu “travei” a conta deles, só por garantia, ex:

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

alter user IX account lock;
alter user SH account lock;
alter user OE account lock;
alter user PM account lock;

User altered.

SQL>
User altered.

SQL>
User altered.

SQL>
User altered.

 

Feito isso, volte a sessão do script e digite Y para continuar…

Dec 23 15:37:12 2014 [2-1] continuing
Dec 23 15:37:12 2014 [2-2] starting media recovery on RACDBGO
Dec 23 15:37:19 2014 [2-2] confirming media recovery is running
Dec 23 15:37:20 2014 [2-2] waiting for apply lag to fall under 30 seconds
Dec 23 15:37:27 2014 [2-2] apply lag measured at 7 seconds
Dec 23 15:37:27 2014 [2-2] stopping media recovery on RACDBGO
Dec 23 15:37:28 2014 [2-2] executing dbms_logstdby.build on database RACDBSP
Dec 23 15:38:03 2014 [2-2] converting physical standby into transient logical standby
Dec 23 15:38:08 2014 [2-3] opening database RACDBGO
./physru.sh: line 3339: warning: here-document at line 3334 delimited by end-of-file (wanted `EOF')
Dec 23 15:38:14 2014 [2-4] configuring transient logical standby parameters for rolling upgrade
Dec 23 15:38:14 2014 [2-4] starting logical standby on database RACDBGO
Dec 23 15:38:20 2014 [2-4] waiting until logminer dictionary has fully loaded
Dec 23 15:40:05 2014 [2-4] dictionary load 03% complete
Dec 23 15:40:27 2014 [2-4] dictionary load 36% complete
Dec 23 15:40:38 2014 [2-4] dictionary load 62% complete
Dec 23 15:40:48 2014 [2-4] dictionary load 66% complete
Dec 23 15:40:59 2014 [2-4] dictionary load 69% complete
Dec 23 15:41:09 2014 [2-4] dictionary load 71% complete
Dec 23 15:41:19 2014 [2-4] dictionary load 73% complete
Dec 23 15:41:30 2014 [2-4] dictionary load 74% complete
Dec 23 15:41:40 2014 [2-4] dictionary load 75% complete
Dec 23 15:42:22 2014 [2-4] dictionary load is complete
Dec 23 15:42:23 2014 [2-4] waiting for apply lag to fall under 30 seconds
Dec 23 15:43:03 2014 [2-4] apply lag measured at 38 seconds
Dec 23 15:43:07 2014 [2-4] apply lag measured at 4 seconds

NOTE: Database RACDBGO is now ready to be upgraded.  This script has left the
      database open in case you want to perform any further tasks before
      upgrading the database.  Once the upgrade is complete, the database must
      opened in READ WRITE mode before this script can be called to resume the
      rolling upgrade.

NOTE: Database RACDBGO may be reverted back to a RAC database upon completion
      of the rdbms upgrade.  This can be accomplished by performing the
      following steps:

          1) On instance RACDB1, set the cluster_database parameter to TRUE.
          eg: SQL> alter system set cluster_database=true scope=spfile;

          2) Shutdown instance RACDB1.
          eg: SQL> shutdown abort;

          3) Startup and open all instances for database RACDBGO.
          eg: srvctl start database -d RACDBGO

 

Esse é um dos momentos que é necessário intervenção do DBA. Agora vamos realizar o UPGRADE de versão do ambiente Dataguard de 11.2.0.4 para 12.1.0.1.0. Note que até esse momento não houve indisponibilidade no ambiente de produção.

Copie o arquivos init*.ora, orapw*,  ou todos os arquivos da pasta $OLD_ORACLE_HOME/dbs e listener/tnsnames para a nova instalação. Faça isso em ambos os nodes do Dataguard.

[oracle@oel1dg dbs]$ pwd
/u01/app/oracle/product/11.2.0/db_1/dbs
[oracle@oel1dg dbs]$ ls -ltrh
total 19M
-rw-r--r--. 1 oracle oinstall 2.8K May 15  2009 init.ora
-rw-r--r--. 1 oracle oinstall   39 Nov  4  2013 initRACDB2.ora
-rw-r-----. 1 oracle oinstall 1.5K Nov 14  2013 orapwRACDB1_bkp
-rw-r-----. 1 oracle oinstall 1.5K Nov 14  2013 orapwRACDB1
-rw-r--r--. 1 oracle oinstall   62 Dec 22 22:38 initRACDB1.ora.bak.oel1dg
-rw-r--r--. 1 oracle oinstall   62 Dec 23 09:21 initRACDB1.ora
-rw-r-----. 1 oracle dba       20K Dec 23 14:39 dr2RACDBGO.dat
-rw-r-----. 1 oracle dba       19M Dec 23 15:28 PRU_0001_RACDBGO_f.f
-rw-rw----. 1 oracle oinstall 1.6K Dec 23 15:53 hc_RACDB1.dat
[oracle@oel1dg dbs]$ cp * /u01/app/oracle/product/12.1/db_1/dbs/
[oracle@oel1dg db_1]$ cd network/admin/
[oracle@oel1dg admin]$ ls
endpoints_listener.ora  endpoints_listener.ora.bak.oel1dg  listener.ora  listener.ora.bak.oel1dg  samples  shrept.lst  tnsnames.ora
[oracle@oel1dg admin]$ cp tnsnames.ora listener.ora endpoints_listener.ora /u01/app/oracle/product/12.1/db_1/network/admin/

 

Desligue e edite o Listener e outros processos que estejam executando no antigo HOME de ambos nodes do Dataguard, ex:

[oracle@oel1dg ~]$ lsnrctl stop LISTENER_UPG

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 23-DEC-2014 15:45:50

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oel1dg)(PORT=1527)))
The command completed successfully

 

Edite o listener e mude o path do home de todos eles.

Analisando outros possíveis processos executando no antigo home em ambos nodes do Dataguard:

[oracle@oel1dg ~]$ lsof |grep -i 11.2.0
[oracle@oel2dg ~]$ lsof |grep -i 11.2.0
Executando o UPGRADE  (Dataguard Side)
[oracle@oel1dg ~]$ echo $ORACLE_HOME  --Ja direcionado para o novo home.
/u01/app/oracle/product/12.1/db_1
[oracle@oel1dg ~]$
[oracle@oel1dg ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on Tue Dec 23 16:12:49 2014

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

Connected to an idle instance.

SQL> STARTUP UPGRADE;
ORACLE instance started.

Total System Global Area  734892032 bytes
Fixed Size                  2292720 bytes
Variable Size             650118160 bytes
Database Buffers           79691776 bytes
Redo Buffers                2789376 bytes
Database mounted.
Database opened.
SQL>

 

Executando o novo Parallel Upgrade Utility –  Ja comentei sobre ele em alguma parte do post. Clique no nome para maiores informações.

[oracle@oel1dg admin]$ cd $ORACLE_HOME/rdbms/admin
[oracle@oel1dg admin]$ $ORACLE_HOME/perl/bin/perl catctl.pl catupgrd.sql
Analyzing file catupgrd.sql
14 scripts found in file catupgrd.sql
Next path: catalog.sql
32 scripts found in file catalog.sql
Next path: catproc.sql
37 scripts found in file catproc.sql
Next path: catptabs.sql
61 scripts found in file catptabs.sql
Next path: catpdbms.sql
205 scripts found in file catpdbms.sql
Next path: catpdeps.sql
77 scripts found in file catpdeps.sql
Next path: catpprvt.sql
260 scripts found in file catpprvt.sql
Next path: catpexec.sql
26 scripts found in file catpexec.sql
Next path: cmpupgrd.sql
16 scripts found in file cmpupgrd.sql

[Phase 0] type is 1 with 1 Files
catupstr.sql

[Phase 1] type is 1 with 3 Files
cdstrt.sql       cdfixed.sql      cdcore.sql

[Phase 2] type is 1 with 1 Files
ora_restart.sql

[Phase 3] type is 2 with 18 Files
cdplsql.sql      cdsqlddl.sql     cdmanage.sql     cdtxnspc.sql
cdenv.sql        cdrac.sql        cdsec.sql        cdobj.sql
cdjava.sql       cdpart.sql       cdrep.sql        cdaw.sql
cdsummgt.sql     cdtools.sql      cdexttab.sql     cddm.sql
catldr.sql       cdclst.sql

[Phase 4] type is 1 with 1 Files
ora_restart.sql

[Phase 5] type is 1 with 5 Files
cdoptim.sql      catsum.sql       catexp.sql       cddst.sql
cdend.sql

[Phase 6] type is 1 with 1 Files
catpstrt.sql

[Phase 7] type is 1 with 3 Files
catptyps.sql     catpgrants.sql   catgwm.sql

[Phase 8] type is 1 with 1 Files
ora_restart.sql

[Phase 9] type is 2 with 60 Files
catnodpt.sql     catbac.sql       prvtrctv.plb     catactx.sql
prvtuttv.plb     catsvrmg.sql     prvtlsis.plb     prvtlsss.plb
cattrans.sql     catrule.sql      catsnap.sql      catpitr.sql
catdip.sql       catrls.sql       catar.sql        catfga.sql
catamgt.sql      catidxu.sql      cattsm.sql       catchnf.sql
catodm.sql       catkppls.sql     catsscr.sql      catqueue.sql
cathae.sql       catadvtb.sql     catrm.sql        catsch.sql
catol.sql        catdpb.sql       catcrc.sql       dbmscr.sql
dbmsutil.sql     catdbfus.sql     catalrt.sql      catatsk.sql
catmntr.sql      catsqlt.sql      catawrtv.sql     catsmbvw.sql
catwrrtb.sql     catsumat.sql     catrep.sql       catlmnr.sql
catdef.sql       catadrvw.sql     catrepv.sql      catpexe.sql
cattlog.sql      catcapi.sql      catpspi.sql      catts.sql
catnacl.sql      catredact.sql    catproftab.sql   catpstdy.sql
catrupg.sql      catratmask.sql   catqitab.sql     catappcont.sql

[Phase 10] type is 1 with 1 Files
ora_restart.sql

[Phase 11] type is 1 with 1 Files
catpspec.sql

[Phase 12] type is 1 with 1 Files
ora_restart.sql

[Phase 13] type is 2 with 199 Files
utlinad.sql      utlsmtp.sql      utlurl.sql       utlenc.sql
utlgdk.sql       utlcstk.sql      utlcomp.sql      utli18n.sql
utllms.sql       dbmsplsw.sql     utlnla.sql       dbmspdb.sql
dbmstrns.sql     dbmsrwid.sql     dbmspclx.sql     dbmserlg.sql
dbmsspu.sql      dbmsapin.sql     dbmssyer.sql     dbmspipe.sql
dbmsalrt.sql     dbmsdesc.sql     dbmspexp.sql     dbmsjob.sql
dbmsstat.sql     dbmsstts.sql     dbmsddl.sql      dbmsedu.sql
dbmspp.sql       prvthddl.plb     prvthjob.plb     prvthsye.plb
prvtzhlp.plb     dbmsidxu.sql     prvthidx.plb     dbmspsp.sql
dbmstran.sql     dbmsxa.sql       dbmstxfm.sql     dbmsread.sql
prvtreut.plb     dbmspb.sql       dbmspbt.sql      dbmsplts.sql
dbmspitr.sql     utlrefld.sql     utlcoll.plb      dbmstrst.sql
dbmsrlsa.sql     dbmsrpr.sql      dbmsobtk.sql     dbmshtdb.sql
dbmslm.sql       dbmslmd.sql      prvtlmes.plb     utlcxml.sql
dbmsfga.sql      dbmsamgt.sql     dbmstypu.sql     dbmsres.sql
dbmstxin.sql     dbmsdrs.sql      dbmsdg.sql       dbmssum.sql
dbmshord.sql     dbmsxfr.sql      dbmsmap.sql      dbmsfi.sql
dbmsdbv.sql      dbmstcv.sql      dbmscoll.sql     dbmscdcu.sql
dbmscdcp.sql     dbmscdcs.sql     dbmspbp.sql      dbmshpro.sql
dbmssrv.sql      dbmschnf.sql     dbmsxpln.sql     utlmatch.sql
dbmsdbvn.sql     dbmspool.sql     dbmsrcad.sql     prvthcrc.plb
prvtkpps.plb     dbmsaq.plb       dbmsaqad.sql     dbmsaq8x.plb
dbmsaqem.plb     prvtaqxi.plb     dbmsslrt.sql     dbmsmntr.sql
dbmshm.sql       catsqltk.sql     dbmsir.sql       prvtsss.plb
dbmsocm.sql      dbmslobu.sql     dbmsmp.sql       dbmsaddm.sql
prvttxfs.plb     dbmsrmin.plb     dbmsrmad.sql     dbmsrmpr.sql
dbmsrmpe.plb     dbmsrmge.plb     dbmsrmpa.plb     prvtrmie.plb
prvthjob.plb     prvthesh.plb     dbmsol.sql       prvtdputh.plb
dbmsmeta.sql     dbmsmetb.sql     dbmsmetd.sql     dbmsmet2.sql
dbmsdp.sql       prvthpp.plb      prvthpd.plb      prvthpdi.plb
prvthpvi.plb     prvtdtde.plb     prvtsum.plb      prvtjdbs.plb
dbmsslxp.sql     prvssmgu.plb     dbmsawr.sql      prvsemxi.plb
prvsemx_admin.plb prvsemx_dbhome.plb prvsemx_memory.plb prvsemx_perf.plb
dbmsperf.sql     prvsrept.plb     prvsrepr.plb     prvshdm.plb
prvsrtaddm.plb   prvs_awr_data_cp.plb prvscpaddm.plb   prvsadv.plb
prvsawr.plb      prvsawri.plb     prvsawrs.plb     prvsash.plb
prvsawrv.plb     dbmssqlu.sql     prvssqlf.plb     dbmswrr.sql
dbmsfus.sql      prvsfus.plb      dbmsuadv.sql     dbmsrepl.sql
dbmsspm.sql      prvsspmi.plb     prvssmb.plb      prvssmbi.plb
dbmsstr.sql      dbmssqlt.sql     dbmsspa.sql      prvsautorepi.plb
dbmsautorep.sql  dbmsratmask.sql  dbmsdiag.sql     dbmsobj.sql
dbmskzxp.sql     dbmscu.sql       dbmsdst.sql      dbmscomp.sql
dbmsilm.sql      dbmspexe.sql     prvthpexei.plb   dbmscapi.sql
dbmsfuse.sql     dbmsfspi.sql     dbmspspi.sql     dbmsdnfs.sql
dbmsadr.sql      dbmsadra.sql     prvsadri.plb     xsrs.sql
xssc.sql         xsacl.sql        xsds.sql         xsns.sql
xsdiag.sql       xssess.sql       dbmsredacta.sql  dbmssqll.sql
dbmsgwm.sql      dbmsappcont.sql  dbmsspd.sql      prvsspdi.plb
dbmsfs.sql       dbmssqlm.sql     catprofp.sql     prvtsys.plb
dbmspart.sql     dbmsrupg.sql     dbmstsdp.sql

[Phase 14] type is 1 with 1 Files
ora_restart.sql

[Phase 15] type is 1 with 3 Files
dbmsmeti.sql     dbmsmetu.sql     dbmsqopi.sql

[Phase 16] type is 1 with 1 Files
ora_restart.sql

[Phase 17] type is 2 with 33 Files
catmettypes.sql  prvthdbu.plb     catost.sql       dbmshae.sql
catxpend.sql     prvtotpt.plb     prvthlut.plb     prvthlin.plb
prvthsdp.plb     dbmsrman.sql     dbmsbkrs.sql     dbmstrig.sql
dbmsrand.sql     dbmsjdwp.sql     catxs.sql        dbmssnap.sql
prvtxrmv.plb     depsaq.sql       prvthlrt.plb     catadv.sql
dbmscred.sql     catcredv.sql     cataqsch.sql     catrssch.sql
catplug.sql      prvtsql.plb      prvtssql.plb     prvtlmd.plb
prvtlmcs.plb     prvtlmrs.plb     dbmslms.sql      prvthpu.plb
prvthpv.plb

[Phase 18] type is 1 with 1 Files
ora_restart.sql

[Phase 19] type is 1 with 3 Files
prvtkupc.plb     prvtaqiu.plb     catlsby.sql

[Phase 20] type is 1 with 1 Files
ora_restart.sql

[Phase 21] type is 2 with 23 Files
catmetviews.sql  prvthpw.plb      prvthpm.plb      prvthpfi.plb
prvthpf.plb      dbmsodm.sql      prvtitrg.plb     prvtsms.plb
depssvrm.sql     deptxn.sql       catstr.sql       prvthsts.plb
prvthfgr.plb     prvthfie.plb     prvthcmp.plb     catpexev.sql
depscapi.sql     depspspi.sql     catwrrvw.sql     dbmsjdcu.sql
dbmsjdmp.sql     prvthpc.plb      prvt_awr_data.plb

[Phase 22] type is 1 with 1 Files
ora_restart.sql

[Phase 23] type is 2 with 11 Files
catmetgrant1.sql catldap.sql      prvtocm.sql      prvtrepl.sql
catpstr.sql      prvthpci.plb     catilm.sql       catemxv.sql
catnaclv.sql     dbmsnacl.sql     dbmswlm.sql

[Phase 24] type is 1 with 1 Files
ora_restart.sql

[Phase 25] type is 1 with 1 Files
catcdbviews.sql

[Phase 26] type is 1 with 1 Files
ora_restart.sql

[Phase 27] type is 2 with 0 Files

[Phase 28] type is 1 with 1 Files
ora_load_without_comp.sql

[Phase 29] type is 2 with 130 Files
prvtfile.plb     prvtrawb.plb     prvttcp.plb      prvtinad.plb
prvtsmtp.plb     prvthttp.plb     prvturl.plb      prvtenc.plb
prvtgdk.plb      prvtlob.plb      prvtlobu.plb     prvtcstk.plb
prvtcomp.plb     prvti18n.plb     prvtlms2.plb     prvtnla.plb
prvttrns.plb     prvtsess.plb     prvtrwid.plb     prvtpclx.plb
prvterlg.plb     prvtapin.plb     prvtsyer.plb     prvtlock.plb
prvtpipe.plb     prvtalrt.plb     prvtdesc.plb     prvtpexp.plb
prvtzexp.plb     prvtstts.plb     prvtddl.plb      prvtpp.plb
prvtscrp.plb     prvtkppb.plb     prvtutil.plb     prvtpsp.plb
prvttran.plb     prvtxa.plb       prvtany.plb      prvtread.plb
prvtpb.plb       prvtpbt.plb      prvtxpsw.plb     prvtcoll.plb
prvttrst.plb     prvtrlsa.plb     prvtodci.plb     prvtrpr.plb
prvtobtk.plb     prvthtdb.plb     prvtxmlt.plb     prvturi.plb
prvtxml.plb      prvtcxml.plb     prvtemxi.plb     prvtemx_admin.plb
prvtemx_dbhome.plb prvtemx_memory.plb prvtemx_perf.plb prvtperf.plb
prvtrep.plb      prvtrept.plb     prvtrepr.plb     prvtfga.plb
prvtamgt.plb     prvttypu.plb     prvtjdwp.plb     prvtjdmp.plb
prvtres.plb      prvtcr.plb       prvttxin.plb     prvtdrs.plb
prvtdg.plb       prvtfi.plb       prvtmap.plb      prvthpui.plb
prvtdbv.plb      prvttcv.plb      prvtpbp.plb      prvthpro.plb
prvtbdbu.plb     prvtsrv.plb      prvtpool.plb     prvtkzxs.plb
prvtkzxp.plb     prvtcrc.plb      prvtrc.plb       prvtaq.plb
prvtaqdi.plb     prvtaqxe.plb     prvtaqis.plb     prvtaqim.plb
prvtaqad.plb     prvtaq8x.plb     prvtaqin.plb     prvtaqal.plb
prvtaqjm.plb     prvtaqmi.plb     prvtaqme.plb     prvtaqem.plb
prvtaqip.plb     prvtaqds.plb     prvtsqdi.plb     prvtsqds.plb
prvtsqis.plb     prvthm.plb       prvtwlm.plb      prvtsqtk.plb
prvtkjhn.plb     prvtir.plb       prvtssb.plb      prvttxfm.plb
prvtrmin.plb     prvtrmad.plb     prvtrmpr.plb     prvtrmpe.plb
prvtrmge.plb     prvtrmpa.plb     prvtjob.plb      prvtbsch.plb
prvtesch.plb     prvtcred.plb     prvtol.plb       prvtlm.plb
prvtlmcb.plb     prvtlmrb.plb     prvtlms.plb      prvtlmeb.plb
prvtbpu.plb      prvtwrr.plb

[Phase 30] type is 1 with 1 Files
ora_load_with_comp.sql

[Phase 31] type is 1 with 1 Files
ora_restart.sql

[Phase 32] type is 1 with 1 Files
ora_load_without_comp.sql

[Phase 33] type is 2 with 122 Files
prvtbpui.plb     prvtdput.plb     prvtmeta.plb     prvtmeti.plb
prvtmetu.plb     prvtmetb.plb     prvtmetd.plb     prvtmet2.plb
prvtdp.plb       prvtbpc.plb      prvtbpci.plb     prvtbpw.plb
prvtbpm.plb      prvtbpfi.plb     prvtbpf.plb      prvtbpp.plb
prvtbpd.plb      prvtbpdi.plb     prvtbpv.plb      prvtbpvi.plb
prvtdpcr.plb     prvtplts.plb     prvtpitr.plb     prvtreie.plb
prvtrwee.plb     prvtidxu.plb     prvtrcmp.plb     prvtchnf.plb
prvtedu.plb      prvtlsby.plb     prvtlsib.plb     prvtlssb.plb
prvtsmv.plb      prvtsma.plb      prvtbxfr.plb     prvtbord.plb
prvtjdbb.plb     prvtslrt.plb     prvtslxp.plb     prvtatsk.plb
prvtmntr.plb     prvtsmgu.plb     prvtdadv.plb     prvtadv.plb
prvtawr.plb      prvtawrs.plb     prvtawri.plb     prvtash.plb
prvtawrv.plb     prvtsqlf.plb     prvtsqli.plb     prvtsqlt.plb
prvtautorepi.plb prvtautorep.plb  prvtfus.plb      prvtmp.plb
prvthdm.plb      prvtaddm.plb     prvtrtaddm.plb   prvt_awr_data_cp.plb
prvtcpaddm.plb   prvtuadv.plb     prvtsqlu.plb     prvtspai.plb
prvtspa.plb      prvtratmask.plb  prvtspmi.plb     prvtspm.plb
prvtsmbi.plb     prvtsmb.plb      prvtfus.plb      catfusrg.sql
prvtwrk.plb      prvtsmaa.plb     prvtxpln.plb     prvtstat.plb
prvtstai.plb     prvtsqld.plb     prvtspcu.plb     prvtodm.plb
prvtkcl.plb      prvtdst.plb      prvtcmpr.plb     prvtilm.plb
prvtpexei.plb    prvtpexe.plb     prvtcapi.plb     prvtfuse.plb
prvtfspi.plb     prvtpspi.plb     prvtdnfs.plb     prvtfs.plb
prvtadri.plb     prvtadr.plb      prvtadra.plb     prvtadmi.plb
prvtutils.plb    prvtxsrs.plb     prvtsc.plb       prvtacl.plb
prvtds.plb       prvtns.plb       prvtdiag.plb     prvtkzrxu.plb
prvtnacl.plb     prvtredacta.plb  prvtpdb.plb      prvttlog.plb
prvtsqll.plb     prvtappcont.plb  prvtspd.plb      prvtspdi.plb
prvtpprof.plb    prvtsqlm.plb     prvtpart.plb     prvtrupg.plb
prvtrupgis.plb   prvtrupgib.plb   prvtpstdy.plb    prvttsdp.plb
prvtqopi.plb     prvtlog.plb

[Phase 34] type is 1 with 1 Files
ora_load_with_comp.sql

[Phase 35] type is 1 with 1 Files
ora_restart.sql

[Phase 36] type is 1 with 4 Files
catmetinsert.sql catpcnfg.sql     utluppkg.sql     catdph.sql

[Phase 37] type is 1 with 1 Files
ora_restart.sql

[Phase 38] type is 2 with 13 Files
catmetgrant2.sql execemx.sql      execcr.sql       caths.sql
catemini.sql     execaq.sql       execsvrm.sql     exechae.sql
execsec.sql      execbsln.sql     dbmspump.sql     olappl.sql
execrep.sql

[Phase 39] type is 1 with 1 Files
ora_restart.sql

[Phase 40] type is 2 with 10 Files
execstr.sql      execsvr.sql      execstat.sql     catsnmp.sql
wpiutil.sql      owainst.sql      catilmini.sql    execocm.sql
exectsdp.sql     execqopi.sql

[Phase 41] type is 1 with 1 Files
ora_restart.sql

[Phase 42] type is 1 with 1 Files
catpend.sql

[Phase 43] type is 1 with 1 Files
ora_restart.sql

[Phase 44] type is 1 with 1 Files
catupprc.sql

[Phase 45] type is 1 with 1 Files
cmpupstr.sql

[Phase 46] type is 1 with 1 Files
ora_restart.sql

[Phase 47] type is 1 with 2 Files
cmpupjav.sql     cmpupnjv.sql

[Phase 48] type is 1 with 1 Files
ora_restart.sql

[Phase 49] type is 1 with 2 Files
cmpupxdb.sql     cmpupnxb.sql

[Phase 50] type is 1 with 1 Files
ora_restart.sql

[Phase 51] type is 1 with 2 Files
cmpupord.sql     cmpupmsc.sql

[Phase 52] type is 1 with 1 Files
ora_restart.sql

[Phase 53] type is 1 with 1 Files
cmpupend.sql

[Phase 54] type is 1 with 1 Files
catupend.sql

[Phase 55] type is 1 with 1 Files
catuppst.sql

[Phase 56] type is 1 with 1 Files
catshutdown.sql

Using 4 processes.
Serial   Phase #: 0 Files: 1      Time: 115s
Serial   Phase #: 1 Files: 3      Time: 82s
Restart  Phase #: 2 Files: 1      Time: 0s
Parallel Phase #: 3 Files: 18     Time: 28s
Restart  Phase #: 4 Files: 1      Time: 0s
Serial   Phase #: 5 Files: 5      Time: 33s
Serial   Phase #: 6 Files: 1      Time: 55s
Serial   Phase #: 7 Files: 3      Time: 36s
Restart  Phase #: 8 Files: 1      Time: 0s
Parallel Phase #: 9 Files: 60     Time: 87s
Restart  Phase #:10 Files: 1      Time: 0s
Serial   Phase #:11 Files: 1      Time: 63s
Restart  Phase #:12 Files: 1      Time: 0s
Parallel Phase #:13 Files: 199    Time: 279s
Restart  Phase #:14 Files: 1      Time: 0s
Serial   Phase #:15 Files: 3      Time: 5s
Restart  Phase #:16 Files: 1      Time: 0s
Parallel Phase #:17 Files: 33     Time: 89s
Restart  Phase #:18 Files: 1      Time: 0s
Serial   Phase #:19 Files: 3      Time: 12s
Restart  Phase #:20 Files: 1      Time: 1s
Parallel Phase #:21 Files: 23     Time: 197s
Restart  Phase #:22 Files: 1      Time: 0s
Parallel Phase #:23 Files: 11     Time: 131s
Restart  Phase #:24 Files: 1      Time: 0s
Serial   Phase #:25 Files: 1      Time: 184s
Restart  Phase #:26 Files: 1      Time: 0s
Parallel Phase #:27 Files: 0      Time: 1s
Serial   Phase #:28 Files: 1      Time: 0s
Parallel Phase #:29 Files: 130    Time: 21s
Serial   Phase #:30 Files: 1      Time: 0s
Restart  Phase #:31 Files: 1      Time: 1s
Serial   Phase #:32 Files: 1      Time: 0s
Parallel Phase #:33 Files: 122    Time: 35s
Serial   Phase #:34 Files: 1      Time: 0s
Restart  Phase #:35 Files: 1      Time: 0s
Serial   Phase #:36 Files: 4      Time: 347s
Restart  Phase #:37 Files: 1      Time: 0s
Parallel Phase #:38 Files: 13     Time: 387s
Restart  Phase #:39 Files: 1      Time: 0s
Parallel Phase #:40 Files: 10     Time: 26s
Restart  Phase #:41 Files: 1      Time: 0s
Serial   Phase #:42 Files: 1      Time: 18s
Restart  Phase #:43 Files: 1      Time: 0s
Serial   Phase #:44 Files: 1      Time: 9s
Serial   Phase #:45 Files: 1      Time: 1s
Restart  Phase #:46 Files: 1      Time: 0s
Serial   Phase #:47 Files: 2      Time: 9s
Restart  Phase #:48 Files: 1      Time: 2s
Serial   Phase #:49 Files: 2      Time: 443s
Restart  Phase #:50 Files: 1      Time: 1s
Serial   Phase #:51 Files: 2      Time: 2145s
Restart  Phase #:52 Files: 1      Time: 7s
Serial   Phase #:53 Files: 1      Time: 4s
Serial   Phase #:54 Files: 1

*** WARNING: ERRORS FOUND DURING UPGRADE ***

Due to errors found during the upgrade process, the post
upgrade actions in catuppst.sql have not been automatically run.

 *** THEREFORE THE DATABASE UPGRADE IS NOT YET COMPLETE ***

 1. Evaluate the errors found in the upgrade logs (*.log) and determine the proper action.
 2. Execute the post upgrade script as described in Chapter 3 of the Database Upgrade Guide.

     Time: 181s
Grand Total Time: 3609s

 

Nota: Perceba que logo depois da execução do procedimento catupgrd.sql, o script logo no início mostra cada fase e qual script seria executado em cada uma delas. Se por algum motivo o seu upgrade falha em algum momento, após solucionar o problema você pode executar manualmente os scripts na ordem que estão sendo informados em cada fase.    

Pronto… parallel upgrade utility finalizado, vamos checar as versões:

OEL1DG>select * from v$version;
BANNER                                                                               CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production              0
PL/SQL Release 12.1.0.1.0 - Production                                                    0
CORE    12.1.0.1.0      Production                                                        0
TNS for Linux: Version 12.1.0.1.0 - Production                                            0
NLSRTL Version 12.1.0.1.0 - Production                                                    0

Checando components:

OEL1DG>select COMP_NAME, VERSION, STATUS, MODIFIED from DBA_REGISTRY;

COMP_NAME                                          VERSION                        STATUS      MODIFIED
-------------------------------------------------- ------------------------------ ----------- --------------------
Oracle Application Express                         4.2.0.00.27                    VALID       24-DEC-2014 01:37:08
Spatial                                            12.1.0.1.0                     VALID       24-DEC-2014 01:37:07
Oracle Multimedia                                  12.1.0.1.0                     VALID       24-DEC-2014 01:37:02
Oracle XML Database                                12.1.0.1.0                     VALID       24-DEC-2014 01:37:00
Oracle Text                                        12.1.0.1.0                     VALID       24-DEC-2014 01:36:55
Oracle Workspace Manager                           12.1.0.1.0                     VALID       24-DEC-2014 01:36:46
Oracle Database Catalog Views                      12.1.0.1.0                     VALID       24-DEC-2014 01:36:43
Oracle Database Packages and Types                 12.1.0.1.0                     VALID       24-DEC-2014 01:36:43
JServer JAVA Virtual Machine                       12.1.0.1.0                     VALID       24-DEC-2014 01:36:49
Oracle XDK                                         12.1.0.1.0                     VALID       24-DEC-2014 01:36:51
Oracle Database Java Packages                      12.1.0.1.0                     VALID       24-DEC-2014 01:36:53
OLAP Analytic Workspace                            12.1.0.1.0                     VALID       24-DEC-2014 01:37:03
Oracle OLAP API                                    12.1.0.1.0                     VALID       24-DEC-2014 01:37:05
Oracle Real Application Clusters                   12.1.0.1.0                     VALID       24-DEC-2014 01:37:10
PEQUENA PAUSA… troubleshoot…

Como tudo na vida não vem fácil…. Acima eu coloquei o resultado final após resolver alguns problemas que ocorreram. Vou resumir o que aconteceu pois acredito que isso possa ajudar alguém. O meu ambiente virtualizado tem pouco espaço no ASM/DiskGroup e no momento do upgrade o espaço se esgotou e o upgrade foi comprometido. Após vários erros tive a necessidade de voltar o ambiente no momento anterior à execução do upgrade para adicionar mais espaço e executa-lo novamente. O método utilizado para resolver o problema em questão foi voltar o banco de dados utilizando o Flasback database com o ultimo restore point que a primeira fase do script physru criou. Para identificar os restore point’s criados, faça o procedimento abaixo:

OEL1DG>select NAME ,TIME from V$RESTORE_POINT;

NAME            TIME
--------------- ---------------------------------------------------------------------------
PRU_0000_0001   23-DEC-14 03.28.31.000000000 PM
PRU_0101        23-DEC-14 03.28.34.000000000 PM
PRU_0201        23-DEC-14 03.37.12.000000000 PM
PRU_0202        23-DEC-14 03.38.08.000000000 PM
PRU_0203        23-DEC-14 03.38.13.000000000 PM
PRU_0204        23-DEC-14 03.43.07.000000000 PM

 

Utilizei o ultimo restore point que foi criado depois que o banco de dados do ambiente Dataguard se tornou um standby lógico, mas momentos antes de iniciar a execução do upgrade.

Procedimento:

1. Shutdown o banco de dados que será restaurado.
2. Inicie o banco de dados em modo mount ainda sobre o novo ORACLE_HOME.
3. Use o Flashback Database para retornar para o restore point escolhido
SQL> flashback database to restore point PRU_0204 ;
4. Shutdown o database.
5. Inicie o banco de dados em modo mount utilizando agora o antigo ORACLE_HOME.
6. Execute o open resetlogs.
Pronto… simples e fácil. Adicionei mais espaço no diskgroup e reiniciei o processo de upgrade.
Após a finalização da execução dos scripts de upgrade, foi necessário realizar o procedimento de pós upgrade.
Dica: Caso o seu ambiente também possua o Golden Gate instalado, desabilite a trigger de DDL logo depois do startup normal, pois ela poderá causar problemas no pós upgrade, ex:
ALTER TRIGGER SYS.GGS_DDL_TRIGGER_BEFORE DISABLE;
Inicie o banco de dados normalmente e faça o restante dos procedimentos:
1. Desabilite a trigger do Golden Gate, caso possua
1b. Execute o script catuppst.sql  (Execute esse script somente se houve alguma falha, mas que não impediu a finalização do Parallel Upgrade Utility até o final)
2. Execute o script gerado pelo script acima: postupgrade_fixups.sql
3. Recompile os objetos: utlrp.sql
4. Checando objetos inválidos: utluiobj.sql
5. Check final do upgrade: utlu121s.sql

Voltando
Após realizar o upgrade na instância1 no ambiente Dataguard, agora vamos atualizar as informações no Grid Infrastructure e iniciar a instância2 no node2.
[oracle@oel1dg bin]$ cd /u01/app/oracle/product/11.2.0/db_1/bin/
[oracle@oel1dg bin]$ ./srvctl remove database -d RACDBGO
Remove the database RACDBGO? (y/[n]) y
[oracle@oel1dg bin]$ cd $GRID_HOME
[oracle@oel1dg grid]$ cd bin/
[oracle@oel1dg bin]$ pwd
/u01/app/12.1.0/grid/bin  --O Software GRID e DB estão na mesma versão, então adicione pelo Grid_Home. Caso tivessemos o software DB inferior, deveríamos adicionar utilizando o db_home.
[oracle@oel1dg bin]$ ./srvctl add database -d RACDBGO -dbtype RAC -oraclehome /u01/app/oracle/product/12.1/db_1 -startoption open -stopoption IMMEDIATE 
No comando acima você pode especificar mais opções com spfile e etc. Consulte o -h para lista completa
[oracle@oel1dg bin]$ ./srvctl add inst -d RACDBGO -i RACDB1 -n oel1dg
[oracle@oel1dg bin]$ ./srvctl add inst -d RACDBGO -i RACDB2 -n oel2dg
[oracle@oel1dg bin]$ ./srvctl start database -d RACDBGO

 

Checando status da database: (Agora 100% logical standby)

SQL> select inst_id,NAME,open_mode,DATABASE_ROLE, DATAGUARD_BROKER, SWITCHOVER_STATUS from gv$database;
INST_ID NAME      OPEN_MODE            DATABASE_ROLE    DATAGUAR SWITCHOVER_STATUS
---------- --------- -------------------- ---------------- -------- --------------------
         1 RACDB     READ WRITE           LOGICAL STANDBY  DISABLED NOT ALLOWED
         2 RACDB     READ WRITE           LOGICAL STANDBY  DISABLED NOT ALLOWED

 

Feito isso, vamos para a segunda fase, mas antes vamos atualizar o cronograma.

Atualizando o cronograma.

Etapa Status Objetivo Ambiente Local/home Disponibilidade OBS
1 OK Rolling upgrade 12.1.0 Dataguard Grid Infrastructure Sem Downtime
2 OK Rolling upgrade 12.1.0. Produção Grid Infrastructure Sem Downtime
3 OK Instalar nova versão Soft. database out-of-place 12.1.0. Dataguard Database Sem Downtime
4 OK Instalar nova versão Soft. database out-of-place 12.1.0. Produção Database Sem Downtime
5 OK Upgrade de versão do database – Rolling Upgrades Made Easy Primeira-Fase. Dataguard Database Sem Downtime Switchover produção para dataguard que estará na nova versão 12.1.0.1
6 Pendente Upgrade de versão do database – Rolling Upgrades Made Easy Segunda-Fase. Produção/Dataguard Database Pequeno Downtime devido ao tempo do switchover
7 Pendente Upgrade de versão do database – Rolling Upgrades Made Easy Terceira-Fase. Produção/Dataguard Database Pequeno Downtime devido ao tempo do switchover Switchover para voltar o ambiente original

========================================================================================================================

Execução physru Step 2

[oracle@oel1 stage]$ ./physru.sh SYS PRIM1UPGR SBY1UPGR RACDBSP RACDBGO 12.1.0.1.0
Please enter the sysdba password:

### Initialize script to either start over or resume execution
Dec 24 11:42:24 2014 [0-1] Identifying rdbms software version
Dec 24 11:42:24 2014 [0-1] database RACDBSP is at version 11.2.0.4.0
Dec 24 11:42:24 2014 [0-1] database RACDBGO is at version 12.1.0.1.0
Dec 24 11:42:25 2014 [0-1] verifying flashback database is enabled at RACDBSP and RACDBGO
Dec 24 11:42:25 2014 [0-1] verifying available flashback restore points
Dec 24 11:42:25 2014 [0-1] verifying DG Broker is disabled
Dec 24 11:42:25 2014 [0-1] looking up prior execution history
Dec 24 11:42:26 2014 [0-1] last completed stage [2-4] using script version 0001
Dec 24 11:42:26 2014 [0-1] resuming execution of script

### Stage 3: Validate upgraded transient logical standby
Dec 24 11:42:26 2014 [3-1] database RACDBGO is no longer in OPEN MIGRATE mode
Dec 24 11:42:26 2014 [3-1] database RACDBGO is at version 12.1.0.1.0

### Stage 4: Switch the transient logical standby to be the new primary
Dec 24 11:42:27 2014 [4-1] waiting for RACDBGO to catch up (this could take a while)
Dec 24 11:42:28 2014 [4-1] starting logical standby on database RACDBGO
Dec 24 11:42:35 2014 [4-1] waiting for apply lag to fall under 30 seconds
Dec 24 11:44:25 2014 [4-1] apply lag measured at 109 seconds
Dec 24 11:44:42 2014 [4-1] apply lag measured at 9 seconds
Dec 24 11:44:43 2014 [4-2] switching RACDBSP to become a logical standby
Dec 24 11:50:59 2014 [4-2] RACDBSP is now a logical standby
Dec 24 11:51:00 2014 [4-3] waiting for standby RACDBGO to process end-of-redo from primary
Dec 24 11:51:01 2014 [4-4] switching RACDBGO to become the new primary
Dec 24 11:51:16 2014 [4-4] RACDBGO is now the new primary

### Stage 5: Flashback former primary to pre-upgrade restore point and convert to physical
Dec 24 11:51:22 2014 [5-1] verifying instance RACDB1 is the only active instance

WARN: RACDBSP is a RAC database.  Before this script can continue, you
      must manually reduce the RAC to a single instance.  This can be
      accomplished with the following step:

        1) Shutdown all instances other than instance RACDB1.
           eg: srvctl stop instance -d RACDBSP -i RACDB2 -o abort

      Once these steps have been performed, enter 'y' to continue the script.
      If desired, you may enter 'n' to exit the script to perform the required
      steps, and recall the script to resume from this point.

Are you ready to continue? (y/n):

 

srvctl stop instance -d RACDBSP -i RACDB2 -o abort

Siga o procedimento informado acima para desligar a instância 2 do ambiente produção( original primário ) e digite Y para prosseguir.

Are you ready to continue? (y/n): y

Dec 24 11:53:34 2014 [5-1] continuing
Dec 24 11:53:34 2014 [5-1] verifying instance RACDB1 is the only active instance
Dec 24 11:53:35 2014 [5-1] shutting down database RACDBSP
./physru.sh: line 3677: warning: here-document at line 3673 delimited by end-of-file (wanted `EOF')
Dec 24 11:54:01 2014 [5-1] mounting database RACDBSP
./physru.sh: line 3303: warning: here-document at line 3298 delimited by end-of-file (wanted `EOF')
Dec 24 11:54:13 2014 [5-2] flashing back database RACDBSP to restore point PRU_0000_0001
Dec 24 11:54:18 2014 [5-3] converting RACDBSP into physical standby
Dec 24 11:54:18 2014 [5-4] shutting down database RACDBSP
./physru.sh: line 3677: warning: here-document at line 3673 delimited by end-of-file (wanted `EOF')

NOTE: Database RACDBSP has been shutdown, and is now ready to be started
      using the newer version Oracle binary.  This script requires the
      database to be mounted (on all active instances, if RAC) before calling
      this script to resume the rolling upgrade.

NOTE: Database RACDBSP is no longer limited to single instance operation since
      the database has been successfully converted into a physical standby.
      For increased availability, Oracle recommends starting all instances in
      the RAC on the newer binary by performing the following step:

        1) Startup and mount all instances for database RACDBSP
        eg: srvctl start database -d RACDBSP -o mount

 

*Copie o orapwd,spfile, listener, tns e etc para novo home.

*Edite e re-inicialize o listener LISTENER_UPG.

Atualize informações no Grid Infrastructure usando o menos –f devido as dependências (dbfs application program, ggate_app e etc). Edite o spfile para retirar parâmetros depreciados e outros que não existem como por exemplo o enable_goldengate_replication que não existe na versão 12.1.0.1.0, mas volta a existir na versão 12.1.0.2.0 e o parâmetro SEC_CASE_SENSITIVE_LOGON que foi depreciado a partir da 12.1.0.1.0.

Iniciando todas as instâncias do nosso atual standby físico (antigo produção/primário), conforme recomendação da Oracle.

[oracle@oel1 bin]$ ./srvctl start database -d RACDBSP -o mount
PRCR-1079 : Failed to start resource ora.racdbsp.db
CRS-5017: The resource action "ora.racdbsp.db start" encountered the following error:
ORA-01078: failure in processing system parameters
LRM-00101: unknown parameter name 'enable_goldengate_replication'
ORA-01078: failure in processing system parameters
LRM-00101: unknown parameter name 'enable_goldengate_replication'
. For details refer to "(:CLSN00107:)" in "/u01/app/12.1.0/grid/log/oel1/agent/crsd/oraagent_oracle/oraagent_oracle.log".

 

Veja acima que tivemos erros no startup devido ao parâmetro comentado ( enable_goldengate_replication ). Após retira-lo as instâncias iniciaram normalmente.

Após tudo OK, vamos ver o estado das instâncias que sofreram a troca de role. (O que era produção virou standby físico e vise-versa).

Ex-produção: (Agora novo standby…)

SQL> select inst_id,  NAME, open_mode, DATABASE_ROLE, DATAGUARD_BROKER, SWITCHOVER_STATUS from gv$database;

   INST_ID NAME                 OPEN_MODE            DATABASE_ROLE    DATAGUAR SWITCHOVER_STATUS
---------- -------------------- -------------------- ---------------- -------- --------------------
         1 RACDB                MOUNTED              PHYSICAL STANDBY ENABLED  RECOVERY NEEDED
         2 RACDB                MOUNTED              PHYSICAL STANDBY ENABLED  RECOVERY NEEDED

 

Ex-dataguard: (Agora novo produção…)

SQL> select inst_id,  NAME, open_mode, DATABASE_ROLE, DATAGUARD_BROKER, SWITCHOVER_STATUS from gv$database;
INST_ID     NAME                 OPEN_MODE            DATABASE_ROLE    DATAGUAR SWITCHOVER_STATUS
 ---------- -------------------- -------------------- ---------------- -------- --------------------
 1          RACDB                READ WRITE           PRIMARY          DISABLED LOG SWITCH GAP
 2          RACDB                READ WRITE           PRIMARY          DISABLED LOG SWITCH GAP

 

Checando as sessões que criamos anteriormente para monitorar a indisponibilidade:

Screen Shot 2014-12-26 at 11.45.37Screen Shot 2014-12-26 at 11.45.23Veja que ambas as sessões que havíamos criados usando o alias RACDB com failover para ambos os SCAN’s funcionou com sucesso. Houve failover das 2 sessões para o ambiente ex-dataguard que agora é o novo primário/produção(oel1dg), mas lembre-se esse é apenas um teste.

Observação: Habilite a trigger de DDL do Golden Gate caso queria utiliza-lo nesse ambiente o que seria o ideal, mas não é o meu caso devido a utilização da janela de report (sem modificação de dados) para realizar essa atividade. Caso você pretenda utiliza-lo deixe tudo pronto, copie os trails/parameters/checkpoint Files do primário-original(atual standby) para o site atual produção (que já deve ter a instalação do Golden Gate feita), faça os ajustes e inicie novamente.

Uma atividade que evitaria o máximo de problemas seria utilizar o ACFS Replication, na qual poderia replicar tudo que existe no filesystem da instalação original do Golden Gate para o atual Produção (antigo standby). Exemplo rápido:

Para montar essa replicação precisamos realizar algumas atividades antes.

1. Criar um usuário específico para essa atividade em cada instância ASM do node1 de cada ambiente (PROD e DG):

PRODUÇÃO: (O prod aqui me refiro ao local onde estão os ultimos arquivos mais atualizados da instalação do Golden Gate, onde foi executado como produção pela última vez, pois não fizemos switchover de Golden Gate, mas sim só de banco, sendo assim o “produção” do Golden Gate ainda continua sendo o antigo ambiente de produção de banco, o atual standby no nosso caso.)
create user userfs identified by userfs;
grant sysasm to userfs;
grant sysdba to userfs;

STANDBY: (O contrário da explicação acima. Nesse nosso momento seria o atual Produção.)
create user userfs identified by userfs;
grant sysasm to userfs;
grant sysdba to userfs;

Criar um alias no tnsnames.ora ($GRID_HOME) em ambos nodes1 de cada ambiente apontando diretamente cada instância ASM:

PRIMARY_FS =
  (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oel1-vip)(PORT = 1521))
  )
    (CONNECT_DATA =
    (SERVICE_NAME = pri_fs)
    (INSTANCE_NAME = +ASM1)
  )
)

STANDBY_FS =
  (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oel1dg-vip)(PORT = 1521))
  )
    (CONNECT_DATA =
    (SERVICE_NAME = std_fs)
   (INSTANCE_NAME = +ASM1)
  )
)

 

Testando a conexão:

Produção:

[oracle@oel1 ~]$ . grid_env
[oracle@oel1 ~]$ sqlplus userfs/userfs@STANDBY_FS as sysasm

SQL*Plus: Release 12.1.0.1.0 Production on Tue Jan 6 13:32:20 2015

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

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

SQL> select host_name from v$instance;

HOST_NAME
----------------------------------------------------------------
oel1dg

 

Standby:

[oracle@oel1dg ~]$ . grid_env
[oracle@oel1dg ~]$ sqlplus userfs/userfs@PRIMARY_FS as sysasm

SQL*Plus: Release 12.1.0.1.0 Production on Tue Jan 6 13:31:44 2015

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

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

SQL> select host_name from v$instance;

HOST_NAME
----------------------------------------------------------------
oel1

 

Para essa atividade estou levando em consideração que você já tem uma ACFS file system criado no ambiente Dataguard na qual receberá o sincronismo dos arquivos via S.O, ex:

Produção:

[oracle@oel1 ~]$ df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              25G   18G  5.8G  76% /
tmpfs                 2.3G  561M  1.7G  25% /dev/shm
/dev/sda1             194M   51M  134M  28% /boot
Downloads             466G  458G  8.2G  99% /media/sf_Downloads
/dev/asm/acfs_gg-245  4.0G  677M  3.3G  17% /goldengate
[oracle@oel1 ~]$ cd /goldengate/
[oracle@oel1 goldengate]$ ls -ltrh |wc -l
783

 

Standby:

[root@oel1dg goldengate]# df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              25G   18G  6.2G  74% /
tmpfs                 3.0G  140M  2.9G   5% /dev/shm
/dev/sda1             194M   51M  134M  28% /boot
Downloads             466G  458G  8.1G  99% /media/sf_Downloads
/dev/asm/acfs_vol1-271
                      3.8G   88M  3.7G   2% /goldengate  --Praticamente zerado
[root@oel1dg goldengate]# ls -ltrh |wc -l
1

 

Monte o filesystem somente no node1 do standby.

Standby node2:

[root@oel2dg /]# /bin/umount -t acfs -a
[root@oel2dg /]# df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              25G   16G  7.4G  69% /
tmpfs                 3.0G  843M  2.2G  28% /dev/shm
/dev/sda1             194M   51M  134M  28% /boot

 

Pronto, o acfs esta montado somente no node1 do “Standby”. (Não se esqueça da explicação do inicio desse tópico)

Check a compatibilidade do ASM e do ADVM do diskgroup usado pelo ACFS pois eles devem estar com o mínimo: 11.2.0.2

Produção:

ASMCMD> lsattr -G GG1 -l
Name                     Value
access_control.enabled   FALSE
access_control.umask     066
au_size                  1048576
cell.smart_scan_capable  FALSE
compatible.advm          11.2.0.0.0
compatible.asm           11.2.0.0.0
compatible.rdbms         10.1.0.0.0
disk_repair_time         3.6h
sector_size              512
ASMCMD> exit

 

[oracle@oel1 ~]$ sqlplus / as sysasm

SQL*Plus: Release 12.1.0.1.0 Production on Tue Jan 6 11:16:20 2015

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

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options
SQL> ALTER DISKGROUP GG1 SET ATTRIBUTE 'compatible.asm'='11.2.0.4.0';

Diskgroup altered.

SQL> ALTER DISKGROUP GG1 SET ATTRIBUTE 'compatible.advm'='11.2.0.4.0';
Diskgroup altered.
[oracle@oel1 ~]$ . grid_env
[oracle@oel1 ~]$ asmcmd
ASMCMD> lsattr -G GG1 -l
Name                     Value
access_control.enabled   FALSE
access_control.umask     066
au_size                  1048576
cell.smart_scan_capable  FALSE
compatible.advm          11.2.0.4.0
compatible.asm           11.2.0.4.0
compatible.rdbms         10.1.0.0.0
content.type             data
disk_repair_time         3.6h
idp.boundary             auto
idp.type                 dynamic
sector_size              512
ASMCMD> exit

 

Standby:

[oracle@oel1dg ~]$. grid_env
[oracle@oel1dg ~]$ asmcmd
ASMCMD> lsattr -G GG01 -l
Name                     Value
access_control.enabled   FALSE
access_control.umask     066
au_size                  1048576
cell.smart_scan_capable  FALSE
compatible.advm          11.2.0.0.0
compatible.asm           12.1.0.0.0
compatible.rdbms         10.1.0.0.0
content.check            FALSE
content.type             data
disk_repair_time         3.6h
failgroup_repair_time    24.0h
idp.boundary             auto
idp.type                 dynamic
phys_meta_replicated     true
sector_size              512
thin_provisioned         FALSE
[oracle@oel1dg ~]$ sqlplus / as sysasm

SQL*Plus: Release 12.1.0.1.0 Production on Tue Jan 6 11:14:20 2015

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

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

SQL> ! hostname
oel1dg

SQL> ALTER DISKGROUP GG01 SET ATTRIBUTE 'compatible.advm'='11.2.0.4.0';

Diskgroup altered.
[oracle@oel1dg ~]$ asmcmd
ASMCMD>  lsattr -G GG01 -l
Name                     Value
access_control.enabled   FALSE
access_control.umask     066
au_size                  1048576
cell.smart_scan_capable  FALSE
compatible.advm          11.2.0.4.0
compatible.asm           12.1.0.0.0
compatible.rdbms         10.1.0.0.0
content.check            FALSE
content.type             data
disk_repair_time         3.6h
failgroup_repair_time    24.0h
idp.boundary             auto
idp.type                 dynamic
phys_meta_replicated     true
sector_size              512
thin_provisioned         FALSE
ASMCMD> exit

 

Replicação

Primeiramente, vamos realizar a inicialização do processo de replicação no lado standby.
Este processo irá realizar a conexão para o ambiente de produção para inicialização do processo.

 [root@oel1dg ~]# /sbin/acfsutil repl init standby -p userfs/userfs@PRIMARY_FS /goldengate
acfsutil repl init: ACFS-05094: replicated file system free space is below the minimum of 4GB per active node, actual free space left: 3GB

 

Ops.. problema de espaço no ACFS. Existe um valor mínimo (4GB per active node) para que esse processo funcione  corretamente e para variar, o meu ambiente de HML esta abaixo desse valor.

Adicionando mais espaço no DG e redimensionando acfs filesystem:

Abaixo seria o processo que fiz no ambiente de Produção, pois eu tive que aumentar nele também pois caso contrário causaria a mesma mensagem de erro quando fossemos executar o procedimento lá. (Faça o mesmo processo no Dataguard, caso precise aumentar o FileSystem é claro, caso contrário pode pular essa parte.)

[oracle@oel1 ~]$ . grid_env
[oracle@oel1 ~]$ sqlplus  / as sysasm

SQL*Plus: Release 12.1.0.1.0 Production on Tue Jan 6 11:52:45 2015

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

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

SQL> SELECT MOUNT_STATUS,HEADER_STATUS,MODE_STATUS,STATE,TOTAL_MB,FREE_MB,NAME,PATH,LABEL FROM V$ASM_DISK

MOUNT_S HEADER_STATU MODE_ST STATE      TOTAL_MB    FREE_MB NAME                           PATH            LABEL
------- ------------ ------- -------- ---------- ---------- ------------------------------ --------------- -------------------------------
CLOSED  PROVISIONED  ONLINE  NORMAL            0          0                                ORCL:DISK15     DISK15 >> Novo disco adicionado
CACHED  MEMBER       ONLINE  NORMAL         5114        227 DISK1                          ORCL:DISK1      DISK1
CACHED  MEMBER       ONLINE  NORMAL        15115       3994 DISK10                         ORCL:DISK10     DISK10
CACHED  MEMBER       ONLINE  NORMAL         8118       1159 DISK11                         ORCL:DISK11     DISK11
CACHED  MEMBER       ONLINE  NORMAL         5114        237 DISK2                          ORCL:DISK2      DISK2
CACHED  MEMBER       ONLINE  NORMAL         5114        241 DISK3                          ORCL:DISK3      DISK3
CACHED  MEMBER       ONLINE  NORMAL         5114        241 DISK4                          ORCL:DISK4      DISK4
CACHED  MEMBER       ONLINE  NORMAL        10119       1823 DISK5                          ORCL:DISK5      DISK5
CACHED  MEMBER       ONLINE  NORMAL         4118         20 DISK9                          ORCL:DISK9      DISK9

SQL> ALTER DISKGROUP GG1 ADD DISK 'ORCL:DISK15' REBALANCE POWER 11;

Diskgroup altered.

Checando rebalance:

SQL> select INST_ID, OPERATION, STATE, POWER, SOFAR, EST_WORK, EST_RATE, EST_MINUTES from GV$ASM_OPERATION
no rows selected

SQL> select name, state, type, total_mb, free_mb,COMPATIBILITY,DATABASE_COMPATIBILITY from v$asm_diskgroup;

NAME            STATE       TYPE     TOTAL_MB    FREE_MB COMPATIBILITY           DATABASE_COMPATIBILITY
--------------- ----------- ------ ---------- ---------- ----------------------- --------------------------------
DATA            MOUNTED     NORMAL      43689       6099 11.2.0.0.0               10.1.0.0.0
GG1             MOUNTED     EXTERN       6110       2010 11.2.0.4.0               10.1.0.0.0
FS1             MOUNTED     EXTERN      10119       1823 11.2.0.0.0               10.1.0.0.0

 

Resizing no ACFS
[root@oel1 ~]# df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              25G   18G  5.8G  76% /
tmpfs                 2.3G  496M  1.8G  22% /dev/shm
/dev/sda1             194M   51M  134M  28% /boot
Downloads             466G  461G  5.1G  99% /media/sf_Downloads
/dev/asm/acfs_gg-245  4.0G  681M  3.3G  18% /goldengate
[root@oel1 ~]# /sbin/acfsutil size +1500M -d /dev/asm/acfs_gg-245 /goldengate
acfsutil size: new file system size: 5771362304 (5504MB)
[root@oel1 ~]# df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              25G   18G  5.8G  76% /
tmpfs                 2.3G  496M  1.8G  22% /dev/shm
/dev/sda1             194M   51M  134M  28% /boot
Downloads             466G  461G  5.1G  99% /media/sf_Downloads
/dev/asm/acfs_gg-245  5.4G  684M  4.8G  13% /goldengate

 

Para maiores informações sobre comandos do ACFS, clique aqui e aqui.

Pronto… mais espaço adicionado com sucesso… (aliás, bem pouco espaço…)

 

Reiniciando processo da replicação

[root@oel1dg ~]# /sbin/acfsutil repl init standby -p userfs/userfs@PRIMARY_FS /goldengate
[root@oel1dg ~]#

 

Verificando se o processo foi inicializado no standby file system:

[root@oel1dg ~]# /sbin/acfsutil repl info -c /goldengate
Site:                                Standby
Standby status:                      Initializing
    Initializing directories
Background Resources:                4 of 4 Online
Standby mount point:                 /goldengate
Standby Oracle Net service name:     pri_fs
Primary mount point:
Primary Oracle Net service name:     pri_fs
Primary Oracle Net alias:            userfs/****@PRIMARY_FS
Replicated tags:
Log compression:                     Off
Debug log level:                     2

 

Verificando se a inicialização esta completa:

[root@oel1dg ~]# /sbin/acfsutil repl info /goldengate
Time: Tue Jan 06 11:32:01 2015
Event: Replication Initialization Started
Initialization Start Time: Tue Jan 06 11:32:01 2015

Time: Tue Jan 06 11:31:59 2015
Event: Information Message
Message: acfsrepl_monitor process started. Node: 1

 

Uma vez que o processo esta habilitado no standby, vamos agora iniciar a replicação executando o procedimento no ambiente de produção:

 

PRODUÇÃO:

[root@oel1 ~]# /sbin/acfsutil repl init primary -s userfs/userfs@standby_fs /goldengate
acfsutil repl init: ACFS-05092: replicated file system free space is near the minimum threshold of 4GB per active node, continuing with initialization
validating the remote connection
remote connection has been established
The standby replication site is initialized. ACFS replication will begin.

 

Verificando se o processo foi inicializado:

[root@oel1 ~]# /sbin/acfsutil repl info -c /goldengate
Site:                                Primary
Lag Time:                            00:00:06
Primary status:                      Online
Background Resources:                3 of 3 Online
Primary mount point:                 /goldengate
Primary Oracle Net service name:     std_fs
Standby mount point:                 /goldengate
Standby Oracle Net service name:     std_fs
Standby Oracle Net alias:            userfs/****@standby_fs
Replicated tags:
Log compression:                     Off
Debug log level:                     2

 

Verificando o status/progresso da replicação:

[root@oel1 ~]# /sbin/acfsutil repl info  /goldengate
Time: Tue Jan 06 13:17:53 2015
Event: Applied Log
Cord Number: 3
Log Create Time: Tue Jan 06 13:17:31 2015
Log Apply Complete Time: Tue Jan 06 13:17:42 2015

Time: Tue Jan 06 13:17:42 2015
Event: Transmitted Log
Cord Number: 3
Capture Time: Tue Jan 06 13:17:40 2015
Acknowledged Time: Tue Jan 06 13:17:42 2015

Time: Tue Jan 06 13:12:12 2015
Event: Applied Log
Cord Number: 2
Log Create Time: Tue Jan 06 13:11:51 2015
Log Apply Complete Time: Tue Jan 06 13:12:02 2015

Time: Tue Jan 06 13:12:01 2015
Event: Transmitted Log
Cord Number: 2
Capture Time: Tue Jan 06 13:11:59 2015
Acknowledged Time: Tue Jan 06 13:12:01 2015

Time: Tue Jan 06 13:11:41 2015
Event: Replication Synchronized
Sync Time: Tue Jan 06 13:11:41 2015
Logs were applied

Time: Tue Jan 06 13:11:41 2015
Event: Initialization Files Complete
Cord Number: 1
Initialized Files in Cord: 1017

Time: Tue Jan 06 13:11:41 2015
Event: Applied Log
Cord Number: 1
Log Create Time: Tue Jan 06 13:10:31 2015
Log Apply Complete Time: Tue Jan 06 13:11:32 2015

Time: Tue Jan 06 13:11:30 2015
Event: Transmitted Log
Cord Number: 1
Capture Time: Tue Jan 06 13:11:18 2015
Acknowledged Time: Tue Jan 06 13:11:30 2015

Time: Tue Jan 06 13:10:31 2015
Event: Primary Site Initialization Progress
Number of Files Processed: 1010
Number of Files Enabled: 987
Number of Files Remaining: 56
Percentage Complete: 94

Time: Tue Jan 06 13:10:31 2015
Event: Primary Site Initialization Progress
Number of Files Processed: 1000
Number of Files Enabled: 977
Number of Files Remaining: 66
Percentage Complete: 93

Time: Tue Jan 06 13:10:31 2015
Event: Primary Site Initialization Progress
Number of Files Processed: 990
Number of Files Enabled: 967
Number of Files Remaining: 76
Percentage Complete: 92

Time: Tue Jan 06 13:10:31 2015
Event: Primary Site Initialization Progress
Number of Files Processed: 980
Number of Files Enabled: 957
Number of Files Remaining: 86
Percentage Complete: 91

Time: Tue Jan 06 13:10:31 2015
Event: Primary Site Initialization Progress
Number of Files Processed: 970
Number of Files Enabled: 947
Number of Files Remaining: 96
Percentage Complete: 90

...

 

Verificando o lag da replicação:

[root@oel1 ~]# /sbin/acfsutil repl info -c /goldengate
Site:                                Primary
Lag Time:                            00:00:00    >> Veja que o lag é de 0, ou seja esta sincronizado.
Primary status:                      Online
Background Resources:                3 of 3 Online
Primary mount point:                 /goldengate
Primary Oracle Net service name:     std_fs
Standby mount point:                 /goldengate
Standby Oracle Net service name:     std_fs
Standby Oracle Net alias:            userfs/****@standby_fs
Replicated tags:
Log compression:                     Off
Debug log level:                     2

 

Conferindo

Produção:

[oracle@oel1 goldengate]$ df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              25G   18G  5.8G  76% /
tmpfs                 2.3G  530M  1.8G  24% /dev/shm
/dev/sda1             194M   51M  134M  28% /boot
Downloads             466G  461G  5.1G  99% /media/sf_Downloads
/dev/asm/acfs_gg-245  5.4G  1.7G  3.8G  31% /goldengate

[oracle@oel1 goldengate]$ ls -ltrh | wc -l
804

 

STANDBY:

[oracle@oel1dg ~]$ df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              25G   18G  6.2G  74% /
tmpfs                 3.0G  140M  2.9G   5% /dev/shm
/dev/sda1             194M   51M  134M  28% /boot
Downloads             466G  461G  5.1G  99% /media/sf_Downloads
/dev/asm/acfs_vol1-271
                      5.8G  626M  5.2G  11% /goldengate

[oracle@oel1dg ~]$ cd /goldengate/
[oracle@oel1dg goldengate]$ ls -ltrh | wc -l
804

 

Outra forma de acompanhar se ainda esta havendo sincronismo seria executando o comando abaixo.

A cada 10 segundos será informado as estatísticas de sincronismo…

[oracle@oel1 dirdat]$ /sbin/acfsutil info fs -s 10 /goldengate
/goldengate
    amount of change since mount:       7.35 MB
    average rate of change since mount: 0 KB/s

/goldengate
    amount of change: 0.00 MB   rate of change: 0 KB/s

/goldengate
    amount of change: 0.00 MB   rate of change: 0 KB/s

/goldengate
    amount of change: 0.00 MB   rate of change: 0 KB/s

/goldengate
    amount of change: 0.00 MB   rate of change: 0 KB/s

 

Finalizando Replicação
Produção
[root@oel1 ~]# /sbin/acfsutil repl terminate primary /goldengate
[root@oel1 ~]#

 

Checando:

[root@oel1 ~]# /sbin/acfsutil repl info /goldengate
acfsutil repl info: ACFS-05059: ACFS replication not initialized

 

STANDBY
[root@oel1dg ~]# /sbin/acfsutil repl terminate standby /goldengate
acfsutil repl terminate: ACFS-05060: waiting for ACFS replication to terminate
[root@oel1dg ~]#

 

Checando:

[root@oel1dg ~]# /sbin/acfsutil repl info /goldengate
acfsutil repl info: ACFS-05059: ACFS replication not initialized

 

Mount o ACFS no node2 novamente, ex:

[root@oel2 ~]# /sbin/mount.acfs -o all
[root@oel2 ~]# df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              25G   18G  5.5G  77% /
tmpfs                 2.3G  896M  1.4G  39% /dev/shm
/dev/sda1             194M   51M  134M  28% /boot
Downloads             466G  461G  5.0G  99% /media/sf_Downloads
/dev/asm/acfs_gg-245  5.4G  664M  4.8G  13% /goldengate

Pronto… ajuste o que for necessário no Golden Gate, como por exemplo refazer o link simbólico necessário em ambos os ambientes e nodes, utilizando o database home novo , ex:

[oracle@oel1]$ ln -s /u01/app/oracle/product/12.1.0/db_1/lib/libnnz12.so /u01/app/oracle/product/12.1.0/db_1/lib/libnnz11.so

 

Quando o processo de switchover da volta ocorrer, faça novamente o processo inverso da replicação e os ajustes finais e inicie o Golden Gate novamente…

Atualizando o cronograma.

Etapa Status Objetivo Ambiente Local/home Disponibilidade OBS
1 OK Rolling upgrade 12.1.0 Dataguard Grid Infrastructure Sem Downtime
2 OK Rolling upgrade 12.1.0. Produção Grid Infrastructure Sem Downtime
3 OK Instalar nova versão Soft. database out-of-place 12.1.0. Dataguard Database Sem Downtime
4 OK Instalar nova versão Soft. database out-of-place 12.1.0. Produção Database Sem Downtime
5 OK Upgrade de versão do database – Rolling Upgrades Made Easy Primeira-Fase. Dataguard Database Sem Downtime Switchover produção para dataguard que estará na nova versão 12.1.01
6 OK Upgrade de versão do database – Rolling Upgrades Made Easy Segunda-Fase. Produção/Dataguard Database Pequeno Downtime devido ao tempo do switchover
7 Pendente Upgrade de versão do database – Rolling Upgrades Made Easy Terceira-Fase. Produção/Dataguard Database Pequeno Downtime devido ao tempo do switchover Switchover para voltar o ambiente original

========================================================================================================================

Execução physru Step 3

[oracle@oel1 stage]$ ./physru.sh SYS PRIM1UPGR SBY1UPGR RACDBSP RACDBGO 12.1.0.1.0
 Please enter the sysdba password:
### Initialize script to either start over or resume execution
 Dec 24 13:29:13 2014 [0-1] Identifying rdbms software version
 Dec 24 13:29:13 2014 [0-1] database RACDBSP is at version 12.1.0.1.0
 Dec 24 13:29:13 2014 [0-1] database RACDBGO is at version 12.1.0.1.0
 Dec 24 13:29:14 2014 [0-1] verifying flashback database is enabled at RACDBSP and RACDBGO
 Dec 24 13:29:15 2014 [0-1] verifying available flashback restore points
 Dec 24 13:29:15 2014 [0-1] verifying DG Broker is disabled
 Dec 24 13:29:15 2014 [0-1] looking up prior execution history
 Dec 24 13:29:16 2014 [0-1] last completed stage [5-4] using script version 0001
 Dec 24 13:29:16 2014 [0-1] resuming execution of script
### Stage 6: Run media recovery through upgrade redo
 Dec 24 13:29:17 2014 [6-1] upgrade redo region identified as scn range [5574986, 7899328]
 Dec 24 13:29:18 2014 [6-1] starting media recovery on RACDBSP
 Dec 24 13:29:24 2014 [6-1] confirming media recovery is running
 Dec 24 13:29:25 2014 [6-1] waiting for media recovery to initialize v$recovery_progress
 Dec 24 13:29:54 2014 [6-1] monitoring media recovery's progress
 Dec 24 13:29:54 2014 [6-1] failed to determine the last applied scn by media recovery
 Dec 24 13:29:54 2014 [6-1] confirming media recovery is running
 Dec 24 13:30:30 2014 [6-3] recovery of upgrade redo at 01% - estimated complete at Dec 24 14:13:38
 Dec 24 13:30:47 2014 [6-3] recovery of upgrade redo at 02% - estimated complete at Dec 24 14:08:25
 Dec 24 13:31:21 2014 [6-3] recovery of upgrade redo at 06% - estimated complete at Dec 24 13:52:17
 Dec 24 13:31:39 2014 [6-3] recovery of upgrade redo at 08% - estimated complete at Dec 24 13:49:20
 Dec 24 13:31:56 2014 [6-3] recovery of upgrade redo at 10% - estimated complete at Dec 24 13:48:59
 Dec 24 13:32:13 2014 [6-3] recovery of upgrade redo at 11% - estimated complete at Dec 24 13:49:23
 Dec 24 13:32:29 2014 [6-3] recovery of upgrade redo at 13% - estimated complete at Dec 24 13:48:45
 Dec 24 13:32:46 2014 [6-3] recovery of upgrade redo at 16% - estimated complete at Dec 24 13:46:31
 Dec 24 13:33:04 2014 [6-3] recovery of upgrade redo at 18% - estimated complete at Dec 24 13:46:59
 Dec 24 13:33:21 2014 [6-3] recovery of upgrade redo at 19% - estimated complete at Dec 24 13:47:24
 Dec 24 13:33:53 2014 [6-3] recovery of upgrade redo at 21% - estimated complete at Dec 24 13:47:58
 Dec 24 13:34:10 2014 [6-3] recovery of upgrade redo at 23% - estimated complete at Dec 24 13:48:05
 Dec 24 13:34:27 2014 [6-3] recovery of upgrade redo at 24% - estimated complete at Dec 24 13:48:21
 Dec 24 13:34:43 2014 [6-3] recovery of upgrade redo at 26% - estimated complete at Dec 24 13:48:09
 Dec 24 13:35:01 2014 [6-3] recovery of upgrade redo at 27% - estimated complete at Dec 24 13:48:02
 Dec 24 13:35:18 2014 [6-3] recovery of upgrade redo at 29% - estimated complete at Dec 24 13:48:09
 Dec 24 13:35:34 2014 [6-3] recovery of upgrade redo at 31% - estimated complete at Dec 24 13:47:29
 Dec 24 13:35:52 2014 [6-3] recovery of upgrade redo at 35% - estimated complete at Dec 24 13:46:39
 Dec 24 13:36:09 2014 [6-3] recovery of upgrade redo at 36% - estimated complete at Dec 24 13:46:58
 Dec 24 13:36:26 2014 [6-3] recovery of upgrade redo at 37% - estimated complete at Dec 24 13:47:09
 Dec 24 13:36:43 2014 [6-3] recovery of upgrade redo at 39% - estimated complete at Dec 24 13:47:00
 Dec 24 13:37:00 2014 [6-3] recovery of upgrade redo at 42% - estimated complete at Dec 24 13:46:21
 Dec 24 13:37:17 2014 [6-3] recovery of upgrade redo at 43% - estimated complete at Dec 24 13:46:45
 Dec 24 13:37:34 2014 [6-3] recovery of upgrade redo at 44% - estimated complete at Dec 24 13:46:49
 Dec 24 13:37:51 2014 [6-3] recovery of upgrade redo at 46% - estimated complete at Dec 24 13:46:39
 Dec 24 13:38:07 2014 [6-3] recovery of upgrade redo at 49% - estimated complete at Dec 24 13:46:30
 Dec 24 13:38:24 2014 [6-3] recovery of upgrade redo at 50% - estimated complete at Dec 24 13:46:34
 Dec 24 13:38:41 2014 [6-3] recovery of upgrade redo at 52% - estimated complete at Dec 24 13:46:35
 Dec 24 13:39:15 2014 [6-3] recovery of upgrade redo at 54% - estimated complete at Dec 24 13:46:51
 Dec 24 13:39:32 2014 [6-3] recovery of upgrade redo at 55% - estimated complete at Dec 24 13:47:06
 Dec 24 13:39:49 2014 [6-3] recovery of upgrade redo at 56% - estimated complete at Dec 24 13:47:13
 Dec 24 13:40:06 2014 [6-3] recovery of upgrade redo at 58% - estimated complete at Dec 24 13:47:13
Dec 24 14:45:39 2014 [6-3] recovery of upgrade redo at 60% - estimated complete at Dec 24 14:59:50
 Dec 24 14:45:58 2014 [6-3] recovery of upgrade redo at 77% - estimated complete at Dec 24 14:46:39
 Dec 24 14:46:14 2014 [6-3] recovery of upgrade redo at 83% - estimated complete at Dec 24 14:46:50
 Dec 24 14:46:32 2014 [6-3] recovery of upgrade redo at 87% - estimated complete at Dec 24 14:47:03
 Dec 24 14:46:49 2014 [6-3] recovery of upgrade redo at 88% - estimated complete at Dec 24 14:47:22
 Dec 24 14:47:05 2014 [6-3] recovery of upgrade redo at 89% - estimated complete at Dec 24 14:47:43
 Dec 24 14:47:22 2014 [6-3] recovery of upgrade redo at 90% - estimated complete at Dec 24 14:48:00
 Dec 24 14:47:39 2014 [6-3] recovery of upgrade redo at 91% - estimated complete at Dec 24 14:48:17
 Dec 24 14:47:56 2014 [6-3] recovery of upgrade redo at 92% - estimated complete at Dec 24 14:48:29
 Dec 24 14:48:12 2014 [6-3] recovery of upgrade redo at 94% - estimated complete at Dec 24 14:48:40
 Dec 24 14:48:29 2014 [6-3] recovery of upgrade redo at 96% - estimated complete at Dec 24 14:48:47
 Dec 24 14:48:46 2014 [6-3] recovery of upgrade redo at 99% - estimated complete at Dec 24 14:48:47
 Dec 24 14:49:02 2014 [6-4] media recovery has finished recovering through upgrade
### Stage 7: Switch back to the original roles prior to the rolling upgrade
NOTE: At this point, you have the option to perform a switchover
 which will restore RACDBSP back to a primary database and
 RACDBGO back to a physical standby database.  If you answer 'n'
 to the question below, RACDBSP will remain a physical standby
 database and RACDBGO will remain a primary database.
Do you want to perform a switchover? (y/n):

 

Nesse momento você tem a escolha de realizar o switchover da volta, na qual reverterá as roles. O atual standby volta a ficar como o primário/produção e o atual produção volta a ficar como standby. Tudo da forma original.

Vamos digitar Y e continuar. Caso você queira realizar o switchover em outra janela de manutenção, digite N e faça essa alteração no momento apropriado.

Do you want to perform a switchover? (y/n): y

Dec 24 14:49:29 2014 [7-1] continuing
Dec 24 14:49:30 2014 [7-2] verifying instance RACDB1 is the only active instance

WARN: RACDBGO is a RAC database.  Before this script can continue, you
      must manually reduce the RAC to a single instance.  This can be
      accomplished with the following step:

        1) Shutdown all instances other than instance RACDB1.
           eg: srvctl stop instance -d RACDBGO -i RACDB2

      Once these steps have been performed, enter 'y' to continue the script.
      If desired, you may enter 'n' to exit the script to perform the required
      steps, and recall the script to resume from this point.

Are you ready to continue? (y/n):

 

Ops, o atual produção (antigo standby/dataguard) esta em modo RAC, vamos desligar uma instância da forma que foi informada acima.

[oracle@oel1dg ~]$ cd $GRID_HOME
[oracle@oel1dg grid]$ cd bin/
[oracle@oel1dg bin]$ ./srvctl stop instance -d RACDBGO -i RACDB2

 

continuando…

Are you ready to continue? (y/n): y

Dec 24 14:50:46 2014 [7-2] continuing
Dec 24 14:50:46 2014 [7-2] verifying instance RACDB1 is the only active instance
Dec 24 14:50:48 2014 [7-2] waiting for apply lag to fall under 30 seconds
Dec 24 14:51:16 2014 [7-2] apply lag measured at 28 seconds
Dec 24 14:51:17 2014 [7-3] switching RACDBGO to become a physical standby
Dec 24 14:51:23 2014 [7-3] RACDBGO is now a physical standby
Dec 24 14:51:23 2014 [7-3] shutting down database RACDBGO
./physru.sh: line 3677: warning: here-document at line 3673 delimited by end-of-file (wanted `EOF')
Dec 24 14:51:23 2014 [7-3] mounting database RACDBGO
./physru.sh: line 3303: warning: here-document at line 3298 delimited by end-of-file (wanted `EOF')
Dec 24 14:51:50 2014 [7-4] waiting for standby RACDBSP to process end-of-redo from primary
Dec 24 14:51:51 2014 [7-5] switching RACDBSP to become the new primary
Dec 24 14:51:52 2014 [7-5] RACDBSP is now the new primary
Dec 24 14:51:52 2014 [7-5] opening database RACDBSP
./physru.sh: line 3339: warning: here-document at line 3334 delimited by end-of-file (wanted `EOF')
Dec 24 14:52:05 2014 [7-6] starting media recovery on RACDBGO
Dec 24 14:52:12 2014 [7-6] confirming media recovery is running

NOTE: Database RACDBSP has completed the switchover to the primary role, but
      instance RACDB1 is the only open instance.  For increased availability,
      Oracle recommends opening the remaining active instances which are
      currently in mounted mode by performing the following steps:

        1) Shutdown all instances other than instance RACDB1.
        eg: srvctl stop instance -d RACDBSP -i RACDB2

        2) Startup and open all inactive instances for database RACDBSP.
        eg: srvctl start database -d RACDBSP

NOTE: Database RACDBGO is no longer limited to single instance operation since
      it has completed the switchover to the physical standby role.  For
      increased  availability, Oracle recommends starting the inactive
      instances in the RAC by performing the following step:

        1) Startup and mount inactive instances for database RACDBGO
        eg: srvctl start database -d RACDBGO -o mount

### Stage 8: Statistics
script start time:                                           23-Dec-14 15:28:31
script finish time:                                          24-Dec-14 14:52:28
total script execution time:                                       +00 23:23:57
wait time for user upgrade:                                        +00 19:59:20
active script execution time:                                      +00 03:24:37
transient logical creation start time:                       23-Dec-14 15:37:12
transient logical creation finish time:                      23-Dec-14 15:38:08
primary to logical switchover start time:                    24-Dec-14 11:44:43
logical to primary switchover finish time:                   24-Dec-14 11:51:21
primary services offline for:                                      +00 00:06:38
total time former primary in physical role:                        +00 02:54:58
time to reach upgrade redo:
time to recover upgrade redo:                                      +00 01:18:50
primary to physical switchover start time:                   24-Dec-14 14:49:30
physical to primary switchover finish time:                  24-Dec-14 14:52:06
primary services offline for:                                      +00 00:02:36

SUCCESS: The physical rolling upgrade is complete

 

A execução do procedimento foi finalizada com sucesso. Não se assuste com o resumo das estatísticas acima sobre o tempo total de execução do meu ambiente pois como tive alguns problemas de espaço em disco eu deixava para completar a atividade em uma outra hora tanto por que, eu tenho outras atividades além de tentar escrever algo aqui no blog :)

Para finalizar vamos iniciar todas as instâncias do ambiente primário e todas do Dataguard conforme recomendação da Oracle.

Primário:

$GRID_HOME/bin/srvctl stop instance -d RACDBSP -i RACDB2
$GRID_HOME/bin/srvctl start database -d RACDBSP

 

Dataguard:

$GRID_HOME/bin/srvctl start database -d RACDBGO -o mount

 

Atualizando o cronograma.

Etapa Status Objetivo Ambiente Local/home Disponibilidade OBS
1 OK Rolling upgrade 12.1.0 Dataguard Grid Infrastructure Sem Downtime
2 OK Rolling upgrade 12.1.0. Produção Grid Infrastructure Sem Downtime
3 OK Instalar nova versão Soft. database out-of-place 12.1.0. Dataguard Database Sem Downtime
4 OK Instalar nova versão Soft. database out-of-place 12.1.0. Produção Database Sem Downtime
5 OK Upgrade de versão do database – Rolling Upgrades Made Easy Primeira-Fase. Dataguard Database Sem Downtime Switchover produção para dataguard que estará na nova versão 12.1.01
6 OK Upgrade de versão do database – Rolling Upgrades Made Easy Segunda-Fase. Produção/Dataguard Database Pequeno Downtime devido ao tempo do switchover
7 OK Upgrade de versão do database – Rolling Upgrades Made Easy Terceira-Fase. Produção/Dataguard Database Pequeno Downtime devido ao tempo do switchover Switchover para voltar o ambiente original

Pronto.. para finalizar com chave de ouro vamos habilitar o broker, desinstalar o antigo database home e realizar uma checagem final geral.
========================================================================================================================

 

 Habitar Data Guard Broker

Produção:

[oracle@oel1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.1.0 Production on Mon Dec 29 14:11:40 2014
Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Advanced Analytics and Real Application Testing options

SQL> show parameter DG_BROKER_START

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
dg_broker_start                      boolean     FALSE
SQL> alter system set DG_BROKER_START=TRUE SCOPE=BOTH SID='*';

System altered.

 

Dataguard:

[oracle@oel1dg ~]$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.1.0 Production on Mon Dec 29 14:10:48 2014
Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Advanced Analytics and Real Application Testing options

SQL> select open_mode from v$database;

OPEN_MODE
--------------------
READ ONLY

SQL> alter system set DG_BROKER_START=TRUE SCOPE=BOTH SID='*';

System altered.

 

Produção:

dgmgrl sys/oracle
SHOW CONFIGURATION

Screen Shot 2014-12-29 at 14.32.59

Dataguard:

select open_mode from v$database;

Screen Shot 2014-12-29 at 14.31.44

========================================================================================================================

Deinstall Old database home 11.2.0

Checando se exitem algum processo utilizando os antigos homes em ambos ambientes:

lsof |grep -i “11\.2\.0”

01020304

Antes de prosseguirmos, verifique o listener.ora localizado em ambos novos database e grid Infrastrutucture homes de ambos os ambientes (Produção e Dataguard).

Vou colocar um exemplo do meu listener.ora do grid_home do ambiente Dataguard:

[oracle@oel1dg admin]$ cat listener.ora
LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))            # line added by Agent
RAC_LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=RAC_LISTENER))))            # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON                # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN2=ON                # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN3=ON                # line added by Agent

SID_LIST_LISTENER =
        (SID_LIST =
           (SID_DESC =
             (GLOBAL_DBNAME = RACDBGO)
             (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
             (SID_NAME = RACDBGO)
           )
           (SID_DESC =
             (GLOBAL_DBNAME = RACDBSP)
             (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
             (SID_NAME = RACDBSP)
           )
           (SID_DESC =
             (GLOBAL_DBNAME = RACDBGO_DGMGRL.localdomain)
             (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
             (SID_NAME = RACDBGO)
           )
           (SID_DESC =
             (GLOBAL_DBNAME = RACDBSP_DGMGRL.localdomain)
             (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
             (SID_NAME = RACDBSP_DGMGRL)
           )
         )

SID_LIST_LISTENER_SCAN1 =
        (SID_LIST =
          (SID_DESC =
             (GLOBAL_DBNAME = RACDBSP)
             (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
             (SID_NAME = RACDBSP)
          )
          (SID_DESC =
             (GLOBAL_DBNAME = RACDBGO)
             (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
             (SID_NAME = RACDBGO)
           )
           (SID_DESC =
             (GLOBAL_DBNAME = RACDBSP_DGMGRL.localdomain)
             (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
             (SID_NAME = RACDBSP)
           )
           (SID_DESC =
             (GLOBAL_DBNAME = RACDBGO_DGMGRL.localdomain)
             (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
             (SID_NAME = RACDBGO_DGMGRL)
           )
          )

SID_LIST_LISTENER_SCAN2 =
        (SID_LIST =
          (SID_DESC =
             (GLOBAL_DBNAME = RACDBSP)
             (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
             (SID_NAME = RACDBSP)
          )
          (SID_DESC =
             (GLOBAL_DBNAME = RACDBGO)
             (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
             (SID_NAME = RACDBGO)
           )
           (SID_DESC =
             (GLOBAL_DBNAME = RACDBSP_DGMGRL.localdomain)
             (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
             (SID_NAME = RACDBSP)
           )
           (SID_DESC =
             (GLOBAL_DBNAME = RACDBGO_DGMGRL.localdomain)
             (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
             (SID_NAME = RACDBGO_DGMGRL)
           )
          )

SID_LIST_LISTENER_SCAN3 =
        (SID_LIST =
          (SID_DESC =
             (GLOBAL_DBNAME = RACDBSP)
             (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
             (SID_NAME = RACDBSP)
          )
          (SID_DESC =
             (GLOBAL_DBNAME = RACDBGO)
             (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
             (SID_NAME = RACDBGO)
           )
           (SID_DESC =
             (GLOBAL_DBNAME = RACDBSP_DGMGRL.localdomain)
             (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
             (SID_NAME = RACDBSP)
           )
           (SID_DESC =
             (GLOBAL_DBNAME = RACDBGO_DGMGRL.localdomain)
             (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
             (SID_NAME = RACDBGO_DGMGRL)
           )
          )

LISTENER_SCAN3=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN3))))                # line added by Agent
LISTENER_SCAN2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2))))                # line added by Agent
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))                # line added by Agent
ADR_BASE_LISTENER_SCAN1 = /u01/app/oracle
ADR_BASE_LISTENER_SCAN3 = /u01/app/oracle
ADR_BASE_LISTENER_SCAN3 = /u01/app/oracle

VALID_NODE_CHECKING_REGISTRATION_LISTENER_SCAN1=OFF             # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER_SCAN2=OFF             # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER_SCAN3=OFF             # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_RAC_LISTENER=ON          # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_RAC_LISTENER=SUBNET            # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent
VALID_NODE_CHECKING_REGISTRATION_LISTENER=SUBNET                # line added by Agent

 

Vejam que o ORACLE_HOME ainda esta sendo apontado para a antiga instalação e se desinstalássemos o antigo software agora, isso certamente causaria problema em todo o ambiente.

O objetivo é alterar esses arquivos de uma maneira que não cause indisponibilidade ou a menor possível.

Aqui em nosso exemplo executarei somente no node1 do Produção, mas deve ser feitos em todos os nodes dos 2 ambientes (Produção e Dataguard) antes de desinstalarmos o software database antigo.

Procedimento:

1. Desligue somente um scan e um scan listener.
2. Edite o listener.ora colocando o novo database home somente no scan listener desligado acima.
3. Inicie o scan listener editado.

 

Ex: Vou iniciar o procedimento desligando o scan listener de número 3. Isso não causará problemas de conexão pois ainda existem os outros 2 suportando o ambiente.

[oracle@oel1 bin]$ pwd
/u01/app/12.1.0/grid/bin
[oracle@oel1 bin]$ ./srvctl stop scan_listener -scannumber 3
[oracle@oel1 bin]$ ./srvctl stop scan -scannumber 3

* Edite o arquivo listener.ora e altere somente o ORACLE_HOME do SID_LIST_LISTENER_SCAN3, atualizando para o novo database home.
Feito isso, inicie o scan 3 novamente.
[oracle@oel1 bin]$ pwd
/u01/app/12.1.0/grid/bin
[oracle@oel1 bin]$ ./srvctl start scan -scannumber 3
[oracle@oel1 bin]$ ./srvctl start scan_listener -scannumber 3

 

Faça esse procedimento com todos os scan e scan listener’s, listener um a um e com o restante que você possua em seu ambiente.

Ótimo, podemos prosseguir para a desinstalação…..

Como sempre, vamos iniciar o processo no ambiente Dataguard por questões já sabidas.

Vá para o antigo database ORACLE_HOME (11.2.0) e execute o deinstall como informado abaixo:

[oracle@oel1dg deinstall]$ pwd
/u01/app/oracle/product/11.2.0/db_1/deinstall
[oracle@oel1dg deinstall]$ ./deinstall
Checking for required files and bootstrapping ...
Please wait ...
Location of logs /u01/app/oraInventory/logs/

############ ORACLE DEINSTALL & DECONFIG TOOL START ############

######################### CHECK OPERATION START #########################
## [START] Install check configuration ##

Checking for existence of the Oracle home location /u01/app/oracle/product/11.2.0/db_1
Oracle Home type selected for deinstall is: Oracle Real Application Cluster Database
Oracle Base selected for deinstall is: /u01/app/oracle
Checking for existence of central inventory location /u01/app/oraInventory
Checking for existence of the Oracle Grid Infrastructure home /u01/app/12.1.0/grid
The following nodes are part of this cluster: oel1dg,oel2dg
Checking for sufficient temp space availability on node(s) : 'oel1dg,oel2dg'

## [END] Install check configuration ##

Network Configuration check config START

Network de-configuration trace file location: /u01/app/oraInventory/logs/netdc_check2014-12-29_02-48-56-PM.log

Specify all Single Instance listeners that are to be de-configured on node "oel1dg" [LISTENER_UPG]:

Network Configuration check config END

Database Check Configuration START

Database de-configuration trace file location: /u01/app/oraInventory/logs/databasedc_check2014-12-29_02-50-44-PM.log

Use comma as separator when specifying list of values as input

Specify the list of database names that are configured in this Oracle home []:
Database Check Configuration END

Enterprise Manager Configuration Assistant START

EMCA de-configuration trace file location: /u01/app/oraInventory/logs/emcadc_check2014-12-29_02-50-47-PM.log

Enterprise Manager Configuration Assistant END
Oracle Configuration Manager check START
OCM check log file location : /u01/app/oraInventory/logs//ocm_check8712.log
Oracle Configuration Manager check END

######################### CHECK OPERATION END #########################

####################### CHECK OPERATION SUMMARY #######################
Oracle Grid Infrastructure Home is: /u01/app/12.1.0/grid
The cluster node(s) on which the Oracle home deinstallation will be performed are:oel1dg,oel2dg
Oracle Home selected for deinstall is: /u01/app/oracle/product/11.2.0/db_1
Inventory Location where the Oracle home registered is: /u01/app/oraInventory
Following Single Instance listener(s) on node "oel1dg" will be de-configured: LISTENER_UPG
No Enterprise Manager configuration to be updated for any database(s)
No Enterprise Manager ASM targets to update
No Enterprise Manager listener targets to migrate
Checking the config status for CCR
oel1dg : Oracle Home exists with CCR directory, but CCR is not configured
oel2dg : Oracle Home exists with CCR directory, but CCR is not configured
CCR check is finished
Do you want to continue (y - yes, n - no)? [n]: y
A log of this session will be written to: '/u01/app/oraInventory/logs/deinstall_deconfig2014-12-29_02-48-35-PM.out'
Any error messages from this session will be written to: '/u01/app/oraInventory/logs/deinstall_deconfig2014-12-29_02-48-35-PM.err'

######################## CLEAN OPERATION START ########################

Enterprise Manager Configuration Assistant START

EMCA de-configuration trace file location: /u01/app/oraInventory/logs/emcadc_clean2014-12-29_02-50-47-PM.log

Updating Enterprise Manager ASM targets (if any)
Updating Enterprise Manager listener targets (if any)
Enterprise Manager Configuration Assistant END
Database de-configuration trace file location: /u01/app/oraInventory/logs/databasedc_clean2014-12-29_02-52-39-PM.log

Network Configuration clean config START

Network de-configuration trace file location: /u01/app/oraInventory/logs/netdc_clean2014-12-29_02-52-39-PM.log

De-configuring Single Instance listener(s) on node "oel1dg": LISTENER_UPG

De-configuring listener: LISTENER_UPG
    Stopping listener on node "oel1dg": LISTENER_UPG
    Warning: Failed to stop listener. Listener may not be running.
    Deleting listener: LISTENER_UPG
    Listener deleted successfully.
Listener de-configured successfully.

De-configuring Listener configuration file on all nodes...
Listener configuration file de-configured successfully.

De-configuring Naming Methods configuration file on all nodes...
Naming Methods configuration file de-configured successfully.

De-configuring Local Net Service Names configuration file on all nodes...
Local Net Service Names configuration file de-configured successfully.

De-configuring Directory Usage configuration file on all nodes...
Directory Usage configuration file de-configured successfully.

De-configuring backup files on all nodes...
Backup files de-configured successfully.

The network configuration has been cleaned up successfully.

Network Configuration clean config END

Oracle Configuration Manager clean START
OCM clean log file location : /u01/app/oraInventory/logs//ocm_clean8712.log
Oracle Configuration Manager clean END
Setting the force flag to false
Setting the force flag to cleanup the Oracle Base
Oracle Universal Installer clean START

Detach Oracle home '/u01/app/oracle/product/11.2.0/db_1' from the central inventory on the local node : Done

Delete directory '/u01/app/oracle/product/11.2.0/db_1' on the local node : Done

The Oracle Base directory '/u01/app/oracle' will not be removed on local node. The directory is in use by Oracle Home '/u01/app/12.1.0/grid'.

Detach Oracle home '/u01/app/oracle/product/11.2.0/db_1' from the central inventory on the remote nodes 'oel2dg' : Done

Delete directory '/u01/app/oracle/product/11.2.0/db_1' on the remote nodes 'oel2dg' : Done

The Oracle Base directory '/u01/app/oracle' will not be removed on node 'oel2dg'. The directory is in use by Oracle Home '/u01/app/12.1.0/grid'.

Oracle Universal Installer cleanup was successful.

Oracle Universal Installer clean END

## [START] Oracle install clean ##

Clean install operation removing temporary directory '/tmp/deinstall2014-12-29_02-48-20PM' on node 'oel1dg'
Clean install operation removing temporary directory '/tmp/deinstall2014-12-29_02-48-20PM' on node 'oel2dg'

## [END] Oracle install clean ##

######################### CLEAN OPERATION END #########################

####################### CLEAN OPERATION SUMMARY #######################
Following Single Instance listener(s) on node "oel1dg" were de-configured successfully: LISTENER_UPG
Cleaning the config for CCR
As CCR is not configured, so skipping the cleaning of CCR configuration
CCR clean is finished
Successfully detached Oracle home '/u01/app/oracle/product/11.2.0/db_1' from the central inventory on the local node.
Successfully deleted directory '/u01/app/oracle/product/11.2.0/db_1' on the local node.
Successfully detached Oracle home '/u01/app/oracle/product/11.2.0/db_1' from the central inventory on the remote nodes 'oel2dg'.
Successfully deleted directory '/u01/app/oracle/product/11.2.0/db_1' on the remote nodes 'oel2dg'.
Oracle Universal Installer cleanup was successful.

Oracle deinstall tool successfully cleaned up temporary directories.
#######################################################################

############# ORACLE DEINSTALL & DECONFIG TOOL END #############

 

Pronto, antigo database home deletado com sucesso em ambos os nodes do ambiente Dataguard inclusive deletando o listener estático criado.

Repita esse processo no ambiente de Produção. Não tem necessidade de replica-lo aqui sendo que o procedimento é examente igual ao que acabamos de executar…

========================================================================================================================

Application/Resource programs

Altere as variáveis do database home, Grid Infrastructure home para a nova localização bem como alias no tns e etc dos script programs existentes em seu ambiente. No meu caso eu tenho o resource dbfs_mount e ggate_app. Após alterar as informações antigas pelas novas, inicie novamente. Ex do resource dbfs:

[oracle@oel1 bin]$ ./crsctl start res dbfs_mount
CRS-2672: Attempting to start 'dbfs_mount' on 'oel2'
CRS-2672: Attempting to start 'dbfs_mount' on 'oel1'
CRS-2676: Start of 'dbfs_mount' on 'oel2' succeeded
CRS-2676: Start of 'dbfs_mount' on 'oel1' succeeded
[oracle@oel1 /]$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              25G   18G  5.9G  75% /
tmpfs                 2.3G  578M  1.7G  26% /dev/shm
/dev/sda1             194M   51M  134M  28% /boot
Downloads             466G  463G  2.2G 100% /media/sf_Downloads
/dev/asm/acfs_gg-245  4.0G  669M  3.3G  17% /goldengate
dbfs-@racdbm.local:/  9.8G  120K  9.8G   1% /gg01

 

========================================================================================================================

Checagem final

Produção:

[oracle@oel1 bin]$ ./crsctl stat res -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
dbfs_mount
               ONLINE  ONLINE       oel1                     STABLE
               ONLINE  ONLINE       oel2                     STABLE
ora.DATA.dg
               ONLINE  ONLINE       oel1                     STABLE
               ONLINE  ONLINE       oel2                     STABLE
ora.FS1.dg
               ONLINE  ONLINE       oel1                     STABLE
               ONLINE  ONLINE       oel2                     STABLE
ora.GG1.ACFS_GG.advm
               ONLINE  ONLINE       oel1                     Volume device /dev/a
                                                             sm/acfs_gg-245 is on
                                                             line,STABLE
               ONLINE  ONLINE       oel2                     Volume device /dev/a
                                                             sm/acfs_gg-245 is on
                                                             line,STABLE
ora.GG1.dg
               ONLINE  ONLINE       oel1                     STABLE
               ONLINE  ONLINE       oel2                     STABLE
ora.LISTENER.lsnr
               ONLINE  ONLINE       oel1                     STABLE
               ONLINE  ONLINE       oel2                     STABLE
ora.LISTENER_GG.lsnr
               ONLINE  ONLINE       oel1                     STABLE
               ONLINE  ONLINE       oel2                     STABLE
ora.RAC_LISTENER.lsnr
               ONLINE  ONLINE       oel1                     STABLE
               ONLINE  ONLINE       oel2                     STABLE
ora.asm
               ONLINE  ONLINE       oel1                     Started,STABLE
               ONLINE  ONLINE       oel2                     Started,STABLE
ora.gg1.acfs_gg.acfs
               ONLINE  ONLINE       oel1                     mounted on /goldenga
                                                             te,STABLE
               ONLINE  ONLINE       oel2                     mounted on /goldenga
                                                             te,STABLE
ora.net1.network
               ONLINE  ONLINE       oel1                     STABLE
               ONLINE  ONLINE       oel2                     STABLE
ora.ons
               ONLINE  ONLINE       oel1                     STABLE
               ONLINE  ONLINE       oel2                     STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ggate_app
      1        ONLINE  ONLINE       oel1                     STABLE
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       oel2                     STABLE
ora.LISTENER_SCAN2.lsnr
      1        ONLINE  ONLINE       oel1                     STABLE
ora.LISTENER_SCAN3.lsnr
      1        ONLINE  ONLINE       oel1                     STABLE
ora.cvu
      1        ONLINE  ONLINE       oel1                     STABLE
ora.oc4j
      1        OFFLINE OFFLINE                               STABLE
ora.oel1.vip
      1        ONLINE  ONLINE       oel1                     STABLE
ora.oel2.vip
      1        ONLINE  ONLINE       oel2                     STABLE
ora.racdbsp.db
      1        ONLINE  ONLINE       oel1                     Open,STABLE
      2        ONLINE  ONLINE       oel2                     Open,STABLE
ora.scan1.vip
      1        ONLINE  ONLINE       oel2                     STABLE
ora.scan2.vip
      1        ONLINE  ONLINE       oel1                     STABLE
ora.scan3.vip
      1        ONLINE  ONLINE       oel1                     STABLE
oragg-vip
      1        ONLINE  ONLINE       oel1                     STABLE
--------------------------------------------------------------------------------
SQL> SELECT A.INST_ID, B.INSTANCE_NAME, A.OPEN_MODE, A.DATAGUARD_BROKER, A.DATABASE_ROLE FROM GV$DATABASE A, GV$INSTANCE B WHERE A.INST_ID = B.INST_ID;

   INST_ID INSTANCE_NAME    OPEN_MODE            DATAGUAR DATABASE_ROLE
---------- ---------------- -------------------- -------- ----------------
         1 RACDB1           READ WRITE           ENABLED  PRIMARY
         2 RACDB2           READ WRITE           ENABLED  PRIMARY

 

Dataguard:

[oracle@oel1dg bin]$ ./crsctl stat res -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA.dg
               ONLINE  ONLINE       oel1dg                   STABLE
               ONLINE  ONLINE       oel2dg                   STABLE
ora.FS1.dg
               ONLINE  ONLINE       oel1dg                   STABLE
               ONLINE  ONLINE       oel2dg                   STABLE
ora.GG01.ACFS_VOL1.advm
               ONLINE  ONLINE       oel1dg                   Volume device /dev/a
                                                             sm/acfs_vol1-271 is
                                                             online,STABLE
               ONLINE  ONLINE       oel2dg                   Volume device /dev/a
                                                             sm/acfs_vol1-271 is
                                                             online,STABLE
ora.GG01.dg
               ONLINE  ONLINE       oel1dg                   STABLE
               ONLINE  ONLINE       oel2dg                   STABLE
ora.LISTENER.lsnr
               ONLINE  ONLINE       oel1dg                   STABLE
               ONLINE  ONLINE       oel2dg                   STABLE
ora.RAC_LISTENER.lsnr
               ONLINE  ONLINE       oel1dg                   STABLE
               ONLINE  ONLINE       oel2dg                   STABLE
ora.asm
               ONLINE  ONLINE       oel1dg                   Started,STABLE
               ONLINE  ONLINE       oel2dg                   Started,STABLE
ora.gg01.acfs_vol1.acfs
               ONLINE  ONLINE       oel1dg                   mounted on /goldenga
                                                             te,STABLE
               ONLINE  ONLINE       oel2dg                   mounted on /goldenga
                                                             te,STABLE
ora.net1.network
               ONLINE  ONLINE       oel1dg                   STABLE
               ONLINE  ONLINE       oel2dg                   STABLE
ora.ons
               ONLINE  ONLINE       oel1dg                   STABLE
               ONLINE  ONLINE       oel2dg                   STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       oel2dg                   STABLE
ora.LISTENER_SCAN2.lsnr
      1        ONLINE  ONLINE       oel1dg                   STABLE
ora.LISTENER_SCAN3.lsnr
      1        ONLINE  ONLINE       oel1dg                   STABLE
ora.cvu
      1        ONLINE  ONLINE       oel1dg                   STABLE
ora.oc4j
      1        OFFLINE OFFLINE                               STABLE
ora.oel1dg.vip
      1        ONLINE  ONLINE       oel1dg                   STABLE
ora.oel2dg.vip
      1        ONLINE  ONLINE       oel2dg                   STABLE
ora.racdbgo.db
      1        ONLINE  ONLINE       oel1dg                   Open,Readonly,STABLE
      2        ONLINE  ONLINE       oel2dg                   Open,Readonly,STABLE
ora.scan1.vip
      1        ONLINE  ONLINE       oel2dg                   STABLE
ora.scan2.vip
      1        ONLINE  ONLINE       oel1dg                   STABLE
ora.scan3.vip
      1        ONLINE  ONLINE       oel1dg                   STABLE
--------------------------------------------------------------------------------
SQL> SELECT A.INST_ID, B.INSTANCE_NAME, A.OPEN_MODE, A.DATAGUARD_BROKER, A.DATABASE_ROLE FROM GV$DATABASE A, GV$INSTANCE B WHERE A.INST_ID = B.INST_ID;

   INST_ID INSTANCE_NAME    OPEN_MODE            DATAGUAR DATABASE_ROLE
---------- ---------------- -------------------- -------- ----------------
         1 RACDB1           READ ONLY WITH APPLY ENABLED  PHYSICAL STANDBY
         2 RACDB2           READ ONLY WITH APPLY ENABLED  PHYSICAL STANDBY

 

As atividades aqui demonstradas são mais tranquilas do que parecem ser. A grande parte dos problemas encontrados foram devido ao pouco espaço em disco do meu ambiente onde foi necessário realizar outras atividades paralelas para se conseguir chegar ao objetivo final, mas por outro lado se não fossem esses problemas o conteúdo ficaria menos emocionante e o objetivo aqui não é esse, mas sim demonstrar a maior quantidade de problemas possíveis e suas resoluções/explicações e ao mesmo tempo como tentar evita-los….

Daria para quebrar esse post em uns 3, mas achei melhor deixar tudo centralizado em apenas 1.

Espero que tenham gostado…

Forte abraço


Fontes: 
http://www.oracle.com/technetwork/pt/index.html
http://metalink.oracle.com
http://docs.oracle.com/en/
http://www.google.com

2 thoughts on “Upgrade ambiente Produção e Dataguard Oracle RAC 11.2.0.4 para 12.1.0.1”

  1. Roger says:

    Parabéns Wellington!!!
    Excelemente conteúdo e explicação, você abordou totalmente essa atividade complexa.

    1. admin says:

      Muito obrigado…
      Espero que seja útil para algumas pessoas do jeito que é para mim…

      Forte abraço

Leave a Reply to admin Cancel reply

Your email address will not be published. Required fields are marked *