数据库 'cnepa' 的日志已满。请备份该数据库的事务日志以释放一些日志空间。
每两天就这样
可不可不要日志文件的啊
或者让SQL数据库每两个小时就压一次要怎么办啊头都大了日志疯涨

解决方案 »

  1.   

    lz可以每天备份一次日志文件,然后压缩,这些都可以做成作业自动运行
    如果其实不需要日志文件的话,可以把数据库的故障还原模型改为简单,文件增长方式改为按M而不是百分比
      

  2.   

    不要日志就像"zhengqinxu(草人七心) "说的以 把数据库的故障还原模型改为简单
      

  3.   

    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'
      

  4.   

    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'
      

  5.   

    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
      

  6.   

    1. 数据库-->属性->选项-->故障还原 模型 改为简单
    2.数据库->所有任何-->收缩数据库->文件-->选择日志文件->确定
      

  7.   

    1. 数据库-->属性->选项-->故障还原 模型 改为简单
    我改的时候好个提示说数据库日志什么的,我没有看清楚
    然后第二步的时候“收缩数据库”为灰色
      

  8.   

    re:zhaozhao110(我死了,在烈火中我又站起来了,你猜是涅盘,还是尸变?) ( ) 信
    请问那一段是做什么用的我执行了数据库可以用了,但日志并没有变小啊
      

  9.   

    在program files\mssql\data下是所有数据和日志的文件,每个数据库都有2个文件,一个是数据文件,一个是日志文件.看扩展名就知道了,把日志文件删了就好了
      

  10.   

    定時運行一下 
    dbcc shrinkdatabase(dbname)
    backup log  dbname  with truncate_only
      

  11.   

    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。右建数据库属性窗口--故障还原模型--设为大容量日志记录
      

  12.   

    BACKUP LOG databasename WITH TRUNCATE_ONLY

    DBCC SHRINKDATABASE (databasename , 10)用上边的可以收缩
      

  13.   

    lz的问题解决了吧?
    自己建个测试库,然后把企业管理器里的各个功能都尝试过去,会学到很多。懂多之后再去用sql语句会更简单,这是我的个人经验