terça-feira, 23 de setembro de 2008

Seja bem-vindo My Oracle Support .... Adeus Metalink ....

Olá,

Para quem já conhece o Oracle Metalink, as boas notícias são que neste ano da edição do Oracle OpenWorld que está acontecendo em São Francisco nos EUA, foi anunciado uma nova versão do Oracle Metalink com o nome de "My Oracle Support", e inclusive já está disponível para acesso. Dentre as mudanças, ele está com uma interface mais interativa que nos fornecerá um suporte mais pró-ativo, personalizado, 24 horas por dia e 7 dias por semana. Também houve uma melhora no acesso às ferramentas de suporte, base de conhecimento, pesquisas, downloads de patches, abertura de chamados, entre muitas outras inovações. Para quem tiver uma conta CSI válida para acessá-lo, o plugin Adobe Flash 9 deverá ser instalado para fazer uso da nova interface. Abaixo, disponibilizei algumas imagens utilizando a nova interface:












segunda-feira, 15 de setembro de 2008

Solucionando o erro ORA-01187 em arquivos de dados temporários ...

Olá,


Recentemente um amigo meu teve um problema ao realizar uma exportação completa (full export) em um banco de dados Oracle 10g release 2 (10.2.0.1.0) instalado em um Suse Linux 9.2. Bem, tudo começou quando um técnico foi substituir um disco defeituoso no servidor de produção configurando em RAID 5. Apenas para recapitular, nesta configuração as informações de paridade são distribuídas entre os discos do array. O RAID 5 é muito semelhante ao nível 4, exceto pelo fato de que a paridade não fica destinada a um único disco, mas à toda matriz, fazendo com que a gravação de dados seja mais rápida, pelo fato de não ser necessário acessar um disco de paridade em cada gravação. Bom, voltando ao assunto original, o problema do meu amigo se iniciou quando o técnico resolveu dar um rebuild no array, ou seja, reconstruir o array. O problema é que após o procedimento, todos os dados tinham sido apagados ... Em resumo, como era início da manhã e os usuários estavam começando a chegar para trabalhar, meu amigo resolveu restaurar um backup frio da noite anterior em um servidor Oracle temporário que estava preparado para uso em caso de emergências. Ao restaurar o backup e abrir o banco de dados, ele tentou realizar uma exportação completa antes de liberar o acesso para os usuários, mas logo no início da exportação, e para surpresa dele, o erro ORA-01187 foi emitido dizendo que não era possível ler a partir de um arquivo pertencente ao tablespace temporário porque o mesmo havia falhado nos testes de verificação. Ao tentarmos ler informações da view DBA_TEMP_FILES, o mesmo erro era emitido, e após algumas análises, concluí que o backup frio utilizado para restaurar os dados não estava consistente, pelo menos parecia que o arquivo de dados pertencente ao tablespace temporário era de outra encarnação ou de um outro banco de dados.

Em resumo, neste artigo irei simular o mesmo problema ocorrido e demonstrar o que fazer para resolvê-lo.

Para simular o problema, eu copiei o arquivo de dados (tempfile) de um banco dados Oracle 10g Enterprise Edition instalado em um Linux para outro banco de dados Oracle XE instalado em um Windows, antes de abrir o banco de dados (Oracle XE).

-- Tentando gerar uma exportação full
C:\>exp system/password file=fullexport.dmp full=y

Export: Release 10.2.0.1.0 - Production on Seg Set 15 10:30:29 2008

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

Conectado a: Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
Exportação executada no conjunto de caracteres de WE8PC850 e no conjunto de
caracteres de AL16UTF16 NCHAR o servidor usa WE8MSWIN1252 conjunto de caracteres
(conversão de conjunto de caracteres possível)

Sobre exportar o banco de dados inteiro ...
. exportando definições de tablespace
EXP-00008: Erro Oracle: 1187 encontrado
ORA-01187: não é possível ler a partir do arquivo 201, porque houve falha nos testes
de verificação ORA-01110: 201 do arquivo de dados: 'C:\ORACLEXE\ORADATA\XE\TEMP.DBF'
EXP-00000: Exportação encerrada sem êxito

-- Verificando o status da instância
SYS> select status from v$instance;

STATUS
------------
OPEN

-- Tentando obter informações da view dba_temp_files
SYS> select * from dba_temp_files;
select * from dba_temp_files
*
ERRO na linha 1:
ORA-01187: não é possível ler a partir do arquivo 201, porque houve falha nos testes
de verificação ORA-01110: 201 do arquivo de dados: 'C:\ORACLEXE\ORADATA\XE\TEMP.DBF'
De acordo com o manual da Oracle:

ORA-01187: cannot read from file string because it failed verification tests
Cause: The data file did not pass the checks to insure it is part of the database. Reads are not allowed until it is verified.
Action: Make the correct file available to the database. Then, either open the database, or execute ALTER SYSTEM CHECK DATAFILES.

Como a ação sugerida acima é bem genérica, vamos ver se executando o comando ALTER SYSTEM CHECK DATAFILES conseguimos alguma informação adicional.

SYS> alter system check datafiles;

