none
Restaurar BackUp Do 2008 R2 para o 2014 RRS feed

  • Pergunta

  • Bom dia.

    Estou migrando os dados do Sql Express 2008 R2 para o 2014, porém em algumas tabelas aparece um erro ao atualizar:

    " Nenhuma linha foi atualizada.

    Os dados da Linha 1 não foram confirmados.

    Origem do Erro: .Net SqlCliente Data Provider.

    Mensagem de Erro: Sintaxe incorreta próximo a '44446'.

    Corrija os erros ou pressione ESC para cancelar as alterações. "

    Se alguém souber de algo... agradeço.

    sexta-feira, 16 de outubro de 2015 16:11

Respostas

  • Legal Everton...

    Vamos partir para a verificação da estrutura do teu banco, uma vez que o restore foi feito corretamete.

    Bom, me diz uma coisa, essa tabela que você está querendo alterar, possui alguma trigger associada?

    Acredito que o problema não esteja no backup / restore, mas em algum recurso no SQL Server 2008R2 que deixou de existir no 2012. 

    Se tiver alguma trigger associada nessa tabela, tente executar um

    ALTER TABLE NomeDaTabela DISABLE TRIGGER ALL

    e re-execute o update. 

    Lembrando que: Isso é um teste... sugiro que crie uma cópia dessa base, criando uma base de teste, se esta não for, por precaução.

    []'s!


    /* Logan Destefani Merazzi - DBA | @LoganMerazzi | http://www.merazzi.eti.br
    Se a resposta for útil, vote nela. Se resolveu, marque-a como resposta. */

    • Marcado como Resposta Marcos SJ sexta-feira, 16 de outubro de 2015 19:59
    sexta-feira, 16 de outubro de 2015 19:32
  • Vc tem que avaliar a necessidade do uso da trigger no seu ambiente, provavelmente você vai ter que revisar uma a uma pois pode ter havido alguma mudança na sintaxe que sua trigger não contempla !!!

    Flávio Farias
    "May the Force be with you"
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    • Marcado como Resposta Marcos SJ sexta-feira, 23 de outubro de 2015 12:15
    sexta-feira, 23 de outubro de 2015 11:55
  • Everton, a ideia não era deixar a trigger desativada, mas apenas comprovar que o problema não era no banco, mas em algum objeto dentro dele, causado pela migração para o 2014. A ideia é que você deixe a trigger habilitada, mas ela precisa ser alterada.

    O RAISERROR mudou. A indicação da Microsoft é passar a usar o Throw para enviar mensagens de erro. Se você quer manter o uso do RAIERROR, tente mudar para algo como:

    RAISERROR ('O registro não pode ser excluído nem alterado. Como já existem registros relacionados na tabela "tbl Contato Cliente", as regras de integridade referencial seriam violadas.',1,44445)

    Caso possa usar o THROW (já que estão usando o 2014), faça assim:

    declare @int int = 1
    if @int = 1
    THROW 144445, 'O registro não pode ser excluído nem alterado. Como já existem registros relacionados na tabela "tbl Contato Cliente", as regras de integridade referencial seriam violadas.',1

    Porém note que o código na frente precisou ser alterado. Isso, pois o código deve começar em 50000.

    Veja mais informações sobre o Throw em: https://msdn.microsoft.com/pt-br/library/ee677615(v=sql.120).aspx

    []'s!


    /* Logan Destefani Merazzi - DBA | @LoganMerazzi | http://www.merazzi.eti.br
    Se a resposta for útil, vote nela. Se resolveu, marque-a como resposta. */

    sexta-feira, 23 de outubro de 2015 12:55

