Sql-Server
創建數據庫快照而不指定 FILENAME 屬性
我創建
DB snapshot
為包中的任務之一SSIS
。該軟體包適用於 20 個不同的數據庫。因此,每個數據庫都會有一個帶有硬編碼FILENAME
屬性的快照。CREATE DATABASE Sales_snap ON ( NAME = SalesData, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\data\SalesData_snap.ss' ), ( NAME = SalesData1, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\data\SalesData1_snap.ss' ), ( NAME = SalesData2, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\mssql\data\SalesData2_snap.ss' ) AS SNAPSHOT OF Sales
有沒有辦法使用一些預設路徑而
FILENAME
不是複制粘貼相同的字元串 20 x 3 次?或者,有沒有辦法只指定一次基本路徑,然後在其他 SSIS 任務中重用它?
動態 SQL 可能是您最好的選擇。
請參閱此處的第三個範例: https ://www.sqlservercentral.com/scripts/create-database-snapshot-dynamically
我將添加一個替代動態 sql 的答案 -
使用 dbatools
New-DbaDbSnapshot
。使用 dbatools 的美妙之處在於它的靈活性,您可以針對
N
多個伺服器或數據庫進行操作。例如
為數據庫 db1 和 db2 創建數據庫快照,名稱後綴為
foo_{0}_snap
–>foo_db1_snap
等foo_db2_snap
,您甚至可以使用-Path
參數指定快照使用的路徑,例如您希望創建快照的自定義路徑。New-DbaDbSnapshot -SqlInstance sqlserver2019 -Database db1, db2 –NameSuffix ‘foo_{0}_snap’ -Path F:\snapshotpath
您可以使用以下命令來更好地創建簡化的自動化:
Get-DbaDbSnapshot New-DbaDbSnapshot Remove-DbaDbSnapshot Restore-DbaDbSnapshot
將 dbatools cmdlet 作為 sqlagent 作業或使用任務調度程序執行,只需幾行程式碼即可完成。