Sistema alterado.

-- Lendo o conteúdo do log de alerta
Mon Sep 15 10:45:26 2008
Errors in file c:\oraclexe\app\oracle\admin\xe\bdump\xe_dbw0_3548.trc:
ORA-01186: file 201 failed verification tests
ORA-01122: database file 201 failed verification check
ORA-01110: data file 201: 'C:\ORACLEXE\ORADATA\XE\TEMP.DBF'
ORA-01203: wrong incarnation of this file - wrong creation SCN

Mon Sep 15 10:45:26 2008
File 201 not verified due to error ORA-01122

De acordo com o log de alerta, podemos perceber que o arquivo 201 não está consistente com as informações do dicionário de dados. Neste caso, mesmo criando um novo tablespace (TEMP2) e definindo ele como padrão, não conseguiríamos remover o tablespace TEMP pelo fato de o mesmo conter um arquivo de dados inconsistente. Como estamos tratando de um arquivo de dados pertencente ao tablespace temporário, ou seja, não é um arquivo crítico que precisaria de recuperação, então para ser mais direto, teremos apenas que remover este arquivo "defeituoso" e adicionar um novo:

SYS> alter database tempfile 'c:\oraclexe\oradata\xe\temp.dbf' drop including datafiles;

Banco de dados alterado.

-- Adicionando um novo arquivo (tempfile)
SYS> alter tablespace temp add tempfile 'c:\oraclexe\oradata\xe\temp.dbf' size 30m;
alter tablespace temp add tempfile 'c:\oraclexe\oradata\xe\temp.dbf' size 30m
*
ERRO na linha 1:
ORA-01119: erro ao criar o arquivo 'c:\oraclexe\oradata\xe\temp.dbf' de banco de dados
ORA-27038: arquivo criado já existe
OSD-04010: opção especificada, arquivo existente

Como eu esperava que o arquivo temp.dbf fosse deletado do sistema operacional, pelo fato de eu ter utilizado a cláusula INCLUDING DATAFILES no comando anterior, podemos perceber que isto não aconteceu como aconteceria em outras plataformas (Unix/Linux). Portanto, nas plataformas Windows, será necessário deletarmos o arquivo manualmente antes de adicionar o arquivo temporário, ou como segunda alternativa, adicionarmos a cláusula REUSE no comando de criação:

SYS> alter tablespace temp add tempfile 'c:\oraclexe\oradata\xe\temp.dbf'
2 reuse autoextend off;

Tablespace alterado.

SYS> select file_name,status from dba_temp_files;

FILE_NAME STATUS
------------------------------------------------ ---------
C:\ORACLEXE\ORADATA\XE\TEMP.DBF AVAILABLE

Após criado o arquivo, o mesmo poderá ser utilizado pelo tablespace TEMP sem maiores problemas ...

terça-feira, 2 de setembro de 2008

Assistente de instalação para o Oracle Instant Client?

Olá,
Para quem não conhece o Oracle Instant Client, o mesmo está disponível para download nas plataformas Windows, Linux, Mac OS X, Solaris, HP-UX e AIX. O Oracle Instant Client nos permite executar aplicativos que precisam realizar uma conexão com o banco de dados Oracle sem a necessidade de ter que usarmos o CD de instalação do Oracle client (8i/9i/10g). Se alguém precisar de um Oracle Client que utilize menos espaço em disco, que possua uma instalação simplificada, que disponibilize um arquivo TNSNAMES.ORA ou até mesmo o utilitário SQL*Plus, então o Instant Client será a escolha ideal. Como a Oracle não disponibilizou um assistente de instalação padrão, e realmente não foi necessário simplesmente pelo fato de precisarmos apenas baixar os pacotes necessários, descompactá-los em uma pasta e criar alguma variáveis de ambiente, então eu resolvi criar e compartilhar um assistente de instalação para a plataforma Windows (particularmente para o XP) utilizando o utilitário Inno Setup de forma a automatizar algumas tarefas como: incluir o diretório de instalação na variável PATH do sistema, criação de chaves de registro (TNS_ADMIN, NLS_DATE_FORMAT, NLS_LANG), além de disponibilizar as bibliotecas básicas juntamente com o SQL*Plus, o arquivo TNSNAMES.ORA e o arquivo glogin.sql.

Antes de instalar o software, é recomendável verificar se a estação de trabalho já possui um software Oracle Client instalado. Caso já exista uma versão client instalada, acredito não ser necessária a instalação de mais um client, pelo fato de poder haver conflitos. Portanto, a instalação será por sua própria conta e risco!
 
Abaixo estão algumas telas do assistente de instalação:


Durante a instalação, caso a chave ORACLE não exista, então a mesma será criada no registro do Windows em HKEY_LOCAL_MACHINE\SOFTWARE com alguns valores de seqüência como demonstrados na figura abaixo:


Ao final da instalação, o grupo de programa Oracle Instant Client será criado como mostrado na figura abaixo:


Para quem interessar, será necessário baixar o arquivo instantclient.zip (20M) e, após descompactá-lo, bastará apenas clicar no arquivo instantclient.exe para iniciar a instalação.