powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Связка Oracle с MSSql через FreeTDS
24 сообщений из 24, страница 1 из 1
Связка Oracle с MSSql через FreeTDS
    #39573356
Гуру подскажите плиз.

Имеем 2 сервера Oracle 11.2.0.4 под Oracle Linux

На обоих настроено подключение к серверу MSSQL 2008. Линки абсолютно одинаковые на обоих серверах.
Однако когда делаю запрос к mssql - то один сервер отрабатывает нормально, а вот второй возвращает только одно поле из запроса select *..., причем последнее. Подобной проблемы в сети не нашел.

В HS логах второго сервера видно, что он видит все поля таблицы, но потом почему-то берет только последнее

Причем видно, что он не увеличивает номер колонки при переборе полей

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
  table: TCALENDAR
 Allocate hoada[0] @ 0xfbb3160
 Free hoada[0] @ 0xfbb3160
SQL text from hgodtab, id=0, len=25 ...
     00: 73656C65 6374202A 2066726F 6D202254  [select * from "T]
     10: 43414C45 4E444152 22                 [CALENDAR"]
Entered hgodscr_process_sellist_description at 2017/12/21-12:22:06
Entered hgopcda at 2017/12/21-12:22:06
 Column:1(RID): dtype:4 (INTEGER), prc/scl:10/0, nullbl:0, octet:0, sign:1, radix:0
Exiting hgopcda, rc=0 at 2017/12/21-12:22:06
Entered hgopcda at 2017/12/21-12:22:06
 Column:1(cDate): dtype:93 (TIMESTAMP), prc/scl:16/0, nullbl:1, octet:0, sign:1, radix:0
Exiting hgopcda, rc=0 at 2017/12/21-12:22:06
Entered hgopcda at 2017/12/21-12:22:06
 Column:1(cClose): dtype:4 (INTEGER), prc/scl:10/0, nullbl:1, octet:0, sign:1, radix:0
Exiting hgopcda, rc=0 at 2017/12/21-12:22:06
The hoada for table TCALENDAR follows...
hgodtab, line 1073: Printing hoada @ 0xfbb3160
 MAX:1, ACTUAL:1, BRC:1, WHT=5 (SELECT_LIST)
DTY         NULL-OK  LEN  MAXBUFLEN   PR/SC  CST IND MOD NAME
  4 INTEGER Y          4          4   0/  0    0   0   0 cClose
Exiting hgodtab, rc=0 at 2017/12/21-12:22:06
Entered hgodafr, cursor id 0 at 2017/12/21-12:22:06
 Free hoada @ 0xfbb3160
Exiting hgodafr, rc=0 at 2017/12/21-12:22:06
Entered hgopars, cursor id 1 at 2017/12/21-12:22:06
 type:0
SQL text from hgopars, id=1, len=38 ...
     00: 53454C45 43542041 312E2263 436C6F73  [SELECT A1."cClos]
     10: 65222046 524F4D20 22544341 4C454E44  [e" FROM "TCALEND]
     20: 41522220 4131                        [AR" A1]


Подскажите, в какую сторону копать плиз..
...
Рейтинг: 0 / 0
Связка Oracle с MSSql через FreeTDS
    #39573447
merch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий Окишев,
почему бы не переписать select * на набор необходимых полей.
...
Рейтинг: 0 / 0
Связка Oracle с MSSql через FreeTDS
    #39573566
Потому-что при попытке выбрать поле из тех, которые теряются - оракл говорил - нет такого поля.
Какой-то непонятный глюк HS, поскольку через isql великолепно выбираются все поля.
...
Рейтинг: 0 / 0
Связка Oracle с MSSql через FreeTDS
    #39573584
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ОкишевПотому-что при попытке выбрать поле из тех, которые теряются - оракл говорил - нет такого
поля.

Delimited identifiers?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Связка Oracle с MSSql через FreeTDS
    #39573604
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HS пропускает поля неподдерживаемого типа или неподдерживаемое ораклом имя. Может быть глюк связан с различием nls или одна БД пропатчена.

Код: plaintext
1.
2.
3.
4.
SQL text from hgopars, id=1, len=38 ...
     00: 53454C45 43542041 312E2263 436C6F73  [SELECT A1."cClos]
     10: 65222046 524F4D20 22544341 4C454E44  [e" FROM "TCALEND]
     20: 41522220 4131                        [AR" A1]
Попробуй перечислять колонки явно с алиасами, как это сделал HS. Также попробуй при перечислении поменять порядок столбцов.
...
Рейтинг: 0 / 0
Связка Oracle с MSSql через FreeTDS
    #39573615
Сами инсталяции оракла - абсолютно идентичны.

Смущает в трассировке то, что при перечислении колонок (красным выделил) на том сервере, где глюк - HS не увеличивает номер колонки, а везде пишет "Column:1" В то время как тот, который нормально работает Column:1,Column:2 и т.д...
...
Рейтинг: 0 / 0
Связка Oracle с MSSql через FreeTDS
    #39573628
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Анатолий Окишев,

Это происходит со всеми таблицами или конкретной одной? Mssql сервер тоже один для обоих баз?
...
Рейтинг: 0 / 0
Связка Oracle с MSSql через FreeTDS
    #39573630
Это происходит со всеми таблицами. mssql сервер и база одна и та-же.
...
Рейтинг: 0 / 0
Связка Oracle с MSSql через FreeTDS
    #39573653
dba123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий Окишев,

м.б. миллисекунды потребовались, тогда посмотри этот тип данных у них
Как получить дату с миллисекундами ?
...
Рейтинг: 0 / 0
Связка Oracle с MSSql через FreeTDS
    #39573671
merch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dba123,

м.б. миллисекунды потребовались, тогда посмотри этот тип данных у них
Как получить дату с миллисекундами ?


Какое это имеет отношение к данной теме?
...
Рейтинг: 0 / 0
Связка Oracle с MSSql через FreeTDS
    #39573673
Как тогда объяснить, что один сервер нормально работает?
...
Рейтинг: 0 / 0
Связка Oracle с MSSql через FreeTDS
    #39573875
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий Окишев,

1) Сравни переменные окружения процесса

2) Проверь версии библиотек и размер
Код: plsql
1.
2.
ldd dg4odbc
ls -lL $ORACLE_HOME//lib/libagtsh.so.1



3) перелинкуй hs на битом сервере и перезалей его пакеты
не поможет, тогда

4) Чтобы локализовать проблему,
создай DBLINK на HS Listener с битого сервера на нормальный и наоборот
что скажет?

p.s. MSSQL база одна и та же для обоих серверов?
...
Рейтинг: 0 / 0
Связка Oracle с MSSql через FreeTDS
    #39573879
alexkir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий Окишев,

А Linux / tds на обоих серверах одинаковые?

У меня было похожее на SLES 12SP3 возвращалась 1 колонка, при этом на SLES11SP4 всё работало.
На SLES 12SP3 поставил dg4odbc от oracle 12.2 с ним нормально
Сам Oracle 11.2.0.4.
...
Рейтинг: 0 / 0
Связка Oracle с MSSql через FreeTDS
    #39573906
Завтра проверю и отпишусь.
...
Рейтинг: 0 / 0
Связка Oracle с MSSql через FreeTDS
    #39574163
Библиотеки оракла, dg4odbc, tds - идентичные.

Разница есть только в самой системе. На том, который работает стоит

Enterprise Linux Enterprise Linux Server release 5.9 (Carthage)

, а на том который нет -

Enterprise Linux Enterprise Linux Server release 5.11 (Carthage)

Остально идентично
...
Рейтинг: 0 / 0
Связка Oracle с MSSql через FreeTDS
    #39574276
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий Окишев,

Проверял?4) Чтобы локализовать проблему,
создай DBLINK на HS Listener с битого сервера на нормальный и наоборот
что скажет?
...
Рейтинг: 0 / 0
Связка Oracle с MSSql через FreeTDS
    #39574284
При отсылке на листнер второго сервера - работает корректно.
...
Рейтинг: 0 / 0
Связка Oracle с MSSql через FreeTDS
    #39574292
dba123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий Окишев,

+ листинги посмотреть для двух серверов и с одного рабочего места
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
scott@domen.home>; show sqlpluscompatibility
sqlpluscompatibility 12.2.0

alter session set NLS_DATE_FORMAT = "YYYY-MM-DD HH24:MI:SS";
alter session set NLS_TIMESTAMP_FORMAT='yyyy-mm-dd hh24:mi:ssxff' ;
alter session set NLS_numeric_characters='. ';

--USE base01
--GO  
--GRANT CREATE TABLE  TO user01
--go
--CREATE SCHEMA TEST AUTHORIZATION user01;
--go

declare
   i 		pls_integer;
begin
  i:=DBMS_HS_PASSTHROUGH.EXECUTE_IMMEDIATE@mssql('
CREATE TABLE TEST.TEST01(
	 ID 	int 		NOT NULL
	,NUM	numeric(18, 3) 	NULL
	,STR	varchar(250) 	NULL
	,CDATE	datetime	NULL
	,MDATE	datetime2	NULL
	,TS	timestamp	NOT NULL)
');

  i:=DBMS_HS_PASSTHROUGH.EXECUTE_IMMEDIATE@mssql('insert into
     TEST.TEST01(id,num,str,cdate,mdate) values(1,11.15,''тест1'',getdate(),convert(datetime2(7), ''2017-12-22T12:39:22.1234567''))');

end;
/

commit;

select * from test.test01@mssql;

ID  NUM  STR           CDATE               MDATE                       TS
-- ----- ------------- ------------------- --------------------------- ----------------
1  11.15 тест1         2017-12-22 10:39:22 2017-12-22 10:39:22.1234567 000000001BA9A871
...
Рейтинг: 0 / 0
Связка Oracle с MSSql через FreeTDS
    #39574295
Наоборот - вернул только одну колонку.
...
Рейтинг: 0 / 0
Связка Oracle с MSSql через FreeTDS
    #39574327
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий Окишев,

1) Проверь конфигурацию ODBC и HS
файлы конфигурации совсем одинаковые?
Версия драйвера?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.1.so.6.0

системные библиотеки:
# ldd /opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.1.so.6.0
        linux-vdso.so.1 =>  (0x00007fff96377000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fd9e7692000)
        librt.so.1 => /lib64/librt.so.1 (0x00007fd9e748a000)
        libodbcinst.so.2 => /usr/lib64/libodbcinst.so.2 (0x00007fd9e7278000)
        libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007fd9e6e95000)
        libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007fd9e6bae000)
        libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007fd9e6969000)
        libcurl.so.4 => /usr/lib64/libcurl.so.4 (0x00007fd9e6714000)
        libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007fd9e64a8000)
        libuuid.so.1 => /lib64/libuuid.so.1 (0x00007fd9e62a3000)
        libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fd9e5f9d000)
        libm.so.6 => /lib64/libm.so.6 (0x00007fd9e5d19000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fd9e5b02000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd9e58e5000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fd9e5551000)
        /lib64/ld-linux-x86-64.so.2 (0x0000003bdd600000)
        libltdl.so.7 => /usr/lib64/libltdl.so.7 (0x00007fd9e5347000)
        libz.so.1 => /lib64/libz.so.1 (0x00007fd9e5131000)
        libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007fd9e4f05000)
        libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007fd9e4d00000)
        libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007fd9e4af5000)
        libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007fd9e48f2000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fd9e46d7000)
        libidn.so.11 => /lib64/libidn.so.11 (0x00007fd9e44a5000)
        libldap-2.4.so.2 => /lib64/libldap-2.4.so.2 (0x00007fd9e4255000)
        libssl3.so => /usr/lib64/libssl3.so (0x00007fd9e4014000)
        libsmime3.so => /usr/lib64/libsmime3.so (0x00007fd9e3de8000)
        libnss3.so => /usr/lib64/libnss3.so (0x00007fd9e3aa9000)
        libnssutil3.so => /usr/lib64/libnssutil3.so (0x00007fd9e387c000)
        libplds4.so => /lib64/libplds4.so (0x00007fd9e3678000)
        libplc4.so => /lib64/libplc4.so (0x00007fd9e3473000)
        libnspr4.so => /lib64/libnspr4.so (0x00007fd9e3234000)
        libssh2.so.1 => /usr/lib64/libssh2.so.1 (0x00007fd9e300c000)
        libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fd9e2dec000)
        liblber-2.4.so.2 => /lib64/liblber-2.4.so.2 (0x00007fd9e2bdd000)
        libsasl2.so.2 => /usr/lib64/libsasl2.so.2 (0x00007fd9e29c3000)
        libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fd9e278b000)
        libfreebl3.so => /lib64/libfreebl3.so (0x00007fd9e2588000)



2) Перелинкуй

Код: plsql
1.
2.
make -f $ORACLE_HOME/rdbms/lib/ins_rdbms.mk $ORACLE_HOME/rdbms/lib/db4odbс 
mv $ORACLE_HOME/rdbms/lib/dg4odbc $ORACLE_HOME/bin



p.s. если есть доступ, то HS Listener удобнее запустить на самом MSSQL сервере
для это ставишь только ПО и настраиваешь listener и HS, базы никакой не нужно
...
Рейтинг: 0 / 0
Связка Oracle с MSSql через FreeTDS
    #39574389
А можно руководство по настройке на стороне MSSQL? С листенерами на стороне оракла - все понятно, а вот с настройкой на стороне mssql - инфа слишком разница от источника к источнику.
...
Рейтинг: 0 / 0
Связка Oracle с MSSql через FreeTDS
    #39574420
Анатолий Окишев слишком разницаразнится
...
Рейтинг: 0 / 0
Связка Oracle с MSSql через FreeTDS
    #39574438
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ОкишевА можно руководство по настройке на стороне MSSQL? С листенерами на стороне оракла - все понятно, а вот с настройкой на стороне mssql - инфа слишком разница от источника к источнику.

В смысле как настроить доступ с MSSQL на oracle, или как настроить
Oracle HS listener на MS Windows сервере?
Если первое:
Connecting SQL Server and Oracle Using Linked Servers

