有人知道CheckPoint的吗,请问怎么关闭这个进程

wasx1 2012-12-25 03:02:05
将数据库设置为Single_User的时候,需要关闭CheckPoint,请问有哪个人知道如何关闭CheckPoint的吗?
谢谢指教啦!
...全文
458 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2012-12-29
  • 打赏
  • 举报
回复
我是用公司开发人员开发好的工具一次性批量执行脚本的。没发生你的问题,不过你可以考虑一下我这个: http://blog.csdn.net/dba_huangzj/article/details/8350829 这是在没有工具的情况下用的。
wasx1 2012-12-29
  • 打赏
  • 举报
回复
引用 29 楼 DBA_Huangzj 的回复:
那就不设置咯,毕竟你“打算”设为single_user,其实就意味着你觉得可以不给人访问了,那么这时候应该是客户几乎没有或者较少的时候了,按道理不需要设置什么。
是的,此时没有其他的客户,我只用Query Editor运行Upgrade的SQL语句,也会出现这个错误,这个才是让我纠结的,所以我才怀疑是不是CheckPoint的问题。
發糞塗牆 2012-12-29
  • 打赏
  • 举报
回复
那就不设置咯,毕竟你“打算”设为single_user,其实就意味着你觉得可以不给人访问了,那么这时候应该是客户几乎没有或者较少的时候了,按道理不需要设置什么。
wasx1 2012-12-29
  • 打赏
  • 举报
回复
引用 27 楼 DBA_Huangzj 的回复:
1、有补丁的话尽量打上去,前提是要微软发布的。 2、我公司也需要经常做你这些操作,我都是在深夜执行,也不需要改什么配置。所以如果你的系统可以的话也想我这样就可以了。
我用的补丁是微软发布的。我的操作系统,OFFICE,SQL Server全部都是正版的。 所以我现在就是在纠结这个问题应该怎么解决呢?现在依旧没有找到解决的办法。
發糞塗牆 2012-12-29
  • 打赏
  • 举报
回复
1、有补丁的话尽量打上去,前提是要微软发布的。 2、我公司也需要经常做你这些操作,我都是在深夜执行,也不需要改什么配置。所以如果你的系统可以的话也想我这样就可以了。
wasx1 2012-12-29
  • 打赏
  • 举报
回复
引用 25 楼 DBA_Huangzj 的回复:
竟然你考虑使用single_user,那可以考虑使用另外一个【限制访问 】,因为single_user很可能把你升级的时候系统级别的会话都挡掉,就会造成你那个报错,而【限制访问】可以有: 指定哪些用户可以访问该数据库。可能的值有: 多个 生产数据库的正常状态,允许多个用户同时访问该数据库。 单个 用于维护操作,一次只允许一个用户访问该数据库。 限制 只有 db_owner、db……
我在对数据库进行访问的时候,是只有我自己一个用户来对这个数据库进行访问的啊,可是我不知道为什么会出现这个错误?当我设置成Restricted_User的时候,也出现过类似的错误。所以我现在不知道如何来避免这个错误。我猜测可能是和SQL Server的补丁有关系。我打了SP1的补丁之后才出现了这个错误。
發糞塗牆 2012-12-29
  • 打赏
  • 举报
回复
竟然你考虑使用single_user,那可以考虑使用另外一个【限制访问 】,因为single_user很可能把你升级的时候系统级别的会话都挡掉,就会造成你那个报错,而【限制访问】可以有: 指定哪些用户可以访问该数据库。可能的值有: 多个 生产数据库的正常状态,允许多个用户同时访问该数据库。 单个 用于维护操作,一次只允许一个用户访问该数据库。 限制 只有 db_owner、dbcreator 或 sysadmin 角色的成员才能使用该数据库。 这个比single_user更灵活。 或者选择闲时,不改动属性,直接Upgrade
wasx1 2012-12-29
  • 打赏
  • 举报
