SQL Server ‘da Kayıdın Fiziksel Konumunu Buluruz ?

Bu gün yer vereceğimiz yazının ana mantığı Db ‘miz üzerinde tuttuğumuz verinin Fiziksel konumunu nasıl ve ne şekilde bulabiliriz sorusunu cevaplamak olacaktır.

İlk önce işlem yapacağımız Test veritabanımızı oluşturuyoruz.

CREATE DATABASE My_TestDB
GO
USE My_TestDB
GO
CREATE TABLE MY_Test_Table(MYID INT IDENTITY (1,1), NAME CHAR(500), LNAME CHAR(500))
GO
INSERT INTO MY_Test_Table VALUES ('Yusuf-1','Kahveci-1');
GO
INSERT INTO MY_Test_Table VALUES ('Yusuf-2','Kahveci-2');
GO
INSERT INTO MY_Test_Table VALUES ('Yusuf-3','Kahveci-3');
GO
INSERT INTO MY_Test_Table VALUES ('Yusuf-4','Kahveci-4');
GO
INSERT INTO MY_Test_Table VALUES ('Yusuf-5','Kahveci-5');
GO
INSERT INTO MY_Test_Table VALUES ('Yusuf-6','Kahveci-6');
GO
INSERT INTO MY_Test_Table VALUES ('Yusuf-7','Kahveci-7');
GO
INSERT INTO MY_Test_Table VALUES ('Yusuf-8','Kahveci-8');
GO
INSERT INTO MY_Test_Table VALUES ('Yusuf-9','Kahveci-9');
GO

Select * FROM MY_Test_Table

 


-- Oluşturduğumuz Tabloda ki kayıtların Fizksel konumuna bakalım.
select MYID, NAME,LNAME, {6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}lockres{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9} FileId_PageId_SlotId
from dbo.MY_Test_Table

 

 

1

 

Birinci kayıt için incelediğimizde ;

File_Id=1,

Page_Id=281,

Slot_Id=0

değerlerine sahiptir.

Burada {6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}lockers{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9} komutu ile bu veriye erişebiliyoruz. SQL Server 2008 ile hayatımıza giren {6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}physloc{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9} komutu ise HEX değer döndürmektedir. Aynı işlemi HEX değer olarak görmek istediğimizde ise ;

select MYID, NAME,LNAME, {6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}physloc{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9} Hex
from dbo.MY_Test_Table

2

Hex kolonunun ilk 4 Byte ‘ının kombinasyonu Page_Id değerini, sonraki 2 Byte ‘ının kombinasyonu File_Id değerini, esn sonda ki 2 Byte ‘ının kombinasyonu ise Slot_Id değerini verir.

T-SQL kodu ile bu verilere aşağıda ki Script ile detaylandırabiliriz.

 

select	 cast(convert (binary (4), reverse (substring ({6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}physloc{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}, 1, 4))) as int ) page_id
		,cast(convert (binary (2), reverse (substring ({6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}physloc{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}, 5, 2))) as int) file_id
		,cast(convert (binary (2), reverse (substring ({6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}physloc{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}, 7, 2))) as int) slot_id
from dbo.MY_Test_Table

3

SQL Server 20008 ile hayatımıza giren {6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}physloc{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9} komutunun ürettiği Hex değerini  sys.fn_physloccracker() fonksiyonu ile de çözümleyebiliriz.

 

select M.MYID, M.NAME,M.LNAME, PL.File_Id, PL.Page_Id, PL.Slot_Id
from dbo.MY_Test_Table M
cross apply sys.fn_physloccracker({6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}physloc{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9}{6189a1005e4f6dc613b8beb03d694ce50f0902974162d6a7dea944a970422cc9})  PL

4

 

 

Bu şekilde eriştiğimiz File_Id,Page_Id ve Slot_Id verilerini kullanarak Page yapısnı inceleyebiliriz.

Page yapısnı incelemek için DBCC Page komutunu kullanacağız.

 

DBCC PAGE ({dbid|dbname}, pagenum [,print option] [,cache] [,logical])

 

Page_Id : Veritabanı Id bilgisi veya Veritabanı adı ..

Page_Id : Page Id bilgisi

Print Option : Bu seçenek 0,1,2, ve 3 değerlerini almaktadır. Bunlar içerik detaylarını görüntüleme  seçenekleridir.

DBCC TRACEON (3604);
GO
DBCC PAGE ('My_TestDB', 1, 281, 3);
DBCC TRACEOFF(3604)

 

Bu komutu kullanarak Page yapısını detaylı bir şekilde inceleyebiliriz.

5

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

7

Leave a Reply

Your email address will not be published. Required fields are marked *