SQL Server移植

本文介绍如何将 SQLServer 2008 数据库移植到 2016 版本,并解决移植过程中出现的孤立用户问题。通过备份还原数据库后,提供了 SQL 脚本用于将数据库用户与登录用户关联。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近项目需要把SQL Server 2008 移植到 2016版本上

主要移植方法 参考:http://blog.youkuaiyun.com/zhoukun1008/article/details/48101843

选择bak备份方法进行移植

SQL server还原数据库后,产生了孤立用户。即数据库用户无法登录SQL server。所以还原备份后,要将数据库中的用户添加为登录用户。

//查看所有用户数据库
select name from master..sysdatabases where sid != 0x01

//查看当前数据库的用户
use EntryCAPLYFtmp
go
exec sp_helpuser


--还原数据库后,关联孤立用户,即将数据库用户添加至登录用户,此SQL仅支持一个一个数据库恢复。
--所用数据库,手动修改
use databaseName
go

--列出关联前的孤立用户
exec sp_change_users_login 'REPORT'

declare @username nvarchar(50)

create table #temp_user(
  username nvarchar(50),
  UserSID int
) 

insert into #temp_user exec sp_change_users_login @Action='Report'

declare temp_cursor cursor for
select username from #temp_user

open temp_cursor
fetch next from temp_cursor into @username
WHILE (@@FETCH_STATUS=0)
begin
 --创建登录用户,密码全部设为 'xxxx'
 exec  sp_change_users_login 'Auto_Fix', @username, NULL, 'xxxx';
 --将数据库用户与已创建的登录用户关联
 exec  sp_change_users_login @Action='update_one',@UserNamePattern=@username,@LoginName=@username;
 fetch next from temp_cursor into @username
end 
close temp_cursor
deallocate temp_cursor
drop table  #temp_user

--创建完成后,再次列出孤立用户,此时应该为空,即用户全部添加完成
exec sp_change_users_login 'REPORT'

此方法添加的登录用户与数据库用户名字一样,若数据库用户含有非法字符,则不能添加,可以手动添加

--如果已有登录用戶,将用戶名映射为指定的登录名
    exec sp_change_users_login 'UPDATE_ONE','用戶名','登录名'
    or
    exec sp_change_users_login 'AUTO_FIX','用戶名'
--如果沒有建立登录用戶
    exec sp_change_users_login 'Auto_Fix', '登录名', NULL, '登录密码'


移植后的检验:

use databaseName

//查看触发器
select * from databaseName WHERE type = 'TR'
//查看用户表
select * from databaseName WHERE TYPE='U'
//查看视图
select * from databaseName where type='V'
//查看存储过程
select * from databaseName where type='P'
//查看触发器SQL代码
exec sp_helptext triggerName


暂时先写这些,后续遇到问题再更

第一次写博客排版有点乱。。。我尽力了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值