SQL 2008'de, tüm veritabanlarını yedeklemek için depolanmış bir proc çalıştıran bir işim var. Bu günlük sql server aracısı işi üzerinden çalışır.
Her gün başarıyla bırakılıyor, ancak bazı günlerde sadece birkaç veritabanını yedekledikten sonra başarıyla çıkıyor. Her seferinde farklı sayıda veritabanı olabilir. Çoğu gün tüm veritabanlarını başarılı bir şekilde yedekler, ancak bazen 2, bazen 5 vb.
İş geçmişi, olay görüntüleyici veya sql sunucusu günlüğünde herhangi bir hata görmüyorum.
Klasör, genişletilebilir bir depolama birimindeki bir klasöre bir "bağlantı" olmasına rağmen, yedeklemeler yerel bir diske yapılır.
İşletim sistemi, Vqware ESXi 5 ana bilgisayarında çalışan bir sanal makine olarak Sql Server 2008 web sürümü 64 bit çalıştıran Windows 2003 64bit'tir.
Saklı yordam:
ALTER PROCEDURE [dbo].[backup_all_databases]
@path VARCHAR(255)='c:\backups\'
AS
DECLARE @name VARCHAR(50) -- database name
DECLARE @fileName VARCHAR(256) -- filename for backup
DECLARE @fileDate VARCHAR(20) -- used for file name
DECLARE @dbIsReadOnly sql_variant -- is database read_only?
DECLARE @dbIsOffline sql_variant -- is database offline?
DECLARE db_cursor CURSOR FOR
SELECT name
FROM master.dbo.sysdatabases
WHERE name NOT IN ('tempdb')
AND version > 0 AND version IS NOT NULL
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @fileName = @path + @name + '.bak'
SET @dbIsReadOnly = (SELECT DATABASEPROPERTY(@name, 'IsReadOnly')) -- 1 = Read Only
SET @dbIsOffline = (SELECT DATABASEPROPERTY(@name, 'IsOffline')) -- 1 = Offline
IF (@dbIsReadOnly = 0 OR @dbIsReadOnly IS NULL) AND @dbIsOffline =0
BEGIN
BACKUP DATABASE @name TO DISK = @fileName WITH INIT
WAITFOR DELAY '00:00:20'
END
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
Herhangi bir öneriniz lütfen?