Pergunta
· Fev. 20

Como configurar database dblink do oracle 21c xe para banco cache 2018?

Instalei um servidor linux oracle 8, neste servidor instalei o oracle 21c xe.

Fiz a instalação do pacote unixODBC unixODBC-devel , abaixo e descompactei os do ODBC-2018.1.5.659.0-lnxrhx64.tar.gz na pasta /usr/local/lib/odbc e configurei os arquivos /etc/odbcinst.ini e /etc/odbc.ini.

usei o comando isql -v CacheDB, fiz select em algumas tabelas e esta funcionado.

Também fiz as configurações na parte do oracle, nos arquivo tnsnames.ora, listener.ora e initCacheDB.ora.

Criei o dblink no oracle, mas ao executar um select no oracle esta retornando erro:

SQL> select * from "pedido"@CacheDB;
select * from "pedido"@CacheDB
                           *
ERROR at line 1:
ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
ORA-02063: preceding line from CacheDB

Como resolvo este erro?

Qual o link para baixar o banco cache na versão 2018.01?

Product version: Caché 2018.1
$ZV: 2018.1.2.309
Discussão (6)2
Entre ou crie uma conta para continuar

Boa tarde,

Eu não tenho acesso ao servidor do cache para verificar os logs.

Os arquivos odba.ini e odbcinst.ini estão configurado desta forma:

/etc/odbc.ini
[cachedb]
Driver          = /usr/local/lib/odbc/libcacheodbc35.so
Description     = Cache ODBC driver
Host            = 192.168.1.10
Namespace       = DW
UID             = dw
Password        = **********************
Port            = 1972
Protocol        = TCP
Query Timeout   = 1
Static Cursors  = 0
Trace           = Yes
TraceFile       = /tmp/iodbctrace.log
Authentication Method   = 0
Security Level  = 2
Service Principal Name = cache/localhost.domain.com

/etc/odbcinst.ini

# Driver from InterSystems Cache
# Setup manually to access the database Consystem
[cachedb]
Description=InterSystems Caché ODBC Driver
Driver=/usr/local/lib/odbc/libcacheodbc35.so
Setup=/usr/local/lib/odbc/libcacheodbc35.so
Driver64=/usr/local/lib/odbc/libcacheodbc35.so
Setup64=/usr/local/lib/odbc/libcacheodbc35.so
Trace           = Yes
TraceFile       = /tmp/iodbctrace.log
FileUsage=1
 

No oracle configurei os arquivos:
-  tnsnames.ora

CACHEDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SID = cachedb)
    )
    (HS=OK)
  )

- listener.ora

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = cachedb)
      (ORACLE_HOME = /opt/oracle/product/21c/dbhomeXE)
      (PROGRAM = dg4odbc)
    )
  )
 

- initcachedb.ora
HS_FDS_CONNECT_INFO = cachedb
HS_FDS_SHAREABLE_NAME = /usr/local/lib/odbc/libcacheodbc35.so
HS_LANGUAGE=AMERICAN_AMERICA.WE8ISO8859P15
HS_FDS_TRACE_LEVEL = DEBUG
HS_FDS_TRACE_FILE_NAME = /tmp/CacheD-dblink.trc
set ODBCINI=/etc/odbc.ini

Criado o dblink:

CREATE DATABASE LINK cachedb CONNECT TO "dw" IDENTIFIED BY "**********************" USING 'cachedb';

Ao executar o select esta retornando o erro.

Bom dia, Marcio. 

Você encontrou registro do erro nos logs do Caché (cconsole, erros de app)? 

Em relação aos privilégios de acesso, você verificou se está habilitado corretamente para o Caché ser acessado pelo dblink? 

Encontrei um artigo (antigo) que pode te ajudar com os pré-requisitos para a criação e execução de um dblink. Apesar de ser sobre o Oracle, pode de dar alguma dica! 💡
https://www.devmedia.com.br/criacao-de-database-links/2748

outro ponto importante que me vem a cabeça, é que no caso do Caché, ou seja, o Caché 2018 (como informado), lendo uma tabela mapeada no Oracle 21c (como também informado) não funcionaria.

vide documentação da versão 2018: https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=ISP_technologies#ISP_platforms

somente no IRIS funcionaria com a versão informada do Oracle.

muito provavelmente a Oracle também deve ter restrições quanto as versões do Caché/IRIS.

avise se conseguir estas informações.

outro teste que você pode fazer é instalar uma ferramenta de SQL (ex: DBeaver) na máquina que está o Oracle e tentar conectar com o Caché.

espero ter ajudado.