powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / update очень большой таблицы - как?
41 сообщений из 41, показаны все 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
update очень большой таблицы - как?
    #40030470
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
mcureenab
по ДБ линку.

100 ярдов * 100 таблиц по линку?
Я бы даже рассматривать не стал.
Даже sql*plus copy command симпатичнее, не говоря об ETL-решениях.


Вот только "включая текущее распределение пространства" не выполняется.
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030474
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, dblink не вариант, все-таки слишком большие тормоза
А вот если там реально не десяток, а хотя бы сотня таблиц, то копирование-переименование-удаление вполне себе может не сильно напрячь по месту в общем зачете
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030475
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab
"включая текущее распределение пространства" не выполняется.

CTAS по dblink сохраняет?
Ну и я не видел такого требования от ТС.
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030477
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
mcureenab
"включая текущее распределение пространства" не выполняется.

CTAS по dblink сохраняет?
Ну и я не видел такого требования от ТС.


Я тоже не видел, пока не увидел.
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030482
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров
Не, dblink не вариант, все-таки слишком большие тормоза
А вот если там реально не десяток, а хотя бы сотня таблиц, то копирование-переименование-удаление вполне себе может не сильно напрячь по месту в общем зачете



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

Я как-то хотел заюзать в одном проекте (на 11g, если склероз не врет).
Оказалось, что оно тихо игнорится.
Вразумление снизошло толи из доки, толи с металинка - за давностью не помню, просто принял к сведению.
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030487
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab
Вячеслав Любомудров
Не, dblink не вариант, все-таки слишком большие тормоза
А вот если там реально не десяток, а хотя бы сотня таблиц, то копирование-переименование-удаление вполне себе может не сильно напрячь по месту в общем зачете



Ещё не забыть затереть от старых данных освободившиеся блоки.


автор...
Будет заменяться поле-строка, на строку такой же длины.
Надо затереть секретные данные в базе, скорее всего не просто пробелами, а, например, посчитать хэш от исходных значений - чтобы одни и те же строки сконвертировались в одинаковый мусор. Это не обязательное требование - просто идея такая, чтобы хоть как-то сохранить селективность этих данных.
...
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030490
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mcureenab
andrey_anonymous
пропущено...

CTAS по dblink сохраняет?
Ну и я не видел такого требования от ТС.


Я тоже не видел, пока не увидел.

Я сам пока не знаю ответа на этот вопрос.
Мы делаем копию с прома, и пытаемся давать на неё разную интересную нагрузку - замеряем, что получится, не сдохнем ли мы.
Мне видится так: все блоки и сегменты хотелось оставить так же, как оно было сразу, то есть на проме.
Но я уже не уверен, что сейчас это условие уже соблюдается.
Завтра буду выяснять, каким образом нам попадают данные с прома: с сохранением табличных пространств, или нет.
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030491
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22
Мне видится так: все блоки и сегменты хотелось оставить так же, как оно было сразу, то есть на проме.
Зачем?
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030495
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров,
Мы хотим регулярно делать тесты и понимать, как будет вести себя пром (с его экстентами и сегментами), если мы ему дадим новую нагрузку.
Проверять на проме - слишком дорого. Значит проверяем на копии прома.
Желательно, чтобы копия прома как можно меньше отличалась от прома. Если у нас на копии сегменты и экстенты будут иными - у меня есть подозрение, что мы получим не совсем верный тест.
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030499
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous

- можно делать update по диапазону rowid на базе карты экстентов - тут есть дополнительная опция в виде dbms_parallel_execute.

Пока ишраюсь с dbms_parallel_execute. Получается заметно быстрее, чем просто update --+ parallel
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030505
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22
Если у нас на копии сегменты и экстенты будут иными - у меня есть подозрение, что мы получим не совсем верный тест.
Разницу вижу только лишь в том, что на проде у вас куча удаленных строк и, соответственно, куча свободного места, которое при CTAS исчезнет, т.к. данные лягут более плотно
Это, пожалуй, единственное, что может повлиять

Ну дык, приведите таблицы на боевой в порядок, сделайте MOVE таблиц/секций, зачем вам эти дырки?
Тем более, что в современных версиях MOVE ONLINE прекрасно выполняется на лету

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

chained/migrated rows
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030537
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну дык от migrated причесывание боевых таблиц через MOVE спасет
А от chained -- если есть задумка заместить хешем, то там явно не про те размеры
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030641
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22

Мне видится так: все блоки и сегменты хотелось оставить так же, как оно было сразу, то есть на проме.


если секретные поля индексированы, то индексы всяко поменяются. и не факт, что СУБД подчистит освободившиеся блоки.
...
Рейтинг: 0 / 0
update очень большой таблицы - как?
    #40030668
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров
Ну дык от migrated причесывание боевых таблиц через MOVE спасет
А от chained -- если есть задумка заместить хешем, то там явно не про те размеры

Так ТС не желает же гонять move по боевой БД. Как минимум, это требует резерв по свободному месту, которого может не быть.
Что касается chained, то их легко можно получить и на не особо длинных записях. Всего-то надо 256+ колонок и +-все записи будут сhained, я такое встречал :)
...
Рейтинг: 0 / 0
41 сообщений из 41, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / update очень большой таблицы - как?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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