sqlserver-备份和还原

2023-12-18

为何备份?

备份 SQL Server 数据库、在备份上运行测试还原过程以及在另一个安全位置存储备份副本可防止可能的灾难性数据丢失。 备份是保护数据的唯一方法 。

使用有效的数据库备份,可从多种故障中恢复数据,例如:

  • 介质故障。
  • 用户错误(例如,误删除了某个表)。
  • 硬件故障(例如,磁盘驱动器损坏或服务器报废)。
  • 自然灾难。 通过使用 SQL Server 备份到 Azure Blob
    存储服务,可以在本地位置之外的其他区域创建一个站外备份,这样在发生影响本地位置的自然灾难时仍可以使用数据库。

此外,数据库备份对于进行日常管理(如将数据库从一台服务器复制到另一台服务器、设置 Always On 可用性组 或数据库镜像以及进行存档)非常有用。

备份术语的术语表

数据备份 (data backup)
完整数据库的数据备份(数据库备份)、部分数据库的数据备份(部分备份)或一组数据文件或文件组的数据备份(文件备份)。

数据库备份 (database backup)
数据库的备份。 完整数据库备份表示备份完成时的整个数据库。 差异数据库备份只包含自最近完整备份以来对数据库所做的更改。

差异备份 (differential backup)
一种数据备份,基于完整数据库或部分数据库或一组数据文件或文件组(差异基准)的最新完整备份,并且仅包含自确定差异基准以来发生更改的数据。

完整备份 (full backup)
一种数据备份,包含特定数据库或者一组特定的文件组或文件中的所有数据,以及可以恢复这些数据的足够的日志。

日志备份 (log backup)
包括以前日志备份中未备份的所有日志记录的事务日志备份。 (完整恢复模式)

recover
将数据库恢复到稳定且一致的状态。

recovery
将数据库恢复到事务一致状态的数据库启动阶段或 Restore With Recovery 阶段。

恢复模式
用于控制数据库上的事务日志维护的数据库属性。 有三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式。 数据库的恢复模式确定其备份和还原要求。

还原 (restore)
一种包括多个阶段的过程,用于将指定 SQL Server 备份中的所有数据和日志页复制到指定数据库,然后通过应用记录的更改使该数据在时间上向前移动,以前滚备份中记录的所有事务。

备份和还原策略

备份和还原数据必须根据特定环境进行自定义,并且必须使用可用资源。 因此,要可靠地使用备份和还原进行恢复,需要制定备份和还原策略。设计完善的备份和还原策略可以平衡业务需求,以实现最大的数据可用性和最小的数据丢失,同时考虑维护和存储备份的成本。

备份和还原策略包含备份部分和还原部分。 策略的备份部分定义备份的类型和频率、备份所需硬件的特性和速度、备份的测试方法以及备份介质的存储位置和方法(包括安全注意事项)。 策略的还原部分定义负责执行还原的人员、如何执行还原以满足数据库可用性和最大程度减少数据丢失的目标,以及如何测试还原。

设计有效的备份和还原策略需要仔细计划、实现和测试。 需要进行测试:直到成功还原了还原策略中包含的所有组合中的备份并且测试了还原的数据库是否具有物理一致性后,才会生成备份策略。 必须考虑各种因素。 其中包括:

  • 组织在生产数据库方面的目标,尤其是对可用性和防止数据丢失或损坏的要求。
  • 每个数据库的特性包括:大小、使用模式、内容特性以及数据要求等。
  • 对资源的约束,例如:硬件、人员、备份介质的存储空间以及所存储介质的物理安全性等。

最佳做法建议

使用独立的存储

重要

确保将数据库备份放在与数据库文件不同的物理位置或设备上。
存储数据库的物理驱动器出现故障或崩溃时,可恢复性取决于能否访问存储备份的独立驱动器或远程设备以执行还原。
请记住,你可以在同一个物理磁盘驱动器中创建多个逻辑卷或分区。 在为备份选择存储位置之前,请仔细研究磁盘分区和逻辑卷布局。

如何选择恢复模式

备份和还原操作发生在恢复模式的上下文中。 恢复模式是一种数据库属性,用于控制事务日志的管理方式。 因此,数据库的恢复模式决定了数据库支持的备份类型和还原方案,以及事务日志备份的大小。 通常,数据库使用 简单恢复模式或完整恢复模式 。 可以在执行大容量操作之前切换到大容量日志恢复模式,以补充完整恢复模式。 有关这些恢复模式以及它们是如何影响事务日志管理方式的说明,请参阅 事务日志 (SQL Server)。

数据库的最佳恢复模式取决于您的业务要求。 若要免去事务日志管理工作并简化备份和还原,请使用 简单恢复模式 。 若要在管理开销一定的情况下使工作丢失的可能性降到最低,请使用 完整恢复模式 。 为了在大容量日志操作期间最大程度减少对日志大小的影响,同时允许这些操作的可恢复性,请使用大容量日志恢复模式。 有关恢复模式对备份和还原的影响的信息,请参阅 备份概述 (SQL Server) 。

设计备份策略

