|M| 我的数据库的日志一下子就满了,怎么办啊
数据库 'cnepa ' 的日志已满。请备份该数据库的事务日志以释放一些日志空间。
每两天就这样
可不可不要日志文件的啊
或者让SQL数据库每两个小时就压一次
要怎么办啊头都大了日志疯涨
[解决办法]
限制日志增加..
根据书上说,数据库操作一次,日志就有可能记录N条.
[解决办法]
也可以清空或者转储!
[解决办法]
lz可以每天备份一次日志文件,然后压缩,这些都可以做成作业自动运行
如果其实不需要日志文件的话,可以把数据库的故障还原模型改为简单,文件增长方式改为按M而不是百分比
[解决办法]
限制硬盘增长;扩大硬盘容量
[解决办法]
不要日志就像 "zhengqinxu(草人七心) "说的以 把数据库的故障还原模型改为简单
[解决办法]
备份吧,就可以清除日志的
[解决办法]
if exists (select * from dbo.sysobjects where id = object_id(N '[dbo].[p_backupdb] ') and OBJECTPROPERTY(id, N 'IsProcedure ') = 1)
drop procedure [dbo].[p_backupdb]
GO
create proc p_backupdb
@dbname sysname= ' ', --要备份的数据库名称,不指定则备份当前数据库
@bkpath nvarchar(260)= ' ', --备份文件的存放目录,不指定则使用SQL默认的备份目录
@bkfname nvarchar(260)= ' ', --备份文件名,文件名中可以用\DBNAME\代表数据库名,\DATE\代表日期,\TIME\代表时间
@bktype nvarchar(10)= 'DB ', --备份类型: 'DB '备份数据库, 'DF ' 差异备份, 'LOG ' 日志备份
@appendfile bit=1 --追加/覆盖备份文件
as
declare @sql varchar(8000)
if isnull(@dbname, ' ')= ' ' set @dbname=db_name()
if isnull(@bkpath, ' ')= ' ' set @bkpath=dbo.f_getdbpath(null)
if isnull(@bkfname, ' ')= ' ' set @bkfname= '\DBNAME\_\DATE\_\TIME\.BAK '
set @bkfname=replace(replace(replace(@bkfname, '\DBNAME\ ',@dbname)
, '\DATE\ ',convert(varchar,getdate(),112))
, '\TIME\ ',replace(convert(varchar,getdate(),108), ': ', ' '))
set @sql= 'backup '+case @bktype when 'LOG ' then 'log ' else 'database ' end +@dbname
+ ' to disk= ' ' '+@bkpath+@bkfname
+ ' ' ' with '+case @bktype when 'DF ' then 'DIFFERENTIAL, ' else ' ' end
+case @appendfile when 1 then 'NOINIT ' else 'INIT ' end
print @sql
exec(@sql)
go
--备份当前数据库
exec p_backupdb @bkpath= 'c:\ ',@bkfname= 'db_\DATE\_db.bak '
--差异备份当前数据库
exec p_backupdb @bkpath= 'c:\ ',@bkfname= 'db_\DATE\_df.bak ',@bktype= 'DF '
--备份当前数据库日志
exec p_backupdb @bkpath= 'c:\ ',@bkfname= 'db_\DATE\_log.bak ',@bktype= 'LOG '
[解决办法]
清除,隔段时间就要清除.
[解决办法]
1. 数据库--> 属性-> 选项--> 故障还原 模型 改为简单2.数据库-> 所有任何--> 收缩数据库-> 文件--> 选择日志文件-> 确定
[解决办法]
备份日志,备份以后你就可以清除日志了.
[解决办法]
怎么备份日志啊?我具体较一下。
[解决办法]
在program files\mssql\data下是所有数据和日志的文件,每个数据库都有2个文件,一个是数据文件,一个是日志文件.看扩展名就知道了,把日志文件删了就好了
[解决办法]
学习
------解决方案--------------------
学习
[解决办法]
定時運行一下
dbcc shrinkdatabase(dbname)
backup log dbname with truncate_only
[解决办法]
1.清空日志
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.分离
E X E C sp_detach_db @dbname = 'pubs '
b.删除日志文件
c.再附加
E X E C sp_attach_single_file_db @dbname = 'pubs ',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf '
5.为了以后能自动收缩,做如下设置:
企业管理器--服务器--右键数据库--属性--选项--选择 "自动收缩 "
--SQL语句设置方式:
E X E C sp_dboption '数据库名 ', 'autoshrink ', 'TRUE '
6.如果想以后不让它日志增长得太大
企业管理器--服务器--右键数据库--属性--事务日志
--将文件增长限制为xM(x是你允许的最大数据文件大小)
--SQL语句的设置方式:
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20)
特别注意:
请按步骤进行,未进行前面的步骤,请不要做后面的步骤
否则可能损坏你的数据库.
一般不建议做第4,6两步
第4步不安全,有可能损坏数据库或丢失数据
第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.
另外提供一种更简单的方法,本人屡试不爽,建议大家使用。
更简单的方法:
1。右建数据库属性窗口--故障还原模型--设为简单
2。右建数据库所有任务--收缩数据库
3。右建数据库属性窗口--故障还原模型--设为大容量日志记录