15 Ocak 2008 Salı

Veri, Veritabanı ve Sistem Yönetimi

Veri, Veritabanı ve Sistem Yönetimi
Çoğu firma verilerin, teknik ve iş yönünden bakış açısını çesitli rollerle tanımlamışlardır. Şimdi bu rolleri açıklamaya çalısacağım.

Veri Yönetimi
Veri yönetimi veri kaynak yönetiminde kullanılan veriyi yönetmek için gerekli teknolojiyi belirler ve veriyi kullanıcılar tarafından kullanılmaya hazır hale getirir. Veri yöneticisi iş yapısını anlama ve bunu mantıksal veri modeline çevirme ile sorumludur ve bunun için veri yöneticisi daha çok analiz etme, daha çok veri toplama ve dizayn evrelerini belirlemelidir.

Veritabanı yöneticiside(DBA) veritabanını geliştirme, test etme ve işlere uygunluk açısından planlamak zorundadır.

Veri yöneticisi verileri depolama, veritabanı yöneticisi DBMS ve veritabanının fiziksel
dizaynıyla ilgilenir. Ayrıca veri yönetisi metadata ile de ilgilenir. Metadata sistem bilgileridir. Metadata, veritabanı içerisindeki nesneler ve sistem hakkındaki bilgileri içerir. Veri yöneticisi işyerinin metadata stratejilerine cevap verebilmelidir. Örneğin veri yöneticisi veri elemanlarını tanımlamalı, isimlerini belirlemeli, varsa kısıtlamaları düzenlemeli, veri tipleri ve uzunluklarını ayarlamalıdır.

Veri yöneticisine veri modellerini olustururken, Conceptual(Kavramsal) veri modeli ve Logical(Mantıksal) veri modelinin birliktelikleri büyük katkıda bulunur. Conceptual (Kavramsal) veri modeli, yüksek derecede veri gereksiniminin anahatlarını içerir. Logical (Mantıksal) veri modeli, veri tipleri, veri uzunlukları, veriler arasındaki ilişkileri ve kısıtları içerir.

Veritabanı Yönetimi
Veritabanı yöneticisi(DBA), mantıksal veritabanı etkin bir şekilde fiziksel veritabanı modeline dönüştürür. Bir veritabanı yöneticisinin bu dönüşümü yaparken DBMS’yi mutlaka bilmesi gerekir. Bir veritabanı yöneticisi bir veri yöneticinden kavramsal ve mantıksal veri modelini alır ve bunu fiziksel veri modeline çevirir. Bu ilişki aşağıdaki şekilde gösterilmektedir.



Sistem Yönetimi
Bazı şirketler ki genellikle büyük organizasyonlar sistem yöneticilerine de sahiptir. Bu sistem yöneticileri DBMS’yi oluşturmak ve çalıştırmak için sistem programlama rollerini üstlenir. Sistem yöneticileri veritabanı planlarında ve veritabanı desteklerinde bulunmaz. Veritabanı Yöneticisi veritabanından sorumludur. Sistem Yöneticisi ise DBMS’nin kurulumu, düzenlenmesi ve destek işlerinden sorumludur.

Bunun dışında sistem yöneticisi diğer teknisyenlerle beraber Transaction İşlemleri, Message Queue Yazılımları, Network Protokolleri, İşletim Sistemi parametreleri gibi işlemleri gerçekleştirebilmek için birlikte çalışır.

Veri yöneticisi, sistem yöneticisiyle veritabanı yöneticisi arasında çapraz bir şekilde görevlerini yerine getirir. Sistem yöneticileri de veritabanı yöneticileri gibi fiziksel veritabanı altında çalısırlar, fakat veritabanı yöneticileri sistem yöneticileri gibi sistem yazılımlarının teknik olarak derinliklerinden ve ilişkilerinden anlamak zorunda değildir. Veri yöneticisi, veritabanı yöneticisi ve sistem yöneticisi arasındaki görev dağılımı aşağıdaki şekilde gösterilmistir.

Veritabanı Yönetiminin Kuralları

Veritabanı Yönetiminin Kuralları

Veritabanı yönetim kurallarını, planlama ve düzenlenen planlamaları yerine getirme olarak söyleyebilirim. Bir veritabanı yöneticisi planlamaları yaparken şirketin büyümesini ve yapısal degişikliklerini göz önüne alarak planlamalıdır.

Veritabanı yöneticisi tasarılarını planlarken bu uygulamanın her adımını önceden planlamalı, gereksinimleri belirlemeli ve bu uygulamanın her adımındaki görevleri birbirleriyle döngüsel olarak işlemelidir. Aşağıdaki şekil de bu planlamayı göstermektedir.



Veritabanı yöneticisi, geliştirmeye başlamadan önce DBMS metodları kullanarak(örnek Oracle veya SQL Server) mantıksal veri modelini fiziksel veri modeline çevirmedir. Fiziksel veri modeline çevrilen veri uygulamalarının testleri de yapılarak uygulama hatalardan arındırılıp kullanıma hazır hale getirilmelidir. Kullanıma hazır hale getirilen veritabanının bundan sonraki işlemi bakım yapmaktır.

Kullanıma hazır hale gelen veritabanını kullanmaya başlamadan önce güvenlik mekanizmaları, depolama üniteleri ve bellek kullanma gereksinimleride düzenlenerek veritabanının gelişimi tamamlanır.

Bundan sonra DBA’nın yapması gereken faaliyete geçen veritabanın rutin yönetimsel görevlerini yerine getirmektir. Bu görevler;

· Performansı İzleme
· Yedek Alma ve Geri Yükleme
· Ayarlamalar
· Izin Yönetimleri

olarak sayılabilir.

DBA’a DBMS kurulumunu bitirdikten sonra uygulamalar vasıtasıyla veritabanına erişen IT altyapı sistemini oluşturmalıdır.(veya Program Gelistiricilerden destek alabilir). Son olarak DBA’in görevleri arasında sorgu ve rapor araçlarını düzenlemek, güvenliğini sağlamak, sorgu düzenekleri, performanslarını izleme ve düzenleme gibi görevler de sayılabilir.

14 Ocak 2008 Pazartesi

Database Management System (DBMS) nedir?

Database Management System (DBMS) nedir?

Veritabanı nedir? sorusuyla baslamak istiyorum. Belki bu soruya çok farklı cevaplar verilebilir. Ama şunu söyleyebilirim ki SQL Server 2005 bir database değildir. SQL Server 2005 bir Database Management System (Veritabanı Yönetim Sistemi’dir). Oysa SQL Server 2005 ile veritabanı yaratılabilir.
Veritabanı; alan, kayıt, dosya gibi veri elemanları içerisine veriler depolanmasını sağlar. DBMS ise son kullanıcı veya uygulama programcısı arasında veri yönetimi ve paylaşım etkinliğini sağlayan yazılımdır. DBMS database içerisindeki bilgileri depolayan, geri alan, değiştiren ve ekleyen sistematik metotlar sağlar. DBMS genellikle veri bütünlügü, veri güvenligi, veri erişim kontrolu ve uygun hale getirme, otomatik geri alma, yeniden başlatma ve kurtarma islerine de yerine getirir.

DBMS’inin görevleri ;
· Veritabanındaki ilişkileri yönetme,
· Datanın dogru bir sekilde kaydedilmesi,
· Bütün durumlarda hatta “system failure” durumunda bile datayı kurtarmak olarak özetleyebilirim.

DBMS’nin yetenekleriyle uygulamadan veritabanı örneklerine erişilebilir ve veritabanı işlemlerini yerine getirebiliriz. Örneğin herhangi bir muhasebe uygulamasıyla bu muhasebe uygulamasının kullandığı DBMS’i bütünleştirerek (örnek Oracle9i, DB2 veya SQL Server ) veri yönetim ve depolama islemlerini yerine getirebilirsiniz.
Şirketler çesitli veri tabanlarını tercih edebilir. Örnegin büyük bir sirket mainframe üzerinde çalısan DB2, farklı Unix platformlar üzerinde çalısabilen Informix ve Oracle, Windows 2003 üzerinde çalısabilen SQL Server tercih edebilir veya eski veritabanları olarak IMS, hatta gelişigüzel bir uygulamayla Adabas veya Ingres gibi DBMS’leri tercih edebilir.

Native HTTP Desteği

Native HTTP Desteği

SQL Server 2005’e gelen yeniliklerinden biriside Native HTTP desteğidir. SQL Server; Stored Procedure, kullanıcı tanımlı fonksiyon ve Transact SQL sorgularını SAOP protokolunu kullanarak dış ortama aktarabilir. Bu özellik IIS olmadan SQL Server objelerini Web Servis olarak dışarıya açmak anlamına gelmektedir.

SQL Server’ın native HTTP desteği vermesinin asıl amacı farklı istemci uygulamaların SQL Server’a erişebilmesi sağlamaktır. Bu istemci uygulamalara windows tabanlı uygulamalar, web tabanlı uygulamalar ve konsol tabanlı uygulamalar sayılabilir. Bu uygulamalar farklı programla dilleriyle ve OLEDB, ODBC veya diğer özel erişim yöntemleri kullanılarak gerçekleştirilir.



Uygulamalar için Native HTTP desteğinin bir diğer bir alternatifi XML Web Servisleridir. XML Web Servisleri veriyi HTTP üzerinden XML olarak alır ve gönderir. XML Web Servisleri SQL Server 2005’in native HTTP desteği gibi platform ve dilden bağımsız olarak çalışır.

Native HTTP desteğinin XML Web Servislerinden en önemli farkı, IIS(Internet Information Services) ihtiyaç duymamasıdır.

Windows HTTP uygulama arayüzü olarak adlandırılan HTTP.sys, istemci makinadan aldığı HTTP isteklerini SQL Server’a iletir.

SQL Server DDL(Data Definition Language) deyimlerini, uygulamalara HTTP Endpoint’ler ile paylaştırır.

HTTP endpointleri oluşturmak için CREATE ENDPOINT, değiştirmek için ALTER ENDPOINT ve silmek için DROP ENDPOINT deyimi kullanılır.

CREATE ENDPOINT deyiminin kullanımı aşağıdaki gibidir.

