![重新分配/更改主日志文件 - SQL 2000](https://linux22.com/image/499609/%E9%87%8D%E6%96%B0%E5%88%86%E9%85%8D%2F%E6%9B%B4%E6%94%B9%E4%B8%BB%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%20-%20SQL%202000.png)
我有一个大型数据库(称为 Navision4),目前有 2 个日志文件:
Navision4_Log Navision4_Log3
那里曾是一个名为 Navision4_Log2 的日志,但我设法将其删除。
Navision4_Log 位于 C:\ 驱动器上 - 并且未被使用。Navision4_Log3 位于 G:\ 驱动器上 - 但是很大 - 并且这似乎是所有事务写入的地方。
但是,我想删除一个,只留下一个日志文件。
我该怎么做?我尝试删除 Navision4_Log - 但得到:
错误 5020:无法从数据库中删除主数据或日志文件
答案1
您的数据库使用什么恢复模型?您是否定期进行日志备份?如果您处于完全恢复状态且未进行日志备份,那么这可能解释了为什么 Navision4_Log3 如此之大。您应该通过进行日志备份或切换到简单恢复来解决这个问题。
我会将 Navision4_Log 移至 G 盘,而不是尝试将其删除。我猜想 Navision4_Log3 之所以存在,是因为服务器的 C: 空间不足,而管理员不知道如何移动它。
要将日志文件移动到 G:,请使用以下命令:
ALTER DATABASE Navision4 SET OFFLINE;
--将日志文件移动到 G:
ALTER DATABASE Navision4
MODIFY FILE (
NAME='Navision4_Log',
FILENAME='G:\MSSQL\TLOG\Navision4_Log.ldf');
ALTER DATABASE Navision4 SET ONLINE;
**编辑:**SQL Server 2000 不支持这些选项,因此您必须使用 sp_detachdb 和 sp_attachdb,您也可以在企业管理器 GUI 中分离和附加。只需确保您附加数据库并将所有者指定为 sa。
然后,您可以根据需要删除 Navision4_Log3。您需要做的(如果您处于完全恢复状态)是进行日志备份,然后使用收缩日志。DBCC SHRINKFILE('Navision4_Log3', EMPTYFILE)
您可能需要进行几次备份和收缩,然后文件才会清空,然后您才应该能够删除它。
答案2
因为它是复制数据库,所以您必须在分离之前删除复制。SQL Server 2000 不允许您分离复制数据库。
在 Nick 正确之后,分离数据库并重新连接仅包含您希望在 G 上使用的唯一文件: