SQL Server 2008 Express-“최상의”백업 솔루션?

SQL Server 2008 Express 를 사용할 때 어떤 백업 솔루션을 권장 하시겠습니까? 저는 SQL Server를 처음 접했지만 MySQL 배경 에서 왔을 때 다른 컴퓨터에서 복제를 설정하고 해당 서버의 Xcopy 백업을 수행하려고 생각했습니다.

그러나 불행히도 Express Edition에서는 복제를 사용할 수 없습니다.

사이트에 많이 액세스하므로 지연 및 다운 타임이 없어야합니다. 또한 하루에 두 번 백업하거나 백업하는 것을 생각하고 있습니다.

어떤 것을 권 하시죠? 사용할 수있는 컴퓨터가 여러 대 있지만 Express 버전을 사용하고 있기 때문에 이것이 도움이되는지 모르겠습니다.



답변

SQL Server Express 2008은 데이터베이스 백업을 지원합니다. 백업을 예약 할 수있는 SQL 에이전트와 백업 작업 생성을위한 유지 관리 계획 마법사가 없습니다.

두 가지 방법으로 데이터베이스를 백업 할 수 있습니다.

  1. “작업”아래의 각 데이터베이스에 대해 오른쪽 클릭 메뉴에 백업 옵션이있는 Microsoft SQL Server Management Studio Express 를 사용하십시오 .
  2. T-SQL을 사용하여 백업 스크립트를 수동으로 작성하십시오. T-SQL BACKUP 명령에 대한 MSDN 설명서를 읽으십시오 .
    다음과 같은 구문 :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에 의해 게시물에 metioned로 설치하여 직접 사용할 백업 스크립트를 작성했습니다 .

----- Version: 2.0 - 2009-12-12 - SQL 2000 Compatible
----- Pham Kim Ngan (jbngan@gmail.com)
----- 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 사용 하고 예약 된 작업으로 훌륭하게 작동합니다. 수행중인 작업 유형에 적합한 매개 변수를 전달하십시오.

소스 코드도 있습니다. 응용 프로그램 이벤트 로그온 실패시 항목을 추가하도록 약간 변경했습니다.


답변

UndertheFold의 게시물을 기반으로 인터넷 검색을 수행하고 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를 백업하고 복원 할 수있는 훌륭한 프리웨어 도구입니다. 설정 및 사용이 매우 간단합니다.


답변

Windows 스케줄러 작업을 사용하여 배치 파일을 사용하여 몇 시간마다 SQL Server Express 데이터베이스를 백업하고 있습니다. 잘 작동하는 것 같습니다.