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?
Comments
Bom dia, como o erro é do Oracle e não do Caché, você poderia passar mais informações sobre o erro?
Poderia também verificar no Caché se tem algum erro nas los do Caché?
Para confirmar que a conexão chegou no Caché e ele reportou algum erro.
Obrigado
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.
Boa tarde, Marcio.
Não sei se vc fez teste, mas eu tentaria executar a mesma sentença sem o uso das aspas (" ").
select * from pedido@CacheDB;
Bom dia Danusa,
Já fiz vários testes sem aspas e com aspas.
Sempre retorna o mesmo erro.
select * from pedido@CacheDB;
select * from dw.pedido@CacheDB;
select * from "pedido"@CacheDB;
select * from "dw"."pedido"@CacheDB;
select * from "dw.pedido"@CacheDB;
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.