В Oracle Безопасно ли удалять таблицы, содержащие большой объем данных? - PullRequest
4 голосов
/ 14 июня 2011

У меня есть производственная база данных Oracle, которая содержит большой объем данных, зарезервированных в таблицах, которые были созданы во время предыдущей работы. Таблицы не зависят друг от друга и от остальной базы данных.

Я хочу удалить эти резервные копии, желательно за один снимок. Я знаю, что в более поздних версиях Oracle удаленные таблицы фактически не удаляются до тех пор, пока они не будут удалены из корзины. Я возьму это.

Безопасно ли отбрасывать их всех сразу? Есть ли снижение производительности во время операции DROP? Есть ли шанс исчерпать ресурсы во время операции?

Какой самый безопасный способ сделать это?

Ответы [ 2 ]

5 голосов
/ 14 июня 2011

Вероятно, можно отбросить их все сразу.

Как правило, удаление таблицы происходит очень быстро, независимо от размера таблицы. DROP на самом деле не меняет никаких данных, Oracle просто изменяет словарь данных, чтобы пометить пространство как доступное. Я отбросил множество таблиц с сотнями гигабайт или более данных, и у меня никогда не было проблем. (Ваши файлы данных могут иметь неправильный размер, но это другая проблема.)

Кроме зависимостей и блокировок, единственный раз, когда я видел, что падение занимало (относительно) длительное время, было из-за отложенной очистки блока. По сути, если вы обновляете, удаляете или вставляете (без добавления) много данных, Oracle может записать некоторые данные транзакции в блоки. Причина этого в том, чтобы сделать COMMIT мгновенным, но это означает, что следующий запрос, который даже считывает данные из таблицы, возможно, должен очистить старые записи транзакции.

Но ваши шансы столкнуться с этой проблемой невелики. Если у вас очень большие таблицы, они, вероятно, были созданы с помощью прямой вставки пути, или кто-то другой уже запросил таблицу и очистил блоки. Даже в худшем случае, если ваша система была достаточно хороша для записи данных, она, вероятно, будет достаточно хороша, чтобы от нее избавиться (хотя вы можете получить снимок ORA-01555, слишком старый, если транзакции слишком старые или из архива журнал пространства от дополнительного повтора после отложенной очистки блока и т. д.).

2 голосов
/ 14 июня 2011

Если у таблиц нет зависимостей и они не используются, можно сразу отбросить их все.Если вас беспокоит новая функция корзины, вы можете выполнить «удаление таблицы table_name purge», и она будет обходить корзину и получать очистку без необходимости удалять их из корзины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...