Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Загрузка объемных данных в рамках одной транзакции [D7, MSSQL]


Страницы:   1 2 3

MsGuns ©   (2006-07-14 16:18:00) 

Требуется сделать следующее:
1. Создать в БД таблицу, если ее нет, или очистить от записей, если есть
2. Создать ХП вставки в таблицу
3. С помощью этой ХП из текстового файла загрузить в таблицу данные (порядок - от сотни тысяч до миллионов)
4. ХП удалить из БД
5. Транзакцию подтвердить.
6. В случае ошибки создания (очистки) таблицы или создания ХП транзакцию откатить, оставив таблицу в прежнем состоянии

Сейчас получается все, кроме отката, поэтому даже в случае прерывания процесса, в БД остается и ХП, и новые данные в таблице.

Посоветуйте что-нибудь в этом направлении. В BOL, к сожалению, не описаны подобные ситуации или я их не нашел, хотя искал две недели.

Спасибо за подсказки и советы

ЗЫ. MS SQL Server 8 + ADO (OLE DB)


MsGuns   (2006-07-14 17:30:00) [41]

>Val ©   (14.07.06 17:21) [8]
>? ты писал, что у тебя все получилось, кроме... ты миллион запросов всунул в транзакцию?

Получается все записать и  явно закоммитить ВСЕ вставки на "быстром" сервере. На "медленном" после обрыва в таблице остаются успевшие добавиться записи. А мне навдо чтоб сервер сам откатывал (как в ИБ, например)


Desdechado   (2006-07-14 17:22:00) [42]

> Как миллион запросов INSERT "всунуть" в одну транзакцию ?
А что, у скуля проблемы с размером буфера отката?


Val   (2006-07-14 17:21:00) [43]

? ты писал, что у тебя все получилось, кроме... ты миллион запросов всунул в транзакцию?


MsGuns   (2006-07-14 17:18:00) [44]

>Val ©   (14.07.06 17:09) [6]
>3. в одной транзакции вся попытка закачки

Как миллион запросов INSERT "всунуть" в одну транзакцию ?


Val   (2006-07-14 17:09:00) [45]

предлагаю, все-таки, разделить dml и ddl:
1. попытка создать таблицу
2. попытка создать процедуру
3. в одной транзакции вся попытка закачки
4. если очень нужно - попытка удалить процедуру.


Johnmen   (2006-07-14 16:48:00) [46]


> MsGuns ©   (14.07.06 16:44) [4]
> Не выйдет. Проблема еще и в том, что сервер может быть "неустойчивый",
>  т.е. коннект с ним может обрваться в любой момент (медленная
> линия и старй коммутатор)


Как всё плохо...
М.б. тогда ХП не трогать вообще? Пусть живёт?
Или же пересоздавать её.


MsGuns   (2006-07-14 16:44:00) [47]

>Johnmen ©   (14.07.06 16:26) [2]
В случае прерывания процесса убивать ХП, независимо от её существования, и зачищать таблицу.

Не выйдет. Проблема еще и в том, что сервер может быть "неустойчивый", т.е. коннект с ним может обрваться в любой момент (медленная линия и старй коммутатор)

>Stanislav ©   (14.07.06 16:32) [3]
>А может ХП не создавать? а прямо запросом заливать данные?

Загрузка данных через ХП ускоряет процесс в десятки раз.


Stanislav   (2006-07-14 16:32:00) [48]

А может ХП не создавать? а прямо запросом заливать данные?


Johnmen   (2006-07-14 16:26:00) [49]

В случае прерывания процесса убивать ХП, независимо от её существования, и зачищать таблицу.


Desdechado   (2006-07-14 16:24:00) [50]

Не знаю как в скуле, а в оракле каждый оператор DDL выполняется в своей транзакции...


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо