SQL SERVER DATABASE FILE ‘LARINI VE TEMPDB FILE ‘LARINI...

19
1 SQL SERVER DATABASE FILE ‘LARINI VE TEMPDB FILE ‘LARINI TAŞIMA OPERASYONU Yusuf KAHVECİ Database Administrator @2013 www.sqlturkiye.com [email protected] ! TÜRKIYE NIN İLK SQL PLATFORMU SQLTURKIYE.COM ÇOK YAKINDA PROFESYONEL EKIBIYLE BILGI PAYLAŞIMINA BAŞLAYACAKTIRwww.sqlturkiye.com

Transcript of SQL SERVER DATABASE FILE ‘LARINI VE TEMPDB FILE ‘LARINI...

Page 1: SQL SERVER DATABASE FILE ‘LARINI VE TEMPDB FILE ‘LARINI …sqlturkiye.com/wp-content/uploads/2013/11/SQL-SERVER... · 2018-04-26 · Detach, SQL Server üzerinde kullanmadığımız

1

SQL SERVER DATABASE FILE ‘LARINI VE TEMPDB FILE ‘LARINI

TAŞIMA OPERASYONU

Yusuf KAHVECİ Database Administrator

@2013

www.sqlturkiye.com [email protected]

! TÜRKIYE ‘ NIN İLK SQL PLATFORMU

SQLTURKIYE.COM ÇOK YAKINDA PROFESYONEL

EKIBIYLE BILGI PAYLAŞIMINA BAŞLAYACAKTIR…

www.sqlturkiye.com

Page 2: SQL SERVER DATABASE FILE ‘LARINI VE TEMPDB FILE ‘LARINI …sqlturkiye.com/wp-content/uploads/2013/11/SQL-SERVER... · 2018-04-26 · Detach, SQL Server üzerinde kullanmadığımız

2

YUSUF KAHVECİ KİMDİR ?

Merhaba Sevgili Arkadaşlar , Kendimden fazla söz etmeyi sevmediğim için kısa tutacağım. 1987 yılında İstanbul doğumluyum. Bilgisayar Mühendisliği ve İktisat mezunuyum. İş hayatına Eğitimci olarak başladım ve senelerdir Senior DBA olarak devam etmekteyim. Uzmanlık alanlarım MS SQL Server ve Oracle ’dır.Bir çok firmada MS SQL Server ve Oracle Veritabanı Yöneticiliği yaptım. Şu anda özel bir firmada SQL SERVER Senior Database Administrator olarak görevime devam etmekteyim. Bana ulaşabileceğiniz bilgiler E- Book içerisinde mevcuttur.

Saygılarımla…

Kişisel Web Adresimden ve mail

adreslerimden bana

ulaşabilirsiniz.

Kurucusu olduğum SQL TÜRKİYE

Platformum üzerinden istek ve

öneilerinizi iletebilir görüşlerinizi

paylaşabilirsiniz.

Platformumuzun temel amacı

Türkçe kaynağım az olduğu bu

dönemde SQL SERVER Yönetimi ,

BI,DWH,PDW vb. Teknolojilerin

sizlere aktarılması ve size

yardımcı olacak ve profesyonel

ekibimiz ile sizlere sunacağımız

bilgi kaynaklarından

faydalanabilir ve sizlerde bu bilgi

kaynağına katkıda

bulunabilirsiniz.

Page 3: SQL SERVER DATABASE FILE ‘LARINI VE TEMPDB FILE ‘LARINI …sqlturkiye.com/wp-content/uploads/2013/11/SQL-SERVER... · 2018-04-26 · Detach, SQL Server üzerinde kullanmadığımız

3

İÇİNDEKİLER

1. SSMS ile DETACH ve ATTACH Operasyonu ………………………………………………………….. 5 2. T-SQL ile DETACH ATTACH Operasyonu ………………………………………………………….. 11 3. OFFLINE ile ONLINE Operasyonu ………………………………………………………….. 13 4. TEMPDB ‘yi Farklı Diske Nasıl Taşırız ? ………………………………………………………….. 16

Page 4: SQL SERVER DATABASE FILE ‘LARINI VE TEMPDB FILE ‘LARINI …sqlturkiye.com/wp-content/uploads/2013/11/SQL-SERVER... · 2018-04-26 · Detach, SQL Server üzerinde kullanmadığımız

