powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как скриптом пересоздать колонки в таблицах?
25 сообщений из 39, страница 1 из 2
Как скриптом пересоздать колонки в таблицах?
    #40052598
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, привет.
большая база. Есть набор колонок (несколько тысяч), которые надо почистить. Набор - может меняться со временем.
update .. set .. = null - крайне медленно. Может работать неделями, даже через dbms_parallel_execute.
Быстрее всего: удалить (методом set unused column), и сделать точно такую же колонку, как было.
Как собрать sql-команду, которая делает точно такую-же колонку?
Пока вижу 2 варианта:
1) самому склеить из: типа колонки, длины, nullable и default. Это наверняка покроет все наши колонки, но в оракловой спецификации есть ещё незнакомые мне слова, которые могут быть применены для создания колонки: SORT, ENCRYPT, итд. Скорее всего таких колонок в нашей базе нет - но хрен знает, что я встречу завтра.
2) позвать dbms_metadata.get_ddl, и выкусить оттуда место, где описывается колонка.
3) Есть ещё варианты?
...
Рейтинг: 0 / 0
Как скриптом пересоздать колонки в таблицах?
    #40052613
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22
Есть набор колонок (несколько тысяч), которые надо почистить.
Быдло-дезайн?
...
Рейтинг: 0 / 0
Как скриптом пересоздать колонки в таблицах?
    #40052616
Фотография кит северных морей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22
3) Есть ещё варианты?

не делать реверс-инжиниринг схемы. хранить описание структуры таблиц в каком-то формате, с которым удобно работать программно, из него генерировать DDL по требованию. тогда сюрпризов не будет.
...
Рейтинг: 0 / 0
Как скриптом пересоздать колонки в таблицах?
    #40052630
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22,

dbms_redefinition
...
Рейтинг: 0 / 0
Как скриптом пересоздать колонки в таблицах?
    #40052771
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic
shurka22
Есть набор колонок (несколько тысяч), которые надо почистить.
Быдло-дезайн?
Я, наверное, неверно выразился. Нужно удалить не сами колонки, а данные из них. Данные секретные. Базу отдаём наружу.
...
Рейтинг: 0 / 0
Как скриптом пересоздать колонки в таблицах?
    #40052772
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кит северных морей
shurka22
3) Есть ещё варианты?

не делать реверс-инжиниринг схемы. хранить описание структуры таблиц в каком-то формате, с которым удобно работать программно, из него генерировать DDL по требованию. тогда сюрпризов не будет.
Cловарь оракла - это же и есть достаточно удобный формат хранения структуры таблиц. Весь вопрос - как из него сделать DDL для одной колонки.
...
Рейтинг: 0 / 0
Как скриптом пересоздать колонки в таблицах?
    #40052773
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
oragraf
shurka22,
dbms_redefinition

Как я понял, dbms_redefinition - это переделка таблицы "на лету", когда с таблицей идёт работа.
Мне же не нужно переделывать таблицу (нужно данные почистить из неё), и в момент моей работы - я буду на базе один, и буду один - сколь угодно долго (неделя - в общем-то тоже возможно, но хочется сократить).
Или dbms_redefinition как-то может помочь в моей задаче?
...
Рейтинг: 0 / 0
Как скриптом пересоздать колонки в таблицах?
    #40052780
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22
Данные секретные. Базу отдаём наружу.
Отдавайте не БД, а дамп с неё.
Это, во-первых, гораздо меньше.
А во-вторых, в DataPump легко маскировать данные при помощи REMAP_DATA.
Ну и в-третьих, так же легко ограничивать объёмы данных при помощи QUERY или EXCLUDE=TABLE_DATA.
...
Рейтинг: 0 / 0
Как скриптом пересоздать колонки в таблицах?
    #40052782
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic
shurka22
Данные секретные. Базу отдаём наружу.
Отдавайте не БД, а дамп с неё.
Это, во-первых, гораздо меньше.
А во-вторых, в DataPump легко маскировать данные при помощи REMAP_DATA.
Ну и в-третьих, так же легко ограничивать объёмы данных при помощи QUERY или EXCLUDE=TABLE_DATA.

Скорее не "отдать", а "открыть". Админ остаётся наш.
По ряду причин, нужно отдать максимально тот же самый объём и структуру хранения данных: сегменты, экстенты, итд. Чтобы база была максимально похожей на пром по производительности, но с пустыми (или зашифрованными) секретными данными.
...
Рейтинг: 0 / 0
Как скриптом пересоздать колонки в таблицах?
    #40052786
