Você está na página 1de 18

Conexo e replicao de dados em banco de dados distribudos heterogneos Parte 01

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.

Banco de Dados e IPs das Mquinas Virtuais

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.

Configurando ODBC MySQL


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 driver MySQL ODBC 5.2w Driver e clique em Concluir

Driver ODBC MySQL 4 Na janela apresenta, necessrio configurar os dados da conexo:

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.

Alert Conexo MySQL

Configurando ODBC POSTGRE

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 !

Conexo e replicao de dados em banco de dados distribudos heterogneos Parte 02


22 de julho de 2013 por Felipe Maciel Ol, pessoal! No artigo passado, comecei a demonstrao de como realizar a conexo e a replicao de dados entre banco de dados distribudos heterogneos. Estamos usando os bancos de dados Oracle 10G, Postgre e MySQL, nos quais utilizaremos o Oracle como middleware (mediador). Dando continuidade a isso, hoje vamos fazer as configuraes necessrias para a conexo e a replicao dos dados em nossos bancos de dados.

Configurando arquivos Oracle


Abra os arquivos listener.ora e tnsnames.ora, ambos localizados no diretrio C:\oraclexe\app\oracle\product\10.2.0\server\NETWORK\ADMIN e configure o arquivo listener.ora como na imagem a seguir.

Arquivo listener.ora Linhas a serem adicionadas ao arquivo


1 (SID_DESC = 2 (SID_NAME = root)

3 (ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server) 4 (PROGRAM = hsodbc) 5 6 7


(SID_NAME = postgres) (HS=OK) ) (SID_DESC =

8 9

(ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server) (PROGRAM = hsodbc)

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

Arquivo tsnames.ora Linhas a serem adicionadas ao arquivo


1 ORACLE_MYSQL = 2 (DESCRIPTION = 3 (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

4 (CONNECT_DATA = 5 (SERVER = DEDICATED) 6 7 8


) (SERVICE_NAME = root) ) (HS=OK)

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) )

Criando arquivos init Oracle


Agora necessrio criar um arquivo init para cada usurio que iremos utilizar nos bancos de dados, ou seja, um arquivo para o usurio root (MySQL) e um arquivo para o usurio postgres (Postgre). O arquivo dever chamar-se initNomeUsuario.ora (initroot.ora e initpostgres.ora).

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

Interromper e iniciar banco de dados Oracle

Criando database link Oracle e MySQL


Agora vamos fazer a conexo entre o Oracle e o MySQL. Para isso, utilizaremos o comando a seguir.
1CREATE DATABASE LINK "conMySQL" 2CONNECT TO "root" 3IDENTIFIED BY "root" 4USING 'ORACLE_MYSQL'

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;

Select do Oracle em banco de dados MySQL

Criando database link Oracle e Postgre


O seguinte comando utilizado para fazer a criao de um link entre os banco de dados Oracle e Postgre.
1CREATE DATABASE LINK "conPOSTGRE" 2CONNECT TO "postgres" 3IDENTIFIED BY "root" 4USING 'ORACLE_POSTGRE'

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.

Select Usando Sinnimos

Procedures e triggers Oracle e MySQL


Para que haja consistncia dos dados da tabela clientes (includa em ambos banco de dados, Oracle e MySQL), utilizaremos PROCEDURES e TRIGGERS replicando assim todos os INSERTS, DELETES e UPDATES realizados nessa tabela. Dessa forma, todos os registros includos na tabela clientes Oracle estaro contidos na tabela clientes MySQL.
Procedure e Trigger INSERT

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; /

Procedure e Trigger DELETE

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; /

Procedure e Trigger UPDATE

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;

6 UPDATE clientesMYSQL SET 7 "idCliente" = i, "nome" = n, "cpf" = c 8 WHERE "idCliente" = io ;

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


O comando abaixo faz a listagem do nome do filme (banco de dados filmes Oracle) e do nome da categoria do filme (banco de dados categoria Postgre).
1SELECT f.nome, 2(SELECT c."nome" FROM categoriasPOSTGRE c 3WHERE f.idCategoria = c."idCategoria") AS 4categoria FROM filmes f ;

Select Oracle e Postgre Prontooooooooo!!! Bem, pessoal, espero que tenham gostado, quaisquer dvidas e sugestes s deixar nos comentrios (: . abraos !

Você também pode gostar