기존 Windows용 MS SQL의 기본패키지를 설치하면, 유지관리라는 항목으로 UI 기반으로 DB 유지관리를 위한 다양한 옵션을 제공하는 기능이 있었다. 그런데, 이번에 Linux에 설치하는 것까지는 좋았는데, 저 유지관리 기능이 없어, DB 백업 부터 부가적인 기능(오래된 파일 삭제, Index 정리 등등)을 할 수 없게 되었다.
여러가지 내용을 MS SQL 관련되어 백업 정보를 찾기는 했는데, 문제가 대부분 Windows에 대한 내용이였고, 거기서는 염장 지르듯 "유지관리"의 마법사를 사용해서 설정하라는 그런 내용이였다.

그러다가, 질의응답이 담긴 해외사이트 중에서 MS SQL Utility라고 해서 알려주는 사이트가 있었다.

https://ola.hallengren.com/

 

SQL Server Backup, Integrity Check, Index and Statistics Maintenance

SQL Server Backup, Integrity Check, and Index and Statistics Maintenance The SQL Server Maintenance Solution comprises scripts for running backups, integrity checks, and index and statistics maintenance on all editions of Microsoft SQL Server 2008, SQL Ser

ola.hallengren.com

처음에는 무슨 별도 exe나 dll을 제공하나 싶었는데, SQL이였다.
정말 SQL로 도구를 만들었다.

일단 항목으로는 다음과 같다.

일단, 저 SQL 파일을 다운로드 받도록 한다. 
그리고 실행해서 master DB 안에 저장프로시저로 생성해주도록 한다.
만일 DatabaseBackup.sql 을 넣는다면, CommandExecute.sql을 같이 실행해서 두 개의 저장프로시저를 넣어주어야 정상적으로 실행된다. 만일 특정 프로시저를 찾을 수 없는 경우에는 메시지 창에서 원하는 모듈을 원하니 오류 발생시 꼭 찬찬히 살펴보도록 한다.

원하는 저장 프로시저가 등록되었다면, MS SQL Agent를 통해서 자동 실행 및 스케쥴을 잡은 뒤,
실행할 쿼리를 다음과 같이 만들어 넣는다.

EXECUTE master.dbo.DatabaseBackup
@CleanupTime = 336,
@Databases = 'USER_DATABASES',
@DirectoryStructure = '{DatabaseName}_{BackupType}',
@AvailabilityGroupDirectoryStructure = NULL,
@BackupType = 'FULL',
@CleanupMode  = 'BEFORE_BACKUP',
@FileName = '{DatabaseName}_{Year}{Month}{Day}_{Hour}{Minute}.{FileExtension}'

첫줄은 백업을 위한 저장프로시저를 실행한다는 내용이고,
그 뒤의 파라미터를 넣도록 한다. 파라미터의 자세한 설명은 https://ola.hallengren.com/sql-server-backup.html 에서 확인하고, 일단 필자가 설정한 내용 설명으로 갈음한다.

  • @CleanupTime : 기준은 시간이고 저 시간 전의 파일들을 모두 삭제한다.
  • @Databases : 원하는 DB 이름을 설정할 수도 있고, 사용자 DB, 똑는 시스템 DB 백업을 할 수 있다. 옵션은 역시 위의 URL에서 자세히 살펴볼 수 있다. 
  • @DirectoryStructure : 백업될 DB 별로 하위에 폴더를 만들어줄 때 형태를 의미한다. 사실 NULL로 하면 백업 설정한 위치에 모든 백업파일을 넣어주는데, 만일 @CleanupTime을 설정하려면 어떠한 구조든 {DatabaseName}과 {BackupType} 옵션을 넣어주어야 한다. Linux 이니 폴더 경로를 "/"로 구분해야 하니, {DatabaseName}/{BackupType} 로 설정해도 되고, 그 외의 여러가지 옵션을 넣을 수 있는데, 그건 알아서 설정하며 된다. 여튼 Cleanup 설정을 위해서는 두가지 내용이 들어가야 한다는 것이다.
  • @AvailabilityGroupDirectoryStructure : 자세한 설명은 보지 않았고, 별 필요 없는 옵션 같아 NULL로 설정했다.
  • @BackupType : 백업 유형으로, 전체, 차등 뭐 그런 것들인데, 이 옵션도 설명을 보고 원하는 형태로 설정한다.
  • @CleanupMode : Cleanup을 백업 전에, 후에 할지를 묻는 내용인데, 여기서는 이전에 하는 것으로 했다.
  • @Filename : 최종 백업 파일을 어떻게 만들지를 설정하는 부분인데, 문서를 보면서 원하는 형태로 구성하면 된다. 단순하게 DatabaseName과 FileExtention만 설정하면 파일 이름이 겹쳐지기 때문에, 가급적이면 백업 순간 때마다 다른 값이 될 수 있도록 구성하는 것을 추천한다.

저 도구를 쓰니, Linux 버전의 MS SQL에서도 잘 백업이 되는 것 같다.
고민이 많이 되었는데, 저것으로 충분히 적용되니 다행으로 생각한다. 

728x90

+ Recent posts