|
|
|
Объясните пожалуйста по DBMS_HS_PASSTHROUGH
|
|||
|---|---|---|---|
|
#18+
Добрый день! Есть сервер Oracle 8.1.7, в нем настроен HS на сервер Sybase (версию не знаю, на нем стоит DiaSoft 5NT). Требуется через этот HS получать данные с Sybase и сохранять их в таблицах. ДиаСофт устроен так, что некоторые данные, например остатки по счетам, можно получить из временных таюблиц, предварительно запустив нужную процедуру. Ну а раз процедуры, то используем пакет DBMS_HS_PASSTHROUGH. Есть простая процедура на Oracle, которая по дате и списку ID счетов должна выдавать нужные команды Sybase'у и потом забирать полученный результат, вставляя строки в таблицу Oracle. Так вот она кое-как, но работает, иногда правильно, и опытным путем было обнаружено, при каких именно условиях: 1) Таблицу, куда вставляются остатки, необходимо почему-то очищать ДО того, как открывается курсор DBMS_HS_PASSTHROUGH, причем, если ранее уже был использован курсор и закрыт - то только после commit. Иначе будет ORA-02047 cannot join the distributed transaction in progress. Описание ошибки какое-то мутное, при чем тут Оракл 6 и 7? ORA-02047 cannot join the distributed transaction in progress Cause: This can happen only when attempting to update an Oracle Version 6 and an Oracle7 database in the same transaction, because either A transaction is in progress against a remote database that does not support two-phase commit. Updates are pending and an attempt was made to update a different database that does not support two-phase commit. Action: Complete the current transaction before attempting the action that caused the error. Конечно так тоже можно было бы, но! из-за этого я не могу удалять записи из таблицы Oracle когда иду по циклу с функцией FETCH_ROW, потому что commit убивает курсор DBMS_HS_PASSTHROUGH. 2) Самое главное!!! - всё это работает только при пошаговой трассировке в PL\SQL Developer'е. Если просто запустить процедуру, то после вызова процедуры Sybase (которая считает остатки) в нужной мне его временной таблице ноль "моих" записей, соответственно результат - 0 строк. В общем так никуда не годится, я наверное не правильно понимаю как должен работать DBMS_HS_PASSTHROUGH. Надеюсь что понятно изложил. PS Документацию DBMS_HS_PASSTHROUGH читал (вдоль и поперек), там только "как должно работать", ни одной конкретной реализации.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2006, 12:38 |
|
||
|
Объясните пожалуйста по DBMS_HS_PASSTHROUGH
|
|||
|---|---|---|---|
|
#18+
Покажите файл параметров связи с Sybase *.ora. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2006, 16:57 |
|
||
|
Объясните пожалуйста по DBMS_HS_PASSTHROUGH
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2006, 17:21 |
|
||
|
Объясните пожалуйста по DBMS_HS_PASSTHROUGH
|
|||
|---|---|---|---|
|
#18+
initDIADBC.ora: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. металинк требует "support identifier", а у меня его нет есть еще подозрение, что для каждого вызова OPEN_CURSOR в Sybase'е создается новый SPID, со всеми вытекающими последствиями... сейчас буду проверять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2006, 09:57 |
|
||
|
Объясните пожалуйста по DBMS_HS_PASSTHROUGH
|
|||
|---|---|---|---|
|
#18+
Для возможности участия Sybase в распределенных транзакциях надо сделать в базе Sybase схему RECOVER и в этой схеме таблицу HS_TRANSACTION_LOG, скрипт находится там же, где initDIADBC.ora. Вы работаете, как я понимаю, в транзакционной модели COMMIT_CONFIRM, которая устанавливается по умолчанию и рекомендуется Oracle, можно еще попробовать TWO_PHASE_COMMIT (нам понадобилось для одной задачи). Трэйс более подробный в режиме HS_FDS_TRACE_LEVEL=DEBUG Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2006, 12:51 |
|
||
|
Объясните пожалуйста по DBMS_HS_PASSTHROUGH
|
|||
|---|---|---|---|
|
#18+
Решил обойтись без распределенных транзакций, все ж проще чем просить IT-отдел что-то там в базе ДиаСофта создавать. С пошаговой трассировкой не понял, нашел в одном месте незакрытый курсор - все стало ок. Кстати вот еще вопрос, реально ли через DBMS_HS_PASSTHROUGH выполнить такое: Код: plaintext 1. 2. 3. 4. по идее нет? а вдруг? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2006, 15:08 |
|
||
|
Объясните пожалуйста по DBMS_HS_PASSTHROUGH
|
|||
|---|---|---|---|
|
#18+
наверное это должно выглядеть так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ? однако не работает, говорит Value has not been specified for parameter 2, и вот как такое исправлять, разве вот это не есть "Value has been specified"??? - DBMS_HS_PASSTHROUGH.BIND_VARIABLE@GBN(c, 2, p_rate_date, '@Date') ??? ищу в интернете про этот DBMS_HS_PASSTHROUGH информацию, такое чувство что его разработали, написали документацию и с тех пор никто не разу не пользовался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2006, 16:00 |
|
||
|
Объясните пожалуйста по DBMS_HS_PASSTHROUGH
|
|||
|---|---|---|---|
|
#18+
Могу только про MSSQL сказать, через DBMS_HS_PASSTHROUGH можно вызвать процедуру с input параметрами: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2006, 15:43 |
|
||
|
Объясните пожалуйста по DBMS_HS_PASSTHROUGH
|
|||
|---|---|---|---|
|
#18+
Не поделитесь, как решили проблему с чтением out параметра у процедуры? Мне надо вызвать удаленную процедуру из SQL, если обернуть вызов PROC@MSSQL(p1,p2) в функцию p1 - in параметр, p2 - out параметр, а потом вызвать функцию из SQL, то вызов падает ругаясь на сторонни эффекты в удаленной процедуре PROC@MSSQL. Если PROC@MSSQL вызывать с помощью пакета dbms_hs_passthrough, то падает, когда читаю out параметр у процедуры. Даже блок обработки исключений не ловит ошибку, отваливается соединения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2018, 06:53 |
|
||
|
Объясните пожалуйста по DBMS_HS_PASSTHROUGH
|
|||
|---|---|---|---|
|
#18+
gamerww, Сделай пример и покажи на нём возникающие ошибки в sqlplus. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2018, 09:41 |
|
||
|
Объясните пожалуйста по DBMS_HS_PASSTHROUGH
|
|||
|---|---|---|---|
|
#18+
gamerww, Поскольку вы не поделились, на чем вы поднимаете gateway, то предположим, вы используете dg4odbc, который, согласно документации, не поддерживает вызов хранимых процедур из MSSQL. Попробуйте использовать dg4msql, который специально создан для этого... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2018, 11:52 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39740680&tid=1883094]: |
0ms |
get settings: |
11ms |
get forum list: |
23ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 225ms |
| total: | 391ms |

| 0 / 0 |
