sábado, 4 de dezembro de 2010

DBNEWID - Alterando o nome de um banco de dados Oracle

Olá,

Neste artigo irei mostrar como alterar de forma simples e prática o nome de um banco de dados sem a necessidade de ter que recriar o arquivos de controle (control files). O utilitário nid (DBNEWID) disponível à partir do Oracle 9i fará este trabalho para nós. Imagine que temos um banco de dados chamado BD01 e que queremos alterar o seu nome para BD02. Vale a pena salientar que alterar também o DBID de um banco de dados pode vir a ser necessário quando precisamos registrá-lo em um catálogo de recuperação do RMAN no caso em que o banco de dados em questão tenha sido clonado de um banco de dados existente que já fora registrado no catálogo de recuperação. Portanto, não se pode ter dois bancos de dados com o mesmo DBID no catálogo de recuperação do RMAN.

Abaixo estão alguns dos parâmetros que poderemos utilizar com o utilitário nid (DBNEWID).

[oracle@localhost]$ nid

DBNEWID: Release 10.2.0.5.0 - Production on Sáb Dez 4 15:50:57 2010

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

Palavra-Chave Descrição (Default)
-----------------------------------------------------------
TARGET Nome do Usuário/Senha (NENHUM)
DBNAME Novo nome do banco de dados (NENHUM)
LOGFILE Log de Saída (NENHUM)
REVERT Reverter alteração com falha NÃO
SETNAME Define um novo nome de banco de dados NÃO
APPEND Acrescenta ao log de saída NÃO
HELP Exibe essas mensagens NÃO

No mais, temos três formas de usar o utilitário DBNEWID com propósitos diferentes para o cenário que irei apresentar. Vamos supor que o nome atual do meu banco de dados seja BD01 e que eu queira alterar o nome para BD02:

-- Alterar apenas o DBID do banco de dados BD01 (sem alterar o nome do banco de dados)
nid TARGET=sys/password@BD01

-- Alterar apenas o nome do banco de dados de BD01 para BD02 (sem alterar o DBID)
-- A cláusula SETNAME abaixo é utilizada para indicar que queremos somente alterar

-- o nome do banco de dados.

nid TARGET=sys/password@BD01 DBNAME=BD02 SETNAME=YES

-- Alterar o DBID e também o nome do banco de dados de BD01 para BD02
nid TARGET=sys/password@BD01 DBNAME=BD02

Vamos então a um exemplo prático onde irei alterar não só o DBID, como também o nome do banco de dados de BD01 para BD02 em um ambiente Linux. Em todos os casos, é necessário que o banco de dados esteja no estado MOUNT e que após a finalização do processo, o banco de dados deverá ser aberto com a opção RESETLOGS.

[oracle@localhost]$ export ORACLE_SID=BD01
[oracle@localhost]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.5.0 - Production on Sáb Dez 4 16:00:37 2010

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

Conectado a uma instância inativa.

SQL> startup mount
Instância ORACLE iniciada.

Total System Global Area 364904448 bytes
Fixed Size 2020832 bytes
Variable Size 117443104 bytes
Database Buffers 243269632 bytes
Redo Buffers 2170880 bytes
Banco de dados montado.
SQL> exit
Desconectado de Oracle Database 10g Enterprise Edition Release 10.2.0.5.0
With the Partitioning, OLAP and Data Mining options

[oracle@localhost]$ nid TARGET=/ DBNAME=BD02

DBNEWID: Release 10.2.0.5.0 - Production on Sáb Dez 4 16:02:13 2010

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

Conectado ao banco de dados BD01 (DBID=1078369007)

Conectado ao servidor versão 10.2.0

Arquivos de Controle no banco de dados:
/u01/app/oracle/oradata/BD01/control01.ctl
/u01/app/oracle/oradata/BD01/control02.ctl
/u01/app/oracle/oradata/BD01/control03.ctl

Alterar o ID do banco de dados e o nome do banco de dados BD01 para BD02? (S/[N]) => y

