PB中如何备份和恢复数据库?(源码)

PB中如何备份和恢复数据库? 
 
备份: 
string  ls_path  ,ls_use 
INT  li_net 
 
Ls_path  =  sle_backpath.text 
IF  ls_path  =  ""  THEN 
           Messagebox('系统提示',"请先指定要备份的数据文件的名称!    ") 
           RETURN 
END  IF 
IF  FileExists  (  ls_path  )  THEN   
           li_net=Messagebox('信息','提示:系统发现在"'+ls_path+'"目录下已经存在一个同名的文件.~r~n~n要替换它吗?',Question!,YesNo!) 
           IF  li_net=  1  THEN   
               FileDelete  (  ls_path  ) 
           ELSE 
           END  IF 
END  IF 
SetPointer(HourGlass!)//---开始备份--- 
This.Enabled  =  FALSE 
cb_restore.Enabled  =  FALSE 
 
ls_use  =  'EXEC'+'('+"'USE  '"  +  sqlca.database+')' 
EXECUTE  IMMEDIATE  :ls_use  ; 
 
SQLCA.AutoCommit  =  TRUE 
 
ls_use  =  "EXEC  sp_addumpdevice  'disk'  ,  'zyqdata'  ,  '"+ls_path+"'" 
EXECUTE  IMMEDIATE  :  ls_use  ; 
 
ls_use  ="BACKUP  DATABASE  "  +  sqlca.database  +  "  TO  zyqdata" 
EXECUTE  IMMEDIATE  :  ls_use  ; 
 
IF  SQLCA.SQLCODE  =  -1  THEN 
           Messagebox("系统信息","数据库备份失败!~r~n~n请到检查路径正确与否。",Stopsign!) 
           this.enabled  =  TRUE 
     cb_restore.enabled  =  TRUE 
     sqlca.sqlcode  =  0 
           sqlca.sqldbcode  =  0 
           ls_use  =  "EXEC  sp_dropdevice  'zyqdata'" 
     EXECUTE  IMMEDIATE  :  ls_use  ; 
           RETURN 
END  IF 
 
ls_use  =  "EXEC  sp_dropdevice  'zyqdata'" 
EXECUTE  IMMEDIATE  :  ls_use  ; 
 
SetPointer(Arrow!) 
IF  SQLCA.SQLCODE  >=  0  THEN 
           Messagebox("系统信息","备份完成!    ") 
 
           This.enabled  =  TRUE 
     cb_restore.enabled  =  TRUE 
           RETURN 
END  IF 
CONNECT  USING  SQLCA  ; 
SQLCA.AutoCommit  =  false 
 
恢复: 
string  ls_server,ls_database 
String  ls_path,ls_use 
 
ls_path  =  sle_repath.text 
IF  ls_path  =  ""  THEN 
           Messagebox('系统提示',"请先选择要恢复的数据文件!    ") 
           sle_repath.SetFocus() 
           RETURN 
END  IF 
ls_server=sqlca.servername 
ls_database=sqlca.database 
COMMIT  USING  SQLCA  ; 
SetPointer(HourGlass!)//---开始恢复 
//恢复的原因,连接到master数据库 
DISCONNECT  USING  SQLCA  ; 
Transaction  SQLCA_MASTER 
SQLCA_MASTER  =  CREATE  Transaction 
SQLCA_MASTER.DBMS  =  "MSS  Microsoft  SQL  Server  6.x" 
SQLCA_MASTER.DataBase  =  "master" 
SQLCA_MASTER.LogId  =  "sa" 
SQLCA_MASTER.servername  =ls_server 
SQLCA_MASTER.AutoCommit  =  TRUE 
SQLCA_MASTER.DBParm  =  "" 
CONNECT  USING  SQLCA_MASTER  ; 
 
This.Enabled  =  FALSE 
cb_backup.Enabled  =  FALSE 
 
ls_use  =  "EXEC  sp_addumpdevice    'disk'  "+"  ,  'zyqdataa'  "+","+"    '"+ls_path+"'    " 
EXECUTE  IMMEDIATE  :  ls_use  USING  SQLCA_MASTER; 
 
ls_use  =  "RESTORE  DATABASE  "  +  ls_database    +  "  FROM  DISK  =  "+"  '"+ls_path+"'  "     
EXECUTE  IMMEDIATE  :  ls_use  USING  SQLCA_MASTER; 
 
