SQL Server 2008 Express - "Найкраще" рішення для резервного копіювання?


20

Які рішення для резервного копіювання ви б рекомендували використовувати під час використання SQL Server 2008 Express ? Я досить новачок у SQL Server, але, оскільки я виходжу з фона MySQL, я подумав встановити реплікацію на іншому комп’ютері і просто взяти резервні копії Xcopy цього сервера.

Але, на жаль, реплікація недоступна в Express Edition.

До сайту доступний великий доступ, тому не повинно бути затримок і простоїв. Я теж думаю два рази на день робити резервне копіювання.

Що б ти порадив? У мене є кілька комп’ютерів, якими я можу користуватися, але не знаю, чи допомагає це мені, оскільки я використовую версію Express.


Хтось знає, чи є проблеми з використанням резервної копії Windows Server для цього?
Джеймс

Відповіді:


30

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

1
Синтаксис BACKUP виглядає приблизно так: BACKUP DATABASE MyDatabase TO DISK = 'C: \ MyDatabase.bak';
Мартін Маркончіні

Спасибі за цю інформацію, хлопці, я спробую це спробувати.
alexn

під час використання сценарію T-sql переконайтеся, що у ваших іменах db не містяться пробілів.
redknight

+1 Ще одна інформація: Не забудьте вказати ім'я екземпляра через, -S ".\SomeInstance"якщо ви отримаєте помилки входу від sqlcmd.
Томалак

Було б корисно, щоб решта з нас, які прийшли до цього питання, шукали ту ж відповідь, якщо ви включили SQL, який ви використовуєте для запуску резервної копії.
Ян Бойд

6

Я використовую SQLBackupAndFTP - фантастичний і простий продукт.


sqlbackupandftp найкраще .. якщо ти хочеш повернутись + стиснути + автоматично видалити (через вказані дні)
suraj jain

Так, я також цим користуюся. Добре працює.
Алан Б

5

Мені написали резервний скрипт для використання, встановіть так, як повідомляв splattne :

----- 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. Я раніше цього не бачив, тому дуже радий, що знайшов його.

FYI, веб-сторінка є 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 .


Проблема в expressmaint полягає в тому, що він не підтримує SQL Server 2008 R2. Він буде працювати з 2008, і він буде працювати, якщо встановити 2008, а потім оновити до 2008 R2, але він не знайде баз даних у новому встановленні 2008 R2. Це відома помилка з поданим патчем, але виконуваний файл не оновлювався.
Джеймс

1

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


0

Я використовую завдання планувальника Windows для резервного копіювання експрес-бази даних SQL Server кожні кілька годин, використовуючи пакетний файл. Здається, добре працює.


Ви також повинні згадати, як пакетний файл створює резервну копію бази даних.
Ян Бойд

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.