如果我的数据库已满,并且没有多余的硬盘或内存空间,该怎么办?我应该采取什么策略来释放空间?
答案1
“我的数据库已满”在 Oracle 中可能意味着不同的事情
1 我的硬盘的每个字节都充满了“有用”的数据。
压缩/重复数据删除/规范化可能会有帮助,但购买更多磁盘更便宜。
2 我在文件中为表空间 X 留有空间,但需要将其用于表空间 Y 中的表
如果空间位于文件末尾,则可以缩小表空间。如果不行,最好将表从 Y 移动到 X。从表空间文件中间回收空间相当困难
3 我从表A中删除了很多记录,但是还没有回收表空间中的空间
ALTER TABLE ... MOVE; 将会整理它,但之后您需要重建索引。
可能还有其他情况,所以我会在社区维基百科上找到这个答案/
答案2
交易日志将保留无限增长直到它们占用所有可用空间。这可能是您空间不足的原因之一。
你可以截断事务日志以释放空间,但请注意,这将删除您恢复到时间点或回滚对数据库的更改的能力。
要截断日志,请运行
BACKUP LOG [DatabaseName] WITH TRUNCATE_ONLY
然后缩小日志文件以释放驱动器空间。注意,我假设是 MS SQL。
您需要制定持续的策略来防止这种情况再次发生。根据您的申请和自由放任程度,您可能需要:
- 将事务日志备份到外部服务器或驱动器(并缩小日志文件)。我怀疑这是 MS 推荐的解决方案,并且可以保留诸如恢复之类的好东西。
- 打开简单日志记录。这意味着您将失去恢复功能,但也意味着您的数据库日志不会像这次一样失控增长。