首先谢谢各位回答问题的仁兄。具体情况是,数据服务器上的日志文件已有5G之巨,数据文件和日志文件在一个分区,此分区只有几M空间了,整个服务器也没多少空间。数据库都没办法启动了。想把日志给直接删了吧,又怕把数据弄没了,请问各位有没有比较好的解决方案,在此谢谢了

解决方案 »

  1.   

    /*--SQL Server 中的最小日志记录操作 原作: happydreamer(小黑)

    --整理..邹建--2003.12--*/
    /*--控制数据库恢复选项ALTER DATABASE 数据库名 SET RECOVERY <RECOVERY_OPTIONS><RECOVERY_OPTIONS>的取值: FULL | BULK_LOGGED | SIMPLE FULL: 系统将对介质错误提供完全保护。
    如果数据文件损坏,介质恢复可以还原所有已提交的事务。 BULK_LOGGED: 将在介质错误保护程度与某些大规模或大容量操作
    的最优性能及日志存储空间最少占用量之间进行权衡。
    这些操作包括:
    SELECT INTO、
    大容量装载操作(bcp 和 BULK INSERT)、CREATE INDEX
    文本和图象操作(WRITETEXT 和 UPDATETEXT)。在大容量日志记录恢复模型下,对整个类只做最少的日志记录,
    并且无法逐个操作地控制日志记录行为。SIMPLE: 系统将提供占用日志空间最小的备份策略。
    服务器故障恢复不再需要的日志空间可被自动重用。重要  简单恢复模型比其它两种模型更容易管理,
    但数据文件损坏时造成数据丢失的可能性更大。
    最近的数据库备份或差异数据库备份之后的更改都将丢失,必须手工重新输入。默认恢复模型由 model 数据库的恢复模型确定。
    若要更改新数据库的默认值,请用 ALTER DATABASE 设置 model 数据库的恢复选项。
    --*/
      

  2.   

    1.先分离数据库,在数据库文件中把日志文件删除掉,然后附加数据库.2.如果附加上去的数据库问置疑的就运行下面的代码>
    USE MASTER
    GOSP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE
    GOUPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='置疑的数据库名'
    Gosp_dboption '置疑的数据库名', 'single user', 'true'
    GoDBCC CHECKDB('置疑的数据库名') 
    Goupdate sysdatabases set status =28 where name='置疑的数据库名'
    Gosp_configure 'allow updates', 0 reconfigure with override
    Go sp_dboption '置疑的数据库名', 'single user', 'false'
    Go
    3.如果数据库文件附加不上去就把原来的数据库文件改个名字,再新建一个同名的数据库,停掉SQL服务器,把原来的数据库文件覆盖到新建的数据库文件中,再重新启动SQL服务器,看看数据库是否可用.
      

  3.   

    DBCC UPDATEUSAGE
    BACKUP LOG DB_NAME WITH NO_TRUNCATE
    DBCC SHRINKDATABASE
      

  4.   

    1 更新索引信息以更新数据文件大小
    2 截断当前日志(注意之后立即对数据库文件进行备份)
    3 压缩数据库(回收Windows系统空间)
      

  5.   

    --正确的处理日志的方法--压缩日志及数据库文件大小/*--特别注意 请按步骤进行,未进行前面的步骤,请不要做后面的步骤
    否则可能损坏你的数据库.
    一般不建议做第4,6两步
    第4步不安全,有可能损坏数据库或丢失数据
    第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.
    --*/--下面的所有库名都指你要处理的数据库的库名1.清空日志
    DUMP  TRANSACTION  库名  WITH  NO_LOG    2.截断事务日志:
    BACKUP LOG 库名 WITH NO_LOG3.收缩数据库文件(如果不压缩,数据库的文件不会减小
    企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
    --选择日志文件--在收缩方式里选择收缩至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)
    转贴推荐内容
      

  6.   

    楼上的 你转载的文章有错误!! 关于一、二两句【DUMP命令】 Makes a backup copy of a database (DUMP DATABASE) or makes a copy of the transaction log (DUMP TRANSACTION) in a form that can be read into Microsoft&reg; SQL Server&#8482; using the BACKUP or LOAD statements.Important  The DUMP statement is included in SQL Server version 2000 for backward compatibility. It is recommended that the BACKUP statement be used instead of the DUMP statement. In a future version of SQL Server, DUMP will not be supported.所以只要一句就可以了 不是狗屁什么清空日志 就是第二步操作也不会清空日志