Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Data from Oracle to MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Есть следуящая ситуация : 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 я знаю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2005, 21:27 |
|
||
|
Data from Oracle to MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Вопрос. А почему бы не воспользоваться DTS'ом? Он скорее всего побыстрее будет. Или у тебя может меняться количество справочников? Но вопрос этот скорее в форум MS SQL Server... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2005, 14:37 |
|
||
|
Data from Oracle to MS SQL Server
|
|||
|---|---|---|---|
|
#18+
ASaВопрос. А почему бы не воспользоваться DTS'ом? Он скорее всего побыстрее будет. Или у тебя может меняться количество справочников? Но вопрос этот скорее в форум MS SQL Server... А что именно я могу получить от DTS ? Умную синхронизацию ? которая понимает поиск новых данных, старых данных и изменённых данных ? Я просто не сильно в DTS разбираюсь. Или как к моему случаю DTS приминимо ? На счёт справочников - может и менятся, это наврено не суть - просто написана одна "универсальная" процедура для синхронизации, дабы не повторять одно и тоже по всем объектам(таблицам). На счёт другого форума - может быть, но это касается warehouse. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2005, 15:45 |
|
||
|
Data from Oracle to MS SQL Server
|
|||
|---|---|---|---|
|
#18+
лучше не использовать конструкцию "insert ... select", особенно при вытягивании таблицы фактов. Эта операция логируемая, что уменьшает скорость. Самая быстрая вставка на SQL Server - булк-операция "select ... into .. from". Затем идет BULK INSERT, следом bcp и DTS. Насчет DTS - в параметрах можно указывать количество строк, после которых выполнять коммит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2005, 01:51 |
|
||
|
Data from Oracle to MS SQL Server
|
|||
|---|---|---|---|
|
#18+
А почему бы не зделать какую-то "умную" снихронизацию? Хранить в ОЛТП системе даты изменения строк, и вытягивать только измененные данные? Или это не возможно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2005, 10:16 |
|
||
|
Data from Oracle to MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Maxim TereschenkoА почему бы не зделать какую-то "умную" снихронизацию? Хранить в ОЛТП системе даты изменения строк, и вытягивать только измененные данные? Или это не возможно? Можно и так сделать, но сейчас тригера отлавливают изменения и собирают ID и имена таблиц. Но такие методики не всегда срабатывают, или плохо отработаны. Ведь нужно знать всего лишь одно : разницу в данных между DWH и Олтп на любой момент времени ( для меня это обычно каждые 24 часа ) - а это 1. новые данные, 2. Изменившиеся данные, 3. Удалённые данные. - а потом выполянть репроцесс измерений и кубов В Оракле это делается простым вычитанием с помощью MINUS между двумя селектами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2005, 10:50 |
|
||
|
Data from Oracle to MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Parkhomets AndreyВ Оракле это делается простым вычитанием с помощью MINUS между двумя селектами. Разницу между двумя таблицами и в MSSQL (читай ANSI SQL) сделать можно - через OUTER JOIN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2005, 12:20 |
|
||
|
Data from Oracle to MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Не надо путать логику получения данных и механизм. Логика везде разная. Допустим у меня вообще не учитываются удаления. У меня бывает только новое или измененное. А механизмы тебе привели: BULK INSERT, bcp и DTS. DTS на мой взгляд предоставляет больше возможностей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2005, 12:30 |
|
||
|
Data from Oracle to MS SQL Server
|
|||
|---|---|---|---|
|
#18+
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 ) --- Хотя оба делают одно и тоже, ищут разницу мв стрках между таблицами. Анси - бреше ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2005, 12:37 |
|
||
|
Data from Oracle to MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Что-то я от темы уже отошёл, всем спасибо ! Если кто-то подскажет как открывать курсор для оупенквери - можем продолжать - оталкиваясь от моего первого поста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2005, 13:57 |
|
||
|
Data from Oracle to MS SQL Server
|
|||
|---|---|---|---|
|
#18+
а если сделать view на openquery, а курсор на view? имхо, лучше спросить в бид=1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2005, 14:10 |
|
||
|
Data from Oracle to MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Dmitry Biryukovа если сделать view на openquery, а курсор на view? имхо, лучше спросить в бид=1. Мне кажется не принципиально - будет это сделано на вьху или селект в коде. Тут в другом, если вы заметили, то в первом посте - я говорил, что мне надо открыть курсор внудри другого открытого и при этом работать с параметрами курсора ( @@FETCH_STATUS, @@ERROR и конечно же @@ROWCOUNT) и притом для обоих курсоров. Тут просто нужен пример кода или пояснения к подходу дабы такое реализовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2005, 14:18 |
|
||
|
Data from Oracle to MS SQL Server
|
|||
|---|---|---|---|
|
#18+
можно внутри цикла вызывать ХП, в которой будет цикл по другому курсору ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2005, 16:15 |
|
||
|
Data from Oracle to MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Dmitry Biryukovможно внутри цикла вызывать ХП, в которой будет цикл по другому курсору а можно для слушателей нашей радиостанции расшифровать многозначительное слово ХП ? ( и бид=1. - тоже ). спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2005, 16:38 |
|
||
|
Data from Oracle to MS SQL Server
|
|||
|---|---|---|---|
|
#18+
stored procedure http://www.sql.ru/forum/actualtopics.aspx?bid=1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2005, 16:48 |
|
||
|
|

start [/forum/topic.php?fid=49&msg=33237093&tid=1871147]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 258ms |
| total: | 427ms |

| 0 / 0 |