回复
引用 22 楼 DBA_Huangzj 的回复:
引用 21 楼 wasx1 的回复: 引用 20 楼 DBA_Huangzj 的回复: single_user一般是用来修复数据库或者检查异常用的,你用来创建函数?如果是这样那太不合适了。 将数据库设置为Single_User是当Update该数据库时,提高Update的速度和防止别的人或者程序来修改该数据库。你搞那么大工程就是为了这个?你这样影响并发啊。你要是非要这样做,那么update语……
首先谢谢你的帮助啦。其次,可能是我表达不清楚,让你误解了,对不起。 我说的Update数据库不仅仅是使用Update语句,还有很多创建procedure、function、trigger等等,或许应该说是Upgrade数据库这种说法更好。如果数据库很大的话,Upgrade数据库需要二三个小时甚至更久。基于这种考虑,采用了Single_User的模式。 比如我在SQL语句里用到了某个语句insert into FolderDependency select @Owner, Owner, Id from [AllNamedElementsInContainer](@Owner)。[AllNamedElementsInContainer]的声明是
CREATE FUNCTION [dbo].[AllNamedElementsInContainer] 
(
@owner ObjectId
)
RETURNS 
@result TABLE 
(
Id UNIQUEIDENTIFIER PRIMARY KEY,
Owner UNIQUEIDENTIFIER
)
当时错误总是出现在这个地方,提示"'Database '<db_name>' is already open and can only have one user at a time'"。之后我决定不用这个函数了,直接将其实现放在调用的地方,原来函数的传入传出参数改成了
declare @members TABLE
(
	Id uniqueidentifier,
	Owner uniqueidentifier,
	Kind int
);
declare @result TABLE 
(
	Id UNIQUEIDENTIFIER PRIMARY KEY,
	Owner UNIQUEIDENTIFIER
);
这个错误最开始出现在SQL Server 2008 SP3上,然后当我改成了后面的这种形式,这个错误就没有。 但是现在发现在SQL Server 2008 R2 SP1上又出现了错误, 采用了你的停用其他的SQL Server服务之后,依旧出现这个错误,我只好采用如下的声明形式
CREATE TABLE members
(
	Id uniqueidentifier,
	Owner uniqueidentifier,
	Kind int
);
CREATE TABLE result 
(
	Id UNIQUEIDENTIFIER PRIMARY KEY,
	Owner UNIQUEIDENTIFIER
);
测试了129次,没有发现错误。我猜测这种修改应该是正确的。请问你的看法呢?你知不知道这个问题是如何发生的么? 关键是后面还有很多SQL语句,创建了很多的Function,也是采用如上的方式,也更加复杂,我不可能一一将他们全部改正过来,最好还是采用原来的形式,所以请问你有更好的建议么,谢谢啦。
a383324743 2012-12-27
  • 打赏
  • 举报
回复
版主 果然是版主
發糞塗牆 2012-12-27
  • 打赏
  • 举报
回复
引用 21 楼 wasx1 的回复:
引用 20 楼 DBA_Huangzj 的回复: single_user一般是用来修复数据库或者检查异常用的,你用来创建函数?如果是这样那太不合适了。 将数据库设置为Single_User是当Update该数据库时,提高Update的速度和防止别的人或者程序来修改该数据库。
你搞那么大工程就是为了这个?你这样影响并发啊。你要是非要这样做,那么update语句前加上SET TRANSACTION ISOLATION LEVEL SERIALIZABLE就可以拉。
wasx1 2012-12-27
  • 打赏
  • 举报
回复
引用 20 楼 DBA_Huangzj 的回复:
single_user一般是用来修复数据库或者检查异常用的,你用来创建函数?如果是这样那太不合适了。
将数据库设置为Single_User是当Update该数据库时,提高Update的速度和防止别的人或者程序来修改该数据库。
發糞塗牆 2012-12-27
  • 打赏
  • 举报
回复
single_user一般是用来修复数据库或者检查异常用的,你用来创建函数?如果是这样那太不合适了。
wasx1 2012-12-27
  • 打赏
  • 举报
