Что делать, если моя база данных заполнена, и у меня нет свободного жесткого диска или места в памяти. Какой должна быть моя стратегия, чтобы освободить место?
2 ответа
"Моя база данных переполнена" может означать очень разные вещи в Oracle
1 Каждый байт моего жесткого диска заполнен "полезными" данными.
Сжатие / дедупликация данных / нормализация могут помочь, но дешевле купить больше дисков.
2 У меня есть место в файле для табличного пространства X, но оно мне нужно для таблиц в табличном пространстве Y
Если пространство находится в конце файла, вы можете уменьшить табличное пространство. Если не лучше переместить таблицы с Y на X. Довольно сложно восстановить пространство из середины файла табличного пространства.
3 Я удалил много записей из таблицы A, но она не освободила место в табличном пространстве
ALTER TABLE ... ПЕРЕЕХАТЬ; приведёт в порядок, но потом вам нужно будет перестроить индексы.
Вероятно, есть и другие сценарии, поэтому я отвечу вики-сообществу на этот ответ /
Журналы транзакций будут расти неограниченно долго, пока не займут все доступное пространство. Вероятно, это одна из причин того, что вам не хватает места.
Вы можете обрезать журналы транзакций, чтобы освободить место, но имейте в виду, что это лишит вас возможности восстановления на определенный момент времени или отката изменений в БД.
Чтобы обрезать логи, запустите
BACKUP LOG [DatabaseName] WITH TRUNCATE_ONLY
затем сожмите файл журнала, чтобы освободить место на диске. Обратите внимание, я принял MS SQL.
Вам понадобится постоянная стратегия, чтобы предотвратить это снова. В зависимости от вашего приложения и уровня laissez-faire, вы можете:
- Резервное копирование журналов транзакций на внешний сервер или диск (и сжать файл журнала). Я подозреваю, что это рекомендованное MS решение и сохраняет такие хорошие вещи, как восстановление.
- Включите простую регистрацию. Это означает, что вы теряете функциональность восстановления, но также означает, что ваш журнал БД не выйдет из-под контроля, как в этот раз.