Escolar Documentos
Profissional Documentos
Cultura Documentos
15 de julho de 2013 por Felipe Maciel Ol, pessoal. Neste artigo, dividido em duas partes, vou demonstrar como realizar a conexo e a replicao de dados entre banco de dados distribudos heterogneos. Utilizarei os bancos de dados Oracle 10G, Postgre e MySQL, nos quais utilizaremos o Oracle como middleware (mediador). Ser realizada a conexo entre os bancos Oracle 10G e Postgre. Dessa forma, ser possvel selecionar os dados do banco Postgre no Oracle 10G. J a replicao dos dados acontecer entre o Oracle e o MySQL, ou seja, toda insero, deleo e alterao realizada no Oracle ser replicada no MySQL. Para o simulao de diferentes servidores, utilizei o software Virtual Box para que fossem criadas trs mquinas virtuais (todas com sistema operacional Windows XP), no qual cada mquina virtual encontra-se com um banco de dados instalado.
Downloads
Bem, chega de conversa e vamos colocar a mo na massa. Primeiramente, necessrio efetuar o download dos bancos de dados utilizados, bem como efetuar o download do driver ODBC dos bancos de dados MySQL e Postgre. Abaixo seguem as URLs para o download: Banco de Dados MySQL http://dev.mysql.com/downloads/ Banco de Dados Oracle
http://www.oracle.com/technetwork/database/enterprise-edition/downloads/ Banco de Dados Postgre http://www.postgresql.org/download/ ODBC MySQL http://dev.mysql.com/downloads/connector/odbc/ ODBC PostGgree http://www.postgresql.org/ftp/odbc/versions/
Criando tabelas
Aps a instalao dos banco de dados, devemos criar os banco de dados e tabelas que cada banco possuir.
MySQL Para a criao do banco de dados no MySQL, so utilizados os seguintes comandos: 1CREATE DATABASE movie; 2USE movie; 3 4CREATE TABLE clientes( 5idCliente INT(5) PRIMARY KEY, 6nome VARCHAR(50), cpf VARCHAR(11)); 7 Insira dois registros no banco de dados MySQL com os seguintes comandos: 1</p>
2<p align="left">INSERT INTO clientes VALUES ('1', 'Felipe Maciel', 3'34548455908');</p> <p align="left">INSERT INTO clientes VALUES ('2', 'Gustavo Gusmao', 4'34234188751');</p>
<p align="left">
Oracle
Para a criao do banco de dados no Oracle, so utilizados os comandos: 1 2 CREATE TABLE clientes( 3 idCliente NUMBER(5) PRIMARY KEY, 4 5 nome VARCHAR2(50), 6 7 cpf VARCHAR2(11) 8 9 ); 10 11CREATE TABLE filmes( 12 13idFilme NUMBER(5) PRIMARY KEY, 14 idCategoria NUMBER(5), 15 16nome VARCHAR2(50), 17 18); 19 Insira registros na tabela filmes com os seguintes comandos: 1 INSERT INTO filmes VALUES ('101', '1', 'Debi e Loide'); 2 <p align="left">INSERT INTO filmes VALUES ('102', '1', 'Se beber Nao 3 Case'); 4 INSERT INTO filmes VALUES ('103', '1', 'Um Parto de Viagem');</p> INSERT INTO filmes VALUES ('104', '2', 'Hellraiser'); 5 6 INSERT INTO filmes VALUES ('105', '2', 'Carrie'); 7 8 INSERT INTO filmes VALUES ('106', '3', 'Um Amor Para Recordar'); 9 10INSERT INTO filmes VALUES ('107', '3', 'Meu Primeiro Amor'); 11 12INSERT INTO filmes VALUES ('108', '3', 'PS Te Amo'); 13 14INSERT INTO filmes VALUES ('109', '3', 'Diario de uma Paixao');
Postgre
Para a criao do banco de dados no Postgre, so utilizados os comandos:
1CREATE DATABASE locadora; 2 3\c locadora; 4 5CREATE TABLE categorias( 6 7idCategoria INT PRIMARY KEY, 8 9nome VARCHAR(50)); Agora vamos inserir trs registros no banco de dados Postgre com os seguintes comandos: 1INSERT INTO categorias VALUES ('1', 'Comedia'); 2 3INSERT INTO categorias VALUES ('2', Terror); 4 5INSERT INTO categorias VALUES ('3', Romance); O prximo passo a instalao dos drivers ODBCs.
Configurao ODBC
A instalao dos drivers ODBC devem ser feitas na mquina virtual na qual se encontra o banco de dados que servir de middleware (Oracle). A instalao bem simples e resume-se em botes, aceitar, next e prximo, creio que ningum ter grandes problemas. Aps a instalao de ambos ODBCs (MySQL e Postgre), necessrio configurar os drivers.
Data Source Name: nome para identificar a conexo TCP/IP Server: endereo de IP no qual est instalado servidor Port: porta de acesso ao banco de dados User: usurio do banco de dados MySQL Password: senha de usurio do banco de dados MySQL Database: nome do banco de dados MySQL
ODBC MySQL Para testar a sua conexo, clique sobre o boto Test e verifique se mostrada a mensagem Connection Sucessful.
Antes de adicionar o driver ODBC Postgre utilizando a Fonte de Dados (ODBC), necessrio liberar o acesso da mquina virtual 192.168.0.20 no banco de dados Postgre. Para isso, abra o arquivo pg_hba.conf que encontra-se no diretrio C:\Arquivos de Programas\PostgreSQL\8.4\data; na mquina 192.168.0.30, adicione a linha:
host all all 192.168.0.20/32 md5
Arquivo pg_hba.conf Aps liberado o acesso ao Postgre pelo IP da mquina virtual que encontra-se com o Oracle instalado (192.168.0.20), adicionaremos o driver ODBC do Postgre nossa fonte de dados da mquina virtual 192.168.0.20. Siga os passos a seguir: 1 Clique no boto Iniciar => Painel de Controle => Ferramentas administrativas => Fonte de dados (ODBC). 2 Clique sobre a aba Fontes de dados de sistema e clique em Adicionar. 3 Na lista apresentada, selecione o PostgreSQL ANSI e clique em Concluir.
Driver ODBC Postgre 4 Na janela apresentada, necessrio configurar os dados da conexo: Data Source: nome para identificar a conexo Database: nome do banco de dados Postgre Server: endereo de IP no qual est instalado servidor Postgre Port: porta de acesso ao banco de dados
User Name: usurio do banco de dados Postgre Password: senha de usurio do banco de dados Postgre
ODBC Postgre Para testar a sua conexo, clique sobre o boto Test e verifique se mostrada a mensagem Connection Sucessful.
Alert Conexo Postgre Ufaaaaaaaaaaa, por hoje s pessoal, espero que tenham gostado. No prximo artigo, iremos configurar os arquivos listener e tnsnames do Oracle, bem como criar o arquivo init do Oracle e, por fim, a criao das procedures e triggers para a replicao dos dados. Espero vocs l !!!! Quaisquer dvidas e/ou sugestes s deixar nos comentrios (: . abraos !
8 9
10(HS=OK) 11) 12
Obs: o parmetro SID_NAME deve conter o valor do nome de usurio do seu banco de dados MySQL (root) e Postgre (postgres). Configure o arquivo tsnames.ora como a figura 5.9
9 10 11
ORACLE_POSTGRE = (DESCRIPTION =
12(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) 13(CONNECT_DATA = 14(SERVER = DEDICATED) 15(SERVICE_NAME = postgres) 16 17 18 19
) (HS=OK) )
Arquivos .ora.
Arquivo initroot.ora
Arquivo initpostgres.ora OBS: HS_FDS_CONNECT_INFO deve conter o nome da conexo configurada no driver ODBC. Aps feitas as configuraes, interrompa e inicie o banco de dados Oracle. 1 Menu Iniciar => Todos os Programas => Oracle Database 10g Express Edition => Interromper Banco de Dados. 2 Menu Iniciar => Todos os Programas => Oracle Database 10g Express Edition => Iniciar Banco de Dados
Linha 1 nome do link. Linha 2 nome de usurio do banco MySQL Linha 3 senha usurio do banco MySQL Linha 4 o nome dado conexo de fonte de dados de sistema Agora possvel listar os dados do banco MySQL atravs do ORACLE com o seguinte comando:
1SELECT * FROM clientes@conMYSQL;
Linha 1 nome do link. Linha 2 nome de usurio do banco Postgre Linha 3 senha usurio do banco Postgre Linha 4 o nome dado conexo de fonte de dados de sistema Agora possvel listar os dados do banco Postgre atravs do ORACLE com o seguinte comando:
1SELECT * FROM categorias@conPOSTGRE;
Figura 1.15 Select do Oracle em banco de dados Postgre Fonte: Elaborada pelos autores, 2012.
Criando sinnimos
Podemos criar sinnimos a fim de facilitar o gerenciamento das tabelas.
1CREATE SYNONYM clientesMYSQL FOR clientes@conMYSQL; 2CREATE SYNONYM categoriasPOSTGRE FOR categorias@conPOSTGRE;
Agora possvel gerenciar as tabelas do banco de dados MySQL e Postgre referenciando-as como clientesMYSQL e categoriasPOSTGRE, em vez de clientes@conMYSQL e categorias@conPOSTGRE, respectivamente.
O cdigo abaixo refere-se procedure chamada procINSERT, que recebe 3 valores via parmetro e insere-os na tabela clientes (MySQL).
1CREATE OR REPLACE PROCEDURE procINSERT(i NUMBER, n VARCHAR2, c VARCHAR2) 2AS PRAGMA AUTONOMOUS_TRANSACTION; 3BEGIN 4INSERT INTO clientesMYSQL VALUES(i, n, c); 5COMMIT; 6
END;/
O cdigo abaixo refere-se trigger chamada tgINSERT, que chama a procedure procINSERT sempre aps inserir um registro na tabela clientes (Oracle).
1
CREATE OR REPLACE TRIGGER tgINSERT
2AFTER INSERT ON clientes 3REFERENCING NEW AS NEW OLD AS OLD 4FOR EACH ROW 5 6BEGIN 7procINSERT(:NEW.idCliente, :NEW.nome, :NEW.cpf); 8 9
END; /
O cdigo abaixo refere-se procedure chamada procDELETE, que recebe 1 valor via parmetro (idCliente) e remove o registro da tabela clientes (MySQL)
1CREATE OR REPLACE PROCEDURE procDELETE(i NUMBER) 2AS PRAGMA AUTONOMOUS_TRANSACTION; 3BEGIN 4DELETE FROM clientesMYSQL WHERE "idCliente" = i; 5COMMIT; 6
END;/
O cdigo abaixo refere-se trigger chamada tgDELETE, que chama a procedure procDELETE sempre aps deletar um registro na tabela clientes (Oracle).
1
CREATE OR REPLACE TRIGGER tgDELETE
2AFTER DELETE ON clientes 3REFERENCING NEW AS NEW OLD AS OLD 4FOR EACH ROW 5BEGIN 6procDELETE(:OLD.idCliente); 7 8
END; /
O cdigo abaixo refere-se procedure chamada procUPDATE, que recebe 4 valores via parmetro e atualiza o registro da tabela clientes (MySQL).
1 CREATE OR REPLACE PROCEDURE procUPDATE(io NUMBER, i NUMBER, n VARCHAR2,
c VARCHAR2)
2 3 4 5
BEGIN AS PRAGMA AUTONOMOUS_TRANSACTION;
9 COMMIT; 10END; 11
/
O cdigo abaixo refere-se trigger chamada tgUPDATE, que chama a procedure procUPDATE sempre aps atualizar um registro na tabela clientes (Oracle).
1
CREATE OR REPLACE TRIGGER tgUPDATE
2AFTER UPDATE ON clientes 3REFERENCING NEW AS NEW OLD AS OLD 4FOR EACH ROW 5BEGIN 6procUPDATE(:OLD.idCliente,:NEW.idCliente,:NEW.nome, :NEW.cpf); 7 8
END; /
Select Oracle e Postgre Prontooooooooo!!! Bem, pessoal, espero que tenham gostado, quaisquer dvidas e sugestes s deixar nos comentrios (: . abraos !