- ·上一篇文章:在ERP系统中存储过程的研讨开发
- ·下一篇文章:CAN总线的数控机床网络化分析
在DELPHI中实现数据库的恢复与同步分析
摘要 本文从Delphi的程序执行方式介绍了在SQL Server 2000中如何实现数据库的恢复与同步问题。向读者展示一种数据库的备份与恢复的程序实现方法.
关键词:Delphi SQL Server 数据库
Abstract this article introduced from the Delphi program execution way how in 2000 to realize the database restoration and the synchronized question in SQL Server. To the reader demonstrated that one kind of database the backup with the procedure which restores realizes the method. key word: Delphi SQL Server database
1引言
数据库的备份与恢复问题是开发应用系统中必不可少的一个功能模块。虽然在数据库管理系统中都提供了数据库的备份与恢复功能,但都是在后台进行的手工操作,如何能在程序中自动实现这些功能,应该说是一个程序开发人员要面对的问题。因此笔者就自身经历向读者展示在DELPHI中实现SQL Server 2000数据库的备份、恢复与同步的方法。
2 DELPHI中实现数据库的恢复与同步的编程方法
Delphi是Windows系统平台下优秀的可视化编程环境,是当今流行的Windows程序开发环境之一。Delphi被称为第4代编程语言,它是Borland/Inprise公司的主要产品之一,是基于Windows的面向对象的可视化软件开发系统,具有高效、优化和或扩展的数据库技术等优点[1]。利用Delphi的客户/服务器功能,可以在本地或远程数据库服务器上开发客户/服务器模式的应用程序,笔者开发的许多应用系统都是基于Delphi的开发环境,充分体会到了Delphi的优势。
2.1数据库备份
为保证系统中数据的安全性,数据库的备份是应用程序中必不可少的一项操作。假设要备份的数据库名为DB,其代码如下:
adoconnection1.connection:=true;; //连接到本应用程序的连接
adoquery1.close; //连接到adoconnection1数据库的adoquery1
adoquery1.SQL.Clear;
adoquery1.SQL.Add('backup database [db] to ');
adoquery1.SQL.Add('disk='''+edit1.Text+''' with noinit, '); //edit文本框内容是备份的目标地址
adoquery1.SQL.add('nounload, name=''db备份'',');
adoquery1.sql.add('noskip,stats=10,noformat');
adoconnection1.begintrans; //开始事务
try
adoquery1.execsql;
adoconnection1.committrans;
showmessage(' 备份成功!');
except
adoconnection1.rollbacktrans;
showmessage(' 备份失败!');
2.2数据库恢复
在执行数据库恢复时要注意,必须没有其他程序连接到要恢复的这个数据库上,包括程序自身。否则会出现提示“因为数据库正在使用,所以未能获得对数据库的排他访问权”。因此在数据库恢复之前,首先应该断开连接,使连接连接到Master数据库中;其次断开其他程序的连接,可用杀进程的方法;最后执行数据库恢复操作[2]。其代码如下:
ConnectMaster.connection:=true //连接Master数据库
adoconnection1.Close; //断开本应用程序使用的连接
adoquery1.close; //连接到Master数据库的adoquery1
adoquery1.sql.clear;
sql:='select spid from sysprocesses where dbid=db_id('+''''+'db'+''''+')';
adoquery1.sql.add(sql);
adoquery1.open; //查询所有连接到预还原的数据库的线程
if adoquery1.RecordCount>0 then //开始逐个杀线程
begin
adoquery1.first;
while not adoquery1.Eof do
begin
intSPID:=adoquery1.fields[0].Value; //intSPID:integer用于存储线程ID
adoquery2.close;
adoquery2.SQL.clear;
sql:='Kill '+intToStr(intSPID);
adoquery2.SQL.add(sql);
adoquery2.ExecSql;
adoquery1.Next;
end;
end;
adoquery1.close; //开始执行恢复操作
adoquery1.SQL.Clear;
adoquery1.SQL.Add('restore database db from ');
adoquery1.SQL.Add('disk='''+edit1.Text+''''+'with replace');
ConnectMaster.begintrans;
try
adoquery1.execsql;
ConnectMaster.committrans;
showmessage(' 数据恢复成功!');
except
ConnectMaster 1.rollbacktrans;
showmessage('数据库正在被使用!请确定已关闭其他使用该数据库的程序!');
showmessage(' 数据恢复失败!');
end;
ConnectMaster.connection:=false;
adoconnection1.Connected:=true;
2.3数据库同步
都只能通常情况下应用程序的备份与恢复,都是在装有数据库的那台机器(服务器)上操作,不能远程执行的。如果想同时备份到局域网中的其它机器中,就应该使用数据库复制技术,以使数据实现同步。使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据。复制技术可以确保分布在不同地点的数据自动同步更新,从而保证数据的一致性[3]。
下面假设将A服务器上的数据库备份到B服务器上的共享目录里(两台服务器应该在局域网内,允许目录共享访问) 。基操作步骤为:
1.在机器A,B上创建一个同名的windows用户,用户组设置为administrators,并设置相同的密码,做为备份文件夹的有效访问用户。操作:
【我的电脑】→【控制面板】→【管理工具】→【计算机管理】→【用户和组】,右击用户→【新建用户】,建立一个隶属于administrator组的登录windows的用户;
2.在B机器上,新建一个共享目录,做为备份文件的存放目录。
右击这个新建的目录→【共享】,选择“共享该文件夹”,通过“权限”按纽来设置具体的用户权限,保证第一步中创建的用户具有对该文件夹的所有权限;
3.设置 MSSQLSERVER 及 SQLSERVERAGENT 服务的启动用户。操作:
【我的电脑】→【控制面板】→【管理工具】→【服务】,右击 MSSQLSERVER→【属性】,在“登陆”选项卡中在“此账户”中输入或者选择第一步中创建的Windows登录用户名,“密码”中输入该用户的密码。同样的方法设置 SQLSERVERAGENT;
4.在A机器上完成对B机器目录的映射。
做完这些准备工作后,利用前面的数据库备份代码,我们就可以实现一个局域网内不同机器的数据库复制功能。
3 结束语
数据库技术是计算机科学技术中发展最快的领域之一,也是应用范围最广、实用性很强技术之一。它是管理信息系统(MIS)、办公自动化(OA)等领域的核心技术和重要基础。
因此在Internet高速发展的信息化的今天,建设以数据库为核心的各类信息系统,是从事计算机的专业人员必须掌握和学习的知识和技术[4]。
参考文献
1. 刘宇君、曹党生、叶瑶、吕玉良 《Delphi程序设计》中国铁道出版社 2006年2月
2.http://www.pf1688.com/pf/article/data/Mssql/200510/Article_20051022123243.html
3. http://www.iwant668.com/user1/poor/archives/2006/2292.html
4.吴宝国 《电子商务数据库技术》 高等教育出版社 2006年7月
关键词:Delphi SQL Server 数据库
Abstract this article introduced from the Delphi program execution way how in 2000 to realize the database restoration and the synchronized question in SQL Server. To the reader demonstrated that one kind of database the backup with the procedure which restores realizes the method. key word: Delphi SQL Server database
1引言
数据库的备份与恢复问题是开发应用系统中必不可少的一个功能模块。虽然在数据库管理系统中都提供了数据库的备份与恢复功能,但都是在后台进行的手工操作,如何能在程序中自动实现这些功能,应该说是一个程序开发人员要面对的问题。因此笔者就自身经历向读者展示在DELPHI中实现SQL Server 2000数据库的备份、恢复与同步的方法。
2 DELPHI中实现数据库的恢复与同步的编程方法
Delphi是Windows系统平台下优秀的可视化编程环境,是当今流行的Windows程序开发环境之一。Delphi被称为第4代编程语言,它是Borland/Inprise公司的主要产品之一,是基于Windows的面向对象的可视化软件开发系统,具有高效、优化和或扩展的数据库技术等优点[1]。利用Delphi的客户/服务器功能,可以在本地或远程数据库服务器上开发客户/服务器模式的应用程序,笔者开发的许多应用系统都是基于Delphi的开发环境,充分体会到了Delphi的优势。
2.1数据库备份
为保证系统中数据的安全性,数据库的备份是应用程序中必不可少的一项操作。假设要备份的数据库名为DB,其代码如下:
adoconnection1.connection:=true;; //连接到本应用程序的连接
adoquery1.close; //连接到adoconnection1数据库的adoquery1
adoquery1.SQL.Clear;
adoquery1.SQL.Add('backup database [db] to ');
adoquery1.SQL.Add('disk='''+edit1.Text+''' with noinit, '); //edit文本框内容是备份的目标地址
adoquery1.SQL.add('nounload, name=''db备份'',');
adoquery1.sql.add('noskip,stats=10,noformat');
adoconnection1.begintrans; //开始事务
try
adoquery1.execsql;
adoconnection1.committrans;
showmessage(' 备份成功!');
except
adoconnection1.rollbacktrans;
showmessage(' 备份失败!');
2.2数据库恢复
在执行数据库恢复时要注意,必须没有其他程序连接到要恢复的这个数据库上,包括程序自身。否则会出现提示“因为数据库正在使用,所以未能获得对数据库的排他访问权”。因此在数据库恢复之前,首先应该断开连接,使连接连接到Master数据库中;其次断开其他程序的连接,可用杀进程的方法;最后执行数据库恢复操作[2]。其代码如下:
ConnectMaster.connection:=true //连接Master数据库
adoconnection1.Close; //断开本应用程序使用的连接
adoquery1.close; //连接到Master数据库的adoquery1
adoquery1.sql.clear;
sql:='select spid from sysprocesses where dbid=db_id('+''''+'db'+''''+')';
adoquery1.sql.add(sql);
adoquery1.open; //查询所有连接到预还原的数据库的线程
if adoquery1.RecordCount>0 then //开始逐个杀线程
begin
adoquery1.first;
while not adoquery1.Eof do
begin
intSPID:=adoquery1.fields[0].Value; //intSPID:integer用于存储线程ID
adoquery2.close;
adoquery2.SQL.clear;
sql:='Kill '+intToStr(intSPID);
adoquery2.SQL.add(sql);
adoquery2.ExecSql;
adoquery1.Next;
end;
end;
adoquery1.close; //开始执行恢复操作
adoquery1.SQL.Clear;
adoquery1.SQL.Add('restore database db from ');
adoquery1.SQL.Add('disk='''+edit1.Text+''''+'with replace');
ConnectMaster.begintrans;
try
adoquery1.execsql;
ConnectMaster.committrans;
showmessage(' 数据恢复成功!');
except
ConnectMaster 1.rollbacktrans;
showmessage('数据库正在被使用!请确定已关闭其他使用该数据库的程序!');
showmessage(' 数据恢复失败!');
end;
ConnectMaster.connection:=false;
adoconnection1.Connected:=true;
2.3数据库同步
都只能通常情况下应用程序的备份与恢复,都是在装有数据库的那台机器(服务器)上操作,不能远程执行的。如果想同时备份到局域网中的其它机器中,就应该使用数据库复制技术,以使数据实现同步。使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据。复制技术可以确保分布在不同地点的数据自动同步更新,从而保证数据的一致性[3]。
下面假设将A服务器上的数据库备份到B服务器上的共享目录里(两台服务器应该在局域网内,允许目录共享访问) 。基操作步骤为:
1.在机器A,B上创建一个同名的windows用户,用户组设置为administrators,并设置相同的密码,做为备份文件夹的有效访问用户。操作:
【我的电脑】→【控制面板】→【管理工具】→【计算机管理】→【用户和组】,右击用户→【新建用户】,建立一个隶属于administrator组的登录windows的用户;
2.在B机器上,新建一个共享目录,做为备份文件的存放目录。
右击这个新建的目录→【共享】,选择“共享该文件夹”,通过“权限”按纽来设置具体的用户权限,保证第一步中创建的用户具有对该文件夹的所有权限;
3.设置 MSSQLSERVER 及 SQLSERVERAGENT 服务的启动用户。操作:
【我的电脑】→【控制面板】→【管理工具】→【服务】,右击 MSSQLSERVER→【属性】,在“登陆”选项卡中在“此账户”中输入或者选择第一步中创建的Windows登录用户名,“密码”中输入该用户的密码。同样的方法设置 SQLSERVERAGENT;
4.在A机器上完成对B机器目录的映射。
做完这些准备工作后,利用前面的数据库备份代码,我们就可以实现一个局域网内不同机器的数据库复制功能。
3 结束语
数据库技术是计算机科学技术中发展最快的领域之一,也是应用范围最广、实用性很强技术之一。它是管理信息系统(MIS)、办公自动化(OA)等领域的核心技术和重要基础。
因此在Internet高速发展的信息化的今天,建设以数据库为核心的各类信息系统,是从事计算机的专业人员必须掌握和学习的知识和技术[4]。
参考文献
1. 刘宇君、曹党生、叶瑶、吕玉良 《Delphi程序设计》中国铁道出版社 2006年2月
2.http://www.pf1688.com/pf/article/data/Mssql/200510/Article_20051022123243.html
3. http://www.iwant668.com/user1/poor/archives/2006/2292.html
4.吴宝国 《电子商务数据库技术》 高等教育出版社 2006年7月





