Database/MS-SQL

dbcc checkdb 옵션 관련 내용...

99iberty 2013. 7. 31. 17:53

 

* 주의대상에 빠진 DB 복구방법

http://www.codeproject.com/Articles/20333/How-to-Restore-SQL-Server-2005-Suspect-Database

 

* 2005에서 checkdb 수행 후 트랜잭션 로그 축소 실패

http://pjm187.tistory.com/194

 

* checkdb와 checktable로 손상된 테이블 복구하기

http://kojin777.tistory.com/101

 

 

alter database 테이블이름 set single_user

go

dbcc checkdb('테이블이름', repair_allow_data_loss)

go

alter database 테이블이름 set multi_user


최소 두번정돈 돌려주어야 찜찜한 노란색메세지를 볼수없이..초록색정상 쿼리실행 메세지를 볼수가있다.

<- 그렇다고 하니 한번만 돌리지 말고 두번정돈 돌려줘야 한다네용


http://msdn.microsoft.com/ko-kr/library/ms176064.aspx

이는 DBCC CHECKALLOC, DBCC CHECKTABLE 또는 DBCC CHECKCATALOG 명령을 DBCC CHECKDB와 별도로 실행할 필요가 없음을 의미합니다. 이러한 명령이 수행하는 검사에 대한 자세한 내용은 해당 명령의 설명을 참조하십시오.

 

 

REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD

DBCC CHECKDB 실행 시 검색된 오류를 복구하도록 지정합니다. 다음 복구 옵션 중 하나를 사용하려면 지정된 데이터베이스가 단일 사용자 모드여야 합니다.

REPAIR_ALLOW_DATA_LOSS

보고된 모든 오류를 복구합니다. 이러한 복구를 수행하면 일부 데이터가 손실될 수 있습니다.

REPAIR_FAST

이전 버전과의 호환성을 위해서만 구문을 유지 관리합니다. 복구 동작은 수행되지 않습니다.

REPAIR_REBUILD

데이터 손실 가능성이 없는 복구를 수행합니다. 여기에는 비클러스터형 인덱스의 누락 행 복구와 같은 빠른 복구 작업과 인덱스 다시 작성과 같이 시간이 오래 걸리는 복구가 모두 포함됩니다.

REPAIR_REBUILD는 FILESTREAM 데이터 관련 오류를 복구하지 않습니다.

중요 정보중요

REPAIR 옵션은 최후의 수단으로만 사용하십시오. 오류를 복구하려면 백업에서 복원하는 것이 좋습니다. 복구 작업이 수행될 경우 테이블 자체나 테이블 간에 존재할 수 있는 제약 조건이 고려되지 않습니다. 지정된 테이블이 하나 이상의 제약 조건에 관련되면 복구 작업 후에 DBCC CHECKCONSTRAINTS를 실행하는 것이 좋습니다. REPAIR를 사용해야 하는 경우 복구 옵션 없이 DBCC CHECKDB를 실행하여 사용할 복구 수준을 확인합니다. REPAIR_ALLOW_DATA_LOSS 수준을 사용하는 경우 이 옵션으로 DBCC CHECKDB를 실행하기 전에 데이터베이스를 백업하는 것이 좋습니다.

 

 

http://msdn.microsoft.com/ko-kr/library/ms176064(v=sql.90).aspx

 

msdn 내용중에서 2005 버전으로 다시 발췌한 거니까 위의 내용도 다시 한번 확인이 필요하다.

 

 

 

 

------------------------------------------------------------------------------------------------------

 

http://www.sqler.com/bSQLQA/124815

 

OS : Microsoft Windows 2003 Server / Enterprise Server
SQL : Microsoft SQL Server 2000 Standard / Enterprise Edition

DB 가 주의 대상 이더라구요.

응급 모드로 바꾸고

CHECKDB 하니까 오류가 많이 나오더라구요.

그래서 DBCC CHECKDB("ABC", REPAIR_ALLOW_DATA_LOSS) 했습니다.

한참 돌아 가다가

서버: 메시지 3908, 수준 16, 상태 1, 줄 1
"TmsDb" 데이터베이스는 복구 무시 모드이므로 BEGIN TRANSACTION을 실행할 수 없습니다.

