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

Откуда:
Сообщений: 120
Коллеги, нужна помощь советом.

Стоит задача проинтегрировать 2 системы - нашу на MS SQL и партнёрскую на Oracle.
"Потренироваться на кошках" не получается - оракла в пределах досягаемости нет.
Решение нужно за сегодня-завтра принять.
У меня есть пара идей - прошу поругайте их, либо предложите свои.




Сценарий взаимодействия:

1. Oracle инициирует обмен и отдаёт нам пачку до 1000 сообщений. Каждое сообщение 200-400 байт.
2. Мы каким-то образом показываем ораклу что сообщения валидные и мы берём их в обработку.
3. Через какое-то время (асинхронно) мы эти сообщения обработаем и должны вернуть в Оракл результат для каждого сообщения.


Ограничения:
-вся интеграция должна быть на ХП или просто SQL-запросах через линкед-сервер (ограничение чисто организационное -ничего с ним сделать нельзя)
- нагрузка довольно большая - около 1 000 000 сообщений в день
- обрабатывать каждое сообщение отдельно, не хочется. 2 000 000 обменов в день, мне кажется, будет довольно напряжно по ресурсам. (Это не жёсткое ограничение - это обсуждаемо).



Собственно мои текущие идеи:

1 идея:
- Делаем в MS SQL ХП с 50 параметрами - каждый типа varchar(8000)
- Оракл вызывает эту ХП и кладёт нам в эти параметры "разрезанную" на 50 частей XML-строку с описанием сообщений (50x8000 = 400 Кб. Т.е. 1000 сообщений вроде влезает)
- MS SQL преобразует XML в таблицу, проверяет валидность сообщений и отвечает ораклу про готов ли он их обрабатывать путём кода возврата из ХП
- Для результатов обработки (когда уже MS SQL обращается в Oracle) используем зеркальную схему.


2 идея:
- В оракл делаем [Рабочую таблицу] с сообщениями к обработке
- Делаем в MS SQL ХП вообще без параметров
- Оракл вызывает эту ХП
- ХП селектит через линкед-сервер из [Рабочей таблицы] в Oracle, сообщения которые нужно обработать
- ХП анализирует сообщения и сообщает Oracle какие сообщения её устраивают, а какие нет при помощи резалтсета.
- Оракл удаляет из этой [Рабочая таблица] сообщения, которые MS SQL взял в обработку

- Для результатов обработки используем зеркальную схему.
14 ноя 11, 11:23    [11591663]     Ответить | Цитировать Сообщить модератору
 Re: Двусторонняя пакетная интеграция с Oracle через линкед-сервер  [new]
bebop
Member

Откуда:
Сообщений: 120
:(
15 ноя 11, 10:08    [11597253]     Ответить | Цитировать Сообщить модератору
 Re: Двусторонняя пакетная интеграция с Oracle через линкед-сервер  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
я бы выбрал второй вариант

у нас организовано также только с точнойстью наоборот:
мы выкладываем данные в рабочую таблицу в оракле и запускаем его же ХП
после обработки в таблице остаются записи, котолрые он не смог обработать с описанием ошибки в спец столбе
15 ноя 11, 10:50    [11597528]     Ответить | Цитировать Сообщить модератору
 Re: Двусторонняя пакетная интеграция с Oracle через линкед-сервер  [new]
bebop
Member

Откуда:
Сообщений: 120
Спасибо за ответ!

2 вопроса возникло:

1) Какая у вас нагрузка?
есть подозрение, что
HandKot
мы выкладываем данные в рабочую таблицу в оракле
будет довольно медленной операцией

2) Нет ли с вашей точки зрения проблем с технической осуществимостью 2го варианта
15 ноя 11, 11:52    [11598011]     Ответить | Цитировать Сообщить модератору
 Re: Двусторонняя пакетная интеграция с Oracle через линкед-сервер  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
у нас используется два пути заливки данных в оракл
1. sqlldr (sql loader) - аналог bcp в оракле - грузим данные 150 - 200 тысч каждые два часа.

+ лог загрузки файла размером 33М
210088 Строки успешно загружено.
0 Строки не загружены из-за ошибки в данных.
0 Строки не загружены из-за сбоев во всех фразах WHEN.
0 Строки не загружены из-за того, что все поля были пусты.


Для массива привязки отведено: 255936 байт(31 строк)
Байтов буфера чтения: 1048576

Всего пропущено логических записей: 0
Всего прочитано логических записей: 210088
Всего забраковано логических записей: 0
Всего удалено логических записей: 0

Прогон начался в Вт Ноя 15 12:14:13 2011
Прогон кончился в Вт Ноя 15 12:14:37 2011

Общее время: 00:00:23.40
Процессорное время: 00:00:03.41

2. простой insert - тут данных поменьше и разово, скорость конечне же меньше (не засекал, так как нет необходимости)

У Вас, насколько я понял, все наоборот - тянете данные из оракл
и тут скорость должна быть приличной и ограничиваться толкьо скоростью канала

ЗЫЖ использование инструкции
exec () at LinkedServer
вообще сказка
15 ноя 11, 13:46    [11599141]     Ответить | Цитировать Сообщить модератору
 Re: Двусторонняя пакетная интеграция с Oracle через линкед-сервер  [new]
bebop
Member

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

спасибо , почувствовал уверенность в выбранной схеме :)
16 ноя 11, 12:20    [11604650]     Ответить | Цитировать Сообщить модератору
 Re: Двусторонняя пакетная интеграция с Oracle через линкед-сервер  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
тут кстати такое еще пришло в голову
создаете две одинаковых таблице: одна на скуле, вторая на оракле

и работаете в следующем ключе
1. оракле выкладывает данные в таблицу
2. скуль забирает данные к себе
3. в процессе идет обновление с указанием в строке "такое сообщения её устраивают"
4. оракл забирает данные со скуля в свою таблицу

как-то так

ЗЫЖ если получится настроить репликацию этих двух таблиц, то тогда проблем вообще быть не должно. работа на каждой стороне будет идти только с локальной таблицей
16 ноя 11, 12:24    [11604691]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить