【发布时间】:2015-04-23 23:02:01
【问题描述】:
在我深入研究之前寻求一些建议。让我解释一下这个问题和我目前的过程。
我们目前的开发团队需要将来自 Prod 数据库的刷新数据放入 DEV 数据库。需求会发生变化,有时他们只需要表格,而其他时候他们需要以下不同的子集
Tables
Views
Stored Procedures
Users
Schemas
目前该过程完全是手动的,如下所述
- 禁用负责复制 Prod DB 的作业(实际上是备用)
- 突出显示 Prod DB 和“生成脚本”
- 选择所需的选项(参见上文,例如表格视图等)
- 备份开发数据库(以防万一)
- sp_msforeachtable 并从 dev db 中删除每个表
- 在 dev db 上执行第 2 步生成的脚本
- 然后使用导入向导从 prod 源中提取数据
- 通常需要额外的 sql 脚本才能在新的 Dev DB(洗涤器)上运行导入后
- 为 repl 在 prod 上启用作业
SQL Server 实例主机可以更改,数据库也可以更改,因此需要传递变量。 SQL Server 是 Windows 2008 上的 2008。我托管脚本/实例的机器可以是任何版本的 windows 和任何版本的 SQL Server。
我希望将这个过程自动化,起初只针对 SA 团队(ps 或 cli 也可以)。最终(希望迟早)不过以某种类型的 ui 将其呈现给开发团队,以便他们管理自己。
如果这一切都从运行 SQL Server 的管理框而不是托管数据库的 SQL Server 实例中运行,我更愿意。我不确定有哪些可用的选项,但我怀疑可以使用 SSIS 或 PowerShell 和 SMO,我确信还有其他粗略的方法。
我希望这有点优雅,以便管理人员可以轻松展示。我对 PowerShell 和 SQL 很熟悉,但对 SSIS 没有经验。
无论如何都在寻找一些建议。
编辑:
所以我的要求实际上已经改变了。我现在需要清理数据然后备份,然后发布到开发人员的共享。我即将完成我的脚本,这是使用 SMO 的 powershell。我将在下面给出一个简短的描述,当我完成时,我会发布更多细节。 Prod 结束了,备份也结束了。我们已经为我的网站启用了日志传送,这是我必须使用的数据。步骤可能会造成一些麻烦,但这是必要的,因为 db 是备用的。
- 通过使用 smo 循环访问源数据库来创建新数据库以进行文件/文件设置
- 用standby / readonly备份新创建的数据库
- 停止作业以将日志传送到源数据库
- 使源数据库脱机
- 使新创建的数据库脱机
- 用源数据库文件替换新创建的数据库文件
- 让两个 DB 重新上线
- 启动作业以将日志传送到源数据库
- 使用恢复恢复新创建/新复制的文件数据库
- 执行 .sql 清理新数据库
- 备份新数据库
- 复制以供开发人员共享
就是这样,所有与sql相关的工作都是通过SMO完成的。我已经完成了,我已经为每一步都构建了功能,我只需要把它们放在一起。
不漂亮,但能胜任……该死的!
编辑 2:
我最终备份、复制本地、清理、使用压缩再次备份,而不是在一夜之间通过 WAN 复制。我通过任务调度程序/ps/SMO 完成了这一切。
感谢所有提供建议的人
【问题讨论】:
-
我认为你在正确的轨道上。您可以使用 SMO 编写数据库架构脚本并使用 SSIS 移动数据。
-
感谢 Mike,要求已更改。我现在正在备份、恢复、清理、备份,然后复制最终备份:)。当我完成时,我会发布我想出的东西。我使用 SMO 是因为它的价值。
-
如果你可以使用备份/恢复,那肯定更容易。 :-)
-
出于兴趣,您的数据库有多大?我正在使用一些技术,可以创建类似 prod 的数据库克隆,但不会占用额外的存储空间,并且想知道这是否对任何人有用。
-
它们会有所不同,但大约 100gb。什么技术?
标签: sql-server database powershell ssis database-replication