|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
---|---|---|---|
#18+
Всем привет. Сегодня произошла очень интересная история, которой я не нахожу в принципе никакого объяснения. Хотел узнать какие могут быть соображения на эту тему и может кто то сталкивался с этим дивом дивным:) На сервере существует уже лет 10 процесс, который инкрементально по максимальному id загружает данные с ораклового сервера на сервер mssql. Загрузка очень простая и имеет следующий вид: Есть таблица Код: sql 1.
Есть аналогичная таблица в оракле Код: sql 1.
Загрузка работает в цикле загружая по 1000 строк, берется максимальный id из dst_table и загружает с оракла 1000 строчек где id больше. Код: sql 1. 2.
Сегодня перед глазами возникает следующая картина: Поля val стали приходить из других строк таблицы, например в оракле есть такие строчки id val 1 А 2 Б 3 В А запрос возвращает: id val 1 Ж 2 Б 3 З 1) Если написать запрос в oracle sql developer, то он возвращает правильные данные 2) Если в запросе вместо rownum <=1000 поменять на <=100, то запрос возвращает правильные данные 3) Если написать аналогичный запрос на другом сервере где есть такой же линк, то запрос возвращает правильные данные А на текущем сервере вот такой цирк абсурда:) Получается драйвер Oracle Provider for OLE DB на сервере сошел с ума и его нужно переустанавливать? ps - Я вменяем и трезв, коллеги сначала тоже упорно не верили пока им не показал это воочию))) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 20:09 |
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
---|---|---|---|
#18+
assmsk Поля val стали приходить из других строк таблицы, например в оракле есть такие строчки Чудеса какие то. А вы можете в оракле посмотреть, какой запрос туда приходит, и как он выполняется (в сиквеле эта штука называется профайлер) И сравнить запрос от девелопера и от линка Кстати, заодно убедитесь, что сервер прилинкован тот, который вам нужен :-) 99% за то, что ошиблись с сервером или схемой, которая у вас, кстати, в запросах не указана. В том числе со схемой можно ошибиться доп. параметрами коннекта. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 20:23 |
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
---|---|---|---|
#18+
alexeyvg, я писал покороче для примера, схемы там одинаковые. При выполнении двух одинаковых запросов в одном окне, в зависимости от значения поля rownum получается либо корректное заполнение полей, либо нет. Из интересного наблюдения когда rownum < 104, то данные возвращается корректно, при любом другом значении >= 104 некорректно ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 20:30 |
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
---|---|---|---|
#18+
Пруфы :) Заранее добавлю, это не может быть какое то другое поле c таким же evnum, тк в таблице нет дублей по полю evnum, там уникальный кластерный индекс ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 20:43 |
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
---|---|---|---|
#18+
assmsk, А что вернет Код: sql 1.
Не мешало бы проверить как заполняется поле evnum на источнике. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 21:40 |
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
---|---|---|---|
#18+
flexgen, вернет верный результат как во втором примере ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 22:07 |
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
---|---|---|---|
#18+
assmsk там уникальный кластерный индекс ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 23:23 |
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
---|---|---|---|
#18+
alexeyvg assmsk там уникальный кластерный индекс ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 23:24 |
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
---|---|---|---|
#18+
assmsk alexeyvg, я писал покороче для примера, схемы там одинаковые. И повторю совет, посмотрите профайлером (как он там в оракле называется) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 23:28 |
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
---|---|---|---|
#18+
Запросы выполняются в разное время, соответственно к далеко не полному множеству вариантов (наи-)возможных причин указанных alexeyvg можно добавить различие данных в таблице на момент запроса. evnum - это PK или они в исходнике не уникальны? (тем более что в первом наборе ограничение на 100 строк, а во втором на 200) тип данных в источнике на evnum точно (big-)int? Бывает кто-то шаманит по настройкам драйверов (и как они конвертируют типы) Можно почитать по Оракловской псевдо-функции rownum и гарантирует-ли она постоянность порядка строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 23:47 |
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
---|---|---|---|
#18+
assmsk flexgen, вернет верный результат как во втором примере А если в Код: sql 1.
добавить все условия запроса? У тебя там еще два поля. Тоже вернет одну строку? assmskуникальный кластерный индекс Это где? В базе Oracle? В Oracle нет такого понятия "кластерный индекс". Ближе всего к кластерному индексу может быть index-organized table (IOT). Есть еще CLUSTER и соответственно CLUSTER INDEX, но это совсем другое. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2020, 23:55 |
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
---|---|---|---|
#18+
flexgen assmskуникальный кластерный индекс Это где? В базе Oracle? В Oracle нет такого понятия "кластерный индекс". Ближе всего к кластерному индексу может быть index-organized table (IOT). Есть еще CLUSTER и соответственно CLUSTER INDEX, но это совсем другое.Наверное, автор сказал в терминах сиквела, что бы быть в контексте нашего раздела. Видимо, ПК имел в виду. Но вообще самое правильное - дать DDL таблицы rm.sm3_reg_log ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2020, 17:08 |
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
---|---|---|---|
#18+
assmsk, rownum - это что, top ()? Если да, то нужен порядок сортировки. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2020, 00:12 |
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
---|---|---|---|
#18+
assmsk, Ещё предположение, может, сиквельный OPENQUERY делает какое то "грязное" чтение? И в момент перемещения страниц или чего то подобного читает некий мусор? Повторю в третий раз - нужно смотреть, что происходит на стороне Оракла. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2020, 10:24 |
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
---|---|---|---|
#18+
Чудес не бывает, там или какое-то усечение, или дубли. Надо внимательно провести анализ данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2020, 12:42 |
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
---|---|---|---|
#18+
Ну в целом я подобные ответы и предполагал, собственно тоже наехал сначала на владельцев системы что у них данные меняются... а зря Но факты: 1) Поле evnum на источнике уникальное 2) В таблице ничего никогда не апдейтиться, туда только инкрементально записываются данные. 101% что поле IN_PARMS НЕ может поменяться 3) Есть 3 сервера msqlsql на которых настроен этот линк и оракл девелопер на локальной машине, через оракл девелопер и на двух серверах все работает хорошо и не возникает такой херни, а только на одном из серверов (тнс'ки везде одинаковые и драйвера тоже) Мне самому с трудом вериться, что так себя может вести драйвер на конкретном сервере, но судя по всему это так и есть. Видимо придется обращаться в поддержку mssql... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2020, 15:09 |
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
---|---|---|---|
#18+
assmsk, внешний вид запросов к ораклу очень даже располагает к тому, чтобы нарваться на такую вот неприятную штуку . С год назад получил некоторое количество неприятных ощущений на вываливании в дамп SQL сервера, как оказалось из-за любви к комментированию через -- Вроде как сносит процесс из-за бардака в куче, но если бардак маленький... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2020, 16:20 |
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
---|---|---|---|
#18+
assmsk Видимо придется обращаться в поддержку mssql... Если просто написать, как здесь "не работает", то результат будет такой же :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2020, 17:39 |
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
---|---|---|---|
#18+
assmsk, Код: plsql 1.
если я правильно понял, в Оракле очередная порция может содержать больше 1000 записей, а вы хотите затянуть из этой порции первую тысячу обычно приведенный запрос так в Оракле и работает, но есть ли исключения - лучше спросить на форуме Оракл Зы: а есть ли ситуации, когда записи в Оракле комитятся не в порядке ид? Хм: еще раз перечитал вопрос мне не встречались ситуации, когда данные между строками перепутаны хотя обмен между МССКЛ и Оракл с блобами у нас проходит регулярно ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2020, 17:43 |
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
---|---|---|---|
#18+
alexeyvg assmsk Видимо придется обращаться в поддержку mssql... Если просто написать, как здесь "не работает", то результат будет такой же :-) ответ - поменяйте версию клиента ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2020, 17:51 |
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
---|---|---|---|
#18+
assmsk в первом примере в строке *47 блоб похож на блоб со второго примера со строки *46 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2020, 18:16 |
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
---|---|---|---|
#18+
единственное реальное объяснение - sm3_req_log это представлениt с функцией, вытягивающей блоб всё остальное похоже на глюки драйвера ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2020, 18:37 |
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
---|---|---|---|
#18+
andreymx, Да, ровно так. Данные подтягиваются из других строк, хотя по некоторым записям все верно ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2020, 19:41 |
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
---|---|---|---|
#18+
assmsk andreymx, Да, ровно так. Данные подтягиваются из других строк, хотя по некоторым записям все верно у нас была аналогичная ситуация ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2020, 20:01 |
|
|
start [/forum/topic.php?fid=46&msg=40025056&tid=1685313]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
54ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 283ms |
total: | 438ms |
0 / 0 |