使用T-SQL进行数据库备份并检查该备份文件是否存在且作出相应处理

SQL sever2008数据库备份、还原以及库检查 阅读详情

使用T-SQL进行数据库备份并检查该备份文件是否存在且作出相应处理

USE master
GO
EXEC sp_addumpdevice 'disk', 'AdvWorksData',
'E:/开发软件/数据库/SQl2005示例数据库/AdvWorksData.bak'
BACKUP DATABASE AdventureWorks
   TO AdvWorksData

1.备份数据库语句:

EXEC sp_addumpdevice 'disk','数据库备份名称','文件路径'

BACKUP DATABASE 数据库名称
TO 数据库备份名称

2.sp_addumpdevice

代码
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER procedure [sys].[sp_addumpdevice]    -- 1995/09/07 12:01
    @devtype varchar(20),                -- disk, tape, or virtual_device
    @logicalname   sysname,                -- logical name of the device
    @physicalname  nvarchar(260),        -- physical name of the device
    @cntrltype  smallint = null,        -- obsolete: controller type - ignored.
    @devstatus  varchar(40) = null      -- obsolete: device characteristics -ignored
as
    declare @type_enum    smallint -- devtype enumeration value
    declare @returncode int
    declare @devtypeIn varchar(20)
    select @devtypeIn = @devtype
           ,@devtype = LOWER (@devtype collate Latin1_General_CI_AS)
    -- An open txn might jeopardize a recovery.
    set implicit_transactions off
    if @@trancount > 0
    begin
        raiserror(15002,-1,-1,'sys.sp_addumpdevice')
        return (1)
    end

    -- You must be SA to execute this sproc.
    if (not is_srvrolemember('diskadmin') = 1)
    begin
        raiserror(15247,-1,-1)
        return (1)
    end

    -- Check out the @devtype.
    select @type_enum = (case @devtype
        when 'disk'                then 2
        when 'tape'                then 5
        when 'virtual_device'    then 7
        end)

    if @type_enum is null
    begin
        raiserror(15044,-1,-1,@devtypeIn)
        return (1)
    end

    -- Check the args are not NULL.
    if @logicalname is null
    begin
        raiserror(15045,-1,-1)
        return(1)
    end

    -- Check to see that the @logicalname is valid.
    EXEC @returncode = sys.sp_validname @logicalname
    if @returncode <> 0
        return(1)

    if @physicalname is null
    begin
        raiserror(15046,-1,-1)
        return(1)
    end

    -- Prohibit certain special english words from being logical names.
    if (@logicalname IN ('disk', 'tape', 'virtual_device'))
    begin
        raiserror(15285,-1,-1,@logicalname)
        return (1)
    end

    BEGIN TRANSACTION
    -- Make sure that a device with @logicalname doesn't already exist.
    --  Always turn on the dump status bit, ignore @skip_tape (not in use)
    EXEC %%Device().NewDevice(Name = @logicalname, PhysicalName = @physicalname,
        Type = @type_enum, Size = 0)
    if @@error <> 0    -- duplicate logical name
    begin
        ROLLBACK TRANSACTION
        raiserror(15026,-1,-1,@logicalname)
        return (1)
    end

    -- Make sure physical file name would be unique among devices.
    if (select count(*) from master.dbo.sysdevices where phyname = @physicalname) > 1
    begin
        ROLLBACK TRANSACTION
        raiserror(15061,-1,-1,@physicalname)
        return (1)
    end

    COMMIT TRANSACTION

    return (0) -- sp_addumpdevice


 

3.这样备份有一个弊端。如果没有修改数据库备份名称,多次使用原有备份的名称,会将数据累加到该原有备份文件上面,比如该数据库第一次备份是100M,还是使用此名称备份下次就是200M,300M....,这样就要判断该备份文件是否存在!


代码
USE master
GO
declare @num int --申明一个接受返回值的变量
EXEC xp_fileexist 'E:/开发软件/数据库/SQl2005示例数据库/AdvWorksData.bak',@num output -- 执行文件存在否的验证 存在返回1 不存在返回0
if(@num = 1) --如果存在就给出提示或做其他功能的实现
begin
print '备份文件已经存在'
end
else --该文件不存在执行备份操作
begin
EXEC sp_addumpdevice 'disk', 'AdvWorksData',
'E:/开发软件/数据库/SQl2005示例数据库/AdvWorksData.bak'
BACKUP DATABASE AdventureWorks
   TO AdvWorksData
end
 

 改进,如果该备份文件已经存在使用当前系统日期时间作为文件名的一部分,这样每次备份几乎就不可能出现同名数据累加的现象了

 

代码
USE master
GO
declare @num int --申明一个接受返回值的变量
EXEC xp_fileexist 'E:/开发软件/数据库/SQl2005示例数据库/AdvWorksData.bak',@num output -- 执行文件存在否的验证 存在返回1 不存在返回0
if(@num = 1) --如果存在就给出提示或做其他功能的实现
begin
declare @file varchar(120),@name varchar(30)
set @file = 'E:/开发软件/数据库/SQl2005示例数据库/AdvWorksData_'+ replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-','_'),' ','_'),':','')+'.bak'
set @name = 'AdvWorksData'+CONVERT(VARCHAR(30),GETDATE(),9)
print '备份文件已经存在,自动按照日期重新命名进行备份'
EXEC sp_addumpdevice 'disk',@name , @file
BACKUP DATABASE AdventureWorks
   TO @name
end
else --该文件不存在执行备份操作
begin
EXEC sp_addumpdevice 'disk', 'AdvWorksData',
'E:/开发软件/数据库/SQl2005示例数据库/AdvWorksData.bak'
BACKUP DATABASE AdventureWorks
   TO AdvWorksData
end
 

 

注意:E:/开发软件/数据库/SQl2005示例数据库/  该文件是已经事先创建好了的,还可以判断文件是否存在然后进行处理,但考虑 一般备份文件的时候都有事先建立文件夹的习惯,所以这里不做处理。
 

我跋山涉水,翻山越岭,终于来到博客园的桃花深处,在这里我有一个家,名字叫"欢迎您"。

SQL Server数据库备份后无法还原的解决方法 您可以通过验证备份文件的校验和或使用SQL Server Management Studio(SSMS)的"还原数据库"向导来执行此操作。本文将介绍一些常见的原因和解决方法,以帮助您解决SQL Server数据库备份无法还原的问题。请注意,还原操作的语法和选项可能因SQL Server的不同版本而有所差异。通过遵循上述步骤,您应该能够解决大多数SQL Server数据库备份无法还原的问题,并成功还原您的数据库。在执行还原操作时,确保使用正确的T-SQL语法和选项。选项指定在还原过程中替换已经存在的数据库。 阅读详情

相关推荐

6、SQL Server数据库恢复与备份文件信息查询全解析

本文详细解析了SQL Server数据库的恢复与备份文件信息查询,包括还原与恢复的区别、RESTORE命令的使用、备份文件信息查询方法、日志序列号的重要性以及不同备份类型的恢复策略。通过实际操作示例和流程图,帮助数据库管理员高效应对数据丢失和故障恢复,提升数据库的安全性和可用性。

tequila的博客 180

关于ADO中的隐性事务

KeyLife富翁笔记 作者: HongYuan标题: 关于ADO中的隐性事务 关键字: 分类: 我学习Delphi,我努力 密级: 保护 (评分: , 回复: 0, 阅读: 230)»» ...

weixin_30421809的博客 179

检查数据库备份文件语句

检查数据库备份文件语句 RESTORE VERIFYONLY from disk='d:\kfqbf.bak'

一个特殊的SQL Server阻塞案例分析

上周,在SQL Server数据库下面遇到了一个有意思的SQL阻塞(SQL Blocking)案例。其实个人对SQL Server的阻塞还是颇有研究的。写过好几篇相关文章。 至于这里为什么要总结一下这个案例,因为这个案例有点意思:     1:使用DMV视图捕获到的Blocking SQL为一个查询语句(这个不是真正引起阻塞的源头SQL语句),等待事件为LCK_M_S。   2:出现阻塞的会话非常...

weixin_33795093的博客 292

Pspice开关电源仿真:从零实现反激式电源设计实战案例

通过Pspice仿真工具,手把手实现反激式开关电源的设计与优化,深入剖析关键参数设置与波形分析,帮助掌握Pspice在电源开发中的实际应用技巧。

weixin_35756690的博客 1156

【SABRE 3D, SABRE 3DxT,LAM设备】2025年9月14日-Clamshell 拆卸与安装

Clamshell 拆卸与安装。

weixin_46735260的博客 1693

ZK数据库实验十二(事务创建)

事务创建

weixin_51591850的博客 835

国科大学习资料--数据挖掘(刘莹)--第三章习题及参考答案

国科大学习资料–数据挖掘(刘莹)–第三章习题及参考答案 国科大学习资料–数据挖掘(刘莹)–第三章习题及参考答案 国科大学习资料–数据挖掘(刘莹)–第三章习题及参考答案 第 3 章分类与回归 3.1简述决策树分类的主要步骤。 答:决策树生成的过程如下: (1)对数据源进行数据预处理, 得到训练集和测试集; (2)对训练集进行训练; (3)对初始决策树进行树剪枝; (4)由所得到的决策树提取分类规则; (5)使用测试数据集进行预测,评估决策树模型; 3.2给定决策树,选项有:(1)将决策树转换成规则,然后对结果

无名何许人的博客 3094

Proxool+hibernate+spring时事务自动回滚导致无法提交的问题解决收藏

项目需要用到双数据源,而对于连接池,我选择了备受好评的Proxool,结果在spring配置了两个数据源,测试事务的时候,发现不发生错误, 数据也无法提交出去。。。。。这让我纳闷了很久很久。。。一直以为是我双数据源配置错了,因为在SSH+proxool的情况下配置双数据源真的是第一次 尝试。。。。。   后来逐步测试,直到把双数据源配置去了也发现不能插入,于是开始怀疑是数据库的问题。。。结果不是,...

cmdn_junfengbu的博客 219

Open3D (C++) 计算点云坐标最值及其索引

使用C++版本的Open3D计算点云最值点及其对应的下标索引

点云侠的博客 731

密码学系列3-Elgamal加密及其IND-CPA安全性证明

但这没有任何影响,敌手本身就只能知道公钥,他并没有能力知道挑战者是否知道对应的私钥。所以上述整个游戏就是一个模拟实验,敌手无法区分挑战者运行的是这个模拟实验,还是真正的按照第一节的算法构造的实验(挑战者知道私钥…为什么合起来的时候有1/2:因为T既可能是随机的也可能是g^{ab},这两种情况概率为1/2。能够攻破Elgamal加密方案,那么挑战者利用敌手的能力构建下面游戏,来求解困难性问题DDH。就是挑战者选的随机数,虽然挑战者自己也不知道。),否则挑战者输出0,作为DDH的回答。

qq_41359358的博客 1251

【SQL Server数据库备份详细教程】

掌握SQL Server备份是DBA的必备技能。建议结合业务需求选择备份类型,并通过SSMS维护计划实现自动化备份任务。记得定期演练灾难恢复流程!希望本教程能帮助您快速掌握备份技巧!如果遇到问题,欢迎在评论区留言讨论!

cz88888888666的博客 4022

运维系列【仅供参考】: Windos10和Windos11 配置intel网卡vlan的方法

Windos10和Windos11 配置intel网卡vlan的方法

weixin_54626591的博客 477

T-SQL系列之所有数据库备份情况(MSSQL)

--所有数据库备份情况 set nocount on go declare @counter smallint declare @dbname varchar(100) declare @db_bkpdate varchar(100) declare @status varchar(20) declare @svr_name varchar(100) declare @me

MSSQL_DBA的专栏 696

PhotovoltaicPanelCleanlinessDetector:基于YOLOv8的光伏板清洁状态监测系统

