none
open failed sql server 2000 could not open device for the virtual device number RRS feed

  • Pergunta

  • Pessoal, bom dia.

    Procurei aqui no forum e não achei.

    Quando chego de manhã, meu banco está como suspect. Reinicio os servicos e ele volta ao normal. Olho no log, e de madrugada, recebo isso:

    17204 :

    FCB::Open failed: Could not open device C:\Protheus10\SQL\DADOS\P10_DADOS_Data.MDF for virtual device number (VDN) 1.

    Alguem poderia me ajudar com isso ?

    Nesse horario (00:05) eu rodo um script assim:

    NET STOP "TotvsDBAccess 4.2 Server" >> STOPSERVICES.LOG
    NET STOP "Protheus 10" >> STOPSERVICES.LOG
    NET STOP "PROTHEUS10_NFE" >> STOPSERVICES.LOG
    NET STOP "SQLSERVERAGENT" >> STOPSERVICES.LOG
    NET STOP "MSSQLSERVER" >> STOPSERVICES.LOG

    echo %TIME% >> STOPSERVICES.LOG

    TASKKILL /IM TotvsApp* /f

    echo %TIME% >> STOPSERVICES.LOG

    NET START "MSSQLSERVER" >> STOPSERVICES.LOG
    NET START "SQLSERVERAGENT" >> STOPSERVICES.LOG
    NET START "Protheus 10" >> STOPSERVICES.LOG
    NET START "TotvsDBAccess 4.2 Server" >> STOPSERVICES.LOG
    NET START "PROTHEUS10_NFE" >> STOPSERVICES.LOG

    echo %TIME% >> STOPSERVICES.LOG

    Estou fazendo isso para liberar algumas conexões de um aplicativo que ficam penduradas durante o dia.

    Estou fazendo algo que possa gerar este erro ?

    quinta-feira, 1 de abril de 2010 12:02

Respostas

  • Filipe,

    Tenho uma outra query que poderá ajudar a matar todos os processos, veja abaixo:

     

    Declare @SPID SmallInt,
               @Contador SmallInt,
               @Comando VarChar(20)

    Declare @Id Table
     (CodId SmallInt)

    Insert Into @ID
    Select SPID from SysProcesses
    Where Status='sleeping'

    Select Top 1 @SPID = CodID from @ID
    Where CodID > 0

    While @Contador >=(Select Count(*) from @ID)
     Begin 
       
       Set @Comando='Kill '+Convert(VarChar(2),@SPID)
      
       Exec(@comando)
      
      Set @Contador = @Contador - 1

      Select Top 1 @SPID = CodID from @ID
      Where CodID >@SPID
     End

     


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    sexta-feira, 9 de abril de 2010 19:41
    Moderador

Todas as Respostas

  • Filipe,

     

    Você esta parando os serviços do SQL Server para derrubar as conexões que estão rodando de um determinado aplicativo?

    Acredito que você deveria procurar identificar somente estas conexões e realizar um Kill sobre elas ao invês de ficar parando os serviços, isso não é aconselhável.


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quinta-feira, 1 de abril de 2010 12:32
    Moderador
  • Filipe,

    Execute essa Query passando o parâmetro do seu Banco de Dados para matar as conexões de noite.

    CREATE

     

    procedure [dbo].[usp_killprocess] @dbname varchar(128) as

    set

     

    nocount on

    set

     

    quoted_identifier off

    declare

     

    @kill_id int

    declare

     

    @query varchar(320)

    declare

     

    killprocess_cursor cursor for

    select

     

    a.spid from master.dbo.sysprocesses a join

    master

     

    .dbo.sysdatabases b on a.dbid=b.dbid where b.name=@dbname

    open

     

    killprocess_cursor

    fetch

     

    next from killprocess_cursor into @kill_id

    while

     

    (@@fetch_status =0)

    begin

    set

     

    @query = 'kill '+ convert(varchar,@kill_id)

    exec

     

    (@query)

    fetch

     

    next from killprocess_cursor into @kill_id

    end

    close

     

    killprocess_cursor

    deallocate

     

    killprocess_cursor

     

    Espero ajudá-lo.

     

    Juliano Horta

    quinta-feira, 8 de abril de 2010 17:33
  • Filipe,

    Tenho uma outra query que poderá ajudar a matar todos os processos, veja abaixo:

     

    Declare @SPID SmallInt,
               @Contador SmallInt,
               @Comando VarChar(20)

    Declare @Id Table
     (CodId SmallInt)

    Insert Into @ID
    Select SPID from SysProcesses
    Where Status='sleeping'

    Select Top 1 @SPID = CodID from @ID
    Where CodID > 0

    While @Contador >=(Select Count(*) from @ID)
     Begin 
       
       Set @Comando='Kill '+Convert(VarChar(2),@SPID)
      
       Exec(@comando)
      
      Set @Contador = @Contador - 1

      Select Top 1 @SPID = CodID from @ID
      Where CodID >@SPID
     End

     


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    sexta-feira, 9 de abril de 2010 19:41
    Moderador