SQL Server 紧急状态下的数据库恢复
背景:由于服务器硬盘损坏,服务器异常关机。重新进入后,数据库为质疑状态。(数据库名字上面有个感叹号,连接不了)
经过无数次的百度以及大佬们的指点下,终于成功恢复,下面来说一下方法。
第一种:
1、在服务器上停掉出问题的数据库服务,把.mdf数据库文件和.ldf日志文件拷贝至本地。
2、本地新建一个同名数据库,找到文件地址,停掉sql服务后。把.mdf文件删掉(可以也把.ldf也删掉,但删不删除我都试过了,最后都会重新生成一个新的.ldf的文件,所以这里没啥特别要注意的地方),再把服务器上拷贝的.mdf文件粘贴到该路径下面。实际上就是替换一下。
3、开启sql服务,此时数据库还是不能用,执行下面指令,使数据库进入紧急状态
alter database 出问题的数据库的名字 set emergency
(设置完后可以弄一下停止,重启sql服务,主要是看了很多答案,有的说弄一下,我只是跟风,不重启sql服务也行吧,反正我重启了)
4、执行下面指令,使数据库进入单用户模式
alter database 出问题的数据库的名字 set single_user
5.1、检查并重建日志文件
dbcc checkdb('出问题的数据库的名字',REPAIR_ALLOW_DATA_LOSS)
(我数据库8.5G,我大概跑了30分钟,另外一个配置好一点电脑跑了10多分钟,这一步就耐心等候就好了)
5.2、进行修复。如果没有错误,可以跳过。(我ldf文件没删,就报什么文件不匹配,我感觉一般都会报错,用下面的命令再执行一下,这个时候又得耐心的等候了)
dbcc checkdb('出问题的数据库的名字',REPAIR_REBUILD)
6、最后恢复成多用户模式
alter database 出问题的数据库的名字 set multi_user
然后就看脸了,刷新一下数据库,状态变为正常就大功搞成了!
第二种:
上面一种是mdf文件损坏成都可能很小,有的时候并不能成功。(我一个大佬朋友就试过,没能成功恢复)
所以这个时候就看能不能抢修数据了,一般数据库都建了维护计划,会自动备份。这个时候利用这个备份文件把数据库还原,想办法恢复当天的数据就可以了。
第一种方法中,紧急状态下数据是可以读的,所以可以通过bcp查询需要的数据导出,再导入到备份的数据上。
导出:
bcp "SELECT * from stcjoblog.dbo.t_Step WHERE s_AddTime > '2019-03-05 00:00:00' AND s_AddTime < '2019-03-05 14:00:00'" queryout E:\data_2.txt -c -t "|" -r \n -U sa -P "123456"
上面应该很清晰了,stcjoblog.dbo.t_Step 指定数据库和表,后面条件可以忽略。根据实际情况自己查
E:\data_2.txt 指定导出的路径及文件名
-U sa -P "123456" sql server 连接的用户
导入:
bcp stcjoblog.dbo.t_Step in D:\data_2.txt -b 5000 -c -t "|" -r \n -U sa -P "123456"
这个与上面差不多,就不解释了。
忘记说了,这需要用cmd运行。
会提示数据条数成功与否,基本上就是这样!
给我指点迷津的原文地址:https://www.2cto.com/database/201209/154614.html
SQL Server 紧急状态下的数据库恢复的更多相关文章
- sql server紧急状态下登录脚本
--打开xp_cmdshell功能 EXEC [sys].[sp_configure] @configname = 'xp_cmdshell', -- varchar(35) @configv ...
- SQL Server中使用msdb数据库的存储过程sp_delete_backuphistory和sp_delete_database_backuphistory来删除备份和恢复历史数据
根据微软文档对sp_delete_backuphistory存储过程的介绍,SQL Server在每次备份和恢复数据库后,会向msdb系统数据库的备份和恢复历史表写入数据,如果SQL Server经常 ...
- Sql Server来龙去脉系列之四 数据库和文件
在讨论数据库之前我们先要明白一个问题:什么是数据库? 数据库是若干对象的集合,这些对象用来控制和维护数据.一个经典的数据库实例仅仅包含少量的数据库,但用户一般也不会在一个实例上创建太多 ...
- sql server mdf碎片级数据库修复,数据库碎片级提取
sql server mdf碎片级数据库修复,数据库碎片级提取 大家都知道MDF数据库文件一般都比较大,在磁盘中往往被存放到不连续的逻辑簇中,久而久之就形成了文件碎片,当文件被误删除或者格式化后, ...
- SQL Server 2008下日志清理方法 2
SQL Server 2008下日志清理方法 (2011-07-14 10:30:45) 转自 http://blog.sina.com.cn/s/blog_4bdd3d0b0100wfvq.html ...
- SQL Server in Docker - 还原数据库
SQL Server in Docker 还原数据库 上一会演示了如果在Docker环境下安装SQL Server,这次我们来演示下如何还原一个数据库备份文件到数据库实例上. 使用winscp上传ba ...
- MySQL&SQL server&Oracle&Access&PostgreSQL数据库sql注入详解
判断数据库的类型 当我们通过一些测试,发现存在SQL注入之后,首先要做的就是判断数据库的类型. 常用的数据库有MySQL.Access.SQLServer.Oracle.PostgreSQL.虽然绝大 ...
- SQL Server获取下一个编码字符实现继续重构与增强
我在SQL Server获取下一个编码字符实现的博文中,虽然实现了这个问题,但是感觉维护起来比较麻烦,例如如果调整编码字符串的固定长度,就需要变更三个函数,这样的为何成本确实比较大.面向对象编 ...
- SQL Server 重新初始化系统数据库中的单引号问题
在最近的数据库跨机房迁移中,由于硬件的限制,需要滚动式地将数据库一台台迁移到新机房,先在新机房搭建一个新环境,将数据迁移过去,再将旧机房的机器下架搬到新机房,重新配置后用于下一轮的升级,重新配置过程中 ...
随机推荐
- windows server 2008 远程桌面连接数修改--无限连接
1.开启远程桌面 我的电脑 | 属性 | 远程设置 | 远程 | 进允许运行使用网络级别身份验证的远程桌面的计算机连接(更安全)(N)
- HAproxy-1.6.X 安装部署
1. 源码包下载及安装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 root@iZ23tsilmb7Z:/usr/local ...
- 二叉树的最大/小/平衡 深度 depth of binary tree
[抄题]: 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的距离. [思维问题]: [一句话思路]: 分合法的定义 [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况 ...
- OC -网络请求 - NSURLConnection - POST
#import "ViewController.h" @interface ViewController () @end @implementation ViewControlle ...
- discuz回贴通知插件实现-发送邮件
通过discuz的sendmail()来发送邮件 //引入发送邮件的函数文件 include libfile('function/mail'); //设置收件人地址,标题,内容发送邮件 sendmai ...
- 纯净版Windows7系统迅雷下载路径
windows 7 旗舰版64位------------------- Windows 7 Ultimate (x64) - DVD (Chinese-Simplified) 详细信息 文件名 ...
- PythonQt在windows下的编译
笔者最近在做Qt方面的开发工作,然后需要用到脚本程序对程序内部进行扩展,就很自然的想到了Python,度娘一下发现了一款神器,也就是今天给大家介绍的主角:PythonQt 今天首先给大家介绍下Pyth ...
- PAT 1003 我要通过!(20)(代码+思路)
1003 我要通过!(20)(20 分)提问 "答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于PAT的"答案正确"大派送 -- 只要读入的字符串满足下 ...
- 20172325 2017-2018-2 《Java程序设计》第八周学习总结
20172325 2017-2018-2 <Java程序设计>第八周学习总结 教材学习内容总结 1.关于绑定 绑定:在执行程序时产生一个请求事件,需要执行一段代码来来完成方法调用,即一个方 ...
- cmake 头文件 库文件 链接库
原文地址:http://www.cnblogs.com/binbinjx/p/5626916.html 1. 添加头文件目录INCLUDE_DIRECTORIES 语法: include_direct ...