CREATE ENDPOINT endPointName [AUTHORIZATION login]
STATE = { STARTED STOPPED DISABLED }
AS { TCP HTTP } (
PATH = 'url'
, PORTS = ({CLEAR SSL} [,... n])
[ SITE = {'*' '+' 'webSite' },]
[, CLEAR_PORT = clearPort ]
[, SSL_PORT = SSLPort ]
, AUTHENTICATION =({BASIC DIGEST INTEGRATED} [,...n])
[, AUTH_REALM = { 'realm' NONE } ]
[, DEFAULT_LOGON_DOMAIN = {'domain' NONE } ]
[, RESTRICT_IP = { NONE ALL } ]
[, COMPRESSION = { ENABLED DISABLED } ]
[,EXCEPT_IP = ({ <4-part-ip> <4-part-ip>: } [,...n])
)

Şimdi CREATE ENDPOINT deyiminin parametrelerini açıklayalım.

STATE = { STARTED STOPPED DISABLED }
EndPointlerin oluşturulduğu zamandaki durum bilgisini verir. Varsayılan değer STOPPED dır.

AS { TCP HTTP }
Kullanılacak protokol bilgisini verir.

PATH = 'url'
EndPoint’in path bilgisini tanımlar.

PORTS = ({CLEAR SSL} [,... n])
Dinleyici port bilgisini belirtir. Eğer CLEAR olarak tanımlanırsa gelen mesajlar HTTP, SSL tanımlanmış ise HTTPS olmalıdır.

[ SITE = {'*' '+' 'webSite' },]
Host edilen bilgisayarın adını belirtir.

[, SSL_PORT = SSLPort ]
Port bilgisi SSL olarak belirtilmiş ise, belirtilen SSL portunun numarasını verir. Varsayılan port numarası 443 dır.

AUTHENTICATION =({BASIC DIGEST INTEGRATED} [,...n])
Kullanılacak kimlik doğrulama bilgisini verir.

DEFAULT_LOGON_DOMAIN = {'domain' NONE } ]
Kimlik doğrulama tipi BASIC seçilmiş ise varsayılan domain bilgisini belirtir. Varsayılan değer NONE dır.

Şimdi CREATE ENDPOINT deyimini örnek içinde kullanalım. Öncelikle “Adres” isminde yeni bir veritabanı oluşturalım. Oluşturduğumuz veritabanın içerisine Kisi isminde bir tablo ekliyelim ve bu tablonun tüm kayıtlarını “spKisi” isminde bir stored procedure ile listeliyelim.

Use Master
GO
Create Database Adres
Go
Use Adres
Go
Create Table Kisi
(
ID int identity(1,1) Not Null,
Ad varchar(25) Not Null,
Soyad varchar(25) Not Null,
Adres varchar(60) Null
)
Go
Insert Into Kisi values('Tamer','ŞAHİNER','Bakırköy')
Insert Into Kisi values('Engin','ÖREN','Bakırköy')
Insert Into Kisi values('Yalçın','UZUN','Beşiktaş')
Insert Into Kisi values('Murat','HAKSAL','Bakırköy')
Go
CREATE PROC spKisi
AS
SELECT * FROM dbo.Kisi
GO


Oluşturduğumuz “spKisi” isimli stored procedure’ü CREATE ENDPOINT ile IIS kullanmadan Web Servis olarak dış ortama aktaralım.

CREATE ENDPOINT sql_Adres
STATE = STARTED
AS HTTP(
PATH = '/Adres/Kisi',
AUTHENTICATION = (INTEGRATED),
PORTS = ( CLEAR ))
FOR SOAP(
WEBMETHOD 'spKisi'
(name='Adres.dbo.spKisi',
FORMAT=ROWSETS_ONLY),
WSDL = DEFAULT,
DATABASE = 'Adres',
NAMESPACE = 'http://localhost/Adres/'
)
GO

Oluşturduğumuz web servisine http://localhost/Adres/Kisi?WSDL adresinden erişebilirsiniz.

Şimdi bu web servisine oluşturacağımız yeni bir Windows Application ile erişelim.

Oluşturduğumuz projenin “Solution Explorer” penceresindeki proje ismi üzerinde farenin sağ tuşu tıklanır. Açılan kısayol menüsünden “Add Web Reference” komutu seçilir.

Açılan “Add Web Reference” penceresinin URL isimli metin kutusuna http://localhost/Adres/Kisi?WSDL değerini, Web reference name isimli metin kutusuna “AdresWebServis” değerini yazın ve “Add Reference” butonunu tıklayın.





Form1 nesnesinin üzerine btnListele isimli bir Button ve lstKisi isimli ListBox ekleyin. Formun görüntüsü aşağıdaki gibi olacaktır.





btnListele butonunun Click olayına aşağıdaki kodu ekleyin.

Private Sub btnListele_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnListele.Click
Dim proxy As New AdresWebServis.sql_Adres
proxy.Credentials = _
System.Net.CredentialCache.DefaultCredentials
Dim ds As System.Data.DataSet = proxy.Adres
For Each r As System.Data.DataRow In ds.Tables(0).Rows
lstKisi.Items.Add(r("ad").ToString() & " " & _
r("soyad").ToString())
Next
End Sub

Sonuç aşağıdaki gibi olacaktır.



Başka bir makalede görüşmek üzere...
Tamer ŞAHİNER
Tamer.sahiner@bilgeadam.com

SQL Server 2005 içerisinde Managed Code Kullanmak

SQL Server 2005 içerisinde Managed Code Kullanmak

SQL Server 2005 de veritabanı nesneleri T-SQL veya Managed code(yönetimsel kod) ile oluşturulur. Table, view gibi nesneler T-SQL deyimleri ile oluşturulur. Stored procedure, trigger, user-defined function, user-defined type ve aggregates gibi nesneler ise Managed code ile oluşturulabilir. Bu nesnelerin Managed code ile geliştirilmeleri aşağıdaki avantajları sağlar.

Managed code, Net dillerinin güçlü yapısını kullanır. Örneğin exception handling(hata kontrolleri), object orientation (nesne yönelimi) ve ileri düzey koşul kontrolleri gibi.
Managed code, .Net Framework’ün temel sınıf kütüphanelerini (base class library) kullanır.
Managed code, CPU’nun daha etkin kullanılmasını sağlar.
Managed code ile uygulama geliştirmek için Visual Studio 2005 kullanılır. Visual Studio 2005 içerisinde Visual Basic veya Visual C# seçtikten sonra, Database Proje tipini seçerek uygulama geliştirebilirsiniz.

Bu makalemde Managed code ile user-defined function yazarak SQL Server 2005 için assembly oluşturacağım.
Projeyi oluşturduktan sonra, “Add New Reference” butonunu tıklayarak SQL Server 2005’e bağlanın.


AdventureWorks veritabanı seçelim ve “Test Connection” butonunu tıklayarak bağlantıyı test edelim. Ok butonunu tıklayarak, “Add Database Reference” penceresine tekrar geçelim.


“AddDatabaseReference” penceresinden en son eklediğimiz veritabanını(connection string) seçin.

Aşağıdaki mesaj kutusuna üzerinde, “No” butonunu tıklayarak projeyi oluşturun.


Projeyi oluşturduktan sonra, Project menüsünden “Add User-Defined Function” menüsünü tıklayın.

Proje üzerinde veritabanı işlemleri gerçekleştirmek için sqlaccess.dll ve System.Data.dll kütüphanelerini eklenmelidir. (Project menüsünden, “Add Reference” menüsünü tıklayarak kütüphanaleri projeye ekleyebilirsiniz) Bu kütüphaneler proje ile beraber gelir.
Eklediğimiz sınıfın(class) kod bölümüne aşağıda kodu ekleyin
_
Public Shared Function GetLongDate _
(ByVal DateVal As SqlDateTime) As SqlString
Return DateVal.Value.ToLongDateString()
End Function

Kod satırlarını ekledikten sonra projeyi deploy yapın. Projeyi deploy yapmak için, Proje üzerinde sağ tuşa basın ve açılan menüden “Deploy” menüsünü tıklayın.

Eklediğimiz user-defined function’ı görmek için SQL Server Managed Studio’u açın.
Eklediğimiz user-defined function aşağıdaki gibi gözükecektir.



Fonksiyonu çalıştırmak için yeni bir sorgu(New Query) ekleyin ve aşağıdaki kodları yazın.

exec sp_configure 'clr enabled', 1
GO
RECONFIGURE
GO
USE AdventureWorks
SELECT dbo.GetLongDate('01/01/2006')

SQL Server 2005 içerisinde varsayılan olarak Net Framework pasifdir. Aktif hale getirmek için “sp_configure” stored procedure kullanılır.

Bu konu ile ilgili “SQL Server 2005 ve Net CLR” başlıklı makalemi de okuyabilirsiniz.
Başka bir makalede görüşmek üzere...

SQL Server 2005 ve Net CLR

SQL Server 2005 ve Net CLR

Microsoft Visual Basic, Visual C++, Visual FoxPro, Jscript ve üçüncü parti dillerin(SmallTalk,Perl ve Java) tümü çalışma zamanı derleyicileri ile derlenir. .Net Framework’ün geliştirilmesi ile beraber çalışmanı zamanı derleyicileri geliştirilmiştir. Net Framework ile beraber CLR(Common Language Runtime) geliştirilmiştir.

CLR(Common Language Runtime), çalışma zamanındaki ortak dil olarak tanımlayabiliriz. CLR diğer çalışma zamanı derleyicilerine göre bir çok avantaj sağlar. CLR, kodun güvenliğini sağlar ve dinamik kütüphane dosyalarında ki (DLL = Dynamic Link Library) versiyon problemlerini çözer.

CLR uygulamanın thread’ini yönetir ve uygulamanın hafızadaki yerini belirler. .Net uygulamalarında uzun süre kullanılmayan objeler CLR tarafından temizlenebilir.
Her .Net uyumlu dilin kendine özgü bir derleyicisi vardır. Bu derleyiciler, kodu MSIL(Microsoft Intermediate Language)’e göre derler. Kod MSIL’e göre derlendikten sonra, CLR derleyicisinden geçirilerek makine koduna çevrilir ve çalıştırılır.

SQL Server 2005’e CLR entegre edilmiştir. Bu entegrasyon veritabanı uygulamaları geliştirirken önemli esneklik sağlar. Özellikle CLR, extended stored procedure yazarken güçlü ve esnek bir yapı sağlar.

SQL Server 2005’e .NET Assembly’lerini ekleyebilir ve host edebiiriz.
Visual Studio .NET ortamında geliştirilen uygulamalar derlendiğinde, .exe veya .dll uzantılı dosyalar oluşur. .NET’in otomatik olarak oluşturduğu bu dosyalara assembly denir. Assembly içerisinde dosyaya ait başlık, açıklama ve telif hakkı gibi kritik bilgiler tutulur.

CLR entegrasyonu, herhangi bir .Net dili ile stored procedure, trigger, user-defined function, user-defined type ve aggregates gibi yönetimsel nesneler oluşturmanızı sağlar.

SQL Server 2005 de veritabanı nesneleri T-SQL veya managed code(yönetimsel kod) ile oluşturulur. Table, view gibi nesneler T-SQL deyimleri ile oluşturulur. Stored procedure, trigger, user-defined function, user-defined type ve aggregates gibi nesneler ise managed code ile oluşturulabilir. Bu nesnelerin managed code ile geliştirilmeleri aşağıdaki avantajları sağlar.
Managed code, Net dillerinin güçlü yapısını kullanır. Örneğin exception handling(hata kontrolleri), object orientation (nesne yönelimi) ve ileri düzey koşul kontrolleri gibi.
Managed code, .Net Framework’ün temel sınıf kütüphanelerini (base class library) kullanır.
Managed code, CPU’nun daha etkin kullanılmasını sağlar.

SQL Server 2005’in gerek duyduğu kurallar ile tasarlanmış bir assembly’nin SQL Server üzerinde çalışabilmesi için, öncelikle SQL Server’a tanıtılması gerekir. Bu tanıtımı ASSEMBLY sayesinde yapabiliriz.

ASSEMBLY oluşturmak için CREATE ASSEMBLY ifadesini kullanırız. CREATE ASSEMBLY ifadesinin syntax yapısı aşağıdaki gibidir.

CREATE ASSEMBLY
FROM


Aşağıdaki örnekte ‘C:\mcTest.dll’ adresindeki assembly dosyası SQL Server 2005’e Test ismi ile kaydedilmiştir.

CREATE ASSEMBLY Test
FROM ‘C:\mcTest.dll’


“mcTest.dll’ isimli assembly dosyanın adresinin değişmesi, SQL Server üzerindeki assembly etkilemez. Çünkü “mcTest.dll” isimli dosyanın kopyası veritabanı içerisinde saklanır.
Eğer “mcTest.dll” isimli dosya içerisinde, referans yapılmış başka assembly dosyaları var ise SQL Server veritabanında saklanır. Yalnız “mcTest.dll” assembly dosyası ile içerisinde referans edilmiş assembly dosyalar aynı klasör altında olmalıdır.

SQL Server üzerinde kaydedilmiş tüm assembly dosyaları, aşağıdaki sorgu ile görebilirsiniz.

SELECT * FROM sys.assemblies

SQL Server 2005 assembly dosyaları için üç güvenlik modu vardır. Bunlar SAFE, EXTERNAL ACCESS, UNSAFE dir.

SAFE : Veriye erişim yetkisi vardır. Dosya sistemi, ağ bağlantısı gibi dış kaynaklara erişim yetkisi yoktur. Varsayılan güvenlik modelidir.
EXTERNAL ACCESS : SAFE ile yapılan tüm işlemlerin yapılabileceği gibi dosya sistemi, ağ baglantısı, event loglar gibi dış kaynaklara erişim de sağlanabilir.
UNSAFE : Bu güvenlik modelinde hiç bir kısıtlama yoktur.

CREATE ASSEMBLY Test
FROM ‘C:\mcTest.dll’
WITH PERMISSION_SET=SAFE
CREATE ASSEMBLY Test
FROM ‘C:\mcTest.dll’
WITH PERMISSION_SET= EXTERNAL_ACCESS
CREATE ASSEMBLY Test
FROM ‘C:\mcTest.dll’
WITH PERMISSION_SET=UNSAFE


Kaydedilen bir assembly dosyayı SQL Server veritabanından silmek için DROP ASSEMBLY ifadesi kullanılır.

DROP ASSEMBLY

Aşağıdaki örnekte DROP ASSEMBLY ifadesinin kullanımı gösterilmektedir.

DROP ASSEMBLY Test

Eğer assembly ile ilgili veritabanı nesneleri varsa, assembly’i silmeden önce bu nesneleri silmeliyiz.

Bu konu ile ilgili "Managed Code Kullanmak” başlıklı makalemi de okuyabilirsiniz.

Başka bir makalede görüşmek üzere...
Tamer ŞAHİNER
Tamer.sahiner@bilgeadam.com

SMO(SQL Management Object)

SMO(SQL Management Object)

SQL Server 2005, veritabanı yöneticisinin yapması gereken yönetimsel işlemleri gerçekleştirmek için SMO(SQL Managenent Object) API’leri(Application Programming Interface) sunar.

SMO ile SQL 2005 üzerindeki nesne ve görevleri Visual Studio 2005 üzerinden programlayabilirsiniz. SMO ile yapılan yönetimsel işlemlere; SQL Server’ın konfigrasyon ayarlarına erişmek veya düzenlemek, yeni veritabanı oluşturmak, yedek almak veya geri yüklemek, zamanlanmış yedek almak ve SQL Server üzerindeki Job’ları yönetmek sayılabilir. SMO ile kod geliştirmek için Visual Studio 2005 projesine “Microsoft.SqlServer.Smo.dll” kütüphanesini eklemelisiniz.

Visual Studio 2005 ile, SQL Server 2005’in bağlantı bilgilerini gösteren, yeni veritabanı oluşturan, tüm veritabanlarını listeleyen ve seçilen veritabanının yedeğini alan bir proje geliştirelim.




SMO ile proje geliştirmek için Windows Application oluşturun. Projenin içerisine “Microsoft.SqlServer.Smo” ve “Microsoft.SqlServer.ConnectionInfo” kütüphanelerini(assembly) ekleyin.
Projenin kod satırına aşağıdaki kodları import edin.

Imports Microsoft.SqlServer.Management.Smo
Imports Microsoft.SqlServer.Management.Common

Projenin içerisine aşağıdaki formda görüldüğü gibi 6 Label, 6 TextBox ve 1 Button ekleyin. TextBox nesnelerinin isimlerini sırasıyla txtEdition, txtLanguage, txtOSVersion, txtPlatform,txtProduct,txtVersion olarak değiştirin. Butonun ismini ise btnConnectionInfo olarak değiştirin.



Projenin Declaritions tanımlama bloğuna aşağıdaki tanımlayı yapın. Bu kod ile yeni bir Server nesnesi tanımlıyoruz.
Dim myServer As New Server()
Form nesnesinin Load olayına aşağıdaki kodları ekleyin. Bu kod bloğu içerisinde tanımlanan conn nesnesinin ServerInstance metoduna bağlanacağınız SQL Server’ın adını girin.

