数据库被置疑的解决办法
2006-11-30 09:37
197 查看
在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_BACKUP.DAT
4.数据库完整性检测:
DBCC CHECKDB('DB_SUSPECT')
5.重新启动MSSQLSERVER服务.
如果没有全备份,那就要用一些特殊的方法:
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_DAT.MDF,DBNAME_LOG.LDF移走:
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服务:
NET STOP MSSQLSERVER
8.把原来的数据文件再覆盖回来:
9.启动SQL Server服务:
NET START MSSQLSERVER
10.重新设置SQLSERVER的状态:
USE MASTER
GO
EXEC sp_resetstatus "DB_SUSPECT"
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
14.配置SQLSERVER不允许更新系统表:
USE MASTER
GO
sp_configure 'allow updates', 0
reconfigure with override
GO
15.重新启动MSSQLSERVER服务:
最好重新启动操作系统
16.备份数据库:
可以通过SQLSERVER企业管理器或T-SQL.需要备份MASTER和DB_SUSPECT
补充一点,如果用DOMAIN/USER时,要注意对.MDF.LDF的所在目录的权限.
Zach的灵验脚本
Zach说他每次遇到这种数据库置疑情况,就运行下面这个脚本,屡试不爽:
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_BACKUP.DAT
4.数据库完整性检测:
DBCC CHECKDB('DB_SUSPECT')
5.重新启动MSSQLSERVER服务.
如果没有全备份,那就要用一些特殊的方法:
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_DAT.MDF,DBNAME_LOG.LDF移走:
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服务:
NET STOP MSSQLSERVER
8.把原来的数据文件再覆盖回来:
9.启动SQL Server服务:
NET START MSSQLSERVER
10.重新设置SQLSERVER的状态:
USE MASTER
GO
EXEC sp_resetstatus "DB_SUSPECT"
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
14.配置SQLSERVER不允许更新系统表:
USE MASTER
GO
sp_configure 'allow updates', 0
reconfigure with override
GO
15.重新启动MSSQLSERVER服务:
最好重新启动操作系统
16.备份数据库:
可以通过SQLSERVER企业管理器或T-SQL.需要备份MASTER和DB_SUSPECT
补充一点,如果用DOMAIN/USER时,要注意对.MDF.LDF的所在目录的权限.
Zach的灵验脚本
Zach说他每次遇到这种数据库置疑情况,就运行下面这个脚本,屡试不爽:
[align=left]======================================================[/align] [align=left]--before running any script, run the following to set the [/align] [align=left]master database to allow updates[/align] [align=left]USE master[/align] [align=left]GO[/align] [align=left]sp_configure 'allow updates', 1[/align] [align=left]GO[/align] [align=left]RECONFIGURE WITH OVERRIDE[/align] [align=left]GO[/align] [align=left] [/align] [align=left]--Run the following script[/align] [align=left]UPDATE master..sysdatabases SET status = status ^ 256 [/align] [align=left]WHERE name = 'Database_Name'[/align] [align=left] [/align] [align=left]--Run the following script[/align] [align=left]exec SP_resetstatus Database_Name[/align] [align=left] [/align] [align=left]--stop and start the MSDTC at this stage[/align] [align=left] [/align] [align=left]--After the procedure is created, immediately disable [/align] [align=left]updates to the system tables:[/align] [align=left]exec sp_configure 'allow updates', 0[/align] [align=left]GO[/align] [align=left]RECONFIGURE WITH OVERRIDE[/align] [align=left]GO[/align] [align=left]=====================================[/align] |
相关文章推荐
- 数据库置疑的解决办法
- 非正常关机后造成数据库 置疑 状态的解决办法
- DB2 Enterprise Server Edition(DB2 ESE)9.1在Windows Server 2008 下出现无法新建数据库的情况,及解决办法
- HTML页面设置的字符集会影响发送到MySQL的字符集,所以当数据库字符集为utf8时,HTML页面也要设置字符集为utf8,中文乱码的一种解决办法
- OEM连接数据库 权限不足的解决办法
- ORACLE 11g 创建数据库时 Enterprise Manager配置失败的解决办法 无法打开OEM的解决办法
- 请检查DNT.config中Dbtype节点数据库类型是否正确 解决办法
- ORACLE 数据库 OracleDBConsole 无法启动的解决办法
- 使用Linq 更新数据库时遇到的一些问题及解决办法
- java 解决数据库一次性取数据太多的办法
- 数据库被批量注入解决办法(SQL语句)
- Oracle 中用 imp 和 exp 命令导入导出数据库(附问题及解决办法)
- SQL 2000数据库sa密码忘记解决办法
- 压测xx业务数据库资源大量等待,存在表锁问题,导致数据库无法正常执行解决办法
- TADOConnection如何测试连接数据库超时的解决办法
- [经使用有效]Sqlserver2005附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法
- 11g中高‘Resmgr:Cpu Quantum’等待事件(即使你已经禁用了resource manager)造成数据库hang住的解决办法
- SQL 2005 EXPRESS版本不能附加数据库的解决办法。。
- 附加数据库时出现,“错误5173:不能使文件与不同的数据库相关。”解决办法
- 向MOSS站点的数据库中插入中文字符显示为问号‘?’的一种解决办法