首页 Oracle数据库优势说明

Oracle数据库优势说明

举报
开通vip

Oracle数据库优势说明Oracle数据库优势说明神州数码融信软件有限公司尊敬的德阳银行:我们的核心业务系统解决方案是以“客户为中心、以产品为导向”,致力于构建先进银行IT架构,覆盖“柜面、企业服务总线、核心系统、数据平台”等,方案结合了国际先进理念,能够满足国内商业银行的业务需求。神州数码的核心业务系统解决方案在国内有10个成功实施案例。神州数码向贵行业务和技术专家详细介绍了神州数码核心业务系统的系统功能、系统架构和实施理念。针对德阳银行的担心和疑虑,我们非常理解德阳银行的这种忧虑,为确保双方的有效沟通,我们的技术人员对相关问题进行整理...

Oracle数据库优势说明
Oracle数据库优势说明神州数码融信软件有限公司尊敬的德阳银行:我们的核心业务系统解决方案是以“客户为中心、以产品为导向”,致力于构建先进银行IT架构,覆盖“柜面、企业服务总线、核心系统、数据平台”等,方案结合了国际先进理念,能够满足国内商业银行的业务需求。神州数码的核心业务系统解决方案在国内有10个成功实施 案例 全员育人导师制案例信息技术应用案例心得信息技术教学案例综合实践活动案例我余额宝案例 。神州数码向贵行业务和技术专家详细介绍了神州数码核心业务系统的系统功能、系统架构和实施理念。针对德阳银行的担心和疑虑,我们非常理解德阳银行的这种忧虑,为确保双方的有效沟通,我们的技术人员对相关问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 进行整理,请查收。如果有问题,请不吝赐教。颂颂商祺!神州数码融信软件有限公司目录TOC\o"1-3"\h\z\u一、核心系统存储过程概述4二、核心系统存储过程的实现提高了性能51、处理模式对比-单笔交易情况52、处理模式对比-大批量并发交易情况6三、核心存储过程复杂业务的处理过程(卡折关联)81、代码说明:81)定义存储过程名字和变量82)存储过程数据变量的初始化和实例化93)业务逻辑处理104)过程结束处理155)卡折关联实现过程总结:15四、Oracle数据库日志处理框架机制171、 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 原则172、总体架构171)功能架构172)技术架构183、Forexample20五、Oracle开发调试首选工具—Toad211、SchemaBroswer212、SQLEditor223、ProcedureEditor234、PL/SQLDebugger245、CodeProfiling25六、Oracle数据库面向对象技术271、面向对象说明272、Forexample291)对象继承292)对象方法构造303)对象方法可以采用不同语言构造(PL/SQL或C或JAVA)311、核心系统存储过程概述数据库技术的发展到今天,已经不再只是存储、管理数据的载体,其发展趋势越来越广,对应用的支撑越来越强。神州数码的核心业务系统Ensemble完全采用Orcale数据库技术,充分利用数据库的优势,主要有以下几个方面的考虑:1、Orcale数据库是目前数据库业界(尤其是在金融行业),应用最为广泛、安全性最高、技术最为成熟的数据库系统。根据Oracle的数据表明,目前Orcale数据已经成为数据库市场最为领先的数据库系统。2、以PL/SQL为代表的数据库存储过程本质上已经是一种介于结构化和面向对象之间的高级语言了,因此在代码的编写、编译上没有过多的本质不同。在运行机制上通过对多条SQL操作的集约化处理,通过使用数据库内部的优化机制和执行策略,更能适应需要频繁访问数据库表的大型应用系统的要求。3、Ensemble充分利用了Oracele数据库底层的技术,确保核心业务系统能够高性能运行,避免了传统的外部程序频繁调用数据库导致的性能问题。4、Oracle技术在支持Java技术、SOA架构、面向对象等技术方面表现非常优秀和卓越。5、数据库单独部署、RAC技术,消息队列机制、日志管理机制、批处理机制等非常完善,为银行核心业务系统的核心处理机制提供了完整的支持。6、在便于备份管理、数据及应用恢复等方面,数据库优势越来越明显。数据库提供的灾难备份和容灾处理技术,也催生行业应用越来越集中在数据库端。2、核心系统存储过程的实现提高了性能核心业务系统用数据库存储过程实现,大大提高了系统的性能,我们以单笔交易处理情况和大批量并发交易情况为例说明一下用程序实现和用存储过程实现的区别和优劣:1、处理模式对比-单笔交易情况对比如下: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)由于存储过程自身拥有事务管理,并可以更细粒度管理资源锁,可以有效地避免脏读、脏写问题,提高效率,基本无需额外开发工作量。3、核心存储过程复杂业务的处理过程(卡折关联)存储过程编写的核心处理逻辑本质上和采用C/Java等高级语言编写的程序没有不同,这里举一个例子进行说明。1采用的语言PL/SQL2数据库Oracle3处理逻辑卡折关联。该过程用于将一个具有存折的无卡账户和一个卡户进行关联,形成一卡通下的存折户。该处理逻辑负责最终的数据提交处理,例如授权检查等等校验处理另有专门的存储过程负责。1、代码说明:1)定义存储过程名字和变量/******************************************************************************FunctionDescription:卡折关联Modificationlog:DateAuthorDescription--------------------------------------------------------------------xxxx/xx/xxxxx.xxxxx******************************************************************************/PROCEDUREcard_bankbook_associate(p_inputINSYS.ANYDATA,p_outINOUTSYS.ANYDATA,p_statusOUTVARCHAR2)ISv_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)存储过程数据变量的初始化和实例化BEGINcbsd_log.DEBUG('CARD_BANKBOOK_ASSOCIATEstart.....');/*获取输入数据*/v_ret_code:=p_input.getobject(v_input);v_ret_code:=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='01')THENv_new_status:='ACT';v_tran_desc:='卡折关联';/*获得AIO账户的内部标识*/BEGINSELECTmain_tbl_key,doc_typeINTOv_main_tbl_key,v_doc_typeFROMrb_aio_acctWHEREaio_acct_no=v_input.base_acct_no;EXCEPTIONWHENNO_DATA_FOUNDTHEN--无效帐户raise_application_error(-20000,'300395');END;IFv_doc_typeISNOTNULLTHENraise_application_error(-20000,'100054');ENDIF;--检查凭证信息(即存单信息)是否已经由此柜员领用BEGINSELECTstatusINTOv_statusFROMrb_voucher_rd_dtlrvWHERErv.voucher_no=v_input.voucher_noANDNVL(rv.prefix,'~')=NVL(v_input.prefix,'~')ANDrv.doc_type=v_input.doc_typeANDrv.officer_id=v_sys_head_i.user_id;EXCEPTIONWHENNO_DATA_FOUNDTHENraise_application_error(-20000,'340015');--凭证不存在END;IFv_status='NEW'--入库THEN--此柜员没有领用此存单raise_application_error(-20000,'306001');ELSIFv_status='ACT'--出售THENraise_application_error(-20000,'309906');ELSIFv_status='CAN'---作废THENraise_application_error(-20000,'303071');ELSIFv_status='USE'---使用THENraise_application_error(-20000,'309906');ELSIFv_status='VER'--口头挂失THENraise_application_error(-20000,'303074');ELSIFv_status='RET'---退回THENraise_application_error(-20000,'309906');ELSIFv_status='LCB'--丢失THENraise_application_error(-20000,'303074');ELSIFv_status='LCC'--挂失THENraise_application_error(-20000,'303074');ELSIFv_status='PEN'---待复核THENraise_application_error(-20000,'303071');ELSIFv_status='DES'--销毁THENraise_application_error(-20000,'309905');ELSIFv_status!='ASS'THENraise_application_error(-20000,'309906');ENDIF;/*只有状态是ASS:领用,才能继续*/--更新rb_voucher_rd_dtl表中凭证属性修改为已使用UPDATErb_voucher_rd_dtlrvSETinternal_key=v_main_tbl_key,rv.status='ACT',rv.new_status='ACT',rv.old_status=statusWHERErv.voucher_no=v_input.voucher_noANDNVL(rv.prefix,'~')=NVL(v_input.prefix,'~')ANDrv.doc_type=v_input.doc_typeANDrv.officer_id=v_sys_head_i.user_id;--关联账户与存折DOC_TYPE/PREFIX/PB_NOUPDATErb_aio_acctSETdoc_type=v_input.doc_type,prefix=v_input.prefix,pb_no=v_input.voucher_noWHEREaio_acct_no=v_input.base_acct_no;--修改RB_ACCT_ATTACH表UPDATErb_acct_attachSETdoc_type=v_input.doc_type,prefix=v_input.prefix,pb_no=v_input.voucher_no,withdrawal_type='P',pb_flag='Y'WHEREinternal_keyIN(SELECTinternal_keyFROMrb_acctWHEREmain_tbl_key=v_main_tbl_keyANDNVL(deposit_type,'~')<>'T');--修改RB_TRAN_HIST表UPDATErb_tran_histSETpbk_upd_flag='Y'WHEREinternal_keyIN(SELECTinternal_keyFROMrb_acctWHEREmain_tbl_key=v_main_tbl_keyANDNVL(deposit_type,'~')<>'T');--修改存折标识UPDATErb_acctSETstmt_pbk='P'WHEREmain_tbl_key=v_main_tbl_keyANDNVL(deposit_type,'~')<>'T';UPDATErb_base_acctSETwithdrawal_type='P'WHEREbase_acct_no=v_input.base_acct_no;--插入密码表IF(v_input.PASSWORDISNULL)THENraise_application_error(-20000,'300638');--密码不能为空ENDIF;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);ENDIF;--取消关联IF(v_input.option_kw='02')THENv_new_status:='CAN';v_tran_desc:='卡折关联取消';BEGINSELECTstatusINTOv_statusFROMrb_voucher_rd_dtlrvWHERErv.voucher_no=v_input.voucher_noANDNVL(rv.prefix,'~')=NVL(v_input.prefix,'~')ANDrv.doc_type=v_input.doc_type;EXCEPTIONWHENNO_DATA_FOUNDTHENraise_application_error(-20000,'340015');--凭证不存在END;BEGINSELECTmain_tbl_key,doc_typeINTOv_main_tbl_key,v_doc_typeFROMrb_aio_acctWHEREaio_acct_no=v_input.base_acct_noANDpb_no=v_input.voucher_noANDNVL(prefix,'~')=NVL(v_input.prefix,'~')ANDdoc_type=v_input.doc_type;EXCEPTIONWHENNO_DATA_FOUNDTHEN--关联不存在raise_application_error(-20000,'100107');END;UPDATErb_voucher_rd_dtlrvSETrv.internal_key=NULL,rv.old_status=rv.status,rv.status='CAN',rv.new_status='CAN'WHERErv.voucher_no=v_input.voucher_noANDNVL(rv.prefix,'~')=NVL(v_input.prefix,'~')ANDrv.doc_type=v_input.doc_type;UPDATErb_aio_acctSETdoc_type=NULL,prefix=NULL,pb_no=NULLWHEREaio_acct_no=v_input.base_acct_no;UPDATErb_acct_attachSETdoc_type=NULL,prefix=NULL,pb_no=NULL,withdrawal_type='S',pb_flag='N'WHEREinternal_keyIN(SELECTinternal_keyFROMrb_acctWHEREmain_tbl_key=v_main_tbl_keyANDNVL(deposit_type,'~')<>'T');--修改存折标识UPDATErb_acctSETstmt_pbk='S'WHEREmain_tbl_key=v_main_tbl_keyANDNVL(deposit_type,'~')<>'T';UPDATErb_base_acctSETwithdrawal_type='S'WHEREbase_acct_no=v_input.base_acct_no;DELETEFROMrb_passwordWHEREmain_tbl_key=v_main_tbl_key;ENDIF;--凭证状态变化记录rb_nof_voucher_rel.insert_vou_chq_hist(v_input.doc_type,v_input.voucher_no,NULL,NULL,'VOU',v_input.prefix,v_sys_head_i.branch_id,v_new_status,v_status,NULL,NULL,NULL,NULL,v_sys_head_i.user_id,get_run_date,v_tran_desc);上面是具体卡折关联的业务逻辑处理,主要内容是根据输入参数中的option_kw来决定不同的操作模式,包括01所代表的关联和02所代表的取消关联。这里涉及到了大量的数据处理和数据表操作,包括对凭证明细表、账户信息主表、账户信息辅表、凭证操作历史表等多张Sm@rtEnsemble内部和存款账户、卡、凭证、会计信息相关的数据表的操作,同时伴随着相关的数据处理。当过程执行当中出现异常时,系统通过EXCEPTION对其进行捕获,进行相关的特殊处理。在这一个存储过程当中,又调用了rb_nof_voucher_rel.insert_vou_chq_hist这么一个过程来完成更细节的业务处理(凭证操作登记薄等级),其调用方式和高级语言对函数或方法的使用基本一致。从这里看到,在一段业务处理逻辑当中,可能涉及大量的数据表交互操作。特别是一个大型的应用系统,可能有几百甚至几千张数据表存储了不同的业务数据,而每一个业务处理都可能需要同时操作其中若干张数据表。通过存储过程可以将这些离散的操作集成在一起,通过一次和数据库服务器的交互完成多张数据表的访问修改,大大提高了应用服务器和数据库服务器之间的交互效率。同时,当前的主流数据库都提供了介于结构性语言和面向对象语言之间的语法规则和处理机制,方便在存储过程内部直接进行数据的计算和处理,便于进行代码的编写。4)过程结束处理---设置成功返回结果cbsd_util.addsyshead('000000','Success',v_sys_head_o);---添加输出系统头v_out.setsyshead(v_sys_head_o);---生成输出报文p_out:=SYS.ANYDATA.convertobject(v_out);cbsd_log.info('EndedexecuteCARD_BANKBOOK_ASSOCIATE...');ENDcard_bankbook_associate;上面是整个过程处理完成后的输出对象实例化的处理。5)卡折关联实现过程总结:由上可以看出,以PL/SQL为代表的数据库存储过程本质上已经是一种介于结构化和面向对象之间的高级语言了,因此在代码的编写、编译上没有过多的本质不同。在运行机制上通过对多条SQL操作的集约化处理,通过使用数据库内部的优化机制和执行策略,更能适应需要频繁访问数据库表的大型应用系统的要求。4、Oracle数据库日志处理框架机制1、设计原则充分考虑日志信息的完整性,易于指导应用的跟踪和排错;模块层次化强,参数化程度高;最大程度减少对应用的性能损失;多方式的日志记录和多层次的日志记录级别,体现实用性特征;框架的设计使用应该具有高易用性。2、总体架构1)功能架构LFO的功能架构和分布如下图所示:功能说明:1)整个日志框架提供全面的日志记录接口,分别有8个主接口和6个辅助接口是:主接口:DEBUG信息接口:记录程序中的调试信息;INFO信息接口:记录程序中的提示信息;WARN信息接口:记录程序中的警告信息;ERROR信息接口:记录程序中的错误信息,包括出错的包/函数/过程位置和信息;FATAL信息接口:记录程序中的致命错误信息;判断信息接口:对判断表达式的结果进行记录,比如某个参数变量处于一定的值域范围内,但传入的参数超过范围,则需要记录,它的记录级别可以进行单独设置;执行全信息接口:记录程序中当前语句的调用堆栈信息;错误全信息接口:记录程序中错误的堆栈信息,方便定位错误;辅助接口:ISDEBUGENABLED接口:判断是否debug日志可被记录;ISINFOENABLED接口:判断是否info日志可被记录;ISWARNENABLED接口:判断是否warn日志可被记录;ISERRORENABLED接口:判断是否error日志可被记录;ISFATALENABLED接口:判断是否fatal日志可被记录;PURGE接口:根据日期清理历史日志记录;2)上述的接口调用过程中,是否记录日志,是通过参数进行设置的,框架提供两组参数设置:日志记录级别设置:提供不同用户设置它的日志记录级别,级别包括NONE、FATAL、ERROR、WARN、INFO、DEBUG、ALL等七种级别,同时还提供设置判断信息接口、执行全信息接口和错误全信息接口的输出日志级别,以控制它们的日志输出;日志记录方式设置:提供日志记录的不同方式,主要支持表记录、会话输出、数据库控制台输出、数据库文件输出以及支持LOG4J形式的日志输出控制。2)技术架构LFO的技术架构如下图所示:说明:1)整个日志框架分为两部分,一部分是数据库实现部分,主要是提供一些外部调用接口(供存储过程开发记录日志使用)以及内部参数控制的日志记录机制;另一部分是对log4j的支持组件,实现日志按log4j配置方式输出,这部分是java实现部分;2)外部调用接口包括:debug、info、warn、error、fatal、assert(判断信息接口)、full_call_stack(执行全信息接口)以及full_error_backtrace(错误全信息接口)八个主接口,另外还有5个级别判断接口isdebugenabled、isinfoenabled、iswarnenabled、iserrorenabled和isfatalenabled用户判断相应级别是否启用,一个清理接口purge用于清理历史数据(队列和表中的历史记录);3)外部调用主接口通过统一的日志调用接口loginterface写日志,loginterface获取当前登录的用户,然后根据用户设置的日志级别和日志方式控制日志输出,通过日志方式的各个具体实现接口将日志输出到相应的目的地。有6个日志实现接口:LOG4J:该接口实现log4j对外输出的工作,将日志输出到日志队列中,供外部log4j的支持组件捕获,然后按照log4j的配置将日志按照设定的格式输出到文件中;ALERT_LOG:实现将日志发送到数据库的文件接口,通过文件接口将日志写入alert文件中;TRACE_LOG:实现将日志发送到数据库的文件接口,通过文件接口将日志写入trace文件中;DBMS_OUTPUT:实现将日志发送的数据库控制台的标准输出窗口中;SESSION_OUT:实现将日志发送的数据库会话接口,通过会话接口将日志显示到会话信息中;TABLE_LOG:实现将日志记录在数据库表中。4)log4j支持组件主要实现监听日志队列,并将监听到的日志信息按照log4j配置文件的配置输出日志。3、Forexample5、Oracle开发调试首选工具—Toad神州数码的核心业务系统Ensemble采用数据库开发工具是Toad,其简单、方便、直观、易于调试。Quest软件公司的业界领先的开发工具Toad能够帮助开发新手提高工作效率;帮助有经验的开发人员拓宽职业技能。Toad的集成化开发环境中包含了存储过程编码、模式浏览、SQL编码等诸多功能可以在数据库应用开发的过程中提高工作效率。调试器,SQL优化,代码专家和通用管理等功能可以提高代码质量,提高系统性能。多线程编辑器允许用户同时编辑多个文件,支持的文件类型包括SQL,PL/SQL,HTML,Java和文本文件。SQL编辑器中提供热键支持,自动错误更正,输入侦测,语法高亮,版本控制和许多其它提高开发速度的小功能。支持多标签功能的存储过程编辑器可以与各种SCC兼容的版本控制程序结合,让多个开发者同时调试编译存储过程。简洁的多标签形式展示的模式浏览器可以让您快速的定位和管理数据库对象。SQLModeler让您在图形方式下快速建立复杂的多表查询SQL脚本。服务器和会话统计,包括计算统计和调优提示提供了快速查看服务器环境的能力。SQL调优功能,可以从SQL脚本文件,数据对象或数据库SGA区中收集低效的SQL语句。对这些SQL语句进行自动改写调优,输出高质量的SQL语句,降低系统响应时间,降低资源使用。为了帮助您全面的测试您的应用系统,Quest软件公司为您提供了BenchmarkFactory――一个负载测试解决方案,可以模拟真实环境下数以千计的用户访问你的应用系统的场景。提前获知应用系统上线后在过载情况下的应用表现,就可以在上线前定位并解决性能问题和伸缩性问题。另外,Quest软件还提供了一个测试数据生成工具――DataFactory,可以帮助开发和QA 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 师简单快速的向测试数据库中填充具有引用关系的表数据,以便进行测试。以下说明以下常用界面:1、SchemaBroswer模式浏览器(SchemaBrowser)可以快速访问数据字典,浏览数据库中的表、索引、存储过程。Toad提供对数据库的快速访问,使用极为方便,用户界面简洁,结构安排合理。当点击一个单独的数据库对象,Toad立即显示此对象的详细信息。例如,点一个数据库的表,所有和此表相关的索引、约束、存储过程、SQL语句、表中的数据以及和其他表的相互引用关系都在同一界面显示出来。所有针对数据库对象的操作都可以在SchemaBrowser一个窗口中进行。图SchemaBrowser以“MultiLineTab”方式显示所有数据库对象2、SQLEditorSQL编辑器(SQLEditor)的主要功能是编辑、运行和调整SQL语句。TOAD的高级编辑窗口包括众多的特性来提高开发人员编写SQL语句的产品化程度。例如,简单地生成代码模板,在编写SQL前自动发现包的内容和列的名字等等。SQL编辑器包括一个编辑窗口和运行结果窗口,允许开发人员在编辑的过程中测试运行结果。SQL编辑器中不仅包括标准的编辑命令,也包括一些增强的功能,如快速查询表中的字段、将SQL语句的内容格式化等等。这个窗口可以处理大到4GB的内容,对大的开发项目来说非常有用。便捷的 关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf 签可以让开发人员非常容易地找到相关位置。在运行结果窗口可提供用户定义的配置功能,支持LONG和LONGRAW列,可以将数据卸出到磁盘、打印数据、编辑数据等等。图在SQL编辑器中选择部分SQL代码片段进行执行3、ProcedureEditor存储过程编辑器(ProcedureEditor)的主要功能是编辑、编译、测试、调试存储过程和触发器。TOAD提供语法标识、错误标识和其他很多易于使用的功能,如在弹出窗口显示表名、列名和Oracle函数。和其他的PL/SQL编辑工具不同,TOAD允许在一个文件中操作多个数据库对象,可以编译一个对象、编译多个对象、编译到当前光标、从光标开始编译。在运行出现错误时,存储过程停止到有问题的语句。用户可以使用快捷方式或模板来快速编写PL/SQL,也可以根据需要生成自己的模板。使用Toad可以非常方便地进行编辑工作,可如设置书签、取消注释、格式化SQL语句等等。图:在存储过程编辑器中,准备将SQL片段调入SQLTunning中进行调优4、PL/SQLDebuggerToad提供强大易用的PL/SQL调试功能,可以节省开发人员在大型项目中用于开发和测试的宝贵时间,提高应用开发的质量。在存储过程开发的过程中,Toad可以逐行编辑、调试和运行代码。运行时可以根据需要输入参数,观察相关参数的变化来检查存储过程的正确性。在调式过程中,Toad可以通过窗口显示所有的断点、参数,调用堆栈和输出参数。使用Toad,非常容易检测到存储过程的错误,开发人员可以一步一步运行PL/SQL语句来识别问题。调试会话可以和其他程序会话同时进行。图:强大的Debug功能是调试SQL的利器5、CodeProfilingProfiler是ORACLEPL/SQL的一个调试优化跟踪方案。可以为每一行代码进行性能统计,以帮助评估SQL语句的性能问题时。因为不需要生成和读取服务器端的跟踪文件,所以分析也比较快速,缺点就是命令行的方式,不便于使用。CodeProfiling就是Toad对OracleProfiler技术的可视化包装,对SQL语句的跟踪统计,十分的直观与方便。图直观的CodeProfiler直观的展示每行的统计信息6、Oracle数据库面向对象技术1、面向对象说明在面向对象技术中,对象涉及到以下几个重要的特性:封装性  通过对数据和操作的封装,将用户关心的数据和操作暴露出来作为接口,其他数据和操作则隐藏到对象内部,这样便于用户使用和维护。继承性  对象具有继承性,通过这一特性可以增强程序的可扩展性,适合大型项目的开发。多态性  同一操作在运行时刻有不同的对象来引用,则其执行结果是不一样的。这一特性称之为多态性。  正是因为面向对象的诸多优势,Oracle公司在8.0版本以后就加入了对这一特性的全面支持,下来的部分重点讲述在Oracle中的面向对象程序设计。  Oracle中的对象定义分两步进行:  首先定义对象类型。定义对象类型跟定义包类型完全一样,即分为对象类型头(或称为对象规范,specification)和对象类型体(body)。对象类型头包括了对象类型的属性和方法的声明,而对象类型体则包含了对象类型具体的实现。  例如,定义一个empObj对象类型,代码如下:createorreplacetypeempObjasobject(emp_idnumber(5),emp_namevarchar2(20),emp_salarynumber(4),--object’sfunctionmemberfunctionaddsalary(ext_salarynumber)returnvarchar2,);--object'sbodycreateorreplacetypebodyempObjasmemberfunctionaddsalaryreturnvarchar2isbeginemp_salary:=emp_salary+ext_salary;returnto_char(emp_salary);endaddsalary;end;特别需要注意的是,如果对象没有成员函数部分,那么此对象类型的定义只有对象类型头部分。  然后定义对象实例。定义了对象类型后就可以直接定义它的实例了,比如定义一个empObj实例对象,代码如下:  v_empObj1empObj;  经过这两步之后就可以引用对象实例的属性和方法了,引用符号为“.”,比如v_empObj1.emp_id;//引用emp_id属性v_empObj1.addsalary(300);//引用addsalary方法  另外,在初始化无成员函数的对象时可以直接以构造函数的形式进行初始化,注意,这个时候不需显式的定义构造函数。比如,初始化上面v_empObj1对象(假设无成员函数的情况下才能进行这种初始化操作),代码如下:  v_empObj1empObj:=empObj(10005,’jack’,6500);  由于Oracle数据库是关系型数据库,其存储数据是以二维表的形式进行的,而对象是对数据和操作进行封装的一个实体,其存储信息往往是多维信息,那么对象在Oracle数据库中的存储是如何进行的呢?(这里补充一点,PL/SQL程序块中声明的对象是临时对象,在超出其作用区域后系统将自动收回其分配的资源,但是如果需要保存对象的信息,就必须将其存储在数据库中)  事实上,对象在Oracle数据库中的存储形式分为两种:  1.对象列。即可以将数据表中的列的数据类型定义为一个对象类型,这样对象就可以存储在数据列中了。比如定义一个表table1,其中emp列可以用来存储对象。createtabletable1(idnumber(2);empempObj;);  2.对象行。即可以创建一个对象表,其中每一列就表示对象中的一个属性,这样一条行记录就是一个对象了。比如定义一个emp表如下:createtableemp(emp_idnumber(5);emp_namevarchar2(20);emp_salarynumber(4););  这样emp表的一个记录就是一个empObj对象,插入一个表的操作就可以为:  insertintoempvalues(empObj(10006,'marry',5000));  注意,这里表中列类型与对象的属性类型应该一一对应,另外这样存储将忽略对象的成员函数的信息。2、Forexample1)对象继承2)对象方法构造3)对象方法可以采用不同语言构造(PL/SQL或C或JAVA)友情提示:本资料代表个人观点,如有帮助请下载,谢谢您的浏览!整理为word格式整理为word格式整理为word格式
本文档为【Oracle数据库优势说明】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
机构认证用户
夕夕资料
拥有专业强大的教研实力和完善的师资团队,专注为用户提供合同简历、论文写作、PPT设计、计划书、策划案、各类模板等,同时素材和资料部分来自网络,仅供参考.
格式:doc
大小:1MB
软件:Word
页数:0
分类:工学
上传时间:2021-03-25
浏览量:5