Dim conn As ServerConnection = myServer.ConnectionContext
conn.ServerInstance = "tamers\Seminer"
conn.Connect()
btnConnectionInfo butonunun click olayına aşağıdaki kodu ekleyin. Bu kod ile Server nesnesisinin özelliklerini TextBox nesnelerinin içerisine yazıyoruz.
txtEdition.Text = myServer.Information.Edition
txtLanguage.Text = myServer.Information.Language
txtOSVersion.Text = myServer.Information.OSVersion
txtPlatform.Text = myServer.Information.Platform
txtProduct.Text = myServer.Information.Product
txtVersion.Text = myServer.Information.VersionString

SMO ile projenin diğer bölümlerini tanımlamak için aynı forma, sırasıyla 1 ListBox, 1 Label, 1 TextBox ve 3 Button ekleyin. Form nesnesinin görüntüsü aşağıdaki gibi olacaktır.


ListBox nesnesinin ismini lstDatabases, TextBox nesnesinin ismini txtNewDatabase, butonların ismini ise sırasıyla btnCreateDb, btnBackup ve btnDatabaseList olarak değiştirin.
btnDatabaseList(Veritabanlarını Listele) butonunun click olayına aşağıdaki kodu ekleyin. Bu kod ile SQL Server 2005 deki tüm veritabanlarını ListBox içerisene dolduruyoruz.

lstDatabases.Items.Clear()
For i As Integer = 0 To myServer.Databases.Count - 1
lstDatabases.Items.Add(myServer.Databases(i).Name)
Next

btnCreateDB(Veritabanı Oluştur) butonunun içerisine aşağıdaki kodu ekleyin. Bu kod txtNewDatabase isimli TextBox kontrolunun içerisine girilen isimde veritabanı oluşturur. Veritabanı oluşturmak için Database sınıfını kullanıyoruz.

If txtNewDatabase.Text <> "" Then
Dim newDb As Database = New Database(myServer, txtNewDatabase.Text)
newDb.Create()
End If

btnBackup butonunu içerisine aşağıdaki kodu ekleyin. Bu kod lstDatabases kontrolunun içerisinden seçilen veritabanın yedeğini alır. Seçili veritabanının yedeğini almak için Backup sınıfını kullanıyoruz.

