SQL Server 2008 Otomatik Yedekleme

Merhabalar. SQL Server 2008 Management Studio ile veritabanımız için otomatik yedekleme işlemlerine biraz değineceğiz. Aslınad diğer SQL sürümlerinden farklı bir işlem yapmıyoruz. Genel çalışma prensibinde bir değişme yok. Otomatik yedekleme işlerimini iki farklı şekilde yapabiliriz. Bunlardan biri “Maintenance Plans” kullanmak. Diğeri direkt olarak Server Agents ‘s üzerinde “Jobs” ekleyerek manuel işlem yapmak (T-SQL Script giriyoruz.). Lafı fazla uzatmadan işleme başlamak istiyorum. Öncelikle Management Studiomuza bağlanıyoruz.

1. Yol

Management -> Maintenance Plans yolunu izliyoruz.

Step1

Maintenance Plans ‘s sağ tıklayıp “Maintenance Plan Wizard” ‘ı seçiyoruz.

Step2

Name kısmına, maintenance plans’ımızın adını veriyoruz. Description kısmına birşeyler girmemiz zorunlu değil ama ben anlaşılır olması bakımından açıklayıcı birşeyler yazmaktan yanayım. Ardından “Single schedule for entire plan or no schedule” ‘ı seçip alttaki “Change” butonuna basıp açağıdaki ekrana ulaşıyoruz

Name ‘e, schedule için bir isim giriyoruz. Konu ile alakadar olması ileride bu alanın ne olduğunu hatırlamanıza yardımcı olacaktır. Kuralımızı tekrarlatacağımız için “Schedule Type” kısmında “Recurring” seçip “Enabled” ‘ın seçili olduğundan emin oluyor. Frequency bölümü, çalışma zamanını seçeceğimiz bölümdür. Örneğimde, haftada bir pazartesi günü çalıştıracağım için “Occurs” ‘u “Weekly”, “Recurs every” ‘i “1” ve günlerden de yalnızca “Monday” ‘ı işaretliyorum. “Daily frequency”, kuralımızın çalışma saatiyle ilgili ayarlama yapacağımız kısım. Gece yarısı, örneğim için ideal bir zaman olduğundan “Occurs once at” ‘ı “00:00” olarak ayarlayıp “OK” ‘a basıyorum. Ardından ilk penceremize geri geldiğimizde de “Next” ‘e tıklayıp aşağıdaki ekrana geçiyoruz.

Step4

Bu ekranda ise çalıştırmak istediğimiz Maintenance Plan ‘da hangi işlem ya da işlemleri yaptırmak istediğimizi seçiyoruz. Örneğimde, veritabanının full yedeğini alacağım için “Back up Database (Full)” seçeneğini seçiyorum. Eğer yedek almak istediğim veritabanına ait log dosyası veritanımızın data dosyasından büyük olsaydı (IAS ‘ın kullandığı sistemlerde genelde bu şekilde oluyor) “Shrink Database” seçeneğini de seçebilirdim. Tabii bunu seçersem “Check Database Integrity” ‘de seçmek iyi olacaktır. Seçimimizi yaptıktan sonra “Next” ‘e tıklayarak aşağıdaki ekrana ulaşıyoruz.

Step5

Bu ekran da, eğer birden fazla işlem seçmiş olsaydık; bunların hangi sırada çalışmasını istediğimizi belirlediğimiz bölüm. Örneğimde tek işlem seçtiğim için tek seçenek geliyor. Bu yüzden bu ekranı da “Next” diyerek geçiyoruz ve aşağıdaki ekrana ulaşıyoruz.

Step6

