我的电脑是这样,最早的时候装的是2005,后来公司用到2008,我就手动卸载,但是好像卸载的不够彻底,在装2008的时候,选择升级方式安装。

虽然成功了,但是在运行select @@version 时,发现还是2005,但奇怪的是,启动界面确是2008,这说明升级安装虽然表面上成功了,但并不是很彻底。尤其是升级后,存在着一些类似复制这样的功能不好使的情况。但是我本机仅是用来做实验,所以也没太在意。

但最近,我需要还原正式库的备份文件,因为服务器上装的是64bit的sql2008r2sp1,所以和我本机不兼容,所以无法恢复。

没办法,只好想法升级到2008r2sp1,由于之前的状况,既有2005残留文件,又有2008残留文件,尝试了一下,升级到R2,结果不成功,干脆全部卸载,重新装吧。于是手动各种删除,又进注册表,又进控制面板,又停服务,折腾了一小天,最后一装,发现还是卸载的不干净,无法安装成功。

百度了一下,发现有一款软件,名字叫Windows Installer Clean Up,下载后,发现卸载那叫一个快,而且非常干净。

于是正常安装sql2008r2,一切顺利,安装完后,记住要安装sp1的补丁程序,地址如下:

http://download.microsoft.com/download/0/9/9/099E0C83-072B-42A5-83A0-9BB3D2E6E2A3/SQLServer2008R2SP1-KB2528583-x86-CHS.exe

记得下载的时候,注意网速通畅。安装的时候尽量不要同时运行其它程序,我发现该程序不稳定,解压缩时容易出现文件损坏提示,其实并没有损坏。多解压几次就好。

之后正常安装,不要略过其中的安装步骤。

正常启动后想用sa账户登陆,选择sqlserver方式登陆,但是发现密码不对提示,于是想改sa密码。

用windows验证模式登陆,打开服务器属性对话框,启用sqlserver和windows验证模式。点确定。然后找安全性==>登陆名==>sa==>属性,修改密码后,重新启动数据库服务,在相关项点重新启动即可。之后即可以以sqlserver方式登陆了。

然后准备还原数据库,最好用语句还原,这样有一个好处,就是如果有错误,它会提示相关的错误:

restore database heb00 from

disk = 'e:\heb000_2012-12-25 01.40.00.bak'

with replace

虽然现在版本一致了,但是还是有错误,如下:

消息 3183,级别 16,状态 2,第 1 行

在从该备份集进行读取时,RESTORE 检测到在数据库 "heb00" 中的页(0:0)上存在错误。

消息 3013,级别 16,状态 1,第 1 行

RESTORE DATABASE 正在异常终止。

根据提示,以为是heb00这个新建的数据库问题,由于原数据库34个G左右,而初始的数据库很小,以为有这种可能,所以把初始大小定为35个G,但问题依旧,反复试了几次,感觉应该是处在备份文件上。拷备份时,先把备份文件从服务器上拷到移动硬盘上,再从移动硬盘上拷到本机上,根据经验,一般大文件在复制过程中,都容易受损。

突然想到可以查看日志文件:

日期2012-12-28 10:33:29

日志SQL Server (当前 - 2012-12-28 10:33:00)

源spid55

消息

The backup data at the end of "e:\heb000_2012-12-25 01.40.00.bak" is incorrectly formatted. Backup sets on the media might be damaged and unusable. To determine the backup sets on the media, use RESTORE HEADERONLY. To determine the usability of the backup sets, run RESTORE VERIFYONLY. If all of the backup sets are incomplete, reformat the media using BACKUP WITH FORMAT, which destroys all the backup sets.

根据提示,估计出在备份文件上的问题可能性很大了。

再根据提示,做了一下对比:

RESTORE HEADERONLY

FROM DISK = N'e:\heb000_2012-12-25 01.40.00.bak'

WITH NOUNLOAD;

GO

RESTORE HEADERONLY

FROM DISK = N'd:\book.bak'

WITH NOUNLOAD;

GO

可以看到,第二个数据库备份文件是可以识别出来的,但第一个要还原的数据库文件确显示未完成,所以到这里,问题应该可以肯定出在备份文件上了,

命苦啊,只能重新复制了。

“因为数据库正在使用,所以无法获得对数据库的独占访问权”,终解决方案如下

关键SQL语句:

ALTER DATABASE [datebase] SET OFFLINE WITH ROLLBACK IMMEDIATE

用完之后再

ALTER  database  [ datebase]  set   online

最新文章

  1. 【微信Java开发 --番外篇】错误解析
  2. SAP 默认的连接端口
  3. 你所不知道的黑客工具之 EK 篇
  4. MongoDB实战开发 【零基础学习,附完整Asp.net示例】
  5. Unix主机syslog配置
  6. javascript学习笔记(2)
  7. Inno Setup入门(四)——为程序创建桌面快捷方式
  8. MySql Sql 优化技巧分享
  9. 移动端1px 边框完整方案(四个方向)
  10. 【微服务】之二:从零开始,轻松搞定SpringCloud微服务系列--注册中心(一)
  11. 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。
  12. dmraid 用法
  13. golang ntp协议客户端
  14. 设置Linux环境变量的方法和区别_Ubuntu
  15. bugfree3.0.1-邮件配置
  16. docker常用命令整理-在容器中使用service命令
  17. C# 一个数组未赋值引发的错误
  18. 孤立森林(isolation forest)
  19. (转)用Python写堡垒机项目
  20. spring事务的隔离级别(透彻理解)

热门文章

  1. [BZOJ2324][ZJOI2011][最小费用最大流]营救皮卡丘
  2. SqlServer之like、charindex、patindex(转载)
  3. 阿里Android一面(校招)
  4. Android中的一些基础知识(一)
  5. Java安全机制之泛型(JDK1.5)
  6. poj 2096
  7. oracle累计求和
  8. Android 网络交互之MD5为什么要加盐
  9. Android Camera调用过程分析
  10. perl 自动发产品