IF  SQLCA_MASTER.SQLCODE  =  -1  THEN 
           Messagebox("系统信息","警告:数据库恢复失败!~r~n~n请确认路径以及所选文件正确与否!~r~n~n或者有其他用户正在连接数据库!",Stopsign!) 
           This.Enabled  =  TRUE 
     cb_backup.Enabled  =  TRUE 
     SQLCA.SQLCODE  =  0 
           SQLCA.SQLDBCODE  =  0 
           ls_use  =  "EXEC  sp_dropdevice  'coolnan'" 
     EXECUTE  IMMEDIATE  :  ls_use  USING  SQLCA_MASTER; 
           RETURN 
END  IF 
 
ls_use  =  "EXEC  sp_dropdevice  'zyqdata'" 
EXECUTE  IMMEDIATE  :  ls_use  USING  SQLCA_MASTER; 
 
IF  SQLCA_MASTER.SQLCODE  =  0  THEN 
           Messagebox("系统信息","数据库恢复完成!") 
           This.Enabled  =  TRUE 
     cb_backup.Enabled  =  TRUE 
     RETURN                         
ELSE 
           Messagebox('系统信息','数据库备份操作未进行!',Stopsign!) 
           RETURN 
END  IF 
DISCONNECT  USING  SQLCA_MASTER  ; 
CONNECT  USING  SQLCA  ; 
SetPointer(HourGlass!) 
 
 
 
--------------------------------------------------------------- 
 
一种SYBASE数据库的备份方法 
王明怡 
  随着金融业电子化水平的提高,大中型数据库产品在金融业的使用越来越普及,其中SYBASE是使用较为广泛的一种。在数据库的使用中,数据的备份和恢复是系统管理员所要负责的一项主要工作,它对于保证业务系统的安全起着重要的作用。 
  由于SYBASE数据库的备份命令不能用Powerbuilder工具实现,采用其他工具(如C语言等)又较复杂,同时数据库又有定时备份的要求。为了免去系统管理人员日常的重复操作,让计算机来自动完成这一任务,笔者通过Windows95系统所带的计划任务功能及批处理命令的制作,总结了一套较为简便的备份方法。 
  该方法要求有一台与服务器联网的主机做为备份用的客户端主机,该主机自动按时对数据库进行备份并将备份下来的文件取到自己硬盘上。备份客户机的安装和设置: 
  一、该主机要求预装Windows  95或更高版本 
  由于该操作系统具备“计划任务”功能,“计划任务”程序是将任务安排为定期运行或在最方便时运行的工具。每次启动Windows时启动“计划任务”程序,并在后台运行。在此基础上安装TCP/IP软件及sybase  for  Windows  95软件。 
  二、在适当的位置建立子目录用于存放备份文件及批处理文件,在该子目录下建立以下文件 
  1.用于运行isq1的脚本文件bak,内容为: 
  dump  transaction  数据库名with  truncate_only 
  dump  database  to数据库名to′/usr/sybase/bak/dbdum′ 
  go 
  2.用于运行ftp的脚本文件getf,内容为: 
  sybase用户名 
  sybase用户的口令 
  cd/usr/sybase/bak 
  bin 
  get  dbdun 
  bye 
  3.运行isq1的批处理文件bk,内容为: 
  @echo  off 
  isq1  -U  sa  -P  sa的口令-i  bak  -I  sq1.ini  -S  sybase端口号-o  out 
  echo  on 
  4.运行ftp的批处理文件getfile,内容为 
  @echo  off 
  ftp  -v  -s:getf服务器的IP地址 
  echo  on 
  三、设置计划任务 
  在“我的电脑”图标中选定“计划任务”,再“添加已计划的任务”,选择“下一步”,单击“浏览”,选择指定目录下的bk批命令,“该任务的执行方式:”按实际业务系统备份需要可设定不同的频度(如“每天”、“每周”等)、计划运行开始时间和日期。 
  相类似添加已计划的任务getfile批命令,频度与bk相同,计划运行开始时间可根据bk批命令实际运行的时间晚一些,一般比前一任务开始时间晚20分钟即可。 
  另外,根据实际运行情况可更改一些高级设置的内容。 
作者单位:人民银行杭州市中心支行(杭州310001)   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值