SQL Server는 크게 3가지 에디션으로 나뉜다. 

Standard, Enterprise, Express 인데, 이 중 Express 는 무료버전이며, 공짜여서 그런지(?) SSMS(SQL Server Management Studio)[Maintenance Plans] (유지 관리 계획) 을 활용하여 자동으로 백업 스케줄링 하는 기능을 사용할 수 없다.

그래서 이번 포스팅에서는 Express 에디션으로도 자동 백업 스케줄링을 할 수 있는 방법에 대해 알아보려고 한다!

 

SQL Server Express 에디션에서 자동 백업 스케줄링 하는 방법은 크게

[SQL 쿼리 파일 생성] -> [sqlcmd로 해당 쿼리 파일 정상 작동 확인] -> [윈도우의 Task Scheduler 설정] 의 과정을 거친다. 아래에서 하나하나 살펴보도록 하자!


  1. SQL 쿼리 파일 생성
    USE AdventureWorks2019;
    
    DECLARE @DateString VARCHAR(30)		-- 'DateString' 이라는 변수 선언
    DECLARE @dbName NVARCHAR(30) = N'AdventureWorks2019'		
    -- NVARCHAR 타입은 VARCHAR 타입과 달리 유니코드를 지원.
    -- 'dbName' 변수에 백업시키려는 DB 이름을 넣을 것임.
    
    DECLARE @bakName NVARCHAR(50) = N'\Daily_Full_AdvenTest_'
    -- 'bakName' 변수에 백업파일의 이름이 될 문자열을 넣을 것임.
    
    DECLARE @bakDir NVARCHAR(150) = N'C:\SQL_Backup\Manual_BACKUP'
    -- 'bakDir' 변수에 백업파일이 생성될 디렉토리를 문자열로 넣을 것임.
    
    SET @DateString = 		-- 백업파일명 뒤에 MMDDhhmmss 형태로 넣어주기 위한 DateString 설정
    (
        SELECT FORMAT(DATEPART(mm, GETDATE()), '00')
        -- FORMAT(인자, '00') : 인자를 두 자릿수로 만들겠다.
        -- DATEPART(mm, GETDATE()) : 현재 날짜에서 '월'만 추출하겠다.
        + FORMAT(DAY(GETDATE()), '00')
        -- DAY(GETDATE()) : 현재 날짜에서 '일'만 추출하겠다.
        + REPLACE(CONVERT(VARCHAR(8), GETDATE(), 108), ':', '')
        -- REPLACE(인자, '특정문자열1', '특정문자열2') : 인자에서 '특정문자열1'을 '특정문자열2'로 변경하겠다.
        -- CONVERT 날짜 형식 함수로, 구글링 참고!!
    )
    SET @bakName = @bakName + @DateString + '.bak'
    SET @bakDir = @bakDir + @bakName;
    
    BACKUP DATABASE @dbName
    TO DISK = @bakDir
    WITH INIT, STATS=10;
    
    
    -- TO DISK = '원하는 경로 설정(파일명.bak까지 반드시 들어가야 함)'
    
    -- INIT 옵션 : 백업 작업이 백업 미디어의 기존 백업 세트에 추가되는지 덮어씌우는지 여부를 제어.
    -- NOINIT - 기존 백업 세트에 추가 / INIT - 기존 백업 세트에 덮어씌우기.
    
    -- STATS 옵션 : 해당 값의 퍼센티지마다 SSMS 결과 메시지로 출력하겠다.
    -- ex) STATS=10 => 백업이 10퍼센트 완료될 때마다 SSMS 결과 메시지로 출력함.​
    위와 같은 백업 쿼리문을 작성하고 해당 쿼리를 파일로 저장한다. 이때 저장되는 위치를 반드시 기억해야 한다!
    (쿼리 파일의 확장자명은 .sql 이다.)

  2. sqlcmd 로 해당 쿼리 파일 정상 작동 확인
    Task Scheduler 에 등록하기 전에, 우선 sqlcmd 로 해당 백업 쿼리 파일이 제대로 실행되는 지를 확인해야 한다.
    cmd에서 sqlcmd를 테스트 한 화면
    cmd (명령 프롬프트 창)을 실행하여 아래 명령어를 입력해준다.

    sqlcmd -S 127.0.0.1,1433 -E -i C:\Users\Administrator\Desktop\SQL_Server_Query\풀백업_테스트.sql

    -S : [프로토콜명]:[서버 호스트네임 or IP],[해당 서버 서비스 Port]
    ex) tcp:127.0.0.1,1433

    -E :
     trusted connection 옵션.
    -i :
    inputfile 옵션. 이 옵션 뒤에 [쿼리 파일명.sql]을 입력.
    ex) C:\~ 경로 : 백업 쿼리 파일이 저장된 디렉토리 입력.

    'BACKUP DATABASE successfully' 라는 메시지를 확인했으니, sqlcmd로 해당 쿼리 파일이 정상 작동되었음을 확인할 수 있다!

  3. 윈도우의 Task Scheduler (작업 스케줄러) 설정
    Task Scheduler (작업 스케줄러) 실행
     
    [Create Task] (작업 만들기) 실행


    [General] (일반) 탭 - 내가 알아볼 수 있게끔 작업 이름 입력


    [Triggers] (트리거) 탭 - 새로 만들기 - 원하는 옵션 설정
    나는 위와 같이 Daily에 1일로 지정하여 매일 일정시간에 백업되도록 설정하였다.


    [Actions] (동작) 탭 - 새로 만들기 - [Start a program] 선택 - "sqlcmd ~" 입력 - [백업쿼리 파일 디렉토리] 입력

    동작에서는 쉽게 생각해서 2번에서 했던 동작을 등록해주는 과정이라고 보면 된다!
    [Start a program] 을 선택한 후,
    Program/script: 란에 sqlcmd -s 127.0.0.1,1433 -E -i 를,
    arguments 란에 C:\Users\Administrator\Desktop\SQL_Server_Query\풀백업_테스트.sql 를 입력해준다.

    여기까지 하면 작업 스케줄러 등록까지 완료된다. 작업 스케줄러 등록이 완료 되었다면,
    해당 시간에 실제 백업 작업이 잘 진행되었는지, 수정 시간을 통해 반드시 확인해보길 바란다!


참고

https://seodavi.tistory.com/48

 

MS SQL Express 자동 백업 스케줄러 설정

중소기업이나 데이터 양이 많지 않은 기업에서 무료 버전인 Express 버전을 사용하기도 합니다. SQL SERVER Express 버전은 기본적으로 스케줄러 기능이 없기 때문에 윈도우 스케줄러를 통한 자동 백업

seodavi.tistory.com

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기