문서화 되지 않은 sys.fn_PhysLocFormatter 함수
- Version : SQL Server 2008, 2008R2, 2012
어떠한 이유로 인하여 데이터가 비정상적으로 저장 되었거나 데이터를 select 하였는데 반환된 값이 정상적이지 않을 경우 우리는 DBCC PAGE 명령어를 이용하여 페이지 레벨에서 저장되어 있는 값을 확인 한다. 이 때 실제 SELECT 된 데이터의 상관관계를 확인할 수 있는 방법이 없을까? 문서화 되어 있지는 않지만 sys.fn_PhysLocFormatter를 이용하여 확인 할 수 있다.
sys.fn_PhysLocFormatter 함수가 어떤 기능을 하는지 알아 보자.
sp_helptext 'sys.fn_physLocFormatter' |
Text --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------- -- Name: sys.fn_PhysLocFormatter -- -- Description: -- Formats the output of %%physloc%% virtual column -- -- Notes: ------------------------------------------------------------------------------- create function sys.fn_PhysLocFormatter (@physical_locator binary (8)) returns varchar (128) as begin
declare @page_id binary (4) declare @file_id binary (2) declare @slot_id binary (2)
-- Page ID is the first four bytes, then 2 bytes of page ID, then 2 bytes of slot -- select @page_id = convert (binary (4), reverse (substring (@physical_locator, 1, 4))) select @file_id = convert (binary (2), reverse (substring (@physical_locator, 5, 2))) select @slot_id = convert (binary (2), reverse (substring (@physical_locator, 7, 2)))
return '(' + cast (cast (@file_id as int) as varchar) + ':' + cast (cast (@page_id as int) as varchar) + ':' + cast (cast (@slot_id as int) as varchar) + ')' end |
물리적 위치를 확인 하기 위해 다음 함수를 호출하여 TBL_A라는 테이블을 조회 하였다. 다음과 같이 물리적인 주소를 확인 할 수 있다.
SELECT sys.fn_PhysLocFormatter(%%physloc%%) as [Physical RID], * FROM TBL_A |
[Physical RID]열은 데이터의 물리적인 위치를 나타낸다.
1 : 데이터베이스 파일
55 : 파일 내의 페이지 (테스트하는 사용자 마다 다름)
0 : 슬롯 번호
따라서 나의 경우에는 TBL_A의 데이터가 55페이지 및 78페이지에 데이터가 저장된 것을 확인 할 수 있다.
DBCC PAGE명령어를 이용하여 데이터 페이지를 확인 할 수 있다.
DBCC TRACEON (3604) DBCC PAGE(SW_TEST, 1, 55, 1) WITH TABLERESULTS |
실제 물리적인 데이터가 저장된 정보를 확인 할 때 매우 유용하게 사용 할 수 있는 기능인 듯 하다.
2012-11-22 / 강성욱 / http://sqlmvp.kr
'SQL Server > SQL Server Tip' 카테고리의 다른 글
데이터베이스 여유공간 확인 (0) | 2015.07.17 |
---|---|
FILE GROUP 간 데이터 이동 (0) | 2015.07.17 |
SQL Server 관리자 전용 연결(DAC) (0) | 2015.07.17 |
파일 접근 권한으로 인한 DB복원 실패 작업 해결하기 (0) | 2015.07.17 |
DBCC CHECKDB 실행과 히스토리 관리 (0) | 2015.07.17 |