Array
(
)

Identificacao de divergencia entre tabelas de bancos

Alex Lekao
   - 30 mar 2016

Ola Meus amigos, boa tarde!!!
Eu mais uma vez para perturbar a paz de todos. rsrsr
Estou com a seguinte situação, eu tenho 6 bases de dados que tem tabelas entre elas que tem que estar "sincronizadas", ou seja, os dados que tem em uma tem que ter exatamente o mesmo na outra.
A minha duvida é:
Como fazer para identificar as divergências entre essas tabelas?
Atualmente tenho 6 bases e elas podem crescer no futuro, com isso, gostaria de alguma sugestão de como fazer para ter esse controle de forma dinâmica.
Desde já agradeço.
Abraço.
Alex - Lekao

Faabiianooc
   - 30 mar 2016

Fala lekão, 6 bases que voce se refere são 6 tabelas?

O que voce pretende como resultado final? Os dados das tabelas estarem identicos?

Alex Lekao
   - 30 mar 2016

e ae Fabiano... fmz?

sao bases mesmo e automaticamente que nessas bases elas tem uma tabela cada.

eu preciso identificar somente as discrepancias e onde estariam, mas somente se identificar a diferenca ja seria mais da metade do caminho andado. rsrsr

Jothaz
   - 30 mar 2016


Citação:
Fala lekão, 6 bases que voce se refere são 6 tabelas?

O que voce pretende como resultado final? Os dados das tabelas estarem identicos?


Qual versão que você esta usando?

Existe um base mão da qual as outras derivam/

Ou a atualização é idenpendente?

Paulo Nobre
   - 30 mar 2016

Olá Alex,

Existem alguns softwares, a maioria pagos, que podem te ajudar nessa tarefa. Por exemplo:

- DBComparer: http://dbcomparer.com/

- SQL Compare: http://www.red-gate.com/products/sql-development/sql-compare/

- ApexSQL Diff: http://www.apexsql.com/sql_tools_diff.aspx

Para implementar isso de maneira mais automatizada, é possível que a replicação possa te ajudar. Conheça mais sobre esse recurso do SQL Server aqui e aqui

Alex Lekao
   - 30 mar 2016

2008R2.

Entao, a questao eh identificar produtos cadastrados em lojas que nao foram replicados para as demais.

os produtos devem ser cadatrados sempre pela matriz, mas por uma questao de arquitetura do software ele esta permitindo que o cadastro seja feito em filiais.

Eu quero conseguir fazer um cruzamento para identificar os produtos que foram cadastrados nessas tabelas e que nao estejam replicados nas demais, seria um cruzamento de informacoes.

Nao sei se melhorei a questao ou se compliquei ainda mais. rsrsr

Alex Lekao
   - 30 mar 2016

Oi Paulo,

Obrigado pela ajuda.

Nao seria uma questao de replicacao, estou tentando contornar uma possivel "cabecada" de um operador ao fazer o cadastro de um produto e conseguir detectar qdo isso acontece.

é mais para confeccao de um relatorio de auditoria mesmo, ou somente informativo. rsrsr

obrigado mais uma vez.

Jothaz
   - 30 mar 2016

Eu iria sugerir as soluções pagas como o Paulo Daniel Nobre sugeriu.

Perincipalmente - ApexSQL Diff: http://www.apexsql.com/sql_tools_diff.aspx

Qual seria a frequência desta sincronização?

Pois talvez com um DTS e Integration Service você conseguiria verificar as diligenciarias.

Ou até mesmo um um aplicação rodando como serviço do Windows ou como Task no Schedule.

Mas nada tão robusto e seguro como as ferramentas pagas.

Jothaz
   - 30 mar 2016

Eu iria sugerir as soluções pagas como o Paulo Daniel Nobre sugeriu.

Perincipalmente - ApexSQL Diff: http://www.apexsql.com/sql_tools_diff.aspx

Qual seria a frequência desta sincronização?

Pois talvez com um DTS e Integration Service você conseguiria verificar as diligenciarias.

Ou até mesmo um um aplicação rodando como serviço do Windows ou como Task no Schedule.

Mas nada tão robusto e seguro como as ferramentas pagas.

