还原数据库时,还原孤立用户

SQL Server 2005/2008的解决办法

(SQL2005中,由于微软做了重大调整,正常情况下不允许对系统表进行即席更新操作,所以要采用和SQL 2000完全不同的操作手法)

孤立帐户,就是某个数据库的帐户只有用户名而没有登录名,这样的用户在用户库的sysusers系统表中存在,而在master数据库的syslogins中却没有对应的记录。

孤立帐户的产生一般是一下两种:
1.将备份的数据库在其它机器上还原;
2.重装系统或SQL SERVER之后只还原了用户库
解决方法是使用sp_change_users_login来修复。
sp_change_users_login的用法有三种
用法1:
exec sp_change_users_login 'REPORT'
列出当前数据库的孤立用户
用法2:
exec sp_change_users_login 'AUTO_FIX','用户名'  (SQL Express)

或者

exec sp_change_users_login 'AUTO_FIX','用户名',null,'新用户密码'  (SQL Server)
可以自动将用户名所对应的同名登录添加到syslogins中
用法3:
exec sp_change_users_login 'UPDATE_ONE','用户名','登录名'
将用户名映射为指定的登录名。

 

 

SQL Server2000-数据库迁移及孤立用户的解决办法

        有时候,我们会需要将一个数据库从一个服务器移到另一个服务器上。这种迁移分两种情况,一种是整个数据服务器全部迁移,一种是只移其中的个别数据库。
        相对来说,全部迁移比较好办,问题比较少,不过一般要考虑数据库停用造成的服务停顿问题。具体来说,全部迁移我一般采用以下两种简便方法:一、在目标机上做好服务后,目标机和源机都停止服务,直接将所有数据库文件拷到目标机上,此法要求两机数据库文件的目录一致。二、备份源机上所有数据库,包括系统表,然后在目标机上用这些备份文件一个一个数据库还原,注意系统数据库要求用单用户模式才能还原(停数据库,从命令提示符输入:sqlservr.exe -c -m)。此外,如果源与目标数据库的路径不一致时,要设置好还原到什么路径,否则还原也不能成功。
        全部还原一般不会出现与用户有关的问题,而迁个别数据库则容易产生用户问题,产生这些问题的原因是保存在数据库的sysusers表中的用户的ID和保存在master.dbo.syslogins的登录ID有出入,造成用户和数据库登录不能联系起来,引起存储过程不能用,权限不能归还用户等等问题,而且这种孤立在数据库中的用户是不能在企业管理器中删除、修改的。
        其实在M$的帮助中,这种用户账号叫做“孤立用户”,同时它也提供了解决的方案--把那个用户删除。
         可是删除这些用户并不是好方法,因为你以前做的跟这个用户有关的操作又要重新做,所以最好的办法是为这些用户找回与登录的关联。

前提是先建立好了对应的登录。

例子:比如还原时,发现了一个孤立用户abc。
于是,在目标数据库中,先建立名为abc的用户登录,然后以sa身份登录查询分析器,切换到目标数据库,比如ume(use ume;),执行下述语句段(替换具体的数据库名字),即可将孤立用户abc还原成目标库中的新用户abc

exec sp_configure 'allow updates',1 reconfigure with override
update db set sid=s.sid
from 具体的数据库名字.dbo.sysusers db
join master.dbo.syslogins s on db.name=s.name
where db.sid != s.sid and db.islogin=1
exec sp_configure 'allow updates',0 reconfigure with override

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值