鸿图 四维尔:[教程]Sybase数据库自动备份与异地存放 [服务器管理维护] IT.com.cn IT...
来源:百度文库 编辑:九乡新闻网 时间:2024/07/14 04:19:01
[教程]Sybase数据库自动备份与异地存放
2005-3-18 17:07:00 文/ 出处:软件世界 一.问题的提出Sybase数据库系统已被广泛应用于各企事业单位的计算机信息系统中,其先进的复制服务器技术是实现数据库实时异地备份的很好途径,但该技术实现难度较大,需要的投资也较大,一般中小型企业用的比较少。通常数据库系统管理员每天要进行手工dump操作,但几乎不进行异地备份,这不符合数据异地容灾的原则,存在着数据不安全的隐患。
笔者在平时数据库系统的维护管理中,摸索出一种对Sybase数据库进行自动备份、对备份出来的文件自动异地存放以及在异地自动进行数据库表的bcp的方法。该方法简单容易行,投资小,在很大程度上实现了数据的异地容灾,确保数据的及时备份,减轻了数据库系统管理员的工作。本文就此介绍,旨在给读者一些实用的帮助。
二.实现方法
1. 数据库的自动备份
①在Unix主机上编制dump数据库的脚本文件。
该文件由Sybase的客户端应用程序isql来调用,以实现数据库的dump操作,并返回至Unix操作系统。文件名为autodump.sql,存放在根目录下,文件内容如下:
dump database testdb to "/u/dumpfile.dat"
go
exit
例子中testdb为需要dump的数据库名,dump出来的文件名为dumpfile.dat,存放在/u目录下,exit返回至Unix OS。
②利用Unix的命令程序设计语言shell,编制一个shell程序。
该程序在指定时间点启动Sybase的客户端应用程序isql,实现数据库的dump操作。文件名为timerdump,存放在根目录下,文件内容如下:
rm /u/dumpfile.dat
isql -Usa -P -Ooutput.err -i/autodump.sql
at -f /timerdump 1:15am
例子中第一行表示删除上一次dump出来的文件,第二行表示启动Sybase的客户端应用程序isql,并运行autodump.sql脚本文件,第三行at命令在每天的凌晨1点15分循环执行timerdump。
③编制另一个shell程序。
在Unix系统重新启动时,自动执行该程序,以实现在指定时间点触发timerdump。该程序放在/etc/rc2.d目录下,文件名为:startdump,内容如下:
at -f /timerdump 1:15am
④修改timerdump和startdump文件的权限,使其可执行。
#chmod 777 /timer /etc/rc2.d/startdump
⑤重新启动Unix系统,并分别启动Sybase SQL Server和Backup Server,Unix系统利用at命令在每天凌晨1点15分定时启动timerdump,实现testdb数据库的自动dump操作。
2. 数据库备份文件的异地自动拷贝和表的自动bcp
① 在异地安装一台PC机,要求如下:
* 内存≥32M,操作系统为Win95或Win98;
* 硬盘必须足够大(存放dumpfile.dat和bcp出来的文本文件);
* 能够通过网络,利用TCP/IP协议访问到Unix主机;
* 安装Sybase Open Clent for Win95/win98。
② 建立一个配置文件。
该文件存放Unix主机的IP地址,Ftp的端口号,Unix的用户名及口令,数据库备份文件存放的源、目的路径与名称,数据库所有需bcp的表名。文件名为:dumpfile.ini,存放在c:\dump目录下,内容如下:
[Server Options] Server IP Address=100.10.10.1
Server Port=21
User Name=root
User Password=root123
Ftp Source=/u/dumpfile.dat
Ftp Target=c:\dump\dumpfile.dat
[Bcp Tables]
t1=table1
t2=table2
例子中的table1,table2为testdb数据库中需要bcp的表。
③ 利用Delphi Clent/Server Suite V4.0编制一个程序,实现数据库备份文件的异地自动拷贝和表的自动bcp。该程序利用了 Delphi 的Timer控件、NMFTP控件以及Win32 API的进程创建函数CreateProcess。现对几个主要的程序片段逐一说明:
* 定时器过程。定时器Timer1的OnTimer事件调用该过程,它用来循环检测当前时间是否为凌晨2点15分,若是就去调用自动拷贝过程(FtpProc)和自动bcp过程(BcpProc)。
procedure TForm1.Timer1Timer(Sender: TObject);
var Present: TDateTime;Hour, Min, Sec, MSec: Word;
begin Present:= Now;DecodeTime(Present, Hour, Min, Sec, MSec);
if ((Hour=2) and (Min=15) and (Sec=0)) then begin
FtpProc;BcpProc; end;
end;
* Ftp登录函数。该函数从c:\dump\dumpftp.ini中取出Unix主机的有关信息,进行Ftp登录。
function TForm1.ConnectServer: Boolean;
var IniFile : TIniFile;
begin IniFile := TIniFile.Create(INI_FILE);
NMFTP1.Host := IniFile.ReadString('Server Options','Server IP Address','');
NMFTP1.Port := IniFile.ReadInteger('Server Options','Server Port',21);
NMFTP1.UserID := IniFile.ReadString('Server Options','User Name','');
NMFTP1.Password :=IniFile.ReadString('Server Options','User Password','');
try NMFTP1.Connect; except begin
Result:=False;Application.MessageBox('连接务器失败!','错误',MB_OK);exit;
end; Result := True; IniFile.Free;
end;
* 拷贝备份文件的过程。该过程调用Ftp登录函数ConnectServer,进行Ftp登录,登录成功后利用NMFTP控件的download方法进行拷贝,Unix主机相当于Ftp服务器,异地PC机器相当于Ftp客户端。
procedure TForm1.FtpProc;
var IniFile : TIniFile;ftp_source,ftp_target,ftp_old: String;
begin IniFile := TIniFile.Create(INI_FILE);
ftp_source:= IniFile.ReadString('Server Options','Ftp Source','');
ftp_target:= IniFile.ReadString('Server Options','Ftp Target','');
if not ConnectServer then begin
Memo1.Lines.Add('★连接数据库服务器失败,中断!');IniFile.Free;exit;
end;
Memo1.Lines.Add('★开始拷贝数据库备份文件!'+ ftp_source + '->' + ftp_target);
NMFTP1.Mode(MODE_IMAGE);
try NMFTP1.download(PChar(ftp_source), PChar(ftp_target));
except Memo1.Lines.Add('***文件复制错误!***'); end;
Memo1.Lines.Add('★拷贝数据库备份文件完毕!'); NMFTP1.Disconnect;IniFile.Free;
end;
* 数据库表的bcp过程。该过程从c:\dump\dumpftp.ini中循环取出数据库需要bcp的表名,利用Win32 API的进程创建函数CreateProcess,给Sybase Open Clinet for Win95/Win98的bcp程序创建进程,实现bcp操作。
procedure TForm1.BcpProc;
var IniFile:TIniFile;str,str1:string; SI:TStartupInfo;PI:TProcessInformation;
p_status:boolean; section: TStringList;i: Integer;
begin Memo1.Lines.Add(''); Memo1.Lines.Add('★开始 Bcp Tables !');
IniFile:=TIniFile.Create(INI_FILE);section:=TStringList.Create;
IniFile.ReadSection('Bcp Tables',section);
for i :=0 to section.Count -1 do begin
FillChar(SI,SizeOf(SI),0);SI.cb:=SizeOf(SI);SI.dwFlags:=STARTF_USESHOWWINDOW;
str:=IniFile.ReadString('Bcp Tables',section[i],'');str:=section[i];
str1 :='bcp testdb..'+str+' out '+str+'.txt -c -Usa -P -SSYBASE';
p_status:=CreateProcess(nil,PChar(str1),nil,nil,True,0,nil,nil,SI,PI);
if not p_status then begin ShowMessage('★ bcp 失败!'); exit; end;
WaitForSingleObject(PI.hProcess,INFINITE);
CloseHandle(PI.hThread);CloseHandle(PI.hProcess);
Memo1.Lines.Add('★bcp tele114..'+str+' out '+str+'.txt 结束');
end; Memo1.Lines.Add('★结束 Bcp Tables!');
end;
④ 生成可执行文件dumpftp.exe。把用Delphi编制的程序编译生成exe文件,存放在c:\dump目录下,并运行该程序。
至此,实现了Sybase数据库的自动备份、备份文件异地自动拷贝以及数据库表的自动bcp。
三.几点说明
1. 异地是指主机和PC机放在不同的建筑物内,可以是不同城市或同一城市的不同地区,但两者必须能够通过局域网或广域网相连。
2. 本文例子中的主机操作系统为SCO OpenServer 5.05,startdump必须存放于/etc/rc2.d目录下。若主机操作系统为DEC Unix或HP Unix,则存放于/sbin/rc2.d目录下。
3. Sybase Backup Server必须一直启动着。
4. 可以根据实际情况,确定数据库自动备份(at命令的时间参数)、备份文件异地自动拷贝以及自动bcp数据库表的时间点(timer 的时间参数),但必须确保数据库备份结束后才能进行自动拷贝和bcp。
5. 因为数据库的不断增大,PC机的硬盘必须考虑足够大的余量。
[教程]Sybase数据库自动备份与异地存放 [服务器管理维护] IT.com.cn IT...
Sybase数据库日常维护
Photoshop教程-表面模糊滤镜快速去斑 [数字暗房] IT.com.cn IT世界网...
Photoshop基础视频动漫教程 www.IT.com.cn IT世界网
使用SQL Server维护计划实现数据库定时自动备份
Photoshop抠图大全 www.IT.com.cn IT世...
[维修]堵塞不用慌!喷打“堵头”解决有方 维修,维护,喷墨打印机维修,喷墨打印机维护 [办公产品应用指南] IT.com.cn IT世界网
Networker备份系统运行维护(下) — IT技术
南都:“郭美美”:真相焦虑与信息遮蔽的拉锯 IT.com.cn IT世界网
办公视频教程-IT.com.cn办公视频教程栏目 精彩办公视频教程就在it.com.cn
Photoshop制作炫目的火光文字特效 IT.com.cn IT世界网-先上IT网再逛电...
千奇百怪的美国法律 - 八卦灌水 - IT俱乐部 BBS.it.com.cn IT世界网论...
Sql Server 2005维护计划自动备份数据库作业执行失败,会自动生成abc82作业
Photoshop超强抠图合成创意实例 [数字暗房] IT.com.cn IT世界网-买家...
Photoshop四步让暗黄肤色变白 [数字暗房] IT.com.cn IT世界网-买家最...
Photoshop鼠绘一把古色古香的扇子 www.IT.com.cn IT世界网
通俗易懂 Office 系列视频教程 www.IT.com.cn IT世界网
漫画人:漫画是动漫基础 IT.com.cn IT游戏频道-轻松游戏之道
宾得推出smc PENTAX-DA 35mm F2.4 AL镜头 IT.com.cn IT...
Photoshop CS2全系列视频教程 www.IT.com.cn IT世界网
Spring 框架简介 [程序开发Java] IT.com.cn IT世界网
Photoshop提示暂存盘已满的解决办法 [电脑入门] IT.com.cn IT世界网
十一国庆祝福短信全集 [国内] IT.com.cn IT世界网
T台秀场的拍摄技巧 IT.com.cn IT世界网