4

DB FILE ‘LARINI FARKLI LOKASYONA TAŞIMA OPERASYONU

SQL Server üzerinde açılmış olan veritabanlarının bazı nedenlerden dolayı kısa bir süre içerisinde

başka bir yere taşınması gerekir örnek olarak SQL Server’ın çalıştırılacağı yeni bir sunucu alınmıştır ve

eski sunucu üzerinde bulunan veritabanları yeni sunucuya taşınmalıdır. Bir başka örnek vermek

gerekirse sunucu performansının arttırılması için veritabanı dosyası (.mdf) ile log dosyası (.ldf) ayrı

diskler üzerinde çalıştırılması önerilmektedir. SQL Server yönetiminde bu işlemleri yapmamızda bize

yardımcı olacak taşıma yöntemlerimizden ;

DETACH – ATTACH Yöntemi

OFFLINE – ONLINE Yöntemi

BACKUP – RESTORE Yöntemi

Yukarıda bahsettiğim yöntemleri e-kitabımız içerisinde sizlere detayları ve adım adım nasıl yapıldığını

aktarıyor olacağım.

Page 5: SQL SERVER DATABASE FILE ‘LARINI VE TEMPDB FILE ‘LARINI …sqlturkiye.com/wp-content/uploads/2013/11/SQL-SERVER... · 2018-04-26 · Detach, SQL Server üzerinde kullanmadığımız

5

I. SSMS ile DETACH – ATTACH OPERASYONU

Detach, SQL Server üzerinde kullanmadığımız veritabanlarını kaynak tüketimini azaltmak adına silmeden, mdf ve ldf dosyalarını korumak kaydıyla Sql Server üzerinden kopartmak için kullandığımız yöntemdir. Bunun gibi bir çok amaç için bu yöntemi kullanabiliriz. Peki bu yöntemi nasıl ve ne şekilde kullanabiliriz ? Detach işlemine başlamadan önce Database ‘imizin File ‘ları hangi diskte ve folder da tutulduğuna bakalım ilk önce;

Database ‘imizin üzerine gelip sağ tıklayıp Proparties sekmesine tıklıyoruz. (Şekil-1)

(Şekil-1)

Daha sonra karşımıza gelen Şekil-2 ‘de ki ekranda Files sekmesinden Path kısmında Database File ‘larımzın lokasyonlarını görebiliriz.

Page 6: SQL SERVER DATABASE FILE ‘LARINI VE TEMPDB FILE ‘LARINI …sqlturkiye.com/wp-content/uploads/2013/11/SQL-SERVER... · 2018-04-26 · Detach, SQL Server üzerinde kullanmadığımız

6

Şekil-2

Bu işlemlerden sonra ; ilk önce Detach edeceğimiz Database ‘in üzerine gelip sağ tıklayıp çıkan pencerede Task sekmesine gelip oradan Detach sekmesine (Şekil 3) tıklıyoruz.

Şekil 3

Detach sekmesine tıkladıktan sonra Şekil-4 ‘de ki gibi ekran karşımıza gelmektedir.

Page 7: SQL SERVER DATABASE FILE ‘LARINI VE TEMPDB FILE ‘LARINI …sqlturkiye.com/wp-content/uploads/2013/11/SQL-SERVER... · 2018-04-26 · Detach, SQL Server üzerinde kullanmadığımız

7

Şekil-4

Bu ekranda DB üzerinde yer alan Connection ları kopartıp işlemlerimizi gerçekleştirebiliyoruz. O yüzden ben Detach yapmadan önce Drop Connection kutucuğunu işaretleyip OK butonuna basıyorum.

Gördüğünüz üzere bu işlem sonucunda Database ‘imiz Databases sekmesinin altında yer almıyor. Yani Detach işlemimizi sağlıklı bir şekilde gerçekleştirmiş olduk. Şimdi ise Data File ‘larımızı bulunduğu noktadan başka bir noktaya taşıyabiliriz. Taşıma işlemimi ben C:\MSSQLTransfer adlı folder ‘ın içerisine gerçekleştirdim. Bu adımdan sonra File ‘larını taşıdığım DB ‘mi sisteme Attach etmem gerekmektedir.

