首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

使用如下方法附加,一个表丢失但在查询分析器可看到解决方案

2012-02-06 
使用如下方法附加,一个表丢失但在查询分析器可看到操作数据库突然发生错误,再次打开企业管理器,该数据库置

使用如下方法附加,一个表丢失但在查询分析器可看到
操作数据库突然发生错误,再次打开企业管理器,该数据库置疑,于是我就分离了数据库,但是我使用附加操作就不行了,说什么:19140:808:1错误.

然后我使用了如下的方法来附加数据库:

如果您的数据库文件是从其他计算机上复制过来的,那么很不幸,也许上述办法就行不通了。你也许会得到类似下面的错误信息      
    服务器:       消息       1813,级别       16,状态       2,行       1      
    未能打开新数据库       'test '。CREATE       DATABASE       将终止。      
    设备激活错误。物理文件名       'd:\test_log.LDF '       可能有误。      
    怎么办呢?别着急,下面我们举例说明恢复办法。      
    A.我们使用默认方式建立一个供恢复使用的数据库(如test)。可以在SQL       Server       Enterprise       Manager里面建立。      
    B.停掉数据库服务器。      
    C.将刚才生成的数据库的日志文件test_log.ldf删除,用要恢复的数据库mdf文件覆盖刚才生成的数据库数据文件test_data.mdf。      
    D.启动数据库服务器。此时会看到数据库test的状态为“置疑”。这时候不能对此数据库进行任何操作。      
    E.设置数据库允许直接操作系统表。此操作可以在SQL       Server       Enterprise       Manager里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。也可以使用如下语句来实现。      
    use       master      
    go      
    sp_configure       'allow       updates ',1      
    go          
    reconfigure       with       override      
    go      
    F.设置test为紧急修复模式      
    update       sysdatabases       set       status=-32768       where       dbid=DB_ID( 'test ')      
    此时可以在SQL       Server       Enterprise       Manager里面看到该数据库处于“只读\置疑\脱机\紧急模式”可以看到数据库里面的表,但是仅仅有系统表      
    G.下面执行真正的恢复操作,重建数据库日志文件      
    dbcc       rebuild_log( 'test ', 'C:\Program       Files\Microsoft       SQL       Server\MSSQL\Data\test_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使用”。此时可以访问数据库里面的用户表了。      


    H.验证数据库一致性(可省略)      
    dbcc       checkdb( 'test ')      
    一般执行结果如下:      
    CHECKDB       发现了       0       个分配错误和       0       个一致性错误(在数据库       'test '       中)。      
    DBCC       执行完毕。如果       DBCC       输出了错误信息,请与系统管理员联系。      
    I.设置数据库为正常状态      
    sp_dboption       'test ', 'dbo       use       only ', 'false '      
    如果没有出错,那么恭喜,现在就可以正常的使用恢复后的数据库啦。      
    J.最后一步,我们要将步骤E中设置的“允许对系统目录直接修改”一项恢复。因为平时直接操作系统表是一件比较危险的事情。当然,我们可以在SQL       Server       Enterprise       Manager里面恢复,也可以使用如下语句完成      
    sp_configure       'allow       updates ',0      
    go          
    reconfigure       with       override      
    go        


我执行完毕以后,我的一个表不见了,但是这个表我在查询分析器里头可以看到.

我在查询分析器里头输入:select   *   from   info_agency  

出来如下错误:

服务器:   消息   644,级别   21,状态   3,行   1
未能在索引页   (1:21180)   中找到   RID   '16d0b0e870100 '   的索引条目(索引   ID   0,数据库   'test ')。

连接中断


我该怎么办


[解决办法]
try


use 你的库名
go
exec sp_msforeachtable 'DBCC DBREINDEX( ' '? ' ') '

[解决办法]
看看這個帖子,應該對你有幫助。

http://access911.net/getnews/doc1.asp?mode=a&bid=005701&aid=4807676
[解决办法]
try


2 楼zjcxc(邹建)回复于 2004-11-18 09:14:18 得分 100--估计是表或数据库损坏,试试用下面的语句修复(注意修改库名)

USE MASTER
GO

sp_dboption '你的数据库名 ', 'single user ', 'true '
Go

DBCC CHECKDB( '你的数据库名 ', REPAIR_ALLOW_DATA_LOSS)
Go

USE 你的数据库名
go

exec sp_msforeachtable 'DBCC CHECKTABLE( ' '? ' ',REPAIR_ALLOW_DATA_LOSS) '
exec sp_msforeachtable 'DBCC DBREINDEX( ' '? ' ') '
go

sp_dboption '你的数据库名 ', 'single user ', 'false '
Go

[解决办法]
本人曾经用下面的步骤处理过类似的问题.--并且没发生文件丢失:
1, 试着在不同的文件夹新建同名数据库,
2,停用 sql server
3,并用刚要附加的 .mdf文件覆盖刚建的.mdf文件
4,重启sql
5,并执行下面的语句:
USE MASTER
GO
sp_configure 'ALLOW UPDATES ',1 RECONFIGURE WITH OVERRIDE
GO
UPDATE SYSDATABASES SET STATUS=32768 WHERE NAME= '数据库名 '
GO
SP_DBOPTION '数据库名 ', 'single user ', 'true '
go
dbcc checkdb( '数据库名 ')
go
update sysdatabases set status=28 where name= '数据库名 '
go
sp_configure 'allow updates ',0 reconfigure with override


go
sp_dboption '数据库名 ', 'single user ', 'false '

热点排行
Bad Request.