http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=2785好了后BACKUP LOG DBNAME WITH TRANCATE_ONLY把日志清除

解决方案 »

  1.   

    --假设test2为数据库名称日志已经很大的时候用方法一
    此方法适用于7.0和2000。
    1、在查询分析器中执行:
    exec sp_detach_db 'DB_Name','true'
    2、在我的电脑中将日志的物理文件xxx_Log.LDF改名。
    3、在查询分析器中执行:
    exec sp_attach_single_file_db 'DB_Name','C:\Program Files\Microsoft SQL Server\MSSQL\Data\DB_Name.MDF'
    4、如果上一步成功,将步骤2中改名后的文件删除。如果上一步不成功,改回原来的文件名,用sp_attach_db将数据库附加到服务器,然后用方法二。
    方法二
    6.X中
    DUMP TRANSACTION test2 with NO_LOG
    DUMP TRANSACTION test2 with TRUNCATE_ONLY
    将上面的语句多次执行,直到日志缩小。
    7.0和2000中
    backup log test2 with NO_LOG
    backup log test2 with TRUNCATE_ONLY
    DBCC SHRINKDATABASE(test2)
    将上面的语句多次执行,直到日志文件缩小。上面的方法治标不治本,标本兼治要用下面的方法。方法三:
    --6.X和7.0中改为日志处于截断模式,2000中恢复模型改为简单恢复
    exec sp_dboption 'test2','trunc. log on chkpt.','on'
    --7.0和2000中设为自动收缩,6.x中不用执行。
    exec sp_dboption 'test2','autoshrink','on'
    通常用于测试环境。方法四:
    --7.0中改为日志不处于截断模式,2000中恢复模型改为完全恢复
    exec sp_dboption 'test2','trunc. log on chkpt.','off'
    --7.0和2000中设为自动收缩,6.x中不用执行。
    exec sp_dboption 'test2','autoshrink','on'
    建立作业,每半个小时一次日志备份,每天一次完全数据库备份。
    7.0和2000中:在Log收缩到正常大小后,将autoshrink选项设置为off。
    通常用于真实环境。在产品化系统中将autoshrink选项设置为开启状态并非明智之举(除非您真的需要这样做),这是因为,当您的系统正在忙于完成其它任务时,autoshrink选项可能会同时启动,从而降低系统运行速度。然而,对于那些数据库管理员无暇估计并且数据库尺寸有可能在您毫无察觉的情况下超出控制范围的桌面或远程系统来说,开启这一选项却是一种非常有效的措施。
    收缩事务日志在下列情况下,日志文件的物理大小将减少: 
    *执行 DBCC SHRINKDATABASE 语句时。
    *执行引用日志文件的 DBCC SHRINKFILE 语句时。
    *自动收缩操作发生时。 日志收缩操作依赖于最初的日志截断操作。日志截断操作不减小物理日志文件的大小,但减小逻辑日志的大小,并将没有容纳逻辑日志任何部分的虚拟日志标记为不活动。日志收缩操作会删除足够多的不活动虚拟日志,将日志文件减小到要求的大小。按下面任一方式控制事务日志的大小: 
    *在维护日志备份序列时,调度 BACKUP LOG 语句按间隔发生,以使事务日志不致增长到超过预期的大小。
    *当不维护日志备份序列时,指定简单恢复模式。 详情请参考 MS SQL Server 2000 联机丛书:
    目录--> SQL Server构架-->数据库构架-->物理数据库构架-->事务日志构架-->收缩事务日志
    目录--> SQL Server构架-->数据库构架-->物理数据库构架-->事务日志构架-->截断事务日志
      

  2.   

    最开始我用的是OpenVMS(半知半解) 大侠的方法。结果弹出823错误。
    我再试试其它人的。。
    谢谢诸位了。谢谢!!
      

  3.   

    执行DBCC CHECKDB ('DBNAME')
    如果不行,需要检查你的磁盘了,再把文件拷贝过来再试.
      

  4.   

    如何恢复系统数据库? 
    关于系统数据库的恢复总结如下: 
      在SQL Server数据库中,系统信息存储在系统数据库中,主要的系统数据库包括: 
      master-从整体上控制用户数据库和SQL Server操作,在创建了任何用户定义的对象后,都要备份它
      model-为新数据库提供模版和原型 
      msdb-包含了有关作业、报警及操作员等信息如果包含系统数据库的介质变了,那么必须重建系统数据库,如果你仍然可以启动SQL Server服务,则可以通过RESTORE语句从系统数据库的备份中恢复数据库。 
      如果master坏了,不能启动系统,可以按照下面步骤进行恢复 
    1 重建系统数据库 运行c:\mssql7\binn\rebuildm.exe,按照提示进行即可,过程中需要系统数据库样本的路径,可在安装光盘中找到; 2 重建系统数据库后,启动SQL Server服务,用系统数据库的备份恢复数据库就行了通常恢复顺序为master->msdb->model 
    在恢复master的备份时要注意:必须在single user模式下进行,有以下几种方法进入单用户模式: 
    1 可以在命令行模式下输入sqlservr -c -f -m或者输入sqlservr -m 
    其中:-c 可以缩短启动时间,SQL Server 不作为Windows NT的服务启动 
    -f 用最小配置启动SQL Server 
    -m 单用户模式启动SQL Server 
    2 可以在控制面板-服务-MSSQLServer的启动参数中输入-c -f -m或者输入-m,点击开始 3 还有一种更灵活的启动方法:用存在注册表里的启动参数启动 
    在MSSQLServer项下添加项SingleUser,具体内容如下所示: 
    HKEY_LOCAL_MACHINE 
    \Software 
    \Microsoft 
    \MSSQLServer 
    \SingleUser 
    \Parameters 
    SQLArg0 : REG_SZ : -dC:\MSSQL7\DATA\MASTER.DAT 
    SQLArg1 : REG_SZ : -eC:\MSSQL7\LOG\ERRORLOG 
    SQLArg2 : REG_SZ : -lC:\MSSQL7\DATA\MASTLOG.DAT 
    SQLArg3 : REG_SZ : -m 
    在命令行下输入SQLServr -c -sSingleUser,注意:必须是在命令行下进入单用户模式后启动 Query Analyzer执行语句: 
    RESTORE DATABASE master form disk='c:\(具体的备份文件名)
    资料来源:China ASP
      

  5.   

    用命令exec sp_attach_single_file_db 'DB_Name','C:\Program Files\Microsoft SQL Server\MSSQL\Data\DB_Name.MDF'
    提示
    设备激活错误。物理文件名 'd:\Program Files\Microsoft SQL Server\MSSQL\data\DB_Name_Log.LDF' 可能有误。
    已创建名为 'd:\DB_Name_log.LDF' 的新日志文件。
      

  6.   

    各位大侠有什么好方法吗?
    在紧急模式下我用DBCC CHECKDB ('DBNAME',REPAIR_REBUILD)
    提示要求单用户,但是我已经改为单用户了。
    如果重新启动一次服务,数据库就又变成置疑了。
      

  7.   

    是不是已成功,如果没有,如果存在'd:\Program Files\Microsoft SQL Server\MSSQL\data\DB_Name_Log.LDF',请移走或改名,再执行
    exec sp_attach_single_file_db 'DB_Name','C:\Program Files\Microsoft SQL Server\MSSQL\Data\DB_Name.MDF'
      

  8.   

    我用单用户进去以后,单即数据库中的任何一项,例如表,出现不能用no lock方式扫描的错误提示。
    执行 dbcc checktable(sysindexes)
    提示:
    表错误: 分配页 (1:64704) 的 PFS_PAGE 页首结构值无效。类型为 0。请检查该页上的类型、对象 ID 和页 ID。
    DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。大家有什么好方法吗?
      

  9.   

    to foolishchao(亚超) 我的数据库前两个原因不可能。
    我觉得一定还有别的问题。可能是数据库的索引部分坏了。
    有没有一种方法可以用另外一个相同库的表结构覆盖一下,但是保留这个库的数据,
      

  10.   

    用数据库代换是最笨的法子,大多数情况下是不行的,因为在SQL管理器中的注册数据中对不上号,
    最好还是用数据库提供的重载,,
    sp_attach @dbname=,@filename1=,,,@filename2=....
    只要文件没坏,
    保你能行,,
    ,,,,,
      

  11.   

    DBCC CHECKDB ('DBNAME',NOINDEX)
      

  12.   

    exec:DBCC CHECKDB ('DBNAME',NOINDEX)
    提示:
    未能读取并闩锁页 (1:64456)(用闩锁类型 SH)。sysobjects 失败。
    谢谢OpenVMS(半知半解)
      

  13.   

    对不起,没看明白,你有a_data.mdf吗?不要创建同名的数据库不要覆盖,直接附加数据库,你创建的和原来的ID不一样MASTER里信息不同会置疑
    exec sp_detach_db
    exec sp_attach_single_file_db 附加后如果置疑一定是你原来拷贝时已经置疑或损坏。
    试试单用户启动用SP_RESETSTATUS    然后建立一个空间足够大的数据库,在把你的数据库文件恢复到新数据库中,截断日志缩小数据库再重起服务。
      

  14.   

    你在数据库置疑是有没有直接去修改sysdatabases表中的数据库状态,此方法可以一试,改完后重启服务。(先作多一个a_data.mdf的备份)
      

  15.   

    有人建议先  DBCC REBUILD_LOG('abc', ‘C:\Program Files\Microsoft SQL Server\MSSQL\Data\abc.ldf')我执行成功了,但是还是没有效果。希望你有用。
      

  16.   

    楼上的,DBCC有这条命令吗?请教!
      

  17.   

    dbcc是有关数据库配置的一条命令。
    use databasename
    go
    dbcc checkdb
      

  18.   

    chenlj188(菩提子) :有啊,我问的是微软的技术支持。而且也试过了,你有没有试过啊,。
    感谢大家的帮忙。我会开几个贴子送分的。以后大家有什么新的方法给我留言吧。
      

  19.   

    再送OpenVMS(半知半解) 和 foolishchao(亚超) 1人100分