|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
Коллеги, привет. большая база. Есть набор колонок (несколько тысяч), которые надо почистить. Набор - может меняться со временем. update .. set .. = null - крайне медленно. Может работать неделями, даже через dbms_parallel_execute. Быстрее всего: удалить (методом set unused column), и сделать точно такую же колонку, как было. Как собрать sql-команду, которая делает точно такую-же колонку? Пока вижу 2 варианта: 1) самому склеить из: типа колонки, длины, nullable и default. Это наверняка покроет все наши колонки, но в оракловой спецификации есть ещё незнакомые мне слова, которые могут быть применены для создания колонки: SORT, ENCRYPT, итд. Скорее всего таких колонок в нашей базе нет - но хрен знает, что я встречу завтра. 2) позвать dbms_metadata.get_ddl, и выкусить оттуда место, где описывается колонка. 3) Есть ещё варианты? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2021, 14:21 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
shurka22 Есть набор колонок (несколько тысяч), которые надо почистить. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2021, 14:51 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
shurka22 3) Есть ещё варианты? не делать реверс-инжиниринг схемы. хранить описание структуры таблиц в каком-то формате, с которым удобно работать программно, из него генерировать DDL по требованию. тогда сюрпризов не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2021, 14:59 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
shurka22, dbms_redefinition ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2021, 15:21 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
Elic shurka22 Есть набор колонок (несколько тысяч), которые надо почистить. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2021, 06:12 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
кит северных морей shurka22 3) Есть ещё варианты? не делать реверс-инжиниринг схемы. хранить описание структуры таблиц в каком-то формате, с которым удобно работать программно, из него генерировать DDL по требованию. тогда сюрпризов не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2021, 06:16 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
oragraf shurka22, dbms_redefinition Как я понял, dbms_redefinition - это переделка таблицы "на лету", когда с таблицей идёт работа. Мне же не нужно переделывать таблицу (нужно данные почистить из неё), и в момент моей работы - я буду на базе один, и буду один - сколь угодно долго (неделя - в общем-то тоже возможно, но хочется сократить). Или dbms_redefinition как-то может помочь в моей задаче? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2021, 06:19 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
shurka22 Данные секретные. Базу отдаём наружу. Это, во-первых, гораздо меньше. А во-вторых, в DataPump легко маскировать данные при помощи REMAP_DATA. Ну и в-третьих, так же легко ограничивать объёмы данных при помощи QUERY или EXCLUDE=TABLE_DATA. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2021, 07:36 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
Elic shurka22 Данные секретные. Базу отдаём наружу. Это, во-первых, гораздо меньше. А во-вторых, в DataPump легко маскировать данные при помощи REMAP_DATA. Ну и в-третьих, так же легко ограничивать объёмы данных при помощи QUERY или EXCLUDE=TABLE_DATA. Скорее не "отдать", а "открыть". Админ остаётся наш. По ряду причин, нужно отдать максимально тот же самый объём и структуру хранения данных: сегменты, экстенты, итд. Чтобы база была максимально похожей на пром по производительности, но с пустыми (или зашифрованными) секретными данными. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2021, 07:55 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
shurka22 Cловарь оракла - это же и есть достаточно удобный формат хранения структуры таблиц. Весь вопрос - как из него сделать DDL для одной колонки. в том-то и дело, что нет. во-первых, вы сами постом выше написали, что не знаете, где что лежит (а какие-то специфические вещи в нем и просто не видны; была тут тема, кажется, пару месяцев назад, лень искать). во-вторых, вы не можете положить словарь в систему контроля версий, и использовать его как истину в последней инстанции, образ для тиражирования, отслеживать его изменения, и т.д. в-третьих, для любой обработки этой структуры вам нужны а) работающая база б) plsql, скажем прямо, не самый удобный для этого язык. список можно продолжать долго. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2021, 09:02 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
shurka22 Чтобы база была максимально похожей на пром по производительности, но с пустыми (или зашифрованными) секретными данными. можно посмотреть в сторону Data Redaction , но оно стоит отдельных денег, насколько я помню. ну или, банально, обернуть таблицы в представления, которые делают маскировку, и убрать прямой доступ к таблицам. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2021, 09:07 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
shurka22 По ряду причин, нужно отдать максимально тот же самый объём и структуру хранения данных: сегменты, экстенты, итд. Чтобы база была максимально похожей на пром по производительности, но с пустыми (или зашифрованными) секретными данными. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2021, 09:50 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
Elic shurka22 По ряду причин, нужно отдать максимально тот же самый объём и структуру хранения данных: сегменты, экстенты, итд. Чтобы база была максимально похожей на пром по производительности, но с пустыми (или зашифрованными) секретными данными. Выдать доступ всем разработчикам, чтобы они могли проверить свой код не только на то, 1) что код работает правильно (для этого есть полупустые тестовые базы), 2) но и на то, что на проме (с его объёмом и структурой хранения данных) код будет работать быстро. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2021, 10:30 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
shurka22 Хм... а шифровать колонки не думали ? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2021, 10:38 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
Владимир СА shurka22 Хм... а шифровать колонки не думали ? каким методом? Update - очень долго. Пара недель. Так как пром будет копироваться не один раз, а периодически, то хочется избежать этой потери каждый раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2021, 10:40 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
shurka22 2) но и на то, что на проме (с его объёмом и структурой хранения данных) код будет работать быстро. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2021, 13:21 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
Elic shurka22 2) но и на то, что на проме (с его объёмом и структурой хранения данных) код будет работать быстро. 1) Это отдельный процесс, которым на проме занимаются отдельные люди. 2) если мы оптимизируем это для тестовой базы (о ней я и вёл речь) при выгрузке через экспорт, дата-памп, или как-то иначе (а на проме останется "как есть", то есть без оптимизации) - то мы рискуем при тестах получить "всё ок, работает", а при накате на пром - положить базу (сильно замедлить её работу). наша цель: доказать, что при накате на пром очередной доработки, мы не положим пром (в том состоянии, в котором он сейчас есть). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2021, 13:35 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
shurka22 1) Это отдельный процесс, которым на проме занимаются отдельные люди. shurka22 2) если мы оптимизируем это для тестовой базы (о ней я и вёл речь) shurka22 при выгрузке через экспорт, дата-памп, или как-то иначе (а на проме останется "как есть", то есть без оптимизации) - то мы рискуем при тестах получить "всё ок, работает", а при накате на пром - положить базу (сильно замедлить её работу). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2021, 13:47 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
Elic Типичный быдло подход. "Не хотим ни черта делать. Вот вам наше Г. - сделайте из него конфетку". Пусть так. Делать-то что? :) Пром - большая штука, со своей историей (лет 30 поди уже). На неё постоянно катятся релизы, почти каждый день. Остановить накат релизов, сам понимаешь - невозможно, так как это потерять заказчиков, деньги, и в итоге сам проект. Вылизать пром до идеального состояния - крайне дорогая и длительная задача. Да и не совсем понятно, возможно ли это. А положить пром очередным релизом - можно уже сейчас. Так почему бы не проверить на игрушке, что этот релиз - не убьёт пром? Это понятно, возможно, и не дорого. Проверять - лучше всего на максимальной копии прома. Потому как ошибки могут быть не только в администрировании, но и в самом оракле. Чем дальше мы от копии прома - тем больше шанс пропустить ошибку на пром. Очистка или изменение значения полей - да, мы отдаляем игрушку от прома. Но без этого игрушку никто не выпустит в жизнь. Изменить структуру хранения таблиц (например экспортом) - это ещё больше отдалить игрушку от прома. Поэтому и не хотим её делать. Да и долго будет. Пересоздать колонку - куда быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2021, 14:09 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
shurka22, Ну очистите вы колонки, дальше что? Статистика изменится, запросы по пустышкам будут работать по-другому. Ваша задача называется - data masking. Есть покупные тулзовины(дорого), есть(где-то) самописные. Например, вместо реальных номеров карт можно генерировать фейковые, вместо реальных ИНН - фейковые. Тогда статистически данные будут подобны данным на проде, но при этом не будут персональными. ФИО тоже можно перемешивать. Ну и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2021, 14:20 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
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. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2021, 16:38 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
shurka22 Пересоздать колонку - куда быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2021, 16:43 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
SY Усе, все "секретные" данные в дампе заменены на NULL ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2021, 16:47 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
а вьюху нельзя? или она не датапампится? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2021, 17:15 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
Elic Звучит так, что ты не в курсе про REMAP_DATA. С точностью до наоборот. Звучит так что ты практически не пользовался REMAP_DATA. Как ты думаешь какая производительность будет у Код: plsql 1.
А если таких таблиц сотни? RBMS_RLS в разы быстрее (с DBMS_REDACT не пробовал). Ну и потом еще окажется shurka22 на 11G (или древнее) где REMAP_DATA ограничен на не более 10 полей на таблицу а у него будет 11 . SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2021, 22:49 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
SY Как ты думаешь какая производительность будет у Код: plsql 1.
SY RBMS_RLS в разы быстрее И, кстати, как там у RLS с маскированием, а не тупым обнулением данных? P.S. Это бессмысленный спор. Разработчик не поймёт местами замшелого админа. У каждого свои тараканы и болото для кулика. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2021, 23:20 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
Elic И, кстати, как там у RLS с маскированием, а не тупым обнулением данных? Все зависит от задачи. В моем случае - дать данные кроме sensitive третьему лицу. И RLS прекрасно с этим справляется. Для "максимально похожей на пром по производительности" конечно RLS не подходит. Тут надо пробовать DBMS_REDACT или REMAP_DATA хотя с "набор колонок (несколько тысяч)" это будет еще та портянка и далеко неясно какой предел размера parfile. Есть еще одна возможность export view as a table - пользовался несколько раз, работает нормально. Просто создаем view маскируя нужные поля и в expdp VIEWS_AS_TABLES но теряются физические свойства исходной таблицы, constraints, indexes, etc. так что для "максимально похожей на пром по производительности" не пойдет. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2021, 01:10 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
SY "набор колонок (несколько тысяч)". Я опять что-то пропустил? A.3 Logical Database Limits ItemType of LimitLimit ValueColumnsPer table 1000 columns maximum ColumnsPer index (or clustered index)32 columns maximumColumnsPer bitmapped index30 columns maximum ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2021, 12:47 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
andrey_anonymous SY "набор колонок (несколько тысяч)". Я опять что-то пропустил? A.3 Logical Database Limits ItemType of LimitLimit ValueColumnsPer table 1000 columns maximum ColumnsPer index (or clustered index)32 columns maximumColumnsPer bitmapped index30 columns maximum А кто сказал что весь "набор колонок (несколько тысяч)" это одна таблица? SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2021, 13:40 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
SY А кто сказал что весь "набор колонок (несколько тысяч)" это одна таблица? Ну "набор колонок" по сути и является частью определения таблицы, в единственном числе => таблица одна, как-то так... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2021, 13:43 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
andrey_anonymous Ну "набор колонок" по сути и является частью определения таблицы, в единственном числе => таблица одна, как-то так... Выдираешь из контекста - Есть набор колонок (несколько тысяч), которые надо почистить . SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2021, 13:47 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
oragraf shurka22, Ну очистите вы колонки, дальше что? Статистика изменится, запросы по пустышкам будут работать по-другому. Очищаться будут только поля в больших таблицах (более 100млн записей). По этим полям нет индексов, их не жалко. oragraf Ваша задача называется - data masking. Есть покупные тулзовины(дорого), есть(где-то) самописные. Например, вместо реальных номеров карт можно генерировать фейковые, вместо реальных ИНН - фейковые. Тогда статистически данные будут подобны данным на проде, но при этом не будут персональными. ФИО тоже можно перемешивать. Ну и т.д. update на некий мусор - нам бы уже сгодился. Но он выполняется непозволительно долго (неделю). ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2021, 11:17 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
SY Выдираешь из контекста - Есть набор колонок (несколько тысяч), которые надо почистить . Всё верно: секретные данные содержатся в нескольких тысячах колонок, которые содержатся в (примерно) тысячи таблицах. Всего таблиц и колонок - десятки-сотни тысяч. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2021, 11:22 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
Elic Ну да. Но после этого это будет уже совсем другая таблица. Не говоря уже о проблемах с FBI и виртуальными колонками. Хм. А почему таблица будет другой? В каком смысле? Логически? Вот мой вопрос в том и состоит - как сделать точно такую же колонку, как была? С той же логикой: индексами, констрейнтами итд. Или физически? То есть другие сегменты-экстенты итд? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2021, 11:39 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
shurka22 Хм. А почему таблица будет другой? В каком смысле? shurka22 Вот мой вопрос в том и состоит - как сделать точно такую же колонку, как была? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2021, 12:16 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
Elic Отбрось страхи и домыслы. DataPump Я правильно понимаю, это более долгая операция, нежели update? Нас уже update не устраивает своей скоростью. Хотя и полностью решает остальные проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 06:28 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
shurka22 Я правильно понимаю, это более долгая операция, нежели update? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 10:11 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
shurka22 update на некий мусор - нам бы уже сгодился. На NULL сгодится? Если да, то создаем RLS ф-цию и политики на нужные поля для маскировки от пользователя U1: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Теперь: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53.
Далее выполняем data pump export из-под U1 и вручаем заказчику - все "секретные" поля обнулены. Это куда быстрее чем expdp параметр REMAP_DATA который будет вызывать REMAP_DATA ф-ции N * M раз где N число "секретных" полей а M число строк в таблице. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 14:21 |
|
Как скриптом пересоздать колонки в таблицах?
|
|||
---|---|---|---|
#18+
SY Это куда быстрее чем expdp параметр REMAP_DATA который будет вызывать REMAP_DATA ф-ции N * M раз где N число "секретных" полей а M число строк в таблице Он не рассматривает DataPump как вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2021, 16:08 |
|
|
start [/forum/topic.php?all=1&fid=52&tid=1880356]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
141ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 275ms |
0 / 0 |