![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Загрузка объемных данных в рамках одной транзакции [D7, MSSQL]
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 выполняется в своей транзакции...