Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Data from Oracle to MS SQL Server / 15 сообщений из 15, страница 1 из 1
26.08.2005, 21:27
    #33237093
Parkhomets Andrey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data from Oracle to MS SQL Server
Есть следуящая ситуация :
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
27.08.2005, 14:37
    #33237354
ASa
ASa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data from Oracle to MS SQL Server
Вопрос.
А почему бы не воспользоваться DTS'ом?
Он скорее всего побыстрее будет.
Или у тебя может меняться количество справочников?
Но вопрос этот скорее в форум MS SQL Server...
...
Рейтинг: 0 / 0
27.08.2005, 15:45
    #33237381
Parkhomets Andrey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data from Oracle to MS SQL Server
ASaВопрос.
А почему бы не воспользоваться DTS'ом?
Он скорее всего побыстрее будет.
Или у тебя может меняться количество справочников?
Но вопрос этот скорее в форум MS SQL Server...

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

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

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

Насчет DTS - в параметрах можно указывать количество строк, после которых выполнять коммит.
...
Рейтинг: 0 / 0
29.08.2005, 10:16
    #33238117
Maxim Tereschenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data from Oracle to MS SQL Server
А почему бы не зделать какую-то "умную" снихронизацию? Хранить в ОЛТП системе даты изменения строк, и вытягивать только измененные данные? Или это не возможно?
...
Рейтинг: 0 / 0
29.08.2005, 10:50
    #33238221
Parkhomets Andrey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data from Oracle to MS SQL Server
Maxim TereschenkoА почему бы не зделать какую-то "умную" снихронизацию? Хранить в ОЛТП системе даты изменения строк, и вытягивать только измененные данные? Или это не возможно?
Можно и так сделать, но сейчас тригера отлавливают изменения и собирают ID и имена таблиц. Но такие методики не всегда срабатывают, или плохо отработаны.
Ведь нужно знать всего лишь одно : разницу в данных между DWH и Олтп на любой момент времени ( для меня это обычно каждые 24 часа ) - а это 1. новые данные, 2. Изменившиеся данные, 3. Удалённые данные. - а потом выполянть репроцесс измерений и кубов
В Оракле это делается простым вычитанием с помощью MINUS между двумя селектами.
...
Рейтинг: 0 / 0
29.08.2005, 12:20
    #33238558
Yuri Abele
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data from Oracle to MS SQL Server
Parkhomets AndreyВ Оракле это делается простым вычитанием с помощью MINUS между двумя селектами.
Разницу между двумя таблицами и в MSSQL (читай ANSI SQL) сделать можно - через OUTER JOIN
...
Рейтинг: 0 / 0
29.08.2005, 12:30
    #33238599
ASa
ASa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data from Oracle to MS SQL Server
Не надо путать логику получения данных и механизм.
Логика везде разная. Допустим у меня вообще не учитываются удаления. У меня бывает только новое или измененное.
А механизмы тебе привели:
BULK INSERT, bcp и DTS.
DTS на мой взгляд предоставляет больше возможностей.
...
Рейтинг: 0 / 0
29.08.2005, 12:37
    #33238631
Parkhomets Andrey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data from Oracle to MS SQL Server
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
29.08.2005, 13:57
    #33238925
Parkhomets Andrey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data from Oracle to MS SQL Server
Что-то я от темы уже отошёл, всем спасибо ! Если кто-то подскажет как открывать курсор для оупенквери - можем продолжать - оталкиваясь от моего первого поста.
...
Рейтинг: 0 / 0
29.08.2005, 14:10
    #33238949
Dmitry Biryukov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data from Oracle to MS SQL Server
а если сделать view на openquery, а курсор на view?
имхо, лучше спросить в бид=1.
...
Рейтинг: 0 / 0
29.08.2005, 14:18
    #33238974
Parkhomets Andrey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data from Oracle to MS SQL Server
Dmitry Biryukovа если сделать view на openquery, а курсор на view?
имхо, лучше спросить в бид=1.
Мне кажется не принципиально - будет это сделано на вьху или селект в коде.
Тут в другом, если вы заметили, то в первом посте - я говорил, что мне надо открыть курсор внудри другого открытого и при этом работать с параметрами курсора ( @@FETCH_STATUS, @@ERROR и конечно же @@ROWCOUNT) и притом для обоих курсоров. Тут просто нужен пример кода или пояснения к подходу дабы такое реализовать.
...
Рейтинг: 0 / 0
29.08.2005, 16:15
    #33239296
Dmitry Biryukov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data from Oracle to MS SQL Server
можно внутри цикла вызывать ХП, в которой будет цикл по другому курсору
...
Рейтинг: 0 / 0
29.08.2005, 16:38
    #33239357
Parkhomets Andrey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data from Oracle to MS SQL Server
Dmitry Biryukovможно внутри цикла вызывать ХП, в которой будет цикл по другому курсору

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


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