tag:blogger.com,1999:blog-65011078548189239292008-05-21T01:30:33.594-07:00Tamerstamersahinerhttp://www.blogger.com/profile/00797131681729869275noreply@blogger.comBlogger18125tag:blogger.com,1999:blog-6501107854818923929.post-22310041381869205172008-05-21T01:24:00.000-07:002008-05-21T01:30:33.626-07:00Kadir Has Üniversitesi Seminer06 Mayıs 2008 tarihinde Kadir Has Üniversitesinde "Web'in Geleceği ve E-Ticaret" adlı bir seminer verdim. Emeği geçen herkese teşekkür ederim.<br /><br /><div><div>Seminer resimleri aşağıdaki gibidir.</div><br /><div><a href="http://bp0.blogger.com/_ybjaTHsa6dA/SDPdCjsFPXI/AAAAAAAAAFk/BScDTLSTXys/s1600-h/en+yeni+resimlerr+103.jpg"><img id="BLOGGER_PHOTO_ID_5202745030552665458" style="CURSOR: hand" alt="" src="http://bp0.blogger.com/_ybjaTHsa6dA/SDPdCjsFPXI/AAAAAAAAAFk/BScDTLSTXys/s400/en+yeni+resimlerr+103.jpg" border="0" /></a></div><div> </div><div><a href="http://bp1.blogger.com/_ybjaTHsa6dA/SDPdgzsFPYI/AAAAAAAAAFs/HtgzUxopbzU/s1600-h/en+yeni+resimlerr+091.jpg"><img id="BLOGGER_PHOTO_ID_5202745550243708290" style="CURSOR: hand" alt="" src="http://bp1.blogger.com/_ybjaTHsa6dA/SDPdgzsFPYI/AAAAAAAAAFs/HtgzUxopbzU/s400/en+yeni+resimlerr+091.jpg" border="0" /></a></div><br /><div></div></div>tamersahinerhttp://www.blogger.com/profile/00797131681729869275noreply@blogger.comtag:blogger.com,1999:blog-6501107854818923929.post-91271833529891539052008-05-09T07:58:00.000-07:002008-05-09T08:08:38.547-07:00Maltepe Üniversitesi Seminer 202 Mayıs 2008 tarihinde Maltepe Üniversitesinde "Bir Yazılım Mucizesi : Google" adlı bir seminer verdim. Emeği geçen herkese teşekkür ederim.<br /><br />Seminer resimleri aşağıdaki gibidir.<br /><br /><a href="http://bp1.blogger.com/_ybjaTHsa6dA/SCRoIREug_I/AAAAAAAAAFc/yKPvRPSNAwo/s1600-h/maltepe_%C3%BCni_web_gelece%C4%9Fi_e_ticaret+006.jpg"><img id="BLOGGER_PHOTO_ID_5198394361123865586" style="CURSOR: hand" alt="" src="http://bp1.blogger.com/_ybjaTHsa6dA/SCRoIREug_I/AAAAAAAAAFc/yKPvRPSNAwo/s400/maltepe_%C3%BCni_web_gelece%C4%9Fi_e_ticaret+006.jpg" border="0" /></a><br /><div><div><div> </div><a href="http://bp3.blogger.com/_ybjaTHsa6dA/SCRn-xEug-I/AAAAAAAAAFU/AhG_4zDw0h0/s1600-h/maltepe_%C3%BCni_web_gelece%C4%9Fi_e_ticaret+004.jpg"><img id="BLOGGER_PHOTO_ID_5198394197915108322" style="CURSOR: hand" alt="" src="http://bp3.blogger.com/_ybjaTHsa6dA/SCRn-xEug-I/AAAAAAAAAFU/AhG_4zDw0h0/s400/maltepe_%C3%BCni_web_gelece%C4%9Fi_e_ticaret+004.jpg" border="0" /></a><br /><br /><div></div><a href="http://bp3.blogger.com/_ybjaTHsa6dA/SCRnvxEug9I/AAAAAAAAAFM/KXta1Kusdhs/s1600-h/maltepe_%C3%BCni_web_gelece%C4%9Fi_e_ticaret+001.jpg"><img id="BLOGGER_PHOTO_ID_5198393940217070546" style="CURSOR: hand" alt="" src="http://bp3.blogger.com/_ybjaTHsa6dA/SCRnvxEug9I/AAAAAAAAAFM/KXta1Kusdhs/s400/maltepe_%C3%BCni_web_gelece%C4%9Fi_e_ticaret+001.jpg" border="0" /></a><br /><br /><br /><div></div></div></div>tamersahinerhttp://www.blogger.com/profile/00797131681729869275noreply@blogger.comtag:blogger.com,1999:blog-6501107854818923929.post-85890173784257557862008-05-09T07:55:00.000-07:002008-05-09T07:58:38.577-07:00Maltepe Üniversitesi Seminer 130 Nisan 2008 tarihinde Maltepe Üniversitesinde "Web Geleceği ve E-Ticaret" adlı bir seminer verdim. Emeği geçen herkese teşekkür ederim.<br /><div></div><br /><div>Seminer resimleri aşağıdaki gibidir.</div><br /><div></div><br /><div><a href="http://bp3.blogger.com/_ybjaTHsa6dA/SCRmfxEug8I/AAAAAAAAAFE/7KS7zctsw3g/s1600-h/maltepe_%C3%BCni_web_gelece%C4%9Fi_e_ticaret+02.jpg"><img id="BLOGGER_PHOTO_ID_5198392565827535810" style="CURSOR: hand" alt="" src="http://bp3.blogger.com/_ybjaTHsa6dA/SCRmfxEug8I/AAAAAAAAAFE/7KS7zctsw3g/s400/maltepe_%C3%BCni_web_gelece%C4%9Fi_e_ticaret+02.jpg" border="0" /></a></div>tamersahinerhttp://www.blogger.com/profile/00797131681729869275noreply@blogger.comtag:blogger.com,1999:blog-6501107854818923929.post-36772859346501677842008-05-09T07:47:00.000-07:002008-05-09T07:53:55.701-07:00İstanbul Ticaret Üniversitesi Seminer25 Nisan 2008 tarihinde İstanbul Ticaret Üniversitesi Küçükyalı Kampüsünde "Web Geleceği ve E-Ticaret" adlı bir seminer verdim. Emeği geçen herkese teşekkür ederim. <div><div> </div><div>Seminer resimleri aşağıdaki gibidir.</div><br /><div><a href="http://bp3.blogger.com/_ybjaTHsa6dA/SCRlBxEug6I/AAAAAAAAAE0/n3Gr0LpEpSA/s1600-h/istanbul_ticaret_%C3%BCniversitesi_web_gelece%C4%9Fi_e_ticaret+01.jpg"><img id="BLOGGER_PHOTO_ID_5198390950919832482" style="CURSOR: hand" alt="" src="http://bp3.blogger.com/_ybjaTHsa6dA/SCRlBxEug6I/AAAAAAAAAE0/n3Gr0LpEpSA/s400/istanbul_ticaret_%C3%BCniversitesi_web_gelece%C4%9Fi_e_ticaret+01.jpg" border="0" /></a></div><div> </div><div><a href="http://bp3.blogger.com/_ybjaTHsa6dA/SCRlMxEug7I/AAAAAAAAAE8/Hqp8aewoPQs/s1600-h/istanbul_ticaret_%C3%BCniversitesi_web_gelece%C4%9Fi_e_ticaret_02.jpg"><img id="BLOGGER_PHOTO_ID_5198391139898393522" style="CURSOR: hand" alt="" src="http://bp3.blogger.com/_ybjaTHsa6dA/SCRlMxEug7I/AAAAAAAAAE8/Hqp8aewoPQs/s400/istanbul_ticaret_%C3%BCniversitesi_web_gelece%C4%9Fi_e_ticaret_02.jpg" border="0" /></a></div><br /><br /><div></div><br /><br /><div></div></div>tamersahinerhttp://www.blogger.com/profile/00797131681729869275noreply@blogger.comtag:blogger.com,1999:blog-6501107854818923929.post-24514231251178786162008-05-09T07:42:00.000-07:002008-05-09T07:47:28.549-07:00Trakya Üniversitesi Seminer22 Nisan 2008 tarihinde Trakya Üniversitesi Ahmet Karadeniz Yerleşkesinde "Web Geleceği ve E-Ticaret" ve "Yazılımda Kariyer" adlı 2 ayrı seminer verdim. Emeği geçen herkese teşekkür ederim.tamersahinerhttp://www.blogger.com/profile/00797131681729869275noreply@blogger.comtag:blogger.com,1999:blog-6501107854818923929.post-8755275116356913902008-04-12T01:23:00.000-07:002008-04-12T01:27:41.224-07:00Veritabanı Yöneticisi Tipleri<strong><span style="font-size:130%;">Veritabanı Yöneticisi Tipleri</span></strong><br />Veritabanı yöneticileri; veri, veritabanı ve veritabanı yönetim sisteminin tasarlanması, oluşturulması, bakımı ve izlenmesi gibi görevleri yerine getirir. En yaygın veritabanı yönetici tipleri asagıdaki gibidir.<br /><br /><strong>Sistem Veritabanı Yöneticisi</strong><br />Bir sistem veritabanı yöneticisi, tamamen veritabanının sistem kısmıyla yani teknik boyutuyla ilgilenir. Bir sistem veritabanı yöneticisin görevleri asagıdaki gibidir.<br /><br />· Yeni DBMS versiyonlarını kurmak ve bakımlarını saglamak<br />· Sistem parametrelerini ayarlamak ve belli bir değerde tutmak<br />· DBMS ile birlikte çalısan işletim sistemini, ağı ve transaction işlemlerini ayarlamak.<br />· DBMS için uygun veri depolayıcısını seçmek.<br />· DBMS’nin birlikte çalıştığı depolama aygıtlarını ve onların yazılımını yönetmek<br />· Veritabanı uygulamaları için gerekli olan herhangi bir diğer teknolojilerle aracı olmak.<br />· Üçüncü parti veritabanı araçlarını kurmak.<br /><br /><strong>Veritabanı Mimarı</strong><br />Veritabanı mimarları yeni bir veritabanının tasarlanması ve oluşturulması görevlerini yerine getirir. Veritabanı mimarı, sadece yeni tasarım ve geliştirme işine bakar. Veritabanı mimarı bakım, idare, ve kurulan veritabanları ve uygulamaların ayarlarına karışmaz. Veritabanı mimarı, yeni veya mevcut olan uygulamalar için yeni veritabanlarını tasarlar.<br /><br />Bir veritabanı mimarının görevleri asagıdaki gibidir.<br /><br />· Mantıksal veritabanı modelini olusturmak<br />· Mantıksal veritabanı modeli içerisinden fiziksel veri modeline dönüsümünü saglamak.<br />· Etkin veritabanları yaratmak için,verilerin belirli fiziksel karekterisliklerini belirlemek, indeksleri olusturmak ve veritabanı nesnelerini uygun fiziksel depolama aygıtlarında saklamak<br />· Verimli SQL ve uygun veritabanı tasarımını garanti etmek için gereksinim duyulan veri girişleri ve degişikliklerini analiz etmek<br />· Yeni veritabanları için yedek ve geri kurtarma stratejilerini belirlemek.<br /><br /><strong>Veritabanı Analisti<br /></strong>DBMS de yaygın olarak çalısan diger bir görevli veritabanı analisttir. Bu kişiler için uygun bir pozisyon yoktur. Bazen veritabanı analistleri yardımcı veritabanı yöneticileri olarak, bazen veritabanı mimari olarak, bazen de veri analistci olarak adlandırılır. Hatta bazen bazı şirketlerde veritabanı yöneticisi yerinede direkt kullanılır.<br /><br /><strong>Veri Modelcisi (Data Modeler)</strong><br />Veri modelleyicisi genellikle bir veri yöneticisin altında çalısan sorumludur. Bir veri modelcisinin görevleri asagıdaki gibidir<br /><br />· Bir veritabanı projesini olusturmak için gereksinimleri toplamak<br />· Veri gereksinimleri analiz etmek<br />· Mantıksal ve Kavramsal veri modelli projeler tasarlamak<br />· Ortak bir veri modelini yaratmak ve güncellestirmek<br /><br /><strong>Uygulama Veritabanı Yöneticisi</strong><br />Uygulama veritabanı yöneticisi, sistem veritabanı yöneticisinin karsıtıdır. Uygulama veritabanı yöneticisi, veritabanı tasarlanması üzerine ve belirli bir uygulama veya uygulamalar için gerekli olan veritabanlarının destek ve idaresine odaklanır. Bir uygulama veritabanı yöneticisi aynı zamanda veritabanı yönetim degişikliklerini yapabilir, sistem performansını ayarlayabilir veya yaygın kullanılan diger rolleri de yerine getirebilir. Uygulama veritabanı yönetisi, DBMS uygulamalarını ve veritabanı çevresi farklılıklarını her türlü özel ayarlarına kadar izler.<br /><br /><strong>Görevlere Odaklı Veritabanı Yöneticisi(Task-Oriented DBA)</strong><br />Büyük organizasyonlar bazen bir veritabanı yöneticisini belirgin bir görev üzerinde görevlendirir. Göreve odaklı veritabanı yöneticilerine bir örnek verecek olursak, organizasyonun veritabanlarının recoverylerini garanti altına almak için bir gününü bir yedek ve recovery adayan veritabanı yöneticisi.<br /><br />Organizasyonların çoğu, odaklanmanın bu yönünü karşılayamaz, ama şartları uygun olduğu zaman, göreve odaklı veritabanı yöneticilerine, çok önemli görevler için bilgili özel bir takımının altında toplayabilir.<br /><br /><em>Performans Analizcileri</em><br />Performans analizcileri özel bir göreve odaklı veritabanı yöneticileri olarak sayılabilir. Performans analizcileri diger veritabanı yöneticilerinin görevlerine ortak alabileceği gibi daha çok veritabanın performansıyla veya performansla ilgili problemlerle ugraşır.<br /><br />Bir performans analisti, ayrıntıları anlamalıdır, performans için SQL dan komutlar vermelidir ve performans için veritabanlarını tasarlayabilmelidir. Bir performans analisti, gerekli olduğu zaman DBMS ve sistem parametrelerinde uygun degişiklikleri yapabilecek ayrıntılı DBMS teknik bilgisine sahip olmalıdır.<br /><br />Performans analisti, sistem veritabanı yöneticisi olamaz. Fakat performans analisti, belirgin bir programın performansı üzerinde degisiklikleri kolaylastırmak için, uygulama gelistiricilerine yardım etmek için onların kullandığı dilde uygulama geliştirme bilgisine sahip olmalıdır.<br /><br /><strong>Veri Ambar Yöneticileri</strong><br />Genis veri analizi yapmak için veri depolarını kullanan organizasyonlar bu verileri izlemek ve depolama çevresine ihtiyaç duyar. Veri ambar yöneticileri, farklı veritabanları arasında OLTP ve veri ambarlama desteği verebilen yetenekli veritabanı yöneticileridir. Bir veri ambar yönetiminde aşağıdaki maddelerin olması gerekir.<br /><br />· Is zekası, sorgu ve raporlama araçları<br />· Sadece okunabilir erisimler için veritabanı tasarımı<br />· Veri ambarlama tasarımı (örnegin star schema)<br />· Veri ambarlama teknolojileri (örnegin OLAP)<br />· Veri transferi ve dönüştürme<br />· Veri niteliklerini çıkarma<br />· Veriyi yüklemek ve kaldırmak için uygun veri tipleri<br />· Özel Yazılımlar<br /><br /><strong>Üretim ve Test</strong><br />Kaliteli bir veritabanı yaratmak için iki çevre yaratılmalı ve desteklenmelidir. Bunlar üretim ve testtir.tamersahinerhttp://www.blogger.com/profile/00797131681729869275noreply@blogger.comtag:blogger.com,1999:blog-6501107854818923929.post-21956271041380044032008-04-10T06:48:00.001-07:002008-04-10T06:52:58.932-07:00Veritabanı Yöneticisinin Görevleri<strong>Veritabanı Yöneticisinin Görevleri</strong><br /><br />Veritabanı yöneticisinin rutin bir şekilde yerine getirmesi gereken çesitli görevler vardır. Bu görevlere veritabanı tasarımı, performansı izleme ve düzenleme, veritabanına erişilebilirlik, güvenlik, yedek alma ve geri yükleme, veri bütünlüğünün sağlama, veritabanın konumu değiştirme sayılabilir.<br /><br /><strong>Veritabanı Tasarımı<br /></strong>Veritabanı yöneticisi RDMS (İlişkisel Veritabanı Yönetim Sistemi) de veritabanı oluştururken, oluşturacağı veritabanının hem teorisini hemde belirgin uygulamasını bilmek zorundadır.<br />Veritabanı yöneticisi mantıksal veri modelini fiziksel veri modeline dönüştürebilir. Veritabanı yöneticisi istemci ve uygulama tarafından kullanılan veritabanını tasarlayabileme ve uygulayabilmelidir.<br /><br /><strong>Performansı İzleme ve Düzenleme<br /></strong><br />Performans, veritabanının ayarlarıyla veritabanından beklenenlerin karşılığını almakla ilgili bir durumu gösterir. Yani donanım, yazılım ve ayarlamalar açısından yetersiz bir sistemden, hız ve daha fazla kapasite beklemek yanlış olacaktır. Veritabanı performansını etkileyen 5 faktor vardır.<br /><br />Bunlar;<br /><a name="OLE_LINK2"></a><a name="OLE_LINK1">· Workload(İş Yükü)</a><br />· Throughput(Üretilen iş)<br />· Resources(Kaynaklar),<br />· Optimization(İyi hale getirme)<br />· Contention(Mücadele)<br />dır.<br /><br /><em>Workload(İş Yükü),</em> DBMS de tanımlı istekleri tanımlar. Workload; online transaction,<br />batch job, ad hoc query, data warehousing(veri ambarlama), analytical queries(analitik sorgular) ve herhangi bir zamanda sistem tarafından çalıstırılan komutları içerir. Workload gün gün, saat saat, dakika dakika hatta saniye saniye çok şiddetli dalgalanabilir. Bazen de periyodik olarak dalgalanabilir.<br /><br /><em>Throughput,</em> bilgisayar, donanım ve yazılımının toplam yeteneklerini belirler. Throughput, I/O hızı, CPU hızı, makinanın paralel verimliligi, sistem yazılımının ve işletim sisteminin etkinliğini içerir.<br /><br />Sistem bazında donanım ve yazılım araçları <em>resources(kaynaklar)</em> olarak bilinir. Örnek olarak veritabanı çekirdegi, boş disk alanı, önbellek denetleyicileri sayılabilir.<br /><br /><em>Optimization</em>, veriye etkin bir şekilde erişmek için sorgu maliyet formülleri ile veritabanı taleplerini analiz etme anlamına gelir. Bütün sistem tipleri optimization kullanabilir. Fakat ilişkisel sorgular DBMS’de birincil derede benzersiz oldugu için optimization benzersizdir. Yine de birçok faktör veritabanını en iyi sekilde kullanıcısını ulaştırmak için en verimli erişim<br />yolları yaratmaya ihtiyaç duyar. Örnek olarak SQL kodlama, veritabanı parametreleri, verimli bir sekilde programlama sayılabilir.<br /><br />Belirli kaynaklar üzerinde iş yükünün yüksek olduğu zamanlarda contention oluşur. Herhangi bir kaynağı birden çok bileşen veya kişi kullandığı anda <em>Contention</em> oluşur. Örnegin aynı veriye iki kişinin güncelleme yapmaya çalısması gibi. Contention artığı durumlarda workload artar.<br /><br />Performansı düzenleme ve birçok görev ve becerileri, veritabanlarında etkili bir şekilde yapabilmek için veritabanı yöneticileri gerekir. Bu beceriler uygun indeksleri oluşturmak, yeteri kadar tampon bellek oluşturmak, veritabanını ve uygulamaları izlemek, veritabanını yeniden düzenlemek olarak sayılabilir.<br /><br />Kullanılabilirlik(Availability)<br />Kullanılabilirlik(Availability) ilk bileşeni DBMS’yi yüksek tutmak ve çalıştırmaktır. DBMS’nin hizmet dışı kalmaması için otamatik uyarılar olusturmak ve sürekli izlemek gerekir.<br /><br />Bireysel veritabanlarının sürekli açık ve çalışır olması gerekir. Veritabanı yöneticisi karısıklıkları en aza indirger ve çakışmaların en az olmasını sağlar. Bir veritabanı yöneticisi, çakışmaları en aza indirmek için clustering(kümeleme) gibi teknolojileri kullanabilir.<br /><br /><strong>Veritabanı Güvenligi ve Yetkilendirilmesi</strong><br /><br />Veritabanı tasarlandıktan ve programlandıktan sonra kullanıcıların veritabanında ki veriye erişmesi ve degiştirmesi gerekir. Ama kullanıcıların uygun olmayan veya yasak olan veriye erişmemelidirler. Kullanıcılar sadece izni ve yetkisi oldugu veriye erişip onu kullanabilmelidirler. Işte veritabanı yöneticileri uygun olan veriye kullanıcıların erişmesini saglar.<br /><br />Veritabanı yöneticileri DBMS içerisinde güvenligi saglamak için, SQL(Structured<br />Query Language) içerisinden Grant, Deny, Revoke deyimlerini kullanır.<br /><br />Güvenlik birçok veritabanı gereksinimleri için gereklidir. Bunlar;<br />· Veritabanı objelerini oluşturmak için. Bunlar databases(veritabanı), tables(tablo),<br />views gibi.<br />· Veritabanı objelerini düzenlemek için.<br />· Sistem Kataloguna erismek için.<br />· Tablo içerindeki verilere erişmek ve degiştirmek için.<br />· Kullanıcı tanımlı veri tipleri ve fonksiyonlar yaratmak için.<br />· Stored Procedure çalıstırmak için.<br />· Veritabanını durdurmak veya çalıştırmak için.<br />· DBMS parametrelerini ayarlamak veya düzenlemek için.<br />· LOAD, RECOVER, REORG gibi veritabanı yardımcı komutlarını çalıstırır.<br /><br />Güvenlik bazı yollarla güçlendirilebilir. Örnegin olusturulmus bir view’e son kullanıcılar ve programcılar tarafından bir giriş blogu konulabilir.<br /><br />Ayrıca veritabanlarına harici(herhangi bir programlama dilinden veya uygulamalardan)<br />güvenlik metodları da uygulanabilir.<br />Yedek Alma ve Kurtarma(Geri Alma)<br />Veritabanı yöneticisi herhangi bir sorun karşısında kurtarma bilgisine sahip olmalıdır. Sorun sistem sorunları veya program hatası olabilir. Bugün hemen hemen bütün sorunlar uygulama hataları veya kullanıcı hataları olarak karşımıza çıkmaktadır.<br /><br />Yapılan, analist tahminleri, uygulama hatalarının 80%’inin, yazılım başarısızlıkları ve insan hatası yüzünden olduğunu gösterir. Veritabanı yöneticisi çıkan sorunlara en kısa zamanda müdahale edebilmelidir.<br /><br />Genellikle veri kurtarmanın ilk tipi, büyük bir kapatmadan dolayı oluşan varsayılan kurtarmadır(recover to current). Bu sonuç yapılan en son işlemin veya güncel işlemin başarıyla gerçekleşmemesinden kaynaklanabilir. Geri alımı tamamlanıncaya kadar uygulamalar kullanılmazlar.<br /><br />Diger bir kurtarma tipi Point-in-time recovery’dir. Point-in-time recovery genellikle uygulama düzeyi sorunlarla ugraşır. Bir Point-in-time geri alımını yapmak için, geleneksel teknikler belirgin bir Point-in-time oldugu sürece tüm iş yapmanın etkilerini kaldırır.<br /><br />Transaction recovery üçüncü tipteki kurtarmadır. Transaction recovery, arıza süresi ve veri kaybı durumlarında kullanılan kurtarma modelidir. Böylece transaction recovery belirli bir esnada belirli işlerinin etkilerinin, veritabanından kaldırılmadan gerçekleşeceği bir uygulamadır. Bu yüzden ki bazen uygulama kırıcı olarak da başvurulur.<br /><br />Geri alma’nın herhangi bir tipini hazırlamak için, Veritabanı Yöneticisi olarak verinin, yazılım, donanım, veya elle yapılan bir işlemde bir hata halinde kaybolmadığını garanti etmesi için stratejinin oldugu bir yedegi gelistirmeye ihtiyaç duyar. Bu strateji uygulanabilir bir işlem olarak(veritabanı için bir yedek dosya olarak kopyalar, / Geri alma planı günlügüne kaydeder) veritabanını dosyalarının kopyasını alır.<br /><br /><strong>Veri Bütünlüğü</strong><br /><br />Bir veritabanı tasarlarken veri zarar görmemesi ve bozulmaması için verinin dogru bir biçimde girilip saklanması gerekir. Veritabanı yöneticisin bu işlemi yerine getirmek için bütünlügü DBMS’nin kurallarıyla(rule) yerine getirir.<br /><br />Veri bütünlügünü, 3 bakış açısıyla saglayabiliriz. Bunlar fiziksel(physical), anlamsal(semantic), ve içsel(internal) olarak sayabiliriz. Fiziksel DBMS de veri tipleri ve alanları sayabiliriz. Veritabanı yöneticisi her bir tablonun her sütunu için uygun bir veri tipi seçer. Böylece o alan için uygun verinin girilmesi saglanır. Örnegin sütunun veri tipi integer olarak tanımlanmışsa, o sütuna sadece nümerik bilgiler girilmesi sağlanır. Kullanıcı metinsel veya nümerik olmayan bir bilgi girdiğinde veritabanı hata üretir. Çogu ilişkisel DBMS türleri asagıdaki constraint(kısıt) tiplerini destekler:<br /><br /><em>Referential constraint :</em> Belirli sütunlarla tablolar arasında ilişki kurmak için tanımlanır. Herhangi bir sütuna girilen verinin baska bir tablodaki diger bir sütunu etkilemesidir.<br /><br /><em>Unique constraint :</em> Bir tablo içerisinde varolan bir sütunun içerisine benzersiz verilerin girilmesini sağlar. Örnegin, Ögrenci adında bir tabloda Ögrenci No diye bir sütunumuz olsun. Ögrenci No sütunun Unique (benzersiz) olarak belirlediginizde aynı Ögrenci No nun girilmemesini sağlarsınız.<br /><br /><em>Check constraint :</em> Bir tablonun sütunlarında veya bir sütununda girilen bilgilerin kısıtlanmasını sağlar. Örnegin Ögrenci adında bir tabloda Cinsiyet diye bir sütunumuz olsun. Bu sütuna cinsiyeti sadece Bay veya Bayan olarak yazdırmak istiyorsak bunun için bir Check constraint tanımlamak gerekir.<br /><br />Anlamsal (semantic), kontrol olarak da tanımlanma olarak da diğerlerine göre daha zordur. Anlamsal (semantic) bütünlüğe örnek olarak veritabanındaki verinin kalitesini verebilirim. Veritabanında belirli olan fiziksel bütünlük yada kısıt tanımları herhangi bir veriyi sadece depolamak için yeterli degildir. Veri kalitesini garanti etmek yerleşimde olması için yordam ve pratik ihtiyacıdır. Örnegin, kayıtlı olan müşterinin 25%’inde yanlış bir adres veya telefon numarası içeren bir müşteri veritabanı, yetersiz kalitesiyle bir veritabanının bir örnegidir.<br /><br />Bütünlügün son yönü, iç DBMS oluşturur. DBMS iç bütünlüğünü, asağıdaki çözümlerle sağlar.<br /><br /><em>Index Tutarlılığı.</em> Bir index veritabanında ekstradan yer kaplayan ve veritabanı içerisindeki tabloların içerigini düzenli bir yapıda tutan yer göstericilerdir. Indexler, herhangi bir veriyi sorgulararken tüm tablonun içerigini taramaktansa gerekli verilerin taranmasını saglayarak performansı artırır.<br /><br /><em>Pointer Tutarlılığı</em>. Bazen büyük miktardaki çoklu nesneleri aynı fiziksel ortamda saklamayız. Bu yüzden büyük miktardaki bu verileri saklamak için Pointer’a ihtiyaç duyarız.<br /><br /><em>Backup Tutarlılığı.</em> Çogu DBMS ürünleri bazen recovery için etkin olarak kullanılamayan gereksiz veritabanı yedekleri alır. Bu senaryo bu eylemleri tanımak ve düzeltici hareketleri almak için gereklidir.tamersahinerhttp://www.blogger.com/profile/00797131681729869275noreply@blogger.comtag:blogger.com,1999:blog-6501107854818923929.post-8481399156714224302008-01-15T06:45:00.000-08:002008-01-15T07:30:04.660-08:00Veri, Veritabanı ve Sistem Yönetimi<strong>Veri, Veritabanı ve Sistem Yönetimi</strong><br />Ç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.<br /><br /><strong><em>Veri Yönetimi</em></strong><br />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.<br /><br />Veritabanı yöneticiside(DBA) veritabanını geliştirme, test etme ve işlere uygunluk açısından planlamak zorundadır.<br /><br />Veri yöneticisi verileri depolama, veritabanı yöneticisi DBMS ve veritabanının fiziksel<br />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.<br /><br />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.<br /><br /><strong><em>Veritabanı Yönetimi</em></strong><br />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.<br /><br /><a href="http://bp3.blogger.com/_ybjaTHsa6dA/R4zRKZ20L5I/AAAAAAAAAEk/Q2SCTYq7IIs/s1600-h/sekil1.jpg"><img id="BLOGGER_PHOTO_ID_5155725650102071186" style="CURSOR: hand" alt="" src="http://bp3.blogger.com/_ybjaTHsa6dA/R4zRKZ20L5I/AAAAAAAAAEk/Q2SCTYq7IIs/s400/sekil1.jpg" border="0" /></a><br /><strong><em></em></strong><br /><strong><em>Sistem Yönetimi</em></strong><br />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.<br /><br />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.<br /><br />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.<br /><br /><a href="http://bp0.blogger.com/_ybjaTHsa6dA/R4zRSp20L6I/AAAAAAAAAEs/tf7dsTjDa2o/s1600-h/sekil2.jpg"><img id="BLOGGER_PHOTO_ID_5155725791835991970" style="CURSOR: hand" alt="" src="http://bp0.blogger.com/_ybjaTHsa6dA/R4zRSp20L6I/AAAAAAAAAEs/tf7dsTjDa2o/s400/sekil2.jpg" border="0" /></a>tamersahinerhttp://www.blogger.com/profile/00797131681729869275noreply@blogger.comtag:blogger.com,1999:blog-6501107854818923929.post-45496009008450199892008-01-15T02:21:00.000-08:002008-01-15T02:23:51.869-08:00Veritabanı Yönetiminin Kuralları<strong>Veritabanı Yönetiminin Kuralları</strong><br /><br />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.<br /><br />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.<br /><p><a href="http://bp2.blogger.com/_ybjaTHsa6dA/R4yJkJ20L4I/AAAAAAAAAEc/IG3akXO2Wgg/s1600-h/resim.jpg"><img id="BLOGGER_PHOTO_ID_5155646927646502786" style="CURSOR: hand" alt="" src="http://bp2.blogger.com/_ybjaTHsa6dA/R4yJkJ20L4I/AAAAAAAAAEc/IG3akXO2Wgg/s400/resim.jpg" border="0" /></a><br /><br />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.<br /><br />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.<br /><br />Bundan sonra DBA’nın yapması gereken faaliyete geçen veritabanın rutin yönetimsel görevlerini yerine getirmektir. Bu görevler;<br /><br />· Performansı İzleme<br />· Yedek Alma ve Geri Yükleme<br />· Ayarlamalar<br />· Izin Yönetimleri</p><p>olarak sayılabilir.<br /><br />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.</p>tamersahinerhttp://www.blogger.com/profile/00797131681729869275noreply@blogger.comtag:blogger.com,1999:blog-6501107854818923929.post-4513876639599328012008-01-14T08:46:00.001-08:002008-01-14T08:46:38.463-08:00Database Management System (DBMS) nedir?<strong>Database Management System (DBMS) nedir?<br /></strong><br />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.<br />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.<br /><br />DBMS’inin görevleri ;<br />· Veritabanındaki ilişkileri yönetme,<br />· Datanın dogru bir sekilde kaydedilmesi,<br />· Bütün durumlarda hatta “system failure” durumunda bile datayı kurtarmak olarak özetleyebilirim.<br /><br />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.<br />Ş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.tamersahinerhttp://www.blogger.com/profile/00797131681729869275noreply@blogger.comtag:blogger.com,1999:blog-6501107854818923929.post-20134868940462127002008-01-14T06:38:00.000-08:002008-01-14T06:48:29.189-08:00Native HTTP Desteği<strong>Native HTTP Desteği</strong><br /><br />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.<br /><br />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.<br /><br /><a href="http://bp0.blogger.com/_ybjaTHsa6dA/R4t0J520L0I/AAAAAAAAAD8/JzRdhqDLnjA/s1600-h/1000000471_image001.jpg"><img id="BLOGGER_PHOTO_ID_5155341911954042690" style="CURSOR: hand" alt="" src="http://bp0.blogger.com/_ybjaTHsa6dA/R4t0J520L0I/AAAAAAAAAD8/JzRdhqDLnjA/s400/1000000471_image001.jpg" border="0" /></a><br /><br />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.<br /><br />Native HTTP desteğinin XML Web Servislerinden en önemli farkı, IIS(Internet Information Services) ihtiyaç duymamasıdır.<br /><br />Windows HTTP uygulama arayüzü olarak adlandırılan HTTP.sys, istemci makinadan aldığı HTTP isteklerini SQL Server’a iletir.<br /><br />SQL Server DDL(Data Definition Language) deyimlerini, uygulamalara HTTP Endpoint’ler ile paylaştırır.<br /><br />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.<br /><br />CREATE ENDPOINT deyiminin kullanımı aşağıdaki gibidir.<br /><br /><span style="color:#3333ff;">CREATE ENDPOINT endPointName [AUTHORIZATION login]<br />STATE = { STARTED STOPPED DISABLED }<br />AS { TCP HTTP } (<br />PATH = 'url'<br />, PORTS = ({CLEAR SSL} [,... n])<br />[ SITE = {'*' '+' 'webSite' },]<br />[, CLEAR_PORT = clearPort ]<br />[, SSL_PORT = SSLPort ]<br />, AUTHENTICATION =({BASIC DIGEST INTEGRATED} [,...n])<br />[, AUTH_REALM = { 'realm' NONE } ]<br />[, DEFAULT_LOGON_DOMAIN = {'domain' NONE } ]<br />[, RESTRICT_IP = { NONE ALL } ]<br />[, COMPRESSION = { ENABLED DISABLED } ]<br />[,EXCEPT_IP = ({ <4-part-ip> <4-part-ip>:<mask> } [,...n])<br />)<br /></span><br />Şimdi CREATE ENDPOINT deyiminin parametrelerini açıklayalım.<br /><br />STATE = { STARTED STOPPED DISABLED }<br />EndPointlerin oluşturulduğu zamandaki durum bilgisini verir. Varsayılan değer STOPPED dır.<br /><br />AS { TCP HTTP }<br />Kullanılacak protokol bilgisini verir.<br /><br />PATH = 'url'<br />EndPoint’in path bilgisini tanımlar.<br /><br />PORTS = ({CLEAR SSL} [,... n])<br />Dinleyici port bilgisini belirtir. Eğer CLEAR olarak tanımlanırsa gelen mesajlar HTTP, SSL tanımlanmış ise HTTPS olmalıdır.<br /><br />[ SITE = {'*' '+' 'webSite' },]<br />Host edilen bilgisayarın adını belirtir.<br /><br />[, SSL_PORT = SSLPort ]<br />Port bilgisi SSL olarak belirtilmiş ise, belirtilen SSL portunun numarasını verir. Varsayılan port numarası 443 dır.<br /><br />AUTHENTICATION =({BASIC DIGEST INTEGRATED} [,...n])<br />Kullanılacak kimlik doğrulama bilgisini verir.<br /><br />DEFAULT_LOGON_DOMAIN = {'domain' NONE } ]<br />Kimlik doğrulama tipi BASIC seçilmiş ise varsayılan domain bilgisini belirtir. Varsayılan değer NONE dır.<br /><br />Ş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.<br /><br /><span style="color:#3333ff;">Use Master<br />GO<br />Create Database Adres<br />Go<br />Use Adres<br />Go<br />Create Table Kisi<br />(<br />ID int identity(1,1) Not Null,<br />Ad varchar(25) Not Null,<br />Soyad varchar(25) Not Null,<br />Adres varchar(60) Null<br />)<br />Go<br />Insert Into Kisi values('Tamer','ŞAHİNER','Bakırköy')<br />Insert Into Kisi values('Engin','ÖREN','Bakırköy')<br />Insert Into Kisi values('Yalçın','UZUN','Beşiktaş')<br />Insert Into Kisi values('Murat','HAKSAL','Bakırköy')<br />Go<br />CREATE PROC spKisi<br />AS<br />SELECT * FROM dbo.Kisi<br />GO<br /></span><br /><br />Oluşturduğumuz “spKisi” isimli stored procedure’ü CREATE ENDPOINT ile IIS kullanmadan Web Servis olarak dış ortama aktaralım.<br /><br /><span style="color:#3333ff;">CREATE ENDPOINT sql_Adres<br />STATE = STARTED<br />AS HTTP(<br />PATH = '/Adres/Kisi',<br />AUTHENTICATION = (INTEGRATED),<br />PORTS = ( CLEAR ))<br />FOR SOAP(<br />WEBMETHOD 'spKisi'<br />(name='Adres.dbo.spKisi',<br />FORMAT=ROWSETS_ONLY),<br />WSDL = DEFAULT,<br />DATABASE = 'Adres',<br />NAMESPACE = 'http://localhost/Adres/'<br />)<br />GO<br /></span><br />Oluşturduğumuz web servisine <a href="http://localhost/Adres/Kisi?WSDL">http://localhost/Adres/Kisi?WSDL</a> adresinden erişebilirsiniz.<br /><br />Şimdi bu web servisine oluşturacağımız yeni bir Windows Application ile erişelim.<br /><br />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.<br /><br />Açılan “Add Web Reference” penceresinin URL isimli metin kutusuna <a href="http://localhost/Adres/Kisi?WSDL">http://localhost/Adres/Kisi?WSDL</a> değerini, Web reference name isimli metin kutusuna “AdresWebServis” değerini yazın ve “Add Reference” butonunu tıklayın.<br /><br /><a href="http://bp3.blogger.com/_ybjaTHsa6dA/R4t1Gp20L1I/AAAAAAAAAEE/sSYsBE6w9Ow/s1600-h/1000000471_image003.jpg"><img id="BLOGGER_PHOTO_ID_5155342955631095634" style="CURSOR: hand" alt="" src="http://bp3.blogger.com/_ybjaTHsa6dA/R4t1Gp20L1I/AAAAAAAAAEE/sSYsBE6w9Ow/s400/1000000471_image003.jpg" border="0" /></a><br /><br /><br /><br />Form1 nesnesinin üzerine btnListele isimli bir Button ve lstKisi isimli ListBox ekleyin. Formun görüntüsü aşağıdaki gibi olacaktır.<br /><br /><a href="http://bp1.blogger.com/_ybjaTHsa6dA/R4t1RJ20L2I/AAAAAAAAAEM/IjcQ7v1g0AE/s1600-h/1000000471_image004.jpg"><img id="BLOGGER_PHOTO_ID_5155343136019722082" style="CURSOR: hand" alt="" src="http://bp1.blogger.com/_ybjaTHsa6dA/R4t1RJ20L2I/AAAAAAAAAEM/IjcQ7v1g0AE/s400/1000000471_image004.jpg" border="0" /></a><br /><br /><br /><br />btnListele butonunun Click olayına aşağıdaki kodu ekleyin.<br /><br /><span style="color:#3333ff;">Private Sub btnListele_Click(ByVal sender As System.Object, _<br />ByVal e As System.EventArgs) Handles btnListele.Click<br />Dim proxy As New AdresWebServis.sql_Adres<br />proxy.Credentials = _<br />System.Net.CredentialCache.DefaultCredentials<br />Dim ds As System.Data.DataSet = proxy.Adres<br />For Each r As System.Data.DataRow In ds.Tables(0).Rows<br />lstKisi.Items.Add(r("ad").ToString() &amp; " " &amp; _<br />r("soyad").ToString())<br />Next<br />End Sub<br /></span><br />Sonuç aşağıdaki gibi olacaktır.<br /><br /><a href="http://bp2.blogger.com/_ybjaTHsa6dA/R4t1fZ20L3I/AAAAAAAAAEU/-GuzDKBjCYE/s1600-h/1000000471_image005.jpg"><img id="BLOGGER_PHOTO_ID_5155343380832857970" style="CURSOR: hand" alt="" src="http://bp2.blogger.com/_ybjaTHsa6dA/R4t1fZ20L3I/AAAAAAAAAEU/-GuzDKBjCYE/s400/1000000471_image005.jpg" border="0" /></a><br /><br />Başka bir makalede görüşmek üzere...<br />Tamer ŞAHİNER<br /><a href="mailto:Tamer.sahiner@bilgeadam.com">Tamer.sahiner@bilgeadam.com</a>tamersahinerhttp://www.blogger.com/profile/00797131681729869275noreply@blogger.comtag:blogger.com,1999:blog-6501107854818923929.post-37207958329325095202008-01-14T06:22:00.000-08:002008-01-14T06:37:15.028-08:00SQL Server 2005 içerisinde Managed Code Kullanmak<strong>SQL Server 2005 içerisinde Managed Code Kullanmak</strong><br /><br /><div><div>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.</div><br /><div></div><div>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.<br />Managed code, .Net Framework’ün temel sınıf kütüphanelerini (base class library) kullanır.<br />Managed code, CPU’nun daha etkin kullanılmasını sağlar. </div><div> </div><div>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.</div><br /><div>Bu makalemde Managed code ile user-defined function yazarak SQL Server 2005 için assembly oluşturacağım.</div><div> </div><div><a href="http://bp1.blogger.com/_ybjaTHsa6dA/R4tw0J20LuI/AAAAAAAAADM/m5nsjmVg9QM/s1600-h/1000000352_image001.jpg"><img id="BLOGGER_PHOTO_ID_5155338239757004514" style="CURSOR: hand" alt="" src="http://bp1.blogger.com/_ybjaTHsa6dA/R4tw0J20LuI/AAAAAAAAADM/m5nsjmVg9QM/s400/1000000352_image001.jpg" border="0" /></a></div><div> </div><div>Projeyi oluşturduktan sonra, “Add New Reference” butonunu tıklayarak SQL Server 2005’e bağlanın.</div><br /><div><a href="http://bp2.blogger.com/_ybjaTHsa6dA/R4txGZ20LvI/AAAAAAAAADU/HZnWE1S2BNU/s1600-h/1000000352_image002.jpg"><img id="BLOGGER_PHOTO_ID_5155338553289617138" style="CURSOR: hand" alt="" src="http://bp2.blogger.com/_ybjaTHsa6dA/R4txGZ20LvI/AAAAAAAAADU/HZnWE1S2BNU/s400/1000000352_image002.jpg" border="0" /></a></div><br /><div></div><div>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.</div><div> </div><div><a href="http://bp2.blogger.com/_ybjaTHsa6dA/R4txUZ20LwI/AAAAAAAAADc/WmyQxLFUjLw/s1600-h/1000000352_image003.jpg"><img id="BLOGGER_PHOTO_ID_5155338793807785730" style="CURSOR: hand" alt="" src="http://bp2.blogger.com/_ybjaTHsa6dA/R4txUZ20LwI/AAAAAAAAADc/WmyQxLFUjLw/s400/1000000352_image003.jpg" border="0" /></a><br /></div><br /><div>“AddDatabaseReference” penceresinden en son eklediğimiz veritabanını(connection string) seçin.<br /></div><div><a href="http://bp1.blogger.com/_ybjaTHsa6dA/R4txsJ20LxI/AAAAAAAAADk/1Izfe4yN-8U/s1600-h/1000000352_image004.jpg"><img id="BLOGGER_PHOTO_ID_5155339201829678866" style="CURSOR: hand" alt="" src="http://bp1.blogger.com/_ybjaTHsa6dA/R4txsJ20LxI/AAAAAAAAADk/1Izfe4yN-8U/s400/1000000352_image004.jpg" border="0" /></a><br /></div><div>Aşağıdaki mesaj kutusuna üzerinde, “No” butonunu tıklayarak projeyi oluşturun.</div><div> </div><div><a href="http://bp0.blogger.com/_ybjaTHsa6dA/R4tyA520LyI/AAAAAAAAADs/dkP_76WZluI/s1600-h/1000000352_image005.jpg"><img id="BLOGGER_PHOTO_ID_5155339558311964450" style="CURSOR: hand" alt="" src="http://bp0.blogger.com/_ybjaTHsa6dA/R4tyA520LyI/AAAAAAAAADs/dkP_76WZluI/s400/1000000352_image005.jpg" border="0" /></a><br /></div><br /><div>Projeyi oluşturduktan sonra, Project menüsünden “Add User-Defined Function” menüsünü tıklayın.</div><br /><div></div><div>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.<br />Eklediğimiz sınıfın(class) kod bölümüne aşağıda kodu ekleyin</div><div><span style="color:#3333ff;"><?XML:NAMESPACE PREFIX = SqlFunction(Name /><sqlfunction(name:="getlongdate")></sqlfunction(name:="getlongdate")></span> </div><div><span style="color:#3333ff;"><sqlfunction(name:="getlongdate")><sqlfunction(name:="getlongdate")> _</sqlfunction(name:="getlongdate")></span></div><div><span style="color:#3333ff;"><sqlfunction(name:="getlongdate")>Public Shared Function GetLongDate _<br />(ByVal DateVal As SqlDateTime) As SqlString<br />Return DateVal.Value.ToLongDateString()<br />End Function</span></div><br /><div>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.</div><br /><div></div><div>Eklediğimiz user-defined function’ı görmek için SQL Server Managed Studio’u açın.<br /></div><div>Eklediğimiz user-defined function aşağıdaki gibi gözükecektir.</div><br /><div></div><a href="http://bp2.blogger.com/_ybjaTHsa6dA/R4tywZ20LzI/AAAAAAAAAD0/X7O1y6PvmWk/s1600-h/1000000352_image008.jpg"><img id="BLOGGER_PHOTO_ID_5155340374355750706" style="CURSOR: hand" alt="" src="http://bp2.blogger.com/_ybjaTHsa6dA/R4tywZ20LzI/AAAAAAAAAD0/X7O1y6PvmWk/s400/1000000352_image008.jpg" border="0" /></a><br /><div></div><br /><div>Fonksiyonu çalıştırmak için yeni bir sorgu(New Query) ekleyin ve aşağıdaki kodları yazın.</div><div><br /><span style="color:#3333ff;">exec sp_configure 'clr enabled', 1<br />GO<br />RECONFIGURE<br />GO<br />USE AdventureWorks<br />SELECT dbo.GetLongDate('01/01/2006')</span></div><span style="color:#3333ff;"><div><br /></span>SQL Server 2005 içerisinde varsayılan olarak Net Framework pasifdir. Aktif hale getirmek için “sp_configure” stored procedure kullanılır.</div><div><br />Bu konu ile ilgili “SQL Server 2005 ve Net CLR” başlıklı makalemi de okuyabilirsiniz.<br />Başka bir makalede görüşmek üzere...</div><div><br />Tamer ŞAHİNER<br /><a href="mailto:Tamer.sahiner@bilgeadam.com">Tamer.sahiner@bilgeadam.com</a></div></div></sqlfunction(name:="getlongdate")><br /><sqlfunction(name:="getlongdate")></sqlfunction(name:="getlongdate")>tamersahinerhttp://www.blogger.com/profile/00797131681729869275noreply@blogger.comtag:blogger.com,1999:blog-6501107854818923929.post-50923687818518094022008-01-14T06:17:00.000-08:002008-01-14T06:21:59.266-08:00SQL Server 2005 ve Net CLR<strong>SQL Server 2005 ve Net CLR</strong><br /><br />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.<br /><br />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.<br /><br />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.<br />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.<br /><br />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.<br /><br />SQL Server 2005’e .NET Assembly’lerini ekleyebilir ve host edebiiriz.<br />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.<br /><br />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.<br /><br />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.<br />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.<br />Managed code, .Net Framework’ün temel sınıf kütüphanelerini (base class library) kullanır.<br />Managed code, CPU’nun daha etkin kullanılmasını sağlar.<br /><br />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.<br /><br />ASSEMBLY oluşturmak için CREATE ASSEMBLY ifadesini kullanırız. CREATE ASSEMBLY ifadesinin syntax yapısı aşağıdaki gibidir.<br /><br /><span style="color:#3333ff;">CREATE ASSEMBLY <assembly><br />FROM <assembly></span><br /><br />Aşağıdaki örnekte ‘C:\mcTest.dll’ adresindeki assembly dosyası SQL Server 2005’e Test ismi ile kaydedilmiştir.<br /><br /><span style="color:#3333ff;">CREATE ASSEMBLY Test<br />FROM ‘C:\mcTest.dll’</span><br /><span style="color:#3333ff;"><br /></span>“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.<br />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.<br /></span><br />SQL Server üzerinde kaydedilmiş tüm assembly dosyaları, aşağıdaki sorgu ile görebilirsiniz.<br /><br /><span style="color:#3333ff;">SELECT * FROM sys.assemblies</span><br /><br />SQL Server 2005 assembly dosyaları için üç güvenlik modu vardır. Bunlar SAFE, EXTERNAL ACCESS, UNSAFE dir.<br /><br />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.<br />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.<br />UNSAFE : Bu güvenlik modelinde hiç bir kısıtlama yoktur.<br /><br /><span style="color:#3333ff;">CREATE ASSEMBLY Test<br />FROM ‘C:\mcTest.dll’<br />WITH PERMISSION_SET=SAFE<br />CREATE ASSEMBLY Test<br />FROM ‘C:\mcTest.dll’<br />WITH PERMISSION_SET= EXTERNAL_ACCESS<br />CREATE ASSEMBLY Test<br />FROM ‘C:\mcTest.dll’<br />WITH PERMISSION_SET=UNSAFE</span><br /><br />Kaydedilen bir assembly dosyayı SQL Server veritabanından silmek için DROP ASSEMBLY ifadesi kullanılır.<br /><br /><span style="color:#3333ff;">DROP ASSEMBLY <assembly></span><br /><br />Aşağıdaki örnekte DROP ASSEMBLY ifadesinin kullanımı gösterilmektedir.<br /><br /><span style="color:#3333ff;">DROP ASSEMBLY Test</span><br /><br />Eğer assembly ile ilgili veritabanı nesneleri varsa, assembly’i silmeden önce bu nesneleri silmeliyiz.<br /><br />Bu konu ile ilgili "Managed Code Kullanmak” başlıklı makalemi de okuyabilirsiniz.<br /><br />Başka bir makalede görüşmek üzere...<br />Tamer ŞAHİNER<br />Tamer.sahiner@bilgeadam.comtamersahinerhttp://www.blogger.com/profile/00797131681729869275noreply@blogger.comtag:blogger.com,1999:blog-6501107854818923929.post-2938915219081876582008-01-14T06:05:00.000-08:002008-01-14T06:13:47.079-08:00SMO(SQL Management Object)<strong>SMO(SQL Management Object)</strong><br /><div><br /></div><div>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. </div><br /><div>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.</div><br /><div>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.</div><br /><div><a href="http://bp2.blogger.com/_ybjaTHsa6dA/R4tspZ20LrI/AAAAAAAAAC0/--aTRT-BqDU/s1600-h/1000000351_image001.jpg"><img id="BLOGGER_PHOTO_ID_5155333657026899634" style="CURSOR: hand" alt="" src="http://bp2.blogger.com/_ybjaTHsa6dA/R4tspZ20LrI/AAAAAAAAAC0/--aTRT-BqDU/s400/1000000351_image001.jpg" border="0" /></a><br /></div><br /><div></div><br /><div>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. </div><div> </div><div>Projenin kod satırına aşağıdaki kodları import edin.</div><br /><div><span style="color:#3333ff;">Imports Microsoft.SqlServer.Management.Smo<br />Imports Microsoft.SqlServer.Management.Common</span></div><br /><div>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.</div><br /><div><a href="http://bp3.blogger.com/_ybjaTHsa6dA/R4ts7p20LsI/AAAAAAAAAC8/2nhPDli5vLw/s1600-h/1000000351_image002.jpg"><img id="BLOGGER_PHOTO_ID_5155333970559512258" style="CURSOR: hand" alt="" src="http://bp3.blogger.com/_ybjaTHsa6dA/R4ts7p20LsI/AAAAAAAAAC8/2nhPDli5vLw/s400/1000000351_image002.jpg" border="0" /></a><br /></div><br /><div></div><div>Projenin Declaritions tanımlama bloğuna aşağıdaki tanımlayı yapın. Bu kod ile yeni bir Server nesnesi tanımlıyoruz.</div><div><span style="color:#3333ff;"></span> </div><div><span style="color:#3333ff;">Dim myServer As New Server()</span><br /></div><div>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.</div><br /><div></div><div><span style="color:#3366ff;"><span style="color:#3333ff;">Dim conn As ServerConnection = myServer.ConnectionContext<br />conn.ServerInstance = "tamers\Seminer"<br />conn.Connect()</span></span></div><div> </div><div>btnConnectionInfo butonunun click olayına aşağıdaki kodu ekleyin. Bu kod ile Server nesnesisinin özelliklerini TextBox nesnelerinin içerisine yazıyoruz.</div><div><span style="color:#3333ff;"></span> </div><div><span style="color:#3333ff;">txtEdition.Text = myServer.Information.Edition<br />txtLanguage.Text = myServer.Information.Language<br />txtOSVersion.Text = myServer.Information.OSVersion<br />txtPlatform.Text = myServer.Information.Platform<br />txtProduct.Text = myServer.Information.Product<br />txtVersion.Text = myServer.Information.VersionString</span></div><br /><div>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.</div><br /><div></div><a href="http://bp1.blogger.com/_ybjaTHsa6dA/R4tthJ20LtI/AAAAAAAAADE/SrXGoZzjDpQ/s1600-h/1000000351_image003.jpg"><img id="BLOGGER_PHOTO_ID_5155334614804606674" style="CURSOR: hand" alt="" src="http://bp1.blogger.com/_ybjaTHsa6dA/R4tthJ20LtI/AAAAAAAAADE/SrXGoZzjDpQ/s400/1000000351_image003.jpg" border="0" /></a><br /><div> </div><div>ListBox nesnesinin ismini lstDatabases, TextBox nesnesinin ismini txtNewDatabase, butonların ismini ise sırasıyla btnCreateDb, btnBackup ve btnDatabaseList olarak değiştirin.<br />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.</div><div><br /><span style="color:#3333ff;">lstDatabases.Items.Clear()<br />For i As Integer = 0 To myServer.Databases.Count - 1<br />lstDatabases.Items.Add(myServer.Databases(i).Name)<br />Next</span></div><div><br />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.</div><div><br /><span style="color:#3333ff;">If txtNewDatabase.Text <> "" Then<br />Dim newDb As Database = New Database(myServer, txtNewDatabase.Text)<br />newDb.Create()<br />End If</span></div><div><br />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.</div><div><br /><span style="color:#3333ff;">If lstDatabases.SelectedIndex <> -1 Then<br />Dim dbName As String = lstDatabases.SelectedItem.ToString<br />Dim MyBackup As New Backup<br />MyBackup.Action = BackupActionType.Database<br />MyBackup.BackupSetName = dbName &amp; "Backup"<br />MyBackup.Database = dbName<br />MyBackup.Devices.AddDevice("C:\" &amp; dbName.ToString &amp; ".bak", DeviceType.File)<br />MyBackup.SqlBackup(myServer)<br />MessageBox.Show(dbName &amp; " backup'ı alınmıştır.")<br />End If</span></div><div><br />Başka bir makalede görüşmek üzere...<br />Tamer ŞAHİNER<br /><a href="mailto:Tamer.sahiner@bilgeadam.com">Tamer.sahiner@bilgeadam.com</a></div><div> </div>tamersahinerhttp://www.blogger.com/profile/00797131681729869275noreply@blogger.comtag:blogger.com,1999:blog-6501107854818923929.post-37585917680071397842008-01-14T05:28:00.000-08:002008-01-14T05:53:15.473-08:00Raporlama Servisinin (Reporting Services) Sunucu Bilgilerini Web Servisi ile Sorgulama<strong>Raporlama Servisinin (Reporting Services) Sunucu Bilgilerini Web Servisi ile Sorgulama</strong><br /><br />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) <a href="http://localhost/ReportServer/ReportService.asmx?wsdl">http://localhost/ReportServer/ReportService.asmx?wsdl</a> adresli web servisini kullanmamız gerekmektedir.<br /><br />Şimdi Raporlama Servisi bilgilerine Web Servisi üzerinden erişmek için, Visual Studio 2005 içerisinden “Windows Application ” şablonunu seçin.<br /><br /><a href="http://bp0.blogger.com/_ybjaTHsa6dA/R4tkW520LlI/AAAAAAAAACE/S_ZpkyjiCbE/s1600-h/1000000357_image001.jpg"><img id="BLOGGER_PHOTO_ID_5155324543106297426" style="CURSOR: hand" alt="" src="http://bp0.blogger.com/_ybjaTHsa6dA/R4tkW520LlI/AAAAAAAAACE/S_ZpkyjiCbE/s400/1000000357_image001.jpg" border="0" /></a><br /><br /><br />Oluşturduğumuz proje içerisine web servisini eklemek için “Project” menüsü içerisinden “Add Web Reference” komutunu verin.<br /><br /><a href="http://bp2.blogger.com/_ybjaTHsa6dA/R4tkpZ20LmI/AAAAAAAAACM/rMNQybysiXs/s1600-h/1000000357_image002.jpg"><img id="BLOGGER_PHOTO_ID_5155324860933877346" style="CURSOR: hand" alt="" src="http://bp2.blogger.com/_ybjaTHsa6dA/R4tkpZ20LmI/AAAAAAAAACM/rMNQybysiXs/s400/1000000357_image002.jpg" border="0" /></a><br /><br />“Add Web Reference” pencerenin “URL” isimli metin kutusuna <a href="http://localhost/ReportServer/ReportService.asmx">http://localhost/ReportServer/ReportService.asmx</a> değerini girin ve “GO” butonuna basın.<br /><br /><a href="http://bp2.blogger.com/_ybjaTHsa6dA/R4tk9Z20LnI/AAAAAAAAACU/p7JNU1YjNZ4/s1600-h/1000000357_image003.jpg"><img id="BLOGGER_PHOTO_ID_5155325204531261042" style="CURSOR: hand" alt="" src="http://bp2.blogger.com/_ybjaTHsa6dA/R4tk9Z20LnI/AAAAAAAAACU/p7JNU1YjNZ4/s400/1000000357_image003.jpg" border="0" /></a><br /><br /><br />“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.<br /><br /><a href="http://bp0.blogger.com/_ybjaTHsa6dA/R4tlK520LoI/AAAAAAAAACc/-WgnjKcrBTY/s1600-h/1000000357_image004.jpg"><img id="BLOGGER_PHOTO_ID_5155325436459495042" style="CURSOR: hand" alt="" src="http://bp0.blogger.com/_ybjaTHsa6dA/R4tlK520LoI/AAAAAAAAACc/-WgnjKcrBTY/s400/1000000357_image004.jpg" border="0" /></a><br /><br /><br />Ş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<br /><br /><a href="http://bp2.blogger.com/_ybjaTHsa6dA/R4tllZ20LpI/AAAAAAAAACk/0m-Fpoiyo-w/s1600-h/1000000357_image005.jpg"><img id="BLOGGER_PHOTO_ID_5155325891726028434" style="CURSOR: hand" alt="" src="http://bp2.blogger.com/_ybjaTHsa6dA/R4tllZ20LpI/AAAAAAAAACk/0m-Fpoiyo-w/s400/1000000357_image005.jpg" border="0" /></a><br /><br /><br /><br /><span style="color:#3333ff;">Imports RptSrvInfo.rsInfo<br />Public Class Form1<br />Private Sub btnGetItems_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetItems.Click<br />lstResults.Items.Clear()<br />'Raporlama servisinin Sunucu bilgilerine<br />'erişmek için web servisi örneği tanımladık<br />Dim myReportService As New ReportingService<br />'Reporting Service sunucusu üzerinde arama gerçekleştireğiz.<br />Dim condition As New SearchCondition<br />condition.Name = "Name"<br />condition.Value = txtName.Text<br />Dim mySearchConditions(0) As SearchCondition<br />mySearchConditions(0) = condition<br />myReportService.Credentials = _<br />System.Net.CredentialCache.DefaultCredentials<br />Dim myCatalogItems As CatalogItem()<br />myCatalogItems = myReportService.FindItems("/", _<br />Nothing, mySearchConditions)<br />'Raporlama sunucusu üzerinde bulunan elemanlar<br />'listbox içerisine yazdık.<br />For Each cItem As CatalogItem In _<br />myCatalogItems<br />lstResults.Items.Add(cItem.Path)<br />Next<br />End Sub<br />End Class</span><br /><br /><br />Projeyi çalıştırın. “btnGetItems” isimli butonu tıkladığınızda, Reporting Services içerisindeki tüm elemanlar aşağıdaki gibi listelenecektir.<br /><br /><a href="http://bp0.blogger.com/_ybjaTHsa6dA/R4tmG520LqI/AAAAAAAAACs/wkKnq4R3VyM/s1600-h/1000000357_image006.jpg"><img id="BLOGGER_PHOTO_ID_5155326467251646114" style="CURSOR: hand" alt="" src="http://bp0.blogger.com/_ybjaTHsa6dA/R4tmG520LqI/AAAAAAAAACs/wkKnq4R3VyM/s400/1000000357_image006.jpg" border="0" /></a><br /><br /><br /><br />Sonuç olarak Reporting Services’in web servisini kullanarak, sunucu üzerindeki bilgileri projelerimizde gösterebiliriz.<br />Başka bir makalede görüşmek üzere...<br />Tamer ŞAHİNER<br /><a href="mailto:Tamer.sahiner@bilgeadam.com">Tamer.sahiner@bilgeadam.com</a>tamersahinerhttp://www.blogger.com/profile/00797131681729869275noreply@blogger.comtag:blogger.com,1999:blog-6501107854818923929.post-48705746248317159632008-01-14T05:08:00.000-08:002008-01-14T05:27:12.916-08:00Reporting Services (Rapor Servisi) ile Parametrik Rapor Oluşturmak<strong>Reporting Services (Rapor Servisi) ile Parametrik Rapor Oluşturmak</strong><br /><div><div> </div><div>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.</div><div> </div><div>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.</div><div> </div><div>Şimdi Visual Studio 2005 içerisinden “Report Server Project ” şablonunu seçin.</div><br /><div><a href="http://bp3.blogger.com/_ybjaTHsa6dA/R4tfpp20LgI/AAAAAAAAABc/X-ScTLJiNa4/s1600-h/1000000350_image001.jpg"><img id="BLOGGER_PHOTO_ID_5155319367670705666" style="CURSOR: hand" alt="" src="http://bp3.blogger.com/_ybjaTHsa6dA/R4tfpp20LgI/AAAAAAAAABc/X-ScTLJiNa4/s400/1000000350_image001.jpg" border="0" /></a><br /></div><br /><div>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.</div><div> </div><div><a href="http://bp2.blogger.com/_ybjaTHsa6dA/R4tfZZ20LfI/AAAAAAAAABU/Gq8pz8OuNgE/s1600-h/1000000350_image002.jpg"><img id="BLOGGER_PHOTO_ID_5155319088497831410" style="CURSOR: hand" alt="" src="http://bp2.blogger.com/_ybjaTHsa6dA/R4tfZZ20LfI/AAAAAAAAABU/Gq8pz8OuNgE/s400/1000000350_image002.jpg" border="0" /></a></div><br /><div>“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</div><br /><div>Açılan “Select the Data Source” penceresinden, az önce oluşturduğumuz ds isimli “Data Souce” seçerek bir sonraki adıma geçin.</div><br /><div>Açılan “Desing the Query” penceresinin “Query String” penceresine aşağıdaki sorguyu yazın.<br />“SELECT Person.Contact.ContactID, Person.Contact.FirstName, Person.Contact.MiddleName, Person.Contact.LastName, Person.Address.AddressLine1,<br />Person.Address.AddressLine2, Person.Address.City<br />FROM Person.Contact INNER JOIN<br />HumanResources.Employee ON Person.Contact.ContactID = HumanResources.Employee.ContactID INNER JOIN<br />HumanResources.EmployeeAddress ON HumanResources.Employee.EmployeeID = HumanResources.EmployeeAddress.EmployeeID INNER JOIN<br />Person.Address ON HumanResources.EmployeeAddress.AddressID = Person.Address.AddressID<br />Where Person.Address.City = @City”</div><br /><div><a href="http://bp3.blogger.com/_ybjaTHsa6dA/R4tgIp20LhI/AAAAAAAAABk/j48UpQUMWz0/s1600-h/1000000350_image005.jpg"><img id="BLOGGER_PHOTO_ID_5155319900246650386" style="CURSOR: hand" alt="" src="http://bp3.blogger.com/_ybjaTHsa6dA/R4tgIp20LhI/AAAAAAAAABk/j48UpQUMWz0/s400/1000000350_image005.jpg" border="0" /></a></div><br /><div>“Select the Report Type” penceresinden “Tabular” seçeneğini seçerek, “Next” butonunu tıklayın.</div><div> </div><div>“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.</div><div></div><br /><div>“Choose the Table Style” penceresi içerisinden “Slate” isimli stili seçin ve bir sonraki adıma geçin.</div><br /><div>“Completing the Wizard” penceresinden “Report name” metin kutusuna ReportEmployee ismini girdikten sonra, “Finish” butonunu tıklayarak sihirbazı sonlandıralım.</div><br /><div>“Finish” butonunu tıklayarak “Report Wizard” sihirbazını sonlandıralım.<br />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) <a href="http://localhost/ReportServer">http://localhost/ReportServer</a> degerini yazın.<br />Oluşturduğumuz rapora Rapor Yöneticisi(Report Manager) üzerinden erişelim. Bunun için <a href="http://localhost/Reports">http://localhost/Reports</a> adresine gitmeniz yeterli. Rapor Yöneticisi(Report Manager) üzerinden oluşturduğumuz rapora erişmek için “<a href="http://localhost/Reports$yukon/Pages/Folder.aspx?ItemPath=%2fReportParametrik&amp;ViewMode=List">ReportParametrik</a>” klasörünü tıklayın.</div><br /><div><a href="http://bp2.blogger.com/_ybjaTHsa6dA/R4thZZ20LiI/AAAAAAAAABs/Ex9RZEUAQ78/s1600-h/1000000350_image010.jpg"><img id="BLOGGER_PHOTO_ID_5155321287521087010" style="CURSOR: hand" alt="" src="http://bp2.blogger.com/_ybjaTHsa6dA/R4thZZ20LiI/AAAAAAAAABs/Ex9RZEUAQ78/s400/1000000350_image010.jpg" border="0" /></a></div><div> </div><div>Oluşturduğumuz raporun Rapor Yöneticisi üzerindeki görüntüsü aşağıdaki gibi olacaktır.</div><div><br /></div><a href="http://bp0.blogger.com/_ybjaTHsa6dA/R4thn520LjI/AAAAAAAAAB0/f6pe9s78XN0/s1600-h/1000000350_image011.jpg"><img id="BLOGGER_PHOTO_ID_5155321536629190194" style="CURSOR: hand" alt="" src="http://bp0.blogger.com/_ybjaTHsa6dA/R4thn520LjI/AAAAAAAAAB0/f6pe9s78XN0/s400/1000000350_image011.jpg" border="0" /></a><br /><br /><div></div><div>Ş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.</div><br /><div><a href="http://bp2.blogger.com/_ybjaTHsa6dA/R4th0Z20LkI/AAAAAAAAAB8/m4dC1Xdn01o/s1600-h/1000000350_image012.jpg"><img id="BLOGGER_PHOTO_ID_5155321751377555010" style="CURSOR: hand" alt="" src="http://bp2.blogger.com/_ybjaTHsa6dA/R4th0Z20LkI/AAAAAAAAAB8/m4dC1Xdn01o/s400/1000000350_image012.jpg" border="0" /></a></div><div> </div><div>Başka bir makalede görüşmek üzere...<br />Tamer ŞAHİNER<br /><a href="mailto:Tamer.sahiner@bilgeadam.com">Tamer.sahiner@bilgeadam.com</a></div><div> </div></div>tamersahinerhttp://www.blogger.com/profile/00797131681729869275noreply@blogger.comtag:blogger.com,1999:blog-6501107854818923929.post-81686961597752984222008-01-14T04:41:00.000-08:002008-01-14T05:00:48.959-08:00<strong>Reporing Services (Raporlama Servisi)</strong><br /><br />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.<br /><br />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.<br /><br />Raporlama Servisi üzerinden rapor yayınlamak ve yönetmek için Web sunucuları kullanılır.<br />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.<br /><ul><li>Web formatı (HTML) </li><li>Yazdırma formatları (PDF, TIFF) </li><li>Veri Formatları (Microsoft Excel, XML, CSV) </li></ul>Raporlama Servisi çeşitli farklı senaryolarda kullanabilirsiniz. Bunlar:<br />Ş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.<br /><br />Ş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.<br />Portallar ve uygulamalar içerisinde kullanılabilir. Örneğin CRM (customer<br />relations management) , iş veya üretim uygulamalarında raporlama bileşeni olarak kullanılabilir.<br />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.<br />Şimdi “Report Server Project Wizard” şablonunu kullanarak SQL Server 2005’in örnek veritabanlarından “AdventureWorks” veritabanının Employee(Personel) bilgilerini çekelim.<br />Visial Studio 2005 içerisinden “Report Server Project Wizard” şablonunu seçin.<br /><br /><a href="http://bp1.blogger.com/_ybjaTHsa6dA/R4tZBJ20LZI/AAAAAAAAAAk/tOWrLUcknNk/s1600-h/1000000349_image001.jpg"><img id="BLOGGER_PHOTO_ID_5155312074816236946" style="CURSOR: hand" alt="" src="http://bp1.blogger.com/_ybjaTHsa6dA/R4tZBJ20LZI/AAAAAAAAAAk/tOWrLUcknNk/s400/1000000349_image001.jpg" border="0" /></a><br /><br /><br />“Welcome to the Report Wizard“ başlıklı pencere içerisinde “Next” butonunu tıklayarak Rapor oluşturma işlemine başlayalım.<br /><br />“Select the Data Source” başlıklı pencere içerisinden bağlanacağımız veritabanına göre<br /><br />“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.<br /><br /><a href="http://bp0.blogger.com/_ybjaTHsa6dA/R4tZU520LaI/AAAAAAAAAAs/VKRfquH9mdg/s1600-h/1000000349_image002.jpg"><img id="BLOGGER_PHOTO_ID_5155312414118653346" style="CURSOR: hand" alt="" src="http://bp0.blogger.com/_ybjaTHsa6dA/R4tZU520LaI/AAAAAAAAAAs/VKRfquH9mdg/s400/1000000349_image002.jpg" border="0" /></a><br /><br /><br />“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.<br /><br /><a href="http://bp0.blogger.com/_ybjaTHsa6dA/R4tZ9520LbI/AAAAAAAAAA0/jtyzj7uJRYo/s1600-h/1000000349_image003.jpg"><img id="BLOGGER_PHOTO_ID_5155313118493289906" style="CURSOR: hand" alt="" src="http://bp0.blogger.com/_ybjaTHsa6dA/R4tZ9520LbI/AAAAAAAAAA0/jtyzj7uJRYo/s400/1000000349_image003.jpg" border="0" /></a><br /><br /><br />“Select the Report Type” içerisinden “Tabular” seçeneğini seçerek, “Next” butonunu tıklayın.<br /><br />“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.<br /><br /><a href="http://bp3.blogger.com/_ybjaTHsa6dA/R4tacp20LcI/AAAAAAAAAA8/8UCvVEL5Itw/s1600-h/1000000349_image005.jpg"><img id="BLOGGER_PHOTO_ID_5155313646774267330" style="CURSOR: hand" alt="" src="http://bp3.blogger.com/_ybjaTHsa6dA/R4tacp20LcI/AAAAAAAAAA8/8UCvVEL5Itw/s400/1000000349_image005.jpg" border="0" /></a><br /><br /><br />“Choose the Table Style” penceresi içerisinden “Ocean” isimli stili seçin ve bir sonraki adıma geçin.<br /><br />“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.<br /><br /><br />“Completing the Wizard” penceresinden “Report name” metin kutusuna rapor ismini girdikten sonra, “Finish” butonunu tıklayarak sihirbazı sonlandıralım.<br /><br /><br />“Finish” butonunu tıkladıktan sonra, projenizi çalıştırabilirsiniz.<br /><br />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 <a href="http://localhost/Reports">http://localhost/Reports</a> adresine gitmeniz yeterli. Eğer SQL Server’ı default instance olarak kurmuşsanız <a href="http://localhost/Reports">http://localhost/Reports</a> adresine gitmeniz gerekmektedir. Rapor Yöneticisi(Report Manager) üzerinden oluşturduğumuz rapora erişmek için “ReportEmployee” klasörünü tıklayın.<br /><br /><a href="http://bp2.blogger.com/_ybjaTHsa6dA/R4tbUZ20LdI/AAAAAAAAABE/KLgBiUIEWbQ/s1600-h/1000000349_image009.jpg"><img id="BLOGGER_PHOTO_ID_5155314604551974354" style="CURSOR: hand" alt="" src="http://bp2.blogger.com/_ybjaTHsa6dA/R4tbUZ20LdI/AAAAAAAAABE/KLgBiUIEWbQ/s400/1000000349_image009.jpg" border="0" /></a><br /><br /><br /><br />Oluşturduğumuz raporun Rapor Yöneticisi üzerindeki görüntüsü aşağıdaki gibi olacaktır.<br /><br /><br /><a href="http://bp1.blogger.com/_ybjaTHsa6dA/R4tbhJ20LeI/AAAAAAAAABM/RvqZzlmsS4o/s1600-h/1000000349_image010.jpg"><img id="BLOGGER_PHOTO_ID_5155314823595306466" style="CURSOR: hand" alt="" src="http://bp1.blogger.com/_ybjaTHsa6dA/R4tbhJ20LeI/AAAAAAAAABM/RvqZzlmsS4o/s400/1000000349_image010.jpg" border="0" /></a><br /><br /><br /><br /><br />Başka bir makalede görüşmek üzere...<br />Tamer ŞAHİNER<br /><a href="mailto:Tamer.sahiner@bilgeadam.com">Tamer.sahiner@bilgeadam.com</a>tamersahinerhttp://www.blogger.com/profile/00797131681729869275noreply@blogger.comtag:blogger.com,1999:blog-6501107854818923929.post-70139518087370966052008-01-12T09:03:00.000-08:002008-01-12T09:08:19.792-08:00BaşlıyorumTüm seminer, makale ve yazılarımı artık blogumdan takip edebilirsiniz.tamersahinerhttp://www.blogger.com/profile/00797131681729869275noreply@blogger.com