您的位置:程序门 -> .net技术 -> vb.net



在vb.net中如何使用代码实现sql server2000数据库的备份与恢复


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


在vb.net中如何使用代码实现sql server2000数据库的备份与恢复[已结贴,结贴人:wcazp]
发表于:2007-03-02 14:09:23 楼主
由于系统数据量比较大,导致运行缓慢,请教一下高手们,如何在代码中实现数据库的备份与恢复?越简单越好啊!
发表于:2007-03-02 17:02:171楼 得分:0
我做过这样的东西,不过现在忘了,我回家在给你找找,明天等我的消息!!
发表于:2007-03-02 20:24:452楼 得分:0
为什么不用存储过程做备份?外部程序调用就是了
发表于:2007-03-03 11:39:593楼 得分:0
谢谢了,我想要点根简单的。
发表于:2007-03-03 12:59:584楼 得分:0
希望了解,等待高手的回应
发表于:2007-03-06 08:18:335楼 得分:0
怎么没人知道啊?
发表于:2007-03-06 09:04:296楼 得分:30
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
发表于:2007-03-21 10:39:197楼 得分:0
用短信猫做短信平台,比较稳定,不受网络安全影响,响应及时,适合一些重要的安全性高的业务需求,但是发送速度有限制,一般是800条/小时
sp短信通道发送速度快,但是由于接入的开发商很多,在服务器不多的情况下,必然会排队,有时繁忙时提交一条短信,第二天才能收到,而且网络不正常时,也会影响使用
建议一些管理软件用短信猫做短信平台
1.方寸gsm-modem   短信平台

gsm-modem   短信平台,无需联网,只需一台电脑,一个短信猫(或手机),一个短信开发接口,就可轻松建立短信服务器,可实现短信收发,短信互动等功能,一台电脑可以连接多个短信猫硬件,从而提高吞吐量。

2.方寸短信数据库接口(手机短信接口,短信二次开发控件)

通过本数据库接口,能使你现有的系统(如oa、crm、erp等系统)轻松实现无线办公功能,无论你用的是哪种开发语言(vb\vc\vfp\asp\jsp\java\pb\delphi...),只要你的系统能读写数据库即可对接!你仅需要在指定的表中添加记录,本接口程序就自动进行发送短信了,收到的短信会自动保存到数据库里,所以,您不需要了解任何有关数据通信方面的知识,就可实现手机短信的收发等功能!  
电话:0755-25996144
联系人:陈先生
网址:http://www.fcwww.com
qq:393376247


快速检索

最新资讯
热门点击