技术支持   Support
联系我们   Contact
你的位置:首页 > 技术支持 > 技术文档

数据库置疑的解决方法

2015/6/10 10:55:27      点击:


sql2000数据库置疑的解决方法  
 


数据库置疑的解决方法
1.在“Microsfot SQL SERVER”中的“查询分析器”中输入以下命令,然后点击执行。
(把数据库改成紧急模式)
sp_configure  'allow',  1
go
reconfigure  with  override
go
update  sysdatabases  set  status  =  32768  where  name  =  '数据库名称'
go
 
2.停止服务,把LDF文件改名,重新运行服务,再执行以下命令。(重建数据库日志)
DBCC REBUILD_LOG ('数据库名称','D:\MSDEDATA\MSSQL\Data\数据库名称_Log.LDF')
go
注意:上面的D:\MSDEDATA\MSSQL\Data\'是数据库默认存放位置,如果不正确请自行修改。
 
3.恢复数据库紧急模式:
update  sysdatabases  set  status  =  0  where  name  =  '数据库名称'
go
restore  database  数据库名称  WITH  RECOVERY
go
sp_configure  'allow',  0
go
reconfigure  with  override
go
 
4.然后用以下命令检查数据库有没有错误:
DBCC  CHECKDB  ('数据库名称')
 

如果上面还是不行,试试把数据库设为紧急模式,应该可以看到数据了,在把数据导出到一个新的数据库。 

______________________________________________________________________________________


Sql2005以上重建事务日志文件



有时候我们手头上的数据库可能只剩下了mdf文件,而日志文件丢失了或者损坏了,
那么你可以尝试使用以下方法重建事务日志,注意sql 2K不是这个语句
USE master;
GO
CREATE DATABASE nuke
ON
(FILENAME = ' D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQL\MSSQL\DATA\pos.mdf') --数据库文件所在
,(FILENAME = ' D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQL\MSSQL\DATA\pos_log.LDF ')---指定重建的日志文件路径
FOR ATTACH_REBUILD_LOG
GO
当服务器因为硬件失败导致数据库失效时,可能出现以下错误:
文件激活失败。物理文件名称' D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQL\MSSQL\DATA\pos_log.ldf'可能不正确。
由于数据库没有完全关闭,无法重新生成日志。
(其实这里需要注意的是,请在该位置生成这个文件.)
可以尝试如下操作
强制附加数据库
a)         新建一个同名数据库
CREATE DATABASE [pos] 
ON (NAME=pos,FILENAME = N' D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQL\MSSQL\DATA\pos.mdf' )
LOG ON (NAME=pos_Log, FILENAME = N' D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQL\MSSQL\DATA\pos_log.LDF ')
b)         停止SqlServer
c)         将备份的数据库覆盖D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQL\MSSQL\DATA\pos.mdf
d)         启动SqlServer,(pos将变为不可用)
查看数据库状态
SELECT * FROM SYS.DATABASES
SELECT * FROM sys.database_recovery_status 
e)         将数据库改为紧急恢复模式-些模式可以尝试把数据导出到新的数据库.
ALTER   DATABASE   pos   SET   EMERGENCY 
f)   修复数据库
DBCC CheckDB ('pos')
g)         将数据库改为但用户模式-做了此操作需要最后改为多用户模式
ALTER   DATABASE   pos   SET   SINGLE_USER 
h)         再带参数修复数据库
DBCC CheckDB ('pos',   REPAIR_REBUILD)---此处请注意, REPAIR_REBUILD可能无效,我改用了REPAIR_ALLOW_DATA_LOSS参数,如此操作下去就不需要去执行 第二步了;
i)           将数据库改为正常模式
ALTER   DATABASE   pos   SET   ONLINE
如果无法创建数据库日志,i步骤将失败,这时候如果能看到数据库表,和进行Select操作,转第2步。
如果一切成功了,但是实际看数据库属性可能发现,日志文件在另外一个地方,此时可以把数据库进行分离,分离的时候请钩选("删除连接")选项,删除对应路径下的日志文件,然后按照文章开头的办法重建日志.那样数据库文件和日志文件就在一起了.
2.         提取数据库数据
a)   创建一个新的临时数据库
b)   导出数据
执行 SELECT 'SELECT * INTO pos..'+name+' FROM '+ name FROM sys.objects WHERE TYPE = 'U' AND name!='sysdiagrams'
产生数据导出语句,执行他们,将数据复制到新数据库
c)   导出存储过程:待续
d)   导出触发器:待续
e)   导出函数:待续
f)   导出自定义数据类型:待续
g)   导出用户:待续
h)   将新数据库还原到目标服务器
备份/还原这个新建的数据库到目标服务器
i)   修复孤立用户(SQL 2005 版)
a)   EXEC sp_change_users_login 'Auto_Fix', 'GameServer';
b)   EXEC sp_change_users_login 'Auto_Fix', 'backoffice';
c)   EXEC sp_change_users_login 'Auto_Fix', 'adminsoft';
j)           修复数据库拥有者
EXEC sp_changedbowner 'sa'


SQL SERVER 2008 单用户恢复到多用户的方法

use MASTER
select * from master..sysprocesses where dbid = DB_ID('pos');

kill 上一句SQL结果中的spid值;

ALTER DATABASE pos set MULTI_USER ;