Companheiros(as), hoje vou comentar sobre um utilitário nativo a partir do SQL Server 2000 que possibilita exportar comandos de insert, update e delete para ressincronizar informações de uma publicação/assinatura.
Este utilitário chama-se tablediff*, e pode nos salvar nas situações onde as informações entre objetos publicados e sua réplica estão inconsistentes.
A idéia deste post não é apenas comentar sobre a existência do utilitário, mas possibilitar que você meu amigo(a) possa solucionar seus problemas de maneira mais facilitada.
O script abaixo servirá para automatizar esta atividade, e deve ser executado na base de dados replicada.
Narrando o script: a partir de um SELECT são informados o caminho onde o executável do utilitário é encontrado, os comandos do utilitário que estão separados para o servidor da publicação e replicado, respectivamente (-sourceserver Source Host; -sourcedatabase Source Database; -sourceschema Source Schema Name; -sourcetable Source Table or View; -sourceuser Source Login; -sourcepassword Source Password; -destinationserver Destination Host -destinationdatabase Destination Database, -destinationschema Destination Schema Name, -destinationtable Destination Table or View, -destinationuser Destination Login, -destinationpassword Destination Password), o comando de exportação dos comandos (-f) e a palavra-chave [name] que no momento da execução será substituída pelo nome do objeto replicado.
DECLARE Script
CURSOR FOR
SELECT '"c:\Program Files\Microsoft SQL Server\100\COM\tablediff.exe"
-sourceserver IPservidorpublicacao
-sourcedatabase nomedatabasepublicacao
-sourceschema dbo -sourcetable ' + name + '
-sourceuser usuariodeconexao -sourcepassword passworddeconexao
-destinationserver IPservidorreplica
-destinationdatabase nomedatabasereplica
-destinationschema dbo
-destinationtable ' + name + '
-destinationuser usuariodeconexao
-destinationpassword passworddeconexao
-f F:\Temp\Diff\' + name + '.sql' FROM SYS.tables
DECLARE @Comando VARCHAR(1000)
OPEN Script
FETCH NEXT FROM Script INTO @Comando
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Comando = 'xp_cmdshell '''+@Comando+''''
EXEC(@Comando)
FETCH NEXT FROM Script INTO @Comando
END
CLOSE Script
DEALLOCATE Script
Da maneira que o script está acima, o mesmo vai seguir com a análise de todos os objetos da base replicada, se porventura sua idéia é analisar apenas alguns objetos, sugiro trocar o comandoEXEC(@Comando) porPRINT(@Comando) assim, na execução da query poderá visualizar um comando para cada objeto, e utilizar um(1) a um(1) no processo de análise.
*Para conhecer um pouco mais sobre o utilitário e os comandos utilizados, acessem o sitehttp://msdn.microsoft.com/pt-br/library/ms162843.aspx
Espero que o post seja útil para você em algum momento, afinal automatizamos o processo utilizando CURSOR, para mim já foi de grande utilidade.
Abraços e até mais
Bruno Santos
Nenhum comentário:
Postar um comentário