C#.NET SQL数据库备份与还原解决方案
http://www.csframework.com/archive/1/arc-1-20110924-1841.htm
开发框架V2.2(快速开发版)系统管理模块已集成数据库的备份与还原功能。
数据库列表:帐套数据库与系统数据库列表。
备份文件列表:数据源来自master.dbo.sys_BackupHistory表。
首先在master数据库建立3个存储过程及一个备份历史表:
1. p_BackupDB
2. p_RestoreDB
3. p_CreateJob
4. sys_BackupHistory --备份历史表
(脚本在下面找)
1. p_BackupDB 备份数据库存储过程
ALTER PROC [dbo].[p_BackupDB]
@DBNAME SYSNAME='', --要备份的数据库名称,不指定则备份当前数据库
)='', --备份文件的存放目录,不指定则使用SQL默认的备份目录
)='',--备份文件名,文件名中可以用\DBNAME\代表数据库名,\DATE\代表日期,\TIME\代表时间
)='DB',--备份类型:'DB'备份数据库,'DF' 差异备份,'LOG' 日志备份
@APPENDFILE BIT=1 --追加/覆盖备份文件
AS
BEGIN
/*
p_BackupDB 'CSFramework22.Normal','C:\db_backup\'
p_BackupDB 'CSFramework22.Test','C:\db_backup\'
p_BackupDB 'CSFramework22.System','C:\db_backup\'
*/
)
IF ISNULL(@DBNAME,'')='' SET @DBNAME=DB_NAME()--当前数据库
IF ISNULL(@BKPATH,'')='' SET @BKPATH=dbo.f_GetDBPath(NULL)
IF ISNULL(@BKFNAME,'')='' SET @BKFNAME='\DBNAME\_\DATE\_\TIME\.BAK'
SET @BKFNAME=REPLACE(REPLACE(REPLACE(@BKFNAME,'\DBNAME\',@DBNAME)
))
),':',''))
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
PRINT @SQL
EXEC(@SQL)
BEGIN
PRINT '备份日志'
INSERT INTO dbo.sys_BackupHistory(DBName,BackupFileName,BackupPath,BackupTime)VALUES
(@DBNAME,@BKFNAME,@BKPATH+@BKFNAME,GETDATE())
END
END
2. p_RestoreDB 还原数据库存储过程
ALTER PROC [dbo].[p_RestoreDB]
), --定义要恢复的备份文件名
@DBNAME SYSNAME, --定义恢复后的数据库名,默认为备份的文件名
)='DB',--恢复类型:'DB'完整恢复数据库,'DBNOR' 为差异恢复,日志恢复进行完整恢复,'DF' 差异备份的恢复,'LOG' 日志恢复
, --恢复的文件号
@OVEREXIST BIT=1 --是否覆盖已经存在的数据库,仅@RETYPE为
AS
BEGIN
/*
--还原数据库
p_RestoreDB 'C:\db_backup\CSFramework22.Normal_20110924_213838.BAK','CSFramework22.Normal'
--查看备份文件的内容
RESTORE FILELISTONLY FROM DISK='C:\db_backup\CSFramework22.Normal_20110924_213838.BAK'
*/
)
--得到恢复后的数据库名
IF ISNULL(@DBNAME,'')=''
SELECT @SQL=REVERSE(@BKFILE)
,@SQL=CASE WHEN CHARINDEX('.',@SQL)=0 THEN @SQL
,) END
,@SQL=CASE WHEN CHARINDEX('\',@SQL)=0 THEN @SQL
) END
,@DBNAME=REVERSE(@SQL)
--生成数据库恢复语句
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
--设当前数据库离线状态
EXEC('ALTER DATABASE ['+@DBNAME+'] SET OFFLINE WITH ROLLBACK IMMEDIATE')
--恢复数据库
EXEC(@SQL)
--设当前数据库连线状态
EXEC('ALTER DATABASE ['+@DBNAME+'] SET ONLINE')
END
3. p_CreateJob创建作业存储过程
(因SQLExpress 2005 没有代理服务,可以创建作业,但无法运行作业。SQL2008版本可以)
4. sys_BackupHistory 备份历史记录表
常见错误及解决方法:
1. 备份错误
SQL报错:
Msg 3201, Level 16, State 1, Line 1
Cannot open backup device 'C:\CSFrameworkPermission_20110923_104732.BAK'. Operating system error 5(拒绝访问。).
Msg 3013, Level 16, State 1, Line 1
BACKUP DATABASE is terminating abnormally.
提示操作系统错误(拒绝访问),是因为当前建立连接的用户(CSFramework)没有服务器建立文件的权限。
其它提示:
类似于NT AUTHORITY\SYSTEM权限不够的问题,请在服务管理中将SQL Server (MSSQLSERVER) 和 SQL Server Agent (MSSQLSERVER).的两个服务的登录(Log On)改为在 192.168.0.2上有权限的域帐号
解决方法:
打开SQL Server配置管理工具,在Log On页面有两种方式登录服务器。
1. Build-in account,选择Local System。
2. This account,指定一个登录用户,可以使用Administrator用户。
2. 还原错误
正常情况下设置好第一步有读写文件权限了,一般不会报错。如果仍有错误,将当前用户指定dbcreator角色。
3. 写备份历史记录时出错
是因为当前用户没有master数据库读写权限。将csframework用户的User Mapping勾上master,设为dbo。
backup_restore_db.sql
下载:
C#.NET SQL数据库备份与还原解决方案的更多相关文章
- C#+SQL数据库备份和还原
使用前要导入SQLDMO.dll(在com组件中导入Microsoft SQLDMO Object Library即可) /// /// DbOper类,主要应用SQLDMO实现对Microsoft ...
- SQL Server 2008数据库备份和还原(还原是必须有完整备份)
转自lwccc, SQLserver2008数据库备份和还原问题(还原是必须有完整备份) 首先,我要说明的是你必须拥有完整的数据库备份,下面的还原教程,才算有用. 这个连接是某高手的异常恢复方法, 实 ...
- sql操作数据库(2)--->DQL、数据库备份和还原
查询 查询表中的所有的行和列的数据 select * from 表名; select * from student; 查询指定列的数据:如果有多个列,中间用逗号隔开. select 列名1,列 ...
- Mysql数据库备份和还原常用的命令
Mysql数据库备份和还原常用的命令是进行Mysql数据库备份和还原的关键,没有命令,什么都无从做起,更谈不上什么备份还原,只有给系统这个命令,让它去执行,才能完成Mysql数据库备份和还原的操作,下 ...
- [转]MySQL数据库备份和还原的常用命令小结
MySQL数据库备份和还原的常用命令小结,学习mysql的朋友可以参考下: 备份MySQL数据库的命令 mysqldump -hhostname -uusername -ppassword datab ...
- SQL Server 备份和还原
SQL Server 备份和还原 SQL Server 备份 恢复模式 SQL Server 数据恢复模式分为三种:完整恢复模式.大容量日志恢复模式.简单恢复模式. 完整恢复模式 默认的恢复模式, ...
- SQL Server 备份和还原全攻略
原文:SQL Server 备份和还原全攻略 一.知识点 完全备份: 备份全部选中的文件夹,并不依赖文件的存档属性来确定备份那些文件.(在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份, ...
- MySQL具体解释(20)-----------数据库备份和还原
数据备份: 使用mysqldump命令备份 mysqldump命令能够讲数据库中的数据备份成一个文本文件. 表结果和表中的数据将存储在生成的文本中.mysqldump的工作原理非常easy. 他先查出 ...
- 批处理(bat)实现SQLServer数据库备份与还原
原文:批处理(bat)实现SQLServer数据库备份与还原 备份数据库.bat @echo off set path=%path%;C:\Program Files (x86)\Microsoft ...
随机推荐
- QQ游戏_相关
1. 侍魂: 1.1. ...\QQGame ...\QQGame\samsho2 1.2. C:\Users\xx\AppData\Roaming\Tencent\QQGAME\Download C ...
- json与jsonp应用及其他ajax数据交互方式
1.json是数据交换格式,使用实例如下: $.getJSON( '/manage/asset/asset_delByIds.action', { 'ids':id }, function(data) ...
- Scala的Actor模式 & Akka框架
今天学Spark的时候,看到Scala的actor模式是一个加分点.所以搜了一下,看了.主要参考下面两篇文章,还没有实验,有些地方领会的不深刻: http://nxlhero.blog.51cto.c ...
- POJ 2385 Apple Catching
比起之前一直在刷的背包题,这道题可以算是最纯粹的dp了,写下简单题解. 题意是说cows在1树和2树下来回移动取苹果,有移动次数限制,问最后能拿到的最多苹果数,含有最优子结构性质,大致的状态转移也不难 ...
- JAVA EE 第一阶段项目问题
一: 乱码 原因: 由于同组的其他同学的myeclipse默认的编码方式是GBK,而我的默认的是UTF-8.所以当我使用svn把其他同学提交到组长那里去的代码下载下来的时候,就全乱码了! 解决问题: ...
- javascript AOP实现
参考:http://www.cnblogs.com/rubylouvre/archive/2009/08/08/1541578.html function Person(){ this.say = f ...
- aspx控件属性
ASPxGridView属性:概述设置(Settings) <Settings GridLines="Vertical" : 网 ...
- xUtils更新到3.0后的基本使用规则
说实话,对于xUtils,是我最近才用到的开发框架(也是刚接触),对于其功能不得不说,简化了很多的开发步骤,可以说是非常好的开发工具,但是其最近更新到3.0也没有解决加载自定义ImageView报错的 ...
- js中正则表达式 书写方法
function test(){ var text="index.aspx?test=1&ww=2&www=3"; var re = ...
- c语言数据结构:01背包问题-------动态规划
两天的时间都在学习动态规划:小作业(01背包问题:) 数据结构老师布置的这个小作业还真是让人伤头脑,自己实在想不出来了便去网上寻找讲解,看到一篇不错的文章: http://www.cnblogs.co ...