sqlserver备份还原丢失dbo_编程实现备份和还原数据库_sqlserver
注意,下面备份还原都是用存储过程实现!
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
http://www.gaodaima.com/34812.html编程实现备份和还原数据库_sqlserver
/*--备份数据库的通用存储过程
--邹建 2003.10--*/
/*--调用示例
--备份当前数据库
exec p_backupdb @bkpath='c:/',@bkfname='/DBNAME/_/DATE/_db.bak'
存储过程实现备份和还原数据库:
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
/*--备份数据库的通用存储过程
--邹建 2003.10--*/
/*--调用示例
--备份当前数据库
exec p_backupdb @bkpath='c:/',@bkfname='/DBNAME/_/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'
--*/
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, --追加/覆盖备份文件
@password nvarchar(20)='' --为备份文件设置的密码(仅sql2000支持),设置后,恢复时必须提供此密码
as
declare @sql varchar(8000)
if isnull(@dbname,'')='' set @dbname=db_name()
if isnull(@bkpath,'')=''
begin
select @bkpath=rtrim(reverse(filename)) from master..sysfiles where name='master'
select @bkpath=substring(@bkpath,charindex('/',@bkpath)+1,4000)
,@bkpath=reverse(substring(@bkpath,charindex('/',@bkpath),4000))+'BACKUP/'
end
if isnull(@bkfname,'')='' set @bkfname='/DBNAME/_/DATE/_/TIME/.BAK'
set @bkfname=replace(replace(replace(@bkfname,'/DBNAME/',@dbname)
,'/DATE/',convert(varchar,getdate(),112))
,'/TIME/',replace(convert(varchar,getdate(),108),':',''))
set @sql='backup '+case @bktype when 'LOG' then 'log ' else 'database ' end +@dbname
+' to disk='''+@bkpath+@bkfname
+''' with '+case @bktype when 'DF' then 'DIFFERENTIAL,' else '' end
+case @appendfile when 1 then 'NOINIT' else 'INIT' end
+case isnull(@password,'') when '' then '' else ',PASSWORD='''+@password+'''' end
exec(@sql)
go
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_RestoreDb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_RestoreDb]
GO
/*--恢复数据库的通用存储过程
--邹建 2003.10--*/
/*--调用示例
--完整恢复数据库
exec p_RestoreDb @bkfile='c:/db_20031015_db.bak',@dbname='db'
--差异备份恢复
exec p_RestoreDb @bkfile='c:/db_20031015_db.bak',@dbname='db',@retype='DBNOR'
exec p_RestoreDb @bkfile='c:/db_20031015_df.bak',@dbname='db',@retype='DF'
--日志备份恢复
exec p_RestoreDb @bkfile='c:/db_20031015_db.bak',@dbname='db',@retype='DBNOR'
exec p_RestoreDb @bkfile='c:/db_20031015_log.bak',@dbname='db',@retype='LOG'
--*/
create proc p_RestoreDb
@bkfile nvarchar(1000), --定义要恢复的备份文件名(带路径)
@dbname sysname='', --定义恢复后的数据库名,默认为备份的文件名
@dbpath nvarchar(260)='', --恢复后的数据库存放目录,不指定则为SQL的默认数据目录
@retype nvarchar(10)='DB', --恢复类型:'DB'完事恢复数据库,'DBNOR' 为差异恢复,日志恢复进行完整恢复,'DF' 差异备份的恢复,'LOG' 日志恢复
@filenumber int=1, --恢复的文件号
@overexist bit=1, --是否覆盖已经存在的数据库,仅@retype为'DB'/'DBNOR'是有效
@killuser bit=1, --是否关闭用户使用进程,仅@overexist=1时有效
@password nvarchar(20)='' --备份文件的密码(仅sql2000支持),如果备份时设置了密码,必须提供此密码
as
declare @sql varchar(8000)
--得到恢复后的数据库名
if isnull(@dbname,'')=''
select @sql=reverse(@bkfile)
,@sql=case when charindex('.',@sql)=0 then @sql
else substring(@sql,charindex('.',@sql)+1,1000) end
,@sql=case when charindex('/',@sql)=0 then @sql
else left(@sql,charindex('/',@sql)-1) end
,@dbname=reverse(@sql)
--得到恢复后的数据库存放目录
if isnull(@dbpath,'')=''
begin
select @dbpath=rtrim(reverse(filename)) from master..sysfiles where name='master'
select @dbpath=reverse(substring(@dbpath,charindex('/',@dbpath),4000))
end
--生成数据库恢复语句
set @sql='restore '+case @retype when 'LOG' then 'log ' else 'database ' end+@dbname
+' from disk='''+@bkfile+''''
+' with file='+cast(@filenumber as varchar)
+case when @overexist=1 and @retype in('DB','DBNOR') then ',replace' else '' end
+case @retype when 'DBNOR' then ',NORECOVERY' else ',RECOVERY' end
+case isnull(@password,'') when '' then '' else ',PASSWORD='''+@password+'''' end
--添加移动逻辑文件的处理
if @retype='DB' or @retype='DBNOR'
begin
--从备份文件中获取逻辑文件名
declare @lfn nvarchar(128),@tp char(1),@i int,@s varchar(1000)
--创建临时表,保存获取的信息
create table #tb(ln nvarchar(128),pn nvarchar(260),tp char(1),fgn nvarchar(128),sz numeric(20,0),Msz numeric(20,0))
--从备份文件中获取信息
set @s='restore filelistonly from disk='''+@bkfile+''''
++case isnull(@password,'') when '' then '' else ' with PASSWORD='''+@password+'''' end
insert into #tb exec(@s)
declare #f cursor for select ln,tp from #tb
open #f
fetch next from #f into @lfn,@tp
set @i=0
while @@fetch_status=0
begin
select @sql=@sql+',move '''+@lfn+''' to '''+@dbpath+@dbname+cast(@i as varchar)
+case @tp when 'D' then '.mdf''' else '.ldf''' end
,@i=@i+1
fetch next from #f into @lfn,@tp
end
close #f
deallocate #f
end
--关闭用户进程处理
if @overexist=1 and @killuser=1
begin
declare hCForEach cursor for
select s='kill '+cast(spid as varchar) from master..sysprocesses
where dbid=db_id(@dbname)
exec sp_msforeach_worker '?'
end
--恢复数据库
exec(@sql)
Go
邹建说:
说白了,就是备份数据库和还原数据库的SQL语句的应用:
--备份
backup database 数据库 to disk='c:/你的备份文件名'
--还原
restore database 数据库 from disk='c:/你的备份文件名'
PS:邹建老大真是我的偶像阿!
欢迎大家阅读《编程实现备份和还原数据库_sqlserver》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码
微信 赏一包辣条吧~
支付宝 赏一听可乐吧~
sqlserver备份还原丢失dbo_编程实现备份和还原数据库_sqlserver相关推荐
- 数据库没有备份---应如何还原丢失的数据
数据库没有备份---应如何还原丢失的数据 环境描述: 某公司装了一台SQL Server数据库,为了保证数据库能够在出现故障时及时的修复,管理员做了备份操作,比如说完整备份+差异备份或者完整备份+ ...
- linux怎么还原bak文件,Linux restore命令:还原dump操作备份下的文件、目录或分区...
restore 命令是 dump 命令的配套命令,dump 命令是用来备份分区和数据的,而 restore 命令是用来恢复数据的. restore 命令的基本格式如下: [root@localhost ...
- gdc服务器系统备份和还原,FANUC镜像系统如何备份及恢复
什么是FANUC镜像备份呢? 顾名思义,系统备份就是对你的系统做一个备份!目的很简单,备份就是了为防止丢失数据或者参数改乱了功能改丢了减少这种麻烦! 例如:机床开通了四轴功能权限,万一你遇到了一些棘手 ...
- 达梦数据库物理备份恢复_表空间级备份还原
参考文档<DM8备份恢复手册> 1.表空间级备份还原 联机备份,脱机还原 表空间备份还原的先决条件以及限制条件参考<DM8备份恢复手册>. 1.1 备份 BACKUP V1.0 ...
- 计算机操作系统的备份和快速恢复,计算机操作系统维护中的还原技术分析
计算机操作系统维护中的还原技术分析 人们在日常的生活和工作中,对于计算机应用已经非常普遍,下面是小编搜集整理的一篇探究计算机操作系统维护还原技术的论文范文,供大家阅读参考. 摘 要:在科学技术不断发展 ...
- ORACLE基础学习-RMAN应用之(归档模式无备份,丢失数据文件的恢复)
二.归档模式无备份,丢失数据文件的恢复: 首先要意识到,这种恢复是有条件的,只有在某些特定条件下,才有可能在没有备份的情况下恢复丢失的数据文件. 同时又需意识到不是所有丢失的文件都是可以被成功恢复的. ...
- android 刷机 备份,安卓刷机后如何还原以前ROM和系统备份
核心提示:本教程为大家介绍刷机后如何还原到以前的ROM和系统备份. 很多人,看到了好多新的rom,包括测试版的新rom,心里痒痒的.想刷一刷.尝尝鲜,结果刷完.感觉新的rom 还没有我现在用的rom好 ...
- restore还原不同名称的数据库_Sql Server 备份还原失败错误ERROR:3145(备份集中的数据库备份与现有的数据库不同)及解决办法...
一.前言 SQL Server 备份和还原全攻略,里面包括了通过SSMS操作还原各种备份文件的图形指导,SQL Server 数据库最小宕机迁移方案,里面使用SQL脚本(T-SQL)完成完全备份.差异 ...
- vhd 镜像 备份Linux,差分VHD 系统秒备份、秒还原教程 完胜GHOST
说明:此操作适用于WTG辅助工具写入的VHD.VHDX模式. 需要找Win7以上系统电脑操作,不能在优盘系统中操作. 需要使用的软件:bootice 秒备份: 1.打开优盘,找到win8.vhd或wi ...
- linux dd 备份uboot,刷机前如何备份uboot、分区、编程器固件?路由器刷机备份命令使用方法...
为安全着想,刷机前应该备份一下原机uboot 或者最好能备份出完整的编程器固件,以防万一. 可我手上没有ttl,听说可以通过后台来备份各个分区,于是我就试了试,但是遇到不少问题,理解不了,请各位指教. ...
最新文章
- 网页制作中规范使用DIV+CSS命名规则(转)
- 可以分屏的软件_分享一款非常好用,且小巧的分屏软件
- Linux平台开发技术指南
- math标准库函数----python
- 七天免登录JavaScript实现
- [软件项目管理]从业余人士往专家进军的头几个月
- Unity 新手入门 如何理解协程 IEnumerator yield
- SqlServer图形数据库初体验
- 记一次Hbase数据迁移和遇到的问题
- 董明珠上榜中国杰出商界女性100
- iPhone又降价了!京东、苏宁安排上了 iPhone XS系列最高直降1700元
- God of War Ascension / 战神4, 再一次迎来新导演!
- Spatial Pyramid的BOW和Pyramid HOG的多核
- linux中Chmod + X
- 怎么将计算机设置为光盘引导模式,怎么设置uefi引导系统
- 3年经验Java程序员面阿里P6 差距在哪里
- 华为鸿蒙目标一年跨过生死线
- js里双重否定的作用
- Python代码原来还可以这样玩——画出不同人物效果图,感觉很美好
- 「菜鸟初探」纯CSS实现二级导航