Sql-Server
SQL Server - 自動完整備份使用 EntityFramework-Migrations 自動創建的新數據庫
我有一個具有多租戶架構的 ASP.NET MVC 應用程序(使用 SQL-Server)。我正在使用 EntityFramework DB-Migrations,它會自動為每個客戶生成一個數據庫。
在 SQL-Server 中,我設置了 3 個維護計劃:完整備份、差異備份和事務備份。完全備份每天只發生一次。
現在,如果自動生成新的客戶數據庫,則下一個事務/差異備份將失敗,因為沒有任何可用的完整備份。
我發現以下執行緒存在類似問題:full-backup-on-database-creation
但在這種情況下,會為所有數據庫創建完整備份 - 這可能會導致執行時間更長。我只想為新數據庫做一個完整的備份(它是空的,應該在幾秒鐘內完成)。
我已經通過從維護計劃中提取程式碼來嘗試這個:
ON ALL SERVER FOR CREATE_DATABASE AS SET NOCOUNT ON; DECLARE @EventData XML = EVENTDATA(); DECLARE @db sysname = @EventData.value(N'(/EVENT_INSTANCE/DatabaseName)[1]', N'sysname'); DECLARE @SubDir nvarchar(1024) = N'PATH TO BACKUP-LOCATION' + @db; DECLARE @BackupName nvarchar(1024) = @db + N'_backup_initial'; DECLARE @BakFile nvarchar(1024) = @SubDir + N'\' + @BackupName + N'.bak'; DECLARE @ErrMessage nvarchar(1024) = N'Verify failed. Backup information for database ' + @db + ' not found'; declare @backupSetId as int EXECUTE master.dbo.xp_create_subdir @SubDir exec('BACKUP DATABASE ' + @db + ' TO DISK = ''' + @BakFile + ''' WITH NOFORMAT, NOINIT, NAME = ''' + @BackupName + ''', SKIP, REWIND, NOUNLOAD, COMPRESSION, ENCRYPTION(ALGORITHM = AES_256, SERVER CERTIFICATE = [BackupCert]), STATS = 10, CHECKSUM, CONTINUE_AFTER_ERROR') select @backupSetId = position from msdb..backupset where database_name=@db and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=@db ) if @backupSetId is null begin raiserror(@ErrMessage, 16, 1) end --RESTORE VERIFYONLY FROM DISK = @BakFile WITH FILE = @backupSetId, NOUNLOAD, NOREWIND GO
手動執行備份腳本正在工作,但在觸發器中失敗並顯示錯誤消息:
無法在事務中執行備份或恢復操作
有誰知道如何讓這個工作?
有誰知道如何讓這個工作?
不要直接從觸發器執行它。而是編寫一個代理作業來備份任何沒有完整備份的完整恢復數據庫。此狀態有時稱為“偽簡單恢復”,因為即使數據庫恢復模型已更改為 FULL,它的行為就像 SIMPLE 恢復一樣。
然後每 5 分鐘執行一次,使用觸發器中的sp_start_job啟動該作業,或者將其集成到您的計劃維護中,以便它在您的日誌備份之前執行。
EG 執行游標
select d.name from sys.databases d join sys.database_recovery_status ds on d.database_id = ds.database_id where recovery_model_desc = 'FULL' and last_log_backup_lsn is null
並進行完整備份。