locked
Erro ao executar uma procedure no sqlsqpress - aplicacao asp.net RRS feed

  • Pergunta

  • Pessoal. bom dia.

    Por favor, preciso de ajuda.

    Eu criei uma aplicacao asp.net c#, esta aplicação faz referencia a um projeto de dll (a dll é de acesso a dados)

    Nesta dll de acesso a dados eu invoco uma procedure que tem a função de restaurar um backup no notebook do cliente.

    Naturalmente, a procedure está no banco Master do notebook,  (maquina)sqlspress, e o arquivo de backup tambem.

    Eu abro a conexao com o banco Maquina\Sqlspress utilizando o banco master e usuario com acesso admin.

    Ocorre o erro abaixo:

    Message:The media family on device 'C:\Versões SIS\bd\1.00.002\Cadastro_vazio.bak' is incorrectly formed. SQL Server cannot process this media family.

    RESTORE DATABASE is terminating abnormally

    Alguem pode me dar uma ideia? Será que tem como contornar

    O drive e arquivos existem na maquina onde deveria ser executado (não é no server) e sim no notebook.

    Alguem poderia me dar outra forma de restaurar o backup via aplicação?

    Lembrando que estou acessando um servidor de um note e o backup seria restaurado no note, no sqlspress;

    No note eu informo  http://server/aplicacao/default.aspx executo um botão executar.

    Este evento chama a DLL que abre conexão com o banco e tenta executar a procedure.

    Muito obrigado.

     

    Abaixo segue a procedure:

    /* Inicio procedure */

    CREATE Procedure RESTORE_DATABASE_AUXILIAR

     (
      @pathLocalizacao_Versaosis VARCHAR(200),
            @codigoVersao      VARCHAR(10),
            @nomeBancoCadastroBackup   VARCHAR(100),
            @logicalFileName1          VARCHAR(50),
            @logicalFileName2          VARCHAR(50)
     )

    AS

    DECLARE @SQLString nvarchar(4000); 
    DECLARE @ParmDefinition nvarchar(2000); 

    SET @SQLString = 'RESTORE DATABASE Cadastro from disk= ''' + @pathLocalizacao_Versaosis + 'bd\' + @codigoVersao + '\' + @nomeBancoCadastroBackup + '''
                                             WITH  NOREWIND, NOUNLOAD,  STATS = 10, 
                                             MOVE ''' + @logicalFileName1 + ''' TO ''C:\\MSSQL\\data\\2005\\Cadastro.MDF'',
                                             MOVE ''' + @logicalFileName2 + ''' TO ''C:\\MSSQL\\data\\2005\\Cadastro_log.LDF''';
    --PRINT @SQLString
    SET @ParmDefinition = N'';
    EXECUTE sp_executesql @SQLString, @ParmDefinition;

    /* fim procedure */

    • Movido Gustavo Maia Aguiar terça-feira, 11 de janeiro de 2011 13:04 (De:SQL Server - Desenvolvimento Geral)
    terça-feira, 11 de janeiro de 2011 11:46

Respostas

  • Dá uma olhada na config. do SQL. Habilita Named Pipes e conexões remotas e faz o teste novamente.

    Se der certo pelo SSMS, deve dar certo também pela aplicação.

     

    Abraços


    Erickson Ricci - MCP, MCTS, MCTS BI - ericksonricci.wordpress.com
    • Marcado como Resposta Jose Geraldo sexta-feira, 14 de janeiro de 2011 22:13
    terça-feira, 11 de janeiro de 2011 13:22
  • Erikson. Muito obrigado mesmo. Funcionou e acredito que seja devido às permissões que voce me deu a dica e uma alteração aqui.

    consegui aqui da seguinte forma.

    Compartilhei o drive do servidor como \\server\VERSAO e ai ficou assim:(abaixo a linha que chega no sql profiler, basta ver a procedure pra ver que o caminho do arquivo tá pegando da rede.

    exec RESTORE_DATABASE_AUXILIAR @pathLocalizacao_Versaosis=N'\\SERVER\VERSAO\',@codigoVersao=N'1.00.002',@nomeBancoCadastroBackup=N'Cadastro.bak',@logicalFileName1=N'Cadastro',@logicalFileName2=N'Cadastro_log'

    Como te disse obrigado, mesmo.

    Não é preciso que alguem faça por nós, mas uma idéia sempre ajuda quando perdemos a saída.

    Obrigado.

    terça-feira, 11 de janeiro de 2011 18:00

Todas as Respostas

  • Jose,

    Abre uma conexão no banco de dados como administrador e executa a procedure xp_cmdshell tentando acessar (fazer um dir, por exemplo) no diretório onde está o seu arquivo de backup.

    Verifique se no comando, o caminho do diretório não deve ser escrito no formato 8 letras, tipo "arquivo~" sabe?!

    Já tive problemas como este e tive de alterar o caminho do diretório.

     

    Abraços


    Erickson Ricci - MCP, MCTS, MCTS BI - ericksonricci.wordpress.com
    terça-feira, 11 de janeiro de 2011 12:08
  • Erickson. Obrigado pelo Help.

    Eu conectei no sqlexpress do note pelo SQL 2005 da minha maquina e tentei rodar um cmdxel. Ocorre o erro abaixo:

    Ainda não executei pela aplicacao, mas parece que é falta de permissão para remote connection.;

    seria isso?

    obrigado.

    SQLState = 08001, NativeError = 53

    Error = [Microsoft][SQL Native Client]Named Pipes Provider: Could not open a connection to SQL Server [53].

    SQLState = HYT00, NativeError = 0

    Error = [Microsoft][SQL Native Client]Login timeout expired

    SQLState = 08001, NativeError = 53

    Error = [Microsoft][SQL Native Client]An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connecti

     

    terça-feira, 11 de janeiro de 2011 13:19
  • Dá uma olhada na config. do SQL. Habilita Named Pipes e conexões remotas e faz o teste novamente.

    Se der certo pelo SSMS, deve dar certo também pela aplicação.

     

    Abraços


    Erickson Ricci - MCP, MCTS, MCTS BI - ericksonricci.wordpress.com
    • Marcado como Resposta Jose Geraldo sexta-feira, 14 de janeiro de 2011 22:13
    terça-feira, 11 de janeiro de 2011 13:22
  • Habilitei e nada...

    obrigado.

    • Marcado como Resposta Jose Geraldo sexta-feira, 14 de janeiro de 2011 22:12
    • Não Marcado como Resposta Jose Geraldo sexta-feira, 14 de janeiro de 2011 22:13
    terça-feira, 11 de janeiro de 2011 17:14
  • Erikson. Muito obrigado mesmo. Funcionou e acredito que seja devido às permissões que voce me deu a dica e uma alteração aqui.

    consegui aqui da seguinte forma.

    Compartilhei o drive do servidor como \\server\VERSAO e ai ficou assim:(abaixo a linha que chega no sql profiler, basta ver a procedure pra ver que o caminho do arquivo tá pegando da rede.

    exec RESTORE_DATABASE_AUXILIAR @pathLocalizacao_Versaosis=N'\\SERVER\VERSAO\',@codigoVersao=N'1.00.002',@nomeBancoCadastroBackup=N'Cadastro.bak',@logicalFileName1=N'Cadastro',@logicalFileName2=N'Cadastro_log'

    Como te disse obrigado, mesmo.

    Não é preciso que alguem faça por nós, mas uma idéia sempre ajuda quando perdemos a saída.

    Obrigado.

    terça-feira, 11 de janeiro de 2011 18:00