If lstDatabases.SelectedIndex <> -1 Then
Dim dbName As String = lstDatabases.SelectedItem.ToString
Dim MyBackup As New Backup
MyBackup.Action = BackupActionType.Database
MyBackup.BackupSetName = dbName & "Backup"
MyBackup.Database = dbName
MyBackup.Devices.AddDevice("C:\" & dbName.ToString & ".bak", DeviceType.File)
MyBackup.SqlBackup(myServer)
MessageBox.Show(dbName & " backup'ı alınmıştır.")
End If

Başka bir makalede görüşmek üzere...
Tamer ŞAHİNER
Tamer.sahiner@bilgeadam.com

Raporlama Servisinin (Reporting Services) Sunucu Bilgilerini Web Servisi ile Sorgulama

Raporlama Servisinin (Reporting Services) Sunucu Bilgilerini Web Servisi ile Sorgulama

Reporting Services,(Raporlama servisi) sunucu bilgilerine XML Web Servisi üzerinden erişmemize imkan sağlar. Sunucu bilgilerine web servisi üzerinden erişmek için (SQL Server’ default instance olarak kurmuşsanız) http://localhost/ReportServer/ReportService.asmx?wsdl adresli web servisini kullanmamız gerekmektedir.

Şimdi Raporlama Servisi bilgilerine Web Servisi üzerinden erişmek için, Visual Studio 2005 içerisinden “Windows Application ” şablonunu seçin.




Oluşturduğumuz proje içerisine web servisini eklemek için “Project” menüsü içerisinden “Add Web Reference” komutunu verin.



“Add Web Reference” pencerenin “URL” isimli metin kutusuna http://localhost/ReportServer/ReportService.asmx değerini girin ve “GO” butonuna basın.




“Add Web Reference” penceresi üzerindeki “Web reference name” metin kutusuna “rsInfo” değerini girin ve “Add Reference” butonunu tıklayın. Böylece Web servisini projemize eklemiş olduk. Object Browser penceresi içerisinde eklemiş olduğumuz web servisi aşağıdaki gibi gözükecektir.




Şimdi proje içerisindeki formumuza, “btnGetItems” isminde bir Button, txtName isminde bir TextBox ve “lstResults” isminde bir ListBox ekleyin. Görüntü aşağıdaki gibi olacaktır





Imports RptSrvInfo.rsInfo
Public Class Form1
Private Sub btnGetItems_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetItems.Click
lstResults.Items.Clear()
'Raporlama servisinin Sunucu bilgilerine
'erişmek için web servisi örneği tanımladık
Dim myReportService As New ReportingService
'Reporting Service sunucusu üzerinde arama gerçekleştireğiz.
Dim condition As New SearchCondition
condition.Name = "Name"
condition.Value = txtName.Text
Dim mySearchConditions(0) As SearchCondition
mySearchConditions(0) = condition
myReportService.Credentials = _
System.Net.CredentialCache.DefaultCredentials
Dim myCatalogItems As CatalogItem()
myCatalogItems = myReportService.FindItems("/", _
Nothing, mySearchConditions)
'Raporlama sunucusu üzerinde bulunan elemanlar
'listbox içerisine yazdık.
For Each cItem As CatalogItem In _
myCatalogItems
lstResults.Items.Add(cItem.Path)
Next
End Sub
End Class



Projeyi çalıştırın. “btnGetItems” isimli butonu tıkladığınızda, Reporting Services içerisindeki tüm elemanlar aşağıdaki gibi listelenecektir.





Sonuç olarak Reporting Services’in web servisini kullanarak, sunucu üzerindeki bilgileri projelerimizde gösterebiliriz.
Başka bir makalede görüşmek üzere...
Tamer ŞAHİNER
Tamer.sahiner@bilgeadam.com

Reporting Services (Rapor Servisi) ile Parametrik Rapor Oluşturmak

Reporting Services (Rapor Servisi) ile Parametrik Rapor Oluşturmak
Reporting Services(Raporlama sevisi) ile SQL Sorguları ve Stored Procedure’leri kullanarak parametrik rapor oluşturabiliriz. Bu parametrik raporların parametre değerlerini çalışma zamanında alarak, rapor değerlerinin çalışma zamanında değişmesini sağlayabiliriz.
Bu makalemde AdventureWorks veritabanı içerisindeki personelin, adres bilgilerini şehirlerine göre getireceğim. Rapor içerisindeki City isimli TextBox içerisine girilen şehire göre müsterilerin adres bilgilerini rapor üzerinde göstereceğim.
Şimdi Visual Studio 2005 içerisinden “Report Server Project ” şablonunu seçin.



Oluşturduğumuz projenin “Solution Explorer” penceresi içerisindeki “Shared Data Sources” klasörü üzerinde farenin sağ butonunu tıklayın. Açılan kısayol menüsünden “Add New DataSource” menüsünü tıklayarak yeni bir Connection String oluşturalım. “Shared Data Source” penceresini aşağıdaki gibi ayarlayın. Eğer SQL Server’ default instance olarak kurmuşsanız, Connection string metin kutusuna “Data Source=localhost;Initial Catalog=AdventureWork” ifadesini yazın.

“Ok” butonunu tıklayarak, Shared Data Source penceresini kapatın. Şimdi raporumuzu oluşturalım. Projenin “Solution Explorer” penceresi içerisindeki “Reports” klasörü üzerinde farenin sağ butonunu tıklayın. . Açılan kısayol menüsünden “Add New Report” menüsünü tıklayarak “Report Wizard” sihirbazını kullanarak yeni bir rapor oluşturalım. “Next” butonunu tıklayarak bir sonraki adıma geçin

Açılan “Select the Data Source” penceresinden, az önce oluşturduğumuz ds isimli “Data Souce” seçerek bir sonraki adıma geçin.

Açılan “Desing the Query” penceresinin “Query String” penceresine aşağıdaki sorguyu yazın.
“SELECT Person.Contact.ContactID, Person.Contact.FirstName, Person.Contact.MiddleName, Person.Contact.LastName, Person.Address.AddressLine1,
Person.Address.AddressLine2, Person.Address.City
FROM Person.Contact INNER JOIN
HumanResources.Employee ON Person.Contact.ContactID = HumanResources.Employee.ContactID INNER JOIN
HumanResources.EmployeeAddress ON HumanResources.Employee.EmployeeID = HumanResources.EmployeeAddress.EmployeeID INNER JOIN
Person.Address ON HumanResources.EmployeeAddress.AddressID = Person.Address.AddressID
Where Person.Address.City = @City”


“Select the Report Type” penceresinden “Tabular” seçeneğini seçerek, “Next” butonunu tıklayın.
“Design the Table” başlıklı pencere içerisinden, “Available Fields” liste kutusundaki tüm alanları “Details” isimli liste kutusuna sürükleyin ve “Next” butonu tıklayarak bir sonraki adıma geçin.

“Choose the Table Style” penceresi içerisinden “Slate” isimli stili seçin ve bir sonraki adıma geçin.

“Completing the Wizard” penceresinden “Report name” metin kutusuna ReportEmployee ismini girdikten sonra, “Finish” butonunu tıklayarak sihirbazı sonlandıralım.

“Finish” butonunu tıklayarak “Report Wizard” sihirbazını sonlandıralım.
Projenin “Solution Explorer” penceresi içerisindeki Proje ismi üzerinde farenin sağ butonunu tıklayın. . Açılan kısayol menüsünden “Properties” menüsünü tıklayarak “Property Page ” penceresini açın. “Property Page” içerisinde “TargetServerURL” özelliğine (eğer SQL Server’ default instance olarak kurmuşsanız) http://localhost/ReportServer degerini yazın.
Oluşturduğumuz rapora Rapor Yöneticisi(Report Manager) üzerinden erişelim. Bunun için http://localhost/Reports adresine gitmeniz yeterli. Rapor Yöneticisi(Report Manager) üzerinden oluşturduğumuz rapora erişmek için “ReportParametrik” klasörünü tıklayın.

Oluşturduğumuz raporun Rapor Yöneticisi üzerindeki görüntüsü aşağıdaki gibi olacaktır.



Şimdi raporun üzerindeki “City” isimli metin kutusuna “Seattle” degerini yazın ve “View Report” butonu tıklayın. Sonuç aşağıdaki gibi olacaktır.

Başka bir makalede görüşmek üzere...
Tamer ŞAHİNER
Tamer.sahiner@bilgeadam.com
Reporing Services (Raporlama Servisi)

Reporting Services(Raporlama Servisi), Microsoftun Business Intelligence bakış acısıyla suduğu, sunucu tarfında çalışan servis bileşeninidir. Business Intelligence kavramı ham veriyi doğru bilgiye çevirme işlemidir. Raporlama Servisi, raporlara erişim sağlayan sistem(Rapor Sunucusu), rapor geliştirmek için araçlar(Rapor Tasarımcısı) ve merkezi rapor yönetimi (Rapor Yönetimi) sunar.

Raparlama Servisi ile rapor hazırlamak için yani Rapor Tasarımcısı bileşenini kullanabilmek için Visual Studio 2005 veya RDL (Report Definition Language) destekleyen bir üçüncü parti bileşen kullanmalısınız. Raporlama Servisi ADO .Net veri kaynaklarını destekler. Bu veri kaynaklarına OLE DB, Open Database Connectivity (ODBC) ve XMLA (XML for Analysis) sayılabilir.

Raporlama Servisi üzerinden rapor yayınlamak ve yönetmek için Web sunucuları kullanılır.
Rapor Sunucusu, raporlama işlemlerini yöneten, raporları yaratan, raporları değişik formatlara çeviren ve zamanlanmış raporları yöneten bileşendir. Raporlama servisi ile aşağıda belirtilen formaltlarda rapor çıktıları alınabilir.
  • Web formatı (HTML)
  • Yazdırma formatları (PDF, TIFF)
  • Veri Formatları (Microsoft Excel, XML, CSV)
Raporlama Servisi çeşitli farklı senaryolarda kullanabilirsiniz. Bunlar:
Şirket içi raporlama kullanılabilir. Örneğin şirketin finans raporları, şirketin finans departmanı çalışanlarına ve yöneticilere paylaşılabilir. Veya sirketin ürün raporları tüm çalışanlar ile paylaşılabilir.

Şirketler arası raporlamada kullanılabilir. Bu senaryonun kullanılabilmesi için şirketler arasında extranet(şirketler arası internet) yapısının olması gerekmektedir. Bu senaryo ile merkez firmanın ürün raporları, iş ortağı diğer firmalar ile paylaşılabilir.
Portallar ve uygulamalar içerisinde kullanılabilir. Örneğin CRM (customer
relations management) , iş veya üretim uygulamalarında raporlama bileşeni olarak kullanılabilir.
Reporting Services ile uygulama geliştirmek için Visual Studio 2005 içerisinden “Business Intelligence Projects” proje tipi seçin. Bu proje tipi seçildikten sonra “Report Server Project” veya “Report Server Project Wizard” şablonları kullanılarak uygulama geliştirebiirsiniz.
Şimdi “Report Server Project Wizard” şablonunu kullanarak SQL Server 2005’in örnek veritabanlarından “AdventureWorks” veritabanının Employee(Personel) bilgilerini çekelim.
Visial Studio 2005 içerisinden “Report Server Project Wizard” şablonunu seçin.




“Welcome to the Report Wizard“ başlıklı pencere içerisinde “Next” butonunu tıklayarak Rapor oluşturma işlemine başlayalım.

“Select the Data Source” başlıklı pencere içerisinden bağlanacağımız veritabanına göre

“Connection String” oluşturacağız. SQL Server 2005 bağlanmak için, “Type” açılan kutusu içerisinden “Microsoft SQL Server” seçeneğini seçin ve “Connection String” isimli metin kutusuna “Data Source=tamers\yukon;Initial Catalog=AdventureWorks” ifadesini yazın. (Data Source=Makina Adı, Initial Catalog=Veritabanı Adı). “Select the Data Source” başlıklı pencere içerisinde “Next” butonunu tıklayarak, bir sonraki pencereye geçin.




“Desing the Query” başlıklı pencerenin, “Query String” metin kutusuna “SELECT ContactID, FirstName, MiddleName, LastName, Title, EmailAddress, Phone FROM Person.Contact” sorgusunu yazın ve “Next” butonunu tıklayarak bir sonraki adıma geçin.




“Select the Report Type” içerisinden “Tabular” seçeneğini seçerek, “Next” butonunu tıklayın.

“Design the Table” başlıklı pencere içerisinden, “Available Fields” liste kutusundaki tüm alanları “Details” isimli liste kutusuna sürükleyin ve “Next” butonu tıklayarak bir sonraki adıma geçin.




“Choose the Table Style” penceresi içerisinden “Ocean” isimli stili seçin ve bir sonraki adıma geçin.

“Choose the Deployment Locations” penceresinden Rapor Sunucusunu (raporun yayınlacağı web sunucusunu), yayın klasörünü belirtin ve “Next” butonunu tıklayarak bir sonraki adıma geçin. Eğer SQL Server’ı default instance olarak kurmuşsanız Report Server metin kutusuna “http://localhost/ReportServer” yazın.


“Completing the Wizard” penceresinden “Report name” metin kutusuna rapor ismini girdikten sonra, “Finish” butonunu tıklayarak sihirbazı sonlandıralım.


“Finish” butonunu tıkladıktan sonra, projenizi çalıştırabilirsiniz.

Oluşturduğumuz raporlara intranet üzerinden erişmek, rapor oluşturmak, raporlama işlemlerini yönetmek veya raporları değişik formatlara çevirmek için Rapor Yöneticisi kullanılmalıdır. Bunun için http://localhost/Reports adresine gitmeniz yeterli. Eğer SQL Server’ı default instance olarak kurmuşsanız http://localhost/Reports adresine gitmeniz gerekmektedir. Rapor Yöneticisi(Report Manager) üzerinden oluşturduğumuz rapora erişmek için “ReportEmployee” klasörünü tıklayın.





Oluşturduğumuz raporun Rapor Yöneticisi üzerindeki görüntüsü aşağıdaki gibi olacaktır.







Başka bir makalede görüşmek üzere...
Tamer ŞAHİNER
Tamer.sahiner@bilgeadam.com

12 Ocak 2008 Cumartesi

Başlıyorum

Tüm seminer, makale ve yazılarımı artık blogumdan takip edebilirsiniz.