2010년 1월 14일 목요일

백업과 복구 query문

select * from UserInfo
select * from UserLog
--백업장치를 먼저만든다.
--o disk : 하드 디스크로 덤프 받음을 의미합니다.(이외에 pipe, tape 등이 있습니다)
--o SQLWORLD : 논리적인 백업 장치 명입니다.
--o c:\backup\kim.bak : 물리적인 파일의 경로와 파일명입니다.


-----------------------------------------
----이미 장치가 있으면 삭제한다.
EXEC sp_dropdevice 'SQLWORLD'
EXEC sp_dropdevice 'SQLWORLD_diff'
exec sp_dropdevice  'SQLWORLD_log_dump'
--------------------------------------------
USE master
GO

EXEC sp_addumpdevice 'disk', 'SQLWORLD', 'c:\backup\kim.bak'
EXEC sp_addumpdevice 'disk', 'SQLWORLD_diff', 'c:\backup\kim_diff.bak'
------------------------------------------
--예제1
--o kim 데이터베이스를 SQLWORLD 라는 백업 장치로 백업을 받습니다.
--o WITH INIT 옵션은 기존의 백업 내용이 있으면 덮어 쓰라는 설정입니다.
------------------------------------------------------------
USE Master
GO
BACKUP DATABASE kim TO SQLWORLD WITH INIT
------------------------------------------------
--예제2
--o kim 데이터베이스를 SQLWORLD 라는 백업 장치로 백업을 받습니다.
--o WITH NOINIT 옵션은 기존의 백업 내용을 보존하고
--거기에 추가하여 백업 받으라는 설정입니다. 결국 백업
--파일의 사이즈는 증가하게 됩니다. INIT 이나 NOINIT을
--설정하지 않으면 NOINIT이 기본으로 적용됩니다.
--------------------------------------------
USE Master
GO
BACKUP DATABASE sqlworld TO SQLWORLD WITH NOINIT
------------------------------------------------
--예제3
--o kim 데이터베이스를 c:\data\kim.bak 라는 물리적인 파일로 백업을 받습니다.
--o 앞의 [예제 1]과 [예제 2]와는 다르게 TO 대신 TO DISK 로 바뀌었음을 숙지하시기 바랍니다.

---------------------------------------
USE Master
GO
BACKUP DATABASE kim TO DISK = 'c:\data\kim.bak' WITH NOINIT
---------------------------------------------------
--여기서부터 전체백업받은것을 복원시키기위한방법
--예제1복원
--o kim 데이터베이스를 SQLWORLD 라는 백업 장치로부터 복원합니다
-----------------------------------------------
USE Master
GO
RESTORE DATABASE kim FROM SQLWORLD
--------------------------------------------
--예제2 복원
--kim 데이터베이스를 c:\data\kim.bak 라는 물리적인 파일에서 직접 복원 합니다.
------------------------------------------
USE Master
GO
RESTORE DATABASE kim FROM DISK = 'c:\data\kim.bak'
------------------------------------------------

--차등백업을받기위해 데이터추가해본다
--[예제 1] 샘플 데이터 추가 존재하는테이블로수정할것
-------------------------------------------
use kim
go
select * from m

delete m
insert  m values(1,'a')

INSERT INTO m VALUES(2,'40')
INSERT INTO m VALUES(3,'50')
INSERT INTO m VALUES(4,'60')
------------------------------------------
--첫번째 차등백업수행
--첫번째 차등 백업을 수행했습니다. NOINIT을 준 이유는
--앞에서 백업받은 전체 백업을 보존하기 위해서 입니다.
--INIT으로 하게 되면 전체 백업 내용이 사라집니다.
-----------------------------------
USE Master
GO
BACKUP DATABASE kim TO SQLWORLD_diff WITH DIFFERENTIAL, NOINIT
---------------------------------------
--또 데이터 추가
--[예제2 ] 샘플 데이터 추가
-----------------------------------------
use kim
go
INSERT INTO m VALUES(6,'70')
INSERT INTO m VALUES(7,'80')
INSERT INTO m VALUES(8,'90')
-------------------------------------------
--o 두번째 차등 백업을 수행합니다.
------------------------------
USE Master
GO
BACKUP DATABASE kim TO SQLWORLD_diff WITH DIFFERENTIAL, NOINIT
----------------------------
--첫번째차등백업 에서 두번째차등백업까지의 과정에서 몇가지 데이터의
--변화가 있었고 우리는 전체 백업 한번과 두번의 차등 백업의
--과정으로 데이터베이스를 백업 받은 상태입니다. 이 시점에서
--문제가 발생하여kim 데이터베이스를 복원해야 한다고
--가정을 하고 복원 작업을 하도록 하겠습니다.
----------------------------------------
--트렌젝로그백업
--다음과 같이 스크립트를 이용해서 col1 컬럼이 6보다 작은 다섯개의
--레코드에 대하여 name 컬럼을 전부 'XXXXX' 로 변경하였습니다.
-------------------------------------------
use kim
go
UPDATE m SET name = 'XXXXX' WHERE id < 6
GO
select * from m
--------------------------------------------------
--로그백업장치만들기
--이루어진 변경 처리를 로그 백업을 받도록 하겠습니다.
--로그 백업을 위해 새로운 백업장치 SQLWORLD_log_dump 를 만들어
--이 장치에 로그를 백업 받도록 하겠습니다.
--단순복구모델로 되어 있어서 안된다고함
---------------------------------------------------

EXEC sp_addumpdevice 'disk', 'SQLWORLD_log_dump', 'c:\backup\kim_log.bak'
GO
----------------------------------------------------------
--로그백업받기
---------------------------------------------------p336

BACKUP LOG kim TO SQLWORLD_log_dump WITH NO_TRUNCATE, INIT
GO
-------------------------------------------------
USE Master
GO
ALTER DATABASE kim SET RECOVERY simple  --단순모델백업수정
ALTER DATABASE kim SET RECOVERY full  --전체모델백업수정
--pubs DB를 대량 로그 모델로 바꾼다.
ALTER DATABASE kim SET RECOVERY bulk_logged  --대량로그모델수정

----------------------------------------------------
exec sp_dboption 'kim','trunc. log on chkpt', 'false'
----------------------------------------------------
--데이터베이스 삭제
use master
go
drop database kim

use kim
go
select * from m
---------------------------------------------------
--전체백업복구
--차등백업복구
--로그백업 복구
-----------------------------------------------
use master
go
restore database kim from SQLWORLD with norecovery
restore database kim from SQLWORLD_diff with file=1, norecovery
restore database kim from SQLWORLD_diff with file=2, norecovery
RESTORE LOG kim FROM SQLWORLD_log_dump WITH file=1,RECOVERY

GO
------------------------------------------------------
/*로그백업을 못하는 상황이라면 이 때는 전체 데이터베이스 백업을
해야하고 대신 쌓이는 로그를 정기적으로 지워 주어야 한다.*/
-------------------------------------------
backup log devpia with truncate_only
또는
backup log dbname with no_log
---------------------------------------------
--파일또는 파일 그룹으로 부터 복구하기
--다음과 같이 db를 만들경우
-----------------------------
use master
go
create database ss
on
primary
        (name='TestPrimary2',
         filename='c:\data\TestPrimary22.mdf',
         size=1,maxsize=10,filegrowth=1 ),

filegroup UserGrop1
      (name='testdata1',
       filename='c:\data\testdata11.ndf',
       size=1mb,
       maxsize=10,
       filegrowth=1),
     (name='testdata2',
      filename='c:\data\testdata22.ndf',
      size=1mb,
      maxsize=10,
      filegrowth=1)
  log on
(name='TestLog1',
  filename='c:\data\TestLog11.ldf',
  size =1,
  maxsize=10,
  filegrowth=1)

-------------------------------------
EXEC sp_addumpdevice 'disk', 'Fillbackup', 'c:\backup\fillbackup.bak'
EXEC sp_addumpdevice 'disk', 'Primarybackup', 'c:\backup\primarybackup.bak'
EXEC sp_addumpdevice 'disk', 'Logbackup', 'c:\backup\logbackup.bak'
-----------------------------------------------------------------
--파일백업
--프라이머리 파일 백업
------------------------------
backup database ss
file='TestPrimary2'  to Primarybackup
-------------------------------
--파일그룹백업
------------------------------
backup database ss
file='testdata1',file='testdata2',
filegroup='UserGrop1' to Fillbackup
------------------------------
--로그파일백업
------------------------------
backup log ss  to Logbackup WITH NO_TRUNCATE, INIT
-------------------------------------
drop database ss  --데이터베이스삭제
-------------------------------
--프라이머리파일 복원
--------------------------
use master
go
restore database ss file='TestPrimary2' from Primarybackup with norecovery
-----------------------------------
--세컨더리파일 복원
-------------------------------
use master
go
restore database ss file='testdata1', file='testdata2',
filegroup='UserGrop1' from Fillbackup with norecovery
--------------------------------
--로그파일 복원
----------------------------
restore log ss from Logbackup with recovery
------------------------------------
use ss  --확인
select * from sysobjects

댓글 없음:

댓글 쓰기