Recent comments

İçerik Ara



Yasal Uyarı
Bu sitede sunulan tüm bilgi ve dökümanlar Turgay Sahtiyan tarafından yazılmaktadır. Yazıların kaynak göstermek şartıyla kullanılması serbesttir.

© Copyright 2009-2011
Takvim
<<  May 2012  >>
MoTuWeThFrSaSu
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910
Keywords

SQL Server’da master,model ve tempdb database’lerinin owner’ı değiştirilmeye çalışılırsa aşağıdaki gibi bir hata alınabilir.

More...

Geçenlerde bir cluster ortamımıza SP2 upgrade geçerken karşımıza çıkan hata mesajından sonra tüm system database’lerinin owner’larını sa yapmaya karar verdik. Bu makalede üzerinde duracağımız sorgu ile owner’ı sa olmayan system database’lerini nasıl sorgulayabileceğimizi göreceğiz.

More...

SQL Server TempDB veritabanı yanlış yapılan join sorgularının order by clause ile beraber kullanımı ile plan dışı büyüyebilir. Bu büyüme disk size ı dolduracak kadar olursa servis kullanılmaz duruma gelebilir. Bugünkü yazımda TempDB boyutunu küçültme amaçlı yapılabilecek shrink operasyonlarını inceliyor olacağız. Bu kapsamda 3 farklı shrink metodu anlatıyor olacağım.

More...

Bir önceki yazımda Model DB nin nasıl taşınacağını anlatmıştım. Bu yazıma http://www.turgaysahtiyan.com/post/SQL-Server-2008-e28093-Model-ve-MSDB-Database-lerinin-Tasc4b1nmasc4b1.aspx adresinden erişebilirsiniz.

Bu yazımda ise tavsiye edilen bu yöntemle taşıma yaparken almış olduğum “Cannot detach an opened database when the server is in minimally configured mode” hatasından ve çözümünden bahsediyor olacağım. More...

System database leri ve System Database lerinin taşınması konu başlıklı yazı dizimin son makalesinide bugün yazıyorum. Bu makalemde Model ve MSDB Database lerinin nasıl taşınacağına bakıyor olacağız. Ayrıca model DB yi taşırken almış olduğum bir hataya ve bu hatanın olası çözümlerini inceliyor olacağız. More...

Master database SQL server ın en önemli sistem database i olduğu için backup stratejimizi kesinlikle dahil etmeliyiz.

Makaleme devam etmeden önce sistem database leri ile alakalı yazdığım aşağıdaki yazılarımı okumanızı tavsiye ederim.

SQL Server Sistem Veritabanları
TempDB Database File larını Taşımak
Master DB Database File larını Taşımak

Dediğimiz gibi master DB SQL Server ın en core sistem database idir. Zarar gördüğü durumlarda SQL Server service i restart olamaz.

Peki master DB ne gibi bilgiler içerir. Aşağıda ufak bir özetine geçiyorum.

  • Login Nesneleri
  • Sistem Konfigurasyon Bilgileri
  • Endpoint ler
  • User Database Bilgileri
  • Servis in restart olması için gerekli bilgiler

Dolayısıyla master DB nin backup stratejisi içine dahil edilmesi çok yerinde bir hareket olacaktır. SQL Server da SQL Agent ile otomatik backup alma ile alakalı yazıma aşağıdaki linkten erişebilirsiniz.
SQL Server 2008 de Otomatik BackUp için Job Oluşturma (Schedule)

Bu arada not olarak verelim; master DB nin sadece full backup ı alınabilmektedir. Differential yada TLog backup ı alınamaz.

 

Master Database Full Backup


Master DB nin full backup ının alınması diğer User Database ler ile aynıdır. Örneğin aşağıdaki kod ile master DB nin backup ını c:\ root una alalım.

BACKUP DATABASE [master] TO DISK = N'c:\masterbackup.bak' 
GO

 

Master Database Restore


Master DB backup landıktan sonra master DB yi etkileyen bazı değişiklikler yapıldıysa bunlar ne yazık ki restore edilemeyecektir.

Örneğin Backup tan sonra user create edildiyse Restore işleminden sonra bu user lar tekrar create edilmesi gerekmektedir.

Yada Database create edildiyse restore işleminden sonra bu database leri attach etmek en mantıklı yoldur. Eğer bu konuda bilgi almak isterseniz Attach işlemi ile alakalı yazımı okuyabilirsiniz.

