05
set
07

Oracle Fail Over (Standby Database)

Neste artigo iremos aprender à montar o famoso Oracle Fail Over mais conhecido como Standby. Esse ambiente não é nada mais nada menos do que uma replicação de uma base de dados Oracle para uma outra base de dados também Oracle. Vejamos a figura abaixo que ilustra a situação:

  

Oracle Fail Over é muito utilizado para “meso-alta-disponibilidade”. Claro que não podemos chamar essa solução de alta-disponibilidade pois essa denominação é do Oracle Real Application Cluster (RAC). Qual ambiente de Banco de Dados não precisa de segurança? Alguns precisam de mais outros de menos mas, todos precisam de segurança!! Uma maneira eficaz de manter uma cópia do Banco de Dados é fazer, frequentemente, uma replicação de uma base de dados para outra, automaticamente.

Neste artigo, montaremos um fail over onde, o Banco de Dados standby ficará aberto somente para leitura e não possibilitará a alteração dos dados. A replicação será feita de 30 em 30 minutos mas poderá ser ajustada de acordo com a necessidade. Toda a operação será automatizada e feita através de um script. Fiquem atentos, pois todos os mínimos detalhes serão mostrados aqui para que possamos enriquecer nosso conhecimento.

Ah! Um detalhe…. esse ambiente será montado em linux podendo ser adaptado para windows facilemente!!

   

Primeiro passo:

Identificar os componentes do ambiente:

  1. Primary Database;
  2. Standby Database;
  3. Sites.

  

Segundo Passo:

Verificar os pré-requisitos para implementação do Standby:

  1. O sistema operacional dos dois servidores precisam ser os mesmos mas não necessariamente da mesma distribuição, por exemplo, se no primary database tiver um Linux Red Hat 4, no standby database deverá ter linux também mas poderá ter Red Hat 3 ou 5. Não pode montar esse ambiente que iremos criar se o Primary tiver linux e o Standby tiver outra plataforma como windows ou solaris, por exemplo.
  2. A estrutura do Banco de Dados dos dois servidores deve ser igual, por exemplo, se os diretórios udump, cdump, adump, etc do Primary estiver em /oracle/products/admin, no Standby devem estar no mesmo diretório. Da mesma forma com os dados, redo e controlfiles.
  3. Os servidores não precisam ser necessariamente iguais. Dependendo da aplicabilidade, não é preciso que sejam iguais, por exemplo, se a minha intenção é montar um banco standby apenas para backup, não é necessário que os dois servidores tenham a mesma robustez, posso aceitar um servidor inferior para o standby. Da mesma forma se a minha intenção for montar um standby apenas para leitura (com é o nosso caso).

Agora sim, já estamos prontos para colocarmos a mão na massa….

  

A primeira coisa à fazer é colocar nosso Banco de Dados Primary (Banco de Dados de produção) em modo archivelog, caso não esteja. Se seu banco não pode ser derrubado pó conta de contingência, devemos esperar o momento certo para isso. Esse momento será descrito daqui à pouco. Vamos definir onde os logs serão arquivados. Por questão de segurança, devemos definir 2 (dois ) locais para isso. Sendo assim, definiremos, caso não esteja definido, os locais /flash/archivelogs/arc1 e /flash/archivelogs/arc2.

Admitindo que nosso banco de dados de produção (primary) terá que ficar o menor tempo possível fora do ar, iremos “bolar um plano infalível”.

Esse plano infalível contém os seguinte passos:

  1. Preparar o servidor standby;
  2. Instalar o software Oracle;
  3. Se certificar se os dois servidores estão acessíveis entre si, na rede;
  4. Alterar os parêmetros (caso não esteja setado) log_archive_dest_1 e log_archive_dest_2 para apontar respectivamente para os diretórios /flash/archivelogs/arc1 e /flash/archivelogs/arc2;
  5. Derrubar o banco de produção;
  6. coloca-lo em modo mount;
  7. Habilitar o arquivamento;
  8. derrubar o banco de produção;
  9. copiar os arquivos para o servidor standby;
  10. Levantar o banco de produção;
  11. configurar o restante do ambiente, tranquilamente e sem riscos.

  

Agora que já temos um roteiro, vamos detalhar cada passo dele…

  

É aconselhável instalar o sistema operacional com o particionamento pertinentes ao Banco de Dados igual ao do servidor de produção.

 

Temos que definir alguns parâmetros como ip, nome do servidor, etc…

 

