K/3数据库日志文件过大分析及解决方案本期概述●本文档适用于金蝶k/3(使用SQL Server 2000、SQL Server2005作为数据库)。
●本文档主要阐述了,在K3备份过程中,遇到:”日志文件过大,系统无法完成备份”的问题分析及解决方案。
通过对本文档的学习,能够掌握这种问题产生的原因以及解决方法。
版本信息●2009年6月10日V11.0 编写人:周素帆●2009年6月日V11.0 修改人:版权信息本文件使用须知著作权人保留本文件的内容的解释权,并且仅将本文件内容提供给阁下个人使用。
对于内容中所含的版权和其他所有权声明,您应予以尊重并在其副本中予以保留。
您不得以任何方式修改、复制、公开展示、公布或分发这些内容或者以其他方式把它们用于任何公开或商业目的。
任何未经授权的使用都可能构成对版权、商标和其他法律权利的侵犯。
如果您不接受或违反上述约定,您使用本文件的授权将自动终止,同时您应立即销毁任何已下载或打印好的本文件内容。
著作权人对本文件内容可用性不附加任何形式的保证,也不保证本文件内容的绝对准确性和绝对完整性。
本文件中介绍的产品、技术、方案和配置等仅供您参考,且它们可能会随时变更,恕不另行通知。
本文件中的内容也可能已经过期,著作权人不承诺更新它们。
如需得到最新的技术信息和服务,您可向当地的金蝶业务联系人和合作伙伴进行咨询。
著作权声明著作权所有2009 金蝶软件(中国)有限公司。
所有权利均予保留。
目录第一章报错现象及分析 (5)一、报错现象 (5)二、问题分析 (6)三、关于日志文件 (6)第二章解决方案 (8)一、SQL 2000 (8)1、执行数据库分离附加 (8)2、数据库收缩操作 (18)二、SQL 2005 (24)1、分离附加数据库 (24)2、收缩数据库 (27)第一章报错现象及分析一、报错现象案例一、在进行帐套备份的时候提示以下错误,如图1.1所示:图1.1案例二、在进行单据录入的时候提示以下错误,如图1.2所示:图1.2点击确定后出现如下提示,如图1.3所示:图1.3后弹出单句录入界面为不可录入状态,点新增后仍然继续弹出错误提示。
二、问题分析问题的原因可能主要是由于统计,排序等操作做的太多,太频繁。
导致账套实体的事务日志的增长已超过当前的限制太小所致。
如果客户数据库的LOG文件过大,也会导致客户端运行速度变慢,严重时连一个客户端都进不去。
产生性能问题。
三、关于日志文件主要数据文件是数据库的起点,指向数据库中文件的其它部分。
每个数据库都有一个主要数据文件。
主要数据文件的推荐文件扩展名是 .mdf。
日志文件包含恢复数据库所需的所有日志信息。
每个数据库必须至少有一个日志文件,但可以不止一个。
日志文件的推荐文件扩展名是 .ldf。
日志文件增长:可以按百分比或实际大小指定增长速度。
日志文件容量设置:可以指定文件增长的最大值或不受限。
在SQL Server 中,如果设置了自动增长功能,事务日志文件将会自动扩展。
一般情况下,在能够容纳两次事务日志截断之间发生的最大数量的事务时,事务日志的大小是稳定的,事务日志截断由检查点或者事务日志备份触发。
然而,在某些情况下,事务日志可能会变得非常大,以致用尽空间或变满。
通常,在事务日志文件占尽可用磁盘空间且不能再扩展时,除了出现此错误消息之外,SQL Server 还可能因为缺少事务日志扩展空间而将数据库标记为 SUSPECT。
另外,事务日志扩展可能导致下列情形:1)、非常大的事务日志文件。
2)、事务可能会失败并可能开始回滚。
3)、事务可能会用很长时间才能完成。
4)、可能发生性能问题。
5)、可能发生阻塞现象。
分析事务日志扩展可能由于以下原因或情形而发生:1)、未提交的事务2)、非常大的事务3)、操作:DBCC DBREINDEX 和 CREATE INDEX 4)、在从事务日志备份还原时5)、客户端应用程序不处理所有结果6)、查询在事务日志完成扩展之前超时,您收到假的“Log Full”错误消息7)、未复制的事务第二章解决方案一、SQL 20001、执行数据库分离附加。
概述:该方法有一定的风险性,因为SQL SERVER的日志文件不是即时写入数据库主文件的,如过处理不当,可能会造成数据的损失。
1: 分离数据库企业管理器->服务器->数据库->右键->分离数据库2:附加数据库企业管理器->服务器->数据库->右键->附加数据库此法生成新的LOG,大小只有500多K。
注意:因为日志大到一定的程度,就无法进行备份,而该方法又存在一定的风险。
所以如果对数据要求特别高的话建议可以先收缩日志文件,进行完全备份。
之后再进行分离附加数据库的操作。
详细操作步骤:首先点击开始菜单→找到所有程序→金蝶k3→金蝶k3服务器配置工具→帐套管理,确定帐套对应的数据库实体文件是那一个。
并且记录下该数据库实体名称。
如下图2.1所示:图2.1其次点击开始菜单→找到所有程序→MICROSOFT SQL SERVER →企业管理器.详细见图2.2图2.2打开到企业管理器界面,展开到数据库:如图2.3图2.3第一步,将问题账套实体进行数据分离。
在数据库列表中,可以看到K3对应的数据库实体,选中该数据库实体,点右键:选择属性。
点击数据文件:记住位置中的文件路径(该文件夹是我们数据库文件所保存的位置.)如图2.4图2.4再关掉属性框,回到该数据库实体中. 进入SQL SERVER企业管理器进行分离。
SQL SERVER企业管理器-》Micro SQL Servers-》SQL Server组-》(local)Windows NT-》数据库-》帐套号-》所有任务-》分离数据库。
如图2.5.图2.5(注意该操作要保证没有客户端登陆的情况下做,否则,客户端后面做的数据,将无法保存.)如果数据库状态中显示:“使用本数据库的连接”不为0,则点旁边的“清除”。
如图2.6图2.6然后点确定:此时,数据库列表中将没有了该数据库实体(图2.7)。
图2.7打开此前记住的数据库文件所在文件夹:第二步,删除问题账套实体的数据库日志文件。
找到该数据库实体名称所对应的日志文件:扩展名为:.ldf或_log.ldf,如图2.8:把该日志文件剪切到其他文件夹(或者删除)。
因为稍后会生成一个新的日志文件,一般约500k左右。
注册帐套的时候需要使用到日志文件,如果剪切到其他的文件夹下了,以后还可以找回来。
如果客户对数据要求非常高。
不建议删除。
图2.8确保数据库数据文件(扩展名为:MDF)与日志文件(扩展名为:LDF)不在同一个文件夹下。
第三步,将问题帐套数据实体重新附加回SQL数据库中。
步骤:回到企业管理器(控制台)上,到数据库项上点右键→所有任务→附加数据库图2.9图2.10 选择数据文件(扩展名为.MDF)图2.11图2.12点确定:出现下图所示提示:图2.13 继续确定:最后,数据库正常附加。
图2.14 此时可以看到新的日志文件只有504k.。
图2.15第四步,将问题帐套数据实体重新注册。
最后您需要进入帐套管理,把帐套注册回来。
就可以了。
先运行反注册帐套。
如下图:图2.16之后选择注册帐套。
图2.17注意选择身份验证方式:图2.182、数据库收缩操作。
概述:1、修改故障模型方式在数据库上点右键->属性->选项->故障恢复-模型-选择-简单模型。
2、重新启动数据库服务。
3、收缩日志文件企业管理器->数据库实体->所有任务->收缩数据库->收缩文件。
详细操作步骤:首先点击开始菜单→找到所有程序→金蝶k3→金蝶k3服务器配置工具→帐套管理,确定帐套对应的数据库实体文件是那一个。
并且记录下该数据库实体名称。
如下图2.19所示:图2.19其次点击开始菜单→找到所有程序→MICROSOFT SQL SERVER →企业管理器.详细见图2.20图2.20打开到企业管理器界面,展开到数据库:如图2.21图2.21第一步,修改问题账套实体故障还原模式。
在对应的数据库实体上点右键->属性->选项->故障还原->模型->选择:简单模型。
如图2.22所示。
图2.22第二步,重新启动数据库服务。
右健单击【我的电脑】,选择管理->服务和应用程序->服务。
在列表中选择MSSQLSERVER服务。
如图2.23所示。
图2.23第三步,收缩数据库日志文件。
在数据库的企业管理器中,右击该数据库实体选择所有任务中收缩数据库,如图2.24所示。
图2.24选择文件打开如下界面,选择日志文件,然后输入收缩到的数值。
确定。
如图2.25所示:图2.25分离附加日志文件和收缩日志文件效果都是一样的,都起到了减小日志文件的作用。
做完以上操作之后,您就可以正常的使用k3了。
如果以后,不想要它变大。
有以下3种方法。
1)、在数据库上点右键->属性->选项->故障恢复 模型->选择->简单模型。
也可以使用命令:alter database 数据库名set recovery simple2)、企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"3)、右建数据库属性窗口--故障还原模型--设为大容量日志记录二、SQL 20051、分离附加数据库首先点击开始菜单→找到所有程序→金蝶k3→金蝶k3服务器配置工具→帐套管理,确定帐套对应的数据库实体文件是那一个。
并且记录下该数据库实体名称。
其次点击开始菜单→找到所有程序→MICROSOFT SQL SERVER 2005→SQL Server Managerment Studio 如下图3.1所示.图3.1输入用户名密码,登陆。
展开到数据库。
如图3.2所示图3.2第一步,将问题账套实体进行数据分离。
在数据库列表中,可以看到K3对应的数据库实体,选中该数据库实体,点右键:选择属性。
点击文件:记住位置中的文件路径(该文件夹是我们数据库文件所保存的位置.)如图3.3所示图3.3再关掉属性框,回到该数据库实体中.进入SQL SERVER Managerment Studio中进行分离。
数据库->任务->分离。
如图3.4所示图3.4弹出如图3.5所示界面,点确定后,会提示分离成功。
图3.5打开此前记住的数据库文件所在文件夹:第二步,删除问题账套实体的数据库日志文件。
找到该数据库实体名称所对应的日志文件:扩展名为:.ldf或_log.ldf,如图2.8:把该日志文件剪切到其他文件夹(或者删除)。
因为稍后会生成一个新的日志文件。
注册帐套的时候需要使用到日志文件,如果剪切到其他的文件夹下了,以后还可以找回来。
如果客户对数据要求非常高。
不建议删除。