「SQL2000数据库MDF损坏修复」.doc_第1页
「SQL2000数据库MDF损坏修复」.doc_第2页
「SQL2000数据库MDF损坏修复」.doc_第3页
「SQL2000数据库MDF损坏修复」.doc_第4页
免费预览已结束,剩余9页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

sql server 2000文件中,ldf损坏了,但mdf还在,总结一下恢复方法:1)先及时把原来的数据库文件(如test.mdf)备份到其他地方2) 停掉服务器3) 删除这个test.mdf4) 重新建立一个test同名数据库5)删除这个新建立的test数据库的test.ldf文件,并用开始备份好的test.mdf文件覆盖这个新建立的test.mdf文件6)启动数据库服务器。此时会看到数据库test的状态为“置疑”。这时候不能对此数据库进行任何操作。 .设置数据库允许直接操作系统表。此操作可以在SQL Server Enterprise Manager里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”7) 设置test为紧急修复模式update sysdatabases set status=-32768 where dbid=DB_ID(test)此时可以在SQL Server Enterprise Manager里面看到该数据库处于“只读置疑脱机紧急模式”可以看到数据库里面的表,但是仅仅有系统表8 下面执行真正的恢复操作,重建数据库日志文件dbcc rebuild_log(test,C:Program FilesMicrosoft SQL ServerMSSQLDatatest_log.ldf)执行过程中,如果遇到下列提示信息:服务器: 消息 5030,级别 16,状态 1,行 1未能排它地锁定数据库以执行该操作。DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQL Server Enterprise Manager打开了test库的系统表,那么退出SQL Server Enterprise Manager就可以了。正确执行完成的提示应该类似于:警告: 数据库 test 的日志已重建。已失去事务的一致性。应运行 DBCC CHECKDB 以验证物理一致性。将必须重置数据库选项,并且可能需要删除多余的日志文件。DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。此时打开在SQL Server Enterprise Manager里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库里面的用户表了。9 .验证数据库一致性dbcc checkdb(test)10 .设置数据库为正常状态sp_dboption test,dbo use only,false如果没有出错,那么恭喜,现在就可以正常的使用恢复后的数据库啦。11 最后一步,我们要将步骤E中设置的“允许对系统目录直接修改”一项恢复-以下是邹老大写的,楼主可以参考下SQL code USE master -创建数据库 CREATE DATABASE db ON PRIMARY( NAME=db_data, FILENAME= c:db_data.mdf), FILEGROUP db_fg1( NAME = db_fg1_data, FILENAME = c:db_fg1_data.ndf),FILEGROUP db_fg2( NAME = db_fg2_data, FILENAME = c:db_fg2_data.ndf) LOG ON( NAME=db_log, FILENAME =c:db.ldf) GO -创建表 CREATE TABLE db.dbo.ta(id int) ON PRIMARY CREATE TABLE db.dbo.tb(id int) ON db_fg1 CREATE TABLE db.dbo.tc(id int) ON db_fg2 INSERT db.dbo.tb SELECT id FROM sysobjects GO-做文件组备份 BACKUP DATABASE db FILEGROUP=db_fg1 TO DISK=c:db_fg1.bak WITH FORMAT -备份后,再做数据处理 INSERT db.dbo.ta SELECT id FROM sysobjects GO /*-下面演示了破坏数据文件的处理,这些操作在操作系统中进行 1. 停止SQL Server服务(msqlserver服务) 2. 删除文件 c:db_fg1_data.ndf (模拟破坏) 3. 重新SQL Server服务,此时数据库DB置疑 -*/ GO -下面演示了如何恢复数据 -首先要备份当前日志 BACKUP LOG db TO DISK=c:db_log.bak WITH FORMAT,NO_TRUNCATE -利用文件组备份恢复破坏的文件 RESTORE DATABASE db FILEGROUP=db_fg1 FROM DISK=c:db_fg1.bak WITH NORECOVERY -还原到日志点 RESTORE LOG db FROM DISK=c:db_log.bak WITH RECOVERY -显示已经恢复的数据 SELECT COUNT(*) FROM db.dbo.tb SELECT COUNT(*) FROM db.dbo.ta GO -删除测试 DROP DATABASE dbMSSQL数据库损坏的修复命令DBCC简介DBCC命令能对数据库进行维护,重点介绍内容:一、CHECKALLOC 磁盘空间一致性二、CHECKCATALOG 系统表一致性三、CHECKCONSTRAINTS约束完整性四、CHECKDB 结构完整性五、CHECKTABLE 页的完整性六、DBREINDEX 索引七、INDEXDEFRAG 整理索引碎片八、SHRINKDATABASE 释放空间九、SHRINKFILE 释放文件空间十、HELP 语句的语法信息一、DBCC CHECKALLOC检查指定数据库的磁盘空间分配结构一致性。语法DBCC CHECKALLOC(database_name , NOINDEX|REPAIR_ALLOW_DATA_LOSS|REPAIR_FAST|REPAIR_REBUILD )WITHALL_ERRORMSGS|NO_INFOMSGS|,TABLOCK , ESTIMATEONLY显示需要的临时空间tempdb 例:use ufdata_999_2001goALTER DATABASE ufdata_999_2001 SET SINGLE_USER-SQL7.0下同(sp_dboption ufdata_999_2001,single_user, true)goDBCC CHECKALLOC(ufdata_999_2001 , REPAIR_REBUILD) with NO_INFOMSGSgoALTER DATABASE ufdata_999_2001 SET MULTI_USER-SQL7.0(sp_dboption ufdata_999_2001,single_user, false)二、DBCC CHECKCATALOG检查指定数据库中的系统表内及系统表间的一致性。语法DBCC CHECKCATALOG (database_name ) WITH NO_INFOMSGS 例:DBCC CHECKCATALOG (ufdata_999_2001 ) with NO_INFOMSGS三、DBCC CHECKCONSTRAINTS检查指定表上的指定约束或所有约束的完整性。语法DBCC CHECKCONSTRAINTS( table_name | constraint_name ) WITH ALL_ERRORMSGS| ALL_CONSTRAINTS 例:DBCC CHECKCONSTRAINTS with ALL_CONSTRAINTS四、 DBCC CHECKDB检查指定数据库中的所有对象的分配和结构完整性。语法DBCC CHECKDB( database_name , NOINDEX | REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST |REPAIR_REBUILD ) WITH ALL_ERRORMSGS , NO_INFOMSGS , TABLOCK , ESTIMATEONLY , PHYSICAL_ONLY 例:use ufdata_999_2001goALTER DATABASE ufdata_999_2001 SET SINGLE_USERDBCC CHECKDB (ufdata_999_2001, REPAIR_REBUILD) with NO_INFOMSGSgoALTER DATABASE ufdata_999_2001 SET MULTI_USERgo五、DBCC CHECKTABLE检查指定表或视图的数据、索引及 text、ntext 和 image 页的完整性。语法DBCC CHECKTABLE( table_name | view_name , NOINDEX | index_id|REPAIR_ALLOW_DATA_LOSS|REPAIR_FAST | REPAIR_REBUILD ) WITH ALL_ERRORMSGS| NO_INFOMSGS , TABLOCK , ESTIMATEONLY , PHYSICAL_ONLY 例:use ufdata_999_2001goALTER DATABASE ufdata_999_2001 SET SINGLE_USERgoDBCC CHECKTABLE (code, REPAIR_REBUILD) with NO_INFOMSGSgoALTER DATABASE ufdata_999_2001 SET MULTI_USER六、DBCC DBREINDEX重建指定数据库中表的一个或多个索引。语法DBCC DBREINDEX( database.owner.table_name , index_name , fillfactor ) WITH NO_INFOMSGS 例:DBCC DBREINDEX (code) with NO_INFOMSGS七、DBCC INDEXDEFRAG整理指定的表或视图的聚集索引和辅助索引碎片。语法DBCC INDEXDEFRAG ( database_name | database_id | 0 , table_name | table_id |view_name | view_id , index_name | index_id ) WITH NO_INFOMSGS 例:DBCC INDEXDEFRAG (ufdata_999_2001,code,ccode_name) with NO_INFOMSGS八、DBCC SHRINKDATABASE释放指定数据库中的数据文件空间。语法(SQL7.0用SHRINKDB)DBCC SHRINKDATABASE( database_name , target_percent , NOTRUNCATETRUNCATEONLY空间释放给操作系统, target_percent无效 )例:DBCC SHRINKDATABASE (ufdata_999_2001,10)九、DBCC SHRINKFILE释放相关数据库的指定数据文件或日志文件空间。语法DBCC SHRINKFILE( file_name | file_id , target_size | , EMPTYFILE | NOTRUNCATE | TRUNCATEONLY )例:USE ufdata_999_2001SP_HELPFILE 查看数据库有关信息后修改下面的语句后执行即可GoDBCC SHRINKFILE (ufmodel, 70)DBCC SHRINKFILE (ufmodel_log, 7)GO十、DBCC HELP返回指定的 DBCC 语句的语法信息。语法DBCC HELP ( dbcc_statement | dbcc_statement_var | ? )例:Dbcc help(?)KCMC_DB 的 DBCC 结果。sysobjects 的 DBCC 结果。对象 sysobjects 有 96 行,这些行位于 2 页中。sysindexes 的 DBCC 结果。对象 sysindexes 有 105 行,这些行位于 4 页中。syscolumns 的 DBCC 结果。对象 syscolumns 有 552 行,这些行位于 10 页中。systypes 的 DBCC 结果。对象 systypes 有 26 行,这些行位于 1 页中。syscomments 的 DBCC 结果。对象 syscomments 有 133 行,这些行位于 15 页中。sysfiles1 的 DBCC 结果。对象 sysfiles1 有 2 行,这些行位于 1 页中。syspermissions 的 DBCC 结果。对象 syspermissions 有 18 行,这些行位于 1 页中。sysusers 的 DBCC 结果。对象 sysusers 有 12 行,这些行位于 1 页中。sysproperties 的 DBCC 结果。对象 sysproperties 有 0 行,这些行位于 0 页中。sysdepends 的 DBCC 结果。对象 sysdepends 有 347 行,这些行位于 2 页中。sysreferences 的 DBCC 结果。对象 sysreferences 有 11 行,这些行位于 1 页中。sysfulltextcatalogs 的 DBCC 结果。对象 sysfulltextcatalogs 有 0 行,这些行位于 0 页中。sysfulltextnotify 的 DBCC 结果。对象 sysfulltextnotify 有 0 行,这些行位于 0 页中。sysfilegroups 的 DBCC 结果。对象 sysfilegroups 有 1 行,这些行位于 1 页中。T_AdmCardList 的 DBCC 结果。对象 T_AdmCardList 有 124 行,这些行位于 1 页中。T_CardList2 的 DBCC 结果。对象 T_CardList2 有 18781 行,这些行位于 302 页中。dtproperties 的 DBCC 结果。对象 dtproperties 有 0 行,这些行位于 0 页中。T_CardList 的 DBCC 结果。对象 T_CardList 有 37114 行,这些行位于 413 页中。T_StuData 的 DBCC 结果。服务器: 消息 8964,级别 16,状态 1,行 1表错误: 对象 ID 1061578820。text、ntext 或 image 节点(位于页 (1:27399),槽 4,文本 ID 4472373248)未被引用。对象 T_StuData 有 549 行,这些行位于 150 页中。T_StuData2 的 DBCC 结果。对象 T_StuData2 有 160 行,这些行位于 14 页中。CHECKDB 发现了 0 个分配错误和 1 个一致性错误(在表 T_StuData2 中,该表的对象 ID 为 1061578820)。T_CardCategory 的 DBCC 结果。对象 T_CardCategory 有 3 行,这些行位于 1 页中。T_CardTypeID 的 DBCC 结果。对象 T_CardTypeID 有 7 行,这些行位于 1 页中。T_CardTypeList 的 DBCC 结果。对象 T_CardTypeList 有 10 行,这些行位于 1 页中。T_EmpData 的 DBCC 结果。对象 T_EmpData 有 430 行,这些行位于 17 页中。T_EmpData2 的 DBCC 结果。对象 T_EmpData2 有 0 行,这些行位于 1 页中。T_Print 的 DBCC 结果。对象 T_Print 有 0 行,这些行位于 1 页中。T_BankBranch 的 DBCC 结果。对象 T_BankBranch 有 1 行,这些行位于 1 页中。T_School 的 DBCC 结果。对象 T_School 有 2 行,这些行位于 1 页中。CHECKDB 发现了 0 个分配错误和 1 个一致性错误(在数据库 KCMC_DB 中)。repair_allow_data_loss 是最低的修复级别(对于由 DBCC CHECKDB (KCMC_DB ) 发现的错误而言)。DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。sql2005中的备份要在sql2000中还原,首先在sql2005中还原,然后选择兼容sql2000(80),备份后再在sql2000种还原。用mdf和ldf来备份数据库,首先要分离数据库,右键备份数据库-任务-分离,对数据库分离,数据库的readonly要为false。分离后,在sql的data目录下找到要备份的mdf和ldf数据库。还原时选择附加数据库,选择对应的mdf和ldf文件,附加即可。要判断要附加的数据库是否为只读,如果是,要去掉只读属性。要附加的数据库文件即mdf和ldf文件的安全设置中设置user用户完全控制权限,即为数据库文件的属性,设置成功后才可以附加。否则会抱错,要附加的数据库为只读。要导出数据库脚本时,右键导出的数据库-任务-生成脚本以下是sql语句备份还原数据库:/*-备份数据库 -邹建 2003.10-*/ /*-调用示例 -备份当前数据库exec p_backupdb bkpath=c:,bkfname=db_DATE_db.bak -差异备份当前数据库exec p_backupdb bkpath=c:,bkfname=db_DATE_df.bak,bktype=DF -备份当前数据库日志exec p_backupdb bkpath=c:,bkfname=db_DATE_log.bak,bktype=LOG -*/ if exists (select * from dbo.sysobjects where id = object_id(Ndbo.p_backupdb) and OBJECTPROPERTY(id, NIsProcedure) = 1)drop procedure dbo.p_backupdbGO create proc p_backupdbdbname sysname=, -要备份的数据库名称,不指定则备份当前数据库bkpath nvarchar(260)=, -备份文件的存放目录,不指定则使用SQL默认的备份目录bkfname nvarchar(260)=, -备份文件名,文件名中可以用DBNAME代表数据库名,DATE代表日期,TIME代表时间bktype nvarchar(10)=DB, -备份类型:DB备份数据库,DF 差异备份,LOG 日志备份appendfile bit=1 -追加/覆盖备份文件asdeclare sql varchar(8000)if isnull(dbname,)= set dbname=db_name()if isnull(bkpath,)= set bkpath=dbo.f_getdbpath(null)if isnull(bkfname,)= set bkfname=DBNAME_DATE_TIME.BAKset bkfname=replace(replace(replace(bkfname,DBNAME,dbname),DATE,convert(varchar,getdate(),112),TIME,replace(convert(varchar,getdate(),108),:,)set sql=backup +case bktype when LOG then log else database end +dbname+ to disk=+bkpath+bkfname+ with +case bktype when DF then DIFFERENTIAL, else end+case appendfile when 1 then NOINIT else INIT endprint sqlexec(sql)go -/*-恢复数据库 -邹建 2003.10-*/ /*-调用示例-完整恢复数据库exec p_RestoreDb bkfile=c:db_20031015_db.bak,dbname=db -差异备份恢复exec p_RestoreDb bkfile=c:db_20031015_db.bak,dbname=db,retype=DBNORexec p_backupdb bkfile=c:db_20031015_df.bak,dbname=db,retype=DF -日志备份恢复exec p_RestoreDb bkfile=c:db_20031015_db.bak,dbname=db,retype=DBNORexec p_backupdb bkfile=c:db_20031015_log.bak,dbname=db,retype=LOG -*/ if exists (select * from dbo.sysobjects where id = object_id(Ndbo.p_RestoreDb) and OBJECTPROPERTY(id, NIsProcedure) = 1)drop procedure dbo.p_RestoreDbGO create proc p_RestoreDbbkfile nvarchar(1000), -定义要恢复的备份文件名dbname sysname=, -定义恢复后的数据库名,默认为备份的文件名dbpath nvarchar(260)=, -恢复后的数据库存放目录,不指定则为SQL的默认数据目录retype nvarchar(10)=DB, -恢复类型:DB完事恢复数据库,DBNOR 为差异恢复,日志恢复进行完整恢复,DF 差异备份的恢复,LOG 日志恢复filenumber int=1, -恢复的文件号overexist bit=1, -是否覆盖已经存在的数据库,仅retype为killuser bit=1 -是否关闭用户使用进程,仅overexist=1时有效asdeclare sql varchar(8000) -得到恢复后的数据库名if isnull(dbname,)=select sql=reverse(bkfile),sql=case when charindex(.,sql)=0 then sqlelse substring(sql,charindex(.,sql)+1,1000) end,sql=case when charindex(,sql)=0 then sqlelse left(sql,charindex(,sql)-1) end,dbname=reverse(sql) -得到恢复后的数据库存放目录if isnull(dbpath,)= set dbpath=dbo.f_getdbpath() -生成数据库恢复语句set sql=restore +case retype when LOG then log else database end+dbname+ from disk=+bkfile+ with file=+cast

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论