Sql-Server

創建數據庫快照而不指定 FILENAME 屬性

  • February 3, 2021

我創建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_snapfoo_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 作業或使用任務調度程序執行,只需幾行程式碼即可完成。

引用自:https://dba.stackexchange.com/questions/284568