powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Data from Oracle to MS SQL Server
15 сообщений из 15, страница 1 из 1
Data from Oracle to MS SQL Server
    #33237093
Parkhomets Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть следуящая ситуация :
1.OLTP на Oracle и Warehouse на SQL Server-e ( почему так, не пропускаю эту историю).
2. Есть процедура, которая выполняет вытягивание данных из OLTP в хранилище. Данные перетаскиваются зеркально - формируя тем самым ODS ( оперативное хранилище данных), с которого потом делается OLAP.

Вопрос к самой процедуре : она примерно выглядит так

Курсор лезет в "таблицу-справочник", в которой хранятся таблицы для синхронизации и потом выполянет для каждой такой таблицы
insert "Имя_таблицы_из_справочника" ("перечень полей") -- таблица DWH
select "перечень полей"
from OPENQUERY(ORA, select "перечень полей" from OLTP."Имя_таблицы_из_справочника" --таб. OLTP )

и таким образом выполянется "вытягивание" справочников и таблиц с фактами.
Причём некоторые таблицы содержат от 10 строк записей до нескольких млн.
Итого получается ~ примерно 60 млн - строк тянет без промежуточных комитов.

Это всё счастье выполняется достаточно долго ( очень).
Захотелось мне тут сделать эту синхронизацию из OLTP в хранилище более быстрой. Идея состоит в следующем :
после того как первый курсор открывается и лезет с справочник - не выполнять "затяжной insert ", а открыть второй курсор, в котором производить подсчёт строк , который он вытянул ( в рамках каждой таблицы из справочника ) и после определённого числа строк ( например 1 000 или 10 000) выполянть коммит. Т.е. делать insert после получения 1 000 - 10 000 строк ( определяется эксперементально)
Думается мне, что это сильно ускорит загрузку. Обе базы включены в режиме ведения лога.

Если Я не прав опровергните меня, пожалуста .

Если я прав- помогите раздуплить MSSQL - можно ли в(для) OPENQUERY открыть курсор ? Теболее внутри другого ? И как бы это примерно выглядело ? Если можно ткните меня носом в конкретный пример.

--
зы - PL\SQL я знаю...
...
Рейтинг: 0 / 0
Data from Oracle to MS SQL Server
    #33237354
ASa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос.
А почему бы не воспользоваться DTS'ом?
Он скорее всего побыстрее будет.
Или у тебя может меняться количество справочников?
Но вопрос этот скорее в форум MS SQL Server...
...
Рейтинг: 0 / 0
Data from Oracle to MS SQL Server
    #33237381
Parkhomets Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASaВопрос.
А почему бы не воспользоваться DTS'ом?
Он скорее всего побыстрее будет.
Или у тебя может меняться количество справочников?
Но вопрос этот скорее в форум MS SQL Server...

А что именно я могу получить от DTS ? Умную синхронизацию ? которая понимает поиск новых данных, старых данных и изменённых данных ? Я просто не сильно в DTS разбираюсь. Или как к моему случаю DTS приминимо ?

На счёт справочников - может и менятся, это наврено не суть - просто написана одна "универсальная" процедура для синхронизации, дабы не повторять одно и тоже по всем объектам(таблицам).

На счёт другого форума - может быть, но это касается warehouse.
...
Рейтинг: 0 / 0
Data from Oracle to MS SQL Server
    #33237574
AAron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лучше не использовать конструкцию "insert ... select", особенно при вытягивании таблицы фактов. Эта операция логируемая, что уменьшает скорость. Самая быстрая вставка на SQL Server - булк-операция "select ... into .. from". Затем идет BULK INSERT, следом bcp и DTS.

Насчет DTS - в параметрах можно указывать количество строк, после которых выполнять коммит.
...
Рейтинг: 0 / 0
Data from Oracle to MS SQL Server
    #33238117
Maxim Tereschenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А почему бы не зделать какую-то "умную" снихронизацию? Хранить в ОЛТП системе даты изменения строк, и вытягивать только измененные данные? Или это не возможно?
...
Рейтинг: 0 / 0
Data from Oracle to MS SQL Server
    #33238221
