Sepetiniz

Distributed Partitioned View Nedir ve Nasıl Kullanılır?

SQL Server 7.0 ile view tanımında UNION ALL kullanarak partioned view’ler oluşturabiliyorduk. Fakat View üzerinde tanımlı olan tüm tabloların view’in tanımlandığı instance üzerinde olması gerekiyordu. Birden fazla instance üzerindeki tablolardaki kayıtları UNION ALL ile bir araya getirebileceğimiz Distributed Partitioned View’ler hayatımıza girdi.

 

Partitioned View’den farklı olarak instance’lar arası erişimi linked server ile yapıyoruz. View ve Partitioned View’ler hakkında detaylı bilgi almak için “View Nedir Ve Nasıl Oluşturulur” ve “Partitioned View Nedir ve Nasıl Yapılır” isimli makaleleri okuyabilirsiniz.

 

Linked server’ın ne olduğunu ve nasıl oluşturulacağını da “SQL Server Instance’ından SQL Server Instance’ına bağlanacak Linked Server Tanımlamak” isimli makaleden öğrenebilirsiniz.

 

Örnek olarak 3 adet instance’ımız olsun. Sunucu isimleri sırasıyla Sunucu1, Sunucu2 ve Sunucu3 olsun.

 

İlk olarak Sunucu1 üzerinde Sunucu2 ve Sunucu3’e bağlanmak için Sunucu2 ve Sunucu3 isimlerinde linked server oluşturuyoruz.

 

Daha sonra oluşturduğumuz linked server’ları kullanarak aşağıdaki script yardımıyla distributed partitioned view’imizi oluşturabiliriz.

CREATE VIEW Dist_Part_View AS
   SELECT * FROM DatabaseIsmi.SchemaIsmi.TabloIsmi_x
UNION ALL
   SELECT * FROM Sunucu2.DatabaseIsmi.SchemaIsmi.TabloIsmi_y
UNION ALL
   SELECT * FROM Sunucu3.DatabaseIsmi.SchemaIsmi.TabloIsmi_z

 

Upgrade Data-tier Application ile Veritabanınızı Güncelleyin

Data Tier Application ile extract, export, deploy ve import kavramlarının ne olduğunu ve nasıl yapıldığını, dacpac ve bacpac arasındaki farkı, DAC ile veritabanlarını şema yapılarıyla ya da şema yapısınında yanında tüm verisiyle beraber nasıl taşıyacağınızı öğrenmek için bu makaleyi okumadan önce “Data-Tier Application Nedir ve Nasıl Kullanılır” isimli makaleyi okumanızı tavsiye ederim.

 

Bu makalede bir önceki makalede şema yapısını taşıdığımız AdventureWorks2014Yeni veritabanında bir değişiklik olduğunda sadece değişikliklerin yeni instance’a aktarılması için gerekli işlemleri yapacağız.

İlk instance üzerindeki AdventureWorks2014Yeni veritabanına bir tablo ekleyin(Ben UpgradeDataTierYeniEklenenTablo isminde bir tablo oluşturdum.) ve extract ile şema yapısını oluşturun.

 

Daha sonra yeni instance’a gelerek AdventureWorks2014YeniDacSonrasi ismiyle aktardığımız veritabanının üzerine gelerek aşağıdaki sağ tıklayıp Upgrade Data-tier Application…’a tıklayın.

 

 

Bir sonraki ekranda aşağıdaki gibi extract ettiğimiz dosyası seçerek next diyoruz.

 

 

 

Bir sonraki ekranda değişiklikleri kontrol ediyor. Biz herhangi bir tablo yapısında değişiklik yapmadığımız için aşağıdaki gibi bir ekran görmeniz gerekiyor.

 

Bir sonraki ekranda Rollback on failure’u seçerseniz upgrade sırasında bir hata alırsa yapılan işlemleri rollback yapacaktır. Eğer bunu işaretlemezseniz ve upgrade sırasında bir hata oluşursa yeni instance’da ki veritabanını yeniden restore etmeniz gerekebilir. Ben işaretleyerek next diyorum.

 

 