Continuando com a operação
Alterando ID do banco de dados de 1078369007 para 3201047653
Alterando nome do banco de dados de BD01 para BD02
Arquivo de Controle /u01/app/oracle/oradata/BD01/control01.ctl - modificado
Arquivo de Controle /u01/app/oracle/oradata/BD01/control02.ctl - modificado
Arquivo de Controle /u01/app/oracle/oradata/BD01/control03.ctl - modificado
Arquivo de dados /u01/app/oracle/oradata/BD01/system01.dbf - dbid alterado, escreveu novo nome
Arquivo de dados /u01/app/oracle/oradata/BD01/undotbs01.dbf - dbid alterado, escreveu novo nome
Arquivo de dados /u01/app/oracle/oradata/BD01/sysaux01.dbf - dbid alterado, escreveu novo nome
Arquivo de dados /u01/app/oracle/oradata/BD01/users01.dbf - dbid alterado, escreveu novo nome
Arquivo de dados /u01/app/oracle/oradata/BD01/temp01.dbf - dbid alterado, escreveu novo nome
Arquivo de Controle /u01/app/oracle/oradata/BD01/control01.ctl - dbid alterado, escreveu novo nome
Arquivo de Controle /u01/app/oracle/oradata/BD01/control02.ctl - dbid alterado, escreveu novo nome
Arquivo de Controle /u01/app/oracle/oradata/BD01/control03.ctl - dbid alterado, escreveu novo nome
Instância desativada

Nome do banco de dados alterado para BD02.
Modifique o arquivo de parâmetros e gere um novo arquivo de senha antes de reiniciar.
ID do Banco de Dados BD02 alterado para 3201047653.
Todos os backups anteriores e redo logs arquivados para este banco de dados não podem ser utilizados.
O banco de dados não conhece backups anteriores e logs de arquivamento na Área de Recuperação.
Banco de dados foi desativado; abra o banco de dados com a opção RESETLOGS.
ID e nome do banco de dados alterados com sucesso.
DBNEWID - Concluído com sucesso.

Após a utilização do utilitário DBNEWID, irei alterar o nome do arquivo de inicialização spfile, subir a instância BD02 no estado NOMOUNT e alterar o parâmetro de inicialização "db_name" para BD02.

[oracle@localhost]$ cd $ORACLE_HOME/dbs
[oracle@localhost dbs]$ mv spfileBD01.ora spfileBD02.ora
[oracle@localhost dbs]$ export ORACLE_SID=BD02
[oracle@localhost dbs]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.5.0 - Production on Sáb Dez 4 16:15:47 2010

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

Conectado a uma instância inativa.

SQL> startup nomount
Instância ORACLE iniciada.

Total System Global Area 364904448 bytes
Fixed Size 2020832 bytes
Variable Size 109054496 bytes
Database Buffers 251658240 bytes
Redo Buffers 2170880 bytes

SQL> alter system set db_name=BD02 scope=spfile;

Sistema alterado.

SQL> shutdown immediate
ORA-01507: banco de dados não montado

Instância ORACLE desativada.
SQL> exit
Desconectado de Oracle Database 10g Enterprise Edition Release 10.2.0.5.0
With the Partitioning, OLAP and Data Mining options

Para finalizar irei remover todos os arquivos que referenciavam o banco de dados BD01, criar um novo arquivo de senha, subir a instância no estado MOUNT e abrir o banco de dados com a opção RESETLOGS.

[oracle@localhost dbs]$ orapwd file=orapwBD02 password=senha entries=10
[oracle@localhost dbs]$ rm *BD01*
[oracle@localhost dbs]$ ls -l *BD02*
-rw-rw---- 1 oracle oinstall 1552 Dez 4 16:15 hc_BD02.dat
-rw-r----- 1 oracle oinstall 2560 Dez 4 16:17 orapwBD02
-rw-r----- 1 oracle oinstall 3584 Dez 4 16:16 spfileBD02.ora

[oracle@localhost dbs]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.5.0 - Production on Sáb Dez 4 16:28:27 2010

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

Conectado a uma instância inativa.

SQL> startup mount
Instância ORACLE iniciada.

Total System Global Area 364904448 bytes
Fixed Size 2020832 bytes
Variable Size 109054496 bytes
Database Buffers 251658240 bytes
Redo Buffers 2170880 bytes
Banco de dados montado.

SQL> alter database open resetlogs;

Banco de dados alterado.

SQL> select name,open_mode from v$database;

