第13章多用户操作 第13章多用户操作 13.1多用户简介 132多用户 FoXPro的加锁和 出错处理 133死锁的预防
第13章 多用户操作 第13章 13.1 多用户简介 13.2 多用户 FoxPro 的加锁和 出错处理 13.3 死锁的预防
第13章多用户操作 131多用户简介 13.1.1数据的一致性和正确性 假定,分处于两个网络工作站上的两程序甲和乙同 时使用某库文件A。甲打开A库文件后,对其中的数据 进行修改;乙用户打开A库文件后,只是使用其中的数据 (即不进行修改操作)
第13章 多用户操作 13.1 多 用 户 简 介 13.1.1 数据的一致性和正确性 假定, 分处于两个网络工作站上的两程序甲和乙同 时使用某库文件A。 甲打开A库文件后, 对其中的数据 进行修改; 乙用户打开A库文件后, 只是使用其中的数据 (即不进行修改操作)
第13章多用户操作 再进一步假定,甲、乙两用户同时都对同一库文 件A进行修改。此时,情况更复杂了。当两用户修改 结束后,谁也无法确定,库文件更新的数据中,哪些是正 确的,哪些是错误的;哪些数据最终是仅由甲修改的,哪 些数据最终是乙修改的,哪些数据是甲乙双方修改的结 果。也即,在这种情况下,连数据的正确性都无法保证。 加锁可以保证数据的一致性和正确性
第13章 多用户操作 再进一步假定, 甲、 乙两用户同时都对同一库文 件A进行修改。 此时, 情况更复杂了。 当两用户修改 结束后, 谁也无法确定, 库文件更新的数据中, 哪些是正 确的, 哪些是错误的; 哪些数据最终是仅由甲修改的, 哪 些数据最终是乙修改的, 哪些数据是甲乙双方修改的结 果。 也即, 在这种情况下, 连数据的正确性都无法保证。 加锁可以保证数据的一致性和正确性
第13章多用户操作 13.1.2加锁,共享,冲突与死锁 所谓加锁( Locking)就是对库文件加锁(File Locking)。当用户甲对库文件A加锁后,其他用户都不 能再使用此库文件 上述的加锁法虽然可以保证库文件数据的一致性 和正确性,但却不能使多个用户同时使用同一个库文件 即破坏了共享 当用户甲要使用某库文件数据时(不修改,如果不 在乎数据是否一致,他并不需要对库文件A进行加锁;但 若他要求数据必须一致,那么必须给库文件A加锁
第13章 多用户操作 13.1.2 加锁, 共享, 冲突与死锁 所谓加锁 (Locking) 就 是 对 库 文 件 加 锁 (File Locking)。 当用户甲对库文件A加锁后, 其他用户都不 能再使用此库文件。 上述的加锁法虽然可以保证库文件数据的一致性 和正确性, 但却不能使多个用户同时使用同一个库文件, 即破坏了共享。 当用户甲要使用某库文件数据时(不修改), 如果不 在乎数据是否一致, 他并不需要对库文件A进行加锁; 但 若他要求数据必须一致, 那么必须给库文件A加锁
第13章多用户操作 加锁虽然可以保证数据的一致性和正确性,但加锁 也带来了两个新问题:冲突和死锁。冲突( Collision)。 当用户甲对库文件加锁,不允许其他用户使用此库 文件后,用户乙企图打开此库文件,就发生了冲突。或 者,当用户甲对库文件加锁,不允许其他用户修改此库 文件后,用户乙企图修改此库文件,也会发生冲突。 死锁一般在多库文件操作时发生。用户甲对库文 件A加锁,不允许其他用户使用,然后,准备使用库文件 B的数据;但库文件B已被用户乙加锁,不允许其他用户 使用,且用户乙也准备使用库文件A的数据
第13章 多用户操作 加锁虽然可以保证数据的一致性和正确性, 但加锁 也带来了两个新问题: 冲突和死锁。 (Collision)。 当用户甲对库文件加锁, 不允许其他用户使用此库 文件后, 用户乙企图打开此库文件, 就发生了冲突。 或 者, 当用户甲对库文件加锁, 不允许其他用户修改此库 文件后, 用户乙企图修改此库文件, 也会发生冲突。 死锁一般在多库文件操作时发生。 用户甲对库文 件A加锁, 不允许其他用户使用, 然后, 准备使用库文件 B的数据; 但库文件B已被用户乙加锁, 不允许其他用户 使用, 且用户乙也准备使用库文件A的数据
第13章多用户操作 132多用户 FoxPro的加锁和 出错处理 1321多用户 FoxPro的加锁 1.独占加锁 在打开库文件的同时,对库文件进行的加锁为独占 加锁。独占加锁是最严厉的加锁 个库文件被独 占加锁后,只有加锁用户可以使用该库文件,其他用户 无权打开此库文件,更谈不上修改,使用此库文件了 (1)独占加锁法
第13章 多用户操作 13.2 多用户 FoxPro 的加锁和 出错处理 13.2.1 多用户 FoxPro 的加锁 1. 在打开库文件的同时, 对库文件进行的加锁为独占 加锁。 独占加锁是最严厉的加锁。 一个库文件被独 占加锁后, 只有加锁用户可以使用该库文件, 其他用户 无权打开此库文件, 更谈不上修改, 使用此库文件了。 (1) 独占加锁法
第13章多用户操作 FoxPro提供了两种独占加锁的方法。 ①使用 SET EXCLUSIVE命令,命令格式为 SET EXCLUSIVE ON/OFF 执行了 SET EXCLUSIVE ON命令后,系统将处于 EXCLUSIⅤEON状态。在此状态下,执行USE命令打 开库文件时,若无特殊声明,被打开的库文件都是独占 加锁的。但是,该命令执行以前,未独占打开的库文件, 仍保持不独占加锁的特性(共享特性)
第13章 多用户操作 FoxPro提供了两种独占加锁的方法。 ① 使用SET EXCLUSIVE命令, 命令格式为: SET EXCLUSIVE ON/OFF 执行了SET EXCLUSIVE ON命令后, 系统将处于 EXCLUSIVE ON状态。 在此状态下, 执行USE命令打 开库文件时, 若无特殊声明, 被打开的库文件都是独占 加锁的。 但是, 该命令执行以前, 未独占打开的库文件, 仍保持不独占加锁的特性(共享特性)
第13章多用户操作 执行了 SET EXCLUSIVE OFF命令后,系统即处于 EXCLUSIVE OFF状态。在此状态下,利用USE命令打 开库文件时,若无特殊声明,打开的库文件是不独占加 锁的。但是,此命令执行前,已独占加锁的库文件,仍 保持独占加锁的特性 观察下列程序段 SET EXCLUSIVE ON SELECT 1 USE职工 SET EXCLUSIVE OFF
第13章 多用户操作 执行了SET EXCLUSIVE OFF命令后, 系统即处于 EXCLUSIVE OFF状态。 在此状态下, 利用USE命令打 开库文件时, 若无特殊声明, 打开的库文件是不独占加 锁的。 但是, 此命令执行前, 已独占加锁的库文件, 仍 保持独占加锁的特性。 观察下列程序段: SET EXCLUSIVE ON SELECT 1 USE 职工 SET EXCLUSIVE OFF
第13章多用户操作 SELECT B USE工资 上述程序若能执行成功,职工DBF库文件独占加锁, 工资DBF未独占加锁(可共享) SET EXCLUSIⅤE的初始默认值为ON ②打开库文件时,声明独占加锁。利用USE命令 打开库文件时,若带有子句: EXCLUSIVE 则打开的库文件是独占加锁的。即使刚执行过 SETEXCLUSIVE OFF命令,也是如此
第13章 多用户操作 SELECT B USE 工资 上述程序若能执行成功, 职工.DBF库文件独占加锁, 工资 .DBF 未独占加锁(可共享)。 SET EXCLUSIVE的初始默认值为ON。 ② 打开库文件时, 声明独占加锁。 利用USE命令 打开库文件时, 若带有子句: EXCLUSIVE 则打开的库文件是独占加锁的。 即使刚执行过 SET EXCLUSIVE OFF命令, 也是如此
第13章多用户操作 例 USE职工 EXCLUSIVE 若此命令执行成功,职工DBF库文件就被该用户独 占 ③打开库文件时,声明可共享。利用USE命令打开 库文件时,若带有子句 SHARE 则打开的库文件是可共享的。即使刚执行过SET EXCLUSIVE ON命令,也是如此
第13章 多用户操作 例 USE 职工 EXCLUSIVE 若此命令执行成功, 职工.DBF库文件就被该用户独 占。 ③ 打开库文件时, 声明可共享。 利用USE命令打开 库文件时, 若带有子句: SHARE 则打开的库文件是可共享的。 即使刚执行过SET EXCLUSIVE ON命令, 也是如此