Attach işlemi için SSMS üzerinde Databases sekmesi üzerine gelip sağ tıklayarak açılan pencerede Şekil-6 ‘da ki gibi Attach… sekmesine tıklıyoruz.

Page 8: SQL SERVER DATABASE FILE ‘LARINI VE TEMPDB FILE ‘LARINI …sqlturkiye.com/wp-content/uploads/2013/11/SQL-SERVER... · 2018-04-26 · Detach, SQL Server üzerinde kullanmadığımız

8

Şekil-6

Bu işlemden sonra karşımıza Şekil-7 ‘de ki ekran gelmektedir. Bu ekranda Add butonuna tıklıyoruz.

Şekil-7

Add butonuna tıkladıktan sonra Şekil-8 ‘de ki ekran karşımıza çıkmaktadır.Locate Database Files olarak adlandırılan bu ekranda Database ‘imizi taşıdığımız yeni lokasyondan File ‘ını seçip OK butonuna basıyoruz.

Page 9: SQL SERVER DATABASE FILE ‘LARINI VE TEMPDB FILE ‘LARINI …sqlturkiye.com/wp-content/uploads/2013/11/SQL-SERVER... · 2018-04-26 · Detach, SQL Server üzerinde kullanmadığımız

9

Şekil-8

Bu işlemlerden sonra Şekil-9 ‘da yer alan ekran ile karşılaşmaktayız .

Şekil-9

Page 10: SQL SERVER DATABASE FILE ‘LARINI VE TEMPDB FILE ‘LARINI …sqlturkiye.com/wp-content/uploads/2013/11/SQL-SERVER... · 2018-04-26 · Detach, SQL Server üzerinde kullanmadığımız

10

Şekil-9 ‘da dikkat edecek olursak Current File Path olarak artık yeni lokasyonumuz olarak gözükmektedir. Daha sonra OK butonuna basıyoruz ve Attach işlemimizi sonlandırıyoruz. Şekil-10 ‘da gördüğünüz üzere Database ‘imiz sağlıklı bir şekilde Attach edilmiştir.

Şekil-10

Şimdi SSMS konsolunu kullanarak gerçekleştirdiğimiz tüm bu işlemleri T-SQL Scriptleri ile nasıl yapıyoruz onu görelim.

Page 11: SQL SERVER DATABASE FILE ‘LARINI VE TEMPDB FILE ‘LARINI …sqlturkiye.com/wp-content/uploads/2013/11/SQL-SERVER... · 2018-04-26 · Detach, SQL Server üzerinde kullanmadığımız

11

II. T-SQL ile DETACH – ATTACH OPERASYONU

Detach işlemi çin :

USE [master] GO ALTER DATABASE [DetachAttachSQLTURKIYE] SET SINGLE_USER WITH ROLLBACK IMMEDIATE GO USE [master] GO EXEC master.dbo.sp_detach_db @dbname = N'DetachAttachSQLTURKIYE' GO

Yukarıda ki script ile sağlıklı bir şekilde Detach işlemini gerçekleştirebiliyoruz. Scriptimizi inceleyecek olursak .

ALTER DATABASE [DetachAttachSQLTURKIYE] SET SINGLE_USER WITH ROLLBACK IMMEDIATE