Фотография кит северных морей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22
Cловарь оракла - это же и есть достаточно удобный формат хранения структуры таблиц. Весь вопрос - как из него сделать DDL для одной колонки.

в том-то и дело, что нет.

во-первых, вы сами постом выше написали, что не знаете, где что лежит (а какие-то специфические вещи в нем и просто не видны; была тут тема, кажется, пару месяцев назад, лень искать).

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

в-третьих, для любой обработки этой структуры вам нужны а) работающая база б) plsql, скажем прямо, не самый удобный для этого язык.

список можно продолжать долго.
...
Рейтинг: 0 / 0
Как скриптом пересоздать колонки в таблицах?
    #40052787
Фотография кит северных морей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22
Чтобы база была максимально похожей на пром по производительности, но с пустыми (или зашифрованными) секретными данными.

можно посмотреть в сторону Data Redaction , но оно стоит отдельных денег, насколько я помню.

ну или, банально, обернуть таблицы в представления, которые делают маскировку, и убрать прямой доступ к таблицам.
...
Рейтинг: 0 / 0
Как скриптом пересоздать колонки в таблицах?
    #40052800
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22
По ряду причин, нужно отдать максимально тот же самый объём и структуру хранения данных: сегменты, экстенты, итд. Чтобы база была максимально похожей на пром по производительности, но с пустыми (или зашифрованными) секретными данными.
Какова цель?
...
Рейтинг: 0 / 0
Как скриптом пересоздать колонки в таблицах?
    #40052810
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic
shurka22
По ряду причин, нужно отдать максимально тот же самый объём и структуру хранения данных: сегменты, экстенты, итд. Чтобы база была максимально похожей на пром по производительности, но с пустыми (или зашифрованными) секретными данными.
Какова цель?

Выдать доступ всем разработчикам, чтобы они могли проверить свой код не только на то,
1) что код работает правильно (для этого есть полупустые тестовые базы),
2) но и на то, что на проме (с его объёмом и структурой хранения данных) код будет работать быстро.
...
Рейтинг: 0 / 0
Как скриптом пересоздать колонки в таблицах?
    #40052814
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22
Хм... а шифровать колонки не думали ?
...
Рейтинг: 0 / 0
Как скриптом пересоздать колонки в таблицах?
    #40052817
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир СА
shurka22
Хм... а шифровать колонки не думали ?

каким методом?
Update - очень долго. Пара недель.
Так как пром будет копироваться не один раз, а периодически, то хочется избежать этой потери каждый раз.
...
Рейтинг: 0 / 0
Как скриптом пересоздать колонки в таблицах?
    #40052877
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22
2) но и на то, что на проме (с его объёмом и структурой хранения данных) код будет работать быстро.
Структуры вроде "10 байт информации занимают 10 гигабайт" нужно оптимизировать, а не заставлять разработчиков учитывать задранный HWM.
...
Рейтинг: 0 / 0
Как скриптом пересоздать колонки в таблицах?
    #40052882
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic
shurka22
2) но и на то, что на проме (с его объёмом и структурой хранения данных) код будет работать быстро.
Структуры вроде "10 байт информации занимают 10 гигабайт" нужно оптимизировать, а не заставлять разработчиков учитывать задранный HWM.

1) Это отдельный процесс, которым на проме занимаются отдельные люди.
2) если мы оптимизируем это для тестовой базы (о ней я и вёл речь) при выгрузке через экспорт, дата-памп, или как-то иначе (а на проме останется "как есть", то есть без оптимизации) - то мы рискуем при тестах получить "всё ок, работает", а при накате на пром - положить базу (сильно замедлить её работу).

наша цель: доказать, что при накате на пром очередной доработки, мы не положим пром (в том состоянии, в котором он сейчас есть).
...
Рейтинг: 0 / 0
Как скриптом пересоздать колонки в таблицах?
    #40052887
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22
1) Это отдельный процесс, которым на проме занимаются отдельные люди.
Квалификация "местных", которым на всё начхать, как правило, хуже разработчиков.
shurka22
2) если мы оптимизируем это для тестовой базы (о ней я и вёл речь)
А я про первоисточник - пром.
shurka22
при выгрузке через экспорт, дата-памп, или как-то иначе (а на проме останется "как есть", то есть без оптимизации) - то мы рискуем при тестах получить "всё ок, работает", а при накате на пром - положить базу (сильно замедлить её работу).
Типичный быдло подход. "Не хотим ни черта делать. Вот вам наше Г. - сделайте из него конфетку".
...
Рейтинг: 0 / 0
Как скриптом пересоздать колонки в таблицах?
    #40052895
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic
Типичный быдло подход. "Не хотим ни черта делать. Вот вам наше Г. - сделайте из него конфетку".

