SQL Server 2008 Express 를 사용할 때 어떤 백업 솔루션을 권장 하시겠습니까? 저는 SQL Server를 처음 접했지만 MySQL 백그라운드에서 왔을 때 다른 컴퓨터에서 복제를 설정하고 해당 서버의 Xcopy 백업을 수행하려고 생각했습니다. .
그러나 불행히도 Express Edition에서는 복제를 사용할 수 없습니다.
사이트에 많이 액세스하므로 지연 및 다운 타임이 없어야합니다. 또한 하루에 두 번 백업하거나 백업하는 것을 생각하고 있습니다.
무엇을 추천하나요? 사용할 수있는 컴퓨터가 여러 대 있지만 Express 버전을 사용하고 있기 때문에 이것이 도움이되는지 모르겠습니다.
SQL Server Express 2008은 데이터베이스 백업을 지원합니다. 백업을 예약 할 수있는 SQL 에이전트와 백업 작업 생성을위한 유지 관리 계획 마법사가 없습니다.
두 가지 방법으로 데이터베이스를 백업 할 수 있습니다.
BACKUP DATABASE MyDatabase TO DISK='C:\MyDatabase.bak';
백업 작업을 예약하려면 T-SQL 스크립트를 작성한 다음 Windows 작업 일정을 사용하여 SQLCmd 를 호출하여 원하는 모든 일정에 대해 스크립트를 실행해야합니다.
sqlcmd -s server_name\sqlexpress -i C:\SqlJobs\backup.sql -o C:\Logs\output.txt
SQLBackupAndFTP -환상적이고 간단한 제품을 사용합니다.
splattne의 게시물에서 언급 한대로 직접 백업 스크립트를 작성했습니다.
----- Version: 2.0 - 2009-12-12 - SQL 2000 Compatible
----- Pham Kim Ngan ([email protected])
----- Usage:
-- Copy 7za.exe (http://www.7-Zip.org/download.html - Command Line Version) to @CFG_BACKUP_PATH
-- Modify @CFG_BACKUP_PATH = <Backup Store Path> - no long filename/directory please
-- Modify @CFG_DAYS_DELETE = Days to keep backups
-- Enable 'xp_cmdshell' (SQL 2005/EXPRESS or higher)
----- Configuration Variables
DECLARE @CFG_BACKUP_PATH NVARCHAR(256)
DECLARE @CFG_DAYS_DELETE INT
SET @CFG_BACKUP_PATH = 'C:\DatabaseBackup'
SET @CFG_DAYS_DELETE = 30
DECLARE @Today DATETIME
DECLARE @TodayName CHAR(8)
SET @Today = GETDATE()
SET @TodayName = CONVERT(CHAR(8), @Today, 112)
DECLARE @id INT
DECLARE @name VARCHAR(50)
DECLARE @path VARCHAR(256)
DECLARE @cmd VARCHAR(256)
----- Create Temporarity Directory
DECLARE @TempDir VARCHAR(256)
SET @TempDir = @CFG_BACKUP_PATH + '\' + CONVERT(VARCHAR(256), NEWID())
SET @cmd = 'md ' + @TempDir
EXEC xp_cmdshell @cmd, no_output
----- List of current databases, only 'ONLINE' databases to be backup
DECLARE @dbList TABLE
(
dbno INT IDENTITY,
dbname NVARCHAR(256)
)
INSERT INTO @dbList ( dbname )
SELECT name
FROM master.dbo.sysdatabases
WHERE ( name NOT IN ( 'tempdb' ) )
AND DATABASEPROPERTYEX(name, 'Status') = 'ONLINE'
------ Starting backup, one by one
SELECT @id = dbno,
@name = dbname
FROM @dbList
WHERE dbno = 1
WHILE @@ROWCOUNT = 1
BEGIN
PRINT N'++ Backup: ' + @name
SET @path = @TempDir + '\' + @name + '.bak'
BACKUP DATABASE @name TO DISK = @path
SELECT @id = dbno,
@name = dbname
FROM @dbList
WHERE dbno = @id + 1
END
PRINT N'++ Compressing: ' + @TempDir
----- Delete output file if existed
SET @cmd = 'del /f /q ' + @CFG_BACKUP_PATH + '\' + @TodayName + '.Zip'
EXEC xp_cmdshell @cmd, no_output
DECLARE @Count INT
DECLARE @StartTime DATETIME
SET @StartTime = GETDATE()
----- Compress, -mx1 = Set Compression Ratio to 1 (very low)
SET @cmd = @CFG_BACKUP_PATH + '\7za.exe a -bd -y -tzip -mx1 '
SET @cmd = @cmd + @CFG_BACKUP_PATH + '\' + @TodayName + '.Zip ' + @TempDir + '\*.bak"'
EXEC xp_cmdshell @cmd, no_output
SET @Count = DATEDIFF(second, @StartTime, GETDATE())
PRINT N'++ Compression Time: ' + CONVERT(VARCHAR, @Count) + ' seconds'
SET @Count = DATEDIFF(second, @Today, GETDATE())
PRINT N'++ Total Execution Time: ' + CONVERT(VARCHAR, @Count) + ' seconds'
---- Delete temporarity directory
SET @cmd = 'rd /s /q ' + @TempDir
EXEC xp_cmdshell @cmd, no_output
---- Delete previous backup versions
DECLARE @OlderDateName CHAR(8)
SET @OlderDateName = CONVERT(CHAR(8), @Today - @CFG_DAYS_DELETE, 112)
----- List all .Zip files
CREATE TABLE #delList
(
subdirectory VARCHAR(256),
depth INT,
[file] BIT
)
INSERT INTO #delList
EXEC xp_dirtree @CFG_BACKUP_PATH, 1, 1
DELETE #delList
WHERE RIGHT(subdirectory, 4) <> '.Zip'
SELECT @Count = COUNT(1)
FROM #delList
PRINT N'++ Number of Backups: ' + CONVERT(NVARCHAR, @Count)
SELECT TOP 1
@name = subdirectory
FROM #delList
WHERE LEN(subdirectory) = 12
AND RIGHT(subdirectory, 4) = '.Zip'
AND REPLACE(subdirectory, '.Zip', '') < @OlderDateName
WHILE ( @@ROWCOUNT = 1 )
BEGIN
PRINT N'++ Delete Older Backup: ' + @name
SET @cmd = 'del /f /q ' + @CFG_BACKUP_PATH + '\' + @name
EXEC xp_cmdshell @cmd, no_output
DELETE #delList
WHERE subdirectory = @name
SELECT TOP 1
@name = subdirectory
FROM #delList
WHERE LEN(subdirectory) = 12
AND RIGHT(subdirectory, 4) = '.Zip'
AND REPLACE(subdirectory, '.Zip', '') < @OlderDateName
END
DROP TABLE #delList
PRINT N'++ Done.'
PRINT ''
PRINT ''
PRINT ''
ExpressMaint 를 사용하며 예약 된 작업으로 훌륭하게 작동합니다. 수행중인 작업 유형에 적합한 매개 변수를 전달하십시오.
소스 코드도 있습니다. 응용 프로그램 이벤트 로그온 실패시 항목을 추가하도록 약간 변경했습니다.
ndertheFold 's post 에 따라 인터넷 검색을 수행하고 ExpressMaint의 세부 정보를 찾았습니다. 나는 이것을 전에 보지 못했기 때문에 그것을 발견하게되어 매우 기쁩니다.
참고로 웹 페이지는 http://expressmaint.codeplex.com/
그런 다음 매일 밤새 실행하도록 예약 한이 배치 파일을 만들기 위해 찾은 예제 중 하나를 사용했습니다.
c:\expressmaint\expressmaint -S (local)\SQLExpress -D ALL_USER -T DB -R E:\backups\sqlexpress\backupreports -RU WEEKS -RV 1 -B E:\backups\sqlexpress -BU DAYS -BV 4 -V -C
백업을 수행하고 각 백업을 유지합니다 (-BU
) 4 일 동안 손상 되었으면 기록이 표시됩니다. 로그 (-RU
)은 일주일 동안 유지됩니다.
나는 몇 주 동안 만 사용했지만 실제로는 기쁜 접근 방식이므로 매우 기뻤습니다. 로컬로 백업을 두 번째 디스크에 넣은 다음 JungleDisk 를 사용하여 Amazon EC2 클라우드 스토리지에 오프 사이트 백업을 수행합니다.
DBSave 를 사용할 수 있습니다. MS SQL Server를 백업하고 복원 할 수있는 훌륭한 프리웨어 도구입니다. 설정 및 사용이 매우 간단합니다.
SQLServerBooster를 확인했습니다 : http://www.sqlserverbooster.com .
Nice 기능 세트가 있고 무료 인 것 같습니다. Azure/S3/glacier에 대한 지원도 훌륭합니다.
Windows 스케줄러 작업을 사용하여 배치 파일을 사용하여 몇 시간마다 SQL Server Express 데이터베이스를 백업하고 있습니다. 잘 작동하는 것 같습니다.