İlk önce Database ‘imiz SINGLE USER Moda çekilmiş. SINGLE USER MOD : Aynı anda tek bir kullanıcının erişebileceği anlamına gelir. Bu herhangi bir kullanıcı olabilir. İlk önce kim giriş yaparsa oturumu o almış olur. Bu kullanıcı bağlantısı bitmeden başka kullanıcı o veritabanına erişemez. Bu seçeneği genellikle sistem yöneticisi kendi oturumunda kritik bir işlem yapacağında tercih eder. Biz bu şekilde veritabanının erişim modunu değiştirmeye çalışırken o veritabanında çalışan kullanıcılar olabilir. Komutumuzun kullanıcıların bekleyip beklemeyeceklerini belirtmek için yukarıdaki ifadelerin arkasına WITH ROLLBACK IMMEDIATE veya WITH NO_WAIT deyimleri kullanılır. WITH NO_WAIT seçeneğinde eğer komutumuz bloke edilirse yani veritabanı üzerinde açık transaction veya aktif kullanıcı varsa işlem başarısız olup aşağıdaki hatayı verecektir. Msg 5070, Level 16, State 2, Line 1 Database state cannot be changed while other users are using the database ‘DetachAttachSQLTURKIYE’ Msg 5069, Level 16, State 1, Line 1 ALTER DATABASE statement failed. WITH ROLLBACK IMMEDIATE seçeneğinde kullanıcıların işlerini bitirmeleri beklenmez. Sorguları rollback edilip oturumları sonlandırılır. Biz scriptimiz de WITH ROLLBACK IMMEDIATE seçeneğini kullanarak Database ‘imizi Single User Mod ‘a çekip tüm transactionları rollback yaptık. Daha sonra ise sp_detach_db adlı sistem detach prosedürünü kullanarak database ‘imizi detach yaptık. Detach ettiğimiz Database ‘imizi bulunduğu diskten başka bir diske kopyalayıp Database ‘imizi Attach etmemiz gerekmektedir. Taşıma işlemini .mdf File ‘ını ‘K:\MSSQL2012\DATA’, .ldf File ‘ını ‘K:\MSSQL2012\LOG’ belirttiğim Diskteki Folder ‘ın içerisine gerçekleştirdikten sonra Attach işlemimiz için aşağıda ki scriptleri kullanıyorum.

Page 12: SQL SERVER DATABASE FILE ‘LARINI VE TEMPDB FILE ‘LARINI …sqlturkiye.com/wp-content/uploads/2013/11/SQL-SERVER... · 2018-04-26 · Detach, SQL Server üzerinde kullanmadığımız

12

Script I : USE [master]

GO CREATE DATABASE [DetachAttachSQLTURKIYE] ON ( FILENAME = N'K:\MSSQL2012\DATA\DetachAttachSQLTURKIYE.mdf' ), ( FILENAME = N'K:\MSSQL2012\LOG\DetachAttachSQLTURKIYE_log.ldf' ) FOR ATTACH GO

Script II : EXEC sp_attach_db @dbname = N'DetachAttachSQLTURKIYE',

@filename1 = N'K:\MSSQL2012\DATA\DetachAttachSQLTURKIYE.mdf' , @filename2 = N'K:\MSSQL2012\LOG\DetachAttachSQLTURKIYE_log.ldf';

Yukarıda verdiğim Script-I ve Script-II ‘yi inceleyecek olursak I.Script imizde Database oluşturma komutu ile başlayıp CREATE DATABASE File ‘larımızı göstererek FOR ATTACH diyerek Database ‘imizi ATTACH edebiliyoruz. II.Scriptte ise sp_attach_db Attach sistem prosedürünü kullanarak Attach işlemimizi gerçekleştirebiliyoruz. Konuyu özetleyecek olursak Detach ve Attach yöntemini kullanarak Database ‘lerimizin lokasyonlarını değiştirebiliriz.

Page 13: SQL SERVER DATABASE FILE ‘LARINI VE TEMPDB FILE ‘LARINI …sqlturkiye.com/wp-content/uploads/2013/11/SQL-SERVER... · 2018-04-26 · Detach, SQL Server üzerinde kullanmadığımız

13

III. OFFLINE ve ONLINE OPERASYONU

SQL Server Managament Studio Konsolunu kullanarak Database ‘lerimizi OFFLINE ‘a çekip taşıma işleminide gerçekleştirdikten sonra ONLINE ‘a çekerek operasyonumuzu tamamlayabiliriz. Database ‘lerimizi OFFLINE ‘a çekmek için SSMS üzerinde Database ‘imizin üzerine gelip sağ tıklayıp (Şekil-11) Task sekmesinden Take Offline sekmesine tıklayarak Database ‘imizi Offline ‘a çekebiliriz.

Şekil-11

Şekil-12 ‘de görüldüğü üzere Database ‘imiz sağlıklı bir şekilde Offline ‘a çekilmiştir.

Şekil-11

Offline ‘a çekilen Database ‘in görüntüsü aşağıda yer almaktadır.(Şekil-13)

Page 14: SQL SERVER DATABASE FILE ‘LARINI VE TEMPDB FILE ‘LARINI …sqlturkiye.com/wp-content/uploads/2013/11/SQL-SERVER... · 2018-04-26 · Detach, SQL Server üzerinde kullanmadığımız

14

Şekil-13

