none
Trigger para espelhar tabelas RRS feed

  • Pergunta

  • Olá Amigos, meu nome é Rodrigo, sou iniciante em ASP.net e SQL server, então gostaria de uma ajuda se for possivel.
    Quero a principio criar uma trigger em uma tabela de um DB1 de forma que qualquer Insert, update ou delete aconteça com uma tabela identica em um DB2.

    Para deixar mais claro, vou exemplificar.

    Tenho:
    - DB1
     tabela 1

    - DB2
    Tabela 1


    Bem, quando eu fizer qualquer coisa na tabela 1 do DB1 o mesmo tem que acontecer na tabela 1 do DB2, seria mais como um espelhamento de dados!

    Tem como fazer isso? como seria?
    Abraços a todos e obrigado desde ja!
    Rodrigo Lima
    sexta-feira, 15 de janeiro de 2010 13:14

Todas as Respostas

  • Bom Dia,

    É possível fazer via trigger, mas há alguns efeitos indesejados. A trigger é síncrona e isso significa que se o DB2 estiver indisponível por qualquer razão, a transação não poderá ser completada no DB1. Isso é tolerável ?

    Outra idéia seria optar pela replicação transacional, mas isso envolverá a configuração da replicação, administração dos jobs, agentes, etc.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Recuperando o nome dos elementos em um documento XML no SQL Server
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!914.entry


    Classifique as respostas. O seu feedback é imprescindível
    sexta-feira, 15 de janeiro de 2010 13:35
  • Maia,

    Eu acho mais interessante utilizar replicação transacional mas isso vai depender do nosso amigo.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    sexta-feira, 15 de janeiro de 2010 18:55
  • Amigos,
    Obrigado pela ajuda desde já.
    Bem, a ideia e ter duas tabelas com as mesmas informações, diria que itegridade é extremamente necessária, então imagino que essa opção que vocês sugeriram possa ser melhor, mas como sou noob, gostaria de uma ajuda de como realizar isso...

    Porem quero explicar melhor como ira funcionar isso...

    DB1
    Usuarios 1 - Main

    Db2
    Usuarios 1

    DB3
    Usuarios 1

    etc..

    Minha ideia é ter uma tabela em um DB distinto onde eu possa ter centralizado todos os usuarios de outros DBs, e sempre que os usuarios atualizarem informações nas respectivas tabelas, isso seja replicado para o DB1 onde concentro tudo.

    Esse esquema que vocês estão falando, irá funcionar com essa modelo que planejei?
    Se tiverem uma ideia melhor para o que planejei, tambem será muito bem vindo.

    Abraços e mais uma vez obrigado.
    Rodrigo Lima
    sábado, 16 de janeiro de 2010 12:00
  • Rodrigo,

    Sim, vai funcionar, mas porque ter um banco específico para armazenar as contas de usuários. Isso seria somente para centralizar a administração?

    A replicação consegui trabalhar com diversas fontes de dados e retransmitir os dados entre estas fontes, o importante é estar algumas regras de sincronização e que tipos de dados devem ser sincronizados.

    Você vai enviar as informações de todos os bancos para um específico?


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    sábado, 16 de janeiro de 2010 13:36
  • Olá Junior,

    Minha ideia seria a principio segurança e depois administração sim, sendo assim os usuarios irão logar atravez dessa base global, e a partir dai será redirecionado para o DB a que pertence.

    Imagino que com isso consiga mais um nivel de segurança na minha aplicação(corrija-me se estiver enganado).
    Bem, como sou novo nisso, qualquer sugestão será muito bem vinda ok! quanto a essa forma de replicar os dados, como poderia fazer?
    Abraços e fique com Deus.
    domingo, 17 de janeiro de 2010 01:43
  • Rodrigo,

    Sua idéia é interessante, não podemos dizer que com isso teremos mais uma nível de segurança, na verdade teremos mais uma camada de acesso que será necessário ao usuários passar para conseguir chegar ao seu destino.

    Aqui na empresa utilizamos uma solução parecida com a sua, mas não pensamos em utilizar triggers, o que fizemos foi centralizar todos os usuários a uma determinada base de dados, onde temos o cadastro de todos, ou seja, quando estes usuários necessitam acessar um determinado aplicativo, por padrão são direcionados via aplicação para esta base de dados de controle, após a validação de suas credenciais conseguem acessar os demais bancos de dados.

    O que fazemos é limitar na verdade o acesso a aplicação, e depois através de uma conta específica o usuário acesso a banco de dados, mas registramos internamente o que ele esta acessando, utilizando um log de aplicação.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    domingo, 17 de janeiro de 2010 14:48
  • Então Junior, é mais ou menos isso que quero fazer, mas e como posso utilizar a replicação transacional?
    Como faço isso? VocÊ acha melhor fazer um DB com todos os usuarios então ao invez desse esquema que pensei? eu imaginei que com isso eu tornaria um pouco mais seguro, visto que meu server estará na internet, e no login o acesso será apenas a esse DB a principio, imaginei que seria mais seguro dessa forma.

    Abraçosss
    domingo, 17 de janeiro de 2010 22:22