Bir sonraki ekranda Action kısmında, ilk instance yeni eklediğimiz veritabanındaki tablonun create edileceği bilgisi karşımıza çıkıyor.

 

Operation:Create, Type: SqlTable, Object: [dbo].[UpgradeDataTierYeniEklenenTablo]

 

 

Next, Next ve Finish diyerek işlemi tamamlıyoruz. Yeni instance üzerinde DAC ile taşıma işlemi yaptıktan sonra veri girişi yapıldıysa DAC ile Upgrade yapmak verilerinizi kaybetmenize sebep olabilir. Bu risk sizin için önemli değilse(genelde geliştirme aşamasında yapılan bir işlem olduğu için içindeki veriler önemli olmaz.) DAC ile Upgrade işlemini kolay ve hızlı bir şekilde yapabilirsiniz.

Data-Tier Application Nedir ve Nasıl Kullanılır

Data-Tier Application Version 1.1 (DAC) SQL Server 2008 R2 ile beraber hayatımıza girdi.

 

Data-Tier Application ile uygulamalarımıza ait veritabanlarını tüm gereksinimleriyle beraber(tablolar, şemalar, loginler vb.) production ortama aktarabiliyoruz. Aslında bu özelliği kullanarak veritabanlarını bir instance üzerinden başka bir instance’a da taşıyabiliriz.

 

Data-Tier Application(DAC) kullanarak veritabanını test ortamından production ortama aktaran bir örnek yapalım.

 

DAC ile veritabanını içinde veri olacak ya da olmayak şekilde production’a aktarabiliriz.

 

Aşağıda görüldüğü gibi veritabanı üzerinde sağ tıklayarak Task ve daha sonra Extract Data-tier Application…’a tıklarsak veri olmadan bütün şema yapısıyla beraber dacpac uzantılı bir dosya oluşturacaktır. Export Data-tier Application…’a tıklarsak da veritabanındaki veriyide içinde barındıran bacpac uzantılı bir dosya oluşturacaktır.

 

Diğer seçeneklerde de veritabanını Azure’da ki bir SQL veritabanına ya da wm’e deploy edebilirsiniz.

 

 

Biz Extract Data-tier Application’a tıklayarak içinde veri olmadan sadece şema yapısını barındıran bir dacpac dosyayı oluşturalım.

 

Karşımıza aşağıdaki gibi bir ekran çıkıyor. Save to DAC package file yazan kısımda dosyayı kaydedeceğimiz path bilgisi bulunuyor. Browse diyerek istediğimiz lokasyona kaydedebiliriz.

 

Next, Next ve Finish diyerek işlemi tamamlıyoruz.

 

 

Daha sonra veritabanının şema yapısını taşıyacağımız instance’a gelerek Databases sekmesine sağ tıklayarak aşağıdaki gibi Deploy Data-tier Application… diyoruz. Eğer bir önceki adımda dosyamızı export yöntemi ile oluştursaydık burada Deploy yerine Import işlemi yapmamız gerekirdi.

 

Daha sonra karşımıza gelen ekranda bir önceki adımda oluşturduğumuz dacpac uzantılı dosyayı browse ediyoruz.

 

 

Next diyerek ilerliyoruz. Bize aşağıdaki gibi deploy edeceğimiz veritabanı ismini soruyor. Buradan önceki instance’da daki isim otomatik geliyor. İsterseniz ismi değiştirebilirsiniz. Ben AdventureWors2014YeniDACSonrasi olarak değiştirdim.

 

 

Sonraki adımlarda next ve finish diyerek işlemi tamamlıyoruz.

 

 

Loginlere bakarsanız eski instance üzerinde AdventureWorks2014Yeni veritabanında yetkisi olan login’lerin yeni instance’a taşındığını göreceksiniz.

 