Peki bu işlemi T-SQL scriptleri ile nasıl gerçekleştirbiliriz ? ALTER DATABASE DetachAttachSQLTURKIYE SET OFFLINE

Yukarıda ki script ile Database ‘imizi aynı SSMS üzerinde yaptığımız gibi OFFLINE ‘a çekebiliriz. Bu işlemden sonra Database ‘imizin File ‘larının bulunduğu Folder ‘a giderek taşıyacağımız hedef diskine taşıma işlemi gerçekleştiriyoruz. Bildiğiniz üzere DB File ’larımız şu anda mdf File ‘I ‘K:\MSSQL2012\DATA’, .ldf File ‘ı ‘K:\MSSQL2012\LOG’ lokasyonlarında durmaktadır. Biz ise File ‘ları C:\MSSQLTransfer folder ‘ına taşıyıp Database ’imizi ONLINE ‘a çekeceğiz. Hedef disklere File ‘ları taşıma işleminden sonra sıra geldi Database’imizin o File ‘ları görmesine ; USE master GO ALTER DATABASE [DetachAttachSQLTURKIYE]

MODIFY FILE (NAME = 'DetachAttachSQLTURKIYE', FILENAME = 'C:\MSSQLTransfer\DetachAttachSQLTURKIYE.mdf') GO ALTER DATABASE [DetachAttachSQLTURKIYE]

MODIFY FILE (NAME = 'DetachAttachSQLTURKIYE_log', FILENAME = 'C:\MSSQLTransfer\DetachAttachSQLTURKIYE_log.ldf') GO

Yukarıda ki script i incelediğimizde file path ‘lerin yeni path ‘ler olarak modify edildiğini görmekteyiz. Bu şekilde script’imizi EXECUTE ettiğimizde Database ‘imiz yeni File’larını tanımaktadır. EXECCUTE işleminden sonra Messages ‘te ; The file "DetachAttachSQLTURKIYE" has been modified in the system catalog. The new path will be used the next time the database is started. The file "DetachAttachSQLTURKIYE_log" has been modified in the system catalog. The new path will be used the next time the database is started.

gerekmektedir. SSMS üzerinde Database ‘imizi ONLINE ‘a çekme işlemi ; İlk önce OFFLINE olan DB ‘mizin üzerine gidip sağ tıklarız ve Task sekmesinden Bring Online sekmesine tıklayarak (Şekil-13) Database ‘imizi ONLINE ‘a çekmiş oluruz.

Page 15: SQL SERVER DATABASE FILE ‘LARINI VE TEMPDB FILE ‘LARINI …sqlturkiye.com/wp-content/uploads/2013/11/SQL-SERVER... · 2018-04-26 · Detach, SQL Server üzerinde kullanmadığımız

15

Şekil-13

Şekil-14 ‘te de görüldüğü üzere ONLINE operasyonumuz sağlıklı bir şekilde gerçekleşmiştir. Peki biz bu ONLINE işlemini T-SQL Script’I yazarak nasıl gerçekleştiririz.

Şekil-14

ALTER DATABASE DetachAttachSQLTURKIYE SET ONLINE

Yukarıda ki script ‘i kullanarak da Database ‘imizi ONLINE ‘a çekebiliriz. Konumuzu özetleyecek olursak DB taşıma operasyonumuzu Database ‘lerimizi OFFLINE-ONLINE yaparak taşıyabiliriz.

Page 16: SQL SERVER DATABASE FILE ‘LARINI VE TEMPDB FILE ‘LARINI …sqlturkiye.com/wp-content/uploads/2013/11/SQL-SERVER... · 2018-04-26 · Detach, SQL Server üzerinde kullanmadığımız

16

IV. TEMP DB ‘yi Farklı Disk ‘e Nasıl Taşırız ? Yukarıda normal Database ‘lerimizi taşıma yöntemlerini gördük fakat TEMPDB ‘yi yukarıda anlattığımız yöntemler ile taşıyamayız. Peki TempDB ‘yi nasıl taşırız. Çoğu DBA taşıma operasyonlarında TEMPDB ‘yi taşımaktan hep çekinmiştir. Aşağıda size bunu nasıl yapılacağını adım adım anlatacağım.

İlk önce TEMPDB ‘min lokasyonlarına bakacağım. Bunun için ; Databases altında bulunan System Databases ‘ın altında tempdb Database ‘inin üzerine gelip sağ tıklıyorum ve Proparties sekmesine tıklıyorum.

