Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Ms SQL -Linked server -ODBC -Oracle проблема выборки даных  [new]
Roman35
Member

Откуда:
Сообщений: 61
Попробовал создание линкед сервера 2-мя путями.
1.Через оракловский провайдер OraOleDB.Oracle
2.Через ODBC провайдер MSDASQL

В первом случае получаю все данные но тип всех полей nvarchar ,и при этом числа передаются в формате с запятой,а ms SQL хочет точку.

Во втором варианте формат данных нормальный но когда делаю селект на какую-нибудь таблицу получаю количество записей на 99 меньше чем есть на самом деле.
Вот какие у меня настройки. Client Oracle 11 g 32bit, MS SQL 2008 32 bit.

Настройка ODBC
Data source name ISCARD_PROD
TNS Source name ISCARD_PROD
USER ID IC
Все остальные параметры по умолчанию.

EXEC master.dbo.sp_addlinkedserver @server = N'ISCARD_PROD', @srvproduct=N'ISCARD_PROD', @provider=N'MSDASQL', @datasrc=N'ISCARD_PROD'
 /* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'ISCARD_PROD',@useself=N'False',@locallogin=NULL,@rmtuser=N'IC',@rmtpassword='########'


Теперь пробую запускать запросы
Select ora.*
FROM	OPENQUERY(ISCARD_PROD,'SELECT   * from ic.accounts where rownum between 0 AND 101  ') ora

Select ora.*

FROM	OPENQUERY(ISCARD_TEST,'SELECT  count( *) from ic.accounts') ora


Получаю после 1-го запроса 2 записи вместо 101.
Второй запрос возвращает 79637


Ситуация такая что если в первом запросе убрать ограничение rownum between 0 AND 101 то количество принятых записей составит 79538 а должно быть 79637. Если проследить какие записи не попадают то это с 2-й по 100, 1-я запись есть.
Как бороться с этим багом нигде не могу найти.
Если работать с этим же источником ODBC DSN с другой программы все работает отлично.
Пробовал настроить линкед на 64-bit серверах получил результат аналогичный.
12 сен 14, 16:06    [16569291]     Ответить | Цитировать Сообщить модератору
 Re: Ms SQL -Linked server -ODBC -Oracle проблема выборки даных  [new]
Glory
Member

Откуда:
Сообщений: 104751
Roman35
Ситуация такая что если в первом запросе убрать ограничение rownum between 0 AND 101 то количество принятых записей составит 79538 а должно быть 79637. Если проследить какие записи не попадают то это с 2-й по 100, 1-я запись есть.
Как бороться с этим багом нигде не могу найти.

А что за текст запроса попадает на сторону Оракла ?
12 сен 14, 16:11    [16569319]     Ответить | Цитировать Сообщить модератору
 Re: Ms SQL -Linked server -ODBC -Oracle проблема выборки даных  [new]
o-o
Guest
смените для эксперимента юзера, под к-ым выполняется.
может у них там какое row level security настроено, ограничивающее видимость для вашего IC.
хотя чего тогда в COUNT все считает? ну, мало-ли.

у меня все отлично выбирается в аналогичном запросе.
12 сен 14, 16:41    [16569444]     Ответить | Цитировать Сообщить модератору
 Re: Ms SQL -Linked server -ODBC -Oracle проблема выборки даных  [new]
Roman35
Member

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

Не могу подтвердить но свято верю что на сторону ORACLE попадает SELECT * from ic.accounts where rownum between 0 AND 101.
Если этот запрос запустить с Oracle developer получаю как и положено 101 запись.
12 сен 14, 17:39    [16569711]     Ответить | Цитировать Сообщить модератору
 Re: Ms SQL -Linked server -ODBC -Oracle проблема выборки даных  [new]
Roman35
Member

Откуда:
Сообщений: 61
o-o,

Никакого row level security там нету, если запустить этот же запрос через это же ODBC соединение но не линк сервер и под этим же юзером все работает как надо.
12 сен 14, 17:41    [16569721]     Ответить | Цитировать Сообщить модератору
 Re: Ms SQL -Linked server -ODBC -Oracle проблема выборки даных  [new]
o-o
Guest
Roman35,

попробуйте повыбирать по одной записи с rownum = 1, 2, 3,....
интересно, что будет
12 сен 14, 17:49    [16569757]     Ответить | Цитировать Сообщить модератору
 Re: Ms SQL -Linked server -ODBC -Oracle проблема выборки даных  [new]
andy st
Member

Откуда:
Сообщений: 899
o-o,
у оракла rownum идёт при выборке, поэтому номера можно задавть только с 1 и только < ..

Roman35,
а с чего вдруг обращения к разным серверам должны выдавать один и тот же набор данных?
15 сен 14, 09:31    [16574889]     Ответить | Цитировать Сообщить модератору
 Re: Ms SQL -Linked server -ODBC -Oracle проблема выборки даных  [new]
Roman35
Member

Откуда:
Сообщений: 61
andy st,

На самом деле идет обращение к одному и тому же серверу,одной и той же базе. В коде неточность. Записи с 2-й по 100 не выводятся как ни старайся. Аналогичную проблему я встречал на форумах,в том числе и на этом,но только понятного решения так никто и не предоставил.
15 сен 14, 11:04    [16575262]     Ответить | Цитировать Сообщить модератору
 Re: Ms SQL -Linked server -ODBC -Oracle проблема выборки даных  [new]
andy st
Member

Откуда:
Сообщений: 899
Roman35,
Еще вариант - проблемы с преобразованием типов данных оракула в мсскл, типа date в datetime.
При этом ошибок провайдер не возвращал, но обрывал передачу набора данных на проблемной строке с выводом информационного сообщения с низким errorlevel-ом, типа всё почти ок.
Попробуйте выбирать поля с однозначно совместимыми типами данных.
15 сен 14, 13:08    [16575992]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить