데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

문서화 되지 않은 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
1690 SQL Server 성능 대시보드 jevida(강성욱) 2016.09.13 2201
1689 SSMS를 이용한 데이터베이스 복사 하기 jevida(강성욱) 2016.09.13 10837
1688 SQL Server에서 DB2 링크드 서버 연결 방법 jevida(강성욱) 2016.09.13 3249
1687 SQL Server 인덱스 활성 / 비활성 하기 jevida(강성욱) 2016.09.13 2308
1686 파티션 오프셋과 SQL Server에 대한 디스크 할당 단위 크기 jevida(강성욱) 2016.09.13 1675
1685 Read the End of a Large Error Log (에러로그 끝 부분 읽기) jevida(강성욱) 2016.09.13 1298
1684 데이터베이스 여유공간 확인 jevida(강성욱) 2016.09.13 1445
1683 FILE GROUP 간 데이터 이동 jevida(강성욱) 2016.09.13 1601
» 문서화 되지 않은 sys.fn_PhysLocFormatter 함수 jevida(강성욱) 2016.09.13 942
1681 SQL Server 관리자 전용 연결(DAC) jevida(강성욱) 2016.09.13 3313
1680 파일 접근 권한으로 인한 DB복원 실패 작업 해결하기 jevida(강성욱) 2016.09.13 1894
1679 DBCC CHECKDB 실행과 히스토리 관리 jevida(강성욱) 2016.09.13 1839
1678 MDF를 이용한 데이터베이스 복원 jevida(강성욱) 2016.09.13 1173
1677 EventID 3041 Error jevida(강성욱) 2016.09.13 1389
1676 데이터베이스 미러 백업 jevida(강성욱) 2016.09.13 1311
1675 SNAPSHOT을 이용한 SQL Server 복원 jevida(강성욱) 2016.09.13 2242
1674 복사 전용 백업(COPY ONLY BACKUP) jevida(강성욱) 2016.09.13 3267
1673 SQL Server 기본 백업 폴더 변경하기 jevida(강성욱) 2016.09.13 3982
1672 sp_helpindex 의 향상된 버전 minsouk 2016.05.17 4559
1671 Spatial Index (공간 인덱스) 생성, 수정, 삭제 jevida(강성욱) 2016.01.11 9200





XE Login