하지만 복구 할 수 있는 길은 열려있었으니..
1. 로그와 데이터 모두 살아있을 때 복구법 : sp_attach_db ‘DB명’, ‘경로\파일명.mdf’ , ‘경로\파일명_log.ldf’
2. 데이터 파일만 살아있을 때 복구법 : sp_attach_single_file_db ‘DB명’, ‘경로\파일명.mdf’
3. 데이터 파일만 남기고 삭제하고 싶을때 : sp_detach_db
이 방법들은 정상적으로 종료가 되었을때만 사용 가능하다.
번개를 맞아서 컴퓨터가 다운되었다면, 이 방법은 안통한다.
그런일이 있다면 다행히 ldf파일만 손상을 입고 mdf파일은 손상을 입지 않았다면 복구 할 수 있는 방법이 있다.
- 원래 DB와 동일 이름의 DB를 생성한다. (mdf 파일명과 크기도 같게..)
- 생성한 DB를 긴급 모드로 변경한다. : alter database dbname set emergency
- SQL 서버를 멈춘다.
- 생성한 DB의 mdf,ldf파일을 삭제하고 복구할 mdf파일들을 복사해온다.(로그파일 제외)
- SQL 서버를 재시동한다.
- 오브젝트와 데이터들이 관리자에게 접근가능하지만, 여전히 백업도 안되고 온라인상태가 되지도 않는다.
- 스크립트 생성 마법사로 모든데이터 오브젝트를 스크립트로 만든다.(스크림팅 오브젝트 권한,의존 오브젝트들,인덱스들 포함;파일로 내보낸다.)
- 새로운 두번째 DB를 생성한다.
- 새로운 DB에서 모든 오브젝트가 생성되 때까지 여러번 스크립트를 실행한다.
- 데이터 불러오기 마법사로 모든 살아있는 테이블을 새로운 DB에 넣는다.
- 새로운 DB를 백업하고 긴급모드에 들어가있는 DB에 복원한다.
If you undergo lost your all data for thunder..
That’s really crap.
But we have open way.
1. Have mdf&ldf : sp_attach_db ‘DB name’, ‘path\fileName.mdf’ , ‘path\fileName_log.ldf’
2. Have mdf only : sp_attach_single_file_db ‘DB name’, ‘path\fileName.mdf’
3. Wanna delete DB except mdf : sp_detach_db
However, it just general cases.
If you got thunder, it’s impossible
But, If you have good mdf file, refer to the following Steps~
- Create a new database with the same name and logical file names
- Put this database in emergency mode: alter database dbname set emergency
- Stop SQL Server
- Delete the new database’s mdf and ldf files, replace with a copy of the
rescued mdf (no log)
- Restart SQL Server
- Objects and data are now accessible to one administrator, though this
database still cannot be backed up or brought online
- Use the Generate Scripts wizard to script all database objects (include
scripting object permissions, dependent objects, indexes; output to a file)
- Create a second new database
- Run the object creation script in the new database two or three times
until all objects are created, making adjustments if necessary
- Use the Import Data wizard to copy data from all rescued tables into the
new database
- Backup the new database and restore it in place of the emergency db
END!