Şekil-15

Bu işlemden sonra Şekil-16 ‘da ki ekran karşımıza gelmektedir. Bu ekranda gördüğünüz üzere TempDB File ‘larımızın nerede tutulduğunu görmekteyiz.

Page 17: SQL SERVER DATABASE FILE ‘LARINI VE TEMPDB FILE ‘LARINI …sqlturkiye.com/wp-content/uploads/2013/11/SQL-SERVER... · 2018-04-26 · Detach, SQL Server üzerinde kullanmadığımız

17

Şekil-16

Bizim amacımız farklı bir Disk ‘e taşımak olsun. Bunu gerçekleştirmek için aşağıda ki script ‘i çalıştırıyorusnuz. USE master

GO ALTER DATABASE tempdb

MODIFY FILE (NAME = tempdev, FILENAME = 'C:\MSSQL2012\TEMP\tempdb.mdf') GO ALTER DATABASE tempdb

MODIFY FILE (NAME = tempdev2, FILENAME = 'C:\MSSQL2012\TEMP\tempdb1.ndf') GO ALTER DATABASE tempdb

MODIFY FILE (NAME = tempdev3, FILENAME = 'C:\MSSQL2012\TEMP\tempdb2.ndf') GO ALTER DATABASE tempdb

MODIFY FILE (NAME = tempdev4, FILENAME = 'C:\MSSQL2012\TEMP\tmpdb3.ndf') GO ALTER DATABASE tempdb

MODIFY FILE (NAME = tempdev5, FILENAME = 'C:\MSSQL2012\TEMP\tempdb4.ndf') GO ALTER DATABASE tempdb

MODIFY FILE (NAME = tempdev6, FILENAME = 'C:\MSSQL2012\TEMP\tempdb5.ndf') GO ALTER DATABASE tempdb

MODIFY FILE (NAME = tempdev7, FILENAME = 'K:\MSSQL2012\TEMP\tempdb6.ndf') GO ALTER DATABASE tempdb

MODIFY FILE (NAME = tempdev8, FILENAME = 'C:\MSSQL2012\TEMP\tempdb7.ndf') GO ALTER DATABASE tempdb

MODIFY FILE (NAME = templog, FILENAME = 'C:\MSSQL2012\TEMP\templog.ldf')

Yukarıda ki script benim TempDB File yapıma uygun yazılmıştır. Sizde kendi TempDB File ‘larınıza göre Modify etmeniz gerekmektedir. Script ‘i açıklayacak olursak ; NAME : Logical name ‘inizi yazıyorusnuz. FILENAME : Bu kısıma ise taşıyacağınız lokasyonun path’ini yazıp File ‘larınızı belirtiyorusnuz. Yukarıda ki scriptimizi EXECUTE ettikten sonra Messages kısmına ; The file "tempdev" has been modified in the system catalog. The new path will be used the next time the database is started. The file "tempdev2" has been modified in the system catalog. The new path will be used the next time the database is started. The file "tempdev3" has been modified in the system catalog. The new path will be used the next time the database is started. The file "tempdev4" has been modified in the system catalog. The new path will be used the next time the database is started. The file "tempdev5" has been modified in the system catalog. The new path will be used the next time the database is started. The file "tempdev6" has been modified in the system catalog. The new path will be used the next time the database is started. The file "tempdev7" has been modified in the system catalog. The new path will be used the next time the database is started. The file "tempdev8" has been modified in the system catalog. The new path will be used the next time the database is started. The file "templog" has been modified in the system catalog. The new path will be used the next time the database is started.

Bu işlemden sonra SQL Server sevisimizi Restart ettiğimizde TempDB lerimiz yeni lokasyonlarına taşınmış olmaktadır.

Page 18: SQL SERVER DATABASE FILE ‘LARINI VE TEMPDB FILE ‘LARINI …sqlturkiye.com/wp-content/uploads/2013/11/SQL-SERVER... · 2018-04-26 · Detach, SQL Server üzerinde kullanmadığımız

18

Konumuzu özetleyecek olursak ; TempDB ‘yi normal Database taşıma operasyonları gibi taşıyamacağımızı ve taşıma yöntemimizi bu konuda görmüş bulunmaktayız.