数据库已满;应该采取什么策略?

数据库已满;应该采取什么策略?

如果我的数据库已满,并且没有多余的硬盘或内存空间,该怎么办?我应该采取什么策略来释放空间?

答案1

“我的数据库已满”在 Oracle 中可能意味着不同的事情

1 我的硬盘的每个字节都充满了“有用”的数据。

压缩/重复数据删除/规范化可能会有帮助,但购买更多磁盘更便宜。

2 我在文件中为表空间 X 留有空间,但需要将其用于表空间 Y 中的表

如果空间位于文件末尾,则可以缩小表空间。如果不行,最好将表从 Y 移动到 X。从表空间文件中间回收空间相当困难

3 我从表A中删除了很多记录,但是还没有回收表空间中的空间

ALTER TABLE ... MOVE; 将会整理它,但之后您需要重建索引。

可能还有其他情况,所以我会在社区维基百科上找到这个答案/

答案2

交易日志将保留无限增长直到它们占用所有可用空间。这可能是您空间不足的原因之一。

你可以截断事务日志以释放空间,但请注意,这将删除您恢复到时间点或回滚对数据库的更改的能力。

要截断日志,请运行

BACKUP LOG [DatabaseName] WITH TRUNCATE_ONLY

然后缩小日志文件以释放驱动器空间。注意,我假设是 MS SQL。

您需要制定持续的策略来防止这种情况再次发生。根据您的申请和自由放任程度,您可能需要:

  • 将事务日志备份到外部服务器或驱动器(并缩小日志文件)。我怀疑这是 MS 推荐的解决方案,并且可以保留诸如恢复之类的好东西。
  • 打开简单日志记录。这意味着您将失去恢复功能,但也意味着您的数据库日志不会像这次一样失控增长。

相关内容