it-swarm-ru.tech

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 , у которого есть опция Резервное копирование в меню правой кнопки мыши для каждой базы данных в разделе "Задачи".
  2. Используйте T-SQL, чтобы написать скрипт резервного копирования вручную. Прочитайте документация MSDN для команды T-SQL BACKUP .
    Синтаксис что-то вроде: 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

Основываясь на пост 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) на четыре дня, так что вы получите историю, если есть коррупция. Журналы (-RU) хранятся в течение одной недели.

Я использую его всего несколько недель, но я был очень доволен этим, так как это практический подход. Локально я помещаю резервные копии на второй диск, затем использую JungleDisk , чтобы выполнить резервное копирование на удаленное хранилище Amazon EC2 .

1
Guppy

Вы можете использовать DBSave . Это отличный бесплатный инструмент для резервного копирования и восстановления MS SQL Server. Это очень просто настроить и использовать.

1
MP1963

Я бы проверил SQLServerBooster: http://www.sqlserverbooster.com .

Похоже, что он имеет хороший набор функций и является бесплатным. Поддержка Azure/S3/glacier также хороша.

0
Ben Lachman

Я использую задание планировщика Windows для резервного копирования базы данных SQL Server Express каждые несколько часов с помощью командного файла. Кажется, работает нормально.

0
no_one