-- MSSQL

특정테이블을 날렸을 때 복구방법

어린왕자악꿍 2009. 6. 19. 18:47
나중에 필요할 수 있을 것 같아 미리 정리해둡니다.
석이님의 위트있는 주석은 일부 삭제했습니다 ^^.


ALTER DATABASE testdb SET RECOVERY full
-- 이라는 전제 하에서 설명 합니다.

backup database testdb to disk = 'c:\testdb.bak' with noinit
-- 이런 파일도 있다고 생각 하겠습니다.
-- 이제부터 사고 치겠습니다.

select count(*) from dbo.tbl_idxTemp
-- 99개 있음

select getdate()
-- 현재시간 2005-09-03 15:54:14.030

delete from dbo.tbl_idxTemp
select * from dbo.tbl_idxTemp
-- 한마리도 없습니다. ㅠ.ㅠ 죽었습니다. 땀 납니다.

BACKUP LOG testdb TO DISK='c:\testdblog' WITH NO_TRUNCATE, INIT
-- 로그를 백업 합니다.
-- 리스토어 할때 다른 디비로 리스토어 합니다.

-- sp_helpdb testdb
-- 복구정보 확인 합니다.

-- C:\Program Files\Microsoft SQL Server\MSSQL\data\testdb.mdf
-- C:\Program Files\Microsoft SQL Server\MSSQL\data\testdb_log.LDF


RESTORE FILELISTONLY FROM DISK = 'c:\testdb.bak'
에서 LogicalName 을 확인합니다. -_-;
이렇게 하면 원래의 백업 이름을 알 수 있습니다.


LogicalName
-------------
testdb
testdb_log


RESTORE DATABASE testdb_fail
FROM DISK='c:\testdb.bak'
with norecovery
,move 'testdb' to 'c:\c.mdf'
,move 'testdb_log' to 'c:\c.ldf'
,replace


RESTORE LOG testdb_fail FROM DISK='c:\testdblog'
WITH STOPAT=' 2005-09-03 15:54:14.030', RECOVERY


use testdb_fail
go

select count(*) from dbo.tbl_idxTemp
-- 99

이제부터는 땀좀 식히고 이걸 원본 디비로 밀어 넣으시면 되겠습니다.
관계 설정도 다시 해주시고요~

출처 : http://sqler.pe.kr/web_board/view_list.asp?id=685&read=4252&pagec=26&gotopage=26&block=2&part=myboard7&tip=