原服务器上一个一个库备份

以一个数据库为例

1.打开studio工具,进入数据库,选中第一个数据库,点击任务-》备份

2.添加备份到文件目录和文件名称

3.拷贝备份好的文件到目标服务器

  1. 目标服务器上一个个还原

粘贴到目标服务文件夹上

2.打开studio,在数据库上选择还原数据库

3.选择设备,选择到刚才拷贝过来的文件,如果文件目录为空,则选择所有文件格式就出现了,点击确定还原。

  1. 使用navicat检查数据库是否都已迁移成功

打开原服务器和目标服务器的studio,选择属性,点击文件,查看大小是否一致,注意:数据库文件路径会自动变更到sqlserver安装目录

遇到的问题:

1.还原文件太大,超过1024M的问题

解决办法:

1.sqlserver express版本有这个1024M大小的限制,升级成enterprise版本即可解决。

SQL Server 2019

Enterprise:HMWJ3-KY3J2-NMVD7-KG4JR-X2G8G(亲测可用)

Enterprise Core:2C9JR-K3RNG-QD4M4-JQ2HR-8468J

Strandard:PMBDC-FXVM3-T777P-N4FY8-PKFF4

Web:33QQK-WWQNB-G6T46-C86YB-TX2PH

SQL Server 2017

Enterprise:TDKQD-PKV44-PJT4N-TCJG2-3YJ6B

Enterprise Core:6GPYM-VHN83-PHDM2-Q9T2R-KBV83

Strandard:PHDV4-3VJWD-N7JVP-FGPKY-XBV89

Web:WV79P-7K6YG-T7QFN-M3WHF-37BXC

SQL Server 2016

Enterprise:MDCJV-3YX8N-WG89M-KV443-G8249

Enterprise Core:TBR8B-BXC4Y-298NV-PYTBY-G3BCP

Standard:B9GQY-GBG4J-282NY-QRG4X-KQBCR

Web:BXJTY-X3GNH-WHTHG-8V3XK-T8243

SQL Server 2014

Business Intelligence:GJPF4-7PTW4-BB9JH-BVP6M-WFTMJ

Developer:82YJF-9RP6B-YQV9M-VXQFR-YJBGX

Enterprise:27HMJ-GH7P9-X2TTB-WPHQC-RG79R

Enterprise Core:TJYBJ-8YGH6-QK2JJ-M9DFB-D7M9D

Strandard:P7FRV-Y6X6Y-Y8C6Q-TB4QR-DMTTK

Web:J9MBB-R8PMP-R8WTW-8JJRD-C6GGW

1.打开sqlserver安装中心,点击维护-》版本升级

2.输入上面的产品密钥,点击下一步

3.接受许可下一步

4.下一步

5.点击升级,升级完成后在重复之前还原的数据库操作

2.查看安装的sqlserver的版本

在sqlserver studio工具上,新建查询-》输入select @@version-》点击执行,查看结果即可知道是什么版本的

或者在navicat执行下面sql

1
2
SELECT SERVERPROPERTY('servername') AS 实例名,SERVERPROPERTY('ProductVersion') AS 实例版本, SERVERPROPERTY('Edition') AS 产品版本,
SERVERPROPERTY('ProductLevel') AS 版本级别, @@VERSION AS 版本信息

3.还原数据库后,发现登录用户名没有迁移过来。

解决方案:

1.连接sqlserver服务器,打开studio,新建查询,粘贴下面最新代码,点击执行

登录账号:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
USE master
GO
IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL
DROP PROCEDURE sp_hexadecimal
GO
CREATE PROCEDURE sp_hexadecimal
@binvalue varbinary(256),
@hexvalue varchar (514) OUTPUT
AS
DECLARE @charvalue varchar (514)
DECLARE @i int
DECLARE @length int
DECLARE @hexstring char(16)
SELECT @charvalue = '0x'
SELECT @i = 1
SELECT @length = DATALENGTH (@binvalue)
SELECT @hexstring = '0123456789ABCDEF'
WHILE (@i <= @length)
BEGIN
DECLARE @tempint int
DECLARE @firstint int
DECLARE @secondint int
SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))
SELECT @firstint = FLOOR(@tempint/16)
SELECT @secondint = @tempint - (@firstint*16)
SELECT @charvalue = @charvalue +
SUBSTRING(@hexstring, @firstint+1, 1) +
SUBSTRING(@hexstring, @secondint+1, 1)
SELECT @i = @i + 1
END

SELECT @hexvalue = @charvalue
GO

