-
标题:
[MySQL]MSSQL
数据库
823
错误解决方法
出处:
时间:
Sat, 12 Apr 2008 10:12:27
+0000
作者:
ah011
地址:
/?193
内容:
1.
日志文件被破坏
823
错误
----------------------
日志文件被
破坏的数据库文件,
通过如下方法附加上去后,
数据库里所有的
表都
不能访问,提示错误
832
,请问
要如何解决??
use master
go
sp_configure 'allow
updates',1
go
reconfigure
with override
go
update
sysdatabases set status=-32768 where
dbid=DB_ID('linyi_pljy')
go
dbcc
rebuild_log('linyi_pljy','e:Program FilesMicrosoft
SQL
ServerMSSQLDatalinyi_pljy_')
go
sp_dboption
'linyi_pljy','dbo use only','false'
go
sp_configure 'allow updates',0
go
reconfigure
with override
go
---------------------
2.
附加数据库文件时
,
提示
823
错误
----------------------
(
1
)朋友单位有台电脑的数据库
ufdata_
001_2008
状态为置疑,我断开再附加
时提示如下图所示
说明,附加时失败,错误
823
。
<
/p>
原因分析:出现这种情况可能是由于电脑忽然断电或者异常关机造成的。
< br>
解决方法:在
SQL
企业管理
器中,新建同名数据库
ufdata_001_2008
,新建
库后
现有数据名称是
ufdata_001_
< br>和
ufdata_001_2008_
;
停止数据库,把损坏的数据库文件
< br>和
修改名称为
ufdata_0
01_
和
ufdata_001_2008_
< br>,并覆盖刚才新建数据库目
录下的数据,同时删除
ufd
ata_001_2008_
文件;
启动数据库服务,发现数据库名
ufdata_001_2008
后面有“置疑”字样;
打开
SQL
自带查询分析器,执行如下
SQL
语句
:
use master
go
exec
sp_configure
'allow
updates',1
RECONFIGURE
WITH
OVERRIDE /*
打
开修改系统表的开关
*/
go
update
sysdatabases
set
status=32768
where
name='ufdata_001_2008'
/*
设
置数据库状态
*/
go
DBCC REBUILD_LOG
('ufdata_001_2008','E:') /*
重建
p>
LDF
文件
*/
go
update sysdatabases set
status=0 where name='ufdata_001_2008' /*
重置数据库状态
*/
go
restore database ufdata_001_2008 WITH
RECOVERY /*
恢复数据库
*/
go
exec
sp_configure
'allow
updates',0
RECONFIGURE
WITH
OVERRIDE /*
关
闭打开修改系统表的开关
*/ <
/p>
执行以上语句后,
ufdata_001_2008
没有了置疑状态,数据可以正常读取了
(
2
)
use
master
go
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
数据库
,
提示
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
4.
数据库恢复资料
----------------------
SQL
Server
数据库备份有两种方式,一种是使用
BACKUP
DATABASE
将数据
库文件备份出去,
另外一种就是直接拷贝数据库文件
mdf
和日志文件
ldf
的方式。
下面将主要讨论一下后者的备
份与恢复。本文假定您能熟练使用
SQL Server
Enterprise Manager(SQL Server
企业管理器
)
和
SQL
Server Quwey
Analyser(SQL
Server
查询分析器
)
1
、正常的备份、恢复方式
正常方式下,
我们要备份一个数据库,
首先要先
将该数据库从运行的数据服务器
中断开,或者停掉整个数据库服务器,然后复制文件。<
/p>
卸下数据库的命令:
Sp_detach_db
数据库名
连接数据库的命令:
Sp_attach_db
或者
sp_att
ach_single_file_db
s_attach_db [@dbname
=] ′dbname′, [@filename1 =] ′filename_n′
[,...16]
sp_attach_single_file_db [@dbname =]
′dbname′, [@physname
=]
′physical_name′
使用此方法可以正确恢复
SQL
Sever7.0
和
SQL Server 2000
的数据库文件,
要
点是备份的时候一定要将
p>
mdf
和
ldf
两
个文件都备份下来,
mdf
文件是数据库数
据文件,
ldf
是数据库日志文件。
例子:
假设数据库为
test
,其数据文件为
test_
,日志文件为
test_
。下
面我们讨论一下如何备份、恢复该数据库。
卸下数据库:
sp_detach_db 'test'
连接数据库:
sp_attach_db
'test','C:Program FilesMicrosoft SQL
ServerMSSQLDatatest_','C:Program
FilesMicrosoft SQL
ServerMSSQLDatatest_'
sp_attach_single_file_db
'test','C:Program FilesMicrosoft SQL
ServerMSSQLDatatest_'
2
、只有
mdf
文件的恢复技术
由于种种原因,我们如果当时仅仅备份了
mdf
文件,那么恢复起来就是一件很
麻烦的事情了。
如果您的
mdf
文件是当前数据库产生
的,
那么很侥幸,
也许你使用
sp_a
ttach_db
或者
sp_attach_single_f
ile_db
可以恢复数据库,但是会出现类似下面的提示信
息
设备激活错误。物理文件名
'C:Program FilesMicrosoft SQL
ServerMSSQLdatatest_'
可能有误。
已创建名为
'C:Program
FilesMicrosoft SQL
ServerMSSQLDatatest_'
的新日志文件。
但是,
如果您的数据库文件是从其他计算机上复制过来的,
那么很不幸,
也许上
述办法就行不通了。你也许会得到类似下面的错误信息
服务器
:
消息
1813
,级别
16
,状态
2
,行
1
未能打开新数据库
'test'
。
CREATE
DATABASE
将终止。
设备激活错误。物理文件名
'd:test_'
可能有误。
怎么办呢?别着急,下面我们举例说明恢复办法。
A
.
我们使用默认方式建立一个供恢复使用的数据
库
(
如
test)
。
可以在
SQL Server
Enterprise
Manager
里面建立。
B
.停掉数据库服务器。
C
.将刚才生成的数据库的日志文件
test_<
/p>
删除,用要恢复的数据库
mdf
文件覆盖
刚才生成的数据库数据文件
test_
。
D
.启动数据库服务器。此时会看到数据库
test
的状态为
“
置疑
p>
”
。这时候不能对
此数据库进行任何操作。
E
.设置数据库允许直接操作系统表
。此操作可以在
SQL Server Enterprise
Manager
里面选择数据库服务器,按右键,选择
“
p>
属性
”
,在
“
p>
服务器设置
”
页面中
将
“
允许对系统目录直接修改
”
p>
一项选中。也可以使用如下语句来实现。
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 M
anager
里面看到该数据库处于
“
只读
置疑
脱机
紧急模式
”
可
以看到数据库里面的表,但是仅仅有系统表
G
.下面执行真正的恢复操作,重建数据库日志文件
dbcc rebuild_log('test','C:Program
FilesMicrosoft SQL
ServerMSSQLDatatest_')
执行过程中,如果遇到下列提示信息:
服务器
:
消息
5030
,级别
16
,状态
1
,行
1
未能排它地锁定数据库以执行该操作。
DBCC
执行完毕。
如果
DBCC
输出了错误信息,
请与系统
管理员联系。
[brown]
说明您的其他程序正在使用该数
据库,如果刚才您在
F
步骤中使用
SQ
L Server
Enterprise Manager
打
开了
test
库的系统表,那么退出
S
QL Server Enterprise
Manager
就可以了。
正确执行完成的提示应该类似于:
[brown]
警告
:
数据库
'test'
的日志已重建。
已失去事务的一致性。
应运行
DBCC
CHECKDB
以验证物理一致性。将必须重置数据库选项,并且可能需要删除多
余的日志文
件。
DBCC
执行完毕。如果
DBCC
输出了错误信息,请与系统管理员联系。
此时打开在
SQL Server Enterprise M
anager
里面会看到数据库的状态为
“
只供
DBO
使用
”
。此时可以访问数据库里面的用户表了。
H
.验证数据库一致性(可省略)
dbcc checkdb('test')
一般执行结果如下:
CHECKDB
发现了
0
个分配错误和
0
个一致性错误(在数据库
'test'
中)。
DBCC
执行完毕。如果
DBCC
输出了错误信息,请与系统管理员联系。
I
.设置数据库为正常状态
sp_dboption 'test','dbo use
only','false'
如果没有出错,那么恭喜,现在就可以正常的使用恢复后
的数据库啦。
J
.最后一步,我们要
将步骤
E
中设置的
“
< br>允许对系统目录直接修改
”
一项恢复。
< br>因为平时直接操作系统表是一件比较危险的事情。
当然,
我们可以在
SQL Server
Enterprise
Manager
里面恢复,也可以使用如下语句完成
sp_configure 'allow updates',0
go
reconfigure
with override
go
SQL
Server
数据库文件恢复技术
SQL
Server
数据库备份有两种方式,一种是使用
BACKUP
DATABASE
将数据
库文件备份出去,另外一种就是
直接拷贝数据库文件
mdf
和日志文件
ldf
的方式。
下面将主要讨论一下后者的备份与恢复。本文假定您能熟练使用
SQL Server
Enterprise Manager
(SQL Server
企业管理器
)
和
SQL Server Quwey
Analyser(SQL
Server
查询分析
器
)
1
、正常的备份、恢复方式
正常方式下,
我们要备份一个数据库,
首先要先
将该数据库从运行的数据服务器
中断开,或者停掉整个数
据库服务器,然后复制文件。
卸下数据库的命令:
Sp_detach_db
数据库名
连接数据库的命令:
Sp_attach_db
或者
sp_att
ach_single_file_db
s_attach_db [@dbname
=] ′dbname′, [@filename1 =] ′filename_n′
[,...16]
sp_attach_single_file_db [@dbname =]
′dbname′, [@physname
=]
′physical_name′
使用此方法可以正确恢复
SQL
Sever7.0
和
SQL Server 2000
的数据库文件,
要
点是备份的时候一定要将
p>
mdf
和
ldf
两个文件都备份下来,
mdf
文件是数
据库数据文件,
ldf
是数据库日志
文
件。
例子:
假设数据库为
test
,其数据文件为
test_
,日志文件为
test_
。
下面我们讨论一下如何备份、恢复该数据库。
卸下数据库:
sp_detach_db 'test'
连接数据库:
sp_attach_db
'test','C:Program FilesMicrosoft SQL
ServerMSSQLDatatest_','C:Program
FilesMicrosoft SQL
ServerMSSQLDatatest_'
sp_attach_single_file_db
'test','C:Program FilesMicrosoft SQL
ServerMSSQLDatatest_'
2
、只有
mdf
文件的恢复技术
由于种种原因,我们如果当时仅仅备份了
mdf
文件,那么恢复起来就是一件很
麻烦的事情了。
如果您的
mdf
文件是当前数据库产生
的,
那么很侥幸,
也许你使用
sp_a
ttach_db
或者
sp_att
ach_single_file_db
可以恢复数据库,但是会出现类似下面的提示信
息
设备激活错误。物理文件名
'C:Program FilesMicrosoft SQL
ServerMSSQLdatatest_'
可能有误。
已创建名为
'C:Program
FilesMicrosoft SQL
ServerMSSQLDatatest_'
的新日志文件。
但是,
如果您的数据库文件是从其他计算机上复制过来的,
那么很不幸,
也许上
述办法就行不通了。
你也许会得到类似下面的错误信息
服务器
:
消息
1813
,级别
16
,状态
2
,行
1
未能打开新数据库
'test'
。
CREATE
DATABASE
将终止。
设备激活错误。物理文件名
'd:test_'
可能有误。
怎么办呢?别着急,下面我们举例说明恢复办法。
A
.
我们使用默认方式建立一个供恢复使用的数据
库
(
如
test)
。
可以在
SQL Server
Enterprise Manager
里面建立。
B
.停掉数据库服务器。
C
.将刚才生成的数据库的日志文件
test_<
/p>
删除,用要恢复的数据库
mdf
文件覆盖
刚才生成的数据
库数据文件
test
_
。
-
-
-
-
-
-
-
-
-
上一篇:smitty命令
下一篇:《潮州韩文公庙碑(节选)》阅读答案(附翻译)