Todas as Respostas

  • Boa tarde,

    Pergunta: Como está realizando essa migração dos dados? Chegaste a tentar realizar um backup da base que está no 2008R2 e restaurar no 2014?

    []'s!


    /* Logan Destefani Merazzi - DBA | @LoganMerazzi | http://www.merazzi.eti.br
    Se a resposta for útil, vote nela. Se resolveu, marque-a como resposta. */

    sexta-feira, 16 de outubro de 2015 16:37
  • Boa tarde.. sim sim... fiz o backup cheio no 2008 R2 e restaurei no 2014.

    Detalhe quanto eu restauro dentro de outro 2008R2 nao ocorre o problema.

    sexta-feira, 16 de outubro de 2015 18:34
  • Everton,

    Qual o procedimento exatamente você está querendo fazer? Você está querendo restaurar a partir de um backup? Ou está querendo modificar algum dado da base que já foi restaurada? 

    Se foi o primeiro, como você está rodando o comando de restore? Se foi o segundo, como você está tentando modificar esses dados?

    []'s!


    /* Logan Destefani Merazzi - DBA | @LoganMerazzi | http://www.merazzi.eti.br
    Se a resposta for útil, vote nela. Se resolveu, marque-a como resposta. */

    sexta-feira, 16 de outubro de 2015 18:47
  • Boa tarde.

    estou usando o Management studio.

    o procedimento foi assim:

    1 - fiz o backup com o management 2008 r2

    2 - fiz o restore via management no 2014

    3 - localizei a tabela cliente, cliquei com o direito sobre ela.. e coloquei editar dados, (ainda com o management) altero qq coisa e dou um enter... o erro ja aparece.

    Obs item 3 -> isso ocorre tambem em caso que eu tente inserir ou fazer um update do sistema via sql cliente atraves do comando update (via código) ou chamada odbc (dentro do access)

    O interessante é que eu depois de muito tentar fazer algo fiz o procedimento de importar dados (em um banco novo no 2014) pegando os dados direto da base onde aparece o erro (dentro do 2014 ainda) e dai funciona, mas este processo nao importa chaves primarias / relacionamentos / instruções de incremento e nada mais... so copia dados e nomes das colunas...

    Dai ja nao funciona.

    sexta-feira, 16 de outubro de 2015 19:23
  • Legal Everton...

    Vamos partir para a verificação da estrutura do teu banco, uma vez que o restore foi feito corretamete.

    Bom, me diz uma coisa, essa tabela que você está querendo alterar, possui alguma trigger associada?

    Acredito que o problema não esteja no backup / restore, mas em algum recurso no SQL Server 2008R2 que deixou de existir no 2012. 

    Se tiver alguma trigger associada nessa tabela, tente executar um

    ALTER TABLE NomeDaTabela DISABLE TRIGGER ALL

    e re-execute o update. 

    Lembrando que: Isso é um teste... sugiro que crie uma cópia dessa base, criando uma base de teste, se esta não for, por precaução.

    []'s!


    /* Logan Destefani Merazzi - DBA | @LoganMerazzi | http://www.merazzi.eti.br
    Se a resposta for útil, vote nela. Se resolveu, marque-a como resposta. */

    • Marcado como Resposta Marcos SJ sexta-feira, 16 de outubro de 2015 19:59
    sexta-feira, 16 de outubro de 2015 19:32
  • Legal.. deu certo ... pelo menos no primeiro teste...

    mas deduzo que vou precisar da triggers de novo... então fiz o seguinte:

    desativei a trigger dentro do 2014 refiz um backup, restaurei o back up e reativei a trigger

    1 - ALTER TABLE tblCliente DISABLE TRIGGER ALL

    2 - ALTER TABLE tblCliente ENABLE TRIGGER ALL

    Mas não funcionou. A principio pensei que tinha dado certo... mas quando ativo a trigger dentro do BD ele continua com o erro.

    não sei se devo manter ela desativada, ou se posso de alguma forma alterar ela...

    segue abaixo um exemplo de uma das triggers do Banco, que inclusive aparece ja no 2008 R2.

    ">

    USE [PCP2]
    GO
    /****** Object:  Trigger [dbo].[T_tbl_Cliente_DTrig]    Script Date: 22/10/2015 15:49:27 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER TRIGGER [dbo].[T_tbl_Cliente_DTrig] ON [dbo].[tbl Cliente] FOR DELETE AS
    SET NOCOUNT ON
    /* *IMPEDIR EXCLUSÕES SE HOUVER REGISTROS DEPENDENTES EM 'tbl Contato Cliente' */
    IF (SELECT COUNT(*) FROM deleted, "tbl Contato Cliente" WHERE (deleted.Cod_Cliente = "tbl Contato Cliente".Cod_Cliente)) > 0
        BEGIN
            RAISERROR 44445 'O registro não pode ser excluído nem alterado. Como já existem registros relacionados na tabela ''tbl Contato Cliente'', as regras de integridade referencial seriam violadas.'
            ROLLBACK TRANSACTION
        END

    <"


    Att, Everton


    sábado, 17 de outubro de 2015 18:04
  • bom dia conforme link abaixo.

    consegui resolver um problema, com ajuda... mas agora gostaria de saber se será necessário ativar a trigger... pq se ativo volta o erro.... e se deixo desativada fico preocupado com possíveis erros que possam ocorrer.

    Este Tópico



    Att, Everton

    • Mesclado Marcos SJ sexta-feira, 23 de outubro de 2015 12:12 Thread duplicada
    sexta-feira, 23 de outubro de 2015 10:52
  • Vc tem que avaliar a necessidade do uso da trigger no seu ambiente, provavelmente você vai ter que revisar uma a uma pois pode ter havido alguma mudança na sintaxe que sua trigger não contempla !!!

    Flávio Farias
    "May the Force be with you"
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    • Marcado como Resposta Marcos SJ sexta-feira, 23 de outubro de 2015 12:10
    sexta-feira, 23 de outubro de 2015 11:51
  • Vc tem que avaliar a necessidade do uso da trigger no seu ambiente, provavelmente você vai ter que revisar uma a uma pois pode ter havido alguma mudança na sintaxe que sua trigger não contempla !!!

    Flávio Farias
    "May the Force be with you"
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    • Marcado como Resposta Marcos SJ sexta-feira, 23 de outubro de 2015 12:15
    sexta-feira, 23 de outubro de 2015 11:55
  • Everton, a ideia não era deixar a trigger desativada, mas apenas comprovar que o problema não era no banco, mas em algum objeto dentro dele, causado pela migração para o 2014. A ideia é que você deixe a trigger habilitada, mas ela precisa ser alterada.

    O RAISERROR mudou. A indicação da Microsoft é passar a usar o Throw para enviar mensagens de erro. Se você quer manter o uso do RAIERROR, tente mudar para algo como:

    RAISERROR ('O registro não pode ser excluído nem alterado. Como já existem registros relacionados na tabela "tbl Contato Cliente", as regras de integridade referencial seriam violadas.',1,44445)

    Caso possa usar o THROW (já que estão usando o 2014), faça assim:

    declare @int int = 1
    if @int = 1
    THROW 144445, 'O registro não pode ser excluído nem alterado. Como já existem registros relacionados na tabela "tbl Contato Cliente", as regras de integridade referencial seriam violadas.',1

    Porém note que o código na frente precisou ser alterado. Isso, pois o código deve começar em 50000.

    Veja mais informações sobre o Throw em: https://msdn.microsoft.com/pt-br/library/ee677615(v=sql.120).aspx

    []'s!


    /* Logan Destefani Merazzi - DBA | @LoganMerazzi | http://www.merazzi.eti.br
    Se a resposta for útil, vote nela. Se resolveu, marque-a como resposta. */

    sexta-feira, 23 de outubro de 2015 12:55
  • Deu certo....

    Alterei conforme o primeiro...

    RAISERROR ('O registro não pode ser excluído nem alterado. Como já existem registros relacionados na tabela "tbl Contato Cliente", as regras de integridade referencial seriam violadas.',1,44445)

    vou tentar a segunda forma....

    Obrigado...


    Att, Everton

    sexta-feira, 23 de outubro de 2015 15:21