Parkhomets Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim TereschenkoА почему бы не зделать какую-то "умную" снихронизацию? Хранить в ОЛТП системе даты изменения строк, и вытягивать только измененные данные? Или это не возможно?
Можно и так сделать, но сейчас тригера отлавливают изменения и собирают ID и имена таблиц. Но такие методики не всегда срабатывают, или плохо отработаны.
Ведь нужно знать всего лишь одно : разницу в данных между DWH и Олтп на любой момент времени ( для меня это обычно каждые 24 часа ) - а это 1. новые данные, 2. Изменившиеся данные, 3. Удалённые данные. - а потом выполянть репроцесс измерений и кубов
В Оракле это делается простым вычитанием с помощью MINUS между двумя селектами.
...
Рейтинг: 0 / 0
Data from Oracle to MS SQL Server
    #33238558
Фотография Yuri Abele
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Parkhomets AndreyВ Оракле это делается простым вычитанием с помощью MINUS между двумя селектами.
Разницу между двумя таблицами и в MSSQL (читай ANSI SQL) сделать можно - через OUTER JOIN
...
Рейтинг: 0 / 0
Data from Oracle to MS SQL Server
    #33238599
ASa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо путать логику получения данных и механизм.
Логика везде разная. Допустим у меня вообще не учитываются удаления. У меня бывает только новое или измененное.
А механизмы тебе привели:
BULK INSERT, bcp и DTS.
DTS на мой взгляд предоставляет больше возможностей.
...
Рейтинг: 0 / 0
Data from Oracle to MS SQL Server
    #33238631
Parkhomets Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuri Abele Parkhomets AndreyВ Оракле это делается простым вычитанием с помощью MINUS между двумя селектами.
Разницу между двумя таблицами и в MSSQL (читай ANSI SQL) сделать можно - через OUTER JOIN

читаем АНСИ......
прочитали АНСИ....
проверяем......
------- explain plan говорит, что этот медлеене (сканирование индекса три раза)---------------
select ch.ch_id, ch.ch_parid, ch.ch_name

from dbo.v_CHANNELS ch left outer join

TBL_DIMENSION dch on ch.ch_id=dch.ch_id

where dch.ch_id is null

----------------- чем это : -() (сканирование индекса два) раза---------------------
select ch.ch_id, ch.ch_parid, ch.ch_name

from v_CHANNELS ch

where ch.ch_id <> ( select dch.ch_id from TBL_DIMENSION dch )

--- Хотя оба делают одно и тоже, ищут разницу мв стрках между таблицами.

Анси - бреше !
...
Рейтинг: 0 / 0
Data from Oracle to MS SQL Server
    #33238925
Parkhomets Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то я от темы уже отошёл, всем спасибо ! Если кто-то подскажет как открывать курсор для оупенквери - можем продолжать - оталкиваясь от моего первого поста.
...
Рейтинг: 0 / 0
Data from Oracle to MS SQL Server
    #33238949
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если сделать view на openquery, а курсор на view?
имхо, лучше спросить в бид=1.
...
Рейтинг: 0 / 0
Data from Oracle to MS SQL Server
    #33238974
Parkhomets Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Biryukovа если сделать view на openquery, а курсор на view?
имхо, лучше спросить в бид=1.
Мне кажется не принципиально - будет это сделано на вьху или селект в коде.
Тут в другом, если вы заметили, то в первом посте - я говорил, что мне надо открыть курсор внудри другого открытого и при этом работать с параметрами курсора ( @@FETCH_STATUS, @@ERROR и конечно же @@ROWCOUNT) и притом для обоих курсоров. Тут просто нужен пример кода или пояснения к подходу дабы такое реализовать.
...
Рейтинг: 0 / 0
Data from Oracle to MS SQL Server
    #33239296
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно внутри цикла вызывать ХП, в которой будет цикл по другому курсору
...
Рейтинг: 0 / 0
Data from Oracle to MS SQL Server
    #33239357
Parkhomets Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Biryukovможно внутри цикла вызывать ХП, в которой будет цикл по другому курсору

а можно для слушателей нашей радиостанции расшифровать многозначительное слово ХП ? ( и бид=1. - тоже ).
спасибо.
...
Рейтинг: 0 / 0
Data from Oracle to MS SQL Server
    #33239392
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Data from Oracle to MS SQL Server
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]