Oracle数据库优势说明文档格式.docx
- 文档编号:18234796
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:29
- 大小:722.86KB
Oracle数据库优势说明文档格式.docx
《Oracle数据库优势说明文档格式.docx》由会员分享,可在线阅读,更多相关《Oracle数据库优势说明文档格式.docx(29页珍藏版)》请在冰豆网上搜索。
对比如下:
1.采用应用程序处理业务逻辑即使在一次业务请求的情况下也会涉及到多次数据库调用。
缺点在:
a)将有大量时间占用数据库连接(等待下次调用或等待数据库返回),造成连接资源稀缺
b)多次数据库请求和返回造成多次网络开销,效率低。
c)需要在第一次调用前开启事务和在最后一次调用后关闭事务,事务管理复杂,忘记事务管理是编程过程中经常出现的错误,最后导致事务不一致。
2.采用MBSD框架下的存储过程处理业务逻辑,保证一次业务请求对应一次数据库请求,优点在:
a)一次业务请求对应一次数据库请求,极大减少应用和数据库之间的通讯,减少网络开销,效率高。
b)一次数据库请求无需占用数据库连接,提高数据库连接的使用效率
c)存储过程自身即带有事务管理支持,无需复杂事务管理,编程方便。
d)MBSD框架更在上述优点之上增加异步消息机制,更加降低对数据库连接的占用,同时提供了多队列的消息接收处理为下面将要讲到的大批量并发请求提供高性能支持。
2、处理模式对比-大批量并发交易情况
1.采用应用程序处理业务逻辑往往涉及多层次的性能问题,缺点如下:
a)大并发下出了需要解决应用程序级别的并发性能问题,还需要解决应用程序访问数据库的性能问题。
b)大并发下,应用程序对数据库的访问次数是N*N的级别,数据库访问量急剧增加,网络开销更加增大
c)大并发下,由于每笔交易都要占用一段时间数据库连接,在数据库连接这个资源有限的情况下,没有得到该资源的交易只有等待,增加交易处理时间
d)大并发下,即使在单独一笔交易已经解决的事务问题,很可能在并发情况下出现脏读,脏写问题(比方:
两个交易同时查询了同一数据,修改后在存入数据库)。
为了避免脏读,脏写需要额外的程序开发保证资源获取和资源锁管理,增加开发量也降低性能
2.采用MBSD框架下的存储过程处理业务逻辑处理大并发交易,优点如下:
a)大并发下,应用程序对数据库的访问次数是N的级别,因为每次业务请求只访问一次数据库,是线性增加,同时网络开销小。
b)大并发下,通过MBSD框架异步消息机制,每笔请求无需占用数据库连接,使得更多的请求能够用上数据库连接。
并发越大,体现的效能越高。
c)由于存储过程自身拥有事务管理,并可以更细粒度管理资源锁,可以有效地避免脏读、脏写问题,提高效率,基本无需额外开发工作量。
三、核心存储过程复杂业务的处理过程(卡折关联)
存储过程编写的核心处理逻辑本质上和采用C/Java等高级语言编写的程序没有不同,这里举一个例子进行说明。
1
采用的语言
PL/SQL
2
数据库
Oracle
3
处理逻辑
卡折关联。
该过程用于将一个具有存折的无卡账户和一个卡户进行关联,形成一卡通下的存折户。
该处理逻辑负责最终的数据提交处理,例如授权检查等等校验处理另有专门的存储过程负责。
1、代码说明:
1)定义存储过程名字和变量
/******************************************************************************
FunctionDescription:
卡折关联
Modificationlog:
DateAuthorDescription
--------------------------------------------------------------------
xxxx/xx/xxxxx.xxxxx
******************************************************************************/
PROCEDUREcard_bankbook_associate(
p_inputINSYS.ANYDATA,
p_outINOUTSYS.ANYDATA,
p_statusOUTVARCHAR2
)
IS
v_inputrb_passbook_i_t;
v_outrb_passbook_o_t;
v_ret_codeVARCHAR2(20);
v_sys_head_omsg_sys_header_o_t;
v_sys_head_imsg_sys_header_i_t;
v_internal_keyrb_acct.internal_key%TYPE;
v_main_tbl_keyrb_acct.main_tbl_key%TYPE;
v_doc_typerb_aio_acct.doc_type%TYPE;
v_statusrb_voucher_rd_dtl.status%TYPE;
v_dateDATE;
v_new_statusrb_voucher_rd_dtl.status%TYPE;
v_tran_descrb_vou_chq_change_hist.tran_desc%TYPE;
这里card_bankbook_associate代表了进行卡折关联的处理逻辑,它具有一个单纯的输入对象p_input用于在调用过程时将请求的输入参数传入过程,一个同时作为输入和输出对象p_out用于将存储过程处理过后的数据输出给调用者,同时返回一个用于表示过程执行成功与否的输出值p_status。
本质上,成为存储过程参数的数据等同于C/C++指针所指向的存储空间或者是C++/Java所描述对象。
在命名结束后,也需要针对过程内部所使用的变量进行申明,以便执行时分配相应的内存区以做数据交换,在PL/SQL的语法描述里就是IS以下的部分。
这些变量,可以是具体的数据库类型,也可以引申于用户自定义的数据对象,包括表、视图等等,也可以是结构、数组等复合类型。
从这里可以看出,在内存使用方式上,以PL/SQL为代表的高级关系数据库存储过程开发语言所体现出来的数据定义已经和高级语言没有本质上的不同了。
2)存储过程数据变量的初始化和实例化
BEGIN
cbsd_log.DEBUG('
CARD_BANKBOOK_ASSOCIATEstart.....'
);
/*获取输入数据*/
v_ret_code:
=p_input.getobject(v_input);
=p_out.getobject(v_out);
v_sys_head_o:
=v_out.getsyshead;
v_sys_head_i:
=v_input.getsyshead;
p_status:
='
000000'
;
v_date:
=rb_pwpb_maint.get_sysdate;
存储过程用于描述程序体的部分通常使用BEGIN......END进行划界,等同于高级语言“{”、“}”等分界符的使用。
由其包含的内容为程序具体的处理逻辑。
上面出现的cbsd_log.DEBUG是由Sm@rtEnsemble核心系统提供的标准日志函数,它所使用的日志处理方式是通过将代码中程序员事先编写进代码中的日志信息,输送到队列当中,然后会有专们的日志处理线程将这些不同等级的日志信息选择性的输出到日志文件当中以供技术人员备查。
这样做的好处是通过异步的方式将日志的记录和实际业务逻辑处理分离开,让日志的记录不影响业务的处理,减少系统IO相应,提高系统性能。
紧接着日志输出的是相关变量的初始化操作,可以看出,在PL/SQL当中,既有直接赋值的变量初始化方式,也有采用构造函数(例如p_input.getobject)这样的方式进行对象实例化的数据初始化方式。
目前的主流数据库存储过程都提供了加、减、乘、除、模、位移等运算符的操作,同时还提供了大量的工具包(以函数或对象方式使用)以支持复杂的数据运算和处理。
3)业务逻辑处理
IF(v_input.option_kw<
>
'
01'
ANDv_input.option_kw<
02'
)
THEN--无效的操作标识
raise_application_error(-20000,'
340237'
ENDIF;
--卡折关联
IF(v_input.option_kw='
THEN
v_new_status:
ACT'
v_tran_desc:
卡折关联'
/*获得AIO账户的内部标识*/
SELECTmain_tbl_key,doc_type
INTOv_main_tbl_key,v_doc_type
FROMrb_aio_acct
WHEREaio_acct_no=v_input.base_acct_no;
EXCEPTION
WHENNO_DATA_FOUND
THEN--无效帐户
300395'
END;
IFv_doc_typeISNOTNULL
100054'
--检查凭证信息(即存单信息)是否已经由此柜员领用
SELECTstatus
INTOv_status
FROMrb_voucher_rd_dtlrv
WHERErv.voucher_no=v_input.voucher_no
ANDNVL(rv.prefix,'
~'
)=NVL(v_input.prefix,'
ANDrv.doc_type=v_input.doc_type
ANDrv.officer_id=v_sys_head_i.user_id;
340015'
--凭证不存在
IFv_status='
NEW'
--入库
THEN--此柜员没有领用此存单
306001'
ELSIFv_status='
--出售
309906'
CAN'
---作废
303071'
USE'
---使用
VER'
--口头挂失
303074'
RET'
---退回
LCB'
--丢失
LCC'
--挂失
PEN'
---待复核
DES'
--销毁
309905'
ELSIFv_status!
ASS'
/*只有状态是ASS:
领用,才能继续*/
--更新rb_voucher_rd_dtl表中凭证属性修改为已使用
UPDATErb_voucher_rd_dtlrv
SETinternal_key=v_main_tbl_key,
rv.status='
rv.new_status='
rv.old_status=status
--关联账户与存折DOC_TYPE/PREFIX/PB_NO
UPDATErb_aio_acct
SETdoc_type=v_input.doc_type,
prefix=v_input.prefix,
pb_no=v_input.voucher_no
--修改RB_ACCT_ATTACH表
UPDATErb_acct_attach
pb_no=v_input.voucher_no,
withdrawal_type='
P'
pb_flag='
Y'
WHEREinternal_keyIN(
SELECTinternal_key
FROMrb_acct
WHEREmain_tbl_key=v_main_tbl_key
ANDNVL(deposit_type,'
)<
T'
--修改RB_TRAN_HIST表
UPDATErb_tran_hist
SETpbk_upd_flag='
--修改存折标识
UPDATErb_acct
SETstmt_pbk='
UPDATErb_base_acct
SETwithdrawal_type='
WHEREbase_acct_no=v_input.base_acct_no;
--插入密码表
IF(v_input.PASSWORDISNULL)
300638'
--密码不能为空
INSERTINTOrb_password
(acct_no,main_tbl_key,wd_pwd,
wd_pwd_status
VALUES(v_input.base_acct_no,v_main_tbl_key,v_input.PASSWORD,
A'
);
INSERTINTOrb_password_hist
(password_old,password_new,change_type,change_date,
time_stamp,change_reason,officer_id,
acct_no
VALUES(NULL,v_input.PASSWORD,'
CRE'
fm_util.v_run_date,
v_date,'
CREATION'
v_sys_head_i.user_id,
v_input.base_acct_no
--取消关联
卡折关联取消'
ANDrv.doc_type=v_input.doc_type;
WHEREaio_acct_no=v_input.base_acct_no
ANDpb_no=v_input.voucher_no
ANDNVL(prefix,'
ANDdoc_type=v_input.doc_type;
THEN--关联不存在
100107'
SETrv.internal_key=NULL,
rv.old_status=rv.status,
SETdoc_type=NULL,
prefix=NULL,
pb_no=NULL
pb_no=NULL,
S'
N'
DELETEFROMrb_password
WHEREmain_tbl_key=v_main_tbl_key;
--凭证状态变化记录
rb_nof_voucher_rel.insert_vou_chq_hist(v_input.doc_type,
v_in
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 数据库 优势 说明