Şimdi master DB nin restore adımlarına bakalım

  1. Service i stop ediniz. Bunun için command prompt ta aşağıdaki kodu kullanabilirsiniz.
    net stop MSSQLSERVER
  2. Service i single-user mode da start ediniz.
    Default instance için command prompt ta aşağıdaki kodu kullanabilirsiniz.
    sqlservr.exe –m
    Named instance için ise command prompt ta aşağıdaki kodu kullanabilirsiniz.
    sqlservr.exe -m -s <instancename>
  3. Şimdi restore işlemini yapacağız. Bu işlemi sqlcmd ile command prompt tan gerçekleştireceğiz. Aşağıdaki SQL script i command prompt ta sqlcmd den sonra çalıştırınız.
    SQLCMD
    RESTORE DATABASE master FROM DISK = 'c:\masterbackup.bak' WITH REPLACE;
    GO
  4. Restore işleminden sonra SQL Server service i stop olup sqlcmd nin çalıştığı ekran kapanacaktır.
  5. SQL Server ı start edin
    net start MSSQLSERVER


İyi Çalışmalar

Turgay Sahtiyan

Bir önceki yazımda SQL Server daki system table larının ne olduklarını ve ne amaçla kullandıklarını anlatmıştım. Bu yazıma aşağıdaki linkten erişebilirsiniz.
http://www.turgaysahtiyan.com/post/SQL-Server-System-Databases-(Sistem-Veritabanlarc4b1).aspx

TempDB Database File larını Taşımak makalemde de bahsettiğim gibi system DB lerinin taşınması normal user DB lerinin taşınmasından farklıdır.

