-
1.
新建一个同名的数据库
2.
再停掉
sql server <
/p>
3.
用
suspect
< br>数据库的文件覆盖掉这个新建的同名数据库
4.
再重启
sql server <
/p>
5.
此时打开企业管理器时新建的同名数据库会出现置疑,
先不管,
执行下面的语句
(注意修改其
中的数据库名
)
USE MASTER
GO
SP_CONFIGURE 'ALLOW UPDATES',1
RECONFIGURE WITH OVERRIDE
GO
UPDATE SYSDATABASES SET STATUS =32768
WHERE NAME='his222'
Go
sp_dboption 'test', 'single user',
'true'
Go
DBCC
CHECKDB('test')
Go
update sysdatabases set status =28
where name='test'
Go
sp_configure 'allow updates', 0
reconfigure with override
Go
sp_dboption 'test', 'single
user', 'false'
Go
6.
< br>完成后一般就可以访问数据库中的数据了
,
这时
,
数据库本身一般还要问题
,
< br>解决办法是
,
利用
数据库的脚本
创建一个新的数据库
,
并将数据导进去就行了
< br>.
如果这样改不加数据库状态
,
你就把数据库导成一个新库来代替旧库吧
企业管理器
--
右键你的数据库
--
所有任务
--
导出数据
--
目标标数据库选择新建
--
选择
在两个
sql
数据库
之间复制对象和数据
--
把
包含扩展属性
选上
,
其他的根据需要选择
--
最后完成
在
MS SQLSERVER
中一直有
这样的问题
,SQLSERVER
的状态
置疑
我们先来分析一下
SQLSERVER
数据库
置疑
的原因
:
1.
错误的删除日志
;
2.
硬件
(HD)
损坏
,
造成日志和数据文件
写错误
;
3.
硬盘的空间不够
,
比如日志文件过大
;
解决办法
:
这是最简单的办法
是有数据库的全备份
,
然后恢复即可
.
步骤
:
1.
删除原始的数据库
:
USE MASTER
GO
DROP DATABASE DB_SUEPECT
2.
建立同名的数据库
:
USE master
GO
CREATE DATABASE DB_SUSPECT
ON
( NAME = DBNAME_DAT,
FILENAME = 'C:',
SIZE = 10,
FILEGROWTH = 5 )
LOG ON
( NAME = 'DBNAME_LOG',
FILENAME = 'g:',
SIZE = 5MB,
FILEGROWTH = 5MB )
GO
3.
恢复数据库
:
RESTORE DATABASE
DB_SUSPECT
FROM DBNAME_
4.
数据库完整性检测
:
DBCC
CHECKDB('DB_SUSPECT')
5.
重新启动
MSSQLSERVER
服务
.
p>
如果没有全备份
,
那就要用一些特殊的方法
:
1.
设置数据库为紧急模式
Use Master
GO
sp_configure 'allow updates', 1
reconfigure with
override
GO
UPDATE sysdatabases
SET status = 32768 where name = 'DB_SUSPECT'
GO
2.
停掉
SQL
Server
服务
:
NET STOP MSSQLSERVER
3.
把原始数据库的数据文件
DBNAME_,DBNAME_
移走
:
4.
启动
SQL
Server
服务
:
NET START MSSQLSERVER
5.
重新建立一个同名的数据库
DB_SUSPECT
;
USE
master
GO
CREATE DATABASE DB_SUSPECT
ON
( NAME = DBNAME_DAT,
FILENAME = 'C:',
SIZE = 10,
FILEGROWTH = 5 )
LOG ON
( NAME = 'DBNAME_LOG',
FILENAME = 'g:',
SIZE = 5MB,
FILEGROWTH = 5MB )
GO
6.
设置数据库运行在单用户的模式
:
USE MASTER
GO
ALTER DATABASE DB_SUSPECT SET
SINGLE_USER
GO
7.
停掉
SQL
服务
p>
:
NET STOP
MSSQLSERVER
8.
把原来的数据文件再覆盖回来
:
9.
启动
SQL
Server
服务
:
NET START MSSQLSERVER
10.
重新设置
SQLSERVER
的状态
:
USE MASTER
GO
EXEC sp_resetstatus
11.
数据库完整性检测
:
DBCC
CHECKDB('DB_SUSPECT')
12.
恢复数据库为多用户模式
:
USE MASTER
GO
ALTER DATABASE DB_SUSPECT SET
MULTI_USER
GO
13.
恢复
SQLSERVER
原始的配置
:
USE
MATER
GO
UPDATE
sysdatabases SET status = 4194320 where name =
'DB_SUSPECT'
GO
< br>14.
配置
SQLSERVER
不允许更新系统表
:
USE MASTER
GO
sp_configure 'allow updates', 0
reconfigure with
override
GO
15.
重新启动
MSSQLSERVER
服务
:
最好重新启动操作系统
16.
备份数据库
:
可以通过
SQLSERVER<
/p>
企业管理器或
T-SQL.
需要备份
p>
MASTER
和
DB_SUSPECT <
/p>
补充一点,如果用
DOMAINUSER
时
,
要注意对
.
的所在目录的权限
.
如果
SQL Server
因为磁盘可用空间不足,而不能完成数据库的恢复,那么
SQL Server
2000
会返回错误
1105
并且将
sysdatabases
中的
status
列设为置疑。
你可以看到在
SQLSERVER
的
ERROR LOG
和
OS
的应用程序日志中应该有
1105
的错误信
息
:
SQL
Server
事务日志可能会被填满,
这会阻止之后的数据库操
作,
包括
UPDATE
,
DELETE
,
INSERT
和
CHECKPOIN
T
。
事务
日志填满会导致
1105
错误
:
Can't allocate space for
object syslogs in database dbname because
the logsegment is
full
。
If you ran
out of space in syslogs
,
dump
the
transaction log
。
Otherwise use ALTER DATABASE or
sp_extendsegment to
increase the size of the
segment
。
这种现象可能出现
于任何一个数据库中,包括
Master
和
TempDB
。一些难以预见的因素可能
消耗日志空间。<
/p>
例如
:
一个大型事务,
尤其像批量数据更新、插入或删除。
一个未提交的事务。
检查点处理程序截除时所需的带宽过大。
截除时超过阈值
上述各种条件互相作用的结果。
用于发布的标记事务没有被日志读取程序读走
-
-
-
-
-
-
-
-
-
上一篇:SQL置疑REPAIR_REBUILD修复
下一篇:Oracle PSU说明