SQL Server 2008 için eksiksiz bir bakım planı
Veritabanlarını Optimize Etme
Bu bölüm, veritabanlarını optimize etmeye adanmıştır. Bu örnekte, aşağıdakileri yapmak için kodu ayarlayacağız (sunucuların nasıl bağlandığına dair kaba bir şemaya bakın);
- Veritabanını canlı sunucudan paylaşılan bir yedekleme klasörüne yedekleyin
- Veritabanını Yeniden İndeksle
- Tüm bağlantıları sonlandırın ve raporlama sunucusundaki veritabanını geri yükleyin.
- Bağlantılı Sunucular yakında ayrı bir yazıda olacak
- Log Shipping yakında ayrı bir yazıda olacak
Çapraz sunucu yaparken, SQL Server'ın çalıştığı hesabın hedef sunucu dosya sistemine erişmesine izin vermeniz gerekir.
Tüm SQL kodu bir yardımcı program veritabanından çalıştırılır ve şema "maint" olarak ayarlanır
Aşağıda ilginizi çekebilecek bir dizi başka makalemiz var.
Komple Bakım Planı
Artık tüm bu ayrı kod segmentlerini, onları doğru sırayla çağıracak başka bir prosedürle yönetebiliriz, bu canlı sunucuya konulacak. Kod şu şekilde çalışır;
- zaman çalış
- Akşam ise veritabanını yeniden indeksleyin
- Veritabanının bir yedeğini çalıştırın (ihtiyacınız olan yere ekleyin)
- Akşam ise diğer veritabanlarını yedekleyin (ihtiyacınız olan yere ekleyin)
- Bağlantıları kesin ve veritabanını geri yükleyin (ihtiyacınız olan yere ekleyin)
Bu kod denenmiş, test edilmiş ve aylarca sorunsuz bir şekilde çalıştırılmıştır.
Lütfen günlük dosyalarının ve veritabanı dosyalarının küçülmesinin minimumda tutulması gerektiğini unutmayın, bir yedekleme çalıştırarak günlüğü boşaltırsınız (ancak kullanılan alanı koruyacaktır). Normal çalışma saatleri dışında çalıştırılması gerektiğinde ihtiyaç duyulursa.
SQL Code
Use [utilities]GOCREATE PROC [maint].MaintenancePlan AS BEGINDECLARE @BackupType VARCHAR(1)='E'IF DATEPART(HOUR,GETDATE()) BETWEEN 5 AND 21 BEGINSET @BackupType='D'END--EXEC ('USE TempDb; DBCC SHRINKFILE(templog, 0)');--This is only needed when space is at a premium!--Re-index LiveIF @BackupType='E' EXEC [maint].DatabaseReIndex 'dbname'--Create BackupBACKUP DATABASE TO DISK=N'{backuplocation}{dbname}.bak'WITH NOFORMAT, INIT, NAME =N'{dbname}', SKIP, NOREWIND, NOUNLOAD, STATS= 10;--EXEC ('USE ; DBCC SHRINKFILE(_log, 0)');--This is only needed when space is at a premium!--Backup Other Files at NightIF @BackupType='E' BEGIN EXEC [maint].DatabaseReIndex 'dbname' --Backup Others BACKUP DATABASE [databasename] TO DISK=N'{backuplocation}{dbname2}.bak' WITH FORMAT,INIT, NAME =N'{dbname2}',SKIP, NOREWIND, NOUNLOAD, STATS= 10END--Restore Backups on other serverEXEC [server].[utilities].[maint].KillConnections 'dbname';EXEC [server].[utilities].[maint].RestoreDatabase_{dbname};--Restore Backups on other server for db_2 etcIF @BackupType='E' BEGIN EXEC [server].[utilities].[maint].KillConnections 'dbname2'; EXEC [server].[utilities].[maint].RestoreDatabase_{dbname2};ENDENDGO
Yedek veritabanı
Veritabanınızı yedekleyecek kodu almak için, kodu SSMS'den komut dosyası olarak yazmak en kolay yoldur.
Normalde kullanacağınız işlemi takip edin ve ardından "Yeni Sorgu Penceresine Komut Dosyası Eylemi"ni seçin.
Bu kodu bakım planına kopyalayın.
Veritabanını Yeniden İndeksle
Daha sonra veritabanımızı yeniden indekslemek için bazı kodlar ekleyebiliriz, bu yine sisteme sadece adı söylemeniz gereken bir paylaşımlı saklı yordamdır.
Kod tekrarını önlemek için aşağıdaki bağlantıdan bu konuda bilgi alabilirsiniz.
Bağlantıları Öldür
Veritabanında bir geri yükleme gerçekleştirirken, onunla yalnızca bir bağlantınız olabilir (geri yüklemeyi gerçekleştiren işlem), bu nedenle mevcut işlem dışındaki tüm bağlantıları kapatmak için saklı bir prosedür oluşturabiliriz. Bunun için yine ayrı bir makale oluşturduk.
Veritabanını Geri Yükle
Bu kod ayrıca SQL Server Management Studio'dan da yazılabilir. Bu kodu bir saklı yordama eklerseniz, onu diğer işlemlerden ve hatta diğer sunuculardan gerçekten kolayca arayabilirsiniz. Daha fazla seçeneği ele almak için bunu ayrı bir makaleye taşıdık.