Job操作:数据库备份与还原处理

这篇博客详细介绍了如何在SQL Server中使用T-SQL语句实现数据库的备份与还原功能,包括获取默认目录、备份和恢复SQL的使用以及作业创建。文中提供了一系列存储过程,用于自动化备份和恢复操作,例如按月、周、日的备份计划,并演示了如何应用这些存储过程创建作业。
摘要由CSDN通过智能技术生成

--利用T-SQL语句,实现数据库的备份与还原的功能

--体现了SQL Server中的四个知识点:

--1.   获取SQL Server服务器上的默认目录

--2.   备份SQL语句的使用

--3.   恢复SQL语句的使用,同时考虑了强制恢复时关闭其他用户进程的处理

--4.   作业创建SQL语句的使用

 

/*1.--得到数据库的文件目录

 

 @dbname 指定要取得目录的数据库名

   如果指定的数据不存在,返回安装SQL时设置的默认数据目录

   如果指定NULL,则返回默认的SQL备份目录名

*/

 

/*--调用示例

 select 数据库文件目录=dbo.f_getdbpath('tempdb')

  ,[默认SQL SERVER数据目录]=dbo.f_getdbpath('')

  ,[默认SQL SERVER备份目录]=dbo.f_getdbpath(null)

--*/

if exists 

(

select * 

from dbo.sysobjects 

where id = object_id(N'[dbo].[f_getdbpath]') and xtype in (N'FN', N'IF', N'TF')

)

drop function [dbo].[f_getdbpath]

GO

 

create function f_getdbpath

(

@dbname sysname

)

returns nvarchar(260)

as 

begin

 declare @re nvarchar(260)

 if @dbname is null or db_id(@dbname) is null

  select @re=rtrim(reverse(filename)) 

  from master..sysdatabases 

  where name='master'

 else

  select @re=rtrim(reverse(filename)) 

  from master..sysdatabases 

  where name=@dbname

 

 if @dbname is null

  set @re=reverse(substring(@re,charindex('/',@re)+5,260))+'BACKUP'

 else

  set @re=reverse(substring(@re,charindex('/',@re),260))

 return(@re)

end

go

 

 

/*2.--备份数据库*/

 

/*--调用示例

 

--备份当前数据库

exec p_backupdb @bkpath='c:/',@bkfname='db_/DATE/_db.bak'

 

--差异备份当前数据库

exec p_backupdb @bkpath='c:/',@bkfname='db_/DATE/_df.bak',@bktype='DF'

 

--备份当前数据库日志

exec p_backupdb @bkpath='c:/',@bkfname='db_/DATE/_log.bak',@bktype='LOG'

 

--*/

 

if exists 

(

select * 

from dbo.sysobjects 

where id = object_id(N'[dbo].[p_backupdb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1

)

drop procedure [dbo].[p_backupdb]

GO

 

create proc p_backupdb

@dbname sysname='', --要备份的数据库名称,不指定则备份当前数据库

@bkpath nvarchar(260)='', --备份文件的存放目录,不指定则使用SQL默认的备份目录

@bkfname nvarchar(260)='', --备份文件名,文件名中可以用/DBNAME/代表数据库名,/DATE/代表日期,/TIME/代表时间

@bktype nvarchar(10)='DB', --备份类型:'DB'备份数据库,'DF' 差异备份,'LOG' 日志备份

@appendfile bit=1 --追加/覆盖备份文件

as

begin

 declare @sql varchar(8000)

 if isnull(@dbname,'')='' 

set @dbname=db_name()

 if isnull(@bkpath,'')='' 

set @bkpath=dbo.f_getdbpath(nul

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值