oracle обновление всех записей таблицы
oracle 9..
партицированная таблица содержит около 3 000 записей. доступ к таблице осуществляют одновременно примерно 100 пользователей. необходимо обновить одно поле для всех записей таблицы. поле обновляется исходя из его текущего значения (типа, update table20 set field5 = field5 * 2;). вопрос: как наиболее эффективно это сделать. в смысле, нужно ли явно блокировать таблицу и, если да, то в каком режиме, или, может что-то еще.
буду благодарен, если скинете ссылочку ("гугление" не очень помогло...), где описывается методика..
заранее благодарен.
Самый тупой - update...; commit; Недостаток: 1 - все чуть-чуть подождут ; 2 - сегмент отката должен выдержать. Update всё сама полочит (ораклу надо доверять)
Более безопасный - цикл перебирает записи, для каждой update+commit Недостаток: 1) есть ситуации когда не подходит 2) цикл надо написать :)
поле не участвует в партиции.
в любом случае таблицу придется обновлять, используя пакет, поэтому первое, что пришло в голову - это как раз в цикле делать (update + commit). только не для кажной записи, а для группы записей (есть возможность сгруппировать по дате).
то есть такой вариант подходит...