data.yamlyaml复制编辑names:0: clean1: dust3: leaves4: shadow✅ 高精度污染识别✅ 具备实时检测与UI展示✅ 可本地化部署应用未来方向增加污染程度分级(轻度、中度、严重)加入时间序列分析(污染变化趋势预测)无人机集成巡检模块。

YOLO 276

【Block总结】DiffAttention,差分注意力融入CLIP架构,抑制噪声,增强对相关特征的关注|即插即用

DiffCLIP通过微小的结构改动实现了显著的性能提升,为多模态模型的轻量化与高效化提供了新范式。

AI浩 1562

SQL Server 数据库的自动备份与恢复操作详解

本文介绍了SQL Server数据库自动备份与恢复的完整流程。首先通过SQL Server代理设置每日0点的自动备份任务,支持完整、差异和日志备份。文章详细讲解了备份策略选择、恢复配置、文件管理和监控告警等核心环节。在技术细节部分,重点说明了备份维护计划的执行顺序(先备份后优化)、索引碎片处理方案(根据碎片率选择重建或重组)、统计信息更新策略,以及如何设置合理的执行时间避开业务高峰。最后提供了备份文件清理和任务通知等可选但推荐的优化配置,帮助实现兼顾数据安全和性能优化的自动化数据库维护方案。

1918

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

SQL Server 2019数据库还原:使用T-SQL MOVE命令精准迁移.bak文件到指定路径

数据库备份与还原是数据管理和系统迁移中的核心操作,其原理在于通过备份文件(.bak)保存数据库在某一时间点的完整状态,并在需要时进行恢复。这项技术的核心价值在于保障数据安全、支持灾难恢复,并实现灵活的部署与迁移。在实际的工程实践中,常需将数据库还原到非默认路径,例如为优化性能将数据文件和日志文件分离存储于不同物理磁盘,或为统一管理而迁移至专用数据卷。这涉及到对备份文件内部逻辑结构与物理路径的深入理解。本文聚焦于SQL Server环境,详细解析如何通过RESTORE FILELISTONLY探查备份集,并运

weixin_30911451的博客 438

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SQL Server数据库备份还原与文件重定位实战指南

数据库备份与还原是数据管理的核心操作,其原理在于通过备份文件完整记录数据页和文件元数据,确保数据的一致性和可恢复性。在SQL Server中,这一技术对于保障业务连续性、实现灾难恢复以及进行数据迁移具有关键价值。当需要将数据库还原到新环境或不同存储路径时,直接还原常因路径冲突而失败。通过T-SQL的RESTORE DATABASE命令配合WITH MOVE子句,可以精确控制每个逻辑文件的新物理位置,实现灵活部署。这尤其适用于服务器磁盘空间优化、性能隔离(如数据与日志文件分离)或生产环境迁移等场景。掌握从.b

weixin_33795806的博客 1325

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

SQL Server数据库备份与定期清理备份数据的sql脚本详解

实际上,使用sql server的管理工具便可轻松实现对数据库备份和定期清理备份的需求,操作简洁而好理解,并且网上关于这块的教程比比皆是,图文并茂。但有时可能会有少许的情况会被客户要求用脚本去实现这块的功能,研究许久后,记录一下。

诗语待马 1517

如何用T-SQL命令实现自动定时备份?DBA十年经验全公开

掌握SQL备份恢复自动化全攻略,DBA十年实战经验分享。通过T-SQL命令实现定时备份,适用于企业级数据库维护,提升数据安全与恢复效率。脚本可定制、操作稳定可靠,值得收藏。

DeepNest的博客 932

数据守护者的秘籍:SQL Server数据库备份验证全攻略

文件完整性检查:确保备份文件未损坏。文件大小验证:检查备份文件大小是否符合预期。恢复测试:定期进行恢复测试,确保备份文件可以成功恢复。

2401_85760095的博客 1121
上一篇: ·必须《飞鸽~飞鸽传书》
下一篇: Android的隐式意图
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值