본문 바로가기

sql server

[ms sql] 백업 및 복원방법



-- 1. 백업파일 가지고 이전상태로 복원 할 경우. 
use master

--DB파일 (bkuptest : 복구시 DB명)
restore database bkupTest from disk ='d:\DB_Backup\DB\test000\test000_db_200402031540.bak'
WITH NORECOVERY -- 이후 복구할게 더 있으므로

--LOG파일
restore LOG bkupTest from disk ='d:\DB_Backup\DB\test000\test000_db_200402031540.trn'
WITH RECOVERY -- 복구작업의 마지막 이므로..


-- 2-1.백업파일 가지고 새로운 디비로 복원 할 경우.(새로운MDF/LDF 생성 후 실행) - DB파일만복원 - (전체백업파일 사용)
use master

restore database bkuptest from disk = 'D:\임시폴더\DB백업\bkuptest_backup_200810220230.bak'
with recovery, replace,  --replace는 강제 복구 엎어쓰기 옵션(기존MDF와 복구할 MDF의 위치가 다를 경우사용.)
move 'bkuptest' to 'D:\임시폴더\DB백업\bkuptest.mdf', -- move 논리적파일명은 백업파일의 파일명임 (FILELISTONLY 으로 확인)
move 'bkuptest_log' to 'D:\임시폴더\DB백업\bkuptest_log.ldf'
go

-- 2-2.백업파일 가지고 새로운 디비로 복원 할 경우.(새로운MDF/LDF 생성 후 실행) - DB파일과 LOG파일까지 복원
use master

restore database bkuptest from disk = 'D:\임시폴더\DB백업\bkuptest_backup_200810220230.bak'
with norecovery, replace,
move 'bkuptest' to 'D:\임시폴더\DB백업\bkuptest.mdf',
move 'bkuptest_log' to 'D:\임시폴더\DB백업\bkuptest_log.ldf'

restore LOG bkuptest from disk ='D:\임시폴더\DB백업\bkuptest_backup_200810220400.trn'
WITH NORECOVERY
restore LOG bkuptest from disk ='D:\임시폴더\DB백업\bkuptest_backup_200810220800.trn'
WITH RECOVERY -- 복구작업의 마지막
go

-- 2-3.백업파일 가지고 새로운 디비로 복원 할 경우.(새로운MDF/LDF 생성 후 실행) - DB파일만복원 - (전체백업+차등백업파일 사용)
use master

restore database DB명 from disk = 'D:\임시폴더\DB백업\bkuptest_backup_2016_09_19_090733_9308822.bak' --전체백업파일
with norecovery, replace,
move 'bkuptest' to 'D:\임시폴더\DB백업\backup_test\bakup-test.mdf',
move 'bkuptest_log' to 'D:\임시폴더\DB백업\backup_test\bakup-test_log.ldf'
RESTORE DATABASE DB명 FROM DISK='D:\임시폴더\DB백업\bkuptest_backup_2016_09_19_091316_8627667.dif' --최근차등백업파일
WITH RECOVERY 
go

-- 3.백업파일 가지고 새로운 다른디비에 복원 할 경우.(MDF/LDF 없이 바로 실행)
use master

--FILELISTONLY 실행하여 백업파일에 저장된 MDF/LDF의 기존 논리적 이름을 확인하여 복원시 사용한다.
RESTORE FILELISTONLY 
   FROM DISK = 'D:\임시폴더\DB백업\bkuptest_backup_200810220230.bak'
go 

restore database bkuptest from disk = 'D:\임시폴더\DB백업\bkuptest_backup_200810220230.bak'
with recovery, replace,
move 'bkuptest_Data' to 'D:\backup\bkuptest\bkuptest_Data.MDF',
move 'bkuptest_log' to 'D:\backup\bkuptest\bkuptest_Log.LDF'
go

-- 4.DB 분리 후 MDF/LDF 를 그대로 복원 할 경우.
use master
go

-- DB분리
sp_detach_db 'bkuptest' 
go 

-- DB복원
sp_attach_db 'bkuptest','D:\임시폴더\DB백업\bkuptest.mdf',
'D:\임시폴더\DB백업\bkuptest_log.ldf'
go 

-- 5.DB 분리 후 MDF 만을 가지고 복원 할 경우.
use master
go
sp_attach_single_file_db 'bkuptest','D:\임시폴더\DB백업\bkuptest.mdf'
go

--6.상기 sp_attach_single_file_db 로 복원되지 않을경우. 강제로 LDF파일 생성하는 방법.
use master
go

CREATE DATABASE bkuptest
ON (FILENAME = 'D:\임시폴더\DB백업\bkuptest.mdf')
FOR ATTACH_FORCE_REBUILD_LOG
go

-- 스크립트파일로 복원 방법
관리자권한으로 cmd 열고
sqlcmd -S SERVERNAME -d MYDATABASE -U USERNAME -P PASSWORD -i C:\path\mysqlfile.sql -o C:\path\results.txt

-- 6. 네트웍드라이브에 백업 방법
첫째, MS-SQL 시작계정을 네트웍상의 계정과 동일하게 맞춘다.
둘째, 경로는 .. '\\컴퓨터명\c$\tempdir'  식으로 접근한다.

-- 전체백업 (COMPRESSION 생략시 비압축)
BACKUP DATABASE bkuptest TO disk = '\\컴퓨터명\c$\temp\tests.bak'
WITH INIT, COMPRESSION, NAME = 'tests'

-- 차등백업 
BACKUP DATABASE bkuptest TO disk = '\\컴퓨터명\c$\temp\tests.dif'
WITH DIFFERENTIAL, COMPRESSION

-- 압축률 확인
SELECT backup_start_date, backup_size, compressed_backup_size, CONVERT(nvarchar(50), cast (100.0 * compressed_backup_size / backup_size AS DECIMAL (5, 1))) + '%'
FROM msdb..backupset
where database_name = 'bkuptest' and type = 'D'
order by backup_start_date desc

-- 복원시 RECOVERY 옵션으로 종료되지 못한경우 (증상 : DB가 복원중 으로 표시됨)
RESTORE DATABASE bkuptest WITH RECOVERY

-- 백업파일의 백업시간 정보확인
Restore HeaderOnly From Disk = 'd:\database\test.bak'


-- DB 복원후 사용자 계정 매핑
--분리된 사용자 찾기
exec sp_change_users_login 'Report'

--계정 생성 후 매핑
USE master  
GO 
CREATE LOGIN 계정 
WITH PASSWORD = '계정비밀번호',
DEFAULT_DATABASE = 기본DB;
GO  

USE 기본DB  
GO
EXEC sp_change_users_login 'Update_One', '계정', '계정';  
GO  

-- 백업날짜 확인 (type: D-풀,I-차등,L-로그)
select database_name, backup_finish_date, * from msdb.dbo.backupset B
where database_name = 'test_db' and type = 'D' order by B.backup_finish_date desc

-- 백업파일 검증.(실제 복원되지 않음. 정확도 100% 아님)
RESTORE VERIFYONLY FROM DISK = 'd:\backup_file.bak'

 

'sql server' 카테고리의 다른 글

[ms sql] 잠금현상 조회  (0) 2019.11.11
[ms sql] 인덱스 조각화  (0) 2019.11.04
[ms sql] 쿼리 로그 조회  (0) 2019.08.09
[ms sql] 데이터 및 로그파일(mdf, ldf) 용량 축소  (0) 2019.03.05
[MS SQL] 서버 이름 변경하기  (0) 2019.02.26