摘要
近年来, 随着网络技术、计算机技术、信息数字化技术的快速发展,“网上阅卷”系统应允而生. 网上阅卷以其独有的优势, 逐渐成为大型考试阅卷的主流方式. 提取试卷是阅卷过程中必不可少的一环. 提卷功能要实现的就是将事先进行了计算机图像扫描处理后、储存在计算机数据库里的答卷, 由计算机按规程发送给评卷教师个人计算机介面. 本文主要介绍在大题库中, 如何通过Oracle 的行锁定技术提取试卷.
关键词
网上阅卷; 提取试卷;Oracle 的行锁定技术; 并行访问
中图分类号: TP39310 文献标识码:A
“网上阅卷”是近年来随着网络技术、计算机技术、信息数字化技术的快速发展而出现的基于网络的考试阅卷系统; 所谓“网上阅卷”, 就是通过将考生的试题数字化, 存储在相应的计算机系统中, 通过对试卷数字化信息进行分割、切分处理, 分离出单一考题. 在教师阅卷时, 将考题直接显示在计算机屏幕上,由教师在屏幕上阅卷、给分和传统的手工阅卷相比, 网上阅卷具有很多优点, 如提高效率、减少误差、有利保密等, 最主要的优越性还是能够有效地控制主观题, 特别是像作文和论述题的评分误差, 有效的提高了阅卷的公开性、公平性与公正性. 可以预见, 未来几年, 采用网上阅卷将是大型考试阅卷的主流方式[1].
在阅卷过程中, 提取试卷是必不可少的一环. 网上阅卷的工作原理是这样的: 将考生答题卡进行计算机图像扫描处理, 把答题卡的答题储存在计算机数据库里, 通过软件程序按各题作答区域分别切割成若干部分, 再将所有被切割成若干部分的同一道题的答卷组成一个题组数据库, 而后由计算机按规程将各题组数据随机生成发送给评卷教师个人计算机介面, 进行评分; 每一道答题均有2 个或2 个以上评卷教师进行评阅, 评分结果直接存入电脑. 2 位教师评卷给分在规定的允许误差内, 取2 给分之和的平均数为本题的得分; 若2 评分超过允许误差则本题再由计算机自动发送给第3 位教师评阅, 以至达到规定的允许误差之内. 最后将各题得分相加即为该科成绩[ 2 ]. 提卷功能要实现的就是把“由计算机按规程将各题组数据随机生成发送给评卷教师个人计算机介面”.
在大题库中提取试卷, 这一功能将贯穿整个阅卷过程, 同时它还是参与阅卷的每一位老师都要使用到的功能. 每位老师在阅卷时, 都会从装放他(她) 所被指定批阅试题的题库中随机的提取试卷. 然而, 网上阅卷不同于手工阅卷. 在手工阅卷时, 是批改完一份试卷, 那么待改的试卷就少一份, 一份试卷改没改过一眼就看得清清楚楚, 更不会存在2 个老师要同时改1 份卷子的情况. 但在网上阅卷中, 所有未批改的、已批改完的和正在被批改的试卷都放在同一个题库中, 并且提卷又是随机的, 而阅卷老师在提取试卷之前又看不到这份试卷的状态(即: 这份试卷是未批改过的、还是已批改完的或是正在被批改的). 针对试卷的3 种不同状态, 阅卷老师在提卷时就会遇到3 种情况:
(1) 提到的试卷是未批改过的, 那么就可直接提取出来批改;
(2) 提到的试卷已经批改过了, 那么就再重新提取另一份试卷;
(3) 提到的试卷已被锁定(即正在被别的老师批改) , 那么也得再重新提取另一份试卷.
老师在提卷时, 还必须满足一个前提, 就是他(她) 没有“曾经提卷未交”, 满足这一前提后,阅卷教师就可根据考生密码(KSMM )、科目代码(KMDM ) 以及试题代码(STDM ) 来提取试卷.
从理论上说, 本次考试有几个学生参加, 每个题组数据库中就应该有几道题. 每个阅卷老师都是被指定了批改某一道题的, 比如说,A ,B, C,D, E 这5 位老师被指定改第1 道题, 那么这5 位老师在提卷时就应该只从存放第1 道题的那个题组数据库中提卷. 同时, 阅卷老师在提取试卷时是随机的, 也就是说,批改同一道题的老师提取该题库中的任一道题的机会是均等的. 这样就存在一个问题: 存在1 个以上的老师同时提取同一份试卷的情况. 毫无疑问, 在阅卷过程中, 这是绝对不允许发生的. 为此, 我们采用O racle 的行锁定技术来解决这一问题.
数据库并行访问, 也就是2 个或2 以上用户同时访问同一数据, 这也是数据库引擎如何设计和实现适度反应所面临的最大问题. 设计优良、性能卓越的数据库引擎可以轻松地同时为成千上万的用户服务. 而“底气不足”的数据库系统随着更多的用户同时访问系统将大大降低其性能. 最糟糕的情况下甚至可能导致系统的崩溃[ 3 ].
并行访问出现问题存在若干种情况. 在最简单的情形下, 数量超过1 个的用户可能同时查询同一数据. 就这种情况而言数据库的操作目标很简单: 尽可能地为用户们提供快速的数据访问. 不过, 在用户修改数据的情况下并行访问问题就变得复杂起来了. 显然, 数据库通常只允许唯一用户1 次修改特定的数据. 当某一用户开始修改某块数据时,Oracle 能很快地锁定数据, 阻止其他用户对这块数据进行更新,直到修改该数据的第1 位用户完成其操作并提交交易(comm it t ran sact ion).
在Oracle 数据库系统中, 当程序到达它的正常终止点时, 它自动产生提交(Comm it) , 非正常结束时(如系统错误导致异常终止) 产生回滚(Ro llback). O racle 采用了日志机制来进行事务的提交和回滚管理, 在日志中包含了修改操作的细节, 包括操作前后的值. 提交时, 采用先写日志协议, 即提交时把事务的所有日志记录都先写入日志文件.
在单用户数据库系统中, 用户可以在一个事务中修改数据而可不必关心其他用户对该数据的同时修改, 但是, 在多用户数据库系统中, 必须考虑到用户之间的相互干扰, 系统必须保证并发执行的事务运行产生的效果等价于这些事务的某个串行执行系列.通常, 在大型数据库系统中, 为了保证数据的一致性, 在对数据库中的数据进行操作时, 系统会进行对数据相应的锁定.
这些锁定中有“只读锁”、“排它锁”、“共享排它锁”等多种类型, 而且每种类型又有“行级锁”(1 次锁住1 条记录) ,“页级锁”(1 次锁住1 页, 即数据库中存储记录的最小可分配单元) ,“表级锁”(锁住整个表).
若为“行级排它锁”, 则除被锁住的该行外, 该表中其它行均可被其它的用户进行修改(update) 或删除(delete) 操作, 若为“表级排它锁”, 则所有其它用户只能对该表进行查询( select) 操作, 而无法对其中的任何记录进行修改或删除. 当程序对所做的修改进行提交(comm it) 或回滚后( ro llback) 后, 锁住的资源便会得到释放, 从而允许其它用户进行操作.
但是, 有时由于程序中的原因, 锁住资源后长时间未对其工作进行提交; 或是由于用户的原因, 如调出需要修改的数据后, 未及时修改并提交, 而是放置于一旁; 或是由于客户服务器方式中客户端出现“死机”, 而服务器端却并未检测到, 从而造成锁定的资源未被及时释放, 影响到其它用户的操作.
在Oracle 中, 锁有以下几种模式:
0: none
1: nu ll 空
2: Row - S 行共享(RS) : 共享表锁
3: Row - X 行专用(RX) : 用于行的修改
4: Share 共享锁(S) : 阻止其他DML 操作
5: S?R ow - X 共享行专用(SRX) : 阻止其他事务操作
6: exclu sive 专用(X) : 独立访问使用数字越大锁级别越高, 影响的操作越多.
一般的查询语句如select?f rom ?; 是小于2 的锁, 有时会在v$locked- object 出现.
select?f rom ?fo r update; 是2 的锁.
当对话使用fo r update 子串打开一个游标时, 所有返回集中的数据行都将处于行级(Row 2X) 独占式锁定, 其他对象只能查询这些数据行, 不能进行update、delete 或select. . . fo r update 操作.
in sert ?update ?delete . . . ; 是3 的锁.
没有comm it 之前插入同样的一条记录会没有反应, 因为后一个3 的锁会一直等待上一个3 的锁,我们必须释放掉上1 个才能继续工作.
创建索引的时候也会产生3, 4 级别的锁.
locked- mode 为2, 3, 4 不影响DML ( in sert, delete, update, select) 操作, 但DDL (alter, drop 等) 操作会提示o ra200054 错误.
有主外键约束时update?d elete . . . ; 可能会产生4, 5 的锁.
DDL 语句时是6 的锁.
以DBA 角色, 查看当前数据库里锁的情况可以用如下SQL 语句:
select ob ject- id, session- id, locked- mode f rom v$locked- ob ject;
select t2. u sernam e, t2. sid, t2. serial# , t2. logon- t im e
f rom v$locked- ob ject t1, v$session t2
w here t1. session- id= t2. sid o rder by t2. logon- t im e;
如果有长期出现的一列, 可能是没有释放的锁.
可以用下面SQL 语句杀掉长期没有释放非正常的锁:
alter system k ill session ’sid, serial# ’;
如果出现了锁的问题, 某个DML 操作可能等待很久没有反应.
当你采用的是直接连接数据库的方式, 也不要用O S 系统命令$k ill p rocess- num 或者$k ill-9p rocess- num 来终止用户连接, 因为一个用户进程可能产生一个以上的锁, 杀O S 进程并不能彻底清除锁的问题.
记得在数据库级别用alter system k ill session ’sid, serial# ’; 杀掉不正常的锁.
那么, 在O racle 查询记录时如何给记录加锁呢? 实现方法如下:
利用SEL ECT 的FOR U PDA TE 子句实现
conn system?m anager
——创建实验用户
gran t connect, resou rce to test iden t if ied by test;
conn test?t est
——创建实验表1
create tab le a (a num ber) ;
in sert in to a values (1) ;
comm it;
select 3 f rom a fo r update;
或
select 3 f rom a fo r update of a. a; (a 表的a 列)
——新打开一个SQL 3 P lu s 窗口
conn test?t est ( test 用户上的第二个会话)
delete f rom a;
此时, 系统停顿状态, 等待解锁, 只要在第一个窗口发出ro ll; 或comm it; 命令, 即可解除锁定状态[ 4 ].
在本例中按如下的方法解决锁定查询问题:
select k smm , km dm , stdm , p jfz, bz in to v- k smm , v- km dm , v- stdm , v- p jfs, v- bz f rom ksstk
w here t rim (km dm ) ? ?T rim ( stdm ) in ( select T rim (km dm ) ? ? t rim ( stdm ) f rom p jfw
w here p jfz=v- PJFZ)
and DPLCDM = v- PJLC
and row num = 1
and ( p jztdm = ’01’ o r p jztdm is nu ll o r p jztdm = ’’)
fo r update now ait;
本文主要介绍了网上阅卷系统中提卷功能的实现, 并详细阐述了如何利用O racle 的“行锁定”技术解决数据库的并行访问问题. 通过O racle 行锁定技术的引入, 很好的解决了在网上阅卷过程中, 一名以上教师同时访问同一份试卷的情况, 扫平了提卷过程中存在的难点, 为网上阅卷工作的顺利进行奠定了基础.
参考文献:
[1 ] 唐佐明.“嫁接”、“移植”与网上阅卷[J ]. 中国考试(研究版) , 2004 (11) : 45246.
[2 ] 陈茂建. 浅析网上阅卷[J ]. 福建教育学院学报, 2002 (7) : 17219.
[3 ] 刘 彦, 陈隆道, 祁才君. 用三层C?S 结构实现电能质量数据库管理系统[J ]. 微型机与应用, 2002 (5) : 33234.
[4 ] 阳国贵, 满家巨. ORACL E 数据库管理与使用教程[M ]. 长沙: 国防科技大学出版社, 1998.
The implemen ta t ion of applytest funct ion in netv iew system
YE J ing
(Educat ion V aluat ion O ffice, GuangxiU niversity, N anning 530004,Ch ina)
Abstract: In the past few years, becau se of the rap id developm en t of netwo rk techno logy, compu tertechno logy and info rm at ion digit izat ion techno logy,N etview system is up to the ground. It w ill be the main st ream in the large2scale of exam inat ion fo r it s part icu lar advan tage. App lytest is very essen t ialin the w ho le p rocess. The test paper w ill be scaned and sto red in the compu ter database. Then App lytest funct ion w ill be u sed to send the test paper by p ro toco ls to the teacher’s ow n in terface.Th is paper m ain ly in t roduces how to ex t ract test paper f rom the test paper database by u sing O racle’s row locked techn ique.
Key words: netview; app lytest; o racle’s row locked techn ique; parallel accessing