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

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

변경된 테이블 이름 복구하기

 

  • Version : SQL Server 2008, 2008R2, 2012

 

실수로 테이블 이름을 변경 하였다. 어떻게 복구 할까?

 

이번 시간에는 실수로 변경한 테이블 이름을 복구하는 방법을 살펴본다. 백업 본이 있으면 기존의 백업 본을 보고 테이블 이름을 찾을 수 있지만 백업이 없거나 라이브 중인 경우에는 다음과 같은 방법을 사용 할 수 있다. (물론 방금 수정한 테이블의 이름은 기억력으로 다시 되돌려 놓으면 된다. 하지만 내가 모르는 수정이 발생 하였을 경우 매우 유용할 듯 하다.)

 

변경된 이름을 찾는 방법은 트랜잭션 로그에서 변경 된 사항을 찾아서 이전의 테이블 이름과 변경 된 테이블 이름을 찾는 것이다.

DECLARE

@Date_From DATETIME='1900/01/01',

@Date_To DATETIME ='9999/12/31'

 

Select

    S.type_desc As [Object Type],

    REPLACE(Substring(A.[RowLog Contents 0] ,14,LEN(A.[RowLog Contents 0])),0x00,0x) as [Object Name Before Rename],

    REPLACE(Substring(B.[RowLog Contents 0] ,14,LEN(B.[RowLog Contents 0])),0x00,0x) as [Object Name After Rename]

FROM sys.fn_dblog(NULL, NULL) A

    Inner Join sys.fn_dblog(NULL, NULL) B

        On A.[Transaction ID]=B.[Transaction ID] And A.AllocUnitId = B.AllocUnitId

    Left Join sys.objects S

        On CONVERT(BIGINT,CONVERT(VARBINARY(MAX) ,REVERSE(Substring(A.[RowLog Contents 0],7,4))))=S.object_id

WHERE A.AllocUnitId IN (562949955649536)

    AND A.Context IN ('LCX_MARK_AS_GHOST')

    AND A.Operation IN ('LOP_DELETE_ROWS')

    AND B.Context IN ('LCX_INDEX_LEAF')

    AND B.Operation IN ('LOP_INSERT_ROWS')

/*Use this subquery to filter the date*/

    AND A.[TRANSACTION ID] IN (SELECT DISTINCT [TRANSACTION ID] FROM sys.fn_dblog(NULL, NULL) WHERE Context IN ('LCX_NULL') AND Operation IN ('LOP_BEGIN_XACT') AND [Transaction Name]='user_transaction' AND CONVERT(NVARCHAR(11),[Begin Time]) BETWEEN @Date_From AND @Date_To)

GO

 

 

 

참고자료에서는 데이터 값이 잘 나타나는데 필자가 실습한 내용에서는 정상적인 데이터가 나타나지 않는다. SQL 2008, 2008R2, 2012에서 실습한 결과 아래 그림과 같았다. (문제 해결 후 포스트 수정 예정)

 

 

[참고자료]

http://raresql.com/2013/12/24/sql-server-how-to-recover-the-accidentally-renamed-object-name/

 



강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp

No. Subject Author Date Views
1911 Memory Pressure jevida(강성욱) 2016.10.12 1123
1910 64비트 버전의 SQL Server 버퍼 풀 메모리 페이지 수 줄이는 방법 jevida(강성욱) 2016.10.12 2472
1909 누락된 공유 잠금 (Missing Shared Locks) jevida(강성욱) 2016.10.12 1565
1908 Ad Hoc Distributed Queries 옵션 jevida(강성욱) 2016.10.12 3104
1907 높은 MAXDOP은 쿼리를 느리게 만들 수 있는가? jevida(강성욱) 2016.10.12 1308
» 변경된 테이블 이름 복구하기 jevida(강성욱) 2016.10.12 1308
1905 Sys,dm_exec_connections jevida(강성욱) 2016.10.12 1935
1904 SQL Server 시작 매개 변수 설정 jevida(강성욱) 2016.10.12 2492
1903 AFTER 트리거를 INSTEAD OF 트리거로 변경 후 효율성 향상 jevida(강성욱) 2016.10.12 1790
1902 쿼리 대기 옵션 jevida(강성욱) 2016.10.12 1575
1901 Index create memory 설정 jevida(강성욱) 2016.10.12 1236
1900 Min memory per query 옵션 jevida(강성욱) 2016.10.12 1690
1899 SQL Server 에디션 다운그레이드와 제한된 기능 확인 jevida(강성욱) 2016.10.12 2124
1898 Downgrade from SQL Server Ent to Std Edition jevida(강성욱) 2016.10.12 1344
1897 트랜잭션 로그 여유 공간 모니터링 jevida(강성욱) 2016.10.12 1356
1896 SQL Server가 서비스 격리를 처리하는 방법 jevida(강성욱) 2016.10.12 1145
1895 쿼리 매개변수화 확인하기 jevida(강성욱) 2016.10.12 1435
1894 SQL Server에서 Drop 및 Delete 사용자 찾기 jevida(강성욱) 2016.10.12 1630
1893 SQL Server 트랜잭션 로그 읽기 jevida(강성욱) 2016.10.12 2098
1892 MaxBCPThreads에 따른 BCP 병렬출력 jevida(강성욱) 2016.10.11 1090





XE Login