我在 3 个不同的服务器上安装了 3 个 Sql (2008 R2) 实例。版本为 (10.50.2550.0 SP1 标准版 (64 位)、10.50.2550.0 SP1 标准版 (64 位))。目标是迁移所有数据库和登录信息对于新服务器,我们刚刚购买了 Sql server 2012。
我不知道该怎么做,我尝试使用复制数据库向导,但总是失败。如果我决定备份每个数据库并将它们还原到新服务器,我不知道如何迁移登录信息。
处理这种情况的最佳方法是什么?
抱歉造成混淆:(有关该问题的更多详细信息)
- 要移动的数据库数量:10
- 复制数据库向导期间列出的错误:
第 60 行:
OnError,DUPFAIDS,NT AUTHORITY\SYSTEM,DUAPPSRV1_EXAPPSVR1_DUPFAIDS_PFAIDS_Transfer 对象任务,{8F0C82BB-4C5D-4796-BE75-BAB033C59039},{3818CD1B-9685-46B7-AFE2-AE0FE962DA03},
2014 年 12 月 3 日下午 12:10:15,2014 年 12 月 3 日下午 12:10:15,0,0x,错误:错误代码 = -1073548784
描述=执行查询“--------------------------------------------------...”失败,出现以下错误:“对象名称‘xwd_window_disabled_objects’无效。”。
可能的失败原因:查询存在问题,“ResultSet”属性未正确设置、参数未正确设置或连接未正确建立。**
答案1
按照建议备份并恢复数据库。然后运行此 Microsoft 脚本 (https://support.microsoft.com/kb/918992) 来生成脚本,以便在新服务器上创建登录名。由于您有两个源服务器,请务必仔细检查脚本,以确保没有任何重复条目或其他问题。
答案2
迁移数据库的方法有很多种。备份和恢复是最常用的方法,但如果您有超过 100 个数据库,您可能需要编写脚本来分离和附加数据库。我已成功使用此方法将大量(数百个)数据库迁移到新服务器:
@ECHO ON
set controlfile=control.txt
set newipmdf=\\newserver\g$
set newipldf=\\newserver\e$
set oldserver=oldserver\Prod1
set oldmdfpath=d:\prod1
set newmdfpath=g:\data
set copymdfpath=m:\data
set newserver=newserver
set oldlogpath=e:\prod1
set newlogpath=e:\log
set copylogpath=l:\log
set movedmdfpath=%oldmdfpath%\moved
set movedldfpath=%oldlogpath%\moved
mkdir %movedmdfpath%
mkdir %movedldfpath%
net use m: %newipmdf%
net use l: %newipldf%
SETLOCAL DISABLEDELAYEDEXPANSION
FOR /F %%L IN (%controlfile%%) DO (
SET "line=%%L"
SETLOCAL ENABLEDELAYEDEXPANSION
ECHO !line!
sqlcmd -E -S!oldserver! -Q"EXEC master.dbo.sp_detach_db @dbname = N'!line!'"
copy "!oldmdfpath!\!line!.mdf" !copymdfpath!
copy "!oldlogpath!\!line!_log.ldf" !copylogpath!
sqlcmd -E -S!newserver! -Q"CREATE DATABASE [!line!] ON ( FILENAME = N'!newmdfpath!\!line!.mdf' ),( FILENAME = N'!newlogpath!\!line!_log.ldf' ) FOR ATTACH"
move "!oldmdfpath!\!line!.mdf" !movedmdfpath!
move "!oldlogpath!\!line!_log.ldf" !movedldfpath!
ENDLOCAL
)
ENDLOCAL
net use m: /z
net use l: /z
至于登录,我无法帮助您提供密码,但您应该能够使用以下命令获取用户名列表:
SELECT [name], type, type_desc
FROM [master].[sys].[server_principals]
where is_disabled=0 and type in ('S','U')
答案3
Katherine Villyard 的分离/附加脚本很好。
如果您想备份和恢复,这也是一个经常使用的好选择。但请先登录。
sp_hexadecimal
复制代码sp_help_revlogin
这篇 Technet 文章并用来sp_help_revlogin
生成可用于复制登录信息的 TSQL 语句。流程如下:
- 运行上述代码来创建存储过程(在 master 中)
EXEC sp_help_revlogin
在旧服务器上运行- 复制结果
sp_help_revlogin
并将其粘贴到连接到新 SQL Server 实例的新查询窗口中 - 运行刚刚粘贴的 TSQL 语句
如果操作正确,您的新实例将具有匹配的登录名(具有匹配的 SID 和密码,这是关键)。然后,您可以将数据库备份并还原到新实例,而不必担心孤立的数据库登录名。
(给未来访问者的提示:如果由于某种原因链接中断,只需进行搜索即可sp_help_revlogin
找到新页面)。