Microsoft SQL Server 2008 Service Pack1 instalation Fail
When I try to install Microsoft SQL Server 2008 SP1 on current SQL 2008 installation, I got a error message like this;
"A failure was detected for a previous installation, patch, or repair during configuration for features [SQL_PowerShell_Engine_CNS,SQL_PowerShell_Tools_ANS,]. In order to apply this patch package (KB968369), you must resolve any issues with the previous operation that failed. View the summary.txt log to determine why the previous operation failed."
To solve this problem falow these steps;
-
Go to Server Manager on Windows 2008 server and click Features
-
Add Features, select and install Windows PowerShell.
-
Repair current MS SQL 2008 instalation
-
install SQL Server 2008 SP1
Service Pack instalation complate with out any error.
Veritabanı Normalizasyon - IV
| Veritabanı Normalizasyonu - Bölüm-IV |
Bu yazı birkaç seriden oluşmaktadır. Başlıklardan konulara kolayca erişebilirsiniz.
Bölüm 1 - Veritabanı normalizasyonu konusunu ele alış ve Hastane örneğinin çıkışı. HASTALAR tablosunun oluşturulması ve ilişkilerinin oluşturulması.
Bölüm 2 - Doktor bilgilerini tutacagımız DOKTORLAR tablosunu ve tüm ilişkileirni anlatmaya devam ediyoruz.
Bölüm 3 - Muayene, Poliklinik tablolarını oluşturup tablo ilişkilerini sonlandırıyoruz.
Bölüm 4 - Testler, örnek data girişi, sorgulamalar vs. |
Tabloları ve ilişkilerini oluşturduk. iyi güzel de bunların doğru çalışıp çalışmadığını anlamak için biraz örnek datayla denemek lazım. Bu bölümde tabloara data inser edip örnek sorgularla istediğimiz sonucu elde edip etmediğimiz göreceğiz. Örnek dataların gişine benim tabirimle dip tablolardan başlıyorum. yanı HASTALAR tablosuna girş yapabilmek için öncelikle Plaka ve ilceNo bilgiis lazım bana. Bu nednele ILLER tablosuna ve ilçeler tablosuna biraz data ekleyeceğim.
/* 3 tane il giriyoruz */
insert into ILLER(Plaka,il) VALUES('01', 'ADANA')
insert into ILLER(Plaka,il) VALUES('02', 'ADIYAMAN')
insert into ILLER(Plaka,il) VALUES('03', 'AFYON')
/* Girdiimiz 3 il iin ikier ilce giriyoruz*/
insert into ILCELER(Plaka,ilceAdi) VALUES('01','CEYHAN')
insert into ILCELER(Plaka,ilceAdi) VALUES('01','FEKE')
insert into ILCELER(Plaka,ilceAdi) VALUES('02','BESN')
insert into ILCELER(Plaka,ilceAdi) VALUES('02','GERGER')
insert into ILCELER(Plaka,ilceAdi) VALUES('03','BOLVADN')
insert into ILCELER(Plaka,ilceAdi) VALUES('03','DAZKIRI')
Bu sayede insanlar tablosuna ve DOKTORLAR tablosuna Plaka ve ilceNo bilgisini sağlayabilmiş olduk. Fakat DOKTORLAR tablomuzda, UnvanNo ve
UzmanlıkNo gibi iki farklı alan daha vardı bunları da UNVANLAR tablosundan ve UZMANLIKLAR tablosundan besliyorduk. Hemen ikişer üçer kayıt da bu tablolara ekleyelim.
/*UNVANLAR tablosuna giri yapyoruz*/
insert into UNVANLAR(Unvan) VALUES('Prof.Dr')
insert into UNVANLAR(Unvan) VALUES('Doc.Dr')
insert into UNVANLAR(Unvan) VALUES('Yrd.Doc.Dr')
insert into UNVANLAR(Unvan) VALUES('Uzm.Doc')
/*UZMANLIKLAR Tablosu*/
insert into UZMANLIKLAR(Uzmanlk) VALUES('ocuk Doktoru')
insert into UZMANLIKLAR(Uzmanlk) VALUES('Di Hekimi')
insert into UZMANLIKLAR(Uzmanlk) VALUES('Dahiliye')
/*POLIKILINIKLER Tablosu*/
insert into POLIKLINIKLER(Poliklinik) VALUES('Cocuk')
insert into POLIKLINIKLER(Poliklinik) VALUES('Dis')
insert into POLIKLINIKLER(Poliklinik) VALUES('ic hastalıklar)
şimdi insanlar tablosuna kayıt atabiliriz.
/* insanlar Tablosuna Kayt */
insert into HASTALAR(Adi,Soyadi,DogumTarihi,Plaka,ilceNo,Adres)
VALUES('Kemal','Karadag','12-03-1976','03',6,'Falan Sk. No:8')
insert into HASTALAR(Adi,Soyadi,DogumTarihi,Plaka,ilceNo,Adres)
VALUES('Ersin','Kopru','01-05-1975','01',5,'Falan Sk. No:10')
Bu kayıtta Kemal kaydının ili AFYON (03), ilcesi DAZKIRI (6) olarak eklemiş olduk. Şimdi geldi DOKTOR tablomuza data girmeye, Burada bir durumu daha deneyeceğiz. Doktor eğer çift ana dal yaptıysa durumunu.
Görüldüğü üzere 2 nolu doktor olan Ayse Gurman' nın iki uzmanlık alanını da ekleyebilmiş olduk. Şimdi Muayene girme zamanı 1 nolu hasta Kemal (yani ben :) ) in
/* DOKTORLAR Tablosu*/
insert into DOKTORLAR(Adi,Soyadi,DogumTarihi,Plaka,ilceNo,UnvanNo)
VALUES('Hasan','Atik','10-10-1965','01',1,1) -- Prof.Dr. Hasan Atik
insert into DOKTORLAR (Adi,Soyadi,DogumTarihi,Plaka,ilceNo,UnvanNo)
VALUES('Ayse','Grman','10-10-1960','02',4,2) -- Doc.Dr. Ayse Grman
/* DOKTOR_UZMANLIKLARI*/
insert into DOKTOR_UZMANLIKLARI(DoktorNo,UzmanlkNo)
VALUES(1,1) -- Prof.Dr. Hasan Atil Cocuk Hastalklar
insert into DOKTOR_UZMANLIKLARI(DoktorNo,UzmanlkNo)
VALUES(2,1) -- Doc.Dr. Ayse Gurman Cocuk Hastalklar
insert into DOKTOR_UZMANLIKLARI(DoktorNo,UzmanlkNo)
VALUES(2,3) -- Doc.Dr. Ayse Gurman Dahiliye
2 nolu doktorla muayenesini girelim.
insert into MUAYENELER(Tarih,DoktorNo,HastaNo,PoliklinikNo) VALUES('01-01-2009',2,1,3) Bir Sorgu ile girmiş olduğumuz kayıtların soonucunu görelim;
select M.MuayeneNo,H.Adi as HastaAdi,H.Soyadi as HastaSoyadi,
U.Unvan,D.Adi as DoktorAdi,D.Soyadi as DoktorSoyadi,
P.Poliklinik
from MUAYENELER as M,HASTALAR as H,DOKTORLAR as D,POLIKLINIKLER as P,UNVANLAR as U
WHERE
M.HastaNo = H.HastaNo
and
M.DoktorNo = D.DoktorNo
and
M.PoliklinikNo = P.PoliklinikNo
and
D.UnvanNo = U.UnvanNo
Sonuç olarak;
Veritabani Normalizasyon - III
| Veritabanı Normalizasyonu - Bölüm-III |
Bu yazı birkaç seriden oluşmaktadır. Başlıklardan konulara kolayca erişebilirsiniz.
Bölüm 1 - Veritabanı normalizasyonu konusunu ele alış ve Hastane örneğinin çıkışı. HASTALAR tablosunun oluşturulması ve ilişkilerinin oluşturulması.
Bölüm 2 - Doktor bilgilerini tutacagımız DOKTORLAR tablosunu ve tüm ilişkileirni anlatmaya devam ediyoruz.
Bölüm 3 - Muayene, Poliklinik tablolarını oluşturup tablo ilişkilerini sonlandırıyoruz.
Bölüm 4 - Testler, örnek data girişi, sorgulamalar vs. |
HASTALAR ve DOKTORLAR tablolarını ve ilişkilerini tamamladık. Şimdi Doktor ve hastayı birbirine kavuşturmak için gerekli Tabloları yapmaya devam edicez. Bir Doktorun normal şartlarda bir hastayı muayene etmesi için öncelikle hastanın bir hastanenın ilgili polikliniğine muracet etmesi gerekir. Bizde burdan yola çıkarar POLIKLINIKLER tablomuzu oluşturacagız.
Bu tabloda PoliklinikNo' yu Primary - Key ve identity sini 1 artımlı olarak yapdığımız söylemiyorum artık. Yanında anahtar işareti bunun primary key olduğunu anlatıyor zate. POLIKLINIKLER de hazır olduğuna göre artık MUAYENELER tablosunu oluşturabiliriz. Aşağıda da MUAYENELER tablosunu görüyorsunuz.
Bu tabloda hangi hastanın hangi tarihte hangi poliklinikte ve hangi doktordan muayene olduğunu görüyor olacağız. Muayene işleminin ardından doktor bu hasta için bir teşhis ve tedavi belirleyecektir. Bunu saklayabilmek içinde MUAYENE_SONUC adında bir tablodan faydalanacağız.
Nihayet tablolarımızı tamamladık. Şimdi son ooluşturdugumuz tabloların birbiri ile olan ilişkilerini belirlemek kaldı.
Database'imizin kurgusu bitti. Şimdi kurguladığımız bu yapıyı test etme zamanı.
Veritabani Normalizasyon - II
| Veritabanı Normalizasyonu - Bölüm-III |
Bu yazı birkaç seriden oluşmaktadır. Başlıklardan konulara kolayca erişebilirsiniz.
Bölüm 1 - Veritabanı normalizasyonu konusunu ele alış ve Hastane örneğinin çıkışı. HASTALAR tablosunun oluşturulması ve ilişkilerinin oluşturulması.
Bölüm 2 - Doktor bilgilerini tutacagımız DOKTORLAR tablosunu ve tüm ilişkileirni anlatmaya devam ediyoruz.
Bölüm 3 - Muayene, Poliklinik tablolarını oluşturup tablo ilişkilerini sonlandırıyoruz.
Bölüm 4 - Testler, örnek data girişi, sorgulamalar vs. |
Birinci Bölümde HASTLAR tablomuzu oluşturduk ve Adres verisini oluşturabilmek için gerekli iki tablo (ILLER ve ILCELER) ile ilişkilendirdik.Yazımıza birhastnede olmazsa olmaz DOKTORLAR tablosunu oluşturarak devam edecegiz. Bu aşamada önce HASTLAR tablosu değilde INSANLAR tablous oluşturarak bir parametre ile hasta ve doktoru ayrabilirmiyim diye düşündüm fakat sonra Doktorların hastalara göre daha fazla bilgi içermesi gerektiğini farkettim. Örneğin Adı,Soyadı,DogumTarihi ve adres bilgisi yapı olarak benzemekle beraber, Doktorların ünvan, Braş gibi ek bilgileri var ve bir doktor çift ana dal yapma ihitmalını de göz önüne bulundurarak (Nekadar güç olsada :) ) buna uygun bir yapı tasarlamak gerekli. Örnegin Prof.Doc. Hasan Erdem hem çocuk hastalıkları hemde iç hastalıları alanında uzmanlık sahibi olabilir. Bu durumda bu bilgileri INSANLAR tablosunda harmanlamak güç olacaktı. Bu nedenle yapıyı şu şekilde tasarladım.
Doktorlar tablosunda gördüğünüz üzere HASTALAR tablosundan farklı olarak UnvanNo ve UzmanlıkNo adında iki alandaha var bu alanlar iel unvan ve Uzmanlık bilgilerini desenleyeceğiz. Örnegin unvanları ayrı bir tabloya almamış olasaydık, Prof.Doc, Yar.Doc, Uzman Dr gibi ifadeleri Doctorlar tablosunda tekrarlıyor olacaktır. Oysaki işimdi Doktorlar tablosunda bu uzun ifadele ryerine 1, 2 , 3 gibi Nolar (ID ler) kullanıyor olacağız. Unvanlar tablosunu ve Uzmanlık tablolarını da şu şekilde tasarladım.
Bu aşamaya kadar herşey normal gibi görünüyor. Fakat datayı biraz düşündüğümüzde aslında Doctorlar.UnvanNo ile Unvanlar.UnvanNo ilişkisinin aslında çok da palnladığımız yapıyı sağlamadığını görüyoruz. Şöyleki; Ahmet adında bir doktorumuz olsun ve bu Dr.Ahmetin Uzmanlık alanı Cocuk Hastalıkları olsun. Bu ornek için herşey güzel. Cocuk Hastalıkları örnegin 4 nolu kayıt( UZMANLIKLAR tablosunda ) bu kaydı doktorlar tablosunda ilgili alana kaydederiz ve Dr. Ahmetin kaydı tamam olur. Fakat örnegin gene Dr.Ayse adında bir doktorumuz daha var ve bu arkadaş çif uzmanlıga sahip, bu yapı ile Dr.Ayse için iki kayıt oluşturmız gerekcek şöyleki
Ayse, Demir, 12-10-1985, ...., 4 (Cocuk Hastalıkları)
Ayse, Demir, 12-10-1985,.....,7 (iç hastalıkları)
Görüldüğü gibi Dr.Ayşe için iki kayıt oluşturmak kaçınılmaz. Fakat yapıda yapacağımız küçük bir normalızasyon ile bu durumdan kurtulabılırız. Ara bir tablo yapıyoruz ve adını DOKTOR_UZMANLIKLARI adını vererek yapısını şu şekilde tanımlıyorum.
Tabi bu drumda DOKTORLAR tablosundaki UzmanlıkNo alanına artık ihtiyacımız kalmadı. Yeni yapıda tablolar arası ilişkimiz şu sekilde olacak.
Ornek kayır vermek gerekirse;
UZMANLIKAR
1, Cocuk Hastalıkları
2, Dahiliye
DOKTORLAR
1,Hasan,Engin
2,Ayse,Gurel
DOKTOR_UZMANLIKLAR
1,1,1 (Hasan Engin, Cocuk Hastalıları)
2,2,1 (Ayse Gurel, Cocuk Hastalıkları)
3,2,2 (Ayse Gurel, Dahiliye)
şeklinde örneklenebilir.
Veritabani Normalizasyon - I
| Veritabanı Normalizasyonu - Bölüm-III |
Bu yazı birkaç seriden oluşmaktadır. Başlıklardan konulara kolayca erişebilirsiniz.
Bölüm 1 - Veritabanı normalizasyonu konusunu ele alış ve Hastane örneğinin çıkışı. HASTALAR tablosunun oluşturulması ve ilişkilerinin oluşturulması.
Bölüm 2 - Doktor bilgilerini tutacagımız DOKTORLAR tablosunu ve tüm ilişkileirni anlatmaya devam ediyoruz.
Bölüm 3 - Muayene, Poliklinik tablolarını oluşturup tablo ilişkilerini sonlandırıyoruz.
Bölüm 4 - Testler, örnek data girişi, sorgulamalar vs. |
Veritabanı normalizasyonu ilel ilgili olarak yazmama yazgeliştir.com da İlyas Bural abinin yazmış olduğu Baştan Sona SQL Veritabanı Oluşturmak başlıklı yazısı ilham oldu. Kendisine çok teşekkür ederim. Bir hastanede muayene sistemini örnekleyerek çok faydalı bir yazı yazmış. Konuyu okuduktan sonra bu örneği dahada geliştirilebileceğini düşünmeye başladım. İlerleyen yazılarda bu Database'i kullanarak ASP.NET ve Silverlight3 uygulamalar geliştrimeyi ve bu blog üzerinden yayınlamayı düşünüyorum. Şimdi örnek Database'i oluşturmaya başlayalım. ilk olarak oluşturugum Database üzerinde HASTALAR adında bir Table bulunduruacağım. HASTALAR tablosunda hastanemize başvuran hastalarımızın kişisel bilgileri saklanacak.
HASTALAR Tablosunda HastaNo alanı Primary Key ve identity si 1 artacak şekilde ayarlıyorum. Tabloda Adres alanı text olmakla beraber relation yapıya bu alandan itibaren başlıyor olacağız. Bir adres bilgisi IL, ilce bilgisi de içerir. Bu nedenle adres kolonuna ek olarak Plaka ve ilceNo adinda iki kolon daha ekliyeceğim. Daha sonra bu alanları Oluşturacağımız ILLER ve ILCELER tablosu ile ilişkilendireceğiz.
ILLER tablosunun Plaka kolonu Char(2) tipinde çünkü Plakalar 06, 34 gibi iki rakamdan oluşuyor. Bu alnı int olarak da tanımlayabilirdik fakat 06 ankara için uygulamalalarımısın her alanında Ankara 6 olarak görünmesine neden oluruz. bu nedenle Char(2) formatında ve Primary-Key olacak.ILLER tablosunu oluşturduktan sonra bu illere bağlı olacak ilceleri de tutacağımız ILCELER tablosunu ILLER tablosu ile ilişkilendirerek oluşturacağım.
HASTLAR, ILLER ve ILCELER tabloları hazır sayılır şimdi bu tabloları birbirleriyle ilişkilendirerek data bütünlüğünü oluşturmaya çalışacağız. Fakat bunu yapmadan önce HASTALAR tablosuna Plaka ve ilceNo alanlarını eklemiz gerekiyor. Nihayetinde oluşacak yapı aşağıdaki gibi olacak.
Relationları kısaca açıklamak gerekirse; ILLER tablosunun Plaka (PrimaryKey) kolunu ile ILCELER tablosundaki Plaka kolunu 1' e n ilişkilidir. Yani bir ilçe yanlızca bir ilçeye bağlı olabilir demek kabaca. Bu şu anlama gelmiyor, Darica ilcesi kaydını oluşturuken, bu ilçey KOCAELI iline bağlayabilirim. Fakat Darica adında bir ilce daha oluşturup Bunu YOZGAT ilinede atayabilirim. Burda 1'e n den kasıt 41 - Darica bir tane olabilir demek. Eğer Sadece bir tane Darica girilebilsin istersek ki bu örnekte çok mantıklı değil, ilceAdi alnını Uniq olarak yarlamak gerekir.
HATLAR tablosundaki, Plaka ile ILLER Tablosundaki Plaka, ILCELER tablosundaki ilceNo ile de HASTALAR tablosundaki ilceNo kolonu ilişkilidir. Bu ilişkileri ve tüm DB scriptlerini konu sonunda paylaşaıyor olacağım.
Datası ile birlikte bir DB nin scriptini oluşturmak
Microsoft SQL Server 2005 de oluşturulan bir Database'i başka bir server'a taşımak istediğimizde backup & restore yöntemi veya deattach - Attach DB yöntemi kullanılabilir. internet server provider (ISP) üzerinden host ettiğim bir uygulama için ISP Datbase tarafi için bana sadece script çalıştırabileceğim bir arayüz verebilmekteydi. Konu üzerinde ISP ile yazıştığımda ise SQL serverlarının IP ve port bilgilerini bana gönderdiler. Fakat Management Studio ile bu server'a bağlandığımda almış olduğum backup'ı bu server' a dönemediğimi farkettim. Çünkü MSSQL server backup dosyasının bulunduğu yeri örneğin "c:\backup" i bulunduğu server üzerinde göstermemi istiyordu. Bu durumda internet üzerinden biraz araştırma yaptuğımda MSSQL server'ın command promt tool'larından sqlpubwiz 'i n bu sorunu çözmek için çok faydalı olacağını gördüm. sqlpubwiz komutu Management Studio üzerinde yapabildiğiniz Genarete Script fonksyonunun komut hali.
Management Studio ile Bir DB' nin Create Scriptinin Oluşturulması
Management studio üzeirnden Databse'inizin Create Scriptini Generate Script özelliği ile çıkarabilirsiniz. Fakat Generate Script fonksyonu üzerinde bu DB' nin Create Scriptini oluşturken datasını da al özelliği bulunmamaktadır. Datasını almaktan kastım INSERT komutlarını da hazırlayıp bana bir script oluşturmasını kastediyorum.
sqlpubwiz.exe ile Database Script Oluşturmak
sqlpubwiz.exe komutu MSSQL Server'ı hangi dizine kurduğunuza bağlı olarak genelde "C:\Program Files\Microsoft SQL Server\90\Tools\Publishing\1.2" dizini altında bulunur. Bu dizine ulaştıkdan sonra scriptini oluşturmak istediğiniz databse için iki yöntem kullanabilirsiniz.
sqlpubwiz script -d AdventureWorks “C:\AdventureWorks.sql” -dataonly
sqlpubwiz script -d AdventureWorks “C:\AdventureWorks.sql”
Daha detaylı bilgi için arama sonucunda bulduğum link;
http://blog.sqlauthority.com/2007/11/16/sql-server-2005-generate-script-with-data-from-database-database-publishing-wizard/