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

-- MSSQL 2009. 6. 19. 18:47
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
나중에 필요할 수 있을 것 같아 미리 정리해둡니다.
석이님의 위트있는 주석은 일부 삭제했습니다 ^^.


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=

'-- MSSQL' 카테고리의 다른 글

인덱스를 타지 않는 경우  (0) 2009.08.03
Oracle vs MSSQL  (0) 2009.07.10
SQL Server 2000 Wait Types  (0) 2009.06.19
DELETE와 TRUNCATE의 차이점  (0) 2009.06.19
SQL Injection (SQL 인젝션)에 대한 보안  (0) 2009.06.17
posted by 어린왕자악꿍