-
寒山
sql
数据库修复中心
/
出错状态
:
现象
1
:
数
据
库
p>
后
面
有
“
置
疑
”
字
样
,
查
看
< br>系
统
事
务
日
记
出
现
以
下
错
误
:
p>
错
误
1----
-----------------------------------------
错误
:
823
,严重度
:
24
,状态
: 2
I/O
error
23(
数
据
错
误
(
循
环
< br>冗
余
检
查
)
。
)
detected
during
read
at
offset
0x00
in
file
'D:
捷
< br>作
2008datatest_'.
错
误
2---------------------------------
------------
错误
:
3313
,严重度
:
21
,状态
: 2
恢复数据库
''
的日志中记录的操作时出错。出错位置在日志记录
ID (274:377:2)
。
错误
3-------------
--------------------------------
错误
:
3313
,严重度
:
21
,状态
: 2
Error while redoing logged operation in
database 'test'. Error at log record ID
(274:377:2).
数据库可以分离,但分离后无法附
加,附加时出现“
823
”号错误。
---------------------------
--------------------------------------------------
--------------------------------
微
软
公
司
SQL
联机从书解释
:
错误
823
严重级别
24
消息正文
在文件
''%4!''
的偏移量
%3!
处的
%2!
过程中,
检测到
I/O
错误
%1!
。
解
释
Microsoft?
SQL
Server?
在对某设备进行读或写请求时遇到
I/O
错误。该错误通常表明
磁盘问
题。
但是,
错误日志中在错误
823
之前记录的其它核心消息应指出涉及了哪个设备。
对策
检查该
设备的可访问性和状态。如果可能,执行硬件诊断并纠正问题。
从最新的数据
库备份还原损坏的文件。从数据库备份中还原应始终是修复已损坏数据库
的首选方法。
如果没
有备份或者检测到的错误是孤立的,
则
DBCC CHECKDB
的修复功能可能很有用。
然而,比起从备份中还原损坏的文件,可能使用
DBCC
CHECKDB
消耗的时
间更多,且可能
无法恢复全部数据。
p>
注意
??
如果使用修复子句运行
DBCC
CHECKDB
< br>时,问题没有得到纠正,或者不知道该
过程将如何影响数据,
请与主要的支持提供者联系。
出错原因
< br>:
通常这个问题是由于硬盘空
间不够
/
硬盘读写错误
/
忽然断电
(
停电
/
死机
),SQL
系统异常。
1.
日志文件被破坏
823
错误
----------------------
p>
日志文件被破坏的数据库文件,
通过如下方法附加上去后,
数据库里所有的表都不能访
问,提示错误
832
,请问要如何解决??
use
master go
sp_configure
'allow updates',1 go
reconfigure with override go
/*
注意输正确,如果输入后执行此
语句,并且下面显示
DBCC
执行完毕。如果
DBCC
输出了错误信息,请与系统管理员联系。
已将配置选项
'allow
updates'
从
0
改为
1
。请运行
RECONFIGURE
语句以安装。
说明执行正确,如果不显示以上信息,请检查是否有输错!
<
/p>
此语句是的作用是:设置
数据库允许直接操作系统表。
*/
update sysdatabases set
status=-32768 where
dbid=DB_ID('icyqshsf')
/*
设置数据库为紧急
修复模式。
*/
go
dbcc
rebuild_log('icyqshsf','e:Program
FilesMicrosoft
ServerMSSQLDataicyqshsf_') /*
重新数据库日志
(ldf)
文件。
下面显示
:
SQL
警告
:
数据库
'test'
的日志已重建。
已失去事务的一致性。
应运行
DBCC CHECKDB
以验
证物理一致性。
将必须重置数据库选项,并且可能需要删除多余的日志文件。
*/ go
dbcc checkdb('icyqshsf')/*
现在
检查有没有错误,再输入语法
下面显示
CHECKDB
发现了
0
个分配错误和
0
个一致性错误(在数据库
'tiger'
中)
。
p>
那说明第
6
步就建立成功没问题了,下面就
可以把
SQL
恢复模式了
*/ go
sp_dboption 'icyqshsf','dbo use
only','false' go
sp_configure 'allow updates',0 go
reconfigure with override
go
---------------------
2.
附加数据库文件时
,
提示
823
错误
----------------------
EXEC sp_configure 'allow
updates',1 RECONFIGURE WITH OVERRIDE /*
打开修改系统表的
开关
*/
update
sysdatabases set status = 32768 where name =
'
数据库名
' DBCC REBUILD_LOG
('
数
据库名
', 'E:
dzzdatabase dzz1204_' ) update sysdatabases set
status = 0 where name =
'
数
据库名
' restore
database
数据库名
WITH RECOVERY
EXEC sp_configure 'allow
updates',0 RECONFIGURE WITH OVERRIDE /*
关闭打开修改系统
表的开关
*/
3
因为停
电等原因造成
MSSQL
数据库
,
p>
提示
823
错误
---------------------- USE MASTER GO
sp_dboption 'databaseName',
'single user', 'true' Go
DBCC CHECKDB('databaseName',
REPAIR_REBUILD) Go
USE
databaseName go
exec sp_msforeachtable 'DBCC
CHECKTABLE('''?''',REPAIR_REBUILD)' go
sp_dboption 'databaseName', 'single
user', 'false' Go
如果还不行,可以采用允许丢失数据
的方式修复,如下:
USE MASTER GO
sp_dboption 'databaseName',
'single user', 'true' Go
DBCC CHECKDB('databaseName',
REPAIR_ALLOW_DATA_LOSS) Go
USE
databaseName go
exec sp_msforeachtable 'DBCC
CHECKTABLE('''?''',REPAIR_REBUILD)' go
sp_dboption 'databaseName', 'single
user', 'false' Go
===
==================================================
===========
修
复
方
p>
法
恢复语句
:
--drop database wgy
--create database wgy
--RESTORE FILELISTONL
Y from
disk='F:' ALTER DATABASE wgy SET OFFLINE
WITH
ROLLBACK
IMMEDIATE
restore
database
wgy
from
disk='F:'
with
replace,
MOVE 'Syb_Data' TO 'D:', MOVE 'Syb_Log'
TO 'D:'
ALTER DATABASE
wgy SET ONLINE WITH ROLLBACK IMMEDIATE
方法一:
1.
新建一个同名的数据库
2.
再停掉
sql server
3.
用
md
f
和
ldf
数据库的文件覆盖掉这个新
建的同名数据库
4.
再重启
sql server
5.
此时打开企业管理器时新建的同
名数据库会出现置疑,先不管,执行下面的语句(注
意修改其中的数据库名
)
USE MASTER GO
SP_CONFIGURE
'ALLOW
UpdateS',1
RECONFIGURE
WITH
OVERRIDE
GOUpdate
SYSDATABASES SET STATUS =32768 Where
NAME='aaa' Go
sp_dboption
'aaa', 'single user', 'true' Go
DBCC CHECKDB('aaa') Go
update sysdatabases set status =28
where name='aaa' Go
sp_configure 'allow updates', 0
reconfigure with override Go
sp_dboption 'aaa', 'single user',
'true' Go
6.
完成
后一般就可以访问数据库中的数据了
,
这时
,
数据库本身一般还要问题
,
解决
办法是
,
利用
数据库的脚本创建一个新的数据库
,
并将数据导进去就行了
.
方法二:
1.
新建一个同名的数据库
2.
再停掉
sql server
3.
用
md
f
和
ldf
数据库的文件覆盖掉这个新
建的同名数据库
4.
再重启
sql server
5.
此时打开企业管理器时新建的同
名数据库会出现置疑,先不管,执行下面的语句(注
意修改其中的数据库名
) USE MASTER GO
SP_CONFIGURE 'ALLOW UpdateS',1
RECONFIGURE WITH OVERRIDE GO
Update SYSDATABASES SET STATUS =32768
Where NAME='aaa' Go
sp_dboption 'aaa', 'single user',
'true' Go
DBCC
REBUILD_LOG
('aaa',
ServerMSSQLDataaaa_' )
'C:Program
FilesMicrosoft
SQL
Go
update sysdatabases set status = 0
where name = 'aaa' Go
restore database aaa WITH RECOVERY
--
如果表有错的话用
DBCC
CHECKTABLE
来进行修复
go
DBCC
CHECKDB('aaa')Go
update sysdatabases set status =28
where name='aaa' Go
sp_configure 'allow updates', 0
reconfigure with override Go
sp_dboption 'aaa', 'single user',
'true' Go
6.
完成
后一般就可以访问数据库中的数据了
,
这时
,
数据库本身一般还要问题
,
解决
办法是
,
利用
数据库的脚本创建一个新的数据库
,
并将数据导进去就行了
.
方法三:
.
非置疑数据库修复技术
:
USE MASTER GO
sp_dboption 'aaa', 'single user',
'true' Go
--
无损修复
DBCC CHECKDB('aaa',
REPAIR_REBUILD)
--
有损修复
--
DBCC
CHECKDB('ke_2008',
repair_allow_data_loss)
WITH
TABLOCK
--
如果表有错的话用
DBCC
CHECKTABLE
来进行修复
Go
sp_dboption
'aaa', 'single user', 'false' Go
p>
方法四:
/*--
重置置疑状态
系统方法
:
如果
sql
server
因为磁盘驱动器不再有可用空间,而不能完成数据库的恢复,
那么
microsoft? sql
server? 2000
会返回错误
1105
并且将
sysdatabases
中的
status
列设为置疑。按下面的步骤解决这个问题:
执行
sp_resetstatus
。
语法为:
sp_resetstatus 'aaa' sp_resetstatus
'
数据库名
'
用
alter database
向数据库添加一个数据文件或日志文件。
停止并重新启动
sql serve
r
。
用新的数据文件或日志文件所提供的额外空间,
sql server
应该能完成数据库的恢复。
释放磁盘空间并且重新运行恢复操作。
sp_resetstatus
关
闭数据库的置疑标志,但是原封不动地保持数据库的其它选项。
--*/
方法五:
--
手工重置置疑状态
use master go
sp_configure 'allow updates',1
reconfigure with override go
declare @dbname varchar(30) set
@dbname='lqgs' if @@trancount > 0
print '
正在进行事务处理
,<
/p>
操作不能进行
' else if suser_id()!=1
print
'
你
不
是
系
统
管
理
员
(s
a),
不
能
进
行
此
操
作
'
else
if
not
exists(select
1
from
master..sysdatabases
where
name=@dbname)
print
'
你要操作的数据库不存在
'
else
if
not
exists(select 1 from
master..sysdatabases where name= @dbname and
status & 256 = 256)
print
'
你的数据库没有被置疑
' else begin
begin tran update
master..sysdatabases set status = status ^ 256
where name = @dbname if
@@error != 0 or
@@rowcount != 1 rollback tran else begin
commit tran
print '
操作成功
,
请重新启动
SQL' end end go
sp_configure 'allow updates', 1
reconfigure with override go
sp_resetstatus lqgs
方法六:重置置疑状态
如果
SQL Server
因为磁盘驱动器不再有可用空间,而不能完成数据库的恢复,那么
Microsoft? SQL Server? 2000
会返回错误
1105
并且将
sysdatabases
中的
status
列设为置疑。按下面的步骤解决这个问题:
1..
执行
sp_resetstatus
。
2..
用
Alter
DATABASE
向数据库添加一个数据文件或日志文件。
3..
停止并重新启动
SQL Server
。
用新的数据文件或日志文件所提供的额外空间,
SQL
Server
应该能完成数据库的恢
复。
4..
释放磁盘空间并且重新运行恢复操作。
sp_resetstatus
关
闭数据库的置疑标志,但是原封不动地保持数据库的其它选项。
注意
只有
在您的主要支持提供者指导下或有疑难解答建议的做法时,才可以使用
sp_resetstatus
。否
则,可能会损坏数据库。
由于该过程修改了系统表,系统管理
员必
须在创建这个过程前,启用系统表更新。要启
用更新,使用下面的过程:
USE master GO
sp_configure 'allow updates', 1 GO
RECONFIGURE WITH OVERRIDE
GO
过程创建后,立即禁用系统表更新:
sp_configure 'allow updates', 0 GO
RECONFIGURE WITH OVERRIDE
GO
只有系统管理员才能执行
sp_resetstatus
。执行该过程后,立即关闭
SQL Server
。
语法
为:
sp_resetstatus aaa
下面的例子将关闭
PRODUCTION
数据库的置疑标志。
sp_resetstatus
PRODUCTION
下
面是结果集:
Database 'PRODUCTION'
status reset!
WARNING: You
must reboot SQL
Server prior to
accessing this
database! sp_resetstatus
存
储过程代码
-
-
-
-
-
-
-
-
-
上一篇:上海版牛津英语翻译三年级下
下一篇:数据库异常恢复办法