数据库系统崩溃后的一般处理步骤(引自大牛邹建)

来源:互联网 发布:windows 流媒体服务器 编辑:程序博客网 时间:2024/05/18 00:25

情况描述: SQL Server 2000崩溃,重新安装数据库。有以下准备: 1, 三个系统库(master,msdb,model)的完全备份: 2 两个用户数据库(user01,user02)的备份(周日的完全备份+除周日外每天的差异备份): 三个系统数据库是早期备份的,之间没有更新过帐号信息,没有增减过作业等等。两个用户数据库在上周日晚做过完全备份(user01.bak和user02.bak) 准备重新安装数据库,希望能一次性恢复到用户数据库最后一个备份前的状态 本文介绍一般的处理步骤, 以及处理过程会使用到的一些技术的详细说明.

 

情况描述:

SQL Server 2000崩溃,重新安装数据库。

有以下准备:

1, 三个系统库(master,msdb,model)的完全备份:

2  两个用户数据库(user01,user02)的备份(周日的完全备份+除周日外每天的差异备份):

三个系统数据库是早期备份的,之间没有更新过帐号信息,没有增减过作业等等。

两个用户数据库在上周日晚做过完全备份(user01.bakuser02.bak

 

准备重新安装数据库,希望能一次性恢复到用户数据库最后一个备份前的状态。

 

 

常规恢复过程大致如下

 

1. 备份可用的数据, 包含所有系统数据库和用户数据库的数据文件和日志文件(*.mdf/ldf/ndf)

2. 卸载原来的安装

3. 系统表查找和删除所有的MSSQLServer

4. 磁盘上删除安装SQL SErver产生的所有文件

 

5. 重新安装SQL Server,所需安装的补丁的版本要求保持与备份系统数据库时安装的补丁版本一致

 

6. 单用户模式下恢复master数据库

7. 恢复其他系统数据库

8. 恢复用户数据库

 

 

可以做的尝试

如果时间比较充分,而且想尽量恢复数据到最近的时间点, 可以在上述步骤中做下面的尝试

 

1. 6,7两步改为:

a. 停止MSSQL服务

b. 用步骤1备份的系统数据库的数据文件和日志文件替换安装后生成的系统数据库的对应文件

c. 建立与SQL Server系统崩溃之前一样的用户数据库的存放目录, 并且把用户数据库文件按原来的位置存放

d. 启动MSSQL服务

e. 如果MSSQL服务成功, 在企业管理看看用户数据库有没有置疑, 如果没有置疑, 则其他操作都不用做了, 数据已经恢复

 

注意:

    在做上面的步骤b之前, 先备份准备覆盖的文件

 

2. 如果步骤1的尝试不成功, 则再做下面的尝试, 把步骤8修改为下面的:

a. 停止MSSQL服务

b. 用备份的文件还原被覆盖的文件

c. 尝试用附加的方式恢复用户数据库

d. 如果成功, 则修复各用户数据库中的孤立用户

 

 

恢复过程会涉及到的一些具体处理

 

1. 恢复系统数据库:

SQL Server数据库中,系统信息存储在系统数据库中,主要的系统数据库包括:

master-从整体上控制用户数据库和SQL Server操作,在创建了任何用户定义的对象后,都要备份它

model-为新数据库提供模版和原型

msdb-包含了有关作业、报警及操作员等信息

 

如果包含系统数据库的介质变了,那么必须重建系统数据库,如果你仍然可以启动SQL Server服务,则可以通过RESTORE语句从系统数据库的备份中恢复数据库。

如果master坏了,不能启动系统,可以按照下面步骤进行恢复

1. 重建系统数据库 运行c:/mssql7/binn/rebuildm.exe,按照提示进行即可,

过程中需要系统数据库样本的路径,可在安装光盘中找到;

 

2  重建系统数据库后,启动SQL Server服务,用系统数据库的备份恢复数据库

就行了通常恢复顺序为master->msdb->model

在恢复master的备份时要注意:必须在单用户(single user)模式下进行

进入单用户模式的方法:

a. 在命令行模式下输入:sqlservr -c -f -m或者输入sqlservr -m

其中:-c 可以缩短启动时间,SQL Server 不作为Windows NT的服务启动

-f 用最小配置启动SQL Server

-m 单用户模式启动SQL Server

 

b. 可以在控制面板-服务-MSSQLServer的启动参数中输入-c -f -m或者输入-m,点击开始

 

3. 进行master数据库的恢复

a. 直接进入查询分析器,有个提示不要理会它

输入恢复语句进行数据库恢复:

RESTORE DATABASE master from disk='c:/具体的备份文件名'

 

b. 或者用这个,在命令提示符下输入,注意大小写

使用"windows身份验证",输入:isql /E

使用"sql serverwindows身份验证",输入:isql /U"用户名" /P"密码"

然后在出现的提示符下输入(注意1>,2>是提示符):

1>RESTORE DATABASE master from disk='c:/具体的备份文件名'

2>GO

 

2. 还原数据库的具体步骤:

1. 恢复最近一次的完整备份

企业管理器--右键"数据库"--所有任务--还原数据库

--"还原为数据库库"中输入还原后的数据库名,设为:test

--还原选择"从设备"--选择设备--添加--添加你的备份文件

--确定,回到数据库还原的界面

--"还原备份集",选择"数据库--完全"

--选项--"移至物理文件名"中的物理文件名修改为你的数据文件要存放的文件名

--如果要还原的数据库已经存在,选择"在现有数据库上强制还原"

--"恢复完成状态",选择"使数据库不再运行,但能还原其它事务日志"

--确定

 

--或用SQL语句:

RESTORE DATABASE 数据库名

FROM DISK = 'c:/你的完全备份文件名'

WITH NORECOVERY

 

 

2. 恢复完全备份后, 最近一次的差异备份(如果有的话)

企业管理器--右键"数据库"--所有任务--还原数据库

--"还原为数据库库"中选择数据库名:test

--还原选择"从设备"--选择设备--添加--添加你的备份文件

--确定,回到数据库还原的界面

--"还原备份集",选择"数据库--差异"

--"恢复完成状态",选择"使数据库不再运行,但能还原其它事务日志"

--确定

 

--或用SQL语句:

--或用SQL语句:

RESTORE DATABASE 数据库名

FROM DISK = 'c:/你的差异备份文件名'

WITH NORECOVERY

 

 

3. 按时间先后, 恢复差异备份后(如果没有差异备份,则是完全备份)的所有日志备份

企业管理器--右键"数据库"--所有任务--还原数据库

--"还原为数据库库"中选择数据库名:test

--还原选择"从设备"--选择设备--添加--添加你的备份文件

--确定,回到数据库还原的界面

--"还原备份集",选择"事务日志"

--"恢复完成状态"

   如果是恢复最后一个日志文件,选择"使数据库可以继续运行,但无法还原其它事务日志"

   否则选择"使数据库不再运行,但能还原其它事务日志"

--确定

 

--或用SQL语句:

RESTORE DATABASE 数据库名

FROM DISK = 'c:/你的日志文件名'

WITH RECOVERY

 

3. 解决孤立用户:

1. 查看某个数据库的孤立用户:

USE 库名

EXEC sp_change_users_login 'Report'

 

2. 自动修复某个孤立用户:

USE 库名

EXEC sp_change_users_login 'Auto_Fix', '孤立用户名', NULL, '密码' 

  --密码指用户对应的登录不存在时, 系统自动建立登录, 为登录分配的密码

  
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 三岁宝宝爱咬人怎么办 幼儿园小孩咬人怎么办 孩子不会动手打人怎么办 小孩子隔奶奶涨怎么办 小孩子戒奶奶涨怎么办 孩子总打别人怎么办 儿童在学校打人怎么办 两岁儿童打人怎么办 孩子哭闹要东西怎么办 高中孩子爱打架怎么办 宝宝性格太弱怎么办 宝宝太老实了怎么办 一岁多宝宝爱打人怎么办 一岁半宝宝爱打人怎么办 两岁半宝宝喜欢打人怎么办 孩子总是挨欺负怎么办 一年级孩子爱打架怎么办 孩子没规矩家长怎么办 小朋友在幼儿园打人怎么办 幼儿园小朋友喜欢打人怎么办 三周岁宝宝爱哭怎么办 2周岁宝宝爱哭怎么办 一个月宝宝爱哭怎么办 2岁宝宝爱哭怎么办 三岁小朋友打人怎么办 一岁半小朋友喜欢打人怎么办 爷爷偏心我该怎么办 冲动型学生老师怎么办 两个宝宝争东西怎么办 2周岁宝宝打人怎么办 小孩幼儿园被打怎么办 小孩喝了润滑油怎么办 孩子被打了怎么办 宝宝吃了指甲油怎么办 孩子掉了深海怎么办 小孩打了别人怎么办 两岁宝宝爱咬人怎么办 孩子上学老打人怎么办 孩子上学爱说话怎么办 孩子抢玩具打人怎么办 生气就像打人怎么办