SQL Server Express veritabanlarının yedeklemelerini zamanlama ve otomatikleştirme

Özgün ürün sürümü: SQL Server
Özgün KB numarası: 2019698

Özet

SQL Server Express SQL Server Agent içermez, bu nedenle yedekleme işlerini veya bakım planlarını diğer SQL Server sürümlerinde yaptığınız gibi zamanlayamazsınız. SQL Server Express'te yedeklemeleri otomatikleştirmek için üç bileşeni bir araya getirin: sp_BackupDatabases saklı yordamını, sqlcmd komut satırı yardımcı programını ve Windows Görev Zamanlayıcısı'nı. Bu makalede, SQL Server Express veritabanlarının zamanlanmış tam, değişiklik ve işlem günlüğü yedeklemelerini ayarlama adımları açıklanmaktadır. Ayrıca, zamanlanmış yedeklemenin çalıştığını nasıl onaylayacakları da açıklanmaktadır.

Bu makale yalnızca SQL Server Express sürümleri için geçerlidir. SQL Server Express LocalDB için geçerli değildir.

SQL Server Express neden SQL Server Agent ile yedeklemeleri zamanlayamaz?

SQL Server Agent, zamanlanmış işleri ve bakım planlarını çalıştıran bileşendir ve SQL Server Express'e dahil değildir. Her sürümün içerdiği özelliklerin tam karşılaştırması için bkz. SQL Server sürümleri ve desteklenen özellikleri.

SQL Server Agent olmadan, aşağıdaki araçlardan herhangi birini kullanarak SQL Server Express veritabanını isteğe bağlı olarak yedeklemeye devam edebilirsiniz:

Bu yedeklemeleri isteğe bağlı yerine bir zamanlamaya göre çalıştırmak için, aşağıdaki adımlarda açıklandığı gibi zamanlama altyapısı olarak Windows Görev Zamanlayıcı'yı kullanın. Yedekleme türleri ve stratejisiyle ilgili arka plan için bkz. SQL Server veritabanlarını yedekleme ve geri yükleme.

Prerequisites

Başlamadan önce şunları yaptığınızdan emin olun:

  • SQL Server Express'in çalışan bir örneği. Bu makaledeki örneklerde varsayılan adlandırılmış örnek olan .\SQLEXPRESSkullanılır.
  • Bu örnekte sysadmin sabit sunucu rolüne üyelik, veritabanında bir saklı yordam master oluşturmak için gereklidir.
  • Yedekleme dosyalarını tutmak için yeterli boş alana sahip bir yerel klasör veya sürücü. Örneklerde D:\SQLBackups kullanılır.
  • SQL Server Express çalıştıran bilgisayarda zamanlanmış görevler oluşturma izni.

1. Adım: sp_BackupDatabases saklı yordamını oluşturun

sp_BackupDatabases, bir veritabanında veya örnekteki her çevrimiçi veritabanında uygun BACKUP komutu çalıştıran Microsoft tarafından sağlanan bir saklı yordamdır. master öğesini veritabanında bir kez oluşturursunuz.

Betiği SQL_Express_Backups.sql'dan indirin ve yerel olarak kaydedin, örneğin C:\Temp\SQL_Express_Backups.sql. Ardından, SSMS veya sqlcmd kullanarak saklı yordamı oluşturun.

SSMS kullanarak saklı yordamı oluşturun

  1. SSMS'yi açın ve SQL Server Express örneğine bağlanın. Sunucu adı alanına yazın .\SQLEXPRESSve Bağlan'ı seçin.
  2. DosyaAç>Dosya'yı> seçin, kaydettiğiniz SQL_Express_Backups.sql dosyasını seçin ve ardından Aç'ı seçin.
  3. Araç çubuğundaki veritabanı listesinde master öğesinin gösterildiğini onaylayın. Betik USE [master] ile başlar, bu sayede otomatik olarak doğru veritabanını hedefler.
  4. Yürüt'e tıklayın (veya F5 tuşuna basın). İletiler bölmesi Commands completed successfully gösterir.

sqlcmd kullanarak saklı yordamı oluşturun