回复
引用 18 楼 DBA_Huangzj 的回复:
试试: 步骤1、关闭所有服务,从SQLServer配置管理器去关闭,而不要用Windows的【服务】去关闭。保留SQLServer引擎。 步骤2、登录ssms,打开一个新页面,用语句来把数据库设为single_user 步骤3、重启SQLServer引擎。但是不要关闭ssms那个界面。 步骤4、对那个页面做你的操作,第一次会提示连接数据库的。脸上之后选择指定的库。 应该就没问题。和那……
非常感谢你的建议。 我按照你说的尝试了多次,有效果,但是依然可以出现错误,只是概率降低了一部分。 我发现这个错误多出现在类似于下面的创建函数的部分
create function [AllNameSpacesFor]
(
@owner ObjectId		
)
returns @result table
(
Id uniqueidentifier primary key
)
请问你有什么合适的建议么?谢谢啦。
發糞塗牆 2012-12-25
  • 打赏
  • 举报
回复
试试: 步骤1、关闭所有服务,从SQLServer配置管理器去关闭,而不要用Windows的【服务】去关闭。保留SQLServer引擎。 步骤2、登录ssms,打开一个新页面,用语句来把数据库设为single_user 步骤3、重启SQLServer引擎。但是不要关闭ssms那个界面。 步骤4、对那个页面做你的操作,第一次会提示连接数据库的。脸上之后选择指定的库。 应该就没问题。和那个checkpoint没啥关系。我都是这样搞的,如果是你的单机,把网线拔了。
wasx1 2012-12-25
  • 打赏
  • 举报
回复
引用 13 楼 DBA_Huangzj 的回复:
你不能也不应该kill掉小于等于50的那些spid因为是系统的,你就不用管了。我也改过single_user。完全没问题。你试试:
1、把数据库设为single_user
2、如果可以,那么只留下SQLServer那个服务,其他服务关闭,而这个服务先重启一下,保证清理一次其他用户。


谢谢你的帮助啦。
我已经只留下一个SQL服务,但是还是会出现这个错误。
發糞塗牆 2012-12-25
  • 打赏
  • 举报
回复
引用 14 楼 wasx1 的回复:
引用 9 楼 guguda2008 的回复: 这个和checkpoint没关系吧 你觉得应该是什么引起在Single_User的模式下,会导致出现"'Database '<db_name>' is already open and can only have one user at a time'"这样的错误? 我是直接在Query Edit里面直接运行SQL语句的,但是也出现这个错……
你打开的那个query edit本身就占用了一个进程,如果还有另外一个,那么就会报你那个错
wasx1 2012-12-25
  • 打赏
  • 举报
回复
引用 10 楼 SmithLiu328 的回复:
根本不需要关闭CHECKPOINT,你可以KILL掉里边其他的进程,然后在更改。
请问应该关闭什么进程呢?谢谢帮助啦
wasx1 2012-12-25
  • 打赏
  • 举报
回复
引用 9 楼 guguda2008 的回复:
这个和checkpoint没关系吧
你觉得应该是什么引起在Single_User的模式下,会导致出现"'Database '<db_name>' is already open and can only have one user at a time'"这样的错误? 我是直接在Query Edit里面直接运行SQL语句的,但是也出现这个错误。
發糞塗牆 2012-12-25
  • 打赏
  • 举报
回复
你不能也不应该kill掉小于等于50的那些spid因为是系统的,你就不用管了。我也改过single_user。完全没问题。你试试: 1、把数据库设为single_user 2、如果可以,那么只留下SQLServer那个服务,其他服务关闭,而这个服务先重启一下,保证清理一次其他用户。
wasx1 2012-12-25
  • 打赏
  • 举报
回复
引用 7 楼 fredrickhu 的回复:
引用 5 楼 wasx1 的回复: 引用 4 楼 DBA_Huangzj 的回复:你这个错误应该是因为sql agent引起的,而msdn没说要禁掉checkpoint。反而只说当单用户的时候这个进程不会被执行而已..... 先禁用掉代理,然后尽量保证没有人连接。 请问应该怎么禁用代理呢? 对于SQL Server, 我不是太懂。 希望你可以说详细一点,谢谢啦 你的是什么版本?……
谢谢帮助啦。 我用的是SQL Server 2008 R2 SP1. 我看了一下,我没有启动SQL Agent,但是这个问题依旧出现啊
加载更多回复(11)

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