Bom dia Pessoal.
Estou com um problema, e fique claro que não sou expert em Oracle, portanto muitas palavras que utilizarei aqui não tem valor tecnico nenhum.
Preciso criar algo parecido com tabelas espelhas. Possuo duas bases diferentes no mesmo servidor e preciso que existam algumas tabelas relacionadas entre estas duas bases. Assim, no momento em que ocorra alteração na tabela de uma das bases seja realizada a alteração na outra base tambem.
Procurei na internet como resolver isso e encontrei a Replicação de dados no oracle, mas gostaria de saber se não tem um jeito mais fácil, afinal as bases estão no mesmo banco de dados.
Obrigado
Rafael R. Machado
Tabelas Espelhadas
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Brother,
Não entendo muito da parte de Replicação do Oracle (na verdade, da parte administrativa de banco não entendo nada)... talvez seja a melhor forma, mas, fica aqui uma dica (do ponto de vista de um desenvolvedor):
1) Criar um Dblink entre as bases;
2) Criar uma trigger na tabela A (existente hoje), de insert, update e delete, para que realize as alterações na tabela B,
que será criada como uma "réplica";
Qualquer coisa, manda pra gente.
Não entendo muito da parte de Replicação do Oracle (na verdade, da parte administrativa de banco não entendo nada)... talvez seja a melhor forma, mas, fica aqui uma dica (do ponto de vista de um desenvolvedor):
1) Criar um Dblink entre as bases;
2) Criar uma trigger na tabela A (existente hoje), de insert, update e delete, para que realize as alterações na tabela B,
que será criada como uma "réplica";
Qualquer coisa, manda pra gente.
-
- Rank: Estagiário Pleno
- Mensagens: 7
- Registrado em: Sex, 06 Jun 2008 9:34 am
- Localização: Sorocaba-SP
Então cara, eu tambem sou desenvolvedor e não manjo nada de oracle.
O problema de criar triggers é que os dois lados podem ser alterados.
Por exemplo. Vou usar uma denominação banco.tabela.
Possuo uma tabela chamada tb1 no banco1, e outra tabela identica chamada tb1 tambem no banco2. O problema é as duas tabelas podem ser alteradas por sistemas diferentes.
Um sistemas da insert/update/delete na tabela Banco1.tb1 e outro sistema faz as mesmas coisas na tabela Banco2.tb1.
Mas para realizar pesquisas eu preciso que todas alterações feitas em uma delas seja feita tambem na outra, para efetuar pesquisas.
Se eu criar uma trigger na tb1 de cada banco eu vou entrar num loop infinito, a cada insert na banco1.tb1 é ativada uma trigger para atualizar a banco2.tb1 e o banco 2 tambem ativa uma trigger e assim por diante.
"E agora doutor?"
Obrigado ajuda ai.
Rafael R. Machado
O problema de criar triggers é que os dois lados podem ser alterados.
Por exemplo. Vou usar uma denominação banco.tabela.
Possuo uma tabela chamada tb1 no banco1, e outra tabela identica chamada tb1 tambem no banco2. O problema é as duas tabelas podem ser alteradas por sistemas diferentes.
Um sistemas da insert/update/delete na tabela Banco1.tb1 e outro sistema faz as mesmas coisas na tabela Banco2.tb1.
Mas para realizar pesquisas eu preciso que todas alterações feitas em uma delas seja feita tambem na outra, para efetuar pesquisas.
Se eu criar uma trigger na tb1 de cada banco eu vou entrar num loop infinito, a cada insert na banco1.tb1 é ativada uma trigger para atualizar a banco2.tb1 e o banco 2 tambem ativa uma trigger e assim por diante.
"E agora doutor?"
Obrigado ajuda ai.
Rafael R. Machado
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Bom, brow, vamos lá...
O que daria pra ser feito, é, criação de uma terceira tabela ("C").
Esta tabela, possuir a estrutura das duas, mais uma coluna, contendo o nome
de qual tabela deverá ser alterada.
Ou, se quiser, duas colunas:
TAB_ORIGEM,
TAB_DESTINO
Em posse dessas informações, você consegue deixar um trigger somente nesta
tabela "C", pra fazer o que precisa.
Talvez seja uma saida.
Qualquer coisa, manda pra gente, beleza?
O que daria pra ser feito, é, criação de uma terceira tabela ("C").
Esta tabela, possuir a estrutura das duas, mais uma coluna, contendo o nome
de qual tabela deverá ser alterada.
Ou, se quiser, duas colunas:
TAB_ORIGEM,
TAB_DESTINO
Em posse dessas informações, você consegue deixar um trigger somente nesta
tabela "C", pra fazer o que precisa.
Talvez seja uma saida.
Qualquer coisa, manda pra gente, beleza?
-
- Rank: Analista Júnior
- Mensagens: 96
- Registrado em: Qua, 21 Jun 2006 11:33 pm
- Localização: Canoas RS
Se ambas tabelas tem exatamente os mesmos campos ou exatamente a mesma função, eu sugiro que use apenas uma tabela ao invés de duas pois assim garante que os dados serão únicos e preservará espaço em disco.
Para dois sistemas utilizarem a mesma tabela é simples, primeiro escolhe onde ela vai ficar e depois cria un sinônimo com todos os grants possíveis nessa tabela.
Para dois sistemas utilizarem a mesma tabela é simples, primeiro escolhe onde ela vai ficar e depois cria un sinônimo com todos os grants possíveis nessa tabela.
-
- Rank: Analista Júnior
- Mensagens: 96
- Registrado em: Qua, 21 Jun 2006 11:33 pm
- Localização: Canoas RS
Esqueci de dizer, o sinônimo tem que ser por DB-link
-
- Rank: DBA Sênior
- Mensagens: 324
- Registrado em: Sex, 02 Jun 2006 1:48 pm
- Localização: sp
- Contato:
Eu acho que primeiro está confundindo BASES...
INSTANCE=BASE, esse conceito é diferente do SQL server por exemplo
Um Oracle instalado(talvez esteja entendendo isso como Banco de dados),
pode conter quantas intances você quiser... mas elas não se cominicam entre si a não ser que crie um DBlink por exemplo.
Agora em uma base, pode ter vários esquemas(isso seria parecido com a base do SQL) e esses esquemas pode se enxergar entre si, sem preciar de nenhum dblink.
Se quiser ter duas tabelas iguais de modo simples, pode criar uma trigger pra cada, que atualiza a outra quando um dado é inserido, se forem bases diferentes, só vai ter que adicionar o dblink na bricadeira, mas a teoria é a mesma.
Sobre replicação, só funciona com BASES diferentes.
Outra possível solução, seriam views materializadas, mas acho que não serve para o seu caso.
Att.
INSTANCE=BASE, esse conceito é diferente do SQL server por exemplo
Um Oracle instalado(talvez esteja entendendo isso como Banco de dados),
pode conter quantas intances você quiser... mas elas não se cominicam entre si a não ser que crie um DBlink por exemplo.
Agora em uma base, pode ter vários esquemas(isso seria parecido com a base do SQL) e esses esquemas pode se enxergar entre si, sem preciar de nenhum dblink.
Se quiser ter duas tabelas iguais de modo simples, pode criar uma trigger pra cada, que atualiza a outra quando um dado é inserido, se forem bases diferentes, só vai ter que adicionar o dblink na bricadeira, mas a teoria é a mesma.
Sobre replicação, só funciona com BASES diferentes.
Outra possível solução, seriam views materializadas, mas acho que não serve para o seu caso.
Att.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Bing [Bot] e 17 visitantes