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:g

你可能感兴趣的:(PB中如何备份和恢复数据库?)