use*_*260 72 sql-server sql-server-2008
愚蠢的问题 - 在我想用生产服务器中的实例刷新开发服务器的环境中复制实例的最佳方法是什么?
我已经完成了备份恢复,但是我听说了detach-copy-attach,一个人甚至告诉我他只会复制文件系统之间的数据文件....
这三种(或两种,最后一种听起来有点可疑)接受的方法是什么?
我的理解是第二种方法更快,但由于分离方面的原因需要在源上停机.
此外,在这种情况下(想要在开发服务器上获得精确的生产副本),传输登录等的公认惯例是什么?我应该只备份和恢复用户数据库+ master + msdb吗?
MGO*_*wen 42
最简单的方法实际上是一个脚本.
在生产中运行:
USE MASTER;
BACKUP DATABASE [MyDatabase]
TO DISK = 'C:\temp\MyDatabase1.bak' -- some writeable folder.
WITH COPY_ONLY
Run Code Online (Sandbox Code Playgroud)
这一命令可将数据库的完整备份副本复制到单个文件中,而不会影响生产可用性或备份计划等.
要恢复,只需在您的开发或测试SQL Server上运行:
USE MASTER;
RESTORE DATABASE [MyDatabase]
FROM DISK = 'C:\temp\MyDatabase1.bak'
WITH
MOVE 'MyDatabase' TO 'C:\Sql\MyDatabase.mdf', -- or wherever these live on target
MOVE 'MyDatabase_log' TO 'C:\Sql\MyDatabase_log.ldf',
REPLACE, RECOVERY
Run Code Online (Sandbox Code Playgroud)
然后在每台服务器上保存这些脚本.一键便利.
编辑:
如果在恢复逻辑名称不匹配时遇到错误,您可以这样得到它们:
RESTORE FILELISTONLY
FROM disk = 'C:\temp\MyDatabaseName1.bak'
Run Code Online (Sandbox Code Playgroud)
如果您使用SQL Server登录(而不是Windows身份验证),您可以在每次恢复后(在开发/测试计算机上)运行此命令:
use MyDatabaseName;
sp_change_users_login 'Auto_Fix', 'userloginname', null, 'userpassword';
Run Code Online (Sandbox Code Playgroud)
Jos*_*ama 32
复制数据库的最快方法是使用detach-copy-attach方法,但生产用户在分离prod db时不会访问数据库.如果您的生产数据库是例如夜间没有人使用的销售点系统,您可以执行类似的操作.
如果无法分离生产数据库,则应使用备份和还原.
如果登录不在新实例中,则必须创建登录.我不建议您复制系统数据库.
您可以使用SQL Server Management Studio创建用于创建所需登录的脚本.右键单击您需要创建的登录名,然后选择Script Login As/Create.
这将列出孤立用户:
EXEC sp_change_users_login 'Report'
Run Code Online (Sandbox Code Playgroud)
如果您已拥有此用户的登录ID和密码,请执行以下操作进行修复:
EXEC sp_change_users_login 'Auto_Fix', 'user'
Run Code Online (Sandbox Code Playgroud)
如果要为此用户创建新的登录ID和密码,请执行以下操作进行修复:
EXEC sp_change_users_login 'Auto_Fix', 'user', 'login', 'password'
Run Code Online (Sandbox Code Playgroud)
Jez*_*Jez 13
更新:
我的建议告诉你如何使用SQL Server Management Studio编写数据库脚本,但SSMS中的默认设置由于某种原因错过了数据库的各种关键部分(如索引和触发器!).因此,我创建了自己的程序来正确编写数据库脚本,包括您可能添加的每种类型的DB对象.我推荐使用它.它叫做SQL Server Scripter,它可以在这里找到:https:
//bitbucket.org/jez9999/sqlserverscripter
我很惊讶没有人提到这一点,因为它非常有用:您可以使用SQL Server Management Studio 将数据库(其架构和数据)转储到脚本中.
右键单击数据库,选择"任务|生成脚本...",然后选择编写特定数据库对象的脚本.选择要复制到新数据库的那些(您可能希望至少选择表和模式).然后,对于"设置脚本选项"屏幕,单击"高级",向下滚动到"脚本数据类型",然后选择"架构和数据".单击"确定",然后完成脚本生成.你会看到,现在这已经产生了很长的脚本为你创建数据库的表和数据插入到他们!然后,您可以创建一个新数据库,并更改USE [DbName]脚本顶部的语句,以反映要将旧数据库复制到的新数据库的名称.运行脚本,旧数据库的架构和数据将被复制到新的!
这允许您从SQL Server Management Studio中完成所有操作,并且无需触摸文件系统.
小智 8
以下是我将生产环境中的数据库复制到本地环境的方法:
detach/copy/attach方法将关闭数据库.这不是你想要的东西.
备份/恢复仅在您具有生产服务器的写入权限时才有效.我使用Amazon RDS,但我没有.
由于外键,导入/导出方法实际上不起作用 - 除非您按照它们相互引用的顺序逐个执行表.您可以导入/导出到新数据库.这将复制所有表和数据,但不复制外键.
这听起来像是一个需要与数据库做的常见操作.为什么SQL Server没有正确处理?每次我不得不这样做都令人沮丧.
话虽这么说,我遇到的唯一无痛的解决方案是由社区维护的Sql Azure迁移工具.它也适用于SQL Server.
| 归档时间: |
|
| 查看次数: |
102178 次 |
| 最近记录: |