本人今天遇到一个SQL 日志爆满问题, 之后ERP不能工作。 于是本人使用分离,删除SQL日志文件,再附加数据库的方式处理。 事后发现一些问题:
1. 现在直接把SQL日志文件删除, 如果我要使用第三方软件log explorer 恢复之前的数据,恐怕已经不可能了。 2. 倘若使用收缩数据库日志,或者删除不活动的日志记录,又或者是截断日志文件,log explorer 同样不能使用。这样对于维护数据库带来了很大的难度。 3. 我的日志文件大少才3G多,怎么提示日志爆满呢? 日志爆满的准则是什么? 我硬盘空间多的是。 4. 有什么方式在不丢失日志数据的情况下,永远不提示日志爆满? 希望各位大虾赐教!!! 小弟不姓感激!!!
1. 现在直接把SQL日志文件删除, 如果我要使用第三方软件log explorer 恢复之前的数据,恐怕已经不可能了。 2. 倘若使用收缩数据库日志,或者删除不活动的日志记录,又或者是截断日志文件,log explorer 同样不能使用。这样对于维护数据库带来了很大的难度。 3. 我的日志文件大少才3G多,怎么提示日志爆满呢? 日志爆满的准则是什么? 我硬盘空间多的是。 4. 有什么方式在不丢失日志数据的情况下,永远不提示日志爆满? 希望各位大虾赐教!!! 小弟不姓感激!!!
DBCC SHRINKDATABASE(库名)--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
DBCC SHRINKFILE(1)
2.如果没有,请硬盘恢复高手恢复你的文件到你删除日志前的状态,然后附加数据库,试试.第二个问题,对日志文件的大小设置一个初始值,设置个一自增加比率,一般为10%,不要太大.只要你的硬盘空间足够大,不会提示你的.另,建议装正版企业版的SQL SERVER
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"--SQL语句设置方式:
EXEC sp_dboption '库名', 'autoshrink', 'TRUE'
DUMP TRANSACTION 库名 WITH NO_LOG
2.截断事务日志:
BACKUP LOG 库名 WITH NO_LOG
3.收缩数据库文件(如果不压缩,数据库的文件不会减小
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
也可以用SQL语句来完成
--收缩数据库
DBCC SHRINKDATABASE(库名)
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
DBCC SHRINKFILE(1)
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
a.分离数据库:
企业管理器--服务器--数据库--右键--分离数据库
b.在我的电脑中删除LOG文件
c.附加数据库:
企业管理器--服务器--数据库--右键--附加数据库
此法将生成新的LOG,大小只有500多K
或用代码:
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
a.分离
EXEC sp_detach_db @dbname = '库名'
b.删除日志文件
c.再附加
EXEC sp_attach_single_file_db @dbname = '库名',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\库名.mdf'
5.为了以后能自动收缩,做如下设置:
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
--SQL语句设置方式:
EXEC sp_dboption '库名', 'autoshrink', 'TRUE'
6.如果想以后不让它日志增长得太大
企业管理器--服务器--右键数据库--属性--事务日志
--将文件增长限制为xM(x是你允许的最大数据文件大小)
--SQL语句的设置方式:
alter database 库名 modify file(name=逻辑文件名,maxsize=20)
1.设置数据文件和日志文件自动增长,大小不受限制。
2.根据自己数据库的情况,设置增长方式,按百分比还是按固定大小增长。比如你的数据库文件是50G,如果按百分比增长的话,在FAT32分区下是无法完成的。
呵呵,,不可能是FAT32格式呀
backup log 数据库 with no_log
DBCC SHRINKDATABASE (数据库)
go