Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Связка Oracle с MSSql через FreeTDS  [new]
Анатолий Окишев
Member

Откуда:
Сообщений: 15
Гуру подскажите плиз.

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

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

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

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

  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]


Подскажите, в какую сторону копать плиз..
21 дек 17, 11:14    [21051004]     Ответить | Цитировать Сообщить модератору
 Re: Связка Oracle с MSSql через FreeTDS  [new]
merch
Member

Откуда:
Сообщений: 169
Анатолий Окишев,
почему бы не переписать select * на набор необходимых полей.
21 дек 17, 12:25    [21051335]     Ответить | Цитировать Сообщить модератору
 Re: Связка Oracle с MSSql через FreeTDS  [new]
Анатолий Окишев
Member

Откуда:
Сообщений: 15
Потому-что при попытке выбрать поле из тех, которые теряются - оракл говорил - нет такого поля.
Какой-то непонятный глюк HS, поскольку через isql великолепно выбираются все поля.
21 дек 17, 13:45    [21051712]     Ответить | Цитировать Сообщить модератору
 Re: Связка Oracle с MSSql через FreeTDS  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51768

Анатолий Окишев
Потому-что при попытке выбрать поле из тех, которые теряются - оракл говорил - нет такого
поля.

Delimited identifiers?..

Posted via ActualForum NNTP Server 1.5

21 дек 17, 13:57    [21051768]     Ответить | Цитировать Сообщить модератору
 Re: Связка Oracle с MSSql через FreeTDS  [new]
-2-
Member

Откуда:
Сообщений: 15330
HS пропускает поля неподдерживаемого типа или неподдерживаемое ораклом имя. Может быть глюк связан с различием nls или одна БД пропатчена.


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. Также попробуй при перечислении поменять порядок столбцов.
21 дек 17, 14:20    [21051876]     Ответить | Цитировать Сообщить модератору
 Re: Связка Oracle с MSSql через FreeTDS  [new]
Анатолий Окишев
Member

Откуда:
Сообщений: 15
Сами инсталяции оракла - абсолютно идентичны.

Смущает в трассировке то, что при перечислении колонок (красным выделил) на том сервере, где глюк - HS не увеличивает номер колонки, а везде пишет "Column:1" В то время как тот, который нормально работает Column:1,Column:2 и т.д...
21 дек 17, 14:25    [21051914]     Ответить | Цитировать Сообщить модератору
 Re: Связка Oracle с MSSql через FreeTDS  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
Анатолий Окишев,

Это происходит со всеми таблицами или конкретной одной? Mssql сервер тоже один для обоих баз?
21 дек 17, 14:34    [21051971]     Ответить | Цитировать Сообщить модератору
 Re: Связка Oracle с MSSql через FreeTDS  [new]
Анатолий Окишев
Member

Откуда:
Сообщений: 15
Это происходит со всеми таблицами. mssql сервер и база одна и та-же.
21 дек 17, 14:36    [21051984]     Ответить | Цитировать Сообщить модератору
 Re: Связка Oracle с MSSql через FreeTDS  [new]
dba123
Member

Откуда:
Сообщений: 1054
Анатолий Окишев,

м.б. миллисекунды потребовались, тогда посмотри этот тип данных у них
Как получить дату с миллисекундами ?
21 дек 17, 14:50    [21052093]     Ответить | Цитировать Сообщить модератору
 Re: Связка Oracle с MSSql через FreeTDS  [new]
merch
Member

Откуда:
Сообщений: 169
dba123
,

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


Какое это имеет отношение к данной теме?
21 дек 17, 15:02    [21052179]     Ответить | Цитировать Сообщить модератору
 Re: Связка Oracle с MSSql через FreeTDS  [new]
Анатолий Окишев
Member

Откуда:
Сообщений: 15
Как тогда объяснить, что один сервер нормально работает?
21 дек 17, 15:04    [21052191]     Ответить | Цитировать Сообщить модератору
 Re: Связка Oracle с MSSql через FreeTDS  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7128
Анатолий Окишев,

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

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


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

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

p.s. MSSQL база одна и та же для обоих серверов?
21 дек 17, 17:11    [21052895]     Ответить | Цитировать Сообщить модератору
 Re: Связка Oracle с MSSql через FreeTDS  [new]
alexkir
Member

