BACKUP DATABASE AdventureWorks
TO DISK = 'c:\Adv.bak'
WITH INIT, COMPRESSION;
GO
WITH INIT - 덮어쓰기
COMPRESSION - 압축
WITH FORMAT - 헤더정보는 그대로 있고 그 안에만 압축해주기 대문에 FORMAT으로 재구성
EXEC sp_configure 'backup compression default', 1;
GO
RECONFIGURE;
GO
*디폴트로 압축하는 옵션
SSMS UI로도 가능
6-15
백업한 파일을 미러링하는 옵션
6-17
RESTORE FILELISTONLY 를 많이 사용함 (파일정보를 볼 수 있음)
![]() |
6-19

이와 같은 이력정보는 MSDB에 들어있다

커맨드로도 확인가능하다

HEADERONLY헤더 정보만 확인
LSN은 로그가 쌓일때 시퀀셜하게 쌓이는 번호

FILELISTONLY
6-21
사용자가 사용하지 않는 시간에 백업
페이지를 읽어서 카피하는 것이기 때문에 I/O가 많이 발생한다.(COMPRESSION옵션을 쓰면 I/O를 줄일 수 있다) 대신 CPU를 많이 사용
일반 백업중일 때에는 사용자에게 사용중일 수 있어야한다. (DB가 보이는 온라인 상태여야 한다)
6-22
Copy-only Backups
테스트데이터를 만들 때 많이 사용, WITH COPY_ONLY 옵션사용
6-23
Tail-log Backups
복원하기전에 백업받지 못한 트랜잭션로그의 테일로그 백업을 하라
full backup + trx log backup + tail log backup
CONTINUE_AFTER_ERROR 옵션을 사용하면 tail log 백업
//디비를 완벽하게 복원하기위해 풀백업모드 변경
ALTER DATABASE dblog SET RECOVERY FULL;
GO
-- Step 4: Perform a full database backup.
BACKUP DATABASE dblog
TO DISK = 'c:\MSSQL\dblog_full.bak'
WITH INIT;
GO
//디비에 문제가 생겼기 때문에 다음과 같이는 백업이 되지않는다
BACKUP LOG dblog
TO DISK = 'c:\MSSQL\dblog.trn'
WITH INIT;
GO
//tail log backup , CONTINUE_AFTER_ERROR 옵션을 사용
BACKUP LOG dblog
TO DISK = 'c:\MSSQL\dblog.trn'
WITH INIT, CONTINUE_AFTER_ERROR;
GO
Module7.Restoring
Simple리커버리 모델 - 완전 복구는 아님(심플리커버리 뒤의 로그 복구x)
full리커버리 모델 - 완전복구 수행가능
특정 로그까지만 - incomplete recovery 불완전 복구
damaged file only - 깨진 파일만 복구(2008버전부터)
7-8
Restoring 백업받은 파일을 원래 위치로 가져오는것 (백업시점)
Recovery 현재 시점까지 올려면 로그를 적용(마지막시점)
7-9
Data copy 풀백업했던 때로 복원
Redo 로그 적용
Undo 커밋되지 않은 것은 롤백
*redo,undo를 포함 Recovery
7-11
db가 온라인되기전에는 recovery가 끝나야한다
with recovery - restore가 끝나면 database online (default)
with norecovery - 아직 뒤에 적용할 로그가 남아있기 때문에 database를 online 안한다(풀복원 이후에 적용할게 남아있다면 이 옵션을 계속 써줘야한다 )
7-13
full , differential 백업은 RESTORE DATABASE 명령
d 백업은 마지막 것만
뒤에 남은게 있다면 with norecovery
7-14
with move 를 사용하면 다른위치에 복원을 하는 것이다.
7-16
with standby 옵션은 리커버가 진행중일 때에도 읽기전용으로 접근가능하게
왜? 복구 중이라 읽을 수가 없기 때문에..
[a] [b]
full backup ------> recovery
log ------> 따라가자
log ------> with standby
스탠바이 서버 구성할때 적용.. (로그 쉽핑기능)??????????
7-18 Restoring Databases 실습
-시나리오1
DBLog
full backup
변경
문제
tail-log backup
-시나리오2
Market Yield
full backup
변경
differential backup
변경
transaction log backup
변경
differential backup
변경
transaction log backup
.
.
.
복원 시나리오1 DBLog
데이터베이스 상태확인, PENDING 상태
풀백업 복원하고 상태확인 RESTORING 중이다
왜? WITH NORECOVERY 옵션을 줬기 때문에...(뒤에 아직 복원해야할 로그가 있다)
tail log 복원
with recovery 옵션으로 복원해서 바로 온라인으로 돌아가도록 한다
복원한 DB 사용, 복원된 데이터 5천건이 들어와있는지 확인
7-19 Lesson3
마킹을 하고 마킹을 한 곳까지만 백업하는 방법
time / mark
7-20
point in time recovery
내가원하는 시점 언제까지만 멈추고 백업
full recovery model 사용해야함
7-21
WITH STOPAT = time 옵션
지정된 시간까지만 리커버리를 하고 멈춘다.
7-24
STOPATMARK (트랜잭션에 이름 지정)
BEGIN TRAN (NAME) WITH MARK (DECRIPTION) - 트랜잭션지정
-STOPATMARK 옵션으로 사용(마크지정한 곳까지 복구해라)
-STOPATBEFOREMARK (마크지정한곳 전까지 복구해라)
RESTORE LOG RTest
FROM DISK = 'c:\mssql\RTest.trn'
WITH RECOVERY, STOPATMARK = 'PriorToInsert';
GO
7-26
UI를 통한 백업은 다음과 같은 절차로
옵션에서 NORECOVERY 옵션으로..(트랜잭션 로그까지 해야하니)
DB 모양이 바뀐다(복원중...) 리스토어 중(FULL BACKUP) + 리커버리(REDO,UNDO)까지 해야한다.
복원에 트랜잭션로그가 활성화 되어있다
트랜잭션 로그에서 하단에 지정된 시간이나, 마킹한 부분까지(표시된 트랜잭션) 선택해서 복원할 수 있다.
7-28
4가지 DB들도 백업을 해야한다.(TEMPDB는 재시작만해도됨)
7-30
1 MASTER디비가 깨지면 싱글유저 모드로 접근(디비의 구조가 바뀔때마다 꼭 백업받아야함)
2 RESTORE DATABASE
3 SQLCMD
4 RESTART SQL SERVER
7-32
파일그룹은 왜 따로 만드나? 관리를 편하게 하려고 편의상..지정하지않으면 PRIMARY만 만들어짐 디폴트로..
Module8. Importing and Exporting Data
8-3
대용량의 data를 sql server로 넘길때 indexes / constraints 를 disable 하고 작업하라
8-6
데이터를 넘길때 쓰는 5가지의 툴
Bulk copy Program(bcp)
-os에서의 데이터파일(엑셀) sql로 밀어넣을때 bcp를 사용(그 반대로도)
Bulk insert
-bcp하곤 다르다, t-sql로써 수행. db에 종속되어있는 t-sql, 또한 bcp는 추출/입력 다 되는 반면에 , 벌크 인서트는 db에 밀어넣기만 가능하다
Openrowset
import/export wizard
xml Bulk load
8-8
데이터전송에서 퍼포먼스를 올리려면?
1 constraints, indexes,triggers 를 비활성해라
2 locking 을 최소화해라
3 table전체를 lock 시켜라 (mssql은 row레벨로 락을 건다) - 사용자가 잠시 안써도되면..
sql은 row 레벨로 lock을 걸지만, 임계치이상으로 락이 걸리면 페이지 단위로 락킹을 건다. (오라클은 무조건 row레벨)
*락테스트
*교착 상태는 시스템에서 알아서 처리해준다
8-10
데이터를 마이그레이션할때는 index를 disable 해야한다
index를 enable하게되면 index는 자동적으로 리빌드 된다
동작하고 있는 동안 메타데이터는 계속 운영상태가 된다.
8-11
primary key(중복되지 않는 유일한 null이 아닌값) , unique constraints(제약조건) 역시 disable하는게 좋다. foreign key 와 check 역시 disable하는게 좋다.
PRIMARY KEY - 중복되지 않은 NULL이 아닌 값만 허용 ( = UNIQUE + NOT NULL)
FORIEGN KEY - 부모의 테이블에 존재하는 데이터만 자식 테이블에 허용
NOT NULL - NULL 값 허용하지 않음( NULL = 모르는 값, 공백X, 숫자0도X)
CHECK - 특정 조건을 만족하는 데이터만 허용 (ex. Salary < 100000)
UNIQUE - 중복되지 않는 값만 허용
8-16 SSIS
이 툴을 통해서 데이터를 추출 변환 등의 작업을 할 수 있다
*SSIS 를 잘 쓰면 MSSQL - ORACLE - MYSQL 마이그레이션이 가능하다
// 여기까지 Data Export , Import