Instalando, Criando e Acesso a Extensão oracle_fdw

13 de março de 2020 Off Por Marcelo Augusto da Silva

O oracle_fdw é uma extensão do PostgreSQL que utiliza o Foreing Data Wrapper (FDW), que é uma biblioteca que pode se comunicar com fontes de dados externas. Esta por sua vez, utiliza componentes do SQL MED que gerencia dados externos e é a parte do SQL que cuida da integração de dados armazenados em base de dados remotas.

O FDW utiliza em suas implementações, extensões em SGBD do PostgreSQL, e estas implementações em SGBD são responsáveis pela troca de informações entre a fonte de dados remota e o executor do PostgreSQL. O oracle_fdw nos auxilia no acesso à objetos remotos em bases de dados específicas.

A instalação da extensão do oracle_fdw é bem simples. Contudo, antes precisamos fazer a instalação de dois pacotes em seu servidor. O primeiro é o oracle-instantclient-basic (pacote básico) e o segundo é o oracle-instantclient-devel (pacote para desenvolvimento). Você pode encontrar os mesmos em: https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html.

Os pacotes Instant Client habilitam o desenvolvimento e implementação de bancos de dados Oracle. Vamos começar a instalação! Algumas considerações antes:

– Toda a instalação será feita usando o usuário root;
– Instale o pacote Alien. Este pacote permite que você converta e instale pacotes em arquivos de rpm.
# apt install alien

1 – Agora instale o pacote oracle-instantclient-basic (neste exemplo usaremos a versão 12.1.0.2.0-1.x86_64):
# alien instead -ivh oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm

2 – Na sequência instale o pacote oracle-instantclient-devel (no meu caso na versão 12.1.0.2.0-1.x86_64):
# alien instead -ivh oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm

3 – Depois da instalação destes dois pacotes, crie um arquivo chamado oracle_vars.sh utilizando:
# vi /etc/profile.d/oraclevars.sh

4 – Use o comando abaixo para o arquivo oraclevars.sh:
ORACLE_HOME=/usr/lib/oracle/12.1/client64/

5 – Feche o arquivo e atualize as variáveis configuradas (novamente utilizando o usuário root):
# source /etc/profile.d/oraclevars.sh

6 – Depois disso, crie o arquivo oraclelib.conf:
# vi /etc/ld.so.conf.d/oraclelib.con

7 – Use o comando abaixo para o arquivo:
# /usr/lib/oracle/12.1/client64/lib

8 – Feche o arquivo e atualize as bibliotecas dinâmicas:
# idconfig

9 – Verifique o hostname do servidor onde está instalado o PostgreSQL:
# hostname -s

10 – Verifique se o nome de hostname do servidor está associado ao IP local do servidor no arquivo /etc/hosts. Caso não esteja incluído no arquivo /etc/hosts utilizar: # vi /etc/hosts

Após incluir o nome resultante do comando hostname -s:
oraclevm-tdsfw

Agora que a instalação e configuração dos pacotes do Instant Client foram feitas, vamos para a criação do oracle_fdw (ainda utilizando o usuário root):

1 – Baixe o pacote mais atual do oracle_fdw:
# wget https://github.com/laurenz/oracle_fdw/archive/master.zip

2 – Descompacte este arquivo utilizando:
# unzip master

3 – Entre no diretório extraído:
# cd oracle_fdw-master

4 – Agora execute o comando make com a instrução USE_PGXS=1 para habilitar a extensão de módulos com o oracle_fdw:
/oracle_fdw-master# make USE_PGXS=1

5 – Caso o resultado do comando acima seja semelhante a imagem abaixo:

Execute o comando make install também com a instrução USE_PGXS=1 para habilitar a extensão de módulos como o tds fdw:
/oracle_fdw-master# make USE_PGXS=1 install
A Instalação foi Concluída!

Agora para criar a extensão, você pode utilizar o pgAdmin apenas criando uma conexão com o banco de dados onde está o PostgreSQL, habilitando os seguintes objetos: Foreign Data Wrappers, Foreign Servers e Foreign Tables. Em seguida crie a extensão utilizando o editor de query com instrução em SQL:

CREATE EXTENSION oracle_fdw;

Você também pode utilizar painel de controle do PostgreSQL em psql, conectando com o banco utilizando:

$psql -U postgres

.. e criando a extensão tds_fdw utilizando instrução em SQL:

CREATE EXTENSION oracle_fdw

Para que você consiga acessar o servidor do Oracle, do seu servidor do PostgreSQL é preciso criar um servidor estrangeiro, o mapeamento de usuário e uma tabela estrangeira ou várias tabelas se você quiser consultar em mais de uma.

1 – Criação do servidor estrangeiro:
CREATE SERVER nome_servidor_oracle FOREIGN DATA WRAPPER oracle_fdw
        OPTIONS (dbserver ‘//ip_servidor_oracle/instancia_oracle’)

2 – Criação do mapeamento de usuário:
CREATE USER MAPPING FOR postgres SERVER nome_servidor_oracle
       OPTIONS (user ‘usuario_oracle’, password ‘senha_usuario_oracle’);

3 – Criação da tabela estrangeira:
CREATE FOREIGN TABLE nome_tabela_no_oracle (
NOME_COLUNA_NO_ORACLE character NULL,
NOME_COLUNA_NO_ORACLE character NULL,
NOME_COLUNA_NO_ORACLE character NULL
) SERVER nome_servidor_oracle
OPTIONS (table ‘(SELECT * FROM TABELA_NO_ORACLE)’);

Estes comandos podem ser realizados no painel de controle do PostgreSQL em psql e no editor query do pgAdmin.

Para saber se funcionou corretamente, faça uma consulta no servidor estrangeiro do oracle utilizando:
SELECT * FROM public. nome_tabela_no_oracle;

Se a consulta retornar o conteúdo que está nas tabelas do Oracle, então seu oracle_fdw funcionou e retorna os dados para o PostgreSQL.

Gostou do tutorial? Ficou com dúvidas? Entre em contato com conosco. Nossa equipe de DBAs terá prazer em atendê-los!

Referências:
https://pgxn.org/dist/oracle_fdw/
https://github.com/laurenz/oracle_fdw
https://www.oracle.com/technetwork/database/features/oci/instant-client-wp-131479.pdf
http://blog.preciseipostei.com.br/index.php/2018/01/21/integrando-oracle-com-postgresql-utilizando-datawrapper-oracle-fdw/