|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
mysql使用内部操作字符集gbk来进行操作,即执行"SELECT*FROMtestWHEREname=xxxor1=1/*LIMIT1";从而注入成功恢复|数据|数据库
Theinformationinthisarticleappliesto:
-MicrosoftSQLServer7.0,2000
数据库日记文件丧失时的恢复步骤RevisionHistory:
Version
Date
Creator
Description
1.0.0.1
2003-3-25
郑昀
草稿
ImplementationScope:
本文是用于向MicrosoftSQLServer保护职员形貌我误删除数据库的事件日记文件(.ldf)以后,怎样经由各类实验,从头恢单数据库的。
本文面向的读者是数据库保护职员。
Disclaimers:
本文档所包括的信息代表了在公布之日,郑昀对所会商成绩确当前意见。郑昀不包管所给信息在公布之日今后的正确性。
本文档仅供参考。
用户必需恪守一切合用的版权法。在不合错误版权法所划定的权力加以限定的情形下,如未失掉郑昀明白的书面允许,不得出于任何目标、以任何情势或手腕(电子的、机器的、影印、录制等等)复制、传布本文的任何部分,也不得将其存储或引进到检索体系中。
持续浏览之前,我们假定您熟习以下常识:
nMicrosoftSQLServer
关头词:
EmergencyMode、DBCCCHECKDB、DTS
参考材料清单:
称号
作者
编号
公布日期
《当SQLServer数据库溃散时怎样恢复?》
怡红令郎
《SQLServer非一般删除日记文件(ldf)恢复办法》
_Rambo
事变的原因
今天,体系办理员告知我,我们一个外部使用数据库地点的磁盘空间不敷了。我注重到数据库事务日记文件XXX_Data.ldf文件已增加到了3GB,因而我决意减少这个日记文件。经由压缩数据库等操纵未果后,我犯了一个自进进行业以来的最年夜最愚昧的毛病:居然误删除这个日记文件!厥后我看到一切论及数据库恢复的文章上都说道:“不管怎样都要包管数据库日记文件存在,它相当主要”,乃至微软乃至有一篇KB文章讲怎样只靠日记文件恢单数据库的。我真是不晓得我当时候是怎样想的?!
这下子坏了!这个数据库连不上了,企业办理器在它的中间写着“(置疑)”。并且最要命的,这个数据库历来没有备份了。我独一找失掉的是迁徙半年前的别的一个数据库服务器,使用却是能用了,可是少了很多纪录、表和存储历程。真但愿这只是一场恶梦!
没无效果的恢复步骤附加数据库
_Rambo讲过被删除日记文件中不存在举动日记时,能够这么做来恢复:
1,分别被置疑的数据库,可使用sp_detach_db
2,附加数据库,可使用sp_attach_single_file_db
可是,很遗憾,实行以后,SQLServer质疑数据文件和日记文件不符,以是没法附加数据库数据文件。
DTS数据导出
不可,没法读取XXX数据库,DTSWizard呈报说“初始化高低文产生毛病”。
告急形式
怡红令郎讲过没有日记用于恢复时,能够这么做:
1,把数据库设置为emergencymode
2,从头创建一个log文件
3,把SQLServer从头启动一下
4,把使用数据库设置成单用户形式
5,做DBCCCHECKDB
6,假如没有甚么年夜成绩就能够把数据库形态改归去了,记得别忘了把体系表的修正选项关失落
我理论了一下,把使用数据库的数据文件移走,从头创建一个同名的数据库XXX,然后停失落SQL服务,把本来的数据文件再掩盖返来。以后,依照怡红令郎的步骤走。
可是,也很遗憾,除第2步以外,其他步骤实行十分乐成。惋惜,重启SQLServer以后,这个使用数据库仍旧是置疑!
不外,让我欣喜的是,这么做以后,却是可以Select数据了,让我年夜出一口吻。只不外,组件利用数据库时,呈报说:“产生毛病:-2147467259,未能在数据库XXX中运转BEGINTRANSACTION,由于该数据库处于躲避恢复形式。”
终极乐成恢复的全体步骤设置数据库为告急形式
ü停失落SQLServer服务;
ü把使用数据库的数据文件XXX_Data.mdf移走;
ü从头创建一个同名的数据库XXX;
ü停失落SQL服务;
ü把本来的数据文件再掩盖返来;
ü运转以下语句,把该数据库设置为告急形式;
运转“UseMaster
Go
sp_configureallowupdates,1
reconfigurewithoverride
Go”
实行了局:
DBCC实行终了。假如DBCC输入了毛病信息,请与体系办理员接洽。
已将设置选项allowupdates从0改成1。请运转RECONFIGURE语句以安装。
接着运转“updatesysdatabasessetstatus=32768wherename=XXX”
实行了局:
(所影响的行数为1行)
ü重启SQLServer服务;
ü运转以下语句,把使用数据库设置为SingleUser形式;
运转“sp_dboptionXXX,singleuser,true”
实行了局:
命令已乐成完成。
ü做DBCCCHECKDB;
运转“DBCCCHECKDB(XXX)”
实行了局:
XXX的DBCC了局。
sysobjects的DBCC了局。
工具sysobjects有273行,这些行位于5页中。
sysindexes的DBCC了局。
工具sysindexes有202行,这些行位于7页中。
syscolumns的DBCC了局。
………
ü运转以下语句把体系表的修正选项关失落;
运转“sp_resetstatus"XXX"
go
sp_configureallowupdates,0
reconfigurewithoverride
Go”
实行了局:
在sysdatabases中更新数据库XXX的条目之前,形式=0,形态=28(形态suspect_bit=0),
没有更新sysdatabases中的任何行,由于已准确地重置了形式和形态。没有毛病,未举行任何变动。
DBCC实行终了。假如DBCC输入了毛病信息,请与体系办理员接洽。
已将设置选项allowupdates从1改成0。请运转RECONFIGURE语句以安装。
ü从头创建别的一个数据库XXX.Lost;
DTS导出导游
ü运转DTS导出导游;
ü复制源选择EmergencyMode的数据库XXX,导进到XXX.Lost;
ü选择“在SQLServer数据库之间复制工具和数据”,试了屡次,仿佛不可,只是复制过去了一切表布局,可是没无数据,也没有视图和存储历程,并且DTS导游最初呈报复制失利;
ü以是最初选择“从源数据库复制表和视图”,可是厥后发明,如许老是只能复制一部分表纪录;
ü因而选择“用一条查询指定要传输的数据”,缺哪一个表纪录,就导哪一个;
ü视图和存储历程是实行SQL语句增加的。
如许,XXX.Lost数据库就能够交换本来的使用数据库了。
Writtenbyzhengyun@tomosoft.com
MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQLAB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。 |
|