详情另见:http://www.dlycms.com/jishujiaolu_view_1.html
一、并发处理
数据库的特点就是数据的集中管理和共享。在通常情况下总是有若干个事务并发地运行,这些并行的事务可能并发地存取相同的数据。因此,数据库管理系统的一个重要任务就是要有一种机制去保证这种并发的存取和修改不破坏数据的完整性,确保这些事务能正确地运行并取得正确的结果。
我们知道,事务并发执行时若不加控制的话,将导致不正确的结果和数据库的不一致状态。为保证数据库数据正确地反映所有事务的更新,以及在一事务修改数据时其它事务不同时修改这个数据,数据库系统用锁来控制对数据的并发存取。
二、ORACLE的并发处理机制
无需任何说明,ORACLE自动提供行级锁,它允许用户在没有冲突的情况下更新表中不同的行。行级锁对联机事务处理非常有用。
1、ORACLE锁
ORACLE锁的类型在正常情况下,ORACLE会自动锁住需要加锁的资源以保护数据,
这种锁是隐含的,叫隐含锁。然而,在一些条件下,这些自动的锁在实际应用时并不能满足需要,必须人工加一些锁。这些人工加的锁叫显示锁。
下面指明了会产生隐含锁的SQL语句:
INSERT;
UPDATE;
DELETE;
DDL/DCL语句。
下面指明了会产生显示锁的SQL语句:
SELECT FOR UPDATE;
LOCK TABLE INXXX MODE。
解决读的不可重复性可以用下面的方法。在ORACLE中,用SELECT FOR UPDATE对预期要修改的记录加行排它锁(X),对表加行共享锁(RS)。它常用于要锁住一行,但不去真的修改这一行。锁之间是有相互作用的。
例如,更新时会对表加RX锁,对行加X锁,而只有RS锁和RX锁允许再加RX锁。因此,当存在RS和RX锁时,表允许更新。再比如,当执行DDL和DCL语句时,会对表加排它锁X,而在存在X、RS、SRX、RX和S锁的前提下,都不能再加X锁。因此,当存在X,RS,SRX,RS或S锁时,不能对表做DCL和DDL操作。这样,数据库会自动防止一个用户更新表中的数据,而其他用户在同时修改表的结构。
2、ORACLE只读事务
ORACLE支持只读事务。只读事务有以下特点:
*在事务中只允许查询
*其它事务可修改和查询数据
*在事务中,其它用户的任何修改都看不见
只读事务的写法为:
SET TRANS ACTION READONLY
SQL语句
COMMIT,ROLLBACK,DDL结束只读事务
3、事务一致性的级别
事务是定义和维护一致性的单位,封锁就是要保证这种一致性。如果对封锁的要求高会增加开销,降低并发性和效率;有的事务并不严格要求结果的质量(如用于统计的事务),如果加上严格的封锁则是不必要和不经济的。因此有必要进行进一步的分析,考察不同级别的一致性对数据库数据的质量及并行能力的影响。
一致性级别定义为如下的几个条件:
1) 事务不修改其它任何事务的脏数据。脏数据是被其它事务修改过,但尚未提交的数据。
2) 在事务结束前不对被修改的资源解锁。
3) 事务不读其它任何事务的脏数据。
4) 在读前对数据加共享锁(RS)和行排它锁,直至事务结束。
*满足条件1的事务叫第0级事务。
*满足条件1和2的事务叫第1级一致性事务。
*满足条件1、2和3的事务为2级一致性事务。
ORACLE的读一致性保证了事务不读其它事务的脏数据。(内网)改造项目 技术部分.doc
(内网)改造项目第一标段12.9(改).doc
*满足条件1、2、3和4的事务叫第3级一致性事务。
由ORACLE的三个性质:自动加隐式锁、在事务结束时释放锁和读一致性,使ORACLE成为自动满足以上的0、1和2级一致性事务。因此,ORACLE自动防止了脏读(写-读依赖)。但是,ORACLE不能自动防止丢失修改(写-写依赖),读的不可重复性(读-写依赖),彻底解决并发性中的问题还需满足第4个条件(3级一致性事务),这需要程序员根据实际情况编程。
方法如下:
*如果想在一段时间内使一些数据不被其它事务改变,且在本事务内仅仅查询数据,则可用SETTRANSACTIONREADONLY语句达到这一目的。
*如果想在一事务内修改一数据,且避免丢失修改,则应在读这一数据前用SELECTFORUPDATE对该数据加锁。
*如果想在一事务内读一数据,且想基于这一数据对其它数据修改,则应在读数据前对此数据用SELECTFORUPDATE加锁。对此种类型的应用,用这条SQL语句加锁最恰当。
*如果想避免不可重复读现象,可在读前用SELECTFORUPDATE对数据加锁,或用SET TRANS ACTION READONLY设置只读事务。
负载平衡
负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。均衡负载能够平均分配客户请求到服务器列阵,籍此提供快速获取重要数据,解决大量并发访问服务问题。这种群集技术可以用最少的投资获得接近于大型主机的性能。
网络负载均衡的优点
第一,网络负载均衡能将传入的请求传播到多达32台服务器上,即可以使用最多32台服务器共同分担对外的网络请求服务。网络负载均衡技术保证即使是在负载很重的情况下,服务器也能做出快速响应;
第二,网络负载均衡对外只需提供一个IP地址(或域名);
第三,当网络负载均衡中的一台或几台服务器不可用时,服务不会中断。网络负载均衡自动检测到服务器不可用时,能够迅速在剩余的服务器中重新指派客户机通讯。这项保护措施能够帮助你为关键的业务程序提供不中断的服务,并可以根据网络访问量的增加来相应地增加网络负载均衡服务器的数量;
第四,网络负载均衡可在普通的计算机上实现。
网络负载均衡的实现过程
在Windows Server 2003中,网络负载均衡的应用程序包括Internet信息服务(IIS)、ISA Server 2000防火墙与代理服务器、VPN虚拟专用网、终端服务器、Windows Media Services(Windows视频点播、视频广播)等服务。同时,网络负载均衡有助于改善服务器的性能和可伸缩性,以满足不断增长的基于Internet客户端的需求。
网络负载均衡可以让客户端用一个逻辑Internet名称和虚拟IP地址(又称群集IP地址)访问群集,同时保留每台计算机各自的名称。下面,我们将在两台安装Windows Server 2003的普通计算机上,介绍网络负载均衡的实现及应用。
这两台计算机中,一台计算机名称为A,IP地址为192.168.0.7;另一台名为B,IP地址为192.168.0.8。规划网络负载均衡专用虚拟IP地址为192.168.0.9。当正式应用时,客户机只需要使用IP地址192.168.0.9来访问服务器,网络服务均衡会根据每台服务器的负载情况自动选择192.168.0.7或者192.168.0.8对外提供服务。具体实现过程如下:
在实现网络负载均衡的每一台计算机上,只能安装TCP/IP协议,不要安装任何其他的协议(如IPX协议或者NetBEUI协议),这可以从“网络连接属性”中查看。
第一步,分别以管理员身份登录A机和B机,打开两台机的“本地连接”属性界面,勾选“此连接使用下列项目”中的“负载均衡”项并进入“属性”对话框,将IP地址都设为192.168.0.9(即负载均衡专用IP),将子网掩码设置为255.255.255.0;
第二步,分别进入A机和B机的“Internet协议(TCP/IP)”属性设置界面,点击“高级”按钮后,在弹出的“高级TCP/IP设置”界面中添加IP地址192.168.0.9和子网掩码设置为255.255.255.0。
第三步,退出两台计算机的“本地连接属性”窗口,耐心等一会儿让系统完成设置。
以后,如果这两台服务器不能满足需求,可以按以上步骤添加第三台、第四台计算机到网络负载均衡系统中以满足要求。