Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Чудеса провайдера 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 |
|
||
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
|---|---|---|---|
|
#18+
andreymx, так вроде же примеры есть в теме или я не понял что именно требуется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2020, 20:15 |
|
||
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
|---|---|---|---|
|
#18+
assmsk andreymx, так вроде же примеры есть в теме или я не понял что именно требуется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2020, 20:31 |
|
||
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
|---|---|---|---|
|
#18+
andreymx assmsk andreymx, так вроде же примеры есть в теме или я не понял что именно требуется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2020, 20:33 |
|
||
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
|---|---|---|---|
|
#18+
andreymx, rm.sm3_reg_log это таблица, в которой нет никаких вычисляемых полей в тч in_parms ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2020, 21:29 |
|
||
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
|---|---|---|---|
|
#18+
assmsk andreymx, rm.sm3_reg_log это таблица, в которой нет никаких вычисляемых полей в тч in_parms Уверен что это таблица а не materialized view? И если это mview, то можно ли посмотреть скрипт его создания? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2020, 22:45 |
|
||
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
|---|---|---|---|
|
#18+
Владислав Колосов assmsk, rownum - это что, top ()? Если да, то нужен порядок сортировки. Это не top(), это pseudocolumn: For each row returned by a query, the ROWNUM pseudocolumn returns a number indicating the order in which Oracle selects the row from a table or set of joined rows. The first row selected has a ROWNUM of 1, the second has 2, and so on. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2020, 22:48 |
|
||
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
|---|---|---|---|
|
#18+
flexgen, уточнил, это таблица в классическом понимании ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2020, 09:58 |
|
||
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
|---|---|---|---|
|
#18+
flexgen, в таком случае верно, это аналог TOP () без сортировки. А какой провайдер автор использует, оракловый (от производителя) соответствующий версии сервера Oracle? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2020, 12:40 |
|
||
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
|---|---|---|---|
|
#18+
Владислав Колосов flexgen, в таком случае верно, это аналог TOP () без сортировки. А какой провайдер автор использует, оракловый (от производителя) соответствующий версии сервера Oracle? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2020, 12:45 |
|
||
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
|---|---|---|---|
|
#18+
andreymx, Вы уверены, что это номера строк именно вложенного запроса, а не запроса, результат которого был сформирован по набору данных, созданном вложенным запросом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2020, 12:53 |
|
||
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
|---|---|---|---|
|
#18+
Владислав Колосов andreymx, Вы уверены, что это номера строк именно вложенного запроса, а не запроса, результат которого был сформирован по набору данных, созданном вложенным запросом? не понял тонкости вопроса вот пример Код: 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. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2020, 13:12 |
|
||
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
|---|---|---|---|
|
#18+
assmsk flexgen, уточнил, это таблица в классическом понимании Как данные обновляются в таблице? Кстати, озвучь версии SQL Server, Oracle Provider for OLEDB и Oracle DB. И Oracle client, если он установлен на SQL сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2020, 23:54 |
|
||
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
|---|---|---|---|
|
#18+
flexgen Кстати, озвучь версии SQL Server, Oracle Provider for OLEDB и Oracle DB. И Oracle client, если он установлен на SQL сервере. Я тут кое-что нашел на support.oracle.com - Oracle Provider for OLE DB Intermittantly Returning Incorrect Data for Parameterized Query (Doc ID 1242984.1) APPLIES TO: Oracle Provider for OLE DB - Version 11.1.0.7 and later Generic Windows After migration to 11.1.0.7 parametrized queries are intermittently returning incorrect results. SYMPTOMS A parameterized query returns a specific set of data for one parameter. After querying with several different parameters and then reissuing the query with the first parameter the results are different than the results the first time the query was issued. SOLUTION The bug is fixed in the 11.1.0.7 Patch 33. Patch number 9773817 for Windows 32-bit and patch number 9773825 for x64 Windows. The work around is to disable statement caching. In the connection string set the StmtCacheSize parameter to 0 to disable statement caching. Не знаю, этот ли это случай, версия уж больно старая, но очень похоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2020, 00:10 |
|
||
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
|---|---|---|---|
|
#18+
flexgen Я тут кое-что нашел на support.oracle.com - Oracle Provider for OLE DB Intermittantly Returning Incorrect Data for Parameterized Query (Doc ID 1242984.1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2020, 08:46 |
|
||
|
Чудеса провайдера Oracle Provider for OLE DB
|
|||
|---|---|---|---|
|
#18+
flexgen assmsk flexgen, уточнил, это таблица в классическом понимании Как данные обновляются в таблице? Кстати, озвучь версии SQL Server, Oracle Provider for OLEDB и Oracle DB. И Oracle client, если он установлен на SQL сервере. Microsoft SQL Server 2016 (SP2-CU11-GDR) (KB4535706) - 13.0.5622.0 (X64) Dec 15 2019 08:03:11 Copyright (c) Microsoft Corporation Enterprise Edition: Core-based Licensing (64-bit) on Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600: ) Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production PL/SQL Release 12.2.0.1.0 - Production CORE 12.2.0.1.0 Production TNS for HPUX: Version 12.2.0.1.0 - Production NLSRTL Version 12.2.0.1.0 - Production С драйвером оракла че то не понятно, одновременно стоит 2 в списке драйверов: 1) Oracle in OraClient11g_home1 11.02.00.01 2) Oracle in OraClient12Home1 12.02.00.01 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2020, 16:34 |
|
||
|
|

start [/forum/topic.php?all=1&fid=46&tid=1685313]: |
0ms |
get settings: |
11ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
12ms |
get forum data: |
4ms |
get page messages: |
83ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 410ms |

| 0 / 0 |