当为特定数据库选择了满足业务要求的恢复模式后,需要计划并实现相应的备份策略。 最佳备份策略取决于各种因素,以下因素尤其重要:

  • 一天中应用程序访问数据库的时间有多长?

    如果存在一个可预测的非高峰时段,则建议您将完整数据库备份安排在此时段。

  • 更改和更新可能发生的频率如何?

    如果更改经常发生,请考虑下列事项:

    在简单恢复模式下,请考虑将差异备份安排在完整数据库备份之间。 差异备份只能捕获自上次完整数据库备份之后的更改。

    在完整恢复模式下,应安排经常的日志备份。 在完整备份之间安排差异备份可减少数据还原后需要还原的日志备份数,从而缩短还原时间。

  • 可能只是更改数据库的小部分内容,还是需要更改数据库的大部分内容?

    对于更改集中于部分文件或文件组的大型数据库,部分备份和/或文件备份非常有用。 有关详细信息,请参阅 SQL Server) 部分备份 和
    完整文件 (备份 (SQL Server) 。

  • 完整数据库备份需要多少磁盘空间?

  • 你的企业需要维护过去多久的备份?

    确保你已根据应用程序需求和业务需求制定了适当的备份计划。 随着备份变得陈旧,数据丢失风险会更高,除非你有办法重新生成故障点之前的所有数据。
    由于存储资源限制而选择处理旧备份之前,请考虑是否需要以前的可恢复性

计划备份

执行备份操作对运行中的事务影响很小,因此可以在正常操作过程中执行备份操作。 您可以在对生产工作负荷的影响很小的情况下执行 SQL Server 备份。

有关备份期间并发限制的信息,请参阅 备份概述 (SQL Server) 。

确定所需的备份类型和必须执行每种备份类型的频率后,建议您将定期备份计划为数据库维护计划的一部分。 有关维护计划以及如何为数据库备份和日志备份创建维护计划的信息,请参阅 Use the Maintenance Plan Wizard。

备份操作限制

可以在 数据库在线并且正在使用时进行备份 。 但是,存在下列限制:

无法备份脱机数据

隐式或显式引用脱机数据的任何备份操作都会失败。 一些典型示例包括:

  • 您请求完整数据库备份,但是数据库的一个文件组脱机。 由于所有文件组都隐式包含在完整数据库备份中,因此,此操作将会失败。

    若要备份此数据库,可以使用文件备份并仅指定联机的文件组。

  • 请求部分备份,但是有一个读/写文件组处于脱机状态。 由于部分备份需要使用所有读/写文件组,因此该操作失败。

  • 请求特定文件的文件备份,但是其中有一个文件处于脱机状态。 该操作失败。 若要备份联机文件,可以省略文件列表中的脱机文件并重复该操作。

通常,即使一个或多个数据文件不可用,日志备份也会成功。 但如果某个文件包含大容量日志恢复模式下所做的大容量日志更改,则所有文件都必须都处于联机状态才能成功备份。

并发限制

SQL Server 可以使用联机备份过程来备份数据库。 在备份过程中,可以进行多个操作;例如:在执行备份操作期间允许使用 INSERT、UPDATE 或 DELETE 语句。 但是,如果在正在创建或删除数据库文件时尝试启动备份操作,则备份操作将等待,直到创建或删除操作完成或者备份超时。

在数据库备份或事务日志备份的过程中无法执行的操作包括:

  • 文件管理操作,如含有 ADD FILE 或 REMOVE FILE 选项的 ALTER DATABASE 语句。
  • 收缩数据库或文件操作。 这包括自动收缩操作。
  • 如果在进行备份操作时尝试创建或删除数据库文件,则创建或删除操作将失败。

如果备份操作与文件管理操作或收缩操作重叠,则产生冲突。 无论哪个冲突操作首先开始,第二个操作总会等待第一个操作设置的锁超时。(超时期限由会话超时设置控制。)如果在超时期限内释放锁,第二个操作将继续执行。 如果锁超时,则第二个操作失败。

测试备份!

直到完成备份测试后,才会生成还原策略。 必须通过将数据库副本还原到测试系统,针对每个数据库的备份策略进行全面测试。 您必须对每种要使用的备份类型进行还原测试。 另外建议在还原备份后,通过数据库的 DBCC CHECKDB 执行数据库一致性检查,以验证备份媒体是否未损坏。

使用 Transact-SQL 创建维护计划

在 “对象资源管理器” 中,连接到 数据库引擎的实例。

在标准菜单栏上,单击 “新建查询” 。

将以下示例复制并粘贴到查询窗口中,然后单击“执行” 。

USE msdb;  
GO  
--  Adds a new job, executed by the SQL Server Agent service, called "HistoryCleanupTask_1".  
EXEC dbo.sp_add_job  
   @job_name = N'HistoryCleanupTask_1',   
   @enabled = 1,   
   @description = N'Clean up old task history' ;   
GO  
-- Adds a job step for reorganizing all of the indexes in the HumanResources.Employee table to the HistoryCleanupTask_1 job.   
EXEC dbo.sp_add_jobstep  
    @job_name = N'HistoryCleanupTask_1',   
    @step_name = N'Reorganize all indexes on HumanResources.Employee table',   
    @subsystem = N'TSQL',   
    @command = N'USE AdventureWorks2012  
GO  
ALTER INDEX AK_Employee_LoginID ON HumanResources.Employee REORGANIZE WITH ( LOB_COMPACTION = ON )   
GO  
USE AdventureWorks2012  
GO  
ALTER INDEX AK_Employee_NationalIDNumber ON HumanResources.Employee REORGANIZE WITH ( LOB_COMPACTION = ON )   
GO  
USE AdventureWorks2012  
GO  
ALTER INDEX AK_Employee_rowguid ON HumanResources.Employee REORGANIZE WITH ( LOB_COMPACTION = ON )   
GO  
USE AdventureWorks2012  
GO  
ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee REORGANIZE WITH ( LOB_COMPACTION = ON )   
GO  
USE AdventureWorks2012  
GO  
ALTER INDEX IX_Employee_OrganizationNode ON HumanResources.Employee REORGANIZE WITH ( LOB_COMPACTION = ON )   
GO  
USE AdventureWorks2012  
GO  
ALTER INDEX PK_Employee_BusinessEntityID ON HumanResources.Employee REORGANIZE WITH ( LOB_COMPACTION = ON )   
GO  
',   
    @retry_attempts = 5,   
    @retry_interval = 5 ;   
GO  
-- Creates a schedule named RunOnce that executes every day when the time on the server is 23:00.   
EXEC dbo.sp_add_schedule  
    @schedule_name = N'RunOnce',   
    @freq_type = 4,   
    @freq_interval = 1,   
    @active_start_time = 233000 ;   
GO  
-- Attaches the RunOnce schedule to the job HistoryCleanupTask_1.   
EXEC sp_attach_schedule  
   @job_name = N'HistoryCleanupTask_1',  
   @schedule_name = N'RunOnce' ;   
GO

有关详细信息,请参阅:

sp_add_job (Transact-SQL)

添加 SQL 代理服务执行的新作业

sp_add_job [ @job_name = ] 'job_name'  
     [ , [ @enabled = ] enabled ]   
     [ , [ @description = ] 'description' ]   
     [ , [ @start_step_id = ] step_id ]   
     [ , [ @category_name = ] 'category' ]   
     [ , [ @category_id = ] category_id ]   
     [ , [ @owner_login_name = ] 'login' ]   
     [ , [ @notify_level_eventlog = ] eventlog_level ]   
     [ , [ @notify_level_email = ] email_level ]   
     [ , [ @notify_level_netsend = ] netsend_level ]   
     [ , [ @notify_level_page = ] page_level ]   
     [ , [ @notify_email_operator_name = ] 'email_name' ]   
          [ , [ @notify_netsend_operator_name = ] 'netsend_name' ]   
     [ , [ @notify_page_operator_name = ] 'page_name' ]   
     [ , [ @delete_level = ] delete_level ]   
     [ , [ @job_id = ] job_id OUTPUT ]

参数
[ @job_name = ] ‘job_name’ 作业的名称。 该名称必须是唯一的,并且不能包含 (%) 字符的百分比。 job_name为 nvarchar (128) ,无默认值。

[ @enabled = ] enabled 指示已添加的作业的状态。 enabled为 tinyint,默认值为 1 (已启用) 。 如果 为 0,则作业未启用,并且不按计划运行;但是,它可以手动运行。

[ @description = ] ‘description’ 作业的说明。 说明 为 nvarchar (512) ,默认值为 NULL。 如果省略 说明 ,则使用“无可用说明”。

[ @start_step_id = ] step_id 要为作业执行的第一步的标识号。 step_id为 int,默认值为 1。

[ @category_name = ] ‘category’ 作业的类别。 类别为 sysname,默认值为 NULL。

[ @category_id = ] category_id 用于指定作业类别的语言无关的机制。 category_id为 int,默认值为 NULL。

[ @owner_login_name = ] ‘login’ 拥有作业的登录名。 login为 sysname,默认值为 NULL,该默认值解释为当前登录名。 只有 sysadmin 固定服务器角色的成员才能设置或更改 @owner_login_name的值。 如果不是 sysadmin 角色集的成员的用户或更改 @owner_login_name的值,则执行此存储过程会失败,并返回错误。

[ @notify_level_eventlog = ] eventlog_level 一个值,该值指示何时在此作业的 Microsoft Windows 应用程序日志中放置条目。 eventlog_level为 int,可以是其中一个值。
值 说明
0 从不
1 成功时
2 (默认值) 失败时
3 始终
[ @notify_level_email = ] email_level 一个值,该值指示完成此作业后何时发送电子邮件。 email_level为 int,默认值为 0,表示永不。 email_level使用 与eventlog_level相同的值。

[ @notify_level_netsend = ] netsend_level 一个值,该值指示完成此作业后何时发送网络消息。 netsend_level为 int,默认值为 0,表示永不。 netsend_level 使用 与eventlog_level相同的值。

[ @notify_level_page = ] page_level 一个值,该值指示完成此作业后何时发送页面。 page_level为 int,默认值为 0,表示永远不会。 page_level使用 与eventlog_level相同的值。

[ @notify_email_operator_name = ] ‘email_name’ 到达 email_level 时要发送电子邮件的人员的电子邮件名称。 email_name 为 sysname,默认值为 NULL。

[ @notify_netsend_operator_name = ] ‘netsend_name’ 完成此作业后向其发送网络消息的操作员的名称。 netsend_name为 sysname,默认值为 NULL。

[ @notify_page_operator_name = ] ‘page_name’ 完成此作业后要页面的人员的名称。 page_name为 sysname,默认值为 NULL。

[ @delete_level = ] delete_level 一个值,该值指示何时删除作业。 delete_value为 int,默认值为 0,这意味着永远不会。 delete_level使用与 eventlog_level相同的值。

备注

当delete_level为 3 时,无论为作业定义的任何计划,该作业仅执行一次。 而且,如果作业将自身删除,则将同时删除该作业的历史记录。

[ @job_id = ] _job_idOUTPUT 如果成功创建,则分配给作业的作业标识号。 job_id 是 uniqueidentifier 类型的输出变量,默认值为 NULL。

sp_add_jobstep (Transact-SQL)

将步骤 (操作) 添加到 SQL 代理作业。

sp_add_jobstep [ @job_id = ] job_id | [ @job_name = ] 'job_name'
     [ , [ @step_id = ] step_id ]
     { , [ @step_name = ] 'step_name' }
     [ , [ @subsystem = ] 'subsystem' ]
     [ , [ @command = ] 'command' ]
     [ , [ @additional_parameters = ] 'parameters' ]
          [ , [ @cmdexec_success_code = ] code ]
     [ , [ @on_success_action = ] success_action ]
          [ , [ @on_success_step_id = ] success_step_id ]
          [ , [ @on_fail_action = ] fail_action ]
          [ , [ @on_fail_step_id = ] fail_step_id ]
     [ , [ @server = ] 'server' ]
     [ , [ @database_name = ] 'database' ]
     [ , [ @database_user_name = ] 'user' ]
     [ , [ @retry_attempts = ] retry_attempts ]
     [ , [ @retry_interval = ] retry_interval ]
     [ , [ @os_run_priority = ] run_priority ]
     [ , [ @output_file_name = ] 'file_name' ]
     [ , [ @flags = ] flags ]
     [ , { [ @proxy_id = ] proxy_id
         | [ @proxy_name = ] 'proxy_name' } ]

参数
[ @job_id = ] job_id 要向其添加步骤的作业的标识号。 job_id 是 uniqueidentifier,默认值为 NULL。

[ @job_name = ] ‘job_name’ 要向其添加步骤的作业的名称。 job_name 为 sysname,默认值为 NULL。

备注

必须指定 job_id 或 job_name ,但不能指定两者。

[ @step_id = ] step_id 作业步骤的序列号。 步骤标识号从 1 开始,增量不带间隙。 如果在现有序列中插入一个步骤,则将自动调整序列号。 如果未指定 step_id, 则提供一个值。 step_id 为 int,默认值为 NULL。

[ @step_name = ] ‘step_name’ 步骤的名称。 step_name 为 sysname,无默认值。

[ @subsystem = ] ‘subsystem’ SQL Server 代理服务用来执行 命令的子系统。 子系统 是 nvarchar (40) ,可以是其中一个值。

在这里插入图片描述
[ @command = ] 'command’通过子系统由 SQLServerAgent 服务执行的命令。 命令 为 nvarchar (max) ,默认值为 NULL。 SQL Server 代理提供标记替换功能;在编写软件程序时,它可提供与变量相同的灵活性。

重要

作业步骤中使用的所有标记现在必须附带转义宏,否则,这些作业步骤将会失败。
此外,您现在还必须用括号将标记名称括起来,并在标记语法开头加上美元符号 ($)。 例如:

$(ESCAPE_宏名称(DATE))

有关这些令牌以及更新作业步骤以使用新令牌语法的详细信息,请参阅 “在作业步骤中使用令牌”。

重要

对 Windows 事件日志拥有写入权限的任何 Windows 用户都可以访问由 SQL Server 代理警报或 WMI
警报激活的作业步骤。 为了防范此安全隐患,默认情况下,可以在由警报激活的作业中使用的特定 SQL Server 代理标记已被禁用。
这些标记包括:A-DBN、A-SVR、A-ERR、A-SEV、A-MSG 和 WMI(属性) 。
请注意,在此版本中,对标记的使用扩展至所有警报。

如果您需要使用这些标记,请首先确保只有可信任的 Windows 安全组(如 Administrators 组)成员才对安装 SQL
Server 的计算机的事件日志拥有写入权限。 然后在对象资源管理器中右键单击“SQL Server
代理”,选择“属性”,并在“警报系统”页上选择“为警报的所有作业响应替换标记”以启用这些标记。

[ @additional_parameters = ] ‘parameters’ 仅用于信息性目的标识。 不支持。 不保证以后的兼容性。 参数 为 ntext,默认值为 NULL。

[ @cmdexec_success_code = ] codeCmdExec 子系统命令返回的值,指示该命令已成功执行。 代码 为 int,默认值为 0。

[ @on_success_action = ] success_action 如果步骤成功,则执行的操作。 success_action 是 tinyint,可以是其中一个值。

在这里插入图片描述
[ @on_success_step_id = ] success_step_id 如果步骤成功且 success_action 为 4,则此作业中要执行的步骤的 ID。 success_step_id 为 int,默认值为 0。

[ @on_fail_action = ] fail_action 如果步骤失败,要执行的操作。 fail_action 是 tinyint,可以是其中一个值。
在这里插入图片描述
[ @on_fail_step_id = ] fail_step_id 如果步骤失败且 fail_action 为 4,则此作业中要执行的步骤的 ID。 fail_step_id为 int,默认值为 0。

[ @server = ] ‘server’ 仅用于信息性目的标识。 不支持。 不保证以后的兼容性。 服务器 为 nvarchar (30) ,默认值为 NULL。

[ @database_name = ] ‘database’ 要在其中执行 Transact-SQL 步骤的数据库的名称。 数据库 是 sysname,默认值为 NULL,在这种情况下使用 master 数据库。 不允许用方括号 ([ ]) 将名称括起来。 对于 ActiveX 作业步骤, 数据库 是该步骤使用的脚本语言的名称。

[ @database_user_name = ] ‘user’ 执行 Transact-SQL 步骤时要使用的用户帐户的名称。 用户 为 sysname,默认值为 NULL。 当用户为 NULL 时,该步骤在作业所有者的用户上下文中对数据库运行。 只有在作业所有者是 SQL Server sysadmin 时,SQL Server 代理才包括此参数。 如果是这样,则给定的 Transact-SQL 步骤将在给定的 SQL Server 用户名的上下文中执行。 如果作业所有者不是 SQL Server sysadmin,则 Transact-SQL 步骤将始终在拥有此作业的登录名的上下文中执行,并且 @database_user_name 将忽略该参数。

[ @retry_attempts = ] retry_attempts 如果此步骤失败,重试尝试次数。 retry_attempts为 int,默认值为 0,表示没有重试尝试。

[ @retry_interval = ] retry_interval 重试尝试之间的时间(以分钟为单位)。 retry_interval为 int,默认值为 0,表示 0 分钟间隔。

[ @os_run_priority = ] run_priority 保留。

[ @output_file_name = ] ‘file_name’ 保存此步骤输出的文件的名称。 file_name 为 nvarchar (200) ,默认值为 NULL。 file_name 可以包含 命令下列出的一个或多个令牌。 此参数仅在 Transact-SQL、 CmdExec、 PowerShell、Integration Services 或 Analysis Services 子系统上运行的命令有效。

[ @flags = ] flags 控件行为的选项。 标志 为 int,可以是其中一个值。

在这里插入图片描述
[ @proxy_id = ] proxy_id 作业步骤运行方式的代理的 ID 号。 proxy_id 类型 为 int,默认值为 NULL。 如果未指定 任何proxy_id ,则未指定 任何proxy_name ,并且未指定 任何user_name ,则作业步骤将作为 SQL Server 代理的服务帐户运行。

[ @proxy_name = ] ‘proxy_name’ 作业步骤作为运行方式的代理的名称。 proxy_name 类型为 sysname,默认值为 NULL。 如果未指定 任何proxy_id ,则未指定 任何proxy_name ,并且未指定 任何user_name ,则作业步骤将作为 SQL Server 代理的服务帐户运行。

sp_add_schedule (Transact-SQL)

创建一个可由任意数量的作业使用的计划

sp_add_schedule [ @schedule_name = ] 'schedule_name'   
    [ , [ @enabled = ] enabled ]  
    [ , [ @freq_type = ] freq_type ]  
    [ , [ @freq_interval = ] freq_interval ]   
    [ , [ @freq_subday_type = ] freq_subday_type ]   
    [ , [ @freq_subday_interval = ] freq_subday_interval ]   
    [ , [ @freq_relative_interval = ] freq_relative_interval ]   
    [ , [ @freq_recurrence_factor = ] freq_recurrence_factor ]   
    [ , [ @active_start_date = ] active_start_date ]   
    [ , [ @active_end_date = ] active_end_date ]   
    [ , [ @active_start_time = ] active_start_time ]   
    [ , [ @active_end_time = ] active_end_time ]   
    [ , [ @owner_login_name = ] 'owner_login_name' ]  
    [ , [ @schedule_uid = ] schedule_uid OUTPUT ]  
    [ , [ @schedule_id = ] schedule_id OUTPUT ]
    [ , [ @originating_server = ] server_name ] /* internal */

参数
[ @schedule_name = ] ‘schedule_name’ 计划的名称。 schedule_name 为 sysname,没有默认值。

[ @enabled = ] enabled 指示计划的当前状态。 enabled 为 tinyint,默认值为 1 (已启用) 。 如果 为 0,则不启用计划。 如果不启用计划,则作业不会按此计划运行。

[ @freq_type = ] freq_type 一个值,该值指示何时执行作业。 freq_type为 int,默认值为 0,可以是以下值之一。

在这里插入图片描述

[ @freq_interval = ] freq_interval 执行作业的天数。 freq_interval 为 int,默认值为 1,取决于 freq_type的值。

在这里插入图片描述

[ @freq_subday_type = ] freq_subday_type 指定 freq_subday_interval单位。 freq_subday_type为 int,默认值为 0,可以是其中一个值。

在这里插入图片描述

[ @freq_subday_interval = ] freq_subday_interval 每个作业执行之间要发生的 freq_subday_type 句点数。 freq_subday_interval为 int,默认值为 0。 注意:间隔应大于 10 秒。 在freq_subday_type等于 1 的情况下,将忽略freq_subday_interval。

[ @freq_relative_interval = ] freq_relative_interval如果freq_interval是每月的 32 (相对) ,则每个月出现freq_interval。 freq_relative_interval为 int,默认值为 0,可以是以下值之一。 freq_relative_interval在freq_type不等于 32 的情况下被忽略。

在这里插入图片描述

[ @freq_recurrence_factor = ] freq_recurrence_factor 计划的作业执行之间的周数或月数。 仅当freq_type为 8、16 或 32 时,才会使用freq_recurrence_factor。 freq_recurrence_factor 为 int,默认值为 0。

[ @active_start_date = ] active_start_date 作业执行开始的日期。 active_start_date 为 int,默认值为 NULL,表示今天的日期。 日期的格式为 YYYYMMDD。 如果 active_start_date 不为 NULL,则日期必须大于或等于19900101。

创建了计划后,请检查其开始日期,确认该日期是否正确。 有关详细信息,请参阅 “创建和将计划附加到作业”中的“计划开始日期”部分。

对于每周或每月时间表,如果活动开始日期是在过去,则代理将忽略该日期,改用当前日期。 在使用 sp_add_schedule 创建 SQL 代理计划时,有一个选项可用来指定作为作业执行开始日期的参数 active_start_date。 如果计划类型是每周或每月并且 active_start_date 参数设置为过去中的某个日期,则忽略该 active_start_date 参数并且将当前日期用于 active_start_date。

[ @active_end_date = ] active_end_date 作业执行可以停止的日期。 active_end_date为 int,默认值为 99991231,表示 9999 年 12 月 31 日。 其格式为 YYYYMMDD。

[ @active_start_time = ] active_start_timeactive_start_date和active_end_date开始执行作业的任意一天的时间。 active_start_time 为 int,默认值为 000000,它指示 24 小时 12:00:00 A.M.,必须使用 HHMMSS 格式输入。

[ @active_end_time = ] active_end_time在active_start_date和active_end_date之间的任意一天结束作业执行的时间。 active_end_time 为 int,默认值为 235959,指示下午 24 小时 11:59:59,并且必须使用 HHMMSS 格式输入。

[ @owner_login_name = ] ‘owner_login_name’ 拥有计划的服务器主体的名称。 owner_login_name 为 sysname,默认值为 NULL,表示计划由创建者拥有。

[ @schedule_uid = ] _schedule_uidOUTPUT 计划的唯一标识符。 schedule_uid 是 uniqueidentifier 类型的变量。

[ @schedule_id = ] _schedule_idOUTPUT 计划的标识符。 schedule_id 是 int 类型的变量。

[ @originating_server = ] server_name

标识为仅供参考。 不支持。 不保证以后的兼容性。

sp_attach_schedule (Transact-SQL)

设置一个作业计划

sp_attach_schedule  
     { [ @job_id = ] job_id | [ @job_name = ] 'job_name' } ,   
     { [ @schedule_id = ] schedule_id   
     | [ @schedule_name = ] 'schedule_name' }

参数
[ @job_id = ] job_id 计划添加到的作业的作业标识号。 job_iduniqueidentifier,默认值为 NULL。

[ @job_name = ] ‘job_name’ 计划添加到的作业的名称。 job_namesysname,默认值为 NULL。

备注

必须 job_id 或 job_name ,但不能同时指定这两者。

[ @schedule_id = ] schedule_id 要为作业设置的计划的计划标识号。 schedule_id为 int,默认值为 NULL。

[ @schedule_name = ] ‘schedule_name’ 要为作业设置的计划的名称。 schedule_namesysname,默认值为 NULL。

备注

必须 schedule_id 或 schedule_name ,但不能同时指定这两者。

测试

创建测试数据库

USE [master]
GO

CREATE DATABASE [SQLTestDB]
GO

USE [SQLTestDB]
GO
CREATE TABLE SQLTest
   (
      ID INT NOT NULL PRIMARY KEY,
      c1 VARCHAR(100) NOT NULL,
      dt1 DATETIME NOT NULL DEFAULT getdate()
   );
GO

USE [SQLTestDB]
GO

INSERT INTO SQLTest (ID, c1) VALUES (1, 'test1')
INSERT INTO SQLTest (ID, c1) VALUES (2, 'test2')
INSERT INTO SQLTest (ID, c1) VALUES (3, 'test3')
INSERT INTO SQLTest (ID, c1) VALUES (4, 'test4')
INSERT INTO SQLTest (ID, c1) VALUES (5, 'test5')
GO

SELECT * FROM SQLTest
GO

完整备份到默认位置的磁盘

USE SQLTestDB;
GO
BACKUP DATABASE SQLTestDB
TO DISK = 'f:\tmp\SQLTestDB.bak'
   WITH FORMAT,
      MEDIANAME = 'SQLServerBackups',
      NAME = 'Full Backup of SQLTestDB';
GO
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sqlserver-备份和还原 的相关文章

  • 如何使用一个命令删除 SQL 数据库中的所有索引?

    那么 如何通过一条命令删除 SQL 数据库中的所有索引呢 我有这个命令可以获取所有 20 个左右的 drop 语句 但是如何从这个 结果集 运行所有这些 drop 语句呢 select from vw drop idnex 给我相同列表的另
  • SQL服务器超时

    我的应用程序是在经典 asp 上开发的 但也使用 asp net 因为我正在将应用程序迁移到 Net 上 它使用 SQL Server 作为数据库并托管在 Windows Server 2003 上 现在的问题是应用程序在很长一段时间内继续
  • 需要在 SQL Server 中透视字符串值

    我有一个包含值的表 描述为 Occupation String Name String Developer A Developer B Designer X Coder Y Coder Z 我需要数据透视格式的值 Designer Deve
  • SQL-Server:备份集保存现有数据库以外的数据库的备份

    我正在尝试恢复数据库的 SQL Server 备份文件 但它抛出如下错误 备份集保存除现有数据库之外的数据库的备份 我的数据库是SQL Server 2008 备份文件是2005年的 可能是什么问题 我也遇到过这个问题 解决方案 不要创建空
  • 什么会阻止 Docker 容器中运行的代码连接到单独服务器上的数据库?

    我有一个在 Ubuntu 14 04 上的 Docker 容器中运行的 NET Core 1 1 应用程序 它无法连接到在单独服务器上运行的 SQL Server 数据库 错误是 未处理的异常 System Data SqlClient S
  • 如何使用 php 在 sql 查询中转义引号?

    我有一个疑问 sql SELECT CustomerID FROM tblCustomer WHERE EmailAddress addslashes POST username AND Password addslashes POST p
  • 为什么 ISNUMERIC('.') 返回 1?

    最近我在 SQL Server 中使用 ISNUMERIC 时遇到了一个问题 导致找到了这段代码 SELECT ISNUMERIC 这会返回 1 如 true 所示 难道不应该像 false 一样返回 0 吗 See Numeric 损坏了
  • 如何使用 SQL 查询创建逗号分隔的列表?

    我有 3 个表 名为 应用程序 ID 名称 资源 id 名称 应用程序资源 id app id resource id 我想在 GUI 上显示所有资源名称的表格 在每一行的一个单元格中 我想列出该资源的所有应用程序 以逗号分隔 所以问题是
  • 如何将 SQL Server 中同一表中的一列插入到另一列中

    我需要将一列的数据插入到同一个表中的另一列中 谁能告诉我这个怎么写 Thanks UPDATE table SET col 2 col 1
  • 仅选择 Varchar 列中的数字[重复]

    这个问题在这里已经有答案了 在 SQL Server 2008 R2 中 我在 varchar 12 列中有一些数据 它看起来像这样 Data 1234 1765 34566 123 SDRMH HJG434 我想从所有包含 的行中删除 并
  • 如何关闭与数据库的现有连接

    我想关闭与 MS SQL Server 的现有连接 以便可以通过编程方式对该数据库进行恢复 这应该会断开其他所有人的连接 并使您成为唯一的用户 alter database YourDb set single user with rollb
  • 插入多行而不重复语句的“INSERT INTO ...”部分?

    我知道我几年前就已经这样做过 但我不记得语法了 而且由于提取了大量有关 批量导入 的帮助文档和文章 我在任何地方都找不到它 这就是我想做的 但语法不完全正确 请以前做过此操作的人帮助我 INSERT INTO dbo MyTable ID
  • 根据最大值连接表

    这是我正在谈论的内容的一个简化示例 Table students exam results id name id student id score date 1 Jim 1 1 73 8 1 09 2 Joe 2 1 67 9 2 09 3
  • 如何授予 SQL Server 代理访问权限以便能够写入/修改系统文件?

    我的工作有一个存储过程 运行 BCP 来查询一些数据 如果我单独运行 QUERYOUT 命令 它就会起作用 但是 如果我尝试在作业中运行它 它会创建文件但 挂起 并且数据永远不会放入文件中 这会永远挂起 所以我通常终止 BCP exe 我的
  • 如何使用 ssis 2008 循环遍历 Excel 文件并获取工作表名称

    我正在尝试将 Excel 文件中的数据加载到 SQL 数据库表中 该文件的工作表名称不是静态的 工作表名称包含 yyyymmdd 它会随每个文件而变化 我按照提供的解决方案进行操作如何使用 SSIS 包循环遍历 Excel 文件并将其加载到
  • 从完整路径解析文件名和路径

    我需要使用 SQL 查询从完整路径解析文件名和文件路径 例如 完整路径 SERVER D EXPORTFILES EXPORT001 csv FileName Path EXPORT001 csv SERVER D EXPORTFILES
  • SQL Server 中全文搜索的奇怪行为

    我的 MyTable 带有列消息 NVARCHAR MAX ID 为 1 的记录包含消息 0123456789333444 Test 当我运行以下查询时 DECLARE Keyword NVARCHAR 100 SET Keyword 01
  • 从一张表更新并插入另一张表

    我有两张桌子 table1 ID 代码 姓名 table2 ID 代码 姓名 具有相同的列 我想将数据从 table1 插入到 table2 或更新列 如果 table2 中存在 table1 ID table2 ID 执行此操作的简单方法
  • 在 SQL Server 中获取一周的第一天

    我试图按周对记录进行分组 将聚合日期存储为一周的第一天 然而 我用于四舍五入日期的标准技术似乎无法在几周内正常工作 尽管它可以在天 月 年 季度和我应用的任何其他时间范围内正常工作 这是 SQL select start of week d
  • 如何在sql server 2008R2中将单个单元格拆分为多个列?

    我想将每个名称拆分为各个列 create table split test value integer Allnames varchar 40 insert into split test values 1 Vinoth Kumar Raj

随机推荐

  • Win7系统提示找不到dmdskres.dll文件的解决办法

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个dmdskre
  • Win7系统提示找不到dmdskres2.dll文件的解决办法

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个dmdskre
  • Win7系统提示找不到dmdskmgr.dll文件的解决办法

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个dmdskmg
  • STM32F103概要

    The STM32F103x4 STM32F103x6 STM32F103xC STM32F103xD and STM32F103xE are a drop in replacement for STM32F103x8 B medium d
  • Win7系统提示找不到dmdlgs.dll文件的解决办法

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个dmdlgs
  • Win7系统提示找不到dispex.dll文件的解决办法

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个dispex
  • 最具挑战的骑行路线

    1 318川藏线 2 独库公路 561公里 3 珠峰尼泊尔 1000公里 4 沙漠公路 1800公里 5 219新藏线 2500公里 下面是一些别人的骑行记录 证书或奖牌 参考 1 抖音 Max骑行玩家 https v douyin com
  • 【贪心算法】【中位贪心】LeetCode:100123.执行操作使频率分数最大

    涉及知识点 双指针 C 算法 前缀和 前缀乘积 前缀异或的原理 源码及测试用例 包括课程视频 贪心算法 题目 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 你可以对数组执行 至多 k 次操作 从数组中选择一个下标 i 将 n
  • sqlserver同步-日志传送

    先决条件 主数据库必须使用 完整恢复模式或大容量日志恢复模式 将数据库切换为简单恢复模式会导致日志传送停止工作 在配置日志传送之前 您 必须创建共享 以便辅助服务器可以访问事务日志备份 这是对生成事务日志备份的目录的共享 例如 如果将事务日
  • RFID工业识别系统的优势和价值

    RFID是物联网感知层最重要的组成部分之一 它可以通过感知物品来实现智能化识别和管理 实现不同设备之间的互联 本文将深入探讨RFID工业识别系统的优势和价值 并探讨其实际应用的案例情况 RFID工业识别系统的优势和价值 RFID作为物联网感
  • ubuntu22安装python3虚拟环境

    文章目录 安装python虚拟环境工具venv 创建项目根目录 创建虚拟环境 开启虚拟环境 安装项目依赖 退出虚拟环境 安装python虚拟环境工具venv 选择合适版本 root gslserver sudo apt install py
  • 向华为学习:基于BLM模型的战略规划研讨会实操的详细说明,含研讨表单(三)

    岁末年初 公司如何做战略规划 用华为和许多标杆企业在用的BLM模型来组织战略规划研讨会是一种行之有效的结构化方法 前面两篇文章 华研荟结合自己的经验和实践 详细介绍了基于BLM模型的战略规划研讨会的设计和组织流程 以及战略研讨会开始前的准备
  • 工业RFID读写器性能参数解析

    工业RFID读写器的性能参数主要有以下几项 工作频率 输出功率 输出接口 读写器类型 工作方式 读写器优先或电子标签优先等 1 工作频率 RFID读写器的工作频率是指其工作的频率范围 通常由读写器的工作频率决定 同时要与电子标签的工作频率保
  • postgresql安装

    这里写自定义目录标题 准备主机环境 配置网卡 关闭selinux 关闭防护墙 yum安装pg 登陆官网 安装yum源 安装12版本pg
  • 题解 | #平均活跃天数和月活人数#

    金融科技岗分享 欢聚shopline 凉 又遇毁到offer 爱奇艺互动产品运营实习面经 百度大搜2024校招补录 搜索时效性团队工作职责 1 通过query理解 召回 排序全链路的优化 持续优化百度搜索时效排序效果2 持续探索落地最前沿的
  • windows netstat命令

    前言 Netstat是控制台命令 是一个监控TCP IP网络的非常有用的工具 它可以显示路由表 实际的网络连接以及每一个网络接口设备的状态信息 Netstat用于显示与IP TCP UDP和ICMP协议相关的统计数据 一般用于检验本机各端口
  • 机器配音效果很好的软件是什么?这篇文章告诉你

    听说你对ai配音工具感兴趣啊 那我来跟你说说 这些东西可真是让人大开眼界 你想象一下 用一款ai配音工具 你就可以变身为任何人 不需要真的买那些昂贵的化妆品和服装 也不需要练习无数个小时来模仿别人的声音 无论是制作幽默搞笑的配音 还是严肃正
  • sqlserver-存储过程

    sqlserver代码格式化网站 https www dpriver com pp sqlformat htm 存储过程中的SET ANSI NULLS ON有什么用 1 SET ANSI NULLS ON null与null不相等 2 S
  • SpringBoot Whitelabel Error Page 报错--【已解决】

    springboot 报错信息如下 这个报错页面就是个404 代表你访问的url 没有对应的的requestmapping 其实没啥影响的一个问题 但是看到 Error 就是不爽 改了他丫的 解决方法如下 一 调整 application
  • sqlserver-备份和还原

    为何备份 备份 SQL Server 数据库 在备份上运行测试还原过程以及在另一个安全位置存储备份副本可防止可能的灾难性数据丢失 备份是保护数据的唯一方法 使用有效的数据库备份 可从多种故障中恢复数据 例如 介质故障 用户错误 例如 误删除