- Este tópico contém 16 respostas, 7 vozes e foi atualizado pela última vez 16 anos, 1 mês atrás por
Peterson.
-
AutorPosts
-
19 de janeiro de 2010 às 6:39 am #92137
souza
ParticipanteSrs,
Tenho um módulo da aplicação que ao rodar um relatório exibe a seguinte mensagem:
select error: ORA-01114: erro de IO durante gravação do bloco no arquivo 201( bloco # 97545)
ORA-27069: skgfdsp: tentativa de fazer E/S além da faixa do arquivo
OSD-04026: Parâmetro inválido especificiado (OS 97559)
ORA-01114: erro de IO durante gravação no blocoEstou em um ambiente Windows 2003 Std R2 32 bits com um 9.2.0.1
Já exclui a temp , recrie-a em outra partição , aumentei tamanho de datafile e o erro persiste! No alert nada consta , alguém tem alguma luz ou alguma dica para passar ?
Muito Obrigado pessoal
19 de janeiro de 2010 às 3:05 pm #92138Regis Araujo
ParticipanteSalve Souza..! Bom dia..!
Bom.. uma vez tive um erro destes e o problema não estava na tablespace TEMP e sim em 1 dos datafiles da tablespace de dados, onde o mesmo havia corrompido alguns blocos e por este motivo apresentava este erro…
Verifique se não existe alguma corrupção dentro dos seus datafiles… de um select nas tabelas que constam neste relatório…
Abraços..!
19 de janeiro de 2010 às 3:09 pm #92139Marcio68Almeida
ParticipanteVocê utiliza tabela temporária para efetuar esta consulta ?
Você acompanhou a utilização da tablespace temporária durante o processo ?
Você verificou se todos os datafiles estão online ???19 de janeiro de 2010 às 5:34 pm #92141souza
ParticipanteObrigado pela resposta Srs,
Vou tentar buscar as querys para tentar executar no banco!
Como eu poderia verificar corrupção nos meus datafiles ? Não iria aparecer erro no alert se fosse isso ?
Não utilizo table temporária para fazer essa consulta. Acompanhei a utilização da ts temporária e não esgotou os recursos. Sobre os datafiles todos encontram-se online sim.
Obrigado
Souza19 de janeiro de 2010 às 7:41 pm #92154VitorLeandro
ParticipanteEsse erro me parece algum datafile corrompido..
Faça o seguinte, procure o datafile:
select * from dba_data_files where file_id = 201
ou
select * from v$datafile where file# = 201Qual o tipo de backup você utiliza? O Banco está em archivelog?
Uma recuperação de bloco com o RMAN (BLOCK RECOVER) pode ser interessante…
19 de janeiro de 2010 às 8:09 pm #92157souza
ParticipanteVitor
Tentei executar a query, porém não tem datafile 201 em meu banco e na dba_data_files não tem indicação de arquivos corrompidos. Mas mesmo assim obrigado
Utilizo backup fisico com archivelog
Alguém poderia me dizer uma sugestão de como faço para tentar identificar isso ?
Muito obrigado
19 de janeiro de 2010 às 8:37 pm #92159hudsona
ParticipanteSELECT * FROM V$DATAFILE WHERE FILE# IN (SELECT FILE_id FROM DBA_DATA_FILES)
Ele provavelmente deu o File_id=121 como exemplo para você verificar o file_id do seu data_file
19 de janeiro de 2010 às 9:01 pm #92161souza
ParticipanteOk rodei a query , porém como identifico o que tem problema ?
Obrigado
19 de janeiro de 2010 às 9:50 pm #92170hudsona
ParticipantePara verificar se você tem algum datafile corrompido, vai ter que forçar um backup, como seu banco esta rodando em archivelog é só ir direto…
RMAN> backup validate check logical database;
SQL> select * from v$database_block_corruption;
……
19 de janeiro de 2010 às 11:21 pm #92192VitorLeandro
ParticipanteOpá, acabei de ver meus e-mails… Esse scripts são pra verificar se realmente existe esse datafile.
Como hudsona informou, se você rodar a query abaixo e retornar algo tipo:
SELECT * FROM V$DATABASE_BLOCK_CORRUPTION
File# Bloco
201 97545Você precisará realizar um recover se aparecerem blocosmarcados como CORRUPT.
[b]
* Sujiro que você solicite algum DBA mais experiente para você realizar qualquer tipo de recover, caso você não esteja seguro!
[/b]Conectar ao RMAN
rman target /Verificação de blocos corrompidos:
[code]RMAN>BACKUP VALIDATE CHECK LOGICAL DATABASE;Recuperando os blocos corrompidos
(Este comando, recupera todos os blocos marcados como corrompidos na “V$DATABASE_BLOCK_CORRUPTION”
Por isso é importante que você veja nesta view se os blocos informados são os mesmos que aparecem no seu alert log.RMAN>BLOCKRECOVER CORRUPTION LIST;
post aí o retorno do select * from V$DATABASE_BLOCK_CORRUPTION
19 de janeiro de 2010 às 11:40 pm #92194VitorLeandro
ParticipanteTente invertigar o motivo do arquivo ter sido corrompido e tambem utilize ferramentas de verificação de integridade do disco como o chkdsk para verificar se seus discos estão OK!
20 de janeiro de 2010 às 12:39 am #92195souza
Participantesrs , o resultado v$database_block_corr….. foi de nenhuma linha retornada
o que vcs aconselham ? mesmo não usando rman forço um backup para ver se tenho algum problema ou tento outra alternativa ?
muito obrigado
eduardo
20 de janeiro de 2010 às 3:46 pm #92198hudsona
ParticipanteSouza
Você abriu o rman no banco que esta ocorrendo o problema e
executou o seguinte comando :rman $ BACKUP VALIDATE CHECK LOGICAL DATABASE;
antes de verificar a V$DATABASE_BLOCK_CORRUPTION ?
Antes de entrar no rman, se não for se conectar a um catalogo, especifica a ORACLE_SID, principalmente se for ambiente windows.
2 de fevereiro de 2010 às 4:39 pm #92404David Siqueira
ParticipanteOlá rapaziada,
Hudson excelentes conselhos, Vitor muito boas observações.
Souza, tente seguir esses passos :
http://databaseguard.blogspot.com/2009/08/rman-bmr-block-media-recover.html
Se a visão de blocos corrompidos não retornar nenhuma linha, dê graças a Deus, é sinal que seu banco está integro, o que pode estar ocorrendo é algum tipo de corrupção a nivel de dados mesmo, tente fazer um EXPORT da tabela depois de usar o RMAN para checar se ha blocos corrompidos no seu banco, se o EXPORT sair com sucesso sem problemas acredito que não haja erros nesse objeto, mais pode ser que seja algo a nível de S.O também.
Mas vamos por parte, verifique primeiro se não há nada de errado com a saude do BD, e na sequencia siga os conselhos da galera.
Abraço
2 de fevereiro de 2010 às 7:54 pm #92411Peterson
ParticipanteSouza,
Talvez o DBVerify possa te ajudar. Veja um documento interessante que lhe ensina a gerar um script .bat e como executá-lo para buscar datafiles corrompidos. Acredito que seja mais simples, porque você não usa o RMAN. É importante você verificar se não está usando ASM, aí o procedimento seria diferente… Segue…
This note will create windows script (.BAT) to run dbverify on all datafiles.
SolutionFrom SQL*PLUS, Run the following to construct your DBV command script to run from the command window:
When the database is open
The Script
Make sure to change the spool directory to your ORACLE_HOME/bin directory.
Set verify off
set heading off
set echo off
set flush off
set pagesize 9999
set linesize 256
spool d:oracleora90bindbvall.bat
select ‘dbv file=’||d.file_name||’ blocksize=’||block_size||’ feedback=1000 logfile=’||d.file_id||’.lis’
from dba_data_files d, dba_tablespaces t
where d.tablespace_name=t.tablespace_name
order by d.file_id desc;
spool off;
OrWhen the database is in mount or Open stage
The Script
Make sure to change the spool directory to your ORACLE_HOME/bin directory.
Set verify off
set heading off
set echo off
set flush off
set pagesize 9999
set linesize 256
spool d:oracleora90bindbvall.bat
select ‘dbv file=’||name||’ blocksize=’||block_size||’ feedback=1000 logfile=’||file#||’.lis’
from v$datafile order by file# desc ;
spool off;NOTE:We specify exactly where the spool file goes, because different versions of RDBMS will put the results is different places.
Open up a command window
CD to the ORACLE HOMEbin directory then run the file “dbvall.bat”
Notice that a “.lis” file is created for each run of dbverify. Those file can be examined in a text editor or in the event of suspected corruption, those .lis files can be attached to the SR for the support analyst to examine.
Example Output
dbv USERID= file=D:ORACLEORADATAORA90USERS01.DBF feedback=1000 logfile=8.lis
dbv USERID= file=D:ORACLEORADATAORA90TOOLS01.DBF feedback=1000 logfile=7.lis
dbv USERID= file=D:ORACLEORADATAORA90INDX01.DBF feedback=1000 logfile=6.lis
dbv USERID= file=D:ORACLEORADATAORA90EXAMPLE01.DBF feedback=1000 logfile=5.lis
dbv USERID= file=D:ORACLEORADATAORA90DRSYS01.DBF feedback=1000 logfile=4.lis
dbv USERID= file=D:ORACLEORADATAORA90CWMLITE01.DBF feedback=1000 logfile=3.lis
dbv USERID= file=D:ORACLEORADATAORA90UNDOTBS01.DBF feedback=1000 logfile=2.lis
dbv USERID= file=D:ORACLEORADATAORA90SYSTEM01.DBF feedback=1000 logfile=1.lisASM Database
The the datafiles are part of an ASM instance then the syntax is slightly different. “blocksize” is NOT used and “USERID” is new.
>dbv USERID=username/password file=filename logfile=
References
NOTE:352907.1 – Script To Run DBV On All Datafiles Of the Database
-
AutorPosts
- Você deve fazer login para responder a este tópico.