SQL Server 2008 Express を使用する場合、どのバックアップソリューションをお勧めしますか?私はSQL Serverにかなり慣れていませんが、 MySQL の背景から来ているので、別のコンピューターにレプリケーションを設定して、そのサーバーの Xcopy バックアップを取得することを考えました。
ただし、残念ながらExpress Editionではレプリケーションを利用できません。
サイトは頻繁にアクセスされるため、遅延やダウンタイムが発生しないようにする必要があります。また、1日2回程度のバックアップを考えています。
あなたは何をお勧めします?使用できるコンピュータが複数ありますが、Expressバージョンを使用しているため、それが役立つかどうかはわかりません。
SQL Server Express 2008はデータベースのバックアップをサポートしています。バックアップをスケジュールできるSQLエージェント、およびバックアップタスクを作成するためのメンテナンスプランウィザードがありません。
次の2つの方法でデータベースをバックアップできます。
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
私は SQLBackupAndFTP を使用しています-素晴らしいシンプルな製品です。
私は自分で使用するためのバックアップスクリプトを作成しました-ポストに記載されているようにインストール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 ''
私は ExpressMaint を使用しており、スケジュールされたタスクとしてうまく機能します。実行しているジョブのタイプに適したパラメーターを渡すだけです。
ソースコードもそこにあります。失敗時にアプリケーションイベントログにエントリを追加するために少し変更しました。
UndertheFoldの投稿に基づいて グーグル検索を実行し、ExpressMaintの詳細を見つけました。これまで見たことがないので見つけてとても嬉しいです。
参考までに、ウェブページは 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にオフサイトバックアップを行います クラウドストレージ。
DBSave を使用できます。 MS SQL Serverをバックアップおよび復元するための優れたフリーウェアツールです。セットアップと使用は非常に簡単です。
SQLServerBooster: http://www.sqlserverbooster.com を確認します。
Nice機能セットがあり、無料であるようです。 Azure/S3/glacierのサポートも素晴らしいです。
Windowsスケジューラジョブを使用して、バッチファイルを使用してSQL Server Expressデータベースを数時間ごとにバックアップしています。正常に動作するようです。