SUSPECT -> EMERGENCY (원인분석 & 복구처리) ->NORMAL
2005
ALTER DATABASE yourDBname SET EMERGENCY -- 응급상태로 변경 // read-only로 표시,로깅비활성,sysadmin만 액세스
DBCC CheckDB ('yourDBname') -- 문제점 파악
ALTER DATABASE yourDBname SET SINGLE_USER WITH ROLLBACK IMMEDIATE -- Repar 하려면 싱글유저 상태여야한다.
DBCC CheckDB ('yourDBname', REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE yourDBname SET MULTI_USER
ALTER DATABASE yourDBname SET ONLINE
http://www.codeproject.com/kb/reporting-services/sql_2005_suspect_database.aspx
http://lazydeveloper.net/2567064
-- 2k0의 SP_ATTACH_DB_SINGLE_FILE_DB 와 동일
CREATE DATABASE DB명
ON (NAME='DB명', FILENAME='c:\aa.mdf')
FOR ATTACH_REBUILD_LOG
-- 2k0의 dbcc rebuild_log와 동일
ALTER DATABASE dbname REBUILD LOG ON
(NAME=logname, FILENAME='LDF파일경로\logname.ldf')
2000
응급모드 변경
USE MASTER
GO
EXEC SP_CONFIGURE 'ALLOW UPDATES',1
GO
RECONFIGURE WITH OVERRIDE
GO
UPDATE SYSDATABASES SET STATUS=STATUS|32768 WHERE NAME ='DBNAME' -- 응급모드 설정
DBCC REBUILD_LOG('DBNAME', 'H:\MSSQL\DATA\DBNAME_LOG2.LDF') -- 로그파일 재생성
DBCC CHECKDB('DBNAME') -- 원인분석
UPDATE SYSDATABASES SET STATUS=STATUS&~32768 WHERE NAME ='DBNAME' -- 응급모드 해제
EXEC SP_RESETSTATSUS 'DBNAME' -- 주의 대상 모드 해제
DBCC DBRECOVER('DBNAME', IGNOREERRORS) -- DB 재시작, 오류발생해도 복원처리
Alter Database TestDB Set single_user with rollback immediate -- 단일 사용자 모드 설정
DBCC CHECKDB('DBNAME', REPAIR_ALLOW_DATA_LOSS) -- 손상된 페이지 복구
DBCC CHECKDB('DBNAME') -- 복구 확인
ALTER DATABASE yourDBname SET MULTI_USER WITH NO_WAIT -- 단일 사용자 모드 해제
EXEC SP_CONFIGURE 'ALLOW UPDATES',0
GO
RECONFIGURE WITH OVERRIDE
GO
create database 디비명 on (filename = 'C:\파일명.mdf') for ATTACH_REBUILD_LOG;
[참고] Rebuild_log 서스펙트 suspect (sqlmvp) |작성자 왕눈봄이
-- 1. 먼저 시스템 카탈로그를 수정 할 수 있게 해 줍니다.
Use master
Go
Sp_configure 'allow update', 1
Reconfigure with override
Go
-- 2. 해당 DB를 응급 모드(32768 = emergency mode)로 변경 합니다.
update sysdatabases set STATUS=STATUS|32768 where name = 'db_name'
-- 3. SQL 서비스를 재시작 합니다. 재시작 후 해당 DB를 보면 응급모드로 나오게 된다.
-- 서비스 재시작 작업시 서비스 중지 후 시작 전에 기존 LDF 파일을 리네임 또는 Copy하여 반듯이 Backup
-- 4. 로그 파일 재 생성
dbcc rebuild_log ('db_name' , 'ldf 파일의 물리적 경로')
-- ex) dbcc rebuild_log ('TestDB' , 'D:\MSSQL\DATA\testdb_log.ldf')
-- 이 상태 까지 진행을 하게 되면 DB의 Ldf 파일이 초기화 되면서 DB는 DBO만 사용상태로 활성화 됩니다. 그러면 이제 DB를 보통 모드로 바꾸는 작업을 합니다.
-- 5. DB의 상태를 먼저 확인 합니다.
Select status From sysdatabases
-- 이때 아까 복구한 DB의 상태가 '2048 = dbo use only' 상태로 되어 있을 것 입니다.
-- 6. 복구한 DB의 status 복원.
update sysdatabases set status=STATUS&~32768 where name = 'db_name'
--?? sp_resetstatus
-- 7. EM을 재연결 하면 DB의 상태가 보통으로 변경 됨을 확인 할 수 있습니다.
-- 8. 이제 DB를 다시 먼저 시스템 카탈로그를 수정 할 수 없게 변경해 줍니다.
Use master
Go
Sp_configure ‘allow update’, 0
Reconfigure with override
Go
-- 여기까지 진행이 되었으면 이제는 DB 일관성 검사를 진행 하여 잘 못된 부분이 없는지 확인 합니다.
-- 9. DBCC Checkdb
-- 일관성 오류가 있는지 검사 합니다.
-- 10. 일관성 오류를 수정하기 위해 user를 싱글 유저로 변경 합니다.
Alter Database TestDB Set single_user with rollback immediate
-- 11. 오류를 수정 합니다.
DBCC CheckDB('db_name', REPAIR_ALLOW_DATA_LOSS)
-- Ex) DBCC CheckDB ('TestDB' , REPAIR_ALLOW_DATA_LOSS)
-- 12. 오류를 수정 하였다면 다시 DBCC Checkdb 를 수행 합니다.
-- 13. 오류가 더 이상 없다면 user모드를 다시 변경 하여 줍니다.
User master
go
Alter Database TestDB Set multi_user
go
-- 작업 완료
'etc' 카테고리의 다른 글
Microsoft_볼륨라이선스의 Qualifying OS("적격 운영 체제") 및 OS 다운그레이드 (0) | 2011.11.14 |
---|---|
“Start Office! Smart Office” 프로모션!(2011.10.07~10.31)(프로모션종료) (0) | 2011.10.17 |
SQL Server 2008에서 트랜잭션 로그 잘라 내기(Log Truncation) (0) | 2011.10.17 |
Noise Industries - FxFactory Pro (0) | 2011.09.24 |
Symantec Backup Exec의 에이전트 특징 및 지원옵션 (0) | 2011.09.19 |
댓글