Hoje, as organizações armazenam informações (dados) em diferentes sistemas de banco de dados. Cada sistema de banco de dados tem um conjunto de aplicativos executados nele. Esses dados são apenas bits e bytes em um sistema de arquivos – e somente um banco de dados pode transformar os bits e bytes de dados em informações comerciais. A integração e consolidação de tais informações (dados) em um sistema de banco de dados geralmente é difícil. Porque muitos dos aplicativos executados em um banco de dados podem não ter um aplicativo equivalente executado em outro. Para consolidar as informações em um sistema de banco de dados, precisamos de uma conexão de banco de dados heterogênea. Neste post, mostrarei como você pode conectar o PostgreSQL a um banco de dados heterogêneo Oracle usando métodos diferentes.
Abaixo estão alguns métodos para fazer a conexão com o banco de dados Oracle no PostgreSQL.
- Usando o driver ODBC
- Usando DataWrappers Estrangeiros
- Usando o driver Oracle Call Interface(OCI)
Open DataBase Connectivity (ODBC) é uma API de software padrão para usar DBMS. O driver ODBC/fonte de dados ODBC (API) é uma biblioteca que permite que os aplicativos se conectem a qualquer banco de dados para o qual um driver ODBC esteja disponível. É uma camada intermediária que traduz as consultas de dados do aplicativo em comandos que o DBMS entende. Para usar esse método, é necessário um pacote de driver unixODBC e Oracle ODBC de código aberto (Basic/ODBC/Devel). Junto com um módulo no PostgreSQL que pode se comunicar com o DSN criado usando unixODBC e driver ODBC Oracle. Há alguns anos a CyberTec lançou um módulo ODBC-Link, atualmente obsoleto, porém, possui uma implementação estilo dblink para o PostgreSQL se conectar a qualquer outro banco de dados compatível com ODBC. Podemos usar este módulo para conectividade básica com o Oracle. Vamos ver.
Instalar unixODBC
tar -xvf unixODBC-2.3.4.tar.gz cd unixODBC-2.3.4/ ./configure --sysconfdir=/etc make make install
Localização dos arquivos binários/Bibliotecas/arquivos de configuração:/usr/local/bin,/usr/local/lib,/etc(odbc.ini,odbcinst.ini)
Instalar o driver ODBC da Oracle
rpm -ivh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm rpm -ivh oracle-instantclient11.2-odbc-11.2.0.4.0-1.x86_64.rpm rpm -ivh oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm
Localização do binário/bibliotecas:/usr/lib/oracle/11.2/client64
Instalar ODBC-Link
tar -zxvf ODBC-Link-1.0.4.tar.gz cd ODBC-Link-1.0.4 export PATH=/opt/PostgreSQL/9.5/bin:$PATH which pg_config make USE_PGXS=1 make USE_PGXS=1 install
Localização de bibliotecas e arquivos SQL:/opt/PostgreSQL/9.5/share/postgresql/contrib
A instalação criará um arquivo SQL do módulo ODBC-Link no diretório $PGHOME/contrib. Carregue o arquivo SQL, que criará um esquema com o nome “odbclink” com as funções necessárias.
psql -p 5432 -d oratest -U postgres -f /opt/PostgreSQL/9.5/share/postgresql/contrib/odbclink.sql
Neste ponto, instalamos o unixODBC Drirver, o driver Oracle ODBC e o módulo ODBC-Link para PostgreSQL. Como primeiro passo, precisamos criar um DSN usando o Oracle ODBC.
Edite o arquivo /etc/odbcinst.ini e passe a definição dos drivers
## Driver for Oracle [MyOracle] Description =ODBC for oracle Driver =/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1 UsageCount=1 FileUsage = 1 Driver Logging = 7
Edite o arquivo /etc/odbc.ini e crie o DSN com o driver mencionado em /etd/odbcinst.ini
## Host: pg.raghav-node1.com, PORT: 1521 ## Oracle Instance Name: ORA11G, Username: mmruser, Password: mmruser ## ODBC Data source: Ora
[Ora]
Descrição =myoracledb database
Driver =MyOracle
Trace =yes
TraceFile =/tmp/odbc_oracle.log
Database =//pg.raghav-node1 .com:1521/ORA11G
UserID =mmruser
Senha =mmruser
Porta =1521
Depois de criar o DSN, carregue todas as bibliotecas de driver ODBC Oracle e unix definindo variáveis de ambiente e teste a conectividade usando a ferramenta de linha de comando do sistema operacional “dltest” e “iSQL”
[[email protected] ~]# export ORACLE_HOME=/usr/lib/oracle/11.2/client64 [[email protected] ~]# export LD_LIBRARY_PATH=/usr/local/unixODBC-2.3.4/lib:/usr/lib/oracle/11.2/client64/lib [[email protected] ~]# export ODBCINI=/etc/odbc.ini [[email protected] ~]# export ODBCSYSINI=/etc/ [[email protected] ~]# export TWO_TASK=//pg.raghav-node1.com:1521/ORA11G [[email protected] ~]# dltest /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1 SUCCESS: Loaded /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1 [[email protected] ~]# isql ora -v +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL>
Agora, defina as mesmas variáveis de ambiente para o usuário postgres para carregar as bibliotecas e reinicie o cluster PostgreSQL para entrar em vigor. Conecte-se ao PostgreSQL e chame as funções odbclink para se conectar ao banco de dados Oracle.
[[email protected] ~]#su - postgres [[email protected] ~]$ export ORACLE_HOME=/usr/lib/oracle/11.2/client64 [[email protected] ~]$ export LD_LIBRARY_PATH=/usr/local/unixODBC-2.3.4/lib:/usr/lib/oracle/11.2/client64/lib [[email protected] ~]$ export ODBCINI=/etc/odbc.ini [[email protected] ~]$ export ODBCSYSINI=/etc/ [[email protected] ~]$ export TWO_TASK=//pg.raghav-node1.com:1521/ORA11G [[email protected] ~]$ dltest /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1 SUCCESS: Loaded /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1 [[email protected] ~]$ /opt/PostgreSQL/9.5/bin/pg_ctl -D /opt/PostgreSQL/9.5/data/ stop -mf [[email protected] ~]$ /opt/PostgreSQL/9.5/bin/pg_ctl -D /opt/PostgreSQL/9.5/data/ start [[email protected] ~]$ psql psql.bin (9.5.2) Type "help" for help.
postgres=# selecione odbclink.connect('DSN=Ora');
conectar
———
1
(1 linha)
Legal certo…!!!. Para recuperar e manipular dados, consulte o arquivo README ODBC-Link.
Usando DataWrappers Estrangeiros
Uma extensão SQL/MED (SQL Management of External Data) ao SQL Standard permite gerenciar dados externos armazenados fora do banco de dados. O SQL/MED fornece dois componentes Wrappers de dados externos e Datalink. O PostgreSQL introduziu o Foreign Data Wrapper (FDW) na versão 9.1 com suporte somente leitura e na versão 9.3 suporte para gravação deste padrão SQL. Hoje, a versão mais recente possui vários recursos e muitas variedades de FDW disponíveis para acessar diferentes bancos de dados SQL remotos.
O Oracle_fdw fornece uma maneira fácil e eficiente de acessar o Oracle Database. IMO, é um dos métodos mais legais para acessar o banco de dados remoto. Para compilar Oracle_FDW com PostgreSQL 9.5, precisamos das bibliotecas Oracle Instant Client e pg_config definidas em PATH. Podemos usar as mesmas bibliotecas do Oracle Instant Client usadas para ODBC-Link. Vamos ver como isso funciona.
Primeiro, defina variáveis de ambiente com bibliotecas OIC e pg_config
export PATH=/opt/PostgreSQL/9.5/bin:$PATH export ORACLE_HOME=/usr/lib/oracle/11.2/client64 export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
Descompacte o módulo oracle_fdw e compile-o com o PostgreSQL 9.5
unzip oracle_fdw-1.4.0.zip cd oracle_fdw-1.4.0/ make make install
Agora alterne como usuário ‘postgres’ e reinicie o cluster carregando as bibliotecas do Oracle Instant Client necessárias para a extensão oracle_fdw e crie a extensão dentro do banco de dados.
[[email protected] 9.5]$ export ORACLE_HOME=/usr/lib/oracle/11.2/client64/lib [[email protected] 9.5]$ export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib:$LD_LIBRARY_PATH [[email protected] 9.5]$ /opt/PostgreSQL/9.5/bin/pg_ctl -D /opt/PostgreSQL/9.5/data/ stop -mf [[email protected] 9.5]$ /opt/PostgreSQL/9.5/bin/pg_ctl -D /opt/PostgreSQL/9.5/data/ start [[email protected] 9.5]$ psql Password: psql.bin (9.5.2) Type "help" for help.
postgres=# criar extensão oracle_fdw;
CRIAR EXTENSÃO
Agora você pode acessar o banco de dados Oracle.
postgres=# CREATE SERVER oradb FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '//pg.raghav-node1.com/ORA11G'); CREATE SERVER postgres=# GRANT USAGE ON FOREIGN SERVER oradb TO postgres; GRANT postgres=# CREATE USER MAPPING FOR postgres SERVER oradb OPTIONS (user 'scott', password 'tiger'); CREATE USER MAPPING postgres=# postgres=# CREATE FOREIGN TABLE oratab (ecode integer,name char(30)) SERVER oradb OPTIONS(schema 'SCOTT',table 'EMP'); CREATE FOREIGN TABLE postgres=# select * from oratab limit 3; ecode | name -------+-------------------------------- 7369 | SMITH 7499 | ALLEN 7521 | WARD (3 rows)
Usando drivers Oracle Call Interface(OCI)
Oracle Call Interface (OCI) um driver tipo 2 disponível gratuitamente no site da Oracle que permite que o cliente se conecte ao banco de dados Oracle. O EDB Postgres Advanced Server (também chamado EPAS) um produto proprietário possui um módulo de link de banco de dados baseado em OCI chamado dblink_ora, que se conecta ao banco de dados Oracle usando drivers Oracle OCI. Tudo o que você precisa fazer para usar o módulo dblink_ora, instalar o EPAS (não abrangendo a instalação) e informar ao EPAS onde ele pode encontrar bibliotecas de driver Oracle OCI. Podemos fazer uso do mesmo Oracle Instant Client especificando sua localização de bibliotecas na variável de ambiente LD_LIBRARY_PATH e para entrar em vigor reinicie o cluster EPAS.
Primeiro, mude como usuário “enterprisedb”, carregue as bibliotecas e reinicie o cluster. Isso é tudo, somos bons para acessar o banco de dados Oracle.
[[email protected] ~]$ export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib [[email protected] bin]$ /opt/PostgresPlus/9.5AS/bin/pg_ctl -D /opt/PostgresPlus/9.5AS/data/ restart [[email protected] bin]$ psql psql.bin (9.5.0.5) Type "help" for help.
edb=# selecione dblink_ora_connect('oraconn','localhost','edbora','edbuser','edbuser',1521);
dblink_ora_connect
——————–
OK
(1 linha)
Nota:O EPAS se conecta ao banco de dados Oracle usando a biblioteca do Oracle Instant Client “libclntsh.so”. Se você não encontrar a biblioteca no local Oracle Client Library, crie o link simbólico com libclntsh.so apontando para o libclntsh.so.version.number. Consulte a documentação.
No exemplo, dblink_ora_connect estabelece uma conexão com um banco de dados Oracle com as informações de conexão especificadas pelo usuário. Mais tarde, usando o nome do link (‘oraconn’ no meu caso), podemos realizar operações como SELECT,INSERT,DELETE,UPDATE © usando as funções dblink_ora*. Todas as funções que você pode consultar na documentação do EnterpriseDB aqui.
Todos os métodos acima serão muito úteis se você estiver trabalhando em projetos de migração. Espero que seja útil. Obrigada