Bir komut isteminden aşağıdaki komutu çalıştırın:

sqlcmd -S .\SQLEXPRESS -E -i "C:\Temp\SQL_Express_Backups.sql"

Saklı yordamın oluşturulduğunu onaylayın

Örnekte aşağıdaki sorguyu çalıştırın. Saklı yordam varsa bir satır döndürür:

SELECT name, create_date
FROM master.sys.procedures
WHERE name = 'sp_BackupDatabases';

sp_BackupDatabases parametreleri

Saklı yordam aşağıdaki parametreleri kabul eder:

Parametre Zorunlu Description
@backupLocation Yes Yedekleme dosyalarını alan klasör, örneğin D:\SQLBackups\. Klasör zaten var olmalıdır.
@backupType Yes Yedekleme türü: F tam, D değişiklik veya L işlem günlüğü için.
@databaseName Hayır Yedekleme için veritabanı. Bu parametreyi atlarsanız, depolanmış yordam, betiğin hariç tuttuğu veritabanları dışında sunucu örneğindeki tüm çevrimiçi veritabanlarını yedekler.

Depolanan yordam, tempdb öğesini hiçbir zaman yedeklemez. Ayrıca, her yedekleme türü için Northwind, pubs ve AdventureWorks örnek veritabanlarını atlar; ayrıca, diferansiyel ve log yedeklemelerinde master veritabanını atlar, çünkü bu yedekleme türleri master veritabanı için desteklenmez.

Important

Dışlanan veritabanı adları betikte sabit kodlanır. Bu adlardan birini kullanan bir veritabanınız varsa saklı yordam hata bildirmeden bu veritabanını atlar. Böyle bir veritabanını yedeklemek için, depolanmış yordamı oluşturmadan önce betikteki DELETE @DBs WHERE DBNAME IN (...) listeleri düzenleyin.

2. Adım: sqlcmd yardımcı programını yükleme

yardımcı sqlcmd programı, komut satırından Transact-SQL deyimlerini, sistem saklı yordamlarını ve betik dosyalarını çalıştırmanıza olanak tanır. SSMS ile birlikte yüklenir ve SSMS'ye sahip olmayan bilgisayarlar için tek başına indirme olarak da kullanılabilir. Yüklemek için bkz. sqlcmd yardımcı programını indirme ve yükleme.

sqlcmd öğesinin kurulu ve kullanılabilir olduğunu doğrulamak için bir komut isteminde sqlcmd -? komutunu çalıştırın.

Yürütülebilir dosyayı içeren sqlcmd klasör genellikle SQL Server veya tek başına araçları yüklediğinizde ortam değişkenine eklenirPath. Komutun tanınmadığını bildirirse sqlcmd -? , klasörü değişkenine Path ekleyin veya toplu iş dosyanızdaki yardımcı programın tam yolunu belirtin.

3. Adım: Sqlbackup.bat toplu iş dosyasını oluşturun

Metin düzenleyicisinde ,Sqlbackup.batadlı bir toplu iş dosyası oluşturun. Senaryonuza bağlı olarak, aşağıdaki örneklerden birinde yer alan metni bu dosyaya kopyalayın.

Örnek seçmeden önce aşağıdaki noktaları göz önünde bulundurun:

  • Her örnekte D:\SQLBackups yer tutucu olarak kullanılır. Ortamınızda kullanmak istediğiniz sürücü ve yedekleme klasörünün yolunu değiştirin ve klasörün mevcut olduğundan emin olun.
  • SQL Server Kimlik Doğrulaması kullanıyorsanız, parola toplu iş dosyasında düz metinde depolanır. Toplu iş dosyasını barındıran klasöre erişimi yalnızca yetkili kullanıcılarla kısıtlayın.

Örnek 1: Windows Kimlik Doğrulaması kullanarak tüm veritabanlarının tam yedeklemeleri

REM Sqlbackup.bat
sqlcmd -S .\SQLEXPRESS -E -b -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @backupType='F'"

Örnek 2: SQL Server Kimlik Doğrulaması kullanarak tüm veritabanlarının değişiklik yedeklemeleri

