-- Kullanıcının 'user name' ile listeleyebilir
15 Nisan 2010 Perşembe
SQL Server 2008 de kullanıcının yetkili olduğu rolleri öğrenmek.
-- Kullanıcının 'user name' ile listeleyebilir
SQL Server Business Intelligence İçin Kitap Önerileri
The Data Warehouse Toolkit: The Complete Guide to Dimensional Modeling (Second Edition)
Ralph Kimball , Margy Ross
Data Warehouse ile ilgilenen herkesin mutlaka okuması gereken bir kitap
Product Details :
- Paperback: 464 pages
- Publisher: Wiley; 2 edition (April 26, 2002)
- Language: English
- ISBN-10: 0471200247
- ISBN-13: 978-0471200246
- Product Dimensions: 9.2 x 7.2 x 1 inches
- Shipping Weight: 1.5 pounds (View shipping rates and policies)
- Average Customer Review: 4.5 out of 5 stars See all reviews (33 customer reviews)
Practical Business Intelligence with SQL Server 2005 John C. Hancock (Author), Roger Toren (Author)
- Paperback: 432 pages
- Publisher: Addison-Wesley Professional; 1 edition (September 7, 2006)
- Language: English
- ISBN-10: 0321356985
- ISBN-13: 978-0321356987
- Product Dimensions: 9 x 7 x 1 inches
- Shipping Weight: 1.2 pounds (View shipping rates and policies)
- Average Customer Review: 4.3 out of 5 stars See all reviews (6 customer reviews)
Delivering Business Intelligence with Microsoft SQL Server 2008 (Paperback) Brian Larson (Author)
Product Details
- Paperback: 792 pages
- Publisher: McGraw-Hill Osborne Media; 2 edition (November 19, 2008)
- Language: English
- ISBN-10: 0071549447
- ISBN-13: 978-0071549448
- Product Dimensions: 9 x 7.3 x 1.6 inches
- Shipping Weight: 2.8 pounds (View shipping rates and policies)
- Average Customer Review: 4.9 out of 5 stars See all reviews (8 customer reviews)
Microsoft SQL Server 2008 Analysis Services Step by Step (Step By Step (Microsoft)) ~ Scott Cameron
Product Details
- Paperback: 448 pages
- Publisher: Microsoft Press; 1 edition (April 15, 2009)
- Language: English
- ISBN-10: 0735626200
- ISBN-13: 978-0735626201
- Product Dimensions: 8.9 x 7.3 x 1.4 inches
- Shipping Weight: 2 pounds (View shipping rates and policies)
- Average Customer Review: 5.0 out of 5 stars See all reviews (3 customer reviews)
14 Nisan 2010 Çarşamba
SQL Server da stored procedure daki işlemler ne kadar sürede çalışıyor?
Ya execution plan'i çalıştırır ve hangi kodun yavaş çalıştığını anlamaya çalışırız veya teker teker kod parçalarını çalıştırız.
Bunun için kullandığım yöntem, stored procedure'a @Timer diye bir parametre eklemek ve bu parametreye 1 geçilirse her işlem için bu zamanları milisaniye cinsinden hesaplamak.
Örnek prosedür :
1 CREATE PROCEDURE dbo.sp_SampleProcedure
2 @Timer smallint = 0
3 AS BEGIN
4
5 IF @Timer = 1 BEGIN
6 DECLARE @Tm TABLE(dt datetime,com varchar(255), tm int NULL)
7 DECLARE @BeginDate datetime,@EndDate datetime,@OldDate datetime
8 SELECT @BeginDate = GETDATE()
9 INSERT INTO @Tm(dt,com) VALUES(GETDATE(),'***BEGIN***')
10 SELECT @OldDate = GETDATE()
11 END
12
13
14 -- Do something
15 SELECT 'This is a sample operation 1 '
16
17 IF @Timer = 1 BEGIN
18 INSERT INTO @Tm(dt,com,tm)
VALUES(GETDATE(),'10.Sample Operation 1',DATEDIFF(ms,@OldDate,GETDATE()))
19 SELECT @OldDate = GETDATE()
20 END
21
22
23 -- Do another thing
24 DECLARE @Result TABLE (OrderNo int, Number int )
25
26 DECLARE @i int = 1,@OrderNo int = 0 , @Step int = 1
27
28 WHILE @i<= 200 BEGIN
29 INSERT INTO @Result
30 VALUES(@OrderNo,@i)
31 SELECT @i = @i + @Step, @OrderNo = @OrderNo + 1
32 END
33
34 SELECT * FROM @Result
35
36 IF @Timer = 1 BEGIN
37 INSERT INTO @Tm(dt,com,tm) VALUES(GETDATE(),'20.Sample Operation 2',DATEDIFF(ms,@OldDate,GETDATE()))
38 SELECT @OldDate = GETDATE()
39 END
40
41
42 -- Do one more operation and get the size of all tables. This will take a time
43
44 CREATE TABLE #TableSize
45 (
46 [name] nvarchar(255),
47 [rows] int,
48 [reserved] varchar(20),
49 [data] varchar(20),
50 [index_size] varchar(20),
51 [unused] varchar(20)
52 )
53 -- Mevcut database deki tüm tablolar için sp_spaceused proc. ü çağırılıp, dönen recordset #TableSize tablosu eklenir
54 EXEC sp_MSforeachtable @command1='INSERT INTO #TableSize EXEC sp_spaceused ''?'' '
55
56 SELECT * FROM #TableSize
57
58
59 IF @Timer = 1 BEGIN
60 INSERT INTO @Tm(dt,com,tm) VALUES(GETDATE(),'30.Get Table sizes',DATEDIFF(ms,@OldDate,GETDATE()))
61 SELECT @OldDate = GETDATE()
62 END
63
64 ---------------------------------------------
65 -- Get the execution time
66 IF @Timer = 1 BEGIN
67 INSERT INTO @Tm(dt,com) VALUES(GETDATE(),'***END***')
68 SELECT @EndDate = GETDATE()
69 INSERT INTO @Tm(dt,com,tm) VALUES(GETDATE(),'Total SP Duration',DATEDIFF(ms,@BeginDate,@EndDate))
70 SELECT * FROM @Tm
71 END
72 SET NOCOUNT OFF
73 SET ANSI_WARNINGS ON
74
75 END
76 GO
Prosedürü oluşturduktan sonra çalıştıralım :
exec sp_SampleProcedure @Timer = 1
En son sonuç olarak bize her işlemin ne kadar sürede çalıştığını gösterecek.
| dt | com | tm |
|---|---|---|
| 14.04.2010 15:34 | ***BEGIN*** | |
| 14.04.2010 15:34 | 10.Sample Operation 1 | 0 |
| 14.04.2010 15:34 | 20.Sample Operation 2 | 6 |
| 14.04.2010 15:34 | 30.Get Table sizes | 4843 |
| 14.04.2010 15:34 | ***END*** | |
| 14.04.2010 15:34 | Total SP Duration | 4850 |
SQL Server 2005 de Web Service ( HTTP EndPoint ) Kullanımı
SQL Server 2005 ile IIS olmadan web service yayımlamak mümkün.. Bunun için SQL Server ınızın Windows 2003 / 2008 server veya XP Service Pack 2 üzerine kurulmuş olması gerekiyor.
SQL Server 2005 ile gelen native xml web servislerin nasıl kullanılacağına bir göz atalım..
AdventureWorks database inde bir procedür yaratalım
CREATE PROCEDURE Production.sp_GetProducts
AS
SELECT
ProductID,
ProductNumber,
Name,
ListPrice
FROM Production.Product
GO
Bu proc. bize tüm ürünlerin adı, numarasını ve liste fiyatını gösterecek ve bu prosedürü bir web method haline getirerek web service ile çağıracağız..
SELECT endpoint_id,name FROM sys.endpoints
Yukardaki kodu çalıştırırsanız, sistem tarafından hazırlnamış ve kullanılan endpoint listesini görebilirsiniz..
CREATE ENDPOINT GetProductsEndPoint
STATE = STARTED
AS HTTP
(
PATH = '/Product',
AUTHENTICATION = (INTEGRATED),
PORTS = (CLEAR),
SITE = 'myServerName'
)
FOR SOAP
(
WEBMETHOD 'ProductList'
(NAME='AdventureWorks.Production.sp_GetProducts'),
BATCHES = DISABLED,
WSDL = DEFAULT,
DATABASE = 'AdventureWorks',
NAMESPACE = 'http://tempUri.org/'
)
go
STATE
- STARTED : Çalışır durumda. Dinliyor ve cevap veriyor
- DISABLED : Devre dışı.. Dinleme ve cevap verme işlemleri çalışmıyor
- STOPPED : Dinliyor ancak istemciden istek geldiğinde hata veriyor
HTTP de kullanılan parametreler:
- PATH = '/Product' WebService e ulaşmak için kullanacağımız virtual path. Örneğin "localhost/Product?wsdl" ile ulaşabileceğiz
- AUTHENTICATION = (INTEGRATED) :
- INTEGRATED : En güvenilir mod. Mümkünse Kerberos-based authentication, değilse NTLM kullanır.
- DIGEST - INTEGRATED kadar güvenli değildir. Eğer INTEGRATED kullanamıyorsunuz bu modu kullanabilirsiniz
- BASIC - En az güvenilir moddur. INTEGRATED or DIGEST yöntemleri kullanılamıyorsa kullanılmalıdır. PORT değeri (SSL) olursa çalışır
- PORTS = (CLEAR),
- CLEAR : HTTP (default 80) port
- SSL : HTTPS (default 443)
- SITE = 'myServerName' -- Web service in çalışağı makinenin adıdır.. Direk makine ismi verilir. myServerMyInstance gibi bir SQL server instance yarattıysanız ve host unuz bu server olacaksa bile SITE = myServer verilmelidir.
"http://myServerName/Product?wsdl" web service imizi çalışacağı adres.
Şimdi de bunu nasıl çağıracağımızı basit bir asp.net örneği görelim..
- Visual Studio 2005 i açın ve yeni bir web projesi oluşturun..
- Projenin üzerine sağ tuş ile gelen menüden "Add Web Reference" a tıklayın..
- URL'ye "http://myServerName/Product?wsdl" yazın ve "GO" ya basın.. Bu web service de tanımlı web method ların listesini göreceksiniz. Biz sadece "ProductList" isimli bir method oluşturmuştuk..
- WebReference name kutusuna "Products" yazın ve "Add Reference" butonuna basın..
Solution Explorer da App_WebReferences>Products>Product.discomap ve App_WebReferences>Products>Product.wsdl isimli 2 dosya eklendiğini göreceksiniz..
Yeni bir web sayfası ekleyin..
Üzerine bir GridView nesnesi ekleyip ID'sini "grdProducts" olarak değiştirin..
Bir button ekleyin ve ID sini "btnLoadProducts" olarak değiştirin.. Butonun onclick ine kod yazacağız ve grid i dolduracağız..
protected void btnLoadProducts_Click(object sender, EventArgs e)
{
Products.GetProductsEndPoint productEndPoint = new Products.GetProductsEndPoint();
productEndPoint.Credentials = System.Net.CredentialCache.DefaultCredentials;
object[] result = productEndPoint.ProductList();
foreach (object o in result)
{
if (o is DataSet)
{
grdProducts.DataSource = (o as DataSet).Tables[0];
grdProducts.DataBind();
break;
}
}
}
Web Method çağırıldığı zaman bir object array döner. Array in itemlarından bir tanesi de webmethod dan dönen tüm resultset i dataset olarak verir. Biz tek bir recordset döndürdüğümüz için DataSet içerisinde 1 tane DataTable taşıyacaktır. Bu datatable ı , grid in source olarak gösterdiğimizde işimiz bitmiş oluyor..
1 Nisan 2010 Perşembe
Google DocVerse 'i satın aldı.
Artık sadece online dosyalarımızı değil, bilgisayarımızdaki dosyalarımızı ve klasörlerimizi de google docs'a yükleyip, cloud computing nimetlerinden faydalanabileceğiz.
Google Docs'daki dökümanlarımızı desktop'da rahatça kullanabilmemiz için de memeo isimli bir uygulama yazmış google.
Google Docs'u aktif olarak kullanmaya başlayınca senkronizasyon ve yedekleme ihtiyaçlarımız da doğacak tabii ki. Bunun için de syncplicity uygulaması imdadımıza yetişiyor.
Google, gelecek Cloud'da diyor ve bununla ilgili yatırımlarına devam edecek gibi görünüyor. Bakalım, gelecekte neler olacak?
Google'ın DocVerse'i almasıyle ilgili haberi google'ın blog'ından okuyabilirsiniz : http://googleenterprise.blogspot.com/2010/03/google-docs-welcomes-docverse.html
29 Mart 2010 Pazartesi
Kimball'dan Veri Ambarı Geliştirme Önerileri
İşte Kimball'ın önerileri :
- İş gereksinimleri ve amaçlarına odaklanmak yerine teknoloji ve dataya takılmayın.
- Veri ambarı işini destekleyenlerin makul bir yönetim vizyonuna sahip olmaması veya işi yeterince sahiplenmemesi sorun olabilir.
- Kolay yönetilebilir, ilgi çekici devam edecek proje yerine, çok büyük, yıllar sürecek ve çaba gerektiren projeler ile mücadele etmeyin.
- Dimensional modellere dayanan kullanışlı bir görsellik yaratmadan, normalize edilmiş veri yapılarına enerji harcamayın.
- Arka plandaki operasyonel performans ve geliştirme kolaylığından fazla, ön yüzün kullanım kolaylığı ve performansına önem vermeyin.
- Belki sorgulanabilir diye, görsel katmanı fazla karmaşık yapmayın. Veritabanı tasarımcıları, karmaşık sorgular yerine, kullanıcıların basit ihtiyaçlarını karşılarlar ise daha fazla takdir edilirler.
- Ortak, birbirine bağlanabilen dimension tablolarından oluşan veri mimarisi yerine tek başına kullanılabilecek dimension tablolarından oluşan yapılar kurun.
- Görsel alandaki dimension yapılarına sadece özet data yükleyin.
- Bir işin gereksinimlerinin, altındaki verinin ve işin yapıldığı teknolojinin statik olduğunu varsayın.
- Veri ambarının başarısının kullanıcının işi benimsemesiyle ilgili olduğunu unutmayın. Kullanıcı, veri ambarını karar vermenin temeli olarak kabul etmezse tüm çabalarınız boşa gider.
Inmon ve Kimball'ın Data Warehouse Modellemeleri
Inmon'un yaklaşımı, klasik ilişkisel veritabanı araçları ve yöntemleri kullanılarak yapılan "top-down development" üzerine kurulu.
Inmon, data warehouse'u daha büyük bir bilgi ortamının bir parçası olarak görüyor. Bu büyük bilgi ortamına da CIF (Corporate ınformation Factory) adını veriyor. Data warehouse'un daha büyük ortamlara iyi uyum sağlaması için, bir atomik bir de birimlere özel veri tabanı olması gerektiğini savunuyor.
Inmon'ın yöntemleri sadece IT uzmanları tarafından aktif olarak kullanılabilir durumda. Son kullanıcılar geliştirme aşamasında aktif rol oynamıyor. Kısacası Inmon'un yaklaşımı daha teknik bir yaklaşım.
Operasyonel (Transactional) sistemlerde işlenen veri, gerekli şekillerde düzenlenerek (Bu işleme ETL deniyor) atomik veritabanına taşınıyor. Her bir departman için, ihtiyaca göre ayrı bir veritabanı tasarlanıyor ve bu veritabanları temel verileri atomik veritabanından alıyor. Böylece departmanların aldıkları raporlar arasında veri uyumsuzluğu sorunu olmuyor.
Kimball'in yaklaşımı ise geleneksel veritabanı tasarım metodlarından farklı. "Bottom - up" yaklaşımı ile her iş süreci için ayrı bir data mart oluşturmayı tavsiye ediyor. Tüm bu data mart ların toplamı ise kuruluşun data warehouse U oluyor. Çeşitli data mart'lar arasında iletişim kurmak için de "data bus" dediği ve tüm data Mart'ların standarta uygun veri boyutları ile modellenmesini gerektiren bir mimari öneriyor.
Verinin son kullanici tarafindan daha rahat anlasilmasi ve performans nedeniyle Normalizasyon kurallarının gecerli olmadigi Dimensional veri modeli tasarimlarda çok merkezi rol oynuyor. Dimensional modelde iki çeşit tablo oluyor. Fact tablolar, çok fazla satırdan olusan ancak buna karşılık az kolon içeren foerign key ve metrik ölçüm dısında bir veri tutmayan tablolara deniyor. Dimension tablolar ise fact tablolardaki verinin detaylarını ve ozelliklerini tutan tablolar ve fact e göre daha az satır içermelerine rağmen yüzlerce kolondan oluşabiliyorlar.
Inmon ve Kimball' in modellerinin benzer noktaları da var.Her ikisi de farklı yöntemlerle de olsa zaman özelliği tutmak gerektiğini savunuyor. Her iki model de verilerin transactional sistemden aktarılırken standartlastirilmasi ve düzenlenmesini oneriyor (ETL)
Hangi modelin kullanılacağı tamamen ihtiyaclara ve isin yapısına göre verilecek bir karar.
Makeleyi okumak için : http://www.bi-bestpractices.com/view-articles/4768