Sqlserver 还原那些事
由于想总结的东西比较杂乱,就起了这么一个题目
1.当还原数据库,没有选择结尾日志备份时,会出现下图异常:

这是因为,对于使用完全恢复模式或大容量日志恢复模式的数据库,在大多数情况下,您必须在还原数据库前备份日志的结尾。如果想不抛出这个错误
就需要选择 覆盖现有数据库(With Replace)。
使用 REPLACE 选项后,就会忽略还原时通常执行的几项重要安全检查。 忽略的检查如下:
一 还原时使用其他数据库的备份覆盖现有数据库。使用 REPLACE 选项后,即使指定的数据库名称与备份集中记录的数据库名称不同,
还原也允许您使用备份集中任何一个数据库覆盖现有数据库。这会导致一个数据库意外覆盖另一个数据库。
二 在没有获取结尾日志备份并也没有使用 STOPAT 选项的情况下,使用完整恢复模式或大容量日志恢复模式对数据库进行还原。
使用 REPLACE 选项后,由于没有备份最近写入的日志,您会丢失提交的作业。
三 覆盖现有文件。
例如,可能会错误地覆盖错误类型的文件,如 .xls 文件或非联机状态的其他数据库正在使用的文件等。 如果覆盖现有文件,则即使所还原的数据库是完整的,也有可能丢失某些数据。
2.如果选择 限制访问还原的数据库(With Restricted_User)
那么还原以后数据库将会是受限制访问的状态

那么这个受限制用户是什么概念呢?
在RESTRICTED_USER模式下的数据库只接受合格的用户连接——这些用户属于dbcreator或sysadmin角色,或者是那个数据库的db_owner角色的成员。
只有当用户满足以上角色中的一种时,才能够访问这个数据库。
用户访问状态:有三个选项,他们是相互排斥的。
SINGLE_USER, RESTRICTED_USER, MUTLI_USER
默认时处于MULTI_USER模式下,这种模式下不受限制,可以多用户同时使用数据库。
那么SINGLE_USER起到什么作用呢,
一个在单用户(SINGLE_USER)模式下的数据库一次只能有一个连接,如果这个数据库已经被只用了一次,
任何用户(包括正在使用的这个用户)再建立新连接的时候都有抛出异常:数据库 'xxxxxxx' 已打开,并且一次只能有一个用户访问。
如果我们设置单用户模式后,打开后的连接丢失了,我们该如何再还原成多用户模式呢?
我们需要执行以下的脚本
USE [master]
GO
/****** Object: StoredProcedure [dbo].[killspid] Script Date: 03/28/2011 11:01:32 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--建一个存储过程,断开所有用户连接。
create proc [dbo].[killspid] (@dbname varchar(20))
as
begin
declare @sql nvarchar(500)
declare @spid int
set @sql='declare getspid cursor for
select spid from sysprocesses where dbid=db_id('''+@dbname+''')'
exec (@sql)
open getspid
fetch next from getspid into @spid
while @@fetch_status<>-1
begin
exec('kill '+@spid)
fetch next from getspid into @spid
end
close getspid
deallocate getspid
end
GO
use master
exec killspid '对应的数据库'
Sqlserver 还原那些事的更多相关文章
- SqlServer还原步骤
SqlServer还原步骤 2009-09-05 10:32:12| 分类: 数据库|字号 订阅 1 . 删除原有数据库 新建数据库 hywlxt 2. 在master 中新建存储过程 k ...
- sqlserver还原数据库
该方法只针对同等级数据库,不能跨级 比如sqlserver2012还原到sqlserver2008会报错 用数据库日志文件对数据库进行还原一 将日志文件.mdf文件和.ldf文件copy放置在sq ...
- sqlserver还原差异备份
因为之前遇到还原差异备份,最开始遇到SQLServer报错:"无法还原日志备份或差异备份,因为没有文件可用于前滚".查阅很多资料后,终于得到解决.收集整理成这篇随笔. 问题原因:出 ...
- SqlServer 还原他服数据库只建立发布却删除不了
本想做测试,从另一台服务器备份数据库还原到本机. 创建了一个发布,却删除不了,提示如下图: 参考论坛:http://bbs.csdn.net/topics/300046417 发现是数据库所有者问题, ...
- sqlserver 还原数据库
1.解决什么问题? a.还原数据库的时候老是提示 不能独占 2.解决方案 ALTER DATABASE [ datebase] SET OFFLINE WITH ROLLBACK IMMEDIATE ...
- Sqlserver 角色那些事
固定服务器角色 描述 sysadmin 可以在SQLServer 中执行任何活动. serveradmin 可以设置服务器范围的配置选项,关闭服务器. setupadmin 可以管理链接服务器和启动过 ...
- SqlServer 还原,备份 Sql脚本命令
备份 USE master go ),); set @path='d:\backup\'; set @name=@path+'TsDb.bak'; Backup database TsDb To di ...
- 解决sqlserver还原数据库失败命令
1.使用Master数据库 2.选择数据库 select * from master.sys.sysprocesses where dbid=db_id('database') 3.查出进程使用kil ...
- MS SqlServer还原数据库,出现媒体簇的结构不正确
出现此问题,是数据库版本过低导致,只要保证连接实例所在的版本号>=要还原的数据库的版本号,即可还原成功. 可以使用select @@VERSION,查看当前实例版本.
随机推荐
- Oracle 过程控制语句整理
分支语句/循环语句 v_case ) :; begin then dbms_output.put_line('条件成立'); elsif then then dbms_output.put_line( ...
- bzoj 1821: [JSOI2010]Group 部落划分 Group
#include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #def ...
- hdu 4619 Warm up 2
http://acm.hdu.edu.cn/showproblem.php?pid=4619 根据题意可知,每一个方格可能只被一个骨牌覆盖 可能被两个骨牌覆盖 也可能不被覆盖 有一个骨牌覆盖的方格(单 ...
- cmd命令行中的errorlevel和延迟赋值
最近用到了命令行,一点心得: 1.errorlevel返回的确实是上一条命令的返回值,但不同命令的表现完全不同.比如: dir echo %errorlevel% //显示0 dir aldkalf ...
- Android调用Sqlite数据库时自动生成db-journal文件的原因
数据库为了更好实现数据的安全性,一半都会有一个Log文件方便数据库出现意外时进行恢复操作等.Sqlite虽然是一个单文件数据库,但麻雀虽小五脏俱全,它也会有相应的安全机制存在 这个journal文件便 ...
- fqrouter让安卓手机登陆facebook成为可能
大多数人向来都是在电脑上通过各种代理工具来访问一些国外网站,例如facebook,twitter,然而你是否想过可以通过你的手机来畅游这些网站呢,接下来我将介绍一种通过fqrouer实现使用安卓手机畅 ...
- 编写一个小Servlet程序
1.编写一个java类,此类继承HttpServlet 创建完工程(见上一篇随笔:使用eclipse创建在myeclipse中运行的web工程),在src中新建一个包,包名字叫servlet:再新建一 ...
- java的动态绑定和静态绑定
首先是方法的参数是父类对象,传入子类对象是否可行然后引出Parent p = new Children();这句代码不是很理解,google的过程中引出向上转型要理解向上转型又引出了动态绑定从动态绑定 ...
- 加强版for循环
/*加强版for循环 * 5.0以后有加强版for循环 * for(String name:nameArray){} * 1.String name:声明会带有数组单一元素的循环变量 * 数组元素 ...
- jQuery 动态添加瀑布流
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...