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 server 按组排名

    问题看似简单 但我却无法理解 这是针对 sql 服务器的 what I have in a table What I need as a output cksum id cksum id 2162514679 204 2162514679
  • 了解 SSMS 2008 中关系的更新和删除规则

    当我们定义外键约束时 我对 SQL Server 2008 Management Studio 中的更新和删除规则的含义感到困惑 我也没有找到相关的帮助文档 例如F1帮助 这是屏幕快照 如果有人能描述它们的含义并推荐一些相关文档来阅读 我将
  • Spark.read 在 Databricks 中给出 KrbException

    我正在尝试从 databricks 笔记本连接到 SQL 数据库 以下是我的代码 jdbcDF spark read format com microsoft sqlserver jdbc spark option url jdbc sql
  • Amazon RDS for SQL Server 是否支持 SSIS?

    从谷歌搜索中读到一些相互矛盾的答案 不确定答案是是 否还是可能 我觉得读的时候已经很清楚了this http docs aws amazon com AmazonRDS latest UserGuide CHAP SQLServer htm
  • 探查器模板可以迁移到较新版本的 SQL Profiler 吗?

    是否可以将 Profiler 模板迁移到较新版本的 SQL Server 就我而言 我想将 SQL 2008 模板带到 2012 年 我尝试过 1 直接文件复制和 2 导出 导入 在这两种情况下 旧模板都会运行 但无法修改 修改后会出现以下
  • 在 C#.NET 应用程序中使用 SQL Server 时间数据类型?

    如何使用 SQLtimeSQL Server 2008 中 C NET 中引入的数据类型 我一直在努力让它发挥作用 但没有成功 这是一个MSDN 文章 http msdn microsoft com en us library bb6751
  • SQL Server 列名区分大小写

    我使用的数据库具有 French CI AS 排序规则 CI 应该代表不区分大小写 但无论如何都是区分大小写的 我试图理解为什么 我断言这一点的原因是 使用 GIVEN 案例设置进行批量插入失败 但使用另一个 Given 案例设置则成功 例
  • C#的数组列表可以用来填充SSIS对象变量吗?

    我已在 C 脚本中填充了一个列表 并将其值分配给 SSIS 对象变量 然后 我使用该对象变量通过循环遍历 For every do 枚举器来执行一些 SQL 查询 我尝试通过 Foreach ado 枚举器执行此操作 但出现错误 X 变量不
  • 临时表是线程安全的吗?

    我正在使用 SQL Server 2000 它的许多存储过程广泛使用临时表 数据库的流量很大 我担心创建和删除临时表的线程安全性 假设我有一个存储过程 它创建了一些临时表 它甚至可以将临时表连接到其他临时表等 并且还可以说两个用户同时执行存
  • SQL Server 2014 安装中缺少 SQL Server Integration Services

    我正在尝试使用 Integration Services 安装 SQL Server 2014 Here https www microsoft com en US download details aspx id 42299是我以前用工具
  • 如何在NiFi中映射流文件中的列数据?

    我有 csv 文件 其结构如下 Alfreds Centro Ernst Island Bacchus Germany Mexico Austria UK Canada 01 02 03 04 05 现在我必须将这些数据移入数据库 如下所示
  • 如何跨多个表强制执行 CHECK 约束

    我有一个在 Microsoft SQL Server 2012 Express 中记录奶牛繁殖信息的数据库 显然 一头牛只有在出生后才能配种 并且在其一生中可能会配种多次 我需要在我的数据库中强制执行这些约束 我目前已经根据下图安排了一个架
  • SQL 国家字符 (NCHAR) 数据类型的真正用途是什么?

    也CHAR CHARACTER and VARCHAR CHARACTER VARYING SQL 提供了NCHAR NATIONAL CHARACTER and NVARCHAR NATIONAL CHARACTER VARYING 类型
  • VB6+SQL-Server:如何使用 ADODB.Command 执行带有命名参数的查询?

    我一直在尝试使用 ADODB Command 执行参数化查询 我知道我可以使用 对于参数 但我的查询相当大 我真的不想跟踪参数的确切顺序 我尝试了类似以下的操作 objCmd CommandType adCmdText objCmd Com
  • SQL中的NULL和编程语言中的NULL之间的区别

    我刚刚遇到一个关于如何在 T SQL 可能还有其他形式的 SQL 中处理 NULL 的有趣场景 这个问题得到了很好的描述和回答这个问题 https stackoverflow com questions 2866714 how does a
  • 如何连接sql中具有相同值但在同一个表的不同列中的行?

    我正在尝试合并来自不同列的具有相同值的数据 并且仅停止显示没有连接值的记录 例如我有 ID TaxDecNo PrevTaxDec 1 5374 11135 2 9864 7394 3 11135 21784 4 7394 6872 5 2
  • 将 SQL Server 与 Dart 结合使用

    我还没有找到很好的答案 所以我想尝试一下得到答案 将 Microsoft SQL Server 与 Dart 结合使用的最佳方式是什么 我需要它能够从基本上任何操作系统 网络和移动设备上使用它 我觉得最好的方法可能是 GraphQL 但我对
  • 无法删除 Access 中 SQL 表上的注册表

    我有一个在 Access 应用程序中链接的 SQL Server 表 如果我尝试使用删除查询删除记录 则没有问题 但是 如果我尝试直接在表中删除记录或在数据表模式下使用选择查询 Access 不允许我删除记录并引发以下警告 Microsof
  • 从 Getdate() 获取时间

    我想采取Getdate 结果 例如 2011 10 05 11 26 55 000 into 11 26 55 AM 我看过其他地方并发现 Select RIGHT CONVERT VARCHAR GETDATE 100 7 这给了我 11
  • 如何在 SQL Server 中连接

    我的数据库没有特定的列 因此我通过开关在查询中创建了一个列 我需要的是将此列与数据库中的另一列连接起来 select certificateDuration DurationType case when certificateDuratio

随机推荐

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