Pazartesi , 20 Kasım 2017

SQL Server Contained Databases

Hem veritabanı yöneticilerini hem de veritabanı uygulamaları geliştiren yazılımcıların sıkça zorluklardan biri test ve geliştirme(Development) ortamlarında oluşturdukları veritabanlarının Canlı(Production) gibi farklı ortamlara daha doğrusu farklı SQL Server Instance’ına taşınmasıdır. Çünkü birçok durumda sadece veritabanının taşınması yeterli değildir. Çünkü SQL Serverda veritabanları bağımsız nesneler olmayıp kullandığımız SQL Server loginleri, SQL Server Agent jobları, linked Serverlar gibi nesneler sadece veri tabanlarımıza değil SQL Server Instance’ımıza da bağlı özellikler olduğu için bir veritabanının tam anlamıyla başka bir ortama taşınabilmesi için ona bağlı nesnelerinde taşınıyor olması gerekir.
Yukarıda bahsettiğimiz problemi çözümü için Microsoft yeni ürünü SQL Server 2012 ile beraber Contained Databases adlı bir özellik tanıttı. Bu özellikle beraber tam olarak olmasa bile SQL Serverda oluşturduğumuz veritabanlarımız artık SQL Server Instance’ından bağımsız olacaklardır. Aslında ilk bakıldığında çok iyi bir özellik gibi görünmesine rağmen Contained Databases özelliği tam olarak bir bağımsızlık sağlamamaktadır. Bu özellikle Partial yani tam değil de kısmi bir bağımsızlık sağlanabilmektedir. Diğer bir değişle veritabanımız yukarıda saydığımız SQL Server loginleri, SQL Server Agent jobları, linked Serverlar gibi tüm objeleri değil şimdilik sadece SQL Server loginlerini ve bazı Collation ayarları bakımından bağımsızlık özelliği göstermektedir.
Contained Databases özelliğinin geliştirilmesiyle beraber SQL Serverın da güvenlik mekanizmasının bir parçası olan Authentication sistemi de aşağıdaki gibi değiştirilmiştir.

Contained Database1

 

 

Yukarıdaki şemadan da anlaşılacağı üzere Contained Database özelliğini kullanan bir SQL Serverda kullanıcı login olmaya çalıştığında öncelikle o kullanıcının bir Contained Datasbee kullanıcı olup olmadığı anlaşılmaya çalışılmaktadır.

Contained Database özelliği tam olarak bir bağımsızlık sağlamadığı için çok hayati bir yenilik olmasa bile SQL Server tarafında böyle bir geliştirmeye ilk adımın atılmış olması bile aslında yeterince iyi bir gelişme olarak görülebilir. Çünkü SQL Server 2012 sonrası sürümlerde bu özellikle geliştirilecektir.

Özellik hakkında bu kadar teorik bilgiden sonra artık bu özelliği SQL Server 2012 sürümünde nasıl kullanabileceğimize bakalım.

Bu özellik SQL Serverın kurulumunda varsayılan olarak pasif gelmektedir. SQL Server seviyesinde bu özelliği kullanmadan önce aktif etmemiz gerekmektedir. Bunun için SQL Server Management Stdio aracını kullanabileceğimiz gibi SQL Server seviyesinde değişlik yapmak için kullandığımız sp_configure sistem stored procedure’unu de kullanabiliriz. Daha pratik olması bakımından ilk olarak SQL Server Management Stdio aracını kullanalım.

İlk olarak yetkili bir kullanıcı ile SQL Servera bağlandıktan sonra aşağıdaki gibi Server adı üzerinde sağ tıklayıp açılan menüden Properties seçeneğini seçelim.


Contained Database2

Karşımıza aşağıdaki gibi bir ekran gelecektir. Bu ekranda en alt kısımdaki Advanced sekmesine geçelim ve aşağıdaki resimde gösterildiği gibi Enable Contained Databases seçeneğini True olarak değiştirelim.

Contained Database3

Yukarıdaki pencerede gerekli değişliği yaptıktan sonra OK butonuna basarak SQL Server seviyesinde Contained Databases özelliğini aktif etmiş oluruz. Aynı işlemi daha önce belirttiğimiz gibi sp_configure sistem stored procedure’unu kullanarak da aşağıdaki gibi yapabiliriz.

USE master

GO

sp_configure 'show   advanced options', 1

GO

RECONFIGURE

GO

sp_configure 'CONTAINED   DATABASE AUTHENTICATION', 1

GO

RECONFIGURE

GO

sp_configure 'show   advanced options', 0

GO

RECONFIGURE

GO

İkici adım olarak artık CONTAINMENT özelliğine sahip bir veritabanı oluşturabiliriz. Bunun için yeni bir veritabanı oluşturma ekranını açalım ve veritabanımızın oluşturmadan önce aşağıdaki gibi CONTAINMENT özelliğini Partial olarak seçelim.

Contained Database4

Yukarıdaki ekranda gördüğümüz gibi yeni bir veritabanı oluştururken sağdaki sekmeden Options seçeneği seçtikten sonra Sağdaki Containtment özelliğini Partial olarak seçmemiz gerekir. Bu şekilde oluşturacağımız veri tabanlarımıza Containtment özelliğini eklenmiş olacaktır. Aynı şekilde Contain Database oluşturma işlemini TSQL ile de aşağıdaki gibi yapabiliriz.

CREATE DATABASE [ContainDB]

CONTAINMENT = PARTIAL

ON  PRIMARY

( NAME = N'ContainDB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\ContainDB.mdf' , SIZE = 5120KB , FILEGROWTH = 1024KB )

LOG ON

( NAME = N'ContainDB_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\ContainDB_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)

GO

Hakkında ismailadar

Cevapla

E-posta adresiniz yayınlanmayacak. Required fields are marked *

*


*

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>