REM Sqlbackup.bat
sqlcmd -U <YourSQLLogin> -P <StrongPassword> -S .\SQLEXPRESS -b -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @backupType='D'"

Not

Yedeklemeleri çalıştırmak için, oturum açma işleminin yedeklediğiniz her veritabanında db_backupoperator veya sabit veritabanı rolü db_owner veya sysadmin sabit sunucu rolünün bir üyesi olması gerekir. Daha fazla bilgi için bkz . Veritabanı düzeyinde roller.

Örnek 3: Windows Kimlik Doğrulaması kullanarak tüm veritabanlarının işlem günlüğü yedeklemeleri

REM Sqlbackup.bat
sqlcmd -S .\SQLEXPRESS -E -b -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @backupType='L'"

İşlem günlüğü yedeklemeleri tam veya toplu günlüğe kaydedilen kurtarma modelini gerektirir ve en az bir önceki tam yedekleme gerektirir. Daha fazla bilgi için bkz. Kurtarma modelleri (SQL Server).

Örnek 4: Windows Kimlik Doğrulaması kullanarak tek bir veritabanının tam yedeklemesi

REM Sqlbackup.bat
sqlcmd -S .\SQLEXPRESS -E -b -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @databaseName='USERDB', @backupType='F'"

USERDB için diferansiyel yedek almak üzere, @backupType parametresini D olarak değiştirin. İşlem günlüğü yedeklemesi yapmak için bunu L olarak değiştirin.

-b seçeneği, bir SQL Server hatasının DOS ERRORLEVEL önem derecesi 10'dan büyük olduğunda sqlcmd uygulamasının çıkmasına ve 1 değerinin döndürülmesine neden olur. -b olmadan, yedekleme başarısız olsa bile sqlcmd, 0 döndürür ve Görev Zamanlayıcı görevi başarılı olarak bildirir.

Devam etmeden önce komut isteminden Sqlbackup.bat el ile çalıştırın ve yedekleme dosyalarının yedekleme klasöründe göründüğünü onaylayın. Hataları şimdi düzeltmek, daha sonra Görev Zamanlayıcı aracılığıyla tanılamaktan daha kolaydır.

4. Adım: Windows Görev Zamanlayıcı'da toplu iş dosyasını zamanlama

Sqlbackup.bat bir zamanlamaya göre çalıştırmak için şu adımları izleyin:

  1. SQL Server Express çalıştıran bilgisayarda Başlat'ı seçin ve metin kutusuna Görev Zamanlayıcı yazın.

    En iyi eşleşme altında listelenen Görev Zamanlayıcı masaüstü uygulamasını gösteren Windows arama sonuçlarının ekran görüntüsü.

  2. En iyi eşleşme altında, Görev Zamanlayıcı'yı seçin ve başlatın.

  3. Görev Zamanlayıcı'da, Görev Zamanlayıcı (Yerel) öğesine sağ tıklayın ve Temel Görev Oluştur'u seçin.

  4. Yeni görev için bir ad girin (örneğin , SQLBackup) ve ardından İleri'yi seçin.

  5. Görev tetikleyicisi için Günlük'e ve ardından İleri'ye tıklayın.

  6. Yinelenmeyi bir gün olarak ayarlayın ve İleri'yi seçin.

  7. Eylem olarak program başlat'ı ve ardından İleri'yi seçin.

  8. Gözat’ı seçin, 3. Adım: Sqlbackup.bat toplu iş dosyasını oluşturun bölümünde oluşturduğunuz Sqlbackup.bat dosyasını seçin ve ardından Aç’ı seçin.

  9. Bitir'e tıkladığımda bu görevin Özellikler iletişim kutusunu aç onay kutusunu seçin ve ardından Bitir'i seçin.

  10. Genel sekmesinde Güvenlik seçeneklerini gözden geçirin ve Görevi çalıştırırken altında listelenen hesap için aşağıdaki kullanıcı hesabını kullanın:

    • Hesabın, sqlcmd yardımcı programını çalıştırmak için en az Okuma ve Yürütme izinleri vardır.
    • Toplu iş dosyası Windows Kimlik Doğrulaması kullanıyorsa, hesabın SQL Server veritabanlarını yedekleme izni vardır.
    • Toplu iş dosyası SQL Server Kimlik Doğrulaması kullanıyorsa, toplu iş dosyasındaki SQL Server oturum açma işleminin veritabanlarını yedekleme izni vardır.
  11. Kalan ayarları gereksinimlerinize uyacak şekilde ayarlayın ve ardından Tamam'ı seçin.

