SQL Server 2000数据库的事务日志文件太大。怎么减?
复制QL服务器时,对数据库的所有更新都将记录在数据库的事务日志文件中。除非数据库设置为自动或手动收缩,否则事务日志文件将一直增长,直到达到预设的日志文件增长限制或用尽可用磁盘空间。如果当前数据库文件或日志文件太大,可以使用以下两个命令收缩它:DBCC SHRINKDATABASE:收缩指定数据库中所有数据和日志文件的大小DBCC SHRINKFILE:收缩数据库中指定数据或日志文件的大小。这两个命令可以释放数据库中的空闲空间,将数据库或指定的数据库文件收缩到指定的大小,但收缩后的数据文件或日志文件的大小不会小于文件中现有有效数据的大小。有关这两个命令的具体用法,请参考SQL Server 2000联机丛书中的相应主题。此外,还可以在SQL Server企业管理器中执行数据库收缩,上面两个命令也被调用,效果类似。在使用上述命令收缩日志文件时,需要注意的是,已经写入数据库但未被截断的事务日志记录不会被收缩,因为这部分日志记录的信息虽然已经写入数据库文件,但在使用事务日志备份恢复数据库时也会用到。对于使用简单恢复模式的数据库,每次处理检查点时,都会自动截断事务日志。对于使用完整恢复模式或大容量日志恢复模式的数据库,只有在执行日志备份时,事务日志才会被截断,事务日志中记录的信息会被写入事务日志备份文件,它们所占用的空间会被标记为可用(即被截断)。截断事务日志不会使日志文件变小,但是可以释放一些空间,以便将来写入新的日志记录。要减小日志文件的物理大小,请使用上面提到的DBCC SHRINKDATABASE和DBCC SHRINKFILE命令。执行BACKUP LOG语句时,还可以使用WITH NO_LOG(或WITH TRUNCATE_ONLY,意思相同)参数。此时并没有真正备份事务日志,只是截断了事务日志中不活动的部分(这和普通的BACKUP LOG语句是一样的)。这适用于剩余磁盘空间不足以备份事务日志,或者事务日志的非活动部分不打算保留用于数据库恢复的情况。为了避免事务日志文件增长过快而耗尽所有磁盘空间的现象,一种方法是将数据库设置为使用简单恢复模式,这样SQL Server就可以定期自动截断事务日志的非活动部分,并回收其所占用的空间,以便以后写入事务日志记录。但是这样会使数据库无法通过事务日志备份恢复到实时点,降低数据库的可靠性,所以一般不应该在生产数据库中使用。对于生产数据库,建议使用完整恢复模式,定期对数据库进行完整备份和事务日志备份。例如,每周执行一次完整备份,每天执行一次事务日志备份,这可以通过SQL Server企业管理器中的数据库维护计划向导轻松实现(一般可以设置为每天晚上业务不忙的某个时间自动执行备份)。通过定期执行数据库的事务日志备份,可以避免日志文件的快速增长,并且可以保持在一个相对稳定的大小。虽然数据库备份文件也要占用大量的磁盘空间,但是在不需要的时候可以随时移动到其他磁盘或者删除,在出现故障或者误操作的时候也可以方便的恢复数据库。由于数据文件的大小随着数据库中数据的增加而增加,数据库中被删除的数据所占用的空间可以用于新插入的数据;定期备份事务日志后,我们可以将日志文件的大小控制在一个合理的范围内。因此,一般不需要收缩数据库,也不建议将数据库设置为自动收缩模式。建议只在以下情况下收缩数据库:1,磁盘空间不足2,数据文件很大,但只包含少量数据(可能之前有大量数据,后来删除了),预计以后数据库的数据量不会很大。3.事务日志文件太大,因为它很长时间没有备份。减小事务日志文件大小的另一种方法是首先在数据库中执行CHECKPOINT命令,然后分离数据库,重命名或删除或移动相应的数据库日志文件(。ldf文件)复制到其他目录,然后执行存储过程sp_Attach_single_file_db或在企业管理器中重新附加它。由于找不到原始日志文件,SQL Server将自动为数据库创建一个大小仅为504K的日志文件。但是,这种方法必须暂时使数据库脱机,因此通常不适合在生产环境中使用。如果当前数据库的事务日志文件过大,必须收缩,建议参考以下步骤:1。建议先备份数据库(但不是必须的):将数据库database _ name备份到backup _ device。
2.备份事务日志:backup log database _ name to backup _ device如果数据库还原不需要当前事务日志中的记录,或者没有足够的空间用于事务日志备份,只需执行以下命令即可截断事务日志:backup log database _ name with no _ log。
3.收缩日志文件:DBCC收缩文件(日志文件名称),其中日志文件名称是事务日志文件的逻辑名称,可以在Enterprise Manager的数据库属性的“事务日志”页中看到(例如,Northwind数据库中事务日志文件的默认逻辑名称是Northwind_log)。4.如果日志文件仍然很大,可以尝试使用NO_LOG和DBCC SHRINKFILE命令再次执行备份日志。5.如果此时仍无明显效果,请执行DBCC OPENTRAN (database_name)检查当前数据库中是否有长时间未提交的活动事务。如有必要,可以断开这些连接,尝试截断事务日志并再次收缩日志文件。6.日志文件收缩后,建议立即对数据库进行完整备份,并根据实际需要制定合适的数据库备份计划。