环境管理_网络环境下数据共享操作_第1页
环境管理_网络环境下数据共享操作_第2页
环境管理_网络环境下数据共享操作_第3页
环境管理_网络环境下数据共享操作_第4页
环境管理_网络环境下数据共享操作_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第11章 网络环境下数据共享操作,浙江财经学院 信息学院 软件教研室, 2005-2006 ZUFE, Information School,内 容 导 航,学习提要与目标,掌握多用户相关概念(共享与独占) 了解数据锁定的方法,本章内容,多用户概念 数据库文件的独占和共享 文件与记录的加锁和解锁 网络环境下相关函数与命令 保护数据的其他方法,返回,多用户概念,引入: 随着网络技术的发展,用户希望共享数据库的数据,即多个用户同时使用一个数据库里的数据 多用户概念: 指允许两个或两个以上用户同时访问(读取、修改等)数据库数据和外部设备。 多用户环境下产生的最大问题: 数据有可能不一致,如何保持数据的一致性成为了多用户环境下遇到的最大问题。,多用户概念,数据不一致性的原因:对数据修改引起,一般分为以下两种情况。 1、程序甲和程序乙同时对文件A修改,修改后谁也无法确定哪些数据是程序甲修改的,哪些数据是程序乙修改的,哪些数据是程序甲乙共同修改的,从而导致数据不一致性。 2、程序甲对文件A修改,程序乙对文件A多次读取,造成前后读取数据不一致,多用户概念,不一致性的两种解决方法: 1、独占:当某用户对表文件数据修改时,不允许其他用户对该文件数据执行任何操作,包括读取、修改等,缺点是破坏了网络上共享数据的优点,尽量少用。 2、加锁:当某个用户对表文件数据修改时,允许其他用户对该表文件数据读取,但不能修改。加锁后要及时解锁。加锁也带来了两个新问题:冲突和死锁。,多用户概念,冲突概念: 指当一个用户对表文件或记录加锁修改时,另一个用户也企图打开同一表文件或记录进行修改,从而发生冲突,我们可以用捕捉错误命令(ON ERROR)处理冲突问题。 死锁概念: 指一用户锁定一个文件或记录后,又去访问正被另一个用户加锁的文件或记录,而另一个用户对文件加锁后又去访问第一个用户锁定的文件,多用户概念,或记录。当发生“死锁”时,两个用户无论等待多长时间,都无法等到对方开锁,其过程如图11.1所示。,11.2 数据库文件的独占和共享,表文件的独占 表文件的共享,一、表文件的独占(P470),独占:表文件中数据只能自己使用,别人不能使用,即既不能修改,也不能查看 以“独占”方式打开表文件的两种命令格式: 1、格式1:SET EXCLUSIVE ON/OFF 功能:指定Foxpro是否以独占或共享方式打开 表文件。当设置为ON时,打开的所有表文件都被该用户独占,当设置为OFF时,打开的表文件变成共享使用,一、表文件的独占(P470),2、格式2:USEEXCLUSIVE 功能:以独占方式打开表文件 例:USE 学生 EXCLUSIVE 注意: SET EXCLUSIVE不能改变原先已经打开的表文件的状态。例如:一个表文件在SET EXCLUSIVE ON时打开了,然后执行SET EXCLUSIVE OFF后,这时该表文件仍保持独占的方式打开着。,二、表文件的共享(P471),共享:如果只是查看数据,而不进行修改,那么应该以共享方式打开表。 “共享”方式打开的命令格式: 格式:USESHARED 功能:以共享方式打开表文件 例:USE 学生 SHARED OPEN database 数据库名 SHARED,二、表文件的共享,注意点: SET EXCLUSIVE ON/OFF与USEEXCLUSIVE/SHARE 区别:前者一旦设置,对后面打开的文件都将有效,而后者只对该命令中的一个表文件有效。另外,它的优先级高于SET EXCLUSIVE。 如果以独占方式打开表文件,别人无论采用独占或共享打开表文件都会出错,另外,如果有人以共享方式打开表文件,其他用户以独占方式打开,也会出现同样问题。,11 .3 文件与记录的加锁和解锁,锁的概念 自动加锁 人工加锁 表文件与记录的解锁,一、锁的概念,锁的概念: 某个用户对数据锁上后,别人不可以修改但可以查看。 加锁的目的: 防止两个用户同时写一个记录,保持数据的一致性。 加锁的两种方式: 自动加锁 人工加锁,二、自动加锁,概念: 许多命令在执行之前,自动锁定一张表或一条记录,如果锁定成功,就执行该命令,执行后自动解除锁定。 1、表文件自动加锁: (1)如果要对整个表文件或表文件中的多条记录进行修改,则必须先对整个表文件加锁。 (2)加锁的命令如下:,二、自动加锁,APPEND APPEND FROM DELETE(一个记录以上) INDEX JOIN RECALL(一个记录以上) REPLACE(一个记录以上) UPDATE,二、自动加锁,2、表文件头自动加锁 (1)某些命令,如向表中追加记录,虽然对当前表中记录没有影响,但是必须保证表头结构不被修改,因此要锁定它。 (2)加锁命令如下: APPEND BLANK APPEND FROM ARRAY INSERT-SQL,二、自动加锁,3、记录自动加锁 (1)如果用户只对表文件中一条记录进行修改,那么只需对相关记录进行加锁。 (2)加锁的命令如下:,二、自动加锁,二、自动加锁,4、不需要加锁的命令 (1)执行只读的命令,任何时候都可以成功执行,不需要加锁。 (2)不需加锁命令如下: COPY COPY STRUCTRUE LIST/DISPLAY LOCATE COUNT/SUM/AVERAGE SORT TOTAL,三、人工加锁,概念: 用户通过函数对表文件或记录进行人工加锁,使用完后要尽快解锁。 人工加锁使用的三个函数 1、表文件加锁函数 格式:FLOCK(工作区号/别名) 函数值类型:逻辑型 功能:即给指定工作区号或别名的表文件加锁,如果省略工作区号或别名,则给当前工作区的表文件加锁。,三、人工加锁,2、记录加锁函数 格式:RLOCK(工作区号/别名/记录号列表,工作区号/别名) 函数值类型:逻辑型 功能:锁定表文件中一条或多条记录。如果不指定工作区号或别名,那么将锁定当前工作区中的当前记录 例:RLOCK(1,3,5,学生) RLOCK(学生) RLOCK(),三、人工加锁,注意:如果要锁定多条记录,必须设置SET MULTILOCK ON,如果是SET MULTILOCK OFF,则最后一条记录被锁定。 3、LOCK()函数 格式:LOCK(工作区号/别名/记录号列表,工作区号/别名) 函数值类型:逻辑型 功能:锁定表文件中一条或多条记录。如果不指定工作区号或别名,那么将锁定当前工作区中的当前记录,三、人工加锁,注意: 该函数与RLOCK()的功能完全一样 有些操作必须在独占方式下才能执行,如INSERT,INSERT BLANK,MODIFY STRUCTURE,PACK,REINDEX和ZAP,因为它们会使表中的所有记录发生改变或者使表的结构发生变化。因此,不是说有了锁,独占打开表的方式就没有用了。,三、人工加锁,例11.1 一个人工加锁的例子(P475) SET EXCLUSIVE OFF SET REPROCESS TO 2 USE 学生 IF FLOCK() REPLACE ALL 奖学金 WITH 奖学金+100 UNLOCK ELSE ?”文件不能加” ENDIF,四、表文件与记录的解锁,表文件或记录锁定后应尽快解锁,以便其他用户可以进行修改操作。解锁命令如下: 格式:UNLOCKIN/ALL 功能:对一个表文件、一条或多条记录进行解锁,或对所有表文件和所有记录进行解锁。,11 .4 网络环境下相关函数与命令,显示和获取锁定状态 参数设置命令 错误捕捉命令与函数,一、显示和获取锁定状态,显示锁定状态命令 格式:LIST STATUS/DISPLAY STATUS 功能:显示Visual Foxpro当前工作环境的信息 锁定状态测试函数 格式:SYS(2011) 函数类型:字符型 功能:以字符串形式返回当前工作区中表文件或记录的锁定状态。,二、参数设置命令,锁定记录条数开关命令 格式:SET MULTILOCKSON/OFF 功能:决定RLOCK()或LOCK()是否能锁定多条记录。 设置锁定记录条数命令 格式:SET REPROCESS TO 次数SECONDS/TO AUTOMATIC,二、参数设置命令,功能:指定一次锁定尝试不成功后,Visual Foxpro对文件或记录再次尝试加锁的次数或时间。一般情况下我们只需要试一次就可以了,故一般在程序开头设置SET REPROCESS TO 1。 例:SET REPROCESS TO 1 SELECT 学生 JSCG=FLOCK() IF JSCG *进入数据的修改处理,二、参数设置命令,ELSE MESSAGEBOX(其他人正在修改数据,您不能修改,请稍后再试。,16,注意) ENDIF UNLOCK 自动锁定开关命令 格式:SET LOCK ON/OFF 功能:激活或废止在某些命令中的自动锁定功能,三、错误捕捉命令与函数,错误捕捉命令 格式:ON ERRORCommand 功能:当出现错误时,指出要执行的命令。Command指定要执行的Visual Foxpro命令。执行该命令后,程序将从引起错误的程序行的下一行重新开始执行。若错误处理程序中包含RETRY命令,则重新执行引起错误的程序行。,三、错误捕捉命令与函数,错误类型测试函数 格式1:ERROR() 函数值类型:数值型 功能:返回触发ON ERROR例程的错误编号 格式2:MESSAGE(1) 函数值类型:字符型 功能:以字符串形式返回当前错误信息,或者返回导致这个错误的程序行内容。,11.5 保护数据的其他方法,数据缓冲技术 使用事务处理机制更新数据,一、数据缓冲技术,采用缓冲目的: 在更新过程中对数据加以保护。 缓冲技术采用的两种方法: 1、将当前记录加锁后赋值到内存或磁盘区域,即缓冲区,当记录指针移动或发出更新命令时,直接将缓冲区内容更新到原来表文件中。 2、先将当前记录复制到缓冲区,并允许对其进行编辑,而其他用户仍然可以访问原来记录,,一、数据缓冲技术,当记录指针移动或发出更新命令时,则先锁定记录,并对缓冲区数据与原表数据进行比较,再执行数据更新。 启动缓冲之前必须选定缓冲方法和锁定方式。 1、选择缓冲方法: 记录缓冲:只对一个记录进行访问,选择该缓冲 表缓冲:若对多条记录进行更新,选择表缓冲。,一、数据缓冲技术,2、选择锁定方式: 锁定方式有下面两种: 保守式缓冲 开放式缓冲 3、缓冲的启动 使用CURSORSETPROP()函数 格式:CURSORSETPROP(属性,属性值,工作区号、别名) 功能:设置Visual Foxpro表文件或临时表的属性。如果省略属性值,则取系统默认值。,一、数据缓冲技术,表11.2 Buffering属性取值及含义,一、数据缓冲技术,4、在表缓冲区中追加和删除记录 可以在启用表缓冲之后追加和删除记录。追加的记录将添加到缓冲区末尾。要访问缓冲区中所有记录,包括追加记录,可使用RECNO()函数。 5、执行更新(三种方法) 1、在表单设计器中,在表单的BufferMode属性中设置 2、选择”工具”菜单的”选项”命令,在弹出”选项”窗口中选择”数据”选项卡,在”缓冲”下拉列表框中选择。 3、在代码中设置,二、使用事务处理机制更新数据,事务处理机制: 事务处理机制将整段代码作为一个受保护的、可恢复的对象的单元,其功能超过了对记录缓冲和表缓冲所提供的保护,能更好地保护更新操作,当发生更新错误时能从整段代码中还原到更新之前的状态。 1、控制事务处理的命令 (1)格式:BEGIN TRANSACTION,二、使用事务处理机制更新数据,功能:启动一个事务处理 (2)格式:END TRANSACTION 功能:结束当前事务 (3)格式:ROLLBACK 功能:取消当前事务期间所作的任何修改 2、事务处理的使用 事务处理遵循下列原则: (1)一个事务处理以BEGIN TRANSACTION,二、使用事务处理机制更新数据,开始,END TRANSACTION或ROLLBACK命令结束。只有END TRANSACTION命令,而前面没有BEGIN TRANSACTION命令与之匹配,则会发生错误。 (2)ROLLBACK命令前没有BEGIN TRANSACTION将会出错。 (3)如果咱事务处理过程中应用程序中止,则所有操作回滚。 (4)对于涉及事务处理数据的查询,Visual Foxpro在使用磁盘数据前,首先使用在事务处理,二、使用事务处理机制更新数据,缓冲区内的高速缓冲数据,以确保使用的是最新的数据。 (5)事务处理只在数据库容器内使用。 (6)事务处理完成下列锁定动作: 当一个命令直接或间接调用事务处理时,Visual Foxpro将强制执行锁定动作。任何系统或用户的直接或间接命令将

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论