首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server自动备份

SQL Server自动备份
EN

Stack Overflow用户
提问于 2009-01-29 23:03:48
回答 3查看 46.6K关注 0票数 29

对于创建SQL Server 2008数据库的自动备份,软件产品有哪些建议?

备份应在不使数据库脱机/分离的情况下进行。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-01-29 23:11:05

我建议只在SQL Server中创建一个维护计划来处理备份,它可以配置为在指定时间备份到指定位置,而不会使数据库脱机,并将处理增量备份清理。

http://msdn.microsoft.com/en-us/library/ms189715.aspx

票数 17
EN

Stack Overflow用户

发布于 2009-01-29 23:32:02

如果您使用的是SQL Server Express,则找不到用于运行定期备份的UI。

在这种情况下,您必须使用Windows Scheduled Tasks或类似的工具运行批处理。

请不要忘记使用具有足够权限访问SQL Server的用户。

在批处理文件中

代码语言:javascript
复制
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" -S 
(local)\SQLExpress -i D:\dbbackups\SQLExpressBackups.sql

在SQLExpressBackups.sql中

代码语言:javascript
复制
BACKUP DATABASE MyDataBase1 TO  DISK = N'D:\DBbackups\MyDataBase1.bak' 
WITH NOFORMAT, INIT,  NAME = N'MyDataBase1 Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

BACKUP DATABASE MyDataBase2 TO  DISK = N'D:\DBbackups\MyDataBase2.bak' 
WITH NOFORMAT, INIT,  NAME = N'MyDataBase2 Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

GO
票数 73
EN

Stack Overflow用户

发布于 2011-05-02 15:40:19

我在这个问题上挣扎了一段时间,因为它不清楚如何在一个机制中产生不同名称的文件,以便一次运行不会覆盖另一次。最后,它创建了以下Windows批处理文件

代码语言:javascript
复制
:: Daily Backup of SQLSERVER databases

:: AKC 30 Apr 2011

::

:: Set environment variables

SET SQLCMDPASSWORD=xxxxxx
SET BACKUPDIR=C:\backups\db\

SET SCRIPTDIR=D:\Public\DB\batch_scripts\

:: Issue backup commands from a sql script

SQLCMD -U a_backup -S SERVER\SQLEXPRESS -i %SCRIPTDIR%daily_backup.sql

:: Tidy Up Old Backup Files (keep for 5 days)

FORFILES /P %BACKUPDIR% /S /M "*.bak" /D -5 /C "cmd /c del @path"

其中a_backup是我具有备份权限的sqlserver登录名。对应的sql为

代码语言:javascript
复制
DECLARE @thistime nvarchar(25);

DECLARE @filename nvarchar(255);

SET @thistime = CONVERT(nvarchar,GETDATE(),126);

SET @filename = "$(BACKUPDIR)" + N'PASL' + SUBSTRING(@thistime,1,10) + N'_DB.bak';

BACKUP DATABASE DB_live

    TO DISK = @FILENAME

    WITH INIT;

GO

发现"FORFILES“命令清除旧文件是我的关键发现。

事务日志等效项为

代码语言:javascript
复制
:: Transaction Log Backups of SQLSERVER databases

:: AKC 30 Apr 2011

:: Run at reasonably spread out times of the day

:: Set environment variables

SET SQLCMDPASSWORD=xxxxxx
SET BACKUPDIR=C:\backups\db\
SET SCRIPTDIR=D:\Public\DB\batch_scripts\

:: Issue backup commands from a sql script

SQLCMD  -U a_backup -S SERVER\SQLEXPRESS -i %SCRIPTDIR%tlog_backup.sql

使用sql文件

代码语言:javascript
复制
DECLARE @thistime nvarchar(25);

DECLARE @filename nvarchar(255);

SET @thistime = CONVERT(nvarchar,GETDATE(),126);

SET @filename = "$(BACKUPDIR)" + N'PASL' + SUBSTRING(@thistime,1,10) + SUBSTRING(@thistime,11,3) + N'_LOG.bak';

BACKUP LOG DB_live

    TO DISK = @FILENAME

    WITH INIT;

GO

我应该注意到数据库文件在我的D:驱动器上,这就是为什么我将备份放在C:驱动器上的原因。

每日备份在Windows任务计划程序中作为作业输入,每天凌晨4:00运行事务日志备份设置为每天上午8:00运行,每4小时重复一次,在13小时后完成(导致它在每天的中午8点、下午4点和晚上8点运行)

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/493886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档