NAME OPEN_MODE
--------- ----------
BD02 READ WRITE

SQL> select instance_name,status from v$instance;

INSTANCE_NAME STATUS
---------------- ------------
BD02 OPEN

segunda-feira, 1 de novembro de 2010

Novidades na instalação do Oracle Database Patch Set 11g (11.2.0.2)

Olá,
Uma importante alteração na aplicação de patch sets, começando com o primeiro patch set Oracle Database 11g Release 2 (11.2.0.2), foi anunciada recentemente pela Oracle. Agora os mesmos são instalações completas do software Oracle Database. Nas versões anteriores, os patch sets consistiam em um conjunto de arquivos que substituíam os arquivos do ORACLE_HOME existente. Isso quer dizer que, se você está instalando o Oracle Database 11g em um sistema sem uma instalação existente do banco de dados Oracle, e quiser já instalar o último patch set disponível, então você poderá simplesmente instalar o patch set (11.2.0.2) diretamente sem a necessidade de instalar uma versão base (11.2.0.1).

Portanto, à partir do Oracle 11g (11.2.0.2), agora existem duas maneiras de aplicar um conjunto de correções (patch sets):
  • Out-of-place upgrade - Esta é a maneira recomendada pela Oracle para aplicar um patch set. Você instala o patch set e um ORACLE_HOME novo e diferente do atual. Depois de instalar o patch de atualização, você poderá então migrar o banco de dados do ORACLE_HOME antigo. Neste caso, o patch de atualização é realizado da mesma forma do método antigo, ou seja, como se estivesse atualizando de uma versão para outra (10g > 11g). A Oracle recomenda que você execute uma atualização fora do ORACLE_HOME atual, pelo fato de ser mais seguro, pois não exige a atualização de um ORACLE_HOME que já esteja em uso em um ambiente produção. No entanto, deve-se garantir que tenha espaço livre em disco suficiente para acomodar dois ORACLE_HOME, ao mesmo tempo.
  • In-place upgrade - Como nos métodos anteriores, você instala o patch set em um ORACLE_HOME existente. A Oracle recomenda que você selecione essa opção somente se você não tiver espaço livre em disco suficiente para executar o método Out-of-place upgrade. Esta opção requer menos espaço em disco, mas exige mais tempo e é mais arriscado, porque se acontecer alguna falha na instalação, será necessário recuperar todo o ORACLE_HOME à partir de um backup. Se você escolher esta opção (mais arriscada), será necessário seguir os seguintes procedimentos:
  1. Fazer um backup completo do ORACLE_HOME existente.
  2. Ler a seção do Upgrade Guide inteira lidando com atualizações in-loco.




Como mostrado na figura acima, os arquivos que compõem o patch set 11.2.0.2 estão listados abaixo:

Oracle Database             p10098816_112020_platform_1of7.zip
                            p10098816_112020_platform_2of7.zip
Oracle Grid Infrastructure  p10098816_112020_platform_3of7.zip
Oracle Database Client      p10098816_112020_platform_4of7.zip
Oracle Gateways             p10098816_112020_platform_5of7.zip
Oracle Examples             p10098816_112020_platform_6of7.zip
Deinstall                   p10098816_112020_platform_7of7.zip
Referências: Note 1189783.1 (Metalink)

sábado, 2 de outubro de 2010

Estratégia de backup - RMAN

Olá,
O artigo deste mês não é bem um artigo, mas uma apresentação que realizei recentemente para a equipe de analistas de banco de dados, na qual também faço parte, na empresa SYDLE que é especializada em desenvolvimento de sistemas de missão crítica, como sistemas Billing, CRM e Gestão de Matriz Energética. Venho atuando como analista de banco de dados na SYDLE, e esta apresentação foi uma oportunidade de mostrar um pouco da estratégia de backup para bases Oracle utilizando o RMAN.

Esta apresentação foi direcionada para os membros da equipe de analistas de banco de dados e trainees de forma a propor uma política de backup para todas as bases que compõem o ambiente da empresa (Desenvolvimento, Teste, Homologação, Mirror e Produção). A intenção foi apresentar além de conceitos gerais sobre o RMAN, a implementação de um shell script criado para ser utilizado na implantação da política de backup.