Bu ekran, hangi veritabanı ya da veritabanları üzerinde yedekleme yapacağımızı seçeceğimiz ekrandır. İlk olarak “Database(s)” ‘deki  “<Select one or more>” ‘e tıklayarak açılan listeden hangi veritabanı ya da veritabanları üzerinde işlem yapacağımızı seçmemiz gerekiyor. Ben, sadece HRDB üzerinde işlem yapacağım için; “These Databases” seçeneğini seçip HRDB’yi işaretliyorum. Diğer seçeneklerden “All databases”, tüm veritabanları üzerinde ilem yapmak için seçilir, “System Databases”, master, model, msdb ve tempdb gibi sistem veritabanları üzerinde işlem yapmak için ve “All user databases” ‘de system veritabanları haricindeki tüm veritabanları üzerinde işlem yapmak için seçeneklerdir. Ayrıca, yaptığımız veritabanlarından Offline olanları egale etmek içinde hemen aşağıdaki “Ignore databases where the state is not online” seçeneğinide seçebiliriz. Seçimimizi yaptıktan sonra “OK” ‘a basıyoruz ve ekranımzı aşağıdaki gibi oluyor.

Step7

Yedekleme seçeneğini full seçtiğimiz için “Backup Component” kısmında yalnızca “Databaase” seçeneği etkin. Eğer yedeğimizin belirli bir süre için geçerli olmasını istiyorsa bunu “Backup set will expire” ‘ı işaretleyerek tanımlayabiliriz. Şimdiye kadar pek kullanıldığını görmedim 🙂 Yedeklemeyi bir tabe backup sürücüye yapmak istiyorsanız “Back up to” kısmından “Tape” seçeneğini seçmeniz gerekli. Dosya olarak yedekleme yapacaksanız da varsayılanda etkin gelen “Disk” seçeneğini değiştirmenize gerek yok. “Add” butonuna basarak yedek dosya adını ve nereye alınmasını istediğini seçiyoruz. “If backup file exist” seçeneği de varsayılanda “Append” olarak seçilidir. Bu ayar, eğer bir yedekleme dosyası var ise bunun üzerine mi yazılacağı yoksa dosyaya eklememi yapılacağını seçeceğimiz bölümdür. Planladığınız yedekleme işlemine göre buunu da seçmeniz gereklidir. Full backuplar için “Overwrite” ve Diff. backuplar içinse “Append” idealdir. “Verify backup integrity” seçeneğini işaretlerseniz, alınan yedek dosyasının doğruluğu kontrol edilecektir. “Set backup compression” seçeneği de, yapılan yedekleme işleminde kullanılacak olan sıkıştırma methodunu seçtiğimiz kısımdır. Seçimlerimizi tamamladıktan sonra “Next” ‘e tıklayıp aşağıdaki ekrana ulaşıyoruz.

Step8

Bu ekranda yapılan işleme ait raporlama seçenkleri bulunuyor. İlk seçenek, raporun text olarak nereye alınacağını, ikinci seçenek ise mail olarak gönderilmesi konusunda düzenleme yapmamızı sağlıyor. Örneğimdeki yapı gereği text rapor dosyası almayı seçiyorum ve “Next” ‘e tıklıyorum.

Step9

Sihirbazımızın yapacağı işlemlerin özeti olan bu ekranda Finish ‘e tıklıyoruz.

Step10

Ayarlamalarınız düzgün ise Finish ‘e tıkladıktan sonra yukarıdaki gibi bir ekran görmeniz gerekli 🙂

Step11

Server Agent -> Job bölümünden de yaptığımız Maintenance Plan ‘a ait kurallarıda kontrol edebilirsiniz.

2. Yöntem

Bu yöntem ise Maintenance Plans ile uğraşmayıp, işi kısa ve öz tutmak isteyenler için 🙂

Management -> SQL Server Agent -> Jobs yolunu izliyoruz.

Alternative.Step1

“Jobs” ‘a sağ tıklayıp “New Job…” seçeneğini seçiyoruz.

Alternative.Step2

“Name” ‘e, job ‘umuza vermek istediğimiz ismi (açıklayıcı olması faydalıdır) veriyoruz. Description ‘u girmek zorunda değiliz ama açıklayıcı olması açısından girmek istiyorum. Tabii ki “Enabled” seçeneğimizin işaretli olduğundan emin oluyoruz. Daha sonra sol taraftaki bölümden “Steps” tıklıyoruz ve aşağıdaki ekrana ulaşıyoruz.

Alternative.Step3-1

