|
update очень большой таблицы - как?
|
|||
---|---|---|---|
#18+
Коллеги, привет. Надо сделать update очень большой таблицы. Update будет повторяться раз в несколько месяцев. База не боевая - руки более/менее развязаны для всяких приседаний. В таблице примерно 10^11 записей (100 миллиардов). На самом деле, таблиц больше сотни, но общее количество изменяемых записей указал верно. Будет заменяться поле-строка, на строку такой же длины. Надо затереть секретные данные в базе, скорее всего не просто пробелами, а, например, посчитать хэш от исходных значений - чтобы одни и те же строки сконвертировались в одинаковый мусор. Это не обязательное требование - просто идея такая, чтобы хоть как-то сохранить селективность этих данных. Rollback не нужен - видимо можно как-то сэкономить на rollback-сегменте и redo-логе. Как? Подскажите, куда копать, что почитать? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 10:23 |
|
update очень большой таблицы - как?
|
|||
---|---|---|---|
#18+
shurka22, Таблица секционирована? Или одна большая куча? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 10:48 |
|
update очень большой таблицы - как?
|
|||
---|---|---|---|
#18+
env, Всего таблиц - больше 100. Самые большие из них, как ни странно - без секций. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 10:58 |
|
update очень большой таблицы - как?
|
|||
---|---|---|---|
#18+
зависит от того, сколько строк нужно менять. если мало - обычный update без заморочек. если много/всю таблицу - копирование таблицы с изменением данных на лету, вида create table new_table (id, secret_value) as select id, ora_hash(secret_value) from old_table, удалением old_table и переименованием new_table в old_table. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 11:17 |
|
update очень большой таблицы - как?
|
|||
---|---|---|---|
#18+
кит северных морей, create table as select - очень не хочется делать. Хочется оставить экстенты таблицы в тех же местах, где они были. Понятно, что уедут экстенты индексов по этим полям - но без этого уже никуда. Зато индексы по другим полям - останутся на своих местах. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 11:20 |
|
update очень большой таблицы - как?
|
|||
---|---|---|---|
#18+
shurka22 Надо затереть секретные данные в базе, ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 11:33 |
|
update очень большой таблицы - как?
|
|||
---|---|---|---|
#18+
123йй shurka22 Надо затереть секретные данные в базе, Очень не бесплатно... Data Masking and Subsetting Pack 11,500$ per CPU Да и TC не все сказал, может база передается для тестирования в другую организацию Как вариант быстрого update для подготовки базы (решал давно такую задачу, правда еще на 8i) 1) базу в noarchivelog 2) маленький RAMDISK (сейчас выделить 5-10G RAM обычно не проблема), redo и спец rbs туда на момент update 3) pl/sql маленькими порциями, чтобы быстрый rbs не распухал, set transaction use rollback segment ... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 11:57 |
|
update очень большой таблицы - как?
|
|||
---|---|---|---|
#18+
Vadim Lejnin, Да я сам пока не знаю, куда это потом пойдёт. Может и правда - наружу. Спасибо за идею переключить rollback-segment (rbs) на быстрый диск. А совсем без RBS можно сделать update? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 12:08 |
|
update очень большой таблицы - как?
|
|||
---|---|---|---|
#18+
shurka22, я б еще индексы с полем и триггера update отлючил ...... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 12:20 |
|
update очень большой таблицы - как?
|
|||
---|---|---|---|
#18+
Stax, Это да, само собой.. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 12:36 |
|
update очень большой таблицы - как?
|
|||
---|---|---|---|
#18+
shurka22 Хочется оставить экстенты таблицы в тех же местах, где они были. зачем? ну и если у вас HCC, то всё переедет даже с update. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 12:48 |
|
update очень большой таблицы - как?
|
|||
---|---|---|---|
#18+
shurka22, В oracle7, oracle80 был параметр полностью отключающий undo/redo, но сейчас попытался вспомнить, не вспомнил. Однако, после его использования, базу положено было выбрасывать, то есть использовался он очень специфично, обычно для оценочнных тестов железа. Можно значительно увеличить производительность, отключив db_block_checking, db_block_checksum ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 12:51 |
|
update очень большой таблицы - как?
|
|||
---|---|---|---|
#18+
shurka22 Vadim Lejnin, Да я сам пока не знаю, куда это потом пойдёт. Может и правда - наружу. Спасибо за идею переключить rollback-segment (rbs) на быстрый диск. А совсем без RBS можно сделать update? Если данные на экспорт, то фильтром менять значения в файле экспорта и БД не трогать. Что касается update, не представляю, зачем обновлять ВСЕ записи каждый раз и все сразу? Сегмент отката экономится короткими транзакциями. Обновил небольшую порцию данных, закоммитил. Лог используется циклически и не растёт. А архивы лога во время процедуры можно не делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 12:58 |
|
update очень большой таблицы - как?
|
|||
---|---|---|---|
#18+
1. Rollback segment большой отдельный не потребуется, если разделить обновление на более скромные порции тысяч по 10. Сделать это можно разными способами. - можно делать update по диапазону rowid на базе карты экстентов - тут есть дополнительная опция в виде dbms_parallel_execute. - можно делать fetch over commit в сочетании с batch update при условии, что доступ будет FTS (при индексном сильно проще налететь на ora-1555). 2. От redo на update не уйти, но имеет смысл проверить наличие и убрать supplemental logging и mat.view logs. Еще можно перевести базу в noarchivelog на время обновления с последующей резервной копией после переключения обратно. 3. В любом случае рассмотрите вариант предоставления доступа через систему view в отдельной схеме, для выдачи наружу этот вариант тоже может подойти (в зависимости от способа передачи). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 13:01 |
|
update очень большой таблицы - как?
|
|||
---|---|---|---|
#18+
shurka22 А совсем без RBS можно сделать update? Нельзя. Update использует сегмент отката в своей работе для реконструкции образа БД на момент начала выполнения. Т.е. это не бэкап данных, а необходимые в работе данные. В принципе, можно непосредственно в файлах БД поменять значения, если они не индексированы. Думается, есть библиотеки для разбора и изменения блоков БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 13:06 |
|
update очень большой таблицы - как?
|
|||
---|---|---|---|
#18+
mcureenab Update использует сегмент отката в своей работе для реконструкции образа БД на момент начала выполнения. Андрюх, загоняешься. Read consistency в случае update работает несколько иначе. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 13:13 |
|
update очень большой таблицы - как?
|
|||
---|---|---|---|
#18+
mcureenab shurka22 Vadim Lejnin, Да я сам пока не знаю, куда это потом пойдёт. Может и правда - наружу. Спасибо за идею переключить rollback-segment (rbs) на быстрый диск. А совсем без RBS можно сделать update? Если данные на экспорт, то фильтром менять значения в файле экспорта и БД не трогать. Что касается update, не представляю, зачем обновлять ВСЕ записи каждый раз и все сразу? Сегмент отката экономится короткими транзакциями. Обновил небольшую порцию данных, закоммитил. Лог используется циклически и не растёт. А архивы лога во время процедуры можно не делать. shurka22кит северных морей, create table as select - очень не хочется делать. Хочется оставить экстенты таблицы в тех же местах, где они были. Понятно, что уедут экстенты индексов по этим полям - но без этого уже никуда. Зато индексы по другим полям - останутся на своих местах. Какой export? Судя по всему, задача передать именно копию базы для тестирования, включая текущее распределение пространства ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 13:27 |
|
update очень большой таблицы - как?
|
|||
---|---|---|---|
#18+
Вот если юзать CTAS, то UNDO будет минимальный (да если еще NOARCHIVELOG и NOLOGGING) Ну и на свой страх и риск дискретные транзакции (_discrete_transactions_enabled) -- наверное именно это Stax имел ввиду ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 13:31 |
|
update очень большой таблицы - как?
|
|||
---|---|---|---|
#18+
Вячеслав Любомудров дискретные транзакции Их давно отменили. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 13:38 |
|
update очень большой таблицы - как?
|
|||
---|---|---|---|
#18+
Вячеслав Любомудров Вот если юзать CTAS, то UNDO будет минимальный Расходы на хранение временного сегмента о 100 ярдах в табличном пространстве данных не учитываем, с вариантом обновления по частям не сравниваем :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 13:46 |
|
update очень большой таблицы - как?
|
|||
---|---|---|---|
#18+
Vadim Lejnin Судя по всему, задача передать именно копию базы для тестирования, включая текущее распределение пространства Да, именно так. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 13:48 |
|
update очень большой таблицы - как?
|
|||
---|---|---|---|
#18+
shurka22 Vadim Lejnin Судя по всему, задача передать именно копию базы для тестирования, включая текущее распределение пространства Да, именно так. Спасибо. Вы работаете с копией, восстановленной из backup и имеете задачу системно решить вопрос data masking для передачи базы наружу на регулярной основе? Возможно, Вам следует рассмотреть какой-либо из вариантов логического standby. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 13:51 |
|
update очень большой таблицы - как?
|
|||
---|---|---|---|
#18+
Вячеслав Любомудров Вот если юзать CTAS, то UNDO будет минимальный (да если еще NOARCHIVELOG и NOLOGGING) NOLOGGING это типа для CREATE TABLE AS SELECT. К стати вполне себе вариант для создания копии таблиц в отдельной БД по ДБ линку. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 13:51 |
|
update очень большой таблицы - как?
|
|||
---|---|---|---|
#18+
mcureenab по ДБ линку. 100 ярдов * 100 таблиц по линку? Я бы даже рассматривать не стал. Даже sql*plus copy command симпатичнее, не говоря об ETL-решениях. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2020, 13:54 |
|
|
start [/forum/topic.php?fid=52&fpage=29&tid=1880567]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 265ms |
total: | 417ms |
0 / 0 |