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:
- Primary Database;
- Standby Database;
- Sites.
Segundo Passo:
Verificar os pré-requisitos para implementação do Standby:
- 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.
- 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.
- 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:
- Preparar o servidor standby;
- Instalar o software Oracle;
- Se certificar se os dois servidores estão acessíveis entre si, na rede;
- 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;
- Derrubar o banco de produção;
- coloca-lo em modo mount;
- Habilitar o arquivamento;
- derrubar o banco de produção;
- copiar os arquivos para o servidor standby;
- Levantar o banco de produção;
- 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.
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.
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
Certamente meu amigo, dái à Cezar o que é de Cezar.
Satisfação falar com você novamente.
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
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
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
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?
Descobri meu amigo. Basta montar o standby ALTER DATABASE MOUNT STANDBY DATABASE e depois ALTER DATABASE OPEN READ ONLY;
Abraços a todos.
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
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 ?
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.
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.
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
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.
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.
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
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
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
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!
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
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.
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++
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:
Qualquer coisa é só falar…
Eder
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.
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
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,
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
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
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.
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 😀
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.