我想创建一个每周运行的脚本/作业来备份我的 PROD 数据库,并将其恢复到我的 QA 服务器,然后针对它运行自定义维护脚本以清理并准备要分析的数据。
问题是我的 QA 服务器正在运行 AlwaysOn 可用性组。我可以访问 Powershell、“DBATools.io”脚本、SQL Server 代理和远程 SQL 服务器(如果有帮助的话)。全部在SQL2016下。
我今天也刚刚发现了名为 AUTOMATIC SEEDING 的 SQL2016 功能。我试过了,它允许我绕过复杂的“将数据库添加到 AG”步骤。
所以,到目前为止,我可以将步骤简化为:
ALTER AVAILABILITY GROUP [SQLQA] REMOVE DATABASE [ProdData];
RESTORE DATABASE [ProdData]
FROM DISK=N'\\nas\Backup\ProdData.bak'
WITH FILE=1, NOUNLOAD, REPLACE, STATS=5,
MOVE N'ProdData' TO N'S:\Data\ProdData.mdf',
MOVE N'ProdData_log' TO N'T:\Log\ProdData_Log.LDF';
-- Missing a step here to physically remove the old database from the secondary server, at this point in "Recovery pending". If the old database is still there, the AUTOMATIC SEEDING will not work, nor the manual steps of adding a database to AlwaysOn for that matter.
ALTER AVAILABILITY GROUP [SQLQA] ADD DATABASE [ProdData];
-- Run custom maintenance/cleanup SQL code here
最大的问题是:我有什么选择可以摆脱旧的次要目标数据库?
或者,任何人都有一种超级热门的方法可以轻松自动地将生产数据传输到 QA 或 DEV 环境?
提前致谢。
您可以创建链接服务器并使用
Execute At LinkedServer
. 当我必须从 PROD 刷新 Dev/QA 中的 AG env 时,这就是我在当前脚本中所做的。您可以使用 powershell 等 .. 但
Execute At LinkedServer
可以很好地满足我的需要。下游环境的刷新脚本特定于公司环境,尤其是。恢复后过程,如脱敏或屏蔽数据等。因此,我想说,投入一些工程时间并使该过程可重复,这将在未来为您节省大量时间。
按照 Kin 的建议,这是(半)最终结果。如果有人会添加它以使其更加模块化/可参数化/健壮,我相信它会变得有用。