Aşağıdaki “New” butonuna basarak Job için bir Step(adım) girişi penceresine ulaşıyoruz (üstte). “Step name” ‘e gireceğimiz değer size kalmıştır ve açıklayıcı olmasını öneririm. Type olarak “Transact-SQL script (T-SQL) ‘i seçiyoruz, Database kısmından ise üzerinde işlem yapmak istediğimiz veritabanını seçiyoruz. Arından Command bölümüne aşağıdaki T-SQL kodunu giriyoruz.

BACKUP DATABASE [HRDB] TO DISK = N‘G:\LOGO YEDEKLER\PAZARTESI\HRDB.BAK’ WITH INIT

buradaki [HRDB] ve ‘G:\LOGO YEDEKLER\PAZARTESI\HRDB.BAK’ değiştirmeniz gereken alanlardır. HRDB, örneğimde kullandığım veritabanının adı ve “G:\LOGO YEDEKLER\PAZARTESI\HRDB.BAK” ise yedek dosyasının tam yol ve dosya adı bilgisidir. Kendi kullanımıza göre değiştirmeyi unutmayın. Bunları girdikten sonra “OK” basıp bir önceki ekrana dönüyor ve sol taraftan “Schedules” ‘e tıklayıp aşağıdaki ekrana ulaşıyoruz.

Alternative.Step4

Sağ taraftaki “New” ‘e tıkladığımızda gelen bu ekranı hatırlıyor olmalısınız. Maintenance Plan kısmında anlattığım için tekrar ayrıntılarına girmiyorum. Yukarıdaki ayarları girip “OK” ‘a tıklayıp bir önceki ekrana dönüyorum. Buraya kadar işlemimiz tamamlandı. Tekrar “OK” ‘a tıklıyoruz ve işlemimiz tamamlıyoruz.

Alternative.Step6

Ardından yukarıdaki ekran ile karşılaşıyoruz. Listenin en altında biraz oluşturduğumuz HRDB.PAZARTESI adlı görevi görebilirsiniz.

Her iki yolda aynı işlemi yapmaktadır. Şahsi görüşüm 1. yoldan yana tabii ki 🙂

Dipnot olarak tembeller içinde bir QueryAnalyzer kodu vermek istiyorum. Bu kodu, veritabanı adı ve yedek dosyası tam yol bilgisini düzenledikten sonra direkt olarak çalıştırırsanız 2 yolla yaptığımızı tek seferde eklemiş olursunuz :))))

USE [msdb]

GO
/****** Object:  Job [HKDB_PAZARTESI]    Script Date: 03/07/2011 16:02:05 ******/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** Object:  JobCategory [[Uncategorized (Local)]]]    Script Date: 03/07/2011 16:02:05 ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]’ AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N’JOB’, @type=N’LOCAL’, @name=N'[Uncategorized (Local)]’
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
DECLARE @jobId BINARY(16)
EXEC @ReturnCode =  msdb.dbo.sp_add_job @job_name=N’HKDB_PAZARTESI‘,
@enabled=1,
@notify_level_eventlog=2,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N’HKDB Veritabanı için PAZARTESİ Günü Yedekleme Kuralıdır‘,
@category_name=N'[Uncategorized (Local)]’,
@owner_login_name=N’x\Administrator’, @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object:  Step [Adım1]    Script Date: 03/07/2011 16:02:05 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N’Adım1‘,
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N’TSQL’,
@command=N’BACKUP DATABASE [HRDB]
TO DISK = N’‘G:\LOGO YEDEKLER\PAZARTESI\HRDB.BAK” WITH INIT’,
@database_name=N’master’,
@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N’HKDB_PAZARTESI_ZAMANLAMA‘,
@enabled=1,
@freq_type=8,
@freq_interval=2,
@freq_subday_type=1,
@freq_subday_interval=0,
@freq_relative_interval=0,
@freq_recurrence_factor=1,
@active_start_date=20110307,
@active_end_date=99991231,
@active_start_time=0,
@active_end_time=235959,
@schedule_uid=N’31e20872-f4a2-4544-8eae-f0346eb9a813
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)’
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO

 

Tembellik etmek yok ama çok tembel olanlar için yine de değiştirmeleri gereken kısımları kırmızı renkte gösterdim.

:))

Yorum Yap