ORA-28545: ошибка, диагностированная Net8 при подключении к агенту (Oracle linux подключение к Sql Серверу Windows) - PullRequest
0 голосов
/ 03 марта 2020

у меня 2 сервера.

1 сервер SQl Сервер 2014 на windows

  • Имя хоста: 192.168.0.190

  • Имя пользователя: demo

  • Пароль: демо

  • порт: 1433

1 Сервер Oracle Linux 12 c

Проблема: Когда я пытаюсь выполнить sql запрос на моем sql сервере с Oracle linux, я получаю эту ошибку:

ORA-28545: error diagnosed by Net8 when connecting to an agent
Unable to retrieve text of NETWORK/NCR message 65535
ORA-02063: preceding 2 lines from SQLSERVER1

Это мой initdg4odb c .ora:

# This is a sample agent init file that contains the HS parameters that are
# needed for the Database Gateway for ODBC

#
# HS init parameters
#
HS_FDS_CONNECT_INFO = SQLSERVER1
HS_FDS_TRACE_LEVEL = DEBUG
HS_FDS_SHAREABLE_NAME = /usr/lib64/libodbc.so
#HS_LANGUAGE = American_America.we8iso8859p1
#HS_KEEP_REMOTE_COLUMN_SIZE = LOCAL
#HS_FDS_RECOVERY_ACCOUNT = RECOVER
#HS_FDS_RECOVERY_PWD = RECOVER


#
# ODBC specific environment variables
#

set ODBCINI= /etc/odbc.ini

#
# Environment variables required for the non-Oracle system
#
#set <envvar>=<value>

Это мой tnsnames.ora:

LISTENER_ORALIN =
  (ADDRESS = (PROTOCOL = TCP)(HOST = test.ehk.ht)(PORT = 1521))

SQLSERVER1 =
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=test.ehk.ht)(PORT=1521))
      (CONNECT_DATA=(SID=SQLSERVER1))
      (HS=OK)
    )

Это мой слушатель.ora:

# listener.ora Network Configuration File: /u01/app/oracle/product/12.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
  (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = test.ehk.ht)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

# From Oracle 11gR1 onwards use this.
SID_LIST_LISTENER =
 (SID_LIST =
   (SID_DESC=
     (SID_NAME=SQLSERVER1)
     (ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1)
     (ENVS="LD_LIBRARY_PATH=/u01/app/oracle/product/12.2.0/dbhome_1/lib")
     (PROGRAM=dg4odbc)
   )
 )

Я выбираю порт 1433, потому что это мой динамический c порт

Я тоже пытался 1522, ничего не изменилось. У меня всегда одно и то же сообщение.

Мои имя пользователя и пароль: "test" и "testpassword"

Это мой файл odb c .ini:

[ODBC Data Sources]
MSSQLSERVER= MSSQL Server

[GESFILM]
# Reference driver from the "/etc/odbcinst.ini" file.
# Driver = FreeTDS
# Or use a direct driver reference, rather than reference
# one in the "/etc/odbcinst.ini" file.
Driver = SQLSERVER1
Description = MSSQL Server
Trace = yes
TraceFile = /usr/local/bin/sqlncli-11.0.1790.0/lib64
Server = 192.168.0.190
Database = test
UserName = test
Password = testpassword
Port = 1433
TDS_Version = 7.2
#QuotedId = YES
#AnsiNPW = YES
#VarMaxAsLong = YES

[Default]
Driver = SQLSERVER1

Когда я пытаюсь соединиться с «i sql», это работает

enter image description here

Вот как я думаю, у меня есть для создания моей базы данных: Ссылка:

CREATE PUBLI C БАЗА ДАННЫХ SQLSERVER1 ПОДКЛЮЧИТСЯ К "ДЕМО" ИДЕНТИФИЦИРОВАНО "ДЕМО" С ИСПОЛЬЗОВАНИЕМ "SQLSERVER1";

После запроса sql, я получил эту ошибку:

ORA-28545: error diagnosed by Net8 when connecting to an agent
Unable to retrieve text of NETWORK/NCR message 65535
ORA-02063: preceding 2 lines from SQLSERVER1

Я попробовал 3 других способа создать ссылку на базу данных:

1:

CREATE PUBLIC DATABASE LINK "demo" CONNECT TO "test" IDENTIFIED BY testpasword USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.190)(PORT=1433))(CONNECT_DATA= (SID=SQLSERVER1)))';

2:

CREATE PUBLIC DATABASE LINK "demo" CONNECT TO "test" IDENTIFIED BY testpasword USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.190)(PORT=1522))(CONNECT_DATA= (SID=SQLSERVER1)))';

3:

CREATE PUBLIC DATABASE LINK "demo" CONNECT TO "test" IDENTIFIED BY testpasword USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.190)(PORT=3389))(CONNECT_DATA= (SID=SQLSERVER1)))';

Я получил различную ошибку для каждой ссылки на базу данных. (Выполнение в том же порядке, что и создание каждой ссылки на базу данных)

1: ORA-12537: TNS: соединение закрыто

2: - ORA-12541: TNS: нет прослушивателя

3: - ORA-12547: TNS: потерян контакт

Что не так? Как я могу решить мою ошибку, чтобы иметь возможность сделать запрос sql на моем SQlServer от Oracle?

Спасибо!

Ответы [ 3 ]

1 голос
/ 03 марта 2020

Похоже, у вас есть запись tnsnames.ora, настроенная так, чтобы она указывала непосредственно на сервер и базу данных MS SQL (сервер и порт). Это неверно Это должно указывать на слушателя. Слушатель настроен на сервере «agencesprov.edh.ht» через порт 1521. Именно на это должен указывать ваш tnsnames.ora.

В качестве отдельной проблемы «невозможно получить текст сообщения» на самом деле является вторичной ошибкой. Обычно это означает, что ORACLE_HOME не был установлен должным образом, и в результате неисправный модуль не смог найти текст сообщения об ошибке, расположенный в файле под ORACLE_HOME. Все, что он может сделать, это сообщить код ошибки основной ошибки, которая в данном случае равна 65535. Вы можете узнать больше о том, как подключить все части соединения шлюза от oracle до ms sql, на https://edstevensdba.wordpress.com/2018/09/19/the-oracle-transparent-gateway/

0 голосов
/ 05 марта 2020

У меня не было файла SQLSERVER1.ini, поэтому у меня были эти ошибки. Теперь я получил новую ошибку.

Я пытаюсь установить соединение без oracle:

isql -v GESFIM test testpassword

Эта работа.

Теперь я пытаюсь сделать то же самое с oracle:

select count(*) from test123@SQLSERVER1;

enter image description here

это мой initSQLSERVER1.ora:

    # This is a sample agent init file that contains the HS parameters that are
# needed for the Database Gateway for ODBC

#
# HS init parameters
#
HS_FDS_CONNECT_INFO = SQLSERVER1
HS_FDS_TRACE_LEVEL = DEBUG
HS_FDS_SHAREABLE_NAME = /usr/lib64/libodbc.so
HS_LANGUAGE=American_America.we8iso8859p1
HS_KEEP_REMOTE_COLUMN_SIZE = LOCAL
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER


#
# ODBC specific environment variables
#

set ODBCINI= /etc/odbc.ini
#
# Environment variables required for the non-Oracle system
#
#set <envvar>=<value>

это мой odb c .ini:

[ODBC Data Sources]
MSSQLSERVER= MSSQL Server

[GESFIM]
# Reference driver from the "/etc/odbcinst.ini" file.
# Driver          = FreeTDS
# Or use a direct driver reference, rather than reference
# one in the "/etc/odbcinst.ini" file.
Driver          = /usr/local/bin/sqlncli-11.0.1790.0/lib64/libsqlncli-11.0.so.1790.0
Description     = MSSQL Server
Trace           = yes
TraceFile       = /usr/local/bin/sqlncli-11.0.1790.0/lib64
Server      = 192.168.0.190
Database        = test
UserName    = test
Password    = testpassword
Port            = 1433
TDS_Version     = 7.2
#QuotedId=YES
#AnsiNPW=YES
#VarMaxAsLong=YES

[Default]
Driver          = /usr/local/bin/sqlncli-11.0.1790.0/lib64/libsqlncli-11.0.so.1790.0

Почему имя источника данных и драйвер не найдены? Это работает вручную. Я думаю, что он не находит odb c .ini или что-то в этом роде.

Что не так?

Спасибо!

0 голосов
/ 05 марта 2020

Я изменил свой файл tnsames.ora:

ORALIN =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = agencesprov.edh.ht)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = oralin.edh.ht)
    )
  )

LISTENER_ORALIN =
  (ADDRESS = (PROTOCOL = TCP)(HOST = agencesprov.edh.ht)(PORT = 1521))


SQLSERVER1 =
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=agencesprov.edh.ht)(PORT=1521))
      (CONNECT_DATA=(SID=SQLSERVER1))
      (HS=OK)
    )

LISTENER_SQLSERVER1 =
(ADDRESS = (PROTOCOL=tcp)(HOST=agencesprov.edh.ht)(PORT=1521))

Это должно быть так?

Это моя новая ошибка:

ORA-28500: подключение от ORACLE к системе, отличной от Oracle, вернуло это сообщение: ORA-02063: предыдущая строка из SQLSERVER1

Спасибо!

...