IF OBJECT_ID ('sp_help_revlogin') IS NOT NULL
DROP PROCEDURE sp_help_revlogin
GO
CREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL AS
DECLARE @name sysname
DECLARE @type varchar (1)
DECLARE @hasaccess int
DECLARE @denylogin int
DECLARE @is_disabled int
DECLARE @PWD_varbinary varbinary (256)
DECLARE @PWD_string varchar (514)
DECLARE @SID_varbinary varbinary (85)
DECLARE @SID_string varchar (514)
DECLARE @tmpstr varchar (1024)
DECLARE @is_policy_checked varchar (3)
DECLARE @is_expiration_checked varchar (3)

DECLARE @defaultdb sysname

IF (@login_name IS NULL)
DECLARE login_curs CURSOR FOR

SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM
sys.server_principals p LEFT JOIN sys.syslogins l
ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name <> 'sa'
ELSE
DECLARE login_curs CURSOR FOR


SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM
sys.server_principals p LEFT JOIN sys.syslogins l
ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name = @login_name
OPEN login_curs

FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin
IF (@@fetch_status = -1)
BEGIN
PRINT 'No login(s) found.'
CLOSE login_curs
DEALLOCATE login_curs
RETURN -1
END
SET @tmpstr = '/* sp_help_revlogin script '
PRINT @tmpstr
SET @tmpstr = '** Generated ' + CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */'
PRINT @tmpstr
PRINT ''
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
PRINT ''
SET @tmpstr = '-- Login: ' + @name
PRINT @tmpstr
IF (@type IN ( 'G', 'U'))
BEGIN -- NT authenticated account/group

SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' FROM WINDOWS WITH DEFAULT_DATABASE = [' + @defaultdb + ']'
END
ELSE BEGIN -- SQL Server authentication
-- obtain password and sid
SET @PWD_varbinary = CAST( LOGINPROPERTY( @name, 'PasswordHash' ) AS varbinary (256) )
EXEC sp_hexadecimal @PWD_varbinary, @PWD_string OUT
EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT

-- obtain password policy state
SELECT @is_policy_checked = CASE is_policy_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name
SELECT @is_expiration_checked = CASE is_expiration_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name

SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' WITH PASSWORD = ' + @PWD_string + ' HASHED, SID = ' + @SID_string + ', DEFAULT_DATABASE = [' + @defaultdb + ']'

IF ( @is_policy_checked IS NOT NULL )
BEGIN
SET @tmpstr = @tmpstr + ', CHECK_POLICY = ' + @is_policy_checked
END
IF ( @is_expiration_checked IS NOT NULL )
BEGIN
SET @tmpstr = @tmpstr + ', CHECK_EXPIRATION = ' + @is_expiration_checked
END
END
IF (@denylogin = 1)
BEGIN -- login is denied access
SET @tmpstr = @tmpstr + '; DENY CONNECT SQL TO ' + QUOTENAME( @name )
END
ELSE IF (@hasaccess = 0)
BEGIN -- login exists but does not have access
SET @tmpstr = @tmpstr + '; REVOKE CONNECT SQL TO ' + QUOTENAME( @name )
END
IF (@is_disabled = 1)
BEGIN -- login is disabled
SET @tmpstr = @tmpstr + '; ALTER LOGIN ' + QUOTENAME( @name ) + ' DISABLE'
END
PRINT @tmpstr
END

FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin
END
CLOSE login_curs
DEALLOCATE login_curs
RETURN 0
GO

exec sp_help_revlogin