Alex Lekao
   - 30 mar 2016

Entendi,

Entao essa frequencia iria depender basicamente do gestor de produtos querer saber se ha alguma discrepancia ou nao.

ate pensei em deixar com um job no banco para qdo achar alguma discrepancia enviar um relatorio por e-mail para o gestor, mas achei meio "desnecessario".

isso seria somente para uma consulta de tempos em tempos mesmo, qdo o gestor julgar necessario fazer essa checagem.

Isaac Jose
   - 30 mar 2016

boa tarde a todos.

Seria algo como a LOJA 1 cadastrou 3 produtos de nome X , 5 Y e assim por diante?
se for da pra vc fazer no report com parâmetros e ai nem precisa rodar um DTS.
Vc monta o relatório com o parâmetro do ID da loja e os produtos que quer verificar assim quando o gestor quiser saber um relatório de uma determinada loja ele vai la e faz a pesquisa desejada.

obs. é bom utilizar esse recurso se for realmente feito de tempos em tempos e for frequente e melhor criar uma tabela para não locar as bases

att.
Isaac

Jothaz
   - 30 mar 2016

Já que é somente um relatório poderia ser um Procedure ou Job mesmo.

Ou um aplicação tipo Windows Form para ser executada quanto o gestor quiser.

Alex Lekao
   - 30 mar 2016

entendi.

infelizmente ainda nao montei o esquema do reporting services. rsrsr

seria um cruzamento de informacoes, me informar que na loja 2 tem dois itens e seus principais dados, que nao tem na um, e na loja 3 da mesma forma e assim por diante.

nao estou conseguindo pensar em nada para montar o script, ja fiz um, acredito que bem simples, onde coloquei uma tabela de produto da base da matriz e fim um right join com a de uma filial e no where coloquei que o dado referente a select estaria null, deu resultado, mas nao sei como fazer que isse seja uma especie de cruzamento de informacoes.

tive que montar tabela por tabela, no caso, sao 5 scripts.

=/

Marcos P
   - 30 mar 2016

Lekão,

Você pode fazer em scripts separados ou criar, conforme o Isaac sugeriu uma tabela temporária de auditoria, que, alimentada a partir de uma stored procedure, gere um "log" das divergências... conforme os vários "critérios" que você precisa identificar.

Repare que a ideia é simples : centralizar na procedure todas as queries de "auditoria" que você precisa e registrar todas as ocorrências em um tabela que centralizará seu controle das diferenças.

Essa procedure, sendo chamada regularmente via Sql Agent, resolve seu problema !

Se precisar de ajuda nessa linha, coloca aqui teu skype / gtalk que te chamo quando puder.

Abraços.

Alex Lekao
   - 30 mar 2016

Ola Marcos,

Obrigado, vou verificar as possibilidades que todos me sugeriram e decidir o que fazer.

qualquer coisa posto aqui novamente se precisar de mais ajuda.

Com relacao a fazer esse cruzando de informacoes, nao tem algo "pronto" que consigamos fazer no sql, o esquema eh codigo para varrer tabela e base a tabela e base mesmo, certo?

Desde ja abradeco a todos pela ajuda.

Marcos P
   - 31 mar 2016

Existem as ferramentas já citadas anteriormente. Nativo do Sql Server, não conheço nenhuma ferramenta nesse sentido.

Pea
|
MVP
    31 mar 2016

Ola Alex bom dia,

Estive passando por um problema parecido pelo que vejo.
Meu problema era o seguinte, eu tinha algumas tabelas ( produtos, grupo, marca etc ) de uma empresa e estes tinham que ser enviados para suas franquias, ou seja a franquia nunca digita os dados de produtos, estes são apenas atualizados e cadastrados.
A solução que eu adotei foi a seguinte.

1 - Tenho um programa que localiza os produtos na base de dados principal baseados na data de atualizacao dos mesmos e inclui ou atualiza eles na base de dados de um servidor na web

2 - Em cada cliente ( que no meu caso pode estar em qualquer cidade ) existe um programa que faz o trabalho semelhante, verifica os dados do servidor da WEB baseados na data de atualização e os importa para a base de dados local.

Espero ter ajudado.