İpucu

Test olarak, görevin sahibi olan kullanıcı hesabıyla başlattığınız bir komut isteminden Sqlbackup.bat çalıştırın. Bu adım, zamanlama çalışmadan önce hesabın gereken izinlere sahip olduğunu onaylar.

Zamanlama seçenekleri hakkında daha fazla bilgi için bkz. Görev Zamanlayıcı.

Zamanlanmış yedeklemenin çalıştığını doğrulayın

İlk zamanlanan çalıştırmadan sonra yedeklemenin başarılı olduğunu onaylayın:

  • Yeni .bak dosyaları (tam ve değişiklik yedeklemeleri) veya .trn dosyaları (işlem günlüğü yedeklemeleri) için yedekleme klasörünü denetleyin. Saklı yordam, her dosya adına bir tarih ve saat damgası ekler.

  • Görev Zamanlayıcı'da Görev Zamanlayıcı Kitaplığı'nı seçin, görevinizi seçin ve Son Çalıştırma Sonucu sütununu gözden geçirin. Bu sütun, toplu iş dosyasının döndürdüğü çıkış kodunu gösterir. Örneklerde seçeneği kullanıldığından -b0x1 değeri yedekleme komutunun başarısız olduğu anlamına gelir. Diğer değerler için bkz . Görev Zamanlayıcı hatası ve başarı sabitleri.

  • Örnekte yedekleme geçmişini sorgula:

    SELECT database_name, type, backup_start_date, backup_finish_date, physical_device_name
    FROM msdb.dbo.backupset AS bs
    INNER JOIN msdb.dbo.backupmediafamily AS bmf
        ON bs.media_set_id = bmf.media_set_id
    ORDER BY backup_start_date DESC;
    

    Bu tablolar, SQL Server veritabanında tutulan yedekleme geçmişinin msdb bir parçasıdır. Daha fazla bilgi için bkz. Yedekleme geçmişi ve üst bilgi bilgileri (SQL Server).

Important

Yedekleme dosyalarının mevcut olduğunu ve yedekleme geçmişinin son satırları içerdiğini her zaman onaylayın. Görev Zamanlayıcı'nın başarılı olarak bildirdiği bir görev, yedeklemenin başarılı olduğunun kanıtı değildir.

Bu yedekleme yönteminin gereksinimleri ve sınırlamaları

Bu makaledeki yordamı kullanırken aşağıdaki gereksinimlere ve sınırlamalara dikkat edin:

  • Görev başlatılacak şekilde zamanlandığında Görev Zamanlayıcı hizmeti çalışıyor olmalıdır. Hizmetin yeniden başlatıldıktan sonra bile çalışması için bu hizmetin başlangıç türünü Otomatik olarak ayarlamanızı öneririz.
  • Yedeklemeleri alan sürücüde yeterli boş alan olmalıdır. Disk alanınız tükenmeyecek şekilde yedekleme klasöründeki eski dosyaları düzenli olarak temizleyin. Saklı sp_BackupDatabases yordam eski yedekleme dosyalarını silmez.
  • Depolanmış yordam yalnızca çevrimiçi durumdaki veritabanlarını yedekler. Çevrimdışı, geri yükleme durumunda olan veya başka bir nedenle kullanılamayan veritabanlarını sessizce göz ardı eder.
  • Bu yöntem SQL Server Agent değiştirmez. Yerleşik iş geçmişi, yeniden deneme mantığı veya hata uyarıları yoktur. Yedekleme geçmişini düzenli olarak gözden geçirin veya bu özelliklere ihtiyacınız varsa SQL Server Agent içeren bir sürüme yükseltin.