登录角色权限:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
--查看登录名服务器角色
SELECT sp.name AS [login_name]
,CASE WHEN sp.[type]='S' THEN 'SQL 登录名'
WHEN sp.[type]='U' THEN 'Windows 登录名'
WHEN sp.[type]='G' THEN 'Windows 组'
WHEN sp.[type]='R' THEN '服务器角色'
WHEN sp.[type]='C' THEN '映射到证书的登录名'
WHEN sp.[type]='K' THEN '映射到非对称密钥的登录名'
END AS [principal_type]
,sp.is_disabled
,ISNULL(sp.default_database_name,'') as [default_database_name]
,ISNULL(rsp.name,'') AS [server_role]
,STUFF((SELECT ','+permission_name FROM sys.server_permissions spp where sp.principal_id=spp.grantee_principal_id for xml path('')),1,1,'') as [permissions]
FROM sys.server_principals sp
LEFT JOIN sys.server_role_members srm ON sp.principal_id=srm.member_principal_id
LEFT JOIN sys.server_principals rsp ON srm.role_principal_id=rsp.principal_id
where rsp.name is not null
ORDER BY [principal_type],sp.principal_id
--授权服务器角色
select N'EXEC sp_addsrvrolemember N''' +sp.name+ ''' ,N''' + rsp.name+''' '
FROM sys.server_principals sp
LEFT JOIN sys.server_role_members srm ON sp.principal_id=srm.member_principal_id
LEFT JOIN sys.server_principals rsp ON srm.role_principal_id=rsp.principal_id
where rsp.name is not null

-- 将登录名添加为某个服务器级角色的成员
EXEC sp_addsrvrolemember @loginame= 'kk' ,@rolename = 'sysadmin'
-- master库中的用户名及权限可以用如下脚本进行迁移。
-- 授予【数据库角色成员身份】权限
SELECT 'exec sp_addrolemember N'''+g.name+''', N'''+u.name+''''
FROM sys.database_principals u
inner join sys.database_role_members m on u.principal_id = m.member_principal_id
inner join sys.database_principals g on g.principal_id = m.role_principal_id
ORDER BY g.name,u.name
-- 授予【安全对象】权限
SELECT N'grant '+B.permission_name collate chinese_prc_ci_ai_ws+N' on ['+A.name+N'] to ['+C.name+N']'
FROM sys.sysobjects A(NOLOCK)
INNER JOIN sys.database_permissions B(NOLOCK) ON A.id=B.major_id
INNER JOIN sys.database_principals C(NOLOCK) ON B.grantee_principal_id=C.principal_id
--WHERE C.name='kk' --A.name='objectName'

2.将执行结果复制粘贴到目标服务器上,删选出是业务数据库的登录名和密码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
-- Login: HREPORT
CREATE LOGIN [HREPORT] WITH PASSWORD = 0x0200F7AD1A8BCFD58DF75D5A65C8CBCFF95DEA6E5F3EC4D86C46628706265246F116438FBC3F0D57631F77BA141BA5C96E07BC587A7F2FF9848FAB9B39AB3C891E7ED25BD361 HASHED, SID = 0x532EB0B55FCE994BAD639BB8DDBD1CEB, DEFAULT_DATABASE = [HREPORT], CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF
 
-- Login: MYREPORT
CREATE LOGIN [MYREPORT] WITH PASSWORD = 0x02001BA93BAC3B23DE961651D31F56358E16FC049C70D2B427AD4137B2F71BA5755AB6B74326FD03FBB0DB1439AE9973E3475356EE89111200FFEE1EA84FE4C8D1C4A0667C2E HASHED, SID = 0x246E6F12E4E769448AC1B60F9F17D2F3, DEFAULT_DATABASE = [MYREPORT], CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF
 
-- Login: MYDATACORE
CREATE LOGIN [MYDATACORE] WITH PASSWORD = 0x02004EDC67C386DF21F0FF1CB75A623D337D1492F44B0FADE3FEB9DE499E73ACFE0788A6074A0EE8CD613E1EAFEEDA96D35587004B0702F22D11A05AB97F379656A686157016 HASHED, SID = 0xEAE905C535E229488CA7020F401BB60C, DEFAULT_DATABASE = [MYDATACORE], CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF
 
-- Login: EWBD
CREATE LOGIN [EWBD] WITH PASSWORD = 0x0200A588720B5BC3695D4CFE4ED3D6F4F4864222B4F0589A97FB6B240D870722B51013FB4CF454002D8E70D3FA1B19FC5C6761D219525C87FEF150A1AE3B5D8889BCE408A10D HASHED, SID = 0x125B191D59EF0A4E98298BC38EC2233C, DEFAULT_DATABASE = [EWBD], CHECK_POLICY = ON, CHECK_EXPIRATION = ON
 
-- Login: VMP
CREATE LOGIN [VMP] WITH PASSWORD = 0x0200F326B560FA2DF7974D0999EABCE1A5C0C35DF4829BBABEBDF0EB65C1065C32A896275FD3287C031FAA837D0F799BEA26A90DBE089F3028687CAB9245907B0E7BB9E744B0 HASHED, SID = 0xE8036160705F164FA18738E3DC66F25C, DEFAULT_DATABASE = [VMP], CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF

EXEC sp_addsrvrolemember  N'HREPORT' ,N'sysadmin' 
EXEC sp_addsrvrolemember  N'EWBD' ,N'sysadmin' 

3.将删选出来的账户名,角色,权限粘贴到studio的查询框,点击执行。查看安全性-》登录名是否有执行成功的登录名。

参考博客:

密钥来源博客:https://blog.csdn.net/firelightlong/article/details/102947775

用户,角色,权限迁移参考博客:

https://www.cnblogs.com/gered/p/11511365.html

https://blog.51cto.com/hz022/405210