메시지를 뿌리며 멈추네요...

데이터베이스 복구 무시 모드 라는게 뭔지 모르겠어요.

어떻게 해야 할까요?

 

-------------------------------------------------------------------------------------------------------------

 

이런 내용이 있었는데, 한번 확인은 필요할 것 같다. 복구 무시 모드인지 아닌지....

 

 

 

 

 

http://www.dbguide.net/db.db?cmd=view&boardUid=13769&boardConfigUid=9&categoryUid=216&boardIdx=66&boardStep=1

 

본문 내용중..

DBCC CHECKDB | CHECKTABLE
‘( 테이블 이름’, REPAIR_FAT
             | REPAIR_REBUILD
             | REPAIR_ALLOW_DATA_LOSS )

REPAIR_FAST : 클러스터드 인덱스의 별도 키를 복구하는 것과 같이 사소 하고
              시간이 소요되지 않는 복구 작업을 수행합니다. 이러한 복구는
              데이터 손실의 위험 없이 빨리 실행할 수 있습니다.

REPAIR_REBUILD :
                 REPAIR_FAST에서 이루어지는 모든 복구 작업을 수행하고
                 인덱스 다시 작성과 같이 시간이 소요되는 복구를 포함합니다.
                 이러한 복구는 데이터 손실의 위험 없이 실행할 수 있습니다.

REPAIR_ALLOW_DATA_LOSS :
                 REPAIR_REBUILD에서 수행하는 모든 복구 작업을 수행하며 할
                 당 오류, 구조적 행 오류나 페이지 오류, 손상된 텍스트 개체 삭제
                 를 수정하기 위한 행과 페이지의 할당 및 할당 취소가 포함 됩니
                 다. 이러한 복구를 할 경우 일부 데이터가 손실될 수 있습니다. 복
                 구 작업은 사용자가 변경 사항을 롤백할 수 있도록 사용자 트랜
                 잭션 내에서 수행합니다. 복구가 롤백되어도 데이터베이스에는
                 오류가 그대로 포함되므로 백업에서 데이터베이스를 복원해야
                 합니다. 제공된 복구 수준 때문에 오류 복구를 생략한 경우 해당
                 복구에 종속적인 모든 복구도 생략됩니다. 복구를 완료한 다음에
                 데이터베이스를 백업합니다.

 

 

손상된 데이터베이스를 복구하기 위해서 DBCC CHECKDB 또는 DBCC CHECKTABLE을 REPAIR_ALLOW_DATA_LOSS 복구 옵션과 함께 실행하게 되면 다음 구문에서 설명하는 바와 같이 손상된 1개 페이지의 할당이 취소되므로 3개 행 전체를 잃게 됩니다.

 

위와 같이 해당 옵션을 실행하게 되면 페이지 하나 할당 취소가 행 전체의 loss를 의미한다.

자세한 내용은 본문 내용을 참조해야 할 듯 싶다.

 

 

 

 

 

http://www.microsoft.com/korea/technet/sql/tuning_guide_developer03.mspx

 

손상된 데이터베이스 복구하기 (DBCC CHECKDB를 사용하여 오류 복구하기)

DBCC CHECKDB 명령어를 사용하면 특정 데이터베이스의 일관성(consistency)를 점검할 수 있습니다. DBCC CHECKDB 명령어는 데이터베이스 손상을 점검하는 주요 수단이며, 다음과 같은 사항들을 점검합니다.

- 인덱스 페이지와 데이터 페이지들이 제대로 연결되어 있는가
- 인덱스가 최신 상태이고, 제대로 정렬되어 있는가
- 포인트들이 일관성이 있는가 (Consistent)
- 각 페이지 상의 데이터가 최신 상태인가
- 페이지 오프셋이 최신 상태인가

 

[권고사항] REPAIR_ALLOW_DATA_LOSS 옵션을 사용하는 경우에는 명령어 수행 후에 다시 원래 상태로 복구할 수 있도록 하기 위해서 트랜잭션 내부에서 DBCC 명령어를 수행할 것을 권고합니다. 이와 같이 작업하면 복구 작업을 수행하고 결과를 확인한 다음에 필요한 경우에 롤백이 가능해집니다.