Servidor Primary:

IP: 192.160.0.1

Nome do Servidor: primary

Senha do usuário root: 123456

Senha do usuário oracle: oracle

  

Servidor Standby:

IP: 192.160.0.2

Nome do Servidor: standby

Senha do usuário root: 123456

Senha do usuário oracle: oracle

  

Depois de instalar o sistema operacional, basta instalar o software da Oracle. É importante lembrar que o ORACLE_HOME não precisa ser igual ao do servidor de produção.

Executemos um comando ping de um servidor para o outro apenas para nos certificarmos que estão “conversando” entre si.

Iremos criar o diretório admin no servidor standby. Esse diretório deve ser criado juntamente com seus subdiretórios (adump, cdump, udump, etc). Não é necessário copiar os arquivos contidos nesses diretórios, basta apenas criar/copiar os diretórios vazios. Criemos também os diretórios (vazios) do repositório dos dados (exemplo, /oradata/db) e dos logs (/flash/archivelogs/arc1 e /flash/archivelogs/arc1).

Vamos agora alterar, no banco de produção pois, o banco standby ainda não foi criado, os parâmetros log_archive_dest_1 e log_archive_dest_2 para apontar, respectivamente, para /flash/archivelogs/arc1 e /flash/archivelogs/arc2. Faremos isso com os seguintes comandos:

sql> alter system set log_archive_dest_1=’LOCATION=/flash/archivelogs/arc1’ scope=spfile;

sql> alter system set log_archive_dest_2=’LOCATION=/flash/archivelogs/arc2’ scope=spfile;

Depois de alterar as localizações dos archivelogs, vamos derrubar o banco de produção, montá-lo, colocarmos em modo archivelog, derruba-lo novamente:

 

sql> shutdown immediate

sql> startup mount

sql> alter database archivelog;

sql> shutdown immediate

Teremos que criar um standby controlfile apartir do banco de produção (primary). Para fazermos isso, basta executarmos os comandos abaixo:

sql> startup mount

sql> alter database create standby controlfile as ‘/orace/ctrlstandby.ora’;

sql> shutdown immediate

  

  

Agora iremos copiar todos os arquivos do banco de dados de produção para o servidor standby. Os arquivos devem ficar no mesmo diretório no servidor standby!!! Os controlfiles não serão copiados, ao invés disso, o novo controlfile que acabamos de criar (stanbdby.ctl) será copiado para o servidor standby colocando-o na mesma localização que se encontra os controlfiles no servidor de produção (primary). Depois de copiar o standby controlfile, teremos que renomeá-lo para o mesmo nome dos controlfiles do servidor de produção. Sabemos que o Oracle precisa ter pelo menos 3 (três) controlfiles e que todos eles são iguais, sendo assim, basta fazermos três copias do standby controlfile e renomeá-los.

 

Para efetuar essa cópia, fica à seu critério a forma como proceder, ou seja, você pode criar uma partição NFS, colocar os arquivos num hd externo e levar para o servidor standby, copiar utilizando o scp, etc. Vamos utilizar o scp para realizar essa operação. Para que os servidores “conversem” entre si, sem complicações, vamos editar o arquivo hosts dos dois servidores (esse método também se aplica para o windows):

 

[root@primary /]$ vi /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1          localhost.localdomain   localhost

192.168.0.1     primary

192.168.0.2     standby

  

No caso do windows, clique em iniciar>executar e digite %systemroot%\system32\drivers\etc\hosts e edite o arquivo:

# Copyright (c) 1993-1999 Microsoft Corp.

#

# Este é um arquivo HOSTS de exemplo usado pelo Microsoft TCP/IP para Windows.

#

# Este arquivo contém os mapeamentos de endereços IP para nomes de host. Cada

# entrada deve ser mantida em uma linha individual. O endereço IP deve

# ser colocado na primeira coluna, seguido do nome de host correspondente.

# O endereço IP e o nome do host devem ser separados por pelo menos um

# espaço.

#

# Adicionalmente, comentários (como estes) podem ser inseridos em linhas

# individuais ou após o nome de computador indicado por um símbolo ‘#’.

#

# Por exemplo:

#

#      102.54.94.97     rino.acme.com           # servidor de origem

#       38.25.63.10     x.acme.com              # host cliente x

127.0.0.1       localhost

192.168.0.1     primary

192.168.0.2     standby

  

