데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

SMO를 이용한 DB백업

우주인(김재훈) 2011.03.17 13:50 Views : 45009 Upvote:1

안녕하세요 우주인(김재훈)입니다.

 

어제 진행한 션에서 말씀드린 SMO 을 이용한 백업과 백업에 대한 약간의 응용부분에 대해 말씀드릴려고 합니다.

 

SMO에 대한 기본적인 소개는 제 블로그 중 "SMO 소개와 사용"(http://vstarmanv.tistory.com/151)  를 참고하시면

비교적 상세하게 나와 있습니다

 

우선 파워쉘의 DB관리 객체인 SMO을 이용하여 간단히 DB를 백업해보겠습니다.

#Varibles
$svr = "localhost"            #sql서버
$path = "E:\"                 #sql 백업파일 로컬 저장 경로
$dbName = "AdventureWorks"                                  #데이터베이스 이름


[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended")
[System.IO.Directory]::CreateDirectory($path) | out-null


$srv=New-Object ("Microsoft.SqlServer.Management.Smo.Server") $svr
$backup = New-Object ("Microsoft.SqlServer.Management.Smo.Backup")
$backup.Action = 'Database'


$backupDev=New-Object ("Microsoft.SqlServer.Management.Smo.BackupDeviceItem")
$backupDev.DeviceType='File'
$backupDev.Name=[System.IO.Path]::Combine($path, $dbName +".bak")
$backup.Devices.Add($backupDev)
$backup.Database=$dbName
$backup.SqlBackup($srv)

위의 스크립트를 진행하시면 "AdventureWorks" 데이터베이스에 대해  "E:\AdventureWorks.bak" 이라는 백업파일이 생성됩니다




MSSQL에 파워쉘을 이용하면 어떤점이 편리할까요?
다른 플랫폼에 비해 MSSQL은 자동화나 여러툴이 많이 제공되고 있어 MSSQL사용자에게 어필하기 쉽지 않은 것 같습니다.
그러나 여러 단계의 나눠진 반복작업을 한방에 한다면...
아래와 같은 스크립트는 유용할 것 같습니다.
절차는 간단합니다.
백업하고, 유효성체크, 스토리지에 저장하고 ,ftp에 업로드

#Varibles
$serverName = "localhost"         #sql서버
$backsvr = "xxx.xxx.xxx.xxx"      #백업스토리지 서버아이피
$backforder = "E"               #백업스토리지 서버의 경로
$ftpsvr = "ftp://사용자:비번@ftp.com"    #ftp 서버
$smtp = "smtp.test.com"                      #smtp 서버
$mailfrom = "admin@test.com"              #발신자
$mailto = "dba@test.com"                 #수신자
$path = "C:\"   #sql 백업파일 로컬 저장 경로
$dbName = "AdventureWorks"                                  #데이터베이스 이름



#기존 파일 삭제
if(Test-Path $path + $dbName + ".bak")
{
    remove-item $path $dbName + ".bak"
}



#모듈 로드
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | Out-Null

$svr = New-Object ("Microsoft.SqlServer.Management.Smo.Server") $serverName
$backup = New-Object ("Microsoft.SqlServer.Management.Smo.Backup")
$restore = New-Object ("Microsoft.SqlServer.Management.Smo.Restore")

$backup.Database = $dbName
$backup.Devices.AddDevice($path + $dbName + ".bak", "File")
$backup.Action="Database"
$backup.Initialize = $TRUE
$backup.SqlBackup($svr)
#~백업완료



#백업 실패시 알림
if(!(Test-Path $path + $dbName + ".bak")){
 $smtp = new-object Net.Mail.SmtpClient($smtp)
 $smtp.Send($mailfrom, $mailto, "백업실패", "백업이 실패했습니다.")
 Exit
}



#백업 유효성 검사
$restore.Devices.AddDevice($path + $dbName + ".bak", "File")
if (!($restore.SqlVerify($svr))){
 $smtp = new-object Net.Mail.SmtpClient($smtp)
 $smtp.Send($mailfrom, $mailto, "백업이 유효하지 않음", "백업을 실행했으나 결과파일이 유효하지 않습니다.")
 Exit
}


#스토리지에 저장
Copy-Item  $path + $dbName + ".bak" -destination "\\" + $backsvr + "\" + $backforder


#ftp에 업로드
$wc = New-Object System.Net.WebClient
$uri = New-Object System.Uri($ftpsvr + $dbName + ".bak")

$wc.UploadFile($uri, $path + $dbName + ".bak")
$smtp = new-object Net.Mail.SmtpClient($smtp)
$smtp.Send($mailfrom, $mailto, "백업완료", "백업이 완료되었습니다")

이상 간단한 SMO에 관한 내용이었습니다.

No. Subject Author Date Views
2191 MSSQL과 Oracle 함수 비교 3탄 - 9가지 함수(마지막) [5] 쓸만한게없네(윤선식) 2010.11.08 81624
2190 DB 오류검사기록 테이블, 백업할때 오류정보 기록테이블 [3] 차주언 2011.07.20 56462
2189 10_SQL 2008 강좌 - (1) DB관리 - DB 축소(SHRINK) [8] jevida(강성욱) 2011.03.01 50904
2188 Linked Server Open Query 이용 시 USE 명령어 사용하기 [1] 쓸만한게없네(윤선식) 2012.11.07 50673
2187 SSMS 줄 번호 표시 jevida(강성욱) 2015.03.26 46959
2186 sa 비밀번호를 잊어먹었을 때 대처방법 [8] 이스트럭(강동운) 2011.06.13 46880
» SMO를 이용한 DB백업 [3] 우주인(김재훈) 2011.03.17 45009
2184 [TIP]MSSQL 와일드 카드를 이용한 검색과 주의점 [16] 쓸만한게없네 2010.10.12 44281
2183 프로파일러 사용법. (완전 초보자 기준!) [10] jevida(강성욱) 2011.04.26 43405
2182 SSMS 단축키. [12] 쓸만한게없네(윤선식) 2011.02.07 43118
2181 SQL Server 로긴 유저 및 각 DB별 사용자 권한 조회 [1] 문연군 2010.12.20 42306
2180 MSSQL과 Oracle 함수 비교 2탄 - 9가지 함수 [10] 쓸만한게없네(윤선식) 2010.10.27 41901
2179 Microsoft.ACE.OLEDB.12.0 을 이용한 엑셀 2010 직접쿼리하기 [3] 열이 2013.03.20 41528
2178 DBCC TRACE ... [4] 이스트럭(강동운) 2012.04.13 40940
2177 SQL Server 와 MySQL 문자열 함수 비교 10 가지 [5] 이호엽 2010.12.29 38236
2176 SQL2012는 SSMS의 시작 옵션(Startup option) 설정 위치가 바뀌었어요. [1] 코난(김대우) 2012.01.13 37459
2175 MSSQL과 Oracle 함수 비교 - 첫번째 10가지 함수. [7] 쓸만한게없네(윤선식) 2010.10.25 35834
2174 CONVERT 스타일 별 결과 값 [3] Alucard(강산아) 2010.10.14 35508
2173 트랜잭션 열린넘 있으면 로그백업할때 사이즈가 커진다!! [5] 차주언 2009.12.02 33538
2172 초간단 - 알만한 사람은 다 아는 읽고, 쓰고, 실행하는 권한만 주기 스크립트. [2] 쓸만한게없네(윤선식) 2011.07.21 32939





XE Login