浅文,高手免开骂口。

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

exec sp_configure 'allow updates',1 reconfigure with override
update db set sid=s.sid
from dbname.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

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

 

浅文,高手免开骂口。