SQL Server Archives - En iyi C# kitabı
Üzerinde index bulunan bir tabloya kayıt eklendiğinde Page ve Row konumları nasıl etkilenir? Page Split ne zaman oluşur?
Birçok yerde indexlenmiş tabloya yeni kayıt eklendiğinde veya mevcut kayıt silindiğinde kayıtların adreslerinin fiziksel olarak değişip değişmediği sorusu gelmektedir. Bunu basit bir örnekle açıklayalım. UYE isminde bir tablo oluşturalım. ID alanı üzerinde Clustered Index oluşturalım. İlk kayıt olarak ID=4 olarak “D” ifadesini ekleyelim.
CREATE TABLE UYE(UyeId INT PRIMARY KEY, AdSoyad VARCHAR(2000))
INSERT UYE VALUES(6,REPLICATE('G',1000))
DBCC IND(‘BLOG’, ‘UYE’, -1) komutuyle sayfalarını listelediğimizde 144 nolu bir data page’in oluştuğunu görüyoruz. Bu sayfanın içeriğine DBCC PAGE(BLOG,1,144,1) komutuyla bakalım. Eklenen satırın konumuna bakmak için Page içerisinde “OFFSET TABLE:” bölümüne baktığımızda bu kaydın adresinin 96 olarak görüyoruz.
SQL Server, Oracle içinde Index, Page, Page Split, Row, SQL Programlama, SQL Server etiketleriyle 20 Ağustos 2013 tarihinde Ahmet Kaymaz tarafınadan gönderildi.
Bundan önce SQL Server mimarisini anlattığımız yazılardan table ve index datasının içeriğinin nasıl depolandığını biliyoruz. Peki Stored Procedure, View, Function, Trigger benzeri nesneler nerede store ediliyor. Bunlar tabiki MDF içerisinde aynı mantıkta Page’ler içerisinde saklanmaktadır. Bu nesneler System Base Tables olarak tanımlanan sistem tablolarında tutulmaktadır. Bu tablolar mevcut veri tabanlarına ait metadata bilgisini saklar. Bu tablolar kullanıcı erişimi için değil SQL Server Database Engine tarafından kullanılır. Bu tablolar ancak Dedicated Administrator Connection (DAC) bağlantısıyla erişilebilir. Okumaya devam et →
SQL Server, Oracle içinde Function, SQL Programlama, SQL Server, SQL Server mimari, Stored Procedure, View etiketleriyle 16 Ağustos 2013 tarihinde Ahmet Kaymaz tarafınadan gönderildi.
Boot Page Nedir? Birçok kişi SQL Server’da Boot Page bozulma sorununu yaşamıştır. Her veri tabanı kendisi hakkında kritik bilgileri içeren bir Page’a sahiptir. Bu page FileId=1 ve PageId=9 olarak oluşturulur. Bu sayfanın en önemli özelliği sözkonusu veri tabanını başlangıcını temsil ediyor olmasıdır. Bu sayfanın bozulması durumunda hiçbir şekilde o veri tabanı ayağa kaldırılamaz, DBCC CHECKDB gibi yöntemler de fayda sağlamaz. Page (1:9)’da corrupt oluşması durumunda yapılacak tek şey elimizdeki yedekten Restore işlemi yapmaktır.
DBCC PAGE(BLOG, 1, 9, 3) komutu aracılığıyla BLOG isimli veri tabanının başlangıç sayfasını dump etmiş oluruz. Page’in içeriğinde veri tabanının ilk oluşturulduğu versiyonu, şu anki sunucunun versiyonu (dbi_Version ve dbi_CreateVersion), son (Full, Log, Differential) backup alma zamanı, yedeğin alındığı LSN numarası (Log Sequence Numbers), dirty pages LSN numarası, DBCC CHECKDB en son ne zaman başarıyla çalıştığı (dbi_DBCCLastKnownGood) gibi bilgiler bulunmaktadır.
Bu bilgilere aynı zamanda DBCC DBINFO komutuyla da erişebiliriz.
DBCC DBINFO('BLOG') WITH TABLERESULTS
Boot Page’in bozulması durumunda aşağıdaki gibi bir hata mesajı ile karşılaştırız.
SQL Server detected a logical consistency-based I/O error: incorrect checksum (expected: 0xcdee22fa; actual: 0xcb6ea2fa). It occurred during a read of page (1:9) in database ID 19 at offset 0x00000000013000 in file ‘C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\BLOG.mdf’. Additional messages in the SQL Server error log or system event log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online.
SQL Server, Oracle içinde DBCC, DBCC CHECKDB, DBCC IND, DBCC PAGE, SQL Programlama, SQL Server, SQL Server mimari etiketleriyle 12 Ağustos 2013 tarihinde Ahmet Kaymaz tarafınadan gönderildi.
SQL Server veri tabanı mimarisi serisinin dördüncü bölümünde Table ve Index nesnelerinin nasıl oluşturulduğu, MDF içerisinde nasıl konumlandırıldığını detaylandıracağız. Bu amaçla temel olarak aşağıdaki kavramları incelemiş olacağız.
SQL Server Table, Heap, B-Tree (Balanced Search Tree), Index
SQL Server, Oracle içinde Clustered Index, Columnstore Index, Covering Index, DBCC, DBCC IND, DBCC PAGE, Heap, Index, Non Clustered Index, SQL Programlama, SQL Server, SQL Server mimari, Table etiketleriyle 29 Temmuz 2013 tarihinde Ahmet Kaymaz tarafınadan gönderildi.
Tüm Veri Tabanlarından Erişilebilen Prosedür
Tüm veri tabanlarından erişilebilen prosedür yazmak için küçük bir düzenleme yapılması yeterlidir.
Birçok makalede SQL Server’de Stored Procedure isimlendirilmesinden “sp_” ile başlamaması tavsiye edilir. Bunun temel sebebi bu ön ek ile başlayan bir prosedür tam path bilgisiyle çalıştırılmadığı zaman öncelikle sisteme ait bir prosedürmüş gibi aranılır yani master veritabanının altında arama yapılır. Bu da zaman kaybı olduğu için “sp_” ile başlamaması tavsiye edilir.
Bu küçük detayı kendimiz için bir avantaja dönüştürebiliriz. Tüm veri tabanlarından erisilebilecek bir prosedür hazırlamak istersek master veritabanının altında “sp_” ile başlayacak şekilde isimlendirip CREATE etmemiz yeterli olacaktır.
C#, VB.NET, ASP.NET içinde master database, SQL Server, Stored Procedure etiketleriyle 02 Temmuz 2012 tarihinde Ahmet Kaymaz tarafınadan gönderildi.