Depois de editar o arquivo hosts dos dois servidores, vamos copiar os arquivos do Banco de Dados de Produção (primary) para o servidor standby, utilizando o scp:

 

[oracle@primary oracle]$ scp /oradata/producao/* oracle@standby:/oradata/producao/

[oracle@primary oracle]$ scp /flash/archivelogs/arc1/* oracle@standby:/flash/archivelogs/arc1

[oracle@primary oracle]$ scp /flash/archivelogs/arc2/* oracle@standby:/flash/archivelogs/arc2

 

Ao executar o scp pela primeira vez, ele deve pedir a senha do usuário oracle do servidor standby, basta informar e efetuar a cópia. Dependendo do tamanho do banco de dados, do link entre os dois servidores e da tolerância da indisponibilidade do banco de produção, pode-se adotar outro método para transferência desses arquivos.

Depois de copiar os arquivos, mesmo que o banco standby não esteja no ar, já pode levantar o banco de dados de produção (primary).

 

sql> startup

 

Como sabemos, para podermos iniciar qualquer Banco de Dados Oracle, precisamos de um SPFILE ou PFILE. O nosso banco standby será inicado com o PFILE, sendo assim, teremos que criar um pfile para o banco standby:

 sql> create pfile=’/oracle/initstandby.ora’ from spfile; 

 

 

 

Pronto, agora basta copiar o initstandby.ora para o diretório $ORACLE_HOME/dbs do servidor standby.

Está tudo no seu devido lugar, se quisermos neste momento levantar o banco standby, podemos!! Mas não iremos fazê-lo agora…. vamos deixar para a AUTOMATIZAÇÂO. Para isso, precisamos fazer alguns preparativos para a automatização.

 Nesse nosso projetinho, iremos automatizar a replicação com SCP mas nada impede de usar o NFS que além de ser mais fácil, é mais rápido também. Mesmo assim, iremos fazer da forma mais difícil pois, quem está preparado para o mais difícil, tira o mais fácil de letra!! Caso você tenha copiado os arquivos via SCP, lembra que o sistema operacional pediu autenticação (senha)? Então, na automatização ele não pode pedir senha…. sendo assim, vamos configurar o ambiente para trabalhar com trust connection. 

Para configurar o ambiente para não pedir senha (será útil tanto para ssh como para scp), basta seguirmos as instruções abaixo:

É importante salientar que não recomendável que essa configuração seja feita para o usuário ROOT, por questões de segurança. Sendo assim, iremos fazer para o usuário ORACLE do sistema operacional.

Entre com o usuário ORACLE no servidor de produção e execute o seguinte comando:

 [oracle@standby: ~]$ ssh-keygen -t dsa

Generating public/private dsa key pair.
Enter file in which to save the key (/home/oracle/.ssh/id_dsa):
Created directory ‘/home/acesso/.ssh’.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/oracle/.ssh/id_dsa.
Your public key has been saved in /home/oracle/.ssh/id_dsa.pub.
The key fingerprint is:
84:fe:az:f7:ee:9f:6f:45:b7:66:96:11:9u:81:50:7f oracle@oracle

Esse procedimento criará 2 (dois ) arquivos: id_dsa e id_dsa.pub

Agora digite:

[oracle@primary: ~]$ cd ~/.ssh

[oracle@primary: ~]$ cp id_ds.pub authorized_keys 

Descomente a linha: AuthorizedKeysFile %h/.ssh/authorized_keys    no arquivo /etc/ssh/sshd_config.

Agora, reinicie o SSH e vamos testar localmente com o seguinte comando:

 [oracle@primary: ~]$ ssh localhost

Last login: Sun Dec 15 18:51:32 2002 from server.linuxajuda.org
Linux 2.4.18.
[oracle@primary:~]$

Pronto, agora vamos configurar para acessar remotamente o servidor standby sem pedir senha. Envie sua chave pública para o standby com o seguinte comando:

 

[oracle@primary: ~]$ scp id_dsa.pub oracle@standby:/home/oracle
oracle@standby’s password:
id_dsa.pub 100% |*****************************| 612 00:00

 

Pronto! Agora logamos no standby e inserimos nossa chave no authorized_keys dele

[oracle@primary: ~]$ ssh oracle@standby

Insira pela ultima vez a sua senha e execute o seguinte comando:

  [oracle@standby: ~]$ cat id_dsa.pub >> .ssh/authorized_keys 

Caso o arquivo de destino não existit, basta criá-lo:

 [oracle@standby: ~]$ touch .ssh/authorized_keys 

O standby também tem que ter a linha descomentada no /etc/ssh/sshd_config


[
oracle@standby:~/.ssh]$ ssh oracle@standby
Last login: Mon Nov 03 19:11:54 2003 from server.linuxajuda.org
Linux 2.4.18.
[oracle@standby~]$

 

Se chegamos até aqui, então já foi uma grande vitória!! Só faltam alguns passos para completarmos o processo de automação.

Agora iremos criar um usuário chamado standbypitt no banco de produção (primary) com a senha 123bypitt e conceder a role connect e DBA para este usuário.

Abaixo segue de graça, uma mão na roda, o script de replicação que ainda faz o backup dos archivelogs. Para fazer a replicação, basta executar esse script. Para fazer o backup basta executar esse script com o parâmetro BACKUP:

 [oracle@producao: scripts]$ ./replicação.sh BACKUP  

Basta criar os diretório que aparecem no script ou alterá-lo para melhor se adequar ao seu ambiente e pronto!!! Lembrando que esse script deverá ser executado no servidor de produção (primary) com o usuário oracle e, para automatizar, basta agendá-lo no crontab e fazê-lo executar o script de 30 em 30 minutos. A execução do script com o parâmetro BACKUP, sugiro que seja feito uma vez por dia no minuto 15, já que a replicação será feita ao 0 (zero) minutos e aos 30 (trinta) minutos.

  

#!/bin/sh

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

# Objetivo: Replicar dados do Banco de Dados Oracle                                                              #

# Autor   : Eder Ferreira                                                                                                             #

# Data    : 24/08/2007                                                                                                               #

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

  

ORACLE_SID=producao

REDE=pitt

export ORACLE_SIDBACKUP=BACKUP   crialog()

{

 DATA=`date +%Y_%m_%d_%H_%M_%S`

 echo “Erro na rede…”                                       >> /oracle/scripts/log/erro_$DATA.log

 echo “Nao foi possivel acessar STANDBY…” >> /oracle/scripts/log/erro_$DATA.log

 echo “Falha no processo de $1”                       >> /oracle/scripts/log/erro_$DATA.log

 }  

testarede(){  

REDE=`ping standby -c 1 | grep 100% | grep packet | grep loss`

 }

 switchlog(){

sqlplus standbypitt/123bypitt <<EOS   

  alter system switch logfile;   

  @/oracle/scripts/current_log.sql;

exit

EOS

echo “Gerou archive”

}

 

testacopia()

{

testarede

echo $REDE

case $REDE in

    “”)  copia ;;

    *)   crialog “copia dos archives…”;;

esac

}

copia()

{

    sleep 5

    rsync -e ssh -Pazv /flash/archivelogs/arc2/ oracle@standby:/flash/archivelogs/arc2

echo “copiou…”

}

   

replica()

{

ssh oracle@standby<<EOO

sqlplus / as sysdba<<EOS

shutdown immediate       

startup nomount      

alter database mount standby database;  

recover automatic  standby database;      

exit

EOS 

sqlplus / as sysdba<<EOS    

       shutdown immediate      

       startup nomount      

       alter database mount standby database;      

       alter database open read only;

       @/oracle/scripts/current_log.sql

       exit

EOS 

find /flash/archivelogs/arc2arc2/ -atime 3  -exec rm -f ‘{}’ \;

EOO   

DATA=`date +%Y_%m_%d`  

zip /oradata/backup/arcbackup/backup_{$DATA}_.zip /flash/archivelogs/arc2/*#  

rm -rf /flash/archivelogs/arc2/* 

}

backup()

{

 DATA=`date +%Y_%m_%d_%H_%M_%S`

 zip /oradata/backup/arcbackup/arcbackup_$DATA.zip /flash/archivelogs/arc1/* 

find /flash/archivelogs/arc1/ -atime 3 -exec rm -f ‘{}’ \; 

find /flash/archivelogs/arc2/ -atime 3 -exec rm -f ‘{}’ \; 

ssh oracle@smtt<<EOO 

       rm -rf /flash/archivelogs/arc2/*

EOO

}

   

echo “————————————————-COMECO————————————————–“

testarede

echo $REDE

case $REDE in

    “”) switchlog

        testacopia

        ;;

    *)  crialog “copia dos archives…”;;

esac

  

testarede

echo $REDE

case $REDE in

    “”) replica

        ;;

    *)  crialog “replicacao dos dados…”;;

esac

 if [ “$1” == “$BACKUP” ] then 

    backup

fi  

echo “————————————————–FIM——————————————————-“

  

Qualquer dúvida ou sugestão, basta deixar seu comentário…..

 

 Artigo dedicado ao meu amigo DBA Alexandre Silva da QSI. que me ajudou nesse ambiente.


36 Respostas to “Oracle Fail Over (Standby Database)”


  1. 1 Ricardo
    fevereiro 26, 2016 às 8:02 pm

    Eder, boa tarde

    Estou querendo fazer o meu TCC com esse tema, mas queria fazer em ambiente windows, você tem esse projeto em ambiente Windows para me disponibilizar? Deste já agradeço.

  2. março 10, 2012 às 10:44 am

    Eder,

    Algumas semanas atrás um dos DBAs que trabalha comigo encontrou este artigo e veio direto me perguntar se o nome postado no seu blog era eu mesmo, muito engraçado!

    Ele usou o script para montar uma solução standby na Faculdade e ficou muito satisfeito.

    Parabéns por divulgar o trabalho de forma bem clara.

    Alexandre Silva

  3. 4 Alexander
    dezembro 10, 2009 às 1:28 pm

    Olá,
    gostaria de saber se vc tem disponível o mesmo script, mas para ambiente Windows?
    Se possível, poderia compartilhar?

    Desde já obrigado.
    Alex

  4. 5 Fabio Araujo
    setembro 9, 2009 às 6:54 pm

    Erick, voce tem que ir no nó principal e criar um standby controlfile …
    Exemplo : ALTER DATABASE CREATE STANDBY CONTROLFILE AS nome_controlfile

    Abraço.

    Fabio Araujo

  5. 6 Erick
    agosto 3, 2009 às 6:23 pm

    Pessoal, boa tarde,

    Quando dou alter database mount standby database no server stand by, dá o erro abaixo:

    ORA-01665: control file is not a standby control file

    Alguém pode me ajudar

    Obrigado

    Erick

  6. 7 Wilson Dutra
    julho 24, 2009 às 8:21 pm

    Com o Banco de Dados Standby Físico, qual seria o comando extato para subí-lo como Read Only? Alter Database Open Read Only não funciona, pois o control file é para um banco Standby. Teria alguma dica?

    • 8 Wilson Dutra
      julho 24, 2009 às 8:27 pm

      Descobri meu amigo. Basta montar o standby ALTER DATABASE MOUNT STANDBY DATABASE e depois ALTER DATABASE OPEN READ ONLY;

      Abraços a todos.

  7. 9 Diogo Ricardo
    julho 21, 2009 às 6:27 pm

    Boa tarde,

    Gostei muito do artigo, gostaria de saber se caso ocorra algum erro no meu banco Principal é só colocar o Standby em Open “Alter database Open”, não precisa mudar nada no Init???

    Att

    Diogo Ricardo

  8. maio 26, 2009 às 1:16 pm

    Usei o seu artigo para implementar um standby database, e tudo funcionou sem problemas. Mas um belo dia, por um problema na rede, meus archives não foram copiados e aplicados. a partir dai meu StandBy Db, fica pedindo um numero de archive antigo. Já refiz a cópia dos datafiles, em modo backup, mas o erro persiste. Pode me ajudar ?

  9. 11 Carlos Aberto
    março 27, 2009 às 12:08 pm

    Trabalho em uma empresa e usamos um banco oracle e o software da empresa em um servidor com linux fedora conheço quase nada de linux, como faço para administra essa estrutura o que precisso saber para entender do fucionamento da mesma como monitorar, tenho uma rede com 40 maquinas e um servidor de antivirus um de internet, como dar segurança na informação com essa estrutura, seria melhor hospedar toda essa estrutura no servidor linux para melhor administrar ou a idéia é essa mesma, servidores separados por questão de segurança.
    Carlos Albeto.
    grato.

  10. 12 Alex
    setembro 4, 2008 às 2:55 pm

    Eder,

    Estou precisando alterar minha rede pública do meu ORACLE RAC 10g. Gostaria de saber se você já este tipo de trabalho e se poderia comentar os procedimentos adotados e as precauções.

    Att,
    Alex.

  11. 13 Antonio Marcos Miguel
    maio 23, 2008 às 2:41 pm

    Wilson,

    1- As estruturas não precisam ser iguais.

    2- Sim. Isso já foi explicado anteriormente.

    3- Sim.
    Obs: Após essa operação você não consigurá voltá-lo para Standby, você perderá o sincronismo dos Archives.
    Solução para isto, recriar o Servidor de Standby.

    At.

    Miguel

    • 14 Wilson Dutra
      julho 24, 2009 às 8:19 pm

      Bom, para que não seja perdido o sincronismo do Standby torna-se necessário antes no Primário colocar o LOG_ARCHIVE_DEST_n em DEFER depois sim, no Standby efetuar um Shutdown e subir o banco em read only. Depois de fazer as pesquisas necessárias, baixe o Standby novamente, volte o Primário n para ENABLE e monte o Standby novamente. Você não terá perda de archives e nem mesmo de sincronismo.

  12. 15 Wilson
    maio 21, 2008 às 6:44 pm

    Boa Tarde,

    Achei uma solução bastante interessante, mas fiquei com algumas dúvidas :

    1) Quando mudo a estrutura do meu BD principal, como fica o BD stdandby ?

    2) Consigo deixar em READ ONLY para consulta e passar para STANDBY para aplicar os archives, sincronizando isto conforme a necessidade ?

    3) E quanto ocorrer alguma problema no BD principal posso abrir o meu banco STANDBY em modo normal (alter database open) e utilizá-lo como BD principal normalmente ?

    Obrigado.

    Wilson.

  13. 16 Antonio Marcos Miguel
    maio 14, 2008 às 2:25 pm

    Bom dia Pessoal,

    Oracle 9i Realese 6
    Surgiu um emprevisto, determinadas Query que executo no meu Servidor Standby (mount read only) ocorre o erro “Temporary Tablespace not exist or cannot be accessed”.
    No modo Standby ele não utiliza TEMP, o que poderia fazer para resolver isso?
    Cheguei a aumentear o cache de buffer para tentar evitar a mensagem, mas não resolveu.

    Obs:No Servidor não há concorrencias de Query.

    At.

    Miguel

  14. 17 Antonio Marcos Miguel
    maio 5, 2008 às 1:45 pm

    Bom dia pessoal,

    Consegui colocar o meu Servidor de Standby para consultas (read Only) e depois retornar para Standby.

    1 – Não estava conseguindo colocar o Standby como leitura, porque havia esquecido de aplicar o realese (as versoes estavam diferentes).

    2 – Após isso executei os comandos:
    – shutdown immediate
    – startup nomount
    – alter database mount standby database
    – alter database open read only
    Maravilha o banco está pronto para consultas.

    Retornar o Servidor para Standby para aplicar archives (Sincronizar/atualizar BD):
    – shutdown immediate
    – startup nomount
    – alter database mount standby databse
    Depois a é só continuar aplicando os archives .

    []’s

    Miguel

  15. 18 Antonio Marcos Miguel
    abril 23, 2008 às 8:38 pm

    Eder,

    Muito legal a matéria.
    Minha duvida é a seguinte:
    Consigo fazer consultas nesta base de dados Standby?
    Tentei dar um
    STARTUP MOUNT
    ALTER DATABASE OPEN READ ONLY ele diz que o banco não está aberto.
    Minha intenção seria deixar ela para consultas no horário comercial, no final do dia coloca-la em modo standby NOVAMENTE E aplicar os archives.

    Grato.

    Miguel

  16. março 19, 2008 às 12:05 am

    Boa tarde Eder!

    Tenho uma dúvida aqui.

    Tenho um ambiente Standby, base 8i (8.1.7.0).
    Na instância de produção, tive que criar mais um datafile,
    pois a tablespace chegou ao limite.
    Com isso, está dando erro ao aplicar archives no standby,
    já que no Standby ainda não existe esse datafile.

    Como procedo para criar esse datafile no Standby, já
    que não posso deixar o bando em modo Open? (pois não
    quero perder a sincronia das bases).

    Se puder me ajudar, meu e-mail é miltonbastos@gmail.com

    Abraço!

  17. 20 Eder
    fevereiro 26, 2008 às 10:53 am

    Ronaldo,
    Relamente com NFS é mais rápido, apenas implementei com ssh para se tornar mais fácil. Mesmo assim, obrigado pela por estar colaborando…

    Eder

  18. 21 Ronald Borges
    janeiro 30, 2008 às 5:54 pm

    Cara Parabens pela Receita de bolo muito bem explicado… não tenho duvida mais o script ta bem completo e so fazer as alteração. prefiro usar NFS, mais rapido.

  19. 22 Bruno Murassaki
    dezembro 7, 2007 às 9:58 pm

    Ola Eder primeiramente gostaria de lhe agradecer pelo tutorial, pois tem sido muito util para eu tentar aprender como funciona um banco standby.Bom mas vamos la, estou comecando nesta carreira de DBA e estou estudando para OCA.Portanto quero tambem aprender o Standby, Dataguard e RAC. Mas quero primeiro aprender o Standby.Entao Eder, peguei um final de semana um sabado e domingo e simulei dois bancos.O standby ‘e o desktop que tenho e o producao ‘e o meu notebook. A distro que apesar de nao ser homologada pela oracle, eu usei ubuntu 7.10.Instalei o Oracle fiz tudo certo, ate aquela parte antes de adicionar o script.(Se chegamos até aqui, então já foi uma grande vitória!!)Criei o usuario do oracle tudo certo.MAs na hora de adicionar o script na hora que rodo nao da certo.Sera que talvez nao adequei certo com meu ambiente?? na hora que rodo o script ./replicação.sh BACKUP nao funciona. O que sera que devo estar errando??
    Se puder ajudar agradeco, valeu T++

  20. 23 Eder
    novembro 27, 2007 às 2:12 pm

    Eli,
    O EM é configurado unicamente para cada banco em seu espectivo host. Nesse caso, vocÊ realmente não conseguiria acessar o Banco de Dados Faiolver pelo EM.
    Sugiro que utilize o Grid Control, para entender melhor como funciona, bata olhar esse link:

    Oracle Enterprise Management Framework

    Qualquer coisa é só falar…
    Eder

  21. 24 Eli Dias
    novembro 21, 2007 às 8:25 pm

    Boa tarde.

    Possuo um ambiente failover porém quanto tento realizar conexão no EM a string do host aponta somente para uma das maquinas. Fora quando tento realizar alguma tarefa no EM ele retorna erro e ao voltar na pagina home ele apresenta a instancia em shutdown.

    Abraços,
    Eli Dias.

  22. 25 Eder
    novembro 16, 2007 às 8:16 pm

    Marcelo,
    Entendi o problema sim, realmente o que foi sugerido é inaplicável. Estou pesquisando alguma solução para esse problema e caso você a encontre primeiro que eu, gostaria que você postasse-a para nós, pode ser?

    Eder

  23. 26 Marcelo
    novembro 12, 2007 às 7:56 pm

    Fale Eder,

    Aparentemente a solução que você falou não funcionou, pelo seguinte motivo.

    Por default, quando só existe um endereço no ADDRESS_LIST do tnsname.ora, o Failover do lado do cliente é configurado como Off. Como sugerido por você, era para eu configurar no ADDRESS_LIST tanto o endereço do Servidor Primário, quanto o Servidor Secundário.

    Até ai, tudo bem!

    Mas, essa solução só vai funcionar se, na primeira tentativa de conexão, o processo de conexão não tiver uma resposta, então automaticamente ele tenta o outro endereço para tentar conectar.

    Digamos, se na primeira tentativa ele tentar ir no servidor primario, belza!! conexão com sucesso!

    Mas, se na primairta tentativa ele for no Secundário, não vai acontecer um erro, e sim o servidor vai informar que o servidor encontrar-se em “shutdown in progress”… Isso não se caracteriza um erro. Dessa forma, ele não tenta o proximo endereco da lista..

    Espero ter feito voce entender o problema.

    No mais obrigado!

    Att,

  24. 27 Eder
    novembro 12, 2007 às 11:59 am

    Tudo bom Marcelo? Obrigado por ter gostado deste post!!
    Para resolver o seu problema você poderia utilizar as cuncionalidades do Oracle RAC para acessar as bases de dados. Como você deve saber, a configuração do tnsnames do cliente para um ambiente Oracle RAC é mais ou menos o seguinte:

    LISTENER =
    (DESCRIPTION_LIST =
    (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac01-vip)(PORT = 1521))
    )
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac02-vip)(PORT = 1521))
    )
    )
    )

    SID_LIST_LISTENER =
    (SID_LIST =
    (SID_DESC =
    (SID_NAME = PLSExtProc)
    (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
    (PROGRAM = extproc)
    )
    )

    Observe que existe uma diferença desse tnsnames para um “normal”. A diferença é o que esse exemplo acima contém dois ADDRESS. Você então poderia utilizar essa solução no seu ambiente com Standby colocando o endereço dos dois servidores: Primary e Standby.
    Qualquer dúvida estamos aqui para encontrar uma solução.
    Abraços à todos…

    Eder

  25. 28 Marcelo
    novembro 11, 2007 às 2:21 am

    Fala Eder, legal o post. Tenho uma dúvida, se você puder me dar uma ajuda, agradeço!
    Levando em consideração que tenho o Primário e Standby em máquinas separadas, quando um switchove ou failover for executando, como fica os clientes? Existe alguma configuração que possa ser feita, de modo que essa mudança entre Primário e Standby fique transparanter para os clientes? Tentei usar o “Client Side Connect-Time failover” mas não deu certo…
    Se voce puder me dar uma dica, agradeço!
    Meu e-mail para contato é mbarleta@gmail.com

  26. 29 Eder
    outubro 19, 2007 às 11:33 am

    Fico feliz por ter gostado da “receita de Bolo”. Bom, respondendo suas questões:
    1) Essa variável REDE, a qual é atribuída o valor “pitt”, é uma variável utilizada para armazenar o conteúdo do teste da rede:
    REDE=`ping standby -c 1 | grep 100% | grep packet | grep loss`
    Você pode dar qualquer nome para ela desde troque todas as variáveis REDE do script pela nova variável que você quer criar.

    2) Me desculpe por ter esquecido de mencionar o conteúdo desse script. Segue abaixo o mesmo:
    spool /oracle/scripts/log/log_current.log
    select max(recid) from v$log_history;
    spool off
    exit
    Esse script tem como objetivo gerarum log para que saibamos qual a sequencia atual dos archives sem ter que ver isso dentro do banco de dados. Geralmente isso é para quem não é DBA e precisa saber se a replicação está sendo feita corretamente.

    3) Exatamente isso que você disse.

    4) Neste trecho, quase no final do script, ele faz um acesso remoto via ssh no servidor standby, ou seja, esse servidor não é o de produção (primário) e sim o de banco de dados que será replicado (secundário). O script remove os archives do banco secundário apenas para que a partiçao não fique cheia.

    Qulquer dúvida é só entrar em contato…

    Eder Ferreira.

  27. 30 Ana Cristina
    outubro 17, 2007 às 2:53 pm

    Eu e outros colegas daqui da empresa, iniciamos a implementação da sua receita de bolo de banco standby, sendo que paramos qdo fomos estudar mais a fundo o shell script “replicacao.sh”. Você poderia nos esclarecer algumas dúvidas sobre ele?

    Temos a dúvida nos pontos:
    1) REDE=pitt,
    o que seria esta variável REDE?
    poderíamos dar qq nome a esta variável?
    2) @/oracle/scripts/current_log.sql;
    Qual seria o conteúdo deste script?
    Ele por um acaso mandaria fazer um checkponit para criar um archive log?
    3) zip /oradata/backup/arcbackup/backup_{$DATA}_.zip /flash/archivelogs/arc2/*#
    Aqui faz um zip de todos os archive logs que estão no 2 diretório de archives?
    4) Neste trecho, quase ao final do script:
    ssh oracle@smtt<<EOO
    rm -rf /flash/archivelogs/arc2/*
    EOO
    }
    Qual seria esta máquina “smtt” que está sendo feito um ssh para ela?
    Seria o servidor primário, ou seja, vc está retornando ao servidor primário(local) para apagar os archive logs que estão no 2 diretório de archives?

    Muitíssimo grata se vc pudesse me esclarecer estas dúvidas.
    Aninha 😀

  28. 31 Lúcia Klem
    outubro 16, 2007 às 7:29 pm

    Olá Eder,

    Como vai?? Então, trabalho com Oracle e este artigo veio muito bem a calhar pois estamos precisando de um solução dessas 🙂
    Tive algumas dúvidas durante a execução do artigo:
    – Não entendemos o que deve ter no script @/oracle/scripts/current_log.sql
    – Também não entendemos o servidor smtt, seria uma máquina para fazer o backup dos arquivos?
    Grata,
    Lúcia Klem.


Deixar mensagem para Ronald Borges Cancelar resposta


setembro 2007
S T Q Q S S D
 12
3456789
10111213141516
17181920212223
24252627282930

Estatísticas de Visitas

  • 158.259 visitas