惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Secure Thoughts
罗磊的独立博客
T
The Blog of Author Tim Ferriss
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
Last Week in AI
Last Week in AI
美团技术团队
Google Online Security Blog
Google Online Security Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
D
Docker
G
Google Developers Blog
大猫的无限游戏
大猫的无限游戏
酷 壳 – CoolShell
酷 壳 – CoolShell
小众软件
小众软件
月光博客
月光博客
L
LINUX DO - 最新话题
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
W
WeLiveSecurity
H
Heimdal Security Blog
Vercel News
Vercel News
SecWiki News
SecWiki News
Forbes - Security
Forbes - Security
Blog — PlanetScale
Blog — PlanetScale
Google DeepMind News
Google DeepMind News
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
TaoSecurity Blog
TaoSecurity Blog
T
Troy Hunt's Blog
A
About on SuperTechFans
C
Check Point Blog
S
Security Affairs
Hacker News - Newest:
Hacker News - Newest: "LLM"
AI
AI
WordPress大学
WordPress大学
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Help Net Security
Help Net Security
博客园_首页
The Last Watchdog
The Last Watchdog
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
Engineering at Meta
Engineering at Meta
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
I
Intezer
K
Kaspersky official blog
M
MIT News - Artificial intelligence
J
Java Code Geeks
G
GRAHAM CLULEY
P
Palo Alto Networks Blog

博客园 - Dragon4

[转]PHP权重算法-用于游戏根据权限来随机物品 IIS7中如何配置Url重写 优化出来的bug:慎用static 数据库学习-索引设计准则 程序员八卦:十年前天大的秘密-相约1998 Blog搬家到此,文章导入完毕,发帖庆祝。 [导入]中文版IE7for XP SP2下载地址 [导入]VS2008中文版TS版下载地址 [导入]Flex builder3 Crack 下载地址 [导入]各浏览器CSS hack [导入]VS2005 WInform程序如何调用js [导入]HttpWebResponse与WebResponse的区别 [导入]WinForm程序如何等待多个线程执行完后提示用户? [导入]Vistual studio2008RTM版本发布,附正版序列号 [导入]Request.ServerVariables参考 [导入]APS.NET获取用户端真实IP [导入]透过LINQSQO看LINQ内部机理 [导入]奇怪的数据插入异常:传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。 [导入]Flex应用启动背后的故事
如何拯救你,我的数据-单个mdf文件恢复数据库小记
Dragon4 · 2009-03-04 · via 博客园 - Dragon4

人非圣贤,孰能无过!再怎么小心翼翼,也难免有失误的时候!

       看见ldf文件太大了,于是想着缩小一下,结果一不小心将其删掉了。这下惨了,数据库连不上、打不开,SELECTUPDATE是休想,更别提DELETE了。眼睁睁的看着数据库名字孤零零的显示在SQL Server Management Studio中,于心不忍,于是心血来潮将其删除。这样一来,无疑于雪上加霜。

       子曾日过:知之为知之,不知google之!无奈之下,google一把,相同情况出来不少,大体提供了2种方案:

1.       先分离再附加。看了一下,试了一下,发现此种情况已不适合于我,因为数据库都让我删了,只剩个数据文件。而此方案在日志文件被强行删除,数据文件还在,并且数据库未删除的情况下或许可以解决问题,有这种情况的兄弟可以一试以验证。对于俺,此种方案则弃置不用了。

相关T-SQL

EXEC   sp_detach_db   @dbname   =   'dbName'   
 
EXEC   sp_attach_single_file_db   @dbname   =   'dbName ',     
        
@physname   =   'c:\Program   Files\Microsoft   SQL   Server\MSSQL\Data\'dbName.mdf'

2.       新建同名数据库,使用原数据库文件覆盖后,强行修复。步骤如下

(1). 停止数据库服务,移走原数据库文件,启动数据库服务后新建同名数据库,生成的数据库文件名要与原数据库文件名相同。并且新数据库日志文件所在目录最好与原数据库日志文件所在目录相同。

(2). 停止数据库服务,将原数据库文件覆盖新数据库文件,重启数据库服务,此时发现数据库处于不可用状态。

(3). 执行如下T-SQL

USE MASTER  
GO  
SP_CONFIGURE 
'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE  
GO  
ALTER DATABASE DbName SET EMERGENCY  
GO 
sp_dboption 
'DbName''single user''true' 
GO 
DBCC CHECKDB('DbName','REPAIR_ALLOW_DATA_LOSS')  
GO 
ALTER DATABASE DbName SET ONLINE 
GO 
sp_configure 
'allow updates'0 reconfigure with override  
GO 
sp_dboption 
'DbName''single user''false' GO

其中DBCC CHECKDB('DbName','REPAIR_ALLOW_DATA_LOSS') 是关键,主要是数据校验。特别提醒的是,第二步要求新数据库日志文件与原数据库日志文件处于同一目录,就是因为这个语句,假如2者不在同一目录,并且原数据库日志文件所在目录下没有同名日志文件,则此语句执行不通过,数据库恢复也就不会成功。

此为鄙人在恢复过程中所遇到的问题,所幸根据error message加以分析后将新建的数据库日志附加copy一份到原数据库日志文件所在目录下。恢复成功后为了是数据文件与日志文件处于同一目录,将数据文件与日志文件copy到同一目录下后采用附加方式恢复。

灾后重建总结:

1.       数据库一定要建立备份任务。根据数据重要程度采取不同的备份策略。

2.       备份文件最好不要与数据库文件处于同一硬盘分区。使用数据库备份服务器最佳,当然,开发过程就免了。

3.       数据库文件与日志文件最好不要处于同一硬盘分区。

4.       在没有备份数据库的情况下,出现删除日志的情况,一定要保存好原数据库文件。进行恢复时使用原数据库文件副本进行恢复。

5.       但个mdf文件恢复数据库过程遇到的问题均有解决之道,关键在于对症下药。仔细分析error message,其实大部分无非是命令错误,或者命令执行过程错误。命令执行过程错误以路径问题最为常见。所以只有加以分析,开动脑筋,问题总会迎刃而解。

6.       切忌照葫芦画瓢,要做到具体情况具体分析,网上提供的解决方案有其适用的场景,要认真分析后,以免使用不当造成二次灾难。

7.       操作数据库一定要小心再小心,用写代码时的谨慎去操作数据库。