Pular para o conteúdo
  • Este tópico contém 16 respostas, 7 vozes e foi atualizado pela última vez 16 anos, 1 mês atrás por Peterson.
Visualizando 15 posts - 1 até 15 (de 17 do total)
  • Autor
    Posts
  • #92137
    souza
    Participante

      Srs,

      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 bloco

      Estou 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

      #92138
      Avatar photoRegis Araujo
      Participante

        Salve 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..!

        #92139
        Marcio68Almeida
        Participante

          Você 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 ???

          #92141
          souza
          Participante

            Obrigado 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
            Souza

            #92154
            VitorLeandro
            Participante

              Esse 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# = 201

              Qual o tipo de backup você utiliza? O Banco está em archivelog?

              Uma recuperação de bloco com o RMAN (BLOCK RECOVER) pode ser interessante…

              #92157
              souza
              Participante

                Vitor

                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

                #92159
                hudsona
                Participante

                  SELECT * 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

                  #92161
                  souza
                  Participante

                    Ok rodei a query , porém como identifico o que tem problema ?

                    Obrigado

                    #92170
                    hudsona
                    Participante

                      Para 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;

                      ……

                      #92192
                      VitorLeandro
                      Participante

                        Opá, 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 97545

                        Você 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

                        #92194
                        VitorLeandro
                        Participante

                          Tente 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!

                          #92195
                          souza
                          Participante

                            srs , 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

                            #92198
                            hudsona
                            Participante

                              Souza

                              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.

                              #92404
                              David Siqueira
                              Participante

                                Olá 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

                                #92411
                                Peterson
                                Participante

                                  Souza,

                                  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.
                                  Solution

                                  From 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;
                                  Or

                                  When 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.lis

                                  ASM 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

                                Visualizando 15 posts - 1 até 15 (de 17 do total)
                                • Você deve fazer login para responder a este tópico.