powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / update очень большой таблицы - как?
25 сообщений из 41, страница 1 из 2
update очень большой таблицы - как?
    #40030377
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, привет.
Надо сделать update очень большой таблицы.
Update будет повторяться раз в несколько месяцев.
База не боевая - руки более/менее развязаны для всяких приседаний.
В таблице примерно 10^11 записей (100 миллиардов). На самом деле, таблиц больше сотни, но общее количество изменяемых записей указал верно.
Будет заменяться поле-строка, на строку такой же длины.
Надо затереть секретные данные в базе, скорее всего не просто пробелами, а, например, посчитать хэш от исходных значений - чтобы одни и те же строки сконвертировались в одинаковый мусор. Это не обязательное требование - просто идея такая, чтобы хоть как-то сохранить селективность этих данных.
Rollback не нужен - видимо можно как-то сэкономить на rollback-сегменте и redo-логе. Как?
Подскажите, куда копать, что почитать?
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030383
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22,

Таблица секционирована? Или одна большая куча?
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030384
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,
Всего таблиц - больше 100. Самые большие из них, как ни странно - без секций.
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030387
Фотография кит северных морей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зависит от того, сколько строк нужно менять. если мало - обычный update без заморочек. если много/всю таблицу - копирование таблицы с изменением данных на лету, вида create table new_table (id, secret_value) as select id, ora_hash(secret_value) from old_table, удалением old_table и переименованием new_table в old_table.
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030388
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кит северных морей,
create table as select - очень не хочется делать. Хочется оставить экстенты таблицы в тех же местах, где они были.
Понятно, что уедут экстенты индексов по этим полям - но без этого уже никуда.
Зато индексы по другим полям - останутся на своих местах.
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030392
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22
Надо затереть секретные данные в базе,
можно не затирать, а подменять ?
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030408
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 ...
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030415
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadim Lejnin,
Да я сам пока не знаю, куда это потом пойдёт. Может и правда - наружу.
Спасибо за идею переключить rollback-segment (rbs) на быстрый диск.
А совсем без RBS можно сделать update?
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030419
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22,

я б еще индексы с полем и триггера update отлючил

......
stax
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030422
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,
Это да, само собой..
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030427
Фотография кит северных морей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22
Хочется оставить экстенты таблицы в тех же местах, где они были.

зачем?

ну и если у вас HCC, то всё переедет даже с update.
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030428
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22,

В oracle7, oracle80 был параметр полностью отключающий undo/redo,
но сейчас попытался вспомнить, не вспомнил.

Однако, после его использования, базу положено было выбрасывать, то есть использовался он очень специфично, обычно для оценочнных тестов железа.

Можно значительно увеличить производительность, отключив
db_block_checking, db_block_checksum
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030432
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22
Vadim Lejnin,
Да я сам пока не знаю, куда это потом пойдёт. Может и правда - наружу.
Спасибо за идею переключить rollback-segment (rbs) на быстрый диск.
А совсем без RBS можно сделать update?


Если данные на экспорт, то фильтром менять значения в файле экспорта и БД не трогать.

Что касается update, не представляю, зачем обновлять ВСЕ записи каждый раз и все сразу?

Сегмент отката экономится короткими транзакциями. Обновил небольшую порцию данных, закоммитил.

Лог используется циклически и не растёт. А архивы лога во время процедуры можно не делать.
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030434
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 в отдельной схеме, для выдачи наружу этот вариант тоже может подойти (в зависимости от способа передачи).
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030435
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22

А совсем без RBS можно сделать update?


Нельзя. Update использует сегмент отката в своей работе для реконструкции образа БД на момент начала выполнения. Т.е. это не бэкап данных, а необходимые в работе данные.


В принципе, можно непосредственно в файлах БД поменять значения, если они не индексированы. Думается, есть библиотеки для разбора и изменения блоков БД.
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030439
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab
Update использует сегмент отката в своей работе для реконструкции образа БД на момент начала выполнения.

Андрюх, загоняешься. Read consistency в случае update работает несколько иначе.
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030446
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab
shurka22
Vadim Lejnin,
Да я сам пока не знаю, куда это потом пойдёт. Может и правда - наружу.
Спасибо за идею переключить rollback-segment (rbs) на быстрый диск.
А совсем без RBS можно сделать update?


Если данные на экспорт, то фильтром менять значения в файле экспорта и БД не трогать.

Что касается update, не представляю, зачем обновлять ВСЕ записи каждый раз и все сразу?

Сегмент отката экономится короткими транзакциями. Обновил небольшую порцию данных, закоммитил.

Лог используется циклически и не растёт. А архивы лога во время процедуры можно не делать.


shurka22кит северных морей,
create table as select - очень не хочется делать. Хочется оставить экстенты таблицы в тех же местах, где они были.
Понятно, что уедут экстенты индексов по этим полям - но без этого уже никуда.
Зато индексы по другим полям - останутся на своих местах.


Какой export?
Судя по всему, задача передать именно копию базы для тестирования, включая текущее распределение пространства
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030448
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот если юзать CTAS, то UNDO будет минимальный (да если еще NOARCHIVELOG и NOLOGGING)
Ну и на свой страх и риск дискретные транзакции (_discrete_transactions_enabled) -- наверное именно это Stax имел ввиду
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030452
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров
дискретные транзакции

Их давно отменили.
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030456
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров
Вот если юзать CTAS, то UNDO будет минимальный

Расходы на хранение временного сегмента о 100 ярдах в табличном пространстве данных не учитываем, с вариантом обновления по частям не сравниваем :)
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030460
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadim Lejnin

Судя по всему, задача передать именно копию базы для тестирования, включая текущее распределение пространства

Да, именно так. Спасибо.
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030464
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22
Vadim Lejnin

Судя по всему, задача передать именно копию базы для тестирования, включая текущее распределение пространства

Да, именно так. Спасибо.

Вы работаете с копией, восстановленной из backup и имеете задачу системно решить вопрос data masking для передачи базы наружу на регулярной основе?
Возможно, Вам следует рассмотреть какой-либо из вариантов логического standby.
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030465
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров
Вот если юзать CTAS, то UNDO будет минимальный (да если еще NOARCHIVELOG и NOLOGGING)


NOLOGGING это типа для CREATE TABLE AS SELECT.

К стати вполне себе вариант для создания копии таблиц в отдельной БД по ДБ линку.
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030467
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab
по ДБ линку.

100 ярдов * 100 таблиц по линку?
Я бы даже рассматривать не стал.
Даже sql*plus copy command симпатичнее, не говоря об ETL-решениях.
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030468
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
Вячеслав Любомудров
дискретные транзакции

Их давно отменили.
Точно?
Параметр остался
...
Рейтинг: 0 / 0
25 сообщений из 41, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / update очень большой таблицы - как?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]