Neste artigo veremos um passo-a-passo sobre um método manual para converter um instância Simples (single instance) para Oracle database RAC
Informações sobre a instância:
ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
ORACLE_SID=prod
Localização dos datafiles = /u03/oradata/prod — /u03 está em formato de arquivo OCFS.
Se seus arquivos estão em sistema de arquivo diferente e não compartilhado, você deve compia-los e renomeá-los quando for o caso.
Versão do banco de dados = 10g R2 (10.2.0.1.0)
Passos para conversão dem uma instância simples "single instance" para RAC
Passo 1) Instale o software clusterware em todos os nós que você usará o RAC
Para detalhes de como instalar o software clusterware, veja o link: http://www.viniciusdba.com.br/blog/?p=316 (sempre em português!). As nomenclaturas de diretórios e detalhes de instalação estarão diferentes, informarei sempre as que estou usando.
Basicamente você precisa configurar o endereço IP e outros arquivos do sistema operacional e variáveis de ambiente, antes de instalar o clusterware. Veja o que o blog apresenta uma solução completa.
Importante: A versão do software clusterware deve ser igual a do banco de dados, nunca misture as versões!!
Detalhes da instalação do software clusterware:
Nome do Cluster : crs
Diretório de instalação do Cluster : /u01/app/oracle/product/10.2.0/crs
Diretório do OCR : /u03/oracrs/ocr.ora
Diretório do Voting disk : /u03/oracrs/vote.crs
Passo 2) instale o banco de dados Oracle RAC em cluster 10g
Novamente siga as dicas excelentes deste blog: http://www.viniciusdba.com.br/blog/?p=396
Lembrando agora outro fato importante, a versão deste ambiente em RAC deve ser obrigatoriamente a mesma que você estava usando quando tinha uma só instância.
Detalhes da instalação:
RAC ORACLE_HOME=/u01/app/oracle/product/10.2.0/db
Número de instâncias = 2
Nome dos nós para as 2 instãncias = ocvmrh2103, ocvmrh2190
/u01 não está sendo compartilhado entre os nós do cluster.
Passo 3) Faça um backup da sua instância e recupere este backup na partição que está sendo compartilhada (BACKUP/RESTORE).
Se você estiver usando usando ASM, esta é a forma mais rápida:
a) Monte os discos usando o caminho do diretório dos datafiles:
mkdir /mnt/datafile
mount /hostdobancooriginal/diretorio/datafile /mnt/datafile -o user=usuario
>>>informe a senha
b) Faça o backup (cópia) do seu banco direto para os discos ASM usando o rman
rman target system/system123@sid
convert datafile '/mnt/datafile/system01.dbf' format '+disk/datafile/system01.dbf' ;
Passo 4) Faça uma cópia do seu init.ora e adicione os parâmetros para o RAC:
bash-3.00$ cp initprod.ora /tmp/initprod.ora
Parâmetros novos no arquivo /tmp/initprod.ora, perceba que as instância agora são numeradas 1 e 2, ok?
*.cluster_database = TRUE
*.cluster_database_instances = 2
*.undo_management=AUTO
prod1.undo_tablespace=UNDOTBS1
prod1.instance_name=prod1
prod1.instance_number=1
prod1.thread=1
prod1.local_listener=listener_ocvmrh2103
prod2.instance_name=prod2
prod2.instance_number=2
prod2.local_listener=listener_ocvmrh2190
prod2.thread=2
prod2.undo_tablespace=UNDOTBS2
Passo 5) Altere a informação sobre a nova localização do arquivo de controle (controlfile), no arquivo /tmp/initprod.ora
Passo 6) Cria seu SPFILE
SQL> create spfile='/u03/oradata/prod/spfileprod.ora' from pfile='/tmp/initprod.ora';
Passo 7) Copie o spfile criado para o diretório : ORACLE_HOME/dbs e crie um novo pfile a partir dele.
bash-3.00$ cp spfileprod.ora /u01/app/oracle/product/10.2.0/db/dbs/spfileprod.ora
bash-3.00$ pwd
/u01/app/oracle/product/10.2.0/db/dbs
bash-3.00$ cat initprod1.ora
spfile='/u01/app/oracle/product/10.2.0/db/dbs/spfileprod.ora'
Passo 8) Cria um novo arquivo de senha (password) para a instância prod1 embaixo do Oracle_home do RAC
bash-3.00$ orapwd file=orapwprod1 password=welcome1
Passo 9) inicialize o banco de dados no modo "MOUNT" e troque os nomes dos datafile e redo log para sua nova localização.
----->>>>Antes confirme se sua varável de ambiente ORACLE_HOME está configurada corretamente:
bash-3.00$ echo $ORACLE_HOME
/u01/app/oracle/product/10.2.0/db
bash-3.00$ echo $ORACLE_SID
prod1
SQL> startup mount pfile=initprod1.ora
ORACLE instance started.
Total System Global Area 838860800 bytes
Fixed Size 1222168 bytes
Variable Size 213912040 bytes
Database Buffers 620756992 bytes
Redo Buffers 2969600 bytes
Database mounted.
Passo 10) Adicione a sugunda partição do RAC (thread) que irá atender a instância 2
SQL> alter database add logfile thread 2 group 4 ('/u03/oradata/prod/redo2_01.dbf') size 50M, group 5 ('/u03/oradata/prod/redo2_02.dbf') size 50M, group 6 ('/u03/oradata/prod/redo2_03.dbf') size 50M;
Database altered.
SQL> ALTER DATABASE OPEN;
Database altered.
SQL> alter database enable public thread 2;
Database altered.
Passo 11) Crie UNDO tablespace para a instância 2
O nome desta tablespace deve ser o mremos que você especificou no arquivo init.ora no passo 4.
QL> CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE '/u03/oradata/prod/undotbs2_01.dbf' size 25M;
ablespace created.
Passo 12) Crie as visões (views) específicas para cluster na instância 1
QL> @?/rdbms/admin/catclust.sql
Passo 13) No segundo nó do cluster:
Configure o ORACLE_HOME e o SID
bash-3.00$ export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db
bash-3.00$ export ORACLE_SID=prod2
Crie o arquivo initprod2.ora igual ao initprod1.ora (da primeira instância). Lembre de copiar também o arquivo spfile para este segundo nó de cluster.
bash-3.00$ pwd
/u01/app/oracle/product/10.2.0/db/dbs
bash-3.00$ ls -lrt spfileprod.ora
-rw-r----- 1 oracle oinstall 3584 Feb 19 12:36 spfileprod.ora
bash-3.00$ cat initprod2.ora
spfile='/u01/app/oracle/product/10.2.0/db/dbs/spfileprod.ora'
Passo 14) Crie um novo arquivo de senhas (password) para esta instância
bash-3.00$ orapwd file=orapwprod2 password=welcome1
Passo 15) Crie os diretórios (mkdir) para os arquivos, conforme informado no init.ora, abaixo:
audit_file_dest
background_dump_dest
user_dump_dest
core_dump_dest
Passo 16) Inicialize a segunda instância
SQL> startup pfile=initprod2.ora
ORACLE instance started.
Total System Global Area 838860800 bytes
Fixed Size 1222168 bytes
Variable Size 213912040 bytes
Database Buffers 620756992 bytes
Redo Buffers 2969600 bytes
Database mounted.
Database opened.
Passo 17) Agora é só adicionar os serviços do cluster
bash-3.00$ srvctl add database -d prod -o /u01/app/oracle/product/10.2.0/db -p /u03/oradata/prod/spfileprod.ora
bash-3.00$ srvctl add instance -d prod -i prod1 -n OCVMRH2103
bash-3.00$ srvctl add instance -d prod -i prod2 -n OCVMRH2190
Referência:
Metalink Note ID : 747457.1
Fique à vontade para tirar dúvidas comigo. Espero que você tenha Sucesso!
Luis Adelson.
terça-feira, 23 de novembro de 2010
sábado, 13 de novembro de 2010
ORA-600 erro genérico
Já tive problemas com ORA-600 que demorou dias para o suporte Oracle resolver, aliás ainda tenho um chamado aberto no Metalink aguardando solução.
O que a Oracle fez? Mandou que nós alterássemos o modo de conexão do banco de shared para dedicated. Ou seja, não podemos mais usar pool de conexões. Parece engraçado, mas não é tanto assim. Pois deram uma solução paliativa, ou solução quebra-galho, fazer o quê?
No entanto, encontrei este artigo muito bom do Rodrigo Almeida e gostaria de compartilhar aqui. Aproveitem que esse cara manja do assunto.
http://www.rodrigoalmeida.net/blog/achei-um-ora-600-o-que-faco
Parabéns mais uma vez Rodrigo!
Adelson Luniere.
O que a Oracle fez? Mandou que nós alterássemos o modo de conexão do banco de shared para dedicated. Ou seja, não podemos mais usar pool de conexões. Parece engraçado, mas não é tanto assim. Pois deram uma solução paliativa, ou solução quebra-galho, fazer o quê?
No entanto, encontrei este artigo muito bom do Rodrigo Almeida e gostaria de compartilhar aqui. Aproveitem que esse cara manja do assunto.
http://www.rodrigoalmeida.net/blog/achei-um-ora-600-o-que-faco
Parabéns mais uma vez Rodrigo!
Adelson Luniere.
quarta-feira, 20 de outubro de 2010
Qual é a diferença entre Database, Instance e Service Name?
Se você um dia for trabalhar com RAC, leia este artigo!
Database Name. É o nome usado para a estrutura física do banco de dados. Esta informação é armazenada no cabeçalho do control file e datafile. Usado para identificar todas as estruturas físicas que pertencem ao mesmo banco de dados. Definido no momento da instalação. Originalmente defnido pelo parâmetro estático denominado database_name e não pode ser mudado, a não ser que você recrie seu controlfile e reset a sequência de logs.
Instance Name.É o nome dado às estruturas de memória + processos de Background (MEM + BGP) usado para montar e abrir o banco de dados. No ambiente RAC existem mais de uma instância abrindo o mesmo banco de dados e cada instância deve ter nomes diferentes. Num ambiente sem RAC, geralmente o nome da instância e o nome do banco de dados são iguais. Não é preciso usar nomes diferentes.O nome da instância é definido pela variável de ambiente chamada ORACLE_SID. Usada para estabelecer a conexão com o banco de dados como uma "connect string".
Service Name. É definido pelo parâmetro dinâmico denominado service_names, no plural, porque podem ser definidos diversos nomes de serviços, dependendo da necessidade de configuração. Exemplo de uso: fail over (contingência), resource manager (controle de recursos), balanceamento de recursos.
Vamos nos aprofundar mais um pouco em serviço ou Service Name?
Um serviço é uma representação lógica de uma ou mais instância. Quando você especifica SERVICE_NAMES="AlgumaCoisa" no seu arquivo tnsnames.ora você não está pedindo para se conectar a uma instância especifica. De fato o que você está dizendo é que "não me interessa a qual instância estou sendo conectado, contanto que eu receba o serviço esperado".
Num ambiente onde existe somente uma instância, service_names e instance são sinônimos, ou seja, uma coleção de estruturas de memória e processos que fornecem um serviço. Portanto, não faz sentido alocar mais de um service_names para uma mesma instância.
O conceito de serviço faz muito mais sentido num ambiente onde existem várias instâncias (RAC - Real Application Cluster). Nesse ambiente algumas instâncias podem fornecer um serviço, enquanto outras podem oferecer outros serviços. Um serviço então pode ser uma forma de fazer um particionamento lógico do seu ambiente em RAC em áreas funcionais. Nesse caso, o serviço seria utilizado para dividir e priorizar recursos dentro de um RAC.
O serviço é a chave para um ambiente em contingência uma vez que ele não significa "conecte-me a uma instância". Por exemplo, se você disse conecte-me ao SID=INST1, então você solicitou uma conexão a uma determinada instância, mas se esta instância cair, tudo bem, você perdeu a conexão ao banco de dados, mas foi uma opção feita por você. Você pediu, você recebeu! Se ao invés disso você se conectar ao serviço VENDAS que está sendo fornecido pelas instâncias INST1 e INST2, então se a instância INST1 cair por qualquer motivo, o mesmo serviço estará sendo fornecido pela INST2 e você será conectado a segunda instância como forma de contingência.
Este conceito explica porque nunca deverá existir um banco de dados chamado VENDAS e as instâncias e serviços serem também nomeados como VENDAS. Também não deverão existir instâncias chamadas VENDAS1 e VENDAS2 e serviços chamados VENDAS1 e VENDAS2. Este equívoco contraria o conceito de service_names. O correto então seria ter um serviço chamado VENDAS, as instância denominadas VENDAS1 e VENDAS2 e o banco de dados seria VENDASDB. Nenhum conflito de nomes e conceitos, ok?
É crítico dominar estes conceitos principalmente quando se migra para um ambiente no qual se usa RAC ou Data Guard. Esta sútil diferença ajuda principalmente quando vemos que muitos costumam confundir serviço com instância e depois sofrem quando migram para o RAC porque recebem erros na configuração do ambiente.
Esse não será você!
Database Name. É o nome usado para a estrutura física do banco de dados. Esta informação é armazenada no cabeçalho do control file e datafile. Usado para identificar todas as estruturas físicas que pertencem ao mesmo banco de dados. Definido no momento da instalação. Originalmente defnido pelo parâmetro estático denominado database_name e não pode ser mudado, a não ser que você recrie seu controlfile e reset a sequência de logs.
Instance Name.É o nome dado às estruturas de memória + processos de Background (MEM + BGP) usado para montar e abrir o banco de dados. No ambiente RAC existem mais de uma instância abrindo o mesmo banco de dados e cada instância deve ter nomes diferentes. Num ambiente sem RAC, geralmente o nome da instância e o nome do banco de dados são iguais. Não é preciso usar nomes diferentes.O nome da instância é definido pela variável de ambiente chamada ORACLE_SID. Usada para estabelecer a conexão com o banco de dados como uma "connect string".
Service Name. É definido pelo parâmetro dinâmico denominado service_names, no plural, porque podem ser definidos diversos nomes de serviços, dependendo da necessidade de configuração. Exemplo de uso: fail over (contingência), resource manager (controle de recursos), balanceamento de recursos.
Vamos nos aprofundar mais um pouco em serviço ou Service Name?
Um serviço é uma representação lógica de uma ou mais instância. Quando você especifica SERVICE_NAMES="AlgumaCoisa" no seu arquivo tnsnames.ora você não está pedindo para se conectar a uma instância especifica. De fato o que você está dizendo é que "não me interessa a qual instância estou sendo conectado, contanto que eu receba o serviço esperado".
Num ambiente onde existe somente uma instância, service_names e instance são sinônimos, ou seja, uma coleção de estruturas de memória e processos que fornecem um serviço. Portanto, não faz sentido alocar mais de um service_names para uma mesma instância.
O conceito de serviço faz muito mais sentido num ambiente onde existem várias instâncias (RAC - Real Application Cluster). Nesse ambiente algumas instâncias podem fornecer um serviço, enquanto outras podem oferecer outros serviços. Um serviço então pode ser uma forma de fazer um particionamento lógico do seu ambiente em RAC em áreas funcionais. Nesse caso, o serviço seria utilizado para dividir e priorizar recursos dentro de um RAC.
O serviço é a chave para um ambiente em contingência uma vez que ele não significa "conecte-me a uma instância". Por exemplo, se você disse conecte-me ao SID=INST1, então você solicitou uma conexão a uma determinada instância, mas se esta instância cair, tudo bem, você perdeu a conexão ao banco de dados, mas foi uma opção feita por você. Você pediu, você recebeu! Se ao invés disso você se conectar ao serviço VENDAS que está sendo fornecido pelas instâncias INST1 e INST2, então se a instância INST1 cair por qualquer motivo, o mesmo serviço estará sendo fornecido pela INST2 e você será conectado a segunda instância como forma de contingência.
Este conceito explica porque nunca deverá existir um banco de dados chamado VENDAS e as instâncias e serviços serem também nomeados como VENDAS. Também não deverão existir instâncias chamadas VENDAS1 e VENDAS2 e serviços chamados VENDAS1 e VENDAS2. Este equívoco contraria o conceito de service_names. O correto então seria ter um serviço chamado VENDAS, as instância denominadas VENDAS1 e VENDAS2 e o banco de dados seria VENDASDB. Nenhum conflito de nomes e conceitos, ok?
É crítico dominar estes conceitos principalmente quando se migra para um ambiente no qual se usa RAC ou Data Guard. Esta sútil diferença ajuda principalmente quando vemos que muitos costumam confundir serviço com instância e depois sofrem quando migram para o RAC porque recebem erros na configuração do ambiente.
Esse não será você!
terça-feira, 19 de outubro de 2010
ORA-00313 ,ORA-00312 - Erro na abertura de redo logs
Sempre que você migrar seu banco de dados, tenha em mente que a opção archive log deve ser desativada, caso contrário você poderá receber estes erros ORA.
ORA-00313: open failed for members of log group 2 of thread 1
ORA-00312: online log 2 thread 1: '/oradata2/data1/dbase/redo02.log'
Ah, você esqueceu? Não tem problema, vamos ver como abrir seu banco mesmo assim.
Causa do problema:
-----------------------------
Seu banco de dados estava em modo archive, Você deu shutdown e quando tenta o startup, seu redo log pode não mexistir ou está corrompido (open reset logs)
Solução do problema:
--------------------------------
A)Monte the database.
SQL>STARTUP MOUNT
Database mounted.
B) Verifique a condição do logile para certificar que ele é o corrente.
SQL> SELECT STATUS FROM V$LOG WHERE GROUP#=2;
STATUS
----------------
CURRENT
C) Se ele não for o corrente (CURRENT) ent~/ao simplesmente remova (drop) o log file by,
SQL>ALTER DATABASE DROP LOGFILE GROUP 2;
Se existirem somente 2 grupos de log, então será necessário incluir um novo grupo, antes de remover um deles, pois devem existir no mínimo 2 log groups.
Então antes da remoção:
SQL>ALTER DATABASE ADD LOGFILE GROUP 4 '/oradata2/redo3.log' SIZE 10M;
Como a condição de CURRENT não permite remover o grupo, você deverá executar uma recuperação FALSA antes de abrir com a opção "resetlogs".
SQL>RECOVER DATABASE UNTIL CANCEL;
Responda com CANCEL.
Agora você já pode abrir seu banco de dados!
SQL>ALTER DATABASE OPEN RESETLOGS;
ORA-00313: open failed for members of log group 2 of thread 1
ORA-00312: online log 2 thread 1: '/oradata2/data1/dbase/redo02.log'
Ah, você esqueceu? Não tem problema, vamos ver como abrir seu banco mesmo assim.
Causa do problema:
-----------------------------
Seu banco de dados estava em modo archive, Você deu shutdown e quando tenta o startup, seu redo log pode não mexistir ou está corrompido (open reset logs)
Solução do problema:
--------------------------------
A)Monte the database.
SQL>STARTUP MOUNT
Database mounted.
B) Verifique a condição do logile para certificar que ele é o corrente.
SQL> SELECT STATUS FROM V$LOG WHERE GROUP#=2;
STATUS
----------------
CURRENT
C) Se ele não for o corrente (CURRENT) ent~/ao simplesmente remova (drop) o log file by,
SQL>ALTER DATABASE DROP LOGFILE GROUP 2;
Se existirem somente 2 grupos de log, então será necessário incluir um novo grupo, antes de remover um deles, pois devem existir no mínimo 2 log groups.
Então antes da remoção:
SQL>ALTER DATABASE ADD LOGFILE GROUP 4 '/oradata2/redo3.log' SIZE 10M;
Como a condição de CURRENT não permite remover o grupo, você deverá executar uma recuperação FALSA antes de abrir com a opção "resetlogs".
SQL>RECOVER DATABASE UNTIL CANCEL;
Responda com CANCEL.
Agora você já pode abrir seu banco de dados!
SQL>ALTER DATABASE OPEN RESETLOGS;
quinta-feira, 14 de outubro de 2010
EXALOGIC - Solução Oracle para aplicações Web
Executar todas as suas aplicações num servidor único? Essa seria a nova estratégia da Oracle conhecida como "Cloud in a box" - algo como nuvem de processamento numa caixa (servidor). Denominado de Exalogic computação em nuvem, esta solução provê a possibilidade de uma configuração mais simples até a expansão de vários hardwares conectados entre sí.
O conceito de nuvem da Oracle seria uma plataforma de aplicativos baseados em padrões e plataforma de execução. Isto inclui hardware e software. É virtual e expansível e executa uma variedade de aplicações.
A proposta do Exalogic é atender à aplicações em ambientes AWS, ou seja, voltados à WEB. Os testes de benchmark mostraram uma melhora de 12 vezes na performance das aplicações desenvolvidas para a internet.
Feito para suportar requisições de HTTP superiores a 1 milhão por segundo, seria como se fosse possível suportar o tráfico do Facebook em apenas 2 racks. Além disso, O Exalogic mostrou excelente performance no tratamento de mensagens, na ordem de 1,8 milhões de mensagens por segundo.
De fato, o sistema Exalogic seria mais apropriado para entregar a melhor performance em aplicações Java, com possibilidade de expansão, tolerância à falha, segurança e simplicidade de manutenção.
Outro comparativo, segundo a Oracle, demonstraria que o sistema Exalogic teria um custo 4 vezes inferior ao dos melhores servidores IBM, além da possibilidade de crescimento em até 8 racks. A linha top da IBM, o Power 795 system, não teria essa escalabilidade.
A Orale lançou também uma nova versão do Unbreakable Enterprise Kernel, sistema operacional Linux da Oracle. A promessa é entregar um sistema operacional 5 vezes mais performático que o Linux Rad Hat.
"O Red Hat se encontra 4 anos atrasado tecnologicamente, isto é um problema enorme para nós", informou Ellison (CEO da Oracle). "Não podemos nos dar ao luxo de ficar atrasados em 4 anos" completou Ellison.
A solução Exalogic parece vir complementar o sistema Exadata (recomendado para DatawareHouse), criando um parceria de sucesso em performance. No entanto, ainda não parece ser viável para aplicações transacionais, seja por seu custo ou mesmo pela sua natureza que seria atender grandes bases de dados suportando ambientes Java na Web.
Mas novidades na Oracle não param por aí. Ainda em 2010 deverá ser lançado uma máquina voltada para aplicações OLTP (transacionais).
quarta-feira, 6 de outubro de 2010
Abrir Banco de dados sem REDOs e ARCHIVEs, É possível?
Se você não possui salva do seu banco de dados e archivelogs tudo pode estar perdido...
A não ser que você conheça o parâmetro _ALLOW_RESETLOGS_CORRUPTION = TRUE.
Sua única chance de recuperar seu banco. Este parâmetro não é suportado pela Oracle. Então use com moderação.
Inclua este parâmetro no seu pfile e então abra o banco de dados com a opção OPEN RESETLOGS. Depois remova-o e execute os seguintes passos:
1) Faça export full de toda a base de dados.
2) Crie um control file "alter database backup controlfile to trace;".
3) Edite o arquivo de trace (*.trc ), localizado no diretório user_dump_dest, para remover todos os datafiles exceto o SYSTEM, TEMP and RBS/UNDO. Então renomeie o arquivo .trc para .sql com um nome sugestivo.
4) Salve o arquivo INIT<SID>.ORA que será usado mais tarde.
5) Recrie o banco de dados conectando-se com a instância IDLE e execute STARTUP NOMOUNT (use o pfile do passo 4) use o comando CREATE CONTROLFILE ... LOGFILE ... DATAFILE ... a partir do arquivo criado no passo 3.
6) Execute o CATALOG, CATPROC como se estivesse criando um banco de dados novo.
7) Faça um import do arquivo de dump criado no passo 1. Este procedimento criará todos os indexes e dados nas tabelas.
8) As transações perdidas poderão agora ser recriadas a partir de programas que abortaram o momento da perda do banco de dados.
8) As transações perdidas poderão agora ser recriadas a partir de programas que abortaram o momento da perda do banco de dados.
Pronto! Eu já precisei disso, mas o melhor sempre é fazer backup.
"Só Jesus SALVA, o homem faz BACKUP".
quinta-feira, 16 de setembro de 2010
EXADATA - Solução Oracle para performance
Estivemos analisando o produto EXADATA que promete performance numa solução integrada software/hardware. Parece o fim do nosso trabalho de otimização de performance? Talvez...
Encontrei um excelente blog sobre o assunto e gostaria de compartilhar com vocês:
"o Exadata é uma “solução” composta de harware e software com o objetivo de rodar banco de dados Oracle da forma mais performática possível e com uma alta disponibilidade."
http://exadatadbabrasil.blogspot.com/2010/08/exadata-software.html
Abraços.
Adelson.
Encontrei um excelente blog sobre o assunto e gostaria de compartilhar com vocês:
"o Exadata é uma “solução” composta de harware e software com o objetivo de rodar banco de dados Oracle da forma mais performática possível e com uma alta disponibilidade."
http://exadatadbabrasil.blogspot.com/2010/08/exadata-software.html
Abraços.
Adelson.
Como criar um banco de dados RAC usando o sql*plus
.Olá DBAs!
O RAC deixou de ser um bicho-papão, veja como é simples criar um banco de dados numa instância RAC. Os procedimentos também são úteis para migrar instâncias non-RAC para RAC. Vamos lá?
Comece criando um banco de dados simples no primeiro nó do cluster.
Use o comando "create database", depois converta-o para RAC, incluindo as configurações específicas para uma instância em cluster. Finalmente registre a instânci com o cluster.
Criando um non-RAC database
Crie um pfile
1) Criar um pfile para non-RAC database no nó 1
Segue um exemplo de um pfile. Foram comentados os parâmetros específicos de um banco de dados clusterizado (RAC). Alguns destes parâmetros podem ser deixados sem comentários, veja abaixo:
TSTDB2.__db_cache_size=4395630592
TSTDB1.__db_cache_size=4395630592
TSTDB2.__java_pool_size=16777216
TSTDB1.__java_pool_size=16777216
TSTDB2.__large_pool_size=16777216
TSTDB1.__large_pool_size=16777216
TSTDB2.__shared_pool_size=905969664
TSTDB1.__shared_pool_size=905969664
TSTDB2.__streams_pool_size=0
TSTDB1.__streams_pool_size=0
##*.cluster_database=true
*.cluster_database_instances=2
*.compatible='10.2.0.4'
*.db_block_size=8192
*.db_create_online_log_dest_1='+TSTDB_DATA'
*.db_domain=''
*.db_file_multiblock_read_count=32
*.db_name='TSTDB'
*.db_unique_name='TSTDB'
*.db_create_file_dest='+PWTEST_DATA'
*.db_recovery_file_dest='+PWTEST_DATA'
*.db_recovery_file_dest_size=53687091200
*.job_queue_processes=0
*.log_archive_dest_1='LOCATION=+PWTEST_DATA'
*.log_buffer=20971520
*.open_cursors=300
*.optimizer_mode='ALL_ROWS'
*.pga_aggregate_target=500M
*.processes=100
*.remote_login_passwordfile='exclusive'
*.resource_limit=TRUE
*.sga_max_size=1G
*.sga_target=1G
*.star_transformation_enabled='TRUE'
*.undo_management='AUTO'
*.undo_retention=3600
TSTDB1.local_listener='LISTENER_TSTDB1' TSTDB2.local_listener='LISTENER_TSTDB2'
#TSTDB1.undo_tablespace='UNDOTBS1'
#TSTDB2.undo_tablespace='UNDOTBS2'
TSTDB1.instance_number=1
TSTDB2.instance_number=2
TSTDB1.thread=1
TSTDB2.thread=2
*.user_dump_dest='/u01/app/oracle/product/10.2.0/db_1/admin/tstdb/udump' *.control_files='+PWTEST_DATA/TSTDB/controlfile/TSTDB.ctl' *.audit_file_dest='/u01/app/oracle/product/10.2.0/db_1/admin/tstdb/adump' *.background_dump_dest='/u01/app/oracle/product/10.2.0/db_1/admin/tstdb/bdump' *.core_dump_dest='/u01/app/oracle/product/10.2.0/db_1/admin/tstdb/cdump' *.fal_server=TSTDB
*.fal_client=TSTDB
*.standby_file_management=AUTO
### use o número do nó no nome da instância, desta meneira já fica pronto para cnversão em RAC.
Inicialize o banco com a opção NOMOUNT
TSTDB1 > startup nomount
ORA-01078: failure in processing system parameters
ORA-00119: invalid specification for system parameter LOCAL_LISTENER
ORA-00132: syntax error or unresolved network name 'LISTENER_TSTDB1'
TSTDB1 >
Ok. Este ero acontece porque é necessário incluir no TNS o parâmetro local listener para resolver o nome LISTENER_TSTDB1.
Abra o tnsnames.ora e adicione as seguintes linhas:
LISTENER_TSTDB1 = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = vip-servidor1)(PORT = 1521)) )
------------->> nome do servidor rede vip <<<
inicialize a instância novamente.
TSTDB1 > startup nomount
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size 2144432 bytes
Variable Size 257247056 bytes
Database Buffers 792723456 bytes
Redo Buffers 21626880 bytes
TSTDB1 >
Crie o banco de dados:
###Se você se esqueceu de comentar o parâmetro "cluster_database" recebrá o seguinte erro:
TSTDB1 > create database;
create database
*
ERROR at line 1:
ORA-01501: CREATE DATABASE failed
ORA-12720: operation requires database is in EXCLUSIVE mode
TSTDB1 > show parameter cluster
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cluster_database boolean TRUE
cluster_database_instances integer 2
cluster_interconnects string
TSTDB1 >
Não sendo o caso, agora você irá executar:
catalog, catproc, pupbld scripts ### todos se encontram sobre /rdbms/admin
Converter para instância RAC
Primeiro, crie 2 UNDO tablespaces para as 2 instâncias.
TSTDB1 > create undo tablespace UNDOTBS1 datafile '+DG_DATA' size 100M autoextend on next 50M maxsize 500M;
Tablespace created.
TSTDB1 > create undo tablespace UNDOTBS2 datafile '+DG_DATA' size 100M autoextend on next 50M maxsize 500M;
Tablespace created.
Adicione uma nova thread de REDO e habilite-a
###Se esse passo for ignorado você irá receber o erro quando inicializar a segunda instância:
###ORA-01620: no public threads are available for mounting)
TSTDB1 > alter database add logfile thread 2 group 10 '+DG_DATA' size 100M;
Database altered.
TSTDB1 > alter database add logfile thread 2 group 11 '+DG_DATA' size 100M;
Database altered.
TSTDB1 > alter database enable public thread 2;
Database altered.
PARÂMETROS ESPECÍFICOS DE UMA INSTÂNCIA RAC
Adicione agora todos os parâmetros específicos para ums inatância do tipo RAC no seu pfile.
### simplesmente tire os comentários dos parâmetros: undo_tablespaces e dos cluster_data - são eles: *.cluster_database=true
*.cluster_database_instances=2
TSTDB1.local_listener='LISTENER_TSTDB1' TSTDB2.local_listener='LISTENER_TSTDB2'
TSTDB1.undo_tablespace='UNDOTBS1'
TSTDB2.undo_tablespace='UNDOTBS2'
TSTDB1.instance_number=1
TSTDB2.instance_number=2
TSTDB1.thread=1
TSTDB2.thread=2
Inicialize os Listeners adicionais
Já adicionamos uma entrada no TNS para LOCAL_LISTENER. Vamos inicializar um novo listener. Atualize os seguintes arquivos:
listener.ora
----------------
LISTENER_TSTDB_servidor1 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = vip-servidor1)(PORT = 1521)(IP = FIRST))
(ADDRESS = (PROTOCOL = TCP)(HOST = servidor1)(PORT = 1521)(IP = FIRST))
)
)
SID_LIST_LISTENER_TSTDB_DB01-servidor1 =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)
Inclua a seguinte entrada para o novo banco de dados. Inicialize os listener
tnsnames.ora
--------------------
TSTDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = vip-servidor1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = vip-servidor2)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = TSTDB)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
)
)
)
Compartilhe seu pfile
Copie o pfile para os discos ASM ou crie o spfile nestes discos e inclua essa informação no pfile local.
Crie os diretorios da nova instância no nó 2 e inicialize as duas instâncias.
TSTDB2 > startup
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size 2144432 bytes
Variable Size 257247056 bytes
Database Buffers 792723456 bytes
Redo Buffers 21626880 bytes
Database mounted.
Database opened.
TSTDB2 >
Vamos registrar todos os recursos com o CRS.
$ srvctl add database -d TSTDB -o /u01/app/oracle/product/10.2.0/db_1
$ srvctl add instance -d TSTDB -i TSTDB1 -n servidor1
$ srvctl add instance -d TSTDB -i TSTDB2 -n servidor2
$ srvctl add service -d TSTDB -s TSTDBSVC -r "TSTDB1,TSTDB2"
Confirme se todos os serviços foram registrados:
$ . oraenv
ORACLE_SID = [TSTDB1] ? CRS
$ crs_stat |grep tstdb
NAME=ora.TSTDB.TSTDB1.inst
NAME=ora.TSTDB.TSTDB2.inst
NAME=ora.TSTDB.TSTDBSVC.TSTDB1.srv
NAME=ora.TSTDB.TSTDBSVC.TSTDB2.srv
NAME=ora.TSTDB.TSTDBSVC.cs
NAME=ora.TSTDB.db
Concluímos a configuração. Estes procedimentos também podem ser usados para migrar instâncias para RAC, neste caso, ao invés de cria o banco de dados pelo comando "create database", usaremos o script gerado do controlfile do banco de dados non-RAC (alter database backup controlfile to trace).
O RAC deixou de ser um bicho-papão, veja como é simples criar um banco de dados numa instância RAC. Os procedimentos também são úteis para migrar instâncias non-RAC para RAC. Vamos lá?
Comece criando um banco de dados simples no primeiro nó do cluster.
Use o comando "create database", depois converta-o para RAC, incluindo as configurações específicas para uma instância em cluster. Finalmente registre a instânci com o cluster.
Criando um non-RAC database
Crie um pfile
1) Criar um pfile para non-RAC database no nó 1
Segue um exemplo de um pfile. Foram comentados os parâmetros específicos de um banco de dados clusterizado (RAC). Alguns destes parâmetros podem ser deixados sem comentários, veja abaixo:
TSTDB2.__db_cache_size=4395630592
TSTDB1.__db_cache_size=4395630592
TSTDB2.__java_pool_size=16777216
TSTDB1.__java_pool_size=16777216
TSTDB2.__large_pool_size=16777216
TSTDB1.__large_pool_size=16777216
TSTDB2.__shared_pool_size=905969664
TSTDB1.__shared_pool_size=905969664
TSTDB2.__streams_pool_size=0
TSTDB1.__streams_pool_size=0
##*.cluster_database=true
*.cluster_database_instances=2
*.compatible='10.2.0.4'
*.db_block_size=8192
*.db_create_online_log_dest_1='+TSTDB_DATA'
*.db_domain=''
*.db_file_multiblock_read_count=32
*.db_name='TSTDB'
*.db_unique_name='TSTDB'
*.db_create_file_dest='+PWTEST_DATA'
*.db_recovery_file_dest='+PWTEST_DATA'
*.db_recovery_file_dest_size=53687091200
*.job_queue_processes=0
*.log_archive_dest_1='LOCATION=+PWTEST_DATA'
*.log_buffer=20971520
*.open_cursors=300
*.optimizer_mode='ALL_ROWS'
*.pga_aggregate_target=500M
*.processes=100
*.remote_login_passwordfile='exclusive'
*.resource_limit=TRUE
*.sga_max_size=1G
*.sga_target=1G
*.star_transformation_enabled='TRUE'
*.undo_management='AUTO'
*.undo_retention=3600
TSTDB1.local_listener='LISTENER_TSTDB1' TSTDB2.local_listener='LISTENER_TSTDB2'
#TSTDB1.undo_tablespace='UNDOTBS1'
#TSTDB2.undo_tablespace='UNDOTBS2'
TSTDB1.instance_number=1
TSTDB2.instance_number=2
TSTDB1.thread=1
TSTDB2.thread=2
*.user_dump_dest='/u01/app/oracle/product/10.2.0/db_1/admin/tstdb/udump' *.control_files='+PWTEST_DATA/TSTDB/controlfile/TSTDB.ctl' *.audit_file_dest='/u01/app/oracle/product/10.2.0/db_1/admin/tstdb/adump' *.background_dump_dest='/u01/app/oracle/product/10.2.0/db_1/admin/tstdb/bdump' *.core_dump_dest='/u01/app/oracle/product/10.2.0/db_1/admin/tstdb/cdump' *.fal_server=TSTDB
*.fal_client=TSTDB
*.standby_file_management=AUTO
### use o número do nó no nome da instância, desta meneira já fica pronto para cnversão em RAC.
Inicialize o banco com a opção NOMOUNT
TSTDB1 > startup nomount
ORA-01078: failure in processing system parameters
ORA-00119: invalid specification for system parameter LOCAL_LISTENER
ORA-00132: syntax error or unresolved network name 'LISTENER_TSTDB1'
TSTDB1 >
Ok. Este ero acontece porque é necessário incluir no TNS o parâmetro local listener para resolver o nome LISTENER_TSTDB1.
Abra o tnsnames.ora e adicione as seguintes linhas:
LISTENER_TSTDB1 = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = vip-servidor1)(PORT = 1521)) )
------------->> nome do servidor rede vip <<<
inicialize a instância novamente.
TSTDB1 > startup nomount
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size 2144432 bytes
Variable Size 257247056 bytes
Database Buffers 792723456 bytes
Redo Buffers 21626880 bytes
TSTDB1 >
Crie o banco de dados:
###Se você se esqueceu de comentar o parâmetro "cluster_database" recebrá o seguinte erro:
TSTDB1 > create database;
create database
*
ERROR at line 1:
ORA-01501: CREATE DATABASE failed
ORA-12720: operation requires database is in EXCLUSIVE mode
TSTDB1 > show parameter cluster
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cluster_database boolean TRUE
cluster_database_instances integer 2
cluster_interconnects string
TSTDB1 >
Não sendo o caso, agora você irá executar:
catalog, catproc, pupbld scripts ### todos se encontram sobre /rdbms/admin
Converter para instância RAC
Primeiro, crie 2 UNDO tablespaces para as 2 instâncias.
TSTDB1 > create undo tablespace UNDOTBS1 datafile '+DG_DATA' size 100M autoextend on next 50M maxsize 500M;
Tablespace created.
TSTDB1 > create undo tablespace UNDOTBS2 datafile '+DG_DATA' size 100M autoextend on next 50M maxsize 500M;
Tablespace created.
Adicione uma nova thread de REDO e habilite-a
###Se esse passo for ignorado você irá receber o erro quando inicializar a segunda instância:
###ORA-01620: no public threads are available for mounting)
TSTDB1 > alter database add logfile thread 2 group 10 '+DG_DATA' size 100M;
Database altered.
TSTDB1 > alter database add logfile thread 2 group 11 '+DG_DATA' size 100M;
Database altered.
TSTDB1 > alter database enable public thread 2;
Database altered.
PARÂMETROS ESPECÍFICOS DE UMA INSTÂNCIA RAC
Adicione agora todos os parâmetros específicos para ums inatância do tipo RAC no seu pfile.
### simplesmente tire os comentários dos parâmetros: undo_tablespaces e dos cluster_data - são eles: *.cluster_database=true
*.cluster_database_instances=2
TSTDB1.local_listener='LISTENER_TSTDB1' TSTDB2.local_listener='LISTENER_TSTDB2'
TSTDB1.undo_tablespace='UNDOTBS1'
TSTDB2.undo_tablespace='UNDOTBS2'
TSTDB1.instance_number=1
TSTDB2.instance_number=2
TSTDB1.thread=1
TSTDB2.thread=2
Inicialize os Listeners adicionais
Já adicionamos uma entrada no TNS para LOCAL_LISTENER. Vamos inicializar um novo listener. Atualize os seguintes arquivos:
listener.ora
----------------
LISTENER_TSTDB_servidor1 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = vip-servidor1)(PORT = 1521)(IP = FIRST))
(ADDRESS = (PROTOCOL = TCP)(HOST = servidor1)(PORT = 1521)(IP = FIRST))
)
)
SID_LIST_LISTENER_TSTDB_DB01-servidor1 =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)
Inclua a seguinte entrada para o novo banco de dados. Inicialize os listener
tnsnames.ora
--------------------
TSTDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = vip-servidor1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = vip-servidor2)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = TSTDB)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
)
)
)
Compartilhe seu pfile
Copie o pfile para os discos ASM ou crie o spfile nestes discos e inclua essa informação no pfile local.
Crie os diretorios da nova instância no nó 2 e inicialize as duas instâncias.
TSTDB2 > startup
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size 2144432 bytes
Variable Size 257247056 bytes
Database Buffers 792723456 bytes
Redo Buffers 21626880 bytes
Database mounted.
Database opened.
TSTDB2 >
Vamos registrar todos os recursos com o CRS.
$ srvctl add database -d TSTDB -o /u01/app/oracle/product/10.2.0/db_1
$ srvctl add instance -d TSTDB -i TSTDB1 -n servidor1
$ srvctl add instance -d TSTDB -i TSTDB2 -n servidor2
$ srvctl add service -d TSTDB -s TSTDBSVC -r "TSTDB1,TSTDB2"
Confirme se todos os serviços foram registrados:
$ . oraenv
ORACLE_SID = [TSTDB1] ? CRS
$ crs_stat |grep tstdb
NAME=ora.TSTDB.TSTDB1.inst
NAME=ora.TSTDB.TSTDB2.inst
NAME=ora.TSTDB.TSTDBSVC.TSTDB1.srv
NAME=ora.TSTDB.TSTDBSVC.TSTDB2.srv
NAME=ora.TSTDB.TSTDBSVC.cs
NAME=ora.TSTDB.db
Concluímos a configuração. Estes procedimentos também podem ser usados para migrar instâncias para RAC, neste caso, ao invés de cria o banco de dados pelo comando "create database", usaremos o script gerado do controlfile do banco de dados non-RAC (alter database backup controlfile to trace).
sexta-feira, 10 de setembro de 2010
Como migrar da plataforma WIndows para Linux Oracle RAC
Sabemos que trabalhar com Windows em ambiente empresarial não dá. Se você quiser ter um ambiente estável tem que mudar para Linux. Demorei anos para aceitar isso, mas finalmente mudei. Agora quero passar de modo Fácil e Rápido como fazer isso.
Dicas:
1) Tire seu banco de dados do modo archive; depois você retorna.
2) Esteja certo que os níveis de patch aplicados sejam idênticos em ambas as plataformas.
"Tenho toda a minha base de dados Oracle instalada na plataforma Windows 2003 e agora quero ir para Linux. Quero ir direto para o RAC usando ASM. Não posso perder tempo usando export e import porque a base de dados está em produção e tempo de migração inviabilizaria o processo. Qual é o meio mais rápido?
Procurei na internet e ninguém faz nada parecido, então tive que ser criativo. Segue o roteiro:
1) Gere o init.ora para migrar seu banco com os mesmos parâmetros no Linux - create pfile from spfile;
2) Gere o controlfile - alter database backup controlfile to trace;
3) Retire o banco de dados do ar com opção immediate ou normal - shutdown immediate;
4) Monte diretamente no Linux os discos usando o caminho do diretório dos datafiles-
mkdir /mnt/datafile
mount /hostdobancooriginal/diretorio/datafile /mnt/datafile -o user=usuario
>>>informe a senha
5) Faça o backup (cópia) do seu banco direto para os discos ASMusando o rman
rman target system/system123@sid
convert datafile '/mnt/datafile/system01.dbf' format '+disk/datafile/system01.dbf' TO PLATFORM = 'Linux x86 64-bit' FROM PLATFORM= 'Microsoft Windows x86 64-bit';
6) após converter todos os datafiles, copie o initfile do banco Windows editando os parâmetros do novo ambiente RAC usando ASM, veja exemplo:
dbxp1.__db_cache_size=788529152
dbxp2.__db_cache_size=788529152
dbxp1.__java_pool_size=16777216
dbxp2.__java_pool_size=16777216
dbxp1.__large_pool_size=16777216
dbxp2.__large_pool_size=16777216
dbxp1.__shared_pool_size=268435456
dbxp2.__shared_pool_size=268435456
dbxp1.__streams_pool_size=0
dbxp2.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/dbxp/adump'
*.background_dump_dest='/u01/app/oracle/admin/dbxp/bdump'
*.compatible='10.2.0.4.0'
*.control_files='+DG_DISK2/dbxp/controlfile/control.ora'
*.core_dump_dest='/u01/app/oracle/admin/dbxp/cdump'
*.db_block_size=8192
*.db_create_file_dest='+DG_DISK'
*.db_create_online_log_dest_1='+DG_DISK'
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='dbxp'
*.db_recovery_file_dest='+DG_DISK'
*.db_recovery_file_dest_size=21474836480
*.dispatchers='(PROTOCOL=TCP) (SERVICE=dbxpXDB)'
*.cluster_database_instances=2
*.cluster_database=true
dbxp2.instance_number=2
dbxp1.instance_number=1
*.job_queue_processes=10
*.nls_language='BRAZILIAN PORTUGUESE'
*.nls_territory='BRAZIL'
*.open_cursors=300
*.pga_aggregate_target=365953024
*.processes=150
*.remote_listener='LISTENERS_DBXP'
*.remote_login_passwordfile='exclusive'
*.sga_target=1098907648
dbxp1.thread=1
dbxp2.thread=2
*.undo_management='AUTO'
dbxp2.undo_tablespace='UNDOTBS1'
dbxp1.undo_tablespace='UNDOTBS4'
*.user_dump_dest='/u01/app/oracle/admin/dbxp/udump'
7) Depois é só editar o controlfile, incluindo os datafiles com o a localização nova nos discos ASM, veja exemplo:
CREATE CONTROLFILE SET DATABASE "DBXP" RESETLOGS NOARCHIVELOG
MAXLOGFILES 192
MAXLOGMEMBERS 3
MAXDATAFILES 1024
MAXINSTANCES 32
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '+DG_DISK/dbxp/onlinelog/redo01.dbf' SIZE 50M,
GROUP 2 '+DG_DISK/dbxp/onlinelog/redo02.dbf' SIZE 50M
DATAFILE
'+dg_disk/dbxp/data/tools01.DBF',
'+dg_disk/dbxp/data/system_1.DBF',
'+dg_disk/dbxp/data/usersdp_1.DBF',
'+dg_disk/dbxp/data/sysaux01.DBF',
'+dg_disk/dbxp/data/undo02.ora';
'+dg_disk/sxp2h/data/undo03.ora';
8) Pronto! Agora vamos por o banco no ar?
alter database open resetlogs;
Como você está criando o banco manualmente (sem DBCA), você deverá criar o banco sem os atributos de RAC, como o atributo instance_number. Depois é só incluir novamente. Também será preciso criar os serviços manualmente. No próximo artigo eu explico como fazer isso.
Boa sorte e sucesso.
Luis Adelson.
Dicas:
1) Tire seu banco de dados do modo archive; depois você retorna.
2) Esteja certo que os níveis de patch aplicados sejam idênticos em ambas as plataformas.
"Tenho toda a minha base de dados Oracle instalada na plataforma Windows 2003 e agora quero ir para Linux. Quero ir direto para o RAC usando ASM. Não posso perder tempo usando export e import porque a base de dados está em produção e tempo de migração inviabilizaria o processo. Qual é o meio mais rápido?
Procurei na internet e ninguém faz nada parecido, então tive que ser criativo. Segue o roteiro:
1) Gere o init.ora para migrar seu banco com os mesmos parâmetros no Linux - create pfile from spfile;
2) Gere o controlfile - alter database backup controlfile to trace;
3) Retire o banco de dados do ar com opção immediate ou normal - shutdown immediate;
4) Monte diretamente no Linux os discos usando o caminho do diretório dos datafiles-
mkdir /mnt/datafile
mount /hostdobancooriginal/diretorio/datafile /mnt/datafile -o user=usuario
>>>informe a senha
5) Faça o backup (cópia) do seu banco direto para os discos ASMusando o rman
rman target system/system123@sid
convert datafile '/mnt/datafile/system01.dbf' format '+disk/datafile/system01.dbf' TO PLATFORM = 'Linux x86 64-bit' FROM PLATFORM= 'Microsoft Windows x86 64-bit';
6) após converter todos os datafiles, copie o initfile do banco Windows editando os parâmetros do novo ambiente RAC usando ASM, veja exemplo:
dbxp1.__db_cache_size=788529152
dbxp2.__db_cache_size=788529152
dbxp1.__java_pool_size=16777216
dbxp2.__java_pool_size=16777216
dbxp1.__large_pool_size=16777216
dbxp2.__large_pool_size=16777216
dbxp1.__shared_pool_size=268435456
dbxp2.__shared_pool_size=268435456
dbxp1.__streams_pool_size=0
dbxp2.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/dbxp/adump'
*.background_dump_dest='/u01/app/oracle/admin/dbxp/bdump'
*.compatible='10.2.0.4.0'
*.control_files='+DG_DISK2/dbxp/controlfile/control.ora'
*.core_dump_dest='/u01/app/oracle/admin/dbxp/cdump'
*.db_block_size=8192
*.db_create_file_dest='+DG_DISK'
*.db_create_online_log_dest_1='+DG_DISK'
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='dbxp'
*.db_recovery_file_dest='+DG_DISK'
*.db_recovery_file_dest_size=21474836480
*.dispatchers='(PROTOCOL=TCP) (SERVICE=dbxpXDB)'
*.cluster_database_instances=2
*.cluster_database=true
dbxp2.instance_number=2
dbxp1.instance_number=1
*.job_queue_processes=10
*.nls_language='BRAZILIAN PORTUGUESE'
*.nls_territory='BRAZIL'
*.open_cursors=300
*.pga_aggregate_target=365953024
*.processes=150
*.remote_listener='LISTENERS_DBXP'
*.remote_login_passwordfile='exclusive'
*.sga_target=1098907648
dbxp1.thread=1
dbxp2.thread=2
*.undo_management='AUTO'
dbxp2.undo_tablespace='UNDOTBS1'
dbxp1.undo_tablespace='UNDOTBS4'
*.user_dump_dest='/u01/app/oracle/admin/dbxp/udump'
7) Depois é só editar o controlfile, incluindo os datafiles com o a localização nova nos discos ASM, veja exemplo:
CREATE CONTROLFILE SET DATABASE "DBXP" RESETLOGS NOARCHIVELOG
MAXLOGFILES 192
MAXLOGMEMBERS 3
MAXDATAFILES 1024
MAXINSTANCES 32
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '+DG_DISK/dbxp/onlinelog/redo01.dbf' SIZE 50M,
GROUP 2 '+DG_DISK/dbxp/onlinelog/redo02.dbf' SIZE 50M
DATAFILE
'+dg_disk/dbxp/data/tools01.DBF',
'+dg_disk/dbxp/data/system_1.DBF',
'+dg_disk/dbxp/data/usersdp_1.DBF',
'+dg_disk/dbxp/data/sysaux01.DBF',
'+dg_disk/dbxp/data/undo02.ora';
'+dg_disk/sxp2h/data/undo03.ora';
8) Pronto! Agora vamos por o banco no ar?
alter database open resetlogs;
Como você está criando o banco manualmente (sem DBCA), você deverá criar o banco sem os atributos de RAC, como o atributo instance_number. Depois é só incluir novamente. Também será preciso criar os serviços manualmente. No próximo artigo eu explico como fazer isso.
Boa sorte e sucesso.
Luis Adelson.
quinta-feira, 19 de agosto de 2010
Como instalar Oracle Enterprise Manager (Grid Control) 10gR2
Outro blog excelente, pena que o autor não o atualize mais.
No Problema! Este artigo já vale. Muito bom o texto e com detalhes que tornarão a tarefa de instalação e configuração do Grid Control uma moleza. Siga os passos e encontrará a solução do seu problema.
Link: http://brunomurassaki.wordpress.com/2010/02/01/oracle-enterprise-manager-10g-grid-control-release-5/
Mas geralmente precisamos desinstalar o antigo DBConsole que é instalado junto com a ferramenta, então siga esta sequência:
1) Vá para o diretório: /sysman/admin/emdrep/bin/
2) execute: ./RepManager <servidor> 1521 <nomedobanco> -action drop
-----> exemplo: ./RepManager sbd01 1521 db01 -action drop
ou utilize o tradicional (manualmente, argh!)
drop user SYSMAN cascade;
drop public synonym MGMT_TARGET_BLACKOUTS;
drop public synonym SETEMVIEWUSERCONTEXT;
drop role MGMT_USER;
drop user MGMT_VIEW cascade;
@?/rdbms/admin/dbmspool.sql
@?/rdbms/admin/prvtpool.plb
tudo com o usuário SYS logado, ok?
Até a próxima!
Luis Adelson Luniere
DBA certificado em 8i, 9i e 10g.
No Problema! Este artigo já vale. Muito bom o texto e com detalhes que tornarão a tarefa de instalação e configuração do Grid Control uma moleza. Siga os passos e encontrará a solução do seu problema.
Link: http://brunomurassaki.wordpress.com/2010/02/01/oracle-enterprise-manager-10g-grid-control-release-5/
Mas geralmente precisamos desinstalar o antigo DBConsole que é instalado junto com a ferramenta, então siga esta sequência:
1) Vá para o diretório: /sysman/admin/emdrep/bin/
2) execute: ./RepManager <servidor> 1521 <nomedobanco> -action drop
-----> exemplo: ./RepManager sbd01 1521 db01 -action drop
ou utilize o tradicional (manualmente, argh!)
drop user SYSMAN cascade;
drop public synonym MGMT_TARGET_BLACKOUTS;
drop public synonym SETEMVIEWUSERCONTEXT;
drop role MGMT_USER;
drop user MGMT_VIEW cascade;
@?/rdbms/admin/dbmspool.sql
@?/rdbms/admin/prvtpool.plb
tudo com o usuário SYS logado, ok?
Até a próxima!
Luis Adelson Luniere
DBA certificado em 8i, 9i e 10g.
Como recuperar a senha da instancia ASM
Perdeu a senha SYS da instance ASM?
Acontece, temos tanto cuidado com senhas que até nós mesmos esquecemos. Siga os passos abaixo para criar uma nova senha SYS para a instancia ASM:
1) Use o orapwd para criar a nova senha: orapwd file=PWD+ASM.ora password=ASM123 force=y
---->> não precisa ser tão simples assim, crie uma senha mais segura, ok?
Não sabe onde criar o arquivo de senha? Geralmente fica no caminho: $ORACLE_HOME/dbs
Mas você pode achar o arquivo:
no Linux use o comando: locate *orapw+ASM*
Espero ter sido útil!
Bom trabalho.
Luis Adelson Luniere
DBA certificado em 8i, 9i e 10g.
Acontece, temos tanto cuidado com senhas que até nós mesmos esquecemos. Siga os passos abaixo para criar uma nova senha SYS para a instancia ASM:
1) Use o orapwd para criar a nova senha: orapwd file=PWD+ASM.ora password=ASM123 force=y
---->> não precisa ser tão simples assim, crie uma senha mais segura, ok?
Não sabe onde criar o arquivo de senha? Geralmente fica no caminho: $ORACLE_HOME/dbs
Mas você pode achar o arquivo:
no Linux use o comando: locate *orapw+ASM*
Espero ter sido útil!
Bom trabalho.
Luis Adelson Luniere
DBA certificado em 8i, 9i e 10g.
Como instalar o Oracle RAC 10g R2
Fanstástico, para dizer o mínimo. Esse artigo informa de maneira simples e com muito detalhes o passo-a-passo desta tarefa que não é nada simple. A instalação do Oracle RAC 10g release 2 em VMWare descreve entre outras coisas como instalar e configurar o Linux. Parabéns ao autor!
Segui as instruções e funciona, portanto usem e abusem:
http://www.viniciusdba.com.br/blog/?cat=36
Usem e divulguem o blog do Vinicius como referência!
Bom trabalho.
Luis Adelson
DBA - certificado em 8i, 9i e 10g.
Segui as instruções e funciona, portanto usem e abusem:
http://www.viniciusdba.com.br/blog/?cat=36
Usem e divulguem o blog do Vinicius como referência!
Bom trabalho.
Luis Adelson
DBA - certificado em 8i, 9i e 10g.
Assinar:
Postagens (Atom)