Если второе, то:
1) Настраиваешь System Wide ODBC на MS SQL
2) Ставишь Oracle Rdbms Software only
3) Конфигуришь Listener (netca) или просто запустив lsnrctl start, служба создаст lsnrctl, если у учетной записи есть такие права
4) настраиваешь HS как обычно
5) Создаешь DBLINK указывая HOST на MS windows где запущен этот Oracle HS Listener

Кстати, в качестве такого HS сервера может выступать даже клиентская, бо нагрузка минимальная
...
Рейтинг: 0 / 0
Связка Oracle с MSSql через FreeTDS
    #39574444
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий Окишев,
для понятности, HS Соединение в общем случае можно описать следующей цепочкой
(В частном случае Узлы #1 #2 #3 могут находится на одной машине):
Красный цвет - ORACLE_HOME RDBMS
Зеленый цвет - ORACLE_HOME HS Agent
Синий цвет - ПО внешнего клиента, в простейшем случае ODBC
Предполагается все файлы конфигурации рассположены по умолчанию.
Код: plaintext
1.
Узел #1 Oracle RDBMS ServerOracle RDBMS -> DBLink -> Oracle Client ->
-> TNS Запись (ORACLE_HOME_RDBMS/network/admin/tnsnames.ora) ->

Узел #2 Oracle HS Agent (hsodbc) -> Oracle TNS Listener ->
-> SID_DESC Listener Запись (ORACLE_HOME_HS/network/admin/listener.ora)-> HS agent ->
-> FDC_CONNECT_INFO запись (ORACLE_HOME_HS/hs/admin/initHSSID.ora) ->
-> ODBC или OLE библиотеки ->
-> OtherDb Client ->

Узел #3 Other DB Server-> Other DB Server
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Связка Oracle с MSSql через FreeTDS
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]