Fakat burada dikkat etmeniz gereken önemli bir nokta var. SQL Server güvenlik gereği dacpac veya bacpac dosyalarında şifre saklamaz. Dacpac veya bacpac dosyalalarını deploy ya da import ettiğimizde yeni bir şifre genarete ederek login’i yeni instance üzerinde oluşturur ve disable eder. Bu yüzden login’i enable etmeli ve eski şifreyi yeniden set etmelisiniz.

 

Eski instance’ta bazı değişiklikler yaptıysanız ve yeniden aktarmak yerine sadece bu güncellemeleri aktarmak istiyorsanız DAC’ın Upgrade Data-tier Application özelliğini kullanabilirsiniz. Detayları “Upgrade Data-tier Application ile Veritabanınızı Güncelleyin” isimli makalede bulabilirsiniz.

Kullanılmayan Login’leri Tespit Etmek

Her veritabanı yöneticisi sisteminde atıl durumda olan, kullanılmayan login’leri tespit etmek ve temizlemek ister. SQL Server’da default olarak Login’lerin en son hangi tarihte login olduğu bilgisi bir tabloda ya da dmw’de tutulmuyor. Bu ihtiyacımızı karşılamak için aşağıdaki gibi bir script yazdım.

 

Öncelikle aşağıdaki script yardımıyla her hangi bir veritabanında bir tablo oluşturmalısınız. Ben genel amaçlı kullanacağım için master veritabanını tercih ettim. Bu tablo’da login’in ismi ve son login olduğu tarih bilgisini saklayacağız.

--Aşağıdaki tabloyu oluşturan script'i her instance için 1 defa çalıştıracağız.
use master
create table loginler(
login_name nvarchar(max),
login_time datetime
)

 

--Aşağıdaki ifade de session'ların tutulduğu dmw'den o anda session'ı olan login'lerin isimlerini ve son login tarih'lerini alıyoruz.
SELECT   login_name as[login_name],MAX(login_time)as [login_time]
into #session 
FROM sys.dm_exec_sessions
GROUP BY login_name;


--Bir önceki tarih bilgisini merge ifadesi ile master veritabanında oluşturduğumu tabloya aktarıyoruz.
MERGE INTO [master].dbo.loginler WITH (HOLDLOCK) AS target
USING #session AS source
    ON target.login_name = source.login_name

--Merge ifadesi master veritabanındaki tabloda bu login varsa login'in en son bağlandığı tarihi güncelliyor.
WHEN MATCHED THEN
    UPDATE SET target.login_time = source.login_time


--Eğer login ismi master veritabanındaki tabloda yoksa bu sefer insert işlemi gerçekleştiriyor.
WHEN NOT MATCHED BY TARGET THEN
    INSERT (login_name, login_time)
    VALUES (source.login_name, source.login_time);

DROP TABLE #session

 

Yukarıdaki script’i 1 dakika aralıklarla çalışacak şekilde bir job olarak oluşturabilirsiniz. Daha sonra hangi login’in aktif olarak kullanıldığını, hangi login’in kullanılmadığını sorgulamak için aşağıdaki script’i kullanabilirsiniz.

 

select*from loginler order by login_time asc

 

 

Cumulative Update ve Service Pack’leri Kaldırmak

SQL Server 2008 ile beraber artık Cumulative Update ve Service Pack’leri Denetim Masasından Program and Features kısmından kolayca kaldırabiliyoruz. Özellikle upgrade’ler sırasında alınabilecek bir hatada kolaylıkla geri dönebilmemizi sağlıyor.

 

Öncelikle aşağıdaki gibi Denetim Masasına giriyoruz.

 

Karşımıza çıkan ekranda aşağıdaki gibi Program and Features’a tıklıyoruz.

 

Karşımıza çıkan ekranda aşağıdaki gibi View installed updates diyoruz.

 

 

Karşımıza çıkan ekranda aşağıdaki gibi kaldırmak istediğimiz cumulative update ya da service pack’i tıklayarak uninstall diyoruz.

 

SQL Server’a ait güncelleştirmeleri bulmakta zorlanıyorsanız aşağıdaki ekrandaki sağ üst köşede gördüğünüz gibi arama kısmına sql server yazarak işinizi kolaylaştırabilirsiniz.