it-swarm-korea.com

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

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

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

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

무엇을 추천하나요? 사용할 수있는 컴퓨터가 여러 대 있지만 Express 버전을 사용하고 있기 때문에 이것이 도움이되는지 모르겠습니다.

20
alexn

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

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

  1. Microsoft SQL Server Management Studio Express 를 사용하십시오. "tasks"아래 각 데이터베이스에 대해 오른쪽 클릭 메뉴에 백업 옵션이 있습니다.
  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
30
splattne

SQLBackupAndFTP -환상적이고 간단한 제품을 사용합니다.

6
Ruslan Sudentas

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 ''
5
Joan Pham

ExpressMaint 를 사용하며 예약 된 작업으로 훌륭하게 작동합니다. 수행중인 작업 유형에 적합한 매개 변수를 전달하십시오.

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

2
CPU_BUSY

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 클라우드 스토리지에 오프 사이트 백업을 수행합니다.

1
Guppy

DBSave 를 사용할 수 있습니다. MS SQL Server를 백업하고 복원 할 수있는 훌륭한 프리웨어 도구입니다. 설정 및 사용이 매우 간단합니다.

1
MP1963

SQLServerBooster를 확인했습니다 : http://www.sqlserverbooster.com .

Nice 기능 세트가 있고 무료 인 것 같습니다. Azure/S3/glacier에 대한 지원도 훌륭합니다.

0
Ben Lachman

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

0
no_one