Bu yazımda da master DB nin database file larının nasıl taşınacağını adım adım anlatıyor olacağım.

  1. Start >> Programs >> Microsoft SQL Server 2008 >> Configuration Tool >> SQL Server Configuration Manager ı açalım.
    image
  2. Master DB sinde değişiklik yapmak istediğimiz SQL Server instance ı sağ tıklayıp properties e basalım. (örneğin SQLServer(MSSQLServer)
    image
  3. Advanced tab ında Startup Parameters te oynama yapacağız.
    image
  4. Startup parameters deki yazı herhangi bir değişiklik yapılmadıysa aşağıdaki gibidir.

    -dC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\master.mdf;
    -eC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Log\ERRORLOG;
    -lC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\mastlog.ldf

    Master DB nin Data ve Log file larını C:\DATA folder ına taşıdığımızı düşünürsek startup parameters de ki yazı aşağıdaki gibi olmalıdır.

    -dC:\DATA\master.mdf;
    -eC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Log\ERRORLOG;
    -lC:\DATA\mastlog.ldf

    Bu yazıyı alıp startup parameters e paste edip apply diyerek ekranı kapatalım.
  5. Configuration Manager üzerinden SQL Server Service i stop edelim.
  6. Master DB nin data ve log file larını (master.mdf ve mastlog.ldf) bulunduğu yerden alıp C:\Data folder ına taşıyalım.
  7. Configuration Manager dan SQL Server service ini tekrar start edelim.
  8. Kontrol amaçlı Management Studio üzerinden aşağıdaki sorguyu çalıştıralım.
    SELECT name, physical_name AS CurrentLocation, state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID('master');
    GO
  9. Aşağıdaki gibi bir sonuç almamız beklenmektedir.
    image


Bir sonraki makalemde görüşmek üzere.

İyi çalışmalar

Turgay Sahtiyan

SQL Server da bulunan Sistem Database leri ve kısa açıklamaları aşağıdaki gibidir.

Sistem Database

Açıklama

master

SQL Server ile alakalı server – level bilgileri tutar.

msdb

SQL Server Agent tarafından kullanılan bu db; alert ve job lar ile alakalı bilgileri tutar

model

Model DB si SQL Server da yeni oluşturulacak DB lerin template idir. Msdb üzerinde database size,collation,recovery model gibi bilgiler değiştirilerek yeni oluşturulan her DB nin bu bilgilerle oluşturulması sağlanabilir.

resource

SQL Server sistem obje leri tutan Resource DB si bir read-only DB dir. Sistem obje leri fiziksel olarak resource db de tutulurken mantıksal olarak her DB nin içerisinde gösterilir.

tempdb

TempDB temporary obje leri tutar. Her SQL Service in restart ında tekrar create edilir.


Sistem DB lerine Management Studio üzerinden aşağıdaki şekilde erişebilirsiniz.

image

Gördüğünüz gibi bu listede resource db bulunmamakta. Daha öncede bahsettiğimiz gibi obje ler fiziksel olarak resource db de tutulmaktadır. Bu objeler mantıksal olarak her db nin içerisinde gösterilmektedir.

Sistem DB lerine script ile ulaşmak için aşağıdaki kodu kullanabilirsiniz.

select * from sys.databases where database_id<=4

 

image

Sistem database leri SQL Server kurulumu ile beraber gelmektedir. Ve her SQL server instance ında sistem database leri query sonucunda görülen database_id leri almaktadır.

Sistem DB lerine daha detaylı incelemeye devam ediyoruz.


master Database

master Database SQL Server ile alakalı server-level bilgileri tutar. Örneğin loginler, backup device lar, linked server lar ve Endpoint gibi bilgiler master DB de tutulmaktadır. Ayrıca sistem de bulunan user database bilgileri ve bu database lerin file bilgileride master DB de tutulmaktadır. Dolayısıyla eğer master DB erişilemez durumdaysa SQL Server açılamaz durumda olur. Bundan dolayı master DB nin sıklıkla backuplanması önerilmektedir. Bu arada ufak bir bilgi vermek istiyorum. Master DB nin sadece full backup ı alınabilir, diff yada tlog backup ı alınamaz.

Master db ile alakalı MSDN de bulunan öneriler aşağıdaki gibidir.

  • Master DB periyodik olarak backup lanmalıdır.
  • Aşağıdaki işlemlerden herhangi biri yapıldığında en kısa sürede master db nin back up ı alınmalıdır.
    • Her hangi bir DB oluşturulduğunda, değiştirildiğinde yada silindiğinde.
    • Server yada DB configuration ları değiştirildiğinde.
    • Logon account larında değişiklik yapıldığında yada yeni bir login eklendiğinde.
  • Master DB içerisinde user object create edilmesi önerilmez.
  • Master DB nin TRUSTWORTHY özelliğinin ON yapılması önerilmez.


msdb Database


SQL Server agent tarafından kullanılan bu db; alert ve job lar ile alakalı bilgileri tutar.

Örneğin job history için aşağıdaki query i msdb db sinde çalıştırabilirsiniz.

select job_name, run_datetime, run_duration
from
(
    select job_name, run_datetime,
        SUBSTRING(run_duration, 1, 2) + ':' + SUBSTRING(run_duration, 3, 2) + ':' +
        SUBSTRING(run_duration, 5, 2) AS run_duration
    from
    (
        select DISTINCT
            j.name as job_name, 
            run_datetime = CONVERT(DATETIME, RTRIM(run_date)) +  
                (run_time * 9 + run_time % 10000 * 6 + run_time % 100 * 10) / 216e4,
            run_duration = RIGHT('000000' + CONVERT(varchar(6), run_duration), 6)
        from msdb..sysjobhistory h
        inner join msdb..sysjobs j
        on h.job_id = j.job_id
    ) t
) t
order by job_name, run_datetime

 

model Database


Model DB si SQL Server da yeni oluşturulacak DB lerin template idir. Msdb üzerinde database size,collation,recovery model gibi bilgiler değiştirilerek yeni oluşturulan her DB nin bu bilgilerle oluşturulması sağlanabilir. TempDB her SQL Server restart ında create edildiği için, model DB SQL Server instance ında her zaman vardır.


tempDB Database


tempDB, local temporary tables, temporary stored procedures, table variables ve cursor gibi temp objeleri tutan database dir. Ayrıca result set te yapılan sorting(sıralama) işlemi tempDB de yapılmaktadır.

tempDB, SQL Server ın performans lı çalışması için en önemli etkenlerden biridir. En base olarak tempDB nin data ve log file larının diğer database lerden ayrı bir diskte, hatta mümkünse data ve log file larının farklı disklerde tutulması best practise dir. Ayrıca tempDB data file ının core işlemli sayısı kadar file dan oluşması ve her birinin eşit boyutta verilmesi diğer bir best practise adımıdır.

tempDB data file larının küçük değerlerde olmasının şöyle bir dezavantajı vardır. Örneğin çok kayıtlı bir result set execute edilidğinde tempDB data file ı bu sonucu allocate edecek boyutta değil ise auto growth olması gerekmektedir. Bu da performans a negatif etki yapmaktadır.

TempDB Data ve Log file larının taşınması ile ilgili yazıma aşağıdaki url den erişebilirsiniz.
http://www.turgaysahtiyan.com/post/TempDB-Database-File-larc4b1nc4b1-Tasc4b1mak.aspx



Makaleme burada nokta koyarken sistem DB leri hakkında yeteri kadar bilgiye ulaştığınızı umuyorum.

Bir sonraki makalemizde görüşmek üzere.

İyi çalışmalar,

Turgay Sahtiyan

TempDB System Database nin file larını taşımak normal User DB lerini taşımaktan farklıdır.

Normal User DB leri Backup-Restore veya Detach-Attach komutları ile taşınabiliyorken TempDB Database File ları bu yöntem ile taşınamaz.

Böyle bir taşıma için aşağıdaki script i kullanabilirsiniz.

USE master
GO
ALTER DATABASE tempdb 
	MODIFY FILE (NAME = tempdev, FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\TempDBFiles\Data\tempdb.mdf')
GO
ALTER DATABASE tempdb 
	MODIFY FILE (NAME = tmpf2, FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\TempDBFiles\Data\tmpf2.ndf')
GO
ALTER DATABASE tempdb 
	MODIFY FILE (NAME = tmpf3, FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\TempDBFiles\Data\tmpf3.ndf')
GO
ALTER DATABASE tempdb 
	MODIFY FILE (NAME = templog, FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\TempDBFiles\Data\templog.ldf') 

 

Taşıma işleminden sonra SQL Service ini restart etmeniz yeterli olacaktır.

Turgay Sahtiyan