您现在的位置是:网站首页> 编程资料编程资料
通过T-SQL语句实现数据库备份与还原的代码_MsSql_
2023-05-26
557人已围观
简介 通过T-SQL语句实现数据库备份与还原的代码_MsSql_
--利用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)
--*/
ifexists (select*from dbo.sysobjects where id =object_id(N'[dbo].[f_getdbpath]') and xtype in (N'FN', N'IF', N'TF'))
dropfunction[dbo].[f_getdbpath]
GO
createfunction f_getdbpath(@dbname sysname)
returnsnvarchar(260)
as
begin
declare@renvarchar(260)
if@dbnameisnullordb_id(@dbname) isnull
select@re=rtrim(reverse(filename)) from master..sysdatabases where name='master'
else
select@re=rtrim(reverse(filename)) from master..sysdatabases where name=@dbname
if@dbnameisnull
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'
--*/
ifexists (select*from dbo.sysobjects where id =object_id(N'[dbo].[p_backupdb]') andOBJECTPROPERTY(id, N'IsProcedure') =1)
dropprocedure[dbo].[p_backupdb]
GO
createproc p_backupdb
@dbname sysname='', --要备份的数据库名称,不指定则备份当前数据库
@bkpathnvarchar(260)='', --备份文件的存放目录,不指定则使用SQL默认的备份目录
@bkfnamenvarchar(260)='', --备份文件名,文件名中可以用\DBNAME\代表数据库名,\DATE\代表日期,\TIME\代表时间
@bktypenvarchar(10)='DB', --备份类型:'DB'备份数据库,'DF' 差异备份,'LOG' 日志备份
@appendfilebit=1--追加/覆盖备份文件
as
declare@sqlvarchar(8000)
ifisnull(@dbname,'')=
--
--体现了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)
--*/
ifexists (select*from dbo.sysobjects where id =object_id(N'[dbo].[f_getdbpath]') and xtype in (N'FN', N'IF', N'TF'))
dropfunction[dbo].[f_getdbpath]
GO
createfunction f_getdbpath(@dbname sysname)
returnsnvarchar(260)
as
begin
declare@renvarchar(260)
if@dbnameisnullordb_id(@dbname) isnull
select@re=rtrim(reverse(filename)) from master..sysdatabases where name='master'
else
select@re=rtrim(reverse(filename)) from master..sysdatabases where name=@dbname
if@dbnameisnull
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'
--*/
ifexists (select*from dbo.sysobjects where id =object_id(N'[dbo].[p_backupdb]') andOBJECTPROPERTY(id, N'IsProcedure') =1)
dropprocedure[dbo].[p_backupdb]
GO
createproc p_backupdb
@dbname sysname='', --要备份的数据库名称,不指定则备份当前数据库
@bkpathnvarchar(260)='', --备份文件的存放目录,不指定则使用SQL默认的备份目录
@bkfnamenvarchar(260)='', --备份文件名,文件名中可以用\DBNAME\代表数据库名,\DATE\代表日期,\TIME\代表时间
@bktypenvarchar(10)='DB', --备份类型:'DB'备份数据库,'DF' 差异备份,'LOG' 日志备份
@appendfilebit=1--追加/覆盖备份文件
as
declare@sqlvarchar(8000)
ifisnull(@dbname,'')=
相关内容
- 卸载VS2011 Developer Preview后Sql Server2008 R2建立数据库关系图报“找不到指定的模块”错误的解决方法_MsSql_
- sqlserver 临时表 Vs 表变量 详细介绍_MsSql_
- 扩展性很好的一个分页存储过程分享_MsSql_
- 自动定时备份sqlserver数据库的方法_MsSql_
- sql添加数据后返回受影响行数据_MsSql_
- 自己收集比较强大的分页存储过程 推荐_MsSql_
- MSSQL优化之探索MSSQL执行计划(转)_MsSql_
- 运行asp.net程序 报错:磁盘空间不足_MsSql_
- 在数据库中自动生成编号的实现方法分享_MsSql_
- 多表关联同时更新多条不同的记录方法分享_MsSql_
