SQL Server 2008 Express-「最高の」バックアップソリューション?


20

SQL Server 2008 Expressを使用する場合、どのバックアップソリューションをお勧めしますか?私はSQL Serverを初めて使用しますが、MySQLのバックグラウンドから来ているので、別のコンピューターでレプリケーションをセットアップし、そのサーバーのXcopyバックアップを取得することを考えました。

ただし、残念ながら、Express Editionでは複製は使用できません。

このサイトは頻繁にアクセスされるため、遅延やダウンタイムは発生しません。また、1日に2回バックアップを行うことも考えています。

あなたは何をお勧めします?使用できるコンピューターは複数ありますが、Expressバージョンを使用しているので、それが役立つかどうかはわかりません。


これを行うためにWindows Serverバックアップを使用するだけで問題があるかどうかは誰にもわかりますか?
ジェームズ

回答:


30

SQL Server Express 2008は、データベースのバックアップをサポートしています。バックアップをスケジュールできるSQL Agentと、バックアップタスクを作成するためのメンテナンスプランウィザードがありません。

2つの異なる方法でデータベースをバックアップできます。

  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';
マーティンマルコンチーニ2009

この情報をありがとう、私はこれを試してみるつもりです。
アレクサンダー2009

T-sqlスクリプトを使用する場合は、データベース名にスペースが含まれていないことを確認してください。
レッドナイト

+1もう1つの情報:-S ".\SomeInstance"sqlcmdからログインエラーが発生した場合、インスタンス名を忘れずに記載してください。
トマラック

バックアップを実行するために使用するSQLを含めた場合、この質問に私たちの残りが同じ答えを探しに来るのは役に立ちます。
イアン・ボイド


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、Webページがあり、http://expressmaint.codeplex.com/

次に、見つけた例の1つを使用して、毎日一晩実行するようにスケジュールしたこのバッチファイルを作成しました。

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)は1週間保持されます。

私はそれを数週間しか使っていませんが、それは手間のかからないアプローチなので、とても満足しています。ローカルでバックアップを2番目のディスクに配置し、JungleDiskを使用してAmazon EC2クラウドストレージへのオフサイトバックアップを実行します


expressmaintの問題は、SQL Server 2008 R2をサポートしていないことです。2008で動作し、2008をインストールしてから2008 R2にアップグレードしても動作しますが、2008 R2の新規インストールでデータベースが見つかりません。これはパッチが提出された既知のバグですが、実行可能ファイルはパッチで更新されていません。
ジェームズ


0

Windowsスケジューラジョブを使用して、バッチファイルを使用して数時間ごとにSQL Server Expressデータベースをバックアップしています。うまくいくようです。


バッチファイルがデータベースをバックアップする方法についても言及する必要があります。
イアン・ボイド

0

SQLServerBoosterをチェックアウトします:http ://www.sqlserverbooster.com 。

素敵な機能セットがあり、無料であるようです。azure / S3 / glacierのサポートも素晴らしいです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.