Usuário com melhor resposta
Restaurar BackUp Do 2008 R2 para o 2014

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.
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
-
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
-
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. */- Marcado como Resposta Everton Celso Pinto sexta-feira, 23 de outubro de 2015 15:18
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. */ -
-
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. */ -
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.
-
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
-
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
- Editado Everton Celso Pinto quinta-feira, 22 de outubro de 2015 17:50
-
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.
Att, Everton
- Mesclado Marcos SJ sexta-feira, 23 de outubro de 2015 12:12 Thread duplicada
-
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
-
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
-
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. */- Marcado como Resposta Everton Celso Pinto sexta-feira, 23 de outubro de 2015 15:18
-
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