|
не работает, но и не даёт ошибку! alter table .. drop unused columns
|
|||
---|---|---|---|
#18+
Коллеги, привет. Имеется большая база (терабайты данных). Надо кое-какие колонки в ней затереть, желательно за небольшое время (Боевая БД уходит в тест). Была идея удалить (на самом деле безвозвратно спрятать) колонки методом: "alter table .. set unused column .." - такая конструкция работает мгновенно на любых объёмах. Колонка остаётся в DBA_TAB_COLS.HIDDEN_COLUMNS = 'YES', и декларируется, что нет возможности вернуть данные обратно. Но наши админы нашли способ, как хакнуть этот результат, и восстановить данные. Ну ок, говорим мы, давайте ещё сделаем "alter table .. drop unused columns" - хоть и долго, но данные теперь уже должны потереться безвозвратно. Но что странно: почему-то эта команда ничего не делает: отрабатывает мгновенно, ошибку (exception) не выкидывает, и запись о колонке остаётся в DBA_TAB_COLS. Быстрый гуглёж ничего не подсказал. Может быть не то гуглил, и благородное сообщество ткнёт меня в правильные ссылки? А то вдруг прям расскажете, что я делаю не так? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2021, 12:45 |
|
не работает, но и не даёт ошибку! alter table .. drop unused columns
|
|||
---|---|---|---|
#18+
Нашел предупреждение, что нужно быть аккуратным при выполнении такой операции ALTER TABLE … DROP UNUSED COLUMNS CHECKPOINT ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2021, 13:18 |
|
не работает, но и не даёт ошибку! alter table .. drop unused columns
|
|||
---|---|---|---|
#18+
Здесь тоже по ускорению операции советы дают https://www.club-oracle.com/threads/how-to-drop-a-column-fast.49583/ ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2021, 13:21 |
|
не работает, но и не даёт ошибку! alter table .. drop unused columns
|
|||
---|---|---|---|
#18+
shurka22, Можете сделать тест-кейс или продемонстрировать выводом в sqlplus? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2021, 15:09 |
|
не работает, но и не даёт ошибку! alter table .. drop unused columns
|
|||
---|---|---|---|
#18+
shurka22 ...Но наши админы нашли способ, как хакнуть этот результат, и восстановить данные. Ну ок, говорим мы, давайте ещё сделаем "alter table .. drop unused columns" - хоть и долго, но данные теперь уже должны потереться безвозвратно. Но что странно: почему-то эта команда ничего не делает: отрабатывает мгновенно, ошибку (exception) не выкидывает, и запись о колонке остаётся в DBA_TAB_COLS... Если я все правильно понял то ты пытаешься выполнить "alter table .. drop unused columns" после того как "админы нашли способ, как хакнуть этот результат". Внимание вопрос - а что сделали твои админы? Сдается мне что проблема началась после того как "хакнули". Я не прав? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2021, 15:14 |
|
не работает, но и не даёт ошибку! alter table .. drop unused columns
|
|||
---|---|---|---|
#18+
shurka22, таблица с компрессией? поищите drop unused + compressed. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2021, 08:40 |
|
не работает, но и не даёт ошибку! alter table .. drop unused columns
|
|||
---|---|---|---|
#18+
aamazur shurka22, таблица с компрессией? поищите drop unused + compressed. Спасибо, оно! select compression, compress_for from tabs where table_name = 'X'; -------- -------- ENABLED ADVANCED Как было (колонка не удалялась): alter table X set unused column CL; --отмечаю колонку "на удаление" select * from dba_tab_cols where table_name ='X' and hidden_column = 'YES' and column_name = 'CL'; -- проверяю, что колонка ещё осталась в таблице alter table X drop unused columns; -- выполняется мгновенно, несмотря на 100млн записей, что наводит на подозрения select * from dba_tab_cols where table_name ='X' and hidden_column = 'YES' and column_name = 'CL'; -- запись присутствует - колонка осталась неудалённой!! Решилось так: alter table X move nocompress; -- снимаю компрессию alter table X drop unused columns; -- теперь работает как надо alter table X move compress for OLTP; -- возвращаю компрессию select * from dba_tab_cols where table_name ='X' and hidden_column = 'YES' and column_name = 'CL'; -- колонка удалилась! ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2021, 09:49 |
|
не работает, но и не даёт ошибку! alter table .. drop unused columns
|
|||
---|---|---|---|
#18+
shurka22 aamazur shurka22, таблица с компрессией? поищите drop unused + compressed. Спасибо, оно! select compression, compress_for from tabs where table_name = 'X'; -------- -------- ENABLED ADVANCED Как было (колонка не удалялась): alter table X set unused column CL; --отмечаю колонку "на удаление" select * from dba_tab_cols where table_name ='X' and hidden_column = 'YES' and column_name = 'CL'; -- проверяю, что колонка ещё осталась в таблице alter table X drop unused columns; -- выполняется мгновенно, несмотря на 100млн записей, что наводит на подозрения select * from dba_tab_cols where table_name ='X' and hidden_column = 'YES' and column_name = 'CL'; -- запись присутствует - колонка осталась неудалённой!! Решилось так: alter table X move nocompress; -- снимаю компрессию alter table X drop unused columns; -- теперь работает как надо alter table X move compress for OLTP; -- возвращаю компрессию select * from dba_tab_cols where table_name ='X' and hidden_column = 'YES' and column_name = 'CL'; -- колонка удалилась! Опция Advanced Compression лицензирована? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2021, 16:39 |
|
не работает, но и не даёт ошибку! alter table .. drop unused columns
|
|||
---|---|---|---|
#18+
SQL*Plus Опция Advanced Compression лицензирована? Ну вы спросили. Не знаю, но подозреваю, что - да. Мне выдали БД, сказали, мол надо сделать то-то и то-то. В детали я не вдавался. И даже не знал о таких подробностях. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2021, 09:11 |
|
|
start [/forum/topic.php?fid=52&msg=40097182&tid=1879886]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
186ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 305ms |
0 / 0 |