문서화 되지 않은 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

 

 

 

실제 물리적인 데이터가 저장된 정보를 확인 할 때 매우 유용하게 사용 할 수 있는 기능인 듯 하다.



강성욱 / jevida@naver.com

Microsoft SQL Server MVP

Blog : http://sqlmvp.kr

Facebook : http://facebook.com/sqlmvp

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 14481
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 8885
1694 SQL Server SP_Congifure 변경 사항 캡처 jevida(강성욱) 2016.09.13 2098
1693 SQL Server Net Libraries jevida(강성욱) 2016.09.13 1150
1692 SQL Server 별칭 설정 및 사용 jevida(강성욱) 2016.09.13 2850
1691 SQL Server에 연결된 어플리케이션 드라이버 버전 확인 jevida(강성욱) 2016.09.13 967
1690 SQL Server 성능 대시보드 jevida(강성욱) 2016.09.13 2350
1689 SSMS를 이용한 데이터베이스 복사 하기 jevida(강성욱) 2016.09.13 11833
1688 SQL Server에서 DB2 링크드 서버 연결 방법 jevida(강성욱) 2016.09.13 3448
1687 SQL Server 인덱스 활성 / 비활성 하기 jevida(강성욱) 2016.09.13 2436
1686 파티션 오프셋과 SQL Server에 대한 디스크 할당 단위 크기 jevida(강성욱) 2016.09.13 1797
1685 Read the End of a Large Error Log (에러로그 끝 부분 읽기) jevida(강성욱) 2016.09.13 1339
1684 데이터베이스 여유공간 확인 jevida(강성욱) 2016.09.13 1492
1683 FILE GROUP 간 데이터 이동 jevida(강성욱) 2016.09.13 1638
» 문서화 되지 않은 sys.fn_PhysLocFormatter 함수 jevida(강성욱) 2016.09.13 1009
1681 SQL Server 관리자 전용 연결(DAC) jevida(강성욱) 2016.09.13 3574
1680 파일 접근 권한으로 인한 DB복원 실패 작업 해결하기 jevida(강성욱) 2016.09.13 2059
1679 DBCC CHECKDB 실행과 히스토리 관리 jevida(강성욱) 2016.09.13 1895
1678 MDF를 이용한 데이터베이스 복원 jevida(강성욱) 2016.09.13 1201
1677 EventID 3041 Error jevida(강성욱) 2016.09.13 1532
1676 데이터베이스 미러 백업 jevida(강성욱) 2016.09.13 1357
1675 SNAPSHOT을 이용한 SQL Server 복원 jevida(강성욱) 2016.09.13 2608





XE Login