在创建SQLserver数据库时,用户所建立的数据存储结构中,至少包括一个容纳数据库对象的数据文件和一个事务日志文件。
本单位有一台运行SQLserver数据库系统的远程教学服务器,由6块73.4GB热插拔硬盘,通过RAID卡配置成一台具有RAID 5级的磁盘阵列。从2002年投入运行以来,一直都保持着良好的运行状态。前不久,服务器启动时,出现了数据库初始化时间过长的现象。由于并未影响到教学使用,没有引起网管太多的注意。直到有一天教学平台的web发布出现数据库连接错误时,才发现问题的严重性。进入SQLserver企业管理器发现教学数据库subedu被标示为“置疑”,数据库物理文件subedu.mdf自行脱机,日志文件subedu.ldf的容量异常,超过了16GB。
这台服务器的磁盘阵列实际配置的存储空间是274GB。其中10GB指定为操作系统分区,234GB作为数据分区,用以随机存储网络课件和教学资源。远程教学系统及其数据库配置的应用系统分区总共是30GB。正常运行状态下,不超过16GB。设计有45%的预留磁盘存储空间。这种状况的出现几乎耗尽了应用系统分区的全部动态容量 ,导致整个网络教学平台陷于瘫痪。
原因分析
在创建SQLserver数据库时,用户所建立的数据存储结构中,至少包括一个容纳数据库对象的数据文件和一个事务日志文件。
为了维护数据库的一致性,便于进行数据库恢复,日志文件能够自动跟踪数据库的更新状态。将各种类型的事务记录写进事务日志中。通常事物日志文件大约占据数据库文件空间的10%-15%。日志文件对磁盘空间的开销采取随机模式。
在网络教学过程中,频繁的数据交互会形成大量的事务动态,被作为数据记录被存储在日志中,致使物理文件subedu.ldf无限制增长,数据库系统正常运行所必需的磁盘空间不能得到有效的确定与保障,是造成上述故障产生的根本原因。
处理方法
必须主动、定期地对数据库中的日志文件进行分离,保留近期具有应用动态的日志数据。对于早期随机生成的日志文件应该及时进行清理。保持数据库的存储容量相对日志文件的增长速度,具有一定的临界性。从而使数据库的运行保持正常、稳定。因此,作为日志文件的维护,定期运行下述SQL脚本也不失为一种简捷可行的、主动把握数据库运行状态的好方法。
进入查询分析器,加载下面SQL脚本,点击运行。如果SQLserver管理多个数据库时,必须注意一定要选择、正确指定待要分离日志文件的数据库名称。
DUMP TRANSACTION database_name WITH NO_LOG
BACKUP LOG database_name WITH NO_LOG
DBCC SHRINKDATABASE(database_name)
EXEC sp_dboption 'database_name', 'autoshrink', 'TRUE'
其中database_name是待要分离日志文件的数据库名称。
建议分离完日志文件后,进行数据库备份。根据笔者的经验,以十天作为周期进行比较合理。
您可能对 [SQL Server] 的这些文章也感兴趣: