zoukankan      html  css  js  c++  java
  • SQL Server 2014数据库日志故障处理

    SQL Server 2014 一个项目数据库做大数据量delete 长时间未完成,执行kill无响应后,运维人员对SQL Server进行了强制重启。重启后有时该数据库处于无法访问状态,再重启(关闭Server服务,等待3分钟后启动)有时可以访问数据库,但该库中与最初delete有关的几个数据表无法访问。执行任何DML、DDL操作,均处于被阻塞无响应的状态,阻塞源为SQL Server系统会话(状态为DB Startup)。该数据库状态为online,log_reuse_wait_desc状态为:CHECKPOINT 或 Active_Transaction


    最后通过停机后,删除物理日志文件,重建一个空的同名日志文件,附加后,rebuild log 解决。

    建议后续使用SQL Server 2016及以上版本,2014貌似有不少问题,或至少更新至SP3以上补丁。


    数据库SQL Server 2000如何修复置疑的数据库(日志损坏)

    use master

    sp_configure 'allow updates',1

    reconfigure with override


    exec sp_dboption @databasename, N'single', N'true'


    update sysdatabases set status=-32768 where dbid=db_id('换成自己数据库名');

    dbcc rebuild_log('换成自己数据库名', 'C:Program FilesMicrosoft SQL Server 2000Data数据库日志文件名.LDF')

    dbcc checkdb('换成自己数据库名')

    dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)

    dbcc checkdb(@databasename,REPAIR_REBUILD)


    exec sp_dboption @databasename, N'single', N'false'



    sql server 2005 日志损坏

    use master 
    declare @databasename varchar(255) 
    set @databasename='要恢复的数据库名称' 
    exec sp_dboption @databasename, N'single', N'true' --将目标数据库置为单用户状态 
    dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS) 
    dbcc checkdb(@databasename,REPAIR_REBUILD) 
    exec sp_dboption @databasename, N'single', N'false'--将目标数据库置为多用户状态 

    SQL Server 2008 R2 - Rebuild Log

    use master
    ALTER DATABASE [dbname] SET EMERGENCY
    ALTER DATABASE my_db SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    ALTER DATABASE my_db REBUILD LOG ON (NAME=my_db,FILENAME='C:MSSQLDatamy_db_log.ldf')
    DBCC CHECKDB ([dbname])
    ALTER DATABASE my_db SET MULTI_USER WITH ROLLBACK IMMEDIATE;



    SQL Server如何附加只有mdf的数据库文件

    有时候SQL Server意外断电会导致SQL Server的ldf日志文件丢失或者损坏,这个时候你如果直接附加mdf文件到SQL Server会失败,这里提供一个方法可以还原只有mdf的数据库文件,这里我们假设你要还原的数据库文件是YourDB.mdf

    1. 首先在SQL Server中创建一个同名的数据库,叫[YourDB]。
    2. 然后停止SQL Server的数据库引擎服务,拷贝原先的YourDB.mdf到你刚才新建的[YourDB]数据库的文件目录并覆盖之。
    3. 启动SQL Server的数据库引擎服务
    4. 之后你会发现[YourDB]这个数据在SQL Server的状态是(Recovery Pending)
    5. 依次执行下面脚本:
      ALTER DATABASE [YourDB] SET EMERGENCY
      DBCC checkdb([YourDB]) ALTER DATABASE [YourDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE DBCC CheckDB ([YourDB], REPAIR_ALLOW_DATA_LOSS) ALTER DATABASE [YourDB] SET MULTI_USER
    6. 之后就应该可以在SQL Server中正常使用和访问[YourDB]数据库了

    这个方法适合还原那些没有损坏的mdf数据库文件到Sql Server,但是如过你的mdf文件因为意外情况(比如服务器意外断电)导致其损坏,那这个方法还是不行。遇到这种情况只有通过像ApexSQL这样的专业工具来恢复数据了。

  • 相关阅读:
    LeetCode Minimum Path Sum
    第六章-2-数组练习
    第六章-1-数组练习
    第五章-for循环的练习
    第四章:if else switch使用
    第三章
    实训篇-JavaScript-打地鼠
    实训篇-Html-注册页面【简单】
    实训篇-Html-计算器
    实训篇-JavaScript-陶渊明去没去过桃花源
  • 原文地址:https://www.cnblogs.com/zhaoguan_wang/p/15124610.html
Copyright © 2011-2022 走看看