数据库恢复常见错误及解决

来源:互联网 发布:京东华南分公司 知乎 编辑:程序博客网 时间:2024/05/01 10:33

 

在sqlServer20005 的management studio里使用bak文件还原数据库的时候,总是失败!


The backup set holds a backup of a database other than the existing 'AAA' database.
RESTORE DATABASE is terminating abnormally. (Microsoft SQL Server,错误: 3154)

解决方法一:
--返回由备份集内包含的数据库和日志文件列表组成的结果集。
--
主要获得逻辑文件名
USE master
RESTORE FILELISTONLY
   
FROM DISK = 'g:/back.Bak' 
Go
************************************************
/*
利用bak恢复数据库,强制还原(REPLACE)
STATS = 10 每完成10%显示一条记录
DBTest和DBTest_log是上面g:/back.Bak里的逻辑文件
*/

USE master
RESTORE DATABASE DB 
   
FROM DISK = 'g:/back.Bak'
   
WITH MOVE 'DBTest' TO 'E:/Program Files/Microsoft SQL Server2005/Data/DB.mdf'
   MOVE 
'DBTest_log' TO 'E:/Program Files/Microsoft SQL Server2005/Data/DB_log.ldf',
STATS 
= 10REPLACE
GO
++++++++++++++++++++++++++++++++

/*
备份数据DB 到.bak文件。然后利用此bak文件恢复一个新的数据库DBTest。
*/

USE master
BACKUP DATABASE DB 
  
TO DISK = 'g:/DBBack0930.bak' 
RESTORE FILELISTONLY 
  
FROM DISK = 'g:/DBBack0930.bak' 
RESTORE DATABASE DBTest 
  
FROM DISK = 'g:/DBBack0930.bak' 
  
WITH MOVE 'DBTest' TO 'E:/Program Files/Microsoft SQL Server2005/Data/DBTest.mdf'
  MOVE 
'DBTest_log' TO 'E:/Program Files/Microsoft SQL Server2005/Data/DBTest_log.ldf'
GO 
---******************************

解决方法二:
需要注意两点:
在【选项】界面里
1.选择“覆盖现有数据库”
2.修改【将数据库文件还原为】区域里的【还原为】的位置,和要恢复的数据库的实际位置保持一致(实际操作该步骤可选)

 

=====================================================

 

SqlServer2005 恢复数据库时出现:

Exclusive access could not be obtained because the database is in use

 

由于恢复数据库时需要对数据库进行独占的访问,在恢复之前你必须中止其他用户与数据库的连接。

可能的解决方法:
在恢复数据库前:
方法一.打开Management Studio.
点击数据库右键--》restart database

方法二.执行如下的Query:

    Use Master

    Alter Database [YOURDB]

        SET SINGLE_USER With ROLLBACK IMMEDIATE

    在恢复数据库后如果需要恢复会普通多用户模式:

    Use master;
    Go

    Alter Database [YOURDB]

        SET MULTI_USER

    Go

 

方法三

获取当前使用数据库用户链接,关闭连接

use master

go

sp_who(sp_who2)

go

 

得到相应spid,通过kill spid关闭连接

use master

go

kill @spid

go

 

 

ALTER DATABASE 命令的部分参数:

l SINGLE_USER | RESTRICTED_USER | MULTI_USER:控制哪些用户可以访问数据库。如果指定为 SINGLE_USER,那么同一时间只能有一个用户访问数据库。如果指定为 RESTRICTED_USER,那么只有 db_owner、dbcreator 或 sysadmin 角色的成员可以使用数据库。MULTI_USER 使数据库返回到正常操作状态。

l WITH <termination>:指定当数据库从一种状态转换到另一种状态时,何时回滚未完成的事务。只能指定下一条 termination 子句,而且该子句应跟在 SET 子句后面。

ROLLBACK AFTER integer [SECONDS] | ROLLBACK IMMEDIATE

设定是在指定秒数之后回滚还是立即回滚。如果省略了 termination 子句,那么将允许事务自主提交或回滚。

l NO_WAIT:指定如果请求的数据库语句或选项更改只有等待事务自主提交或回滚才能立即完成,该请求将失败。