Пусть так. Делать-то что? :)
Пром - большая штука, со своей историей (лет 30 поди уже). На неё постоянно катятся релизы, почти каждый день. Остановить накат релизов, сам понимаешь - невозможно, так как это потерять заказчиков, деньги, и в итоге сам проект.
Вылизать пром до идеального состояния - крайне дорогая и длительная задача. Да и не совсем понятно, возможно ли это.
А положить пром очередным релизом - можно уже сейчас.
Так почему бы не проверить на игрушке, что этот релиз - не убьёт пром? Это понятно, возможно, и не дорого.
Проверять - лучше всего на максимальной копии прома. Потому как ошибки могут быть не только в администрировании, но и в самом оракле.
Чем дальше мы от копии прома - тем больше шанс пропустить ошибку на пром.
Очистка или изменение значения полей - да, мы отдаляем игрушку от прома. Но без этого игрушку никто не выпустит в жизнь.
Изменить структуру хранения таблиц (например экспортом) - это ещё больше отдалить игрушку от прома. Поэтому и не хотим её делать. Да и долго будет. Пересоздать колонку - куда быстрее.
...
Рейтинг: 0 / 0
Как скриптом пересоздать колонки в таблицах?
    #40052897
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22,

Ну очистите вы колонки, дальше что? Статистика изменится, запросы по пустышкам будут работать по-другому. Ваша задача называется - data masking. Есть покупные тулзовины(дорого), есть(где-то) самописные. Например, вместо реальных номеров карт можно генерировать фейковые, вместо реальных ИНН - фейковые. Тогда статистически данные будут подобны данным на проде, но при этом не будут персональными. ФИО тоже можно перемешивать. Ну и т.д.
...
Рейтинг: 0 / 0
Как скриптом пересоздать колонки в таблицах?
    #40052956
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22

По ряду причин, нужно отдать максимально тот же самый объём и структуру хранения данных: сегменты, экстенты, итд. Чтобы база была максимально похожей на пром по производительности, но с пустыми (или зашифрованными) секретными данными.


1. Создаем юзера например EXPORT_SECURE с привилегиями на DATA PUMP.
2. Создаем RLS policies скрывающие "секретные" поля от юзера EXPORT_SECURE.
3. Делаем DATA PUMP export из под юзера EXPORT_SECURE

Усе, все "секретные" данные в дампе заменены на NULL а при этом все юзеры кроме EXPORT_SECURE видят неизмененные данные.

Однако все это сработает если "секретные" поля NULLable иначе импорт не пройдет. Так-что лучше использовать DBMS_REDACT а не DBMS_RLS т.к. он дает возможность сохранить длину поля/разрядность что важно для "максимально похожей на пром по производительности".

SY.
...
Рейтинг: 0 / 0
Как скриптом пересоздать колонки в таблицах?
    #40052957
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22
Пересоздать колонку - куда быстрее.
Ну да. Но после этого это будет уже совсем другая таблица. Не говоря уже о проблемах с FBI и виртуальными колонками.
...
Рейтинг: 0 / 0
Как скриптом пересоздать колонки в таблицах?
    #40052961
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
Усе, все "секретные" данные в дампе заменены на NULL
Звучит так, что ты не в курсе про REMAP_DATA.
...
Рейтинг: 0 / 0
Как скриптом пересоздать колонки в таблицах?
    #40052967
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вьюху нельзя? или она не датапампится?
...
Рейтинг: 0 / 0
Как скриптом пересоздать колонки в таблицах?
    #40053043
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic
Звучит так, что ты не в курсе про REMAP_DATA.


С точностью до наоборот. Звучит так что ты практически не пользовался REMAP_DATA. Как ты думаешь какая производительность будет у

Код: plsql
1.
SELECT REMAP_STR_FUNC(COL1),REMAP_NUMBER_FUNC(COL2),REMAP_DATE_FUNC(COL3),... FROM TABLE_WITH_10_MILLION_ROWS;



А если таких таблиц сотни? RBMS_RLS в разы быстрее (с DBMS_REDACT не пробовал).
Ну и потом еще окажется shurka22 на 11G (или древнее) где REMAP_DATA ограничен на не более 10 полей на таблицу а у него будет 11 .

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


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