在使用SQL Server 2008 Express时,您会推荐哪些备份解决scheme? 我对SQL Server相当陌生,但是因为我是从MySQL背景来的,所以我想在另一台计算机上设置复制,然后只需要对该服务器进行Xcopy备份。
但遗憾的是复制在Express Edition中不可用。
该网站是大量访问,所以不得不有延迟和停机时间。 我也在考虑每天做两次备份。
你会推荐什么? 我有多台电脑可以使用,但是我不知道是否可以帮助我,因为我使用的是Express版本。
SQL Server Express 2008支持数据库备份。 它缺less允许计划备份的SQL代理程序,以及用于创build备份任务的维护计划向导。
您可以用两种不同的方式备份数据库:
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的post中提到 :
----- 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 ,它作为一个计划任务很好。 只要传递你正在做的工作types的适当的参数。
源代码也在那里。 我们稍微改了一下,在失败时在应用程序事件日志中添加一个条目。
基于UndertheFold的文章,我做了一些Googlesearch,并find了ExpressMaint的细节。 我以前没见过这个,所以我很高兴能find它。
仅供参考,网页是http://expressmaint.codeplex.com/
然后,我使用了我创build的这个batch file中的一个,我计划每天都在一夜之间运行这个文件。
c:\expressmaint\expressmaint -S (local)\SQLExpress -D ALL_USER -T DB -RE:\backups\sqlexpress\backupreports -RU WEEKS -RV 1 -BE:\backups\sqlexpress -BU DAYS -BV 4 -V -C
这需要一个备份,保持每个备份( -BU
)四天,所以你有一个历史,如果有腐败。 日志( -RU
)保存一周。
我只用了几个星期,但是我对它很满意,因为这是一个不干涉的方法。 在本地,我将备份放在第二块磁盘上,然后使用JungleDisk对Amazon EC2云存储进行异地备份。
你可以使用DBSave 。 这是一个很好的免费软件工具来备份和恢复MS SQL Server。 这是非常简单的设置和使用。
我正在使用Windows调度程序作业来每隔几个小时使用一个batch file来备份SQL Server Express数据库。 似乎工作正常。
我会看看SQLServerBooster: http : //www.sqlserverbooster.com 。
它看起来像有一个很好的function设置,是免费的。 对azure / S3 /冰川的支持也不错。