Откуда: Череповец
Сообщений: 30
Анатолий Окишев,

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

У меня было похожее на SLES 12SP3 возвращалась 1 колонка, при этом на SLES11SP4 всё работало.
На SLES 12SP3 поставил dg4odbc от oracle 12.2 с ним нормально
Сам Oracle 11.2.0.4.
21 дек 17, 17:13    [21052908]     Ответить | Цитировать Сообщить модератору
 Re: Связка Oracle с MSSql через FreeTDS  [new]
Анатолий Окишев
Member

Откуда:
Сообщений: 15
Завтра проверю и отпишусь.
21 дек 17, 17:43    [21053035]     Ответить | Цитировать Сообщить модератору
 Re: Связка Oracle с MSSql через FreeTDS  [new]
Анатолий Окишев
Member

Откуда:
Сообщений: 15
Библиотеки оракла, dg4odbc, tds - идентичные.

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

Enterprise Linux Enterprise Linux Server release 5.9 (Carthage)

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

Enterprise Linux Enterprise Linux Server release 5.11 (Carthage)

Остально идентично
22 дек 17, 07:11    [21054173]     Ответить | Цитировать Сообщить модератору
 Re: Связка Oracle с MSSql через FreeTDS  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7128
Анатолий Окишев,

Проверял?
4) Чтобы локализовать проблему,
создай DBLINK на HS Listener с битого сервера на нормальный и наоборот
что скажет?
22 дек 17, 10:42    [21054515]     Ответить | Цитировать Сообщить модератору
 Re: Связка Oracle с MSSql через FreeTDS  [new]
Анатолий Окишев
Member

Откуда:
Сообщений: 15
При отсылке на листнер второго сервера - работает корректно.
22 дек 17, 10:52    [21054560]     Ответить | Цитировать Сообщить модератору
 Re: Связка Oracle с MSSql через FreeTDS  [new]
dba123
Member

Откуда:
Сообщений: 1054
Анатолий Окишев,

+ листинги посмотреть для двух серверов и с одного рабочего места
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
22 дек 17, 10:58    [21054582]     Ответить | Цитировать Сообщить модератору
 Re: Связка Oracle с MSSql через FreeTDS  [new]
Анатолий Окишев
Member

Откуда:
Сообщений: 15
Наоборот - вернул только одну колонку.
22 дек 17, 10:59    [21054589]     Ответить | Цитировать Сообщить модератору
 Re: Связка Oracle с MSSql через FreeTDS  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7128
Анатолий Окишев,

1) Проверь конфигурацию ODBC и HS
файлы конфигурации совсем одинаковые?
Версия драйвера?
/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) Перелинкуй

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, базы никакой не нужно
22 дек 17, 11:45    [21054756]     Ответить | Цитировать Сообщить модератору
 Re: Связка Oracle с MSSql через FreeTDS  [new]
Анатолий Окишев
Member

Откуда:
Сообщений: 15
А можно руководство по настройке на стороне MSSQL? С листенерами на стороне оракла - все понятно, а вот с настройкой на стороне mssql - инфа слишком разница от источника к источнику.
22 дек 17, 12:56    [21054970]     Ответить | Цитировать Сообщить модератору
 Re: Связка Oracle с MSSql через FreeTDS  [new]
переносица
Guest
Анатолий Окишев
слишком разница
разнится
22 дек 17, 13:41    [21055135]     Ответить | Цитировать Сообщить модератору
 Re: Связка Oracle с MSSql через FreeTDS  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7128
Анатолий Окишев
А можно руководство по настройке на стороне 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 сервера может выступать даже клиентская, бо нагрузка минимальная
22 дек 17, 13:54    [21055205]     Ответить | Цитировать Сообщить модератору
 Re: Связка Oracle с MSSql через FreeTDS  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7128
Анатолий Окишев,
для понятности, HS Соединение в общем случае можно описать следующей цепочкой
(В частном случае Узлы #1 #2 #3 могут находится на одной машине):
Красный цвет - ORACLE_HOME RDBMS
Зеленый цвет - ORACLE_HOME HS Agent
Синий цвет - ПО внешнего клиента, в простейшем случае ODBC
Предполагается все файлы конфигурации рассположены по умолчанию.

Узел #1 Oracle RDBMS Server
Oracle 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

22 дек 17, 14:04    [21055236]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить