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


20

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

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

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

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


Windows Server 백업을 사용하여 문제가 있는지 아는 사람이 있습니까?
James

답변:


30

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

1
BACKUP 구문은 다음과 같습니다. BACKUP DATABASE MyDatabase TO DISK = 'C : \ MyDatabase.bak';
Martin Marconcini 2009

이 정보를 주셔서 감사합니다, 나는 이것을 시도 할 것입니다.
alexn

T-sql 스크립트를 사용할 때 db 이름에 공백이 없는지 확인하십시오.
redknight

+1 한 가지 더 많은 정보 : -S ".\SomeInstance"sqlcmd에서 로그인 오류가 발생 하면 if를 통해 인스턴스 이름을 언급하는 것을 잊지 마십시오 .
Tomalak

백업을 실행하는 데 사용하는 SQL을 포함 시키면이 질문에 대한 나머지 사람들이 동일한 답변을 찾는 것이 도움이 될 것입니다.
Ian Boyd

6

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


U 원하는 경우 sqlbackupandftp은 .. 최고 다시 + 압축 + 자동 (지정된 일 후) 삭제
SURAJ 자이나교

네, 이것도 사용합니다. 잘 작동합니다.
Alan B

5

나는 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 ''

2

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

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


1

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


expressmaint의 문제점은 SQL Server 2008 R2를 지원하지 않는다는 것입니다. 2008과 함께 작동하며 2008을 설치 한 다음 2008 R2로 업그레이드하면 작동하지만 2008 R2를 새로 설치하면 데이터베이스를 찾을 수 없습니다. 패치가 제출 된 것으로 알려진 버그이지만 실행 파일이 패치로 업데이트되지 않았습니다.
제임스

1

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


0

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


배치 파일이 데이터베이스를 백업 하는 방법 도 언급해야 합니다.
Ian Boyd

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.