Oracle数据库优势说明

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle数据库优势说明
神州数码融信软件有限公司
尊敬的德阳银行:
我们的核心业务系统解决方案是以“客户为中心、以产品为导向”,致力于构建先进银行IT架构,覆盖“柜面、企业服务总线、核心系统、数据平台”等,方案结合了国际先进理念,能够满足国内商业银行的业务需求。

神州数码的核心业务系统解决方案在国内有10个成功实施案例。

神州数码向贵行业务和技术专家详细介绍了神州数码核心业务系统的系统功能、系统架构和实施理念。

针对德阳银行的担心和疑虑,我们非常理解德阳银行的这种忧虑,为确保双方的有效沟通,我们的技术人员对相关问题进行整理,请查收。

如果有问题,请不吝赐教。

颂颂商祺!
神州数码融信软件有限公司
目录
一、核心系统存储过程概述 (4)
二、核心系统存储过程的实现提高了性能 (5)
1、处理模式对比-单笔交易情况 (5)
2、处理模式对比-大批量并发交易情况 (6)
三、核心存储过程复杂业务的处理过程(卡折关联) (8)
1、代码说明: (8)
1)定义存储过程名字和变量 (8)
2)存储过程数据变量的初始化和实例化 (9)
3)业务逻辑处理 (10)
4)过程结束处理 (15)
5)卡折关联实现过程总结: (16)
四、Oracle数据库日志处理框架机制 (17)
1、设计原则 (17)
2、总体架构 (17)
1)功能架构 (17)
2)技术架构 (18)
3、For example (20)
五、Oracle开发调试首选工具—Toad (21)
1、Schema Broswer (21)
2、 SQL Editor (22)
3、 Procedure Editor (23)
4、 PL/SQL Debugger (24)
5、 Code Profiling (25)
六、Oracle数据库面向对象技术 (27)
1、面向对象说明 (27)
2、 For example (30)
1)对象继承 (30)
2)对象方法构造 (30)
3)对象方法可以采用不同语言构造(PL/SQL或C或JAVA) (31)
一、核心系统存储过程概述
数据库技术的发展到今天,已经不再只是存储、管理数据的载体,其发展趋势越来越广,对应用的支撑越来越强。

神州数码的核心业务系统Ensemble完全采用Orcale数据库技术,充分利用数据库的优势,主要有以下几个方面的考虑:
1、Orcale数据库是目前数据库业界(尤其是在金融行业),应用最为广泛、安全性最
高、技术最为成熟的数据库系统。

根据Oracle的数据表明,目前Orcale数据已经
成为数据库市场最为领先的数据库系统。

2、以PL/SQL为代表的数据库存储过程本质上已经是一种介于结构化和面向对象之间
的高级语言了,因此在代码的编写、编译上没有过多的本质不同。

在运行机制上通
过对多条SQL操作的集约化处理,通过使用数据库内部的优化机制和执行策略,更
能适应需要频繁访问数据库表的大型应用系统的要求。

3、Ensemble充分利用了Oracele数据库底层的技术,确保核心业务系统能够高性能运
行,避免了传统的外部程序频繁调用数据库导致的性能问题。

4、Oracle技术在支持Java技术、SOA架构、面向对象等技术方面表现非常优秀和卓
越。

5、数据库单独部署、RAC技术,消息队列机制、日志管理机制、批处理机制等非常完
善,为银行核心业务系统的核心处理机制提供了完整的支持。

6、在便于备份管理、数据及应用恢复等方面,数据库优势越来越明显。

数据库提供的
灾难备份和容灾处理技术,也催生行业应用越来越集中在数据库端。

二、核心系统存储过程的实现提高了性能
核心业务系统用数据库存储过程实现,大大提高了系统的性能,我们以单笔交易处理情况和大批量并发交易情况为例说明一下用程序实现和用存储过程实现的区别和优劣:
1、处理模式对比-单笔交易情况 数据库
C/Java 应用程序
业务逻辑
数据库调用数据库数据库表/视图
一次业务请求MBSD 适配器框架(JAVA 应用程序)业务逻辑
一次业务请求
数据库表/视图数据库表/视图交易消息接收
交易消息发送接口
程序逻辑存储过程
数据库表/视图
应用程序处理业务逻辑存储过程处理业务逻辑
处理模式对比-单笔交易情况
多队列接收处理
对比如下:
1. 采用应用程序处理业务逻辑即使在一次业务请求的情况下也会涉及到多次数据库调用。

缺点在:
a) 将有大量时间占用数据库连接(等待下次调用或等待数据库返回),造成连接资源
稀缺
b) 多次数据库请求和返回造成多次网络开销,效率低。

c) 需要在第一次调用前开启事务和在最后一次调用后关闭事务,事务管理复杂,忘记
事务管理是编程过程中经常出现的错误,最后导致事务不一致。

2. 采用MBSD 框架下的存储过程处理业务逻辑,保证一次业务请求对应一次数据库请求,
优点在:
a) 一次业务请求对应一次数据库请求,极大减少应用和数据库之间的通讯,减少网络
开销,效率高。

b) 一次数据库请求无需占用数据库连接,提高数据库连接的使用效率
c) 存储过程自身即带有事务管理支持,无需复杂事务管理,编程方便。

d) MBSD 框架更在上述优点之上增加异步消息机制,更加降低对数据库连接的占用,
同时提供了多队列的消息接收处理为下面将要讲到的大批量并发请求提供高性能支持。

2、处理模式对比-大批量并发交易情况 数据库
C/Java 应用程序
业务逻辑
数据库调用数据库数据库表/视图
大批量并发业务请求MBSD 适配器框架(JAVA 应用程序)业务逻辑
大批量并发业务请求
数据库表/视图数据库表/视图交易消息接收
交易消息发送接口
程序逻辑存储过程
数据库表/视图
应用程序处理业务逻辑存储过程处理业务逻辑
处理模式对比-大批量并发交易情况
多队列接收处理
对比如下:
1. 采用应用程序处理业务逻辑往往涉及多层次的性能问题,缺点如下:
a) 大并发下出了需要解决应用程序级别的并发性能问题,还需要解决应用程序访问数
据库的性能问题。

b) 大并发下,应用程序对数据库的访问次数是N*N 的级别,数据库访问量急剧增加,
网络开销更加增大
c) 大并发下,由于每笔交易都要占用一段时间数据库连接,在数据库连接这个资源有
限的情况下,没有得到该资源的交易只有等待,增加交易处理时间
d)大并发下,即使在单独一笔交易已经解决的事务问题,很可能在并发情况下出现脏
读,脏写问题(比方:两个交易同时查询了同一数据,修改后在存入数据库)。


了避免脏读,脏写需要额外的程序开发保证资源获取和资源锁管理,增加开发量也
降低性能
2.采用MBSD框架下的存储过程处理业务逻辑处理大并发交易,优点如下:
a)大并发下,应用程序对数据库的访问次数是N的级别,因为每次业务请求只访问一
次数据库,是线性增加,同时网络开销小。

b)大并发下,通过MBSD框架异步消息机制,每笔请求无需占用数据库连接,使得更
多的请求能够用上数据库连接。

并发越大,体现的效能越高。

c)由于存储过程自身拥有事务管理,并可以更细粒度管理资源锁,可以有效地避免脏
读、脏写问题,提高效率,基本无需额外开发工作量。

三、核心存储过程复杂业务的处理过程(卡折关联)
存储过程编写的核心处理逻辑本质上和采用C/Java等高级语言编写的程序没有不同,这里举一个例子进行说明。

1、代码说明:
1)定义存储过程名字和变量
这里card_bankbook_associate代表了进行卡折关联的处理逻辑,它具有一个单纯的输入对象p_input用于在调用过程时将请求的输入参数传入过程,一个同时作为输入和输出对象p_out用于将存储过程处理过后的数据输出给调用者,同时返回一个用于表示过程执行成功与否的输出值p_status。

本质上,成为存储过程参数的数据等同于C/C++指针所指向的存储空间或者是C++/Java所描述对象。

在命名结束后,也需要针对过程内部所使用的变量进行申明,以便执行时分配相应的内存区以做数据交换,在PL/SQL的语法描述里就是IS以下的部分。

这些变量,可以是具体的数据库类型,也可以引申于用户自定义的数据对象,包括表、视图等等,也可以是结构、数组等复合类型。

从这里可以看出,在内存使用方式上,以PL/SQL为代表的高级关系数据库存储过程开发语言所体现出来的数据定义已经和高级语言没有本质上的不同了。

2)存储过程数据变量的初始化和实例化
存储过程用于描述程序体的部分通常使用BEGIN......END 进行划界,等同于高级语言“{”、“}”等分界符的使用。

由其包含的内容为程序具体的处理逻辑。

上面出现的cbsd_log.DEBUG是由Sm@rtEnsemble核心系统提供的标准日志函数,它所使用的日志处理方式是通过将代码中程序员事先编写进代码中的日志信息,输送到队列当中,然后会有专们的日志处理线程将这些不同等级的日志信息选择性的输出到日志文件当中以供技术人员备查。

这样做的好处是通过异步的方式将日志的记录和实际业务逻辑处理分离开,让日志的记录不影响业务的处理,减少系统IO相应,提高系统性能。

紧接着日志输出的是相关变量的初始化操作,可以看出,在PL/SQL当中,既有直接赋值的变量初始化方式,也有采用构造函数(例如 p_input.getobject )这样的方式进行对象实例化的数据初始化方式。

目前的主流数据库存储过程都提供了加、减、乘、除、模、位移等运算符的操作,同时还提供了大量的工具包(以函数或对象方式使用)以支持复杂的数
据运算和处理。

3)业务逻辑处理
上面是具体卡折关联的业务逻辑处理,主要内容是根据输入参数中的option_kw来决定不同的操作模式,包括01所代表的关联和02所代表的取消关联。

这里涉及到了大量的数据处理和数据表操作,包括对凭证明细表、账户信息主表、账户信息辅表、凭证操作历史表等多张Sm@rtEnsemble内部和存款账户、卡、凭证、会计信息相关的数据表的操作,同时伴随着相关的数据处理。

当过程执行当中出现异常时,系统通过EXCEPTION对其进行捕获,进行相关的特殊处理。

在这一个存储过程当中,又调用了rb_nof_voucher_rel.insert_vou_chq_hist这么一个过程来完成更细节的业务处理(凭证操作登记薄等级),其调用方式和高级语言对函数或方法的使用基本一致。

从这里看到,在一段业务处理逻辑当中,可能涉及大量的数据表交互操作。

特别是一个大型的应用系统,可能有几百甚至几千张数据表存储了不同的业务数据,而每一个业务处理都可能需要同时操作其中若干张数据表。

通过存储过程可以将这些离散的操作集成在一起,通过一次和数据库服务器的交互完成多张数据表的访问修改,大大提高了应用服务器和数据库服务器之间的交互效率。

同时,当前的主流数据库都提供了介于结构性语言和面向对象语言之间的语法规则和处理机制,方便在存储过程内部直接进行数据的计算和处理,便于进行代码的编写。

4)过程结束处理
上面是整个过程处理完成后的输出对象实例化的处理。

5)卡折关联实现过程总结:
由上可以看出,以PL/SQL为代表的数据库存储过程本质上已经是一种介于结构化和面向对象之间的高级语言了,因此在代码的编写、编译上没有过多的本质不同。

在运行机制上通过对多条SQL操作的集约化处理,通过使用数据库内部的优化机制和执行策略,更能适应需要频繁访问数据库表的大型应用系统的要求。

四、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、For example
五、Oracle开发调试首选工具—Toad
神州数码的核心业务系统Ensemble采用数据库开发工具是Toad,其简单、方便、直观、易于调试。

Quest 软件公司的业界领先的开发工具Toad 能够帮助开发新手提高工作效率;帮助有经验的开发人员拓宽职业技能。

Toad 的集成化开发环境中包含了存储过程编码、模式浏览、SQL 编码等诸多功能可以在数据库应用开发的过程中提高工作效率。

调试器,SQL 优化,代码专家和通用管理等功能可以提高代码质量,提高系统性能。

多线程编辑器允许用户同时编辑多个文件,支持的文件类型包括SQL,PL/SQL,HTML,Java 和文本文件。

SQL 编辑器中提供热键支持,自动错误更正,输入侦测,语法高亮,版本控制和许多其它提高开发速度的小功能。

支持多标签功能的存储过程编辑器可以与各种SCC 兼容的版本控制程序结合,让多个开发者同时调试编译存储过程。

简洁的多标签形式展示的模式浏览器可以让您快速的定位和管理数据库对象。

SQL Modeler 让您在图形方式下快速建立复杂的多表查询SQL 脚本。

服务器和会话统计,包括计算统计和调优提示提供了快速查看服务器环境的能力。

SQL 调优功能,可以从SQL 脚本文件,数据对象或数据库SGA 区中收集低效的SQL 语句。

对这些SQL 语句进行自动改写调优,输出高质量的SQL 语句,降低系统响应时间,降低资源使用。

为了帮助您全面的测试您的应用系统,Quest 软件公司为您提供了Benchmark Factory――一个负载测试解决方案,可以模拟真实环境下数以千计的用户访问你的应用系统的场景。

提前获知应用系统上线后在过载情况下的应用表现,就可以在上线前定位并解决性能问题和伸缩性问题。

另外,Quest 软件还提供了一个测试数据生成工具――Data Factory,可以帮助开发和QA 工程师简单快速的向测试数据库中填充具有引用关系的表数据,以便进行测试。

以下说明以下常用界面:
1、Schema Broswer
模式浏览器(Schema Browser)可以快速访问数据字典,浏览数据库中的表、索引、存储过程。

Toad 提供对数据库的快速访问,使用极为方便,用户界面简洁,结构安排合理。

当点击一个单独的数据库对象,Toad 立即显示此对象的详细信息。

例如,点一个数据库的表,所有和此表相关的索引、约束、存储过程、SQL 语句、表中的数据以及和其他表的相互引用关系都在同一界面显示出来。

所有针对数据库对象的操作都可以在Schema Browser 一个窗口中进行。

图 Schema Browser以“Multi Line Tab”方式显示所有数据库对象
2、 SQL Editor
SQL 编辑器(SQL Editor)的主要功能是编辑、运行和调整SQL 语句。

TOAD 的高级编辑窗口包括众多的特性来提高开发人员编写SQL 语句的产品化程度。

例如,简单地生成代码模板,在编写SQL 前自动发现包的内容和列的名字等等。

SQL 编辑器包括一个编辑窗口和运行结果窗口,允许开发人员在编辑的过程中测试运行结果。

SQL 编辑器中不仅包括标准的编辑命令,也包括一些增强的功能,如快速查询表中的字段、将SQL 语句的内容格式化等等。

这个窗口可以处理大到4GB 的内容,对大的开发项目来说非常有用。

便捷的书签可以让开发人员非常容易地找到相关位置。

在运行结果窗口可提供用户定义的配置功能,支持LONG 和
LONG RAW 列,可以将数据卸出到磁盘、打印数据、编辑数据等等。

图在 SQL 编辑器中选择部分SQL 代码片段进行执行
3、 Procedure Editor
存储过程编辑器(Procedure Editor)的主要功能是编辑、编译、测试、调试存储过程和触发器。

TOAD 提供语法标识、错误标识和其他很多易于使用的功能,如在弹出窗口显示表名、列名和Oracle 函数。

和其他的 PL/SQL 编辑工具不同,TOAD 允许在一个文件中操作多个数据库对象,可以编译一个对象、编译多个对象、编译到当前光标、从光标开始编译。

在运行出现错误时,存储过程停止到有问题的语句。

用户可以使用快捷方式或模板来快速编写PL/SQL,也可以根据需要生成自己的模板。

使用Toad 可以非常方便地进行编辑工作,可如设置书签、取消注释、格式化SQL 语句等等。

图:在存储过程编辑器中,准备将SQL 片段调入SQL Tunning 中进行调优
4、 PL/SQL Debugger
Toad 提供强大易用的PL/SQL 调试功能,可以节省开发人员在大型项目中用于开发和测试的宝贵时间,提高应用开发的质量。

在存储过程开发的过程中,Toad 可以逐行编辑、调试和运行代码。

运行时可以根据需要输入参数,观察相关参数的变化来检查存储过程的正确性。

在调式过程中,Toad 可以通过窗口显示所有的断点、参数, 调用堆栈和输出参数。

使用Toad,非常容易检测到存储过程的错误,开发人员可以一步一步运行PL/SQL 语句来识别
问题。

调试会话可以和其他程序会话同时进行。

图:强大的Debug 功能是调试SQL 的利器
5、 Code Profiling
Profiler 是ORACLE PL/SQL 的一个调试优化跟踪方案。

可以为每一行代码进行性能统计,以帮助评估SQL 语句的性能问题时。

因为不需要生成和读取服务器端的跟踪文件,所以分析也比较快速,缺点就是命令行的方式,不便于使用。

Code Profiling 就是Toad 对Oracle Profiler技术的可视化包装,对SQL 语句的跟踪统计,十分的直观与方便。

图直观的 Code Profiler 直观的展示每行的统计信息
六、Oracle数据库面向对象技术
1、面向对象说明
在面向对象技术中,对象涉及到以下几个重要的特性:
●封装性
通过对数据和操作的封装,将用户关心的数据和操作暴露出来作为接口,其他数据和操作则隐藏到对象内部,这样便于用户使用和维护。

●继承性
对象具有继承性,通过这一特性可以增强程序的可扩展性,适合大型项目的开发。

●多态性
同一操作在运行时刻有不同的对象来引用,则其执行结果是不一样的。

这一特性称之为多态性。

正是因为面向对象的诸多优势,Oracle公司在8.0版本以后就加入了对这一特性的全面支持,下来的部分重点讲述在Oracle中的面向对象程序设计。

Oracle中的对象定义分两步进行:
首先定义对象类型。

定义对象类型跟定义包类型完全一样,即分为对象类型头(或称为对象规范,specification)和对象类型体(body)。

对象类型头包括了对象类型的属性和方法的声明,而对象类型体则包含了对象类型具体的实现。

例如,定义一个empObj对象类型,代码如下:
create or replace type empObj as object (
emp_id number(5),
emp_name varchar2(20),
emp_salary number(4),
--object’s function
member function addsalary(ext_salary number) return varchar2,
);
--object's body
create or replace type body empObj as
member function addsalary
return varchar2 is
begin
emp_salary :=emp_salary +ext_salary ;
return to_char(emp_salary);
end addsalary;
end;
特别需要注意的是,如果对象没有成员函数部分,那么此对象类型的定义只有对象类型头部分。

然后定义对象实例。

定义了对象类型后就可以直接定义它的实例了,比如定义一个empObj实例对象,代码如下:
v_empObj1 empObj;
经过这两步之后就可以引用对象实例的属性和方法了,引用符号为“.”,比如
v_empObj1.emp_id; //引用emp_id属性
v_empObj1.addsalary(300); //引用addsalary方法
另外,在初始化无成员函数的对象时可以直接以构造函数的形式进行初始化,注意,这个时候不需显式的定义构造函数。

比如,初始化上面v_empObj1对象(假设无成员函数的情况下才能进行这种初始化操作), 代码如下:
v_empObj1 empObj:=empObj(10005,’jack’,6500);
由于Oracle数据库是关系型数据库,其存储数据是以二维表的形式进行的,而对象是对数据和操作进行封装的一个实体,其存储信息往往是多维信息,那么对象在Oracle数据库中的存储是如何进行的呢?(这里补充一点,PL/SQL程序块中声明的对象是临时对象,在超出其作用区域后系统将自动收回其分配的资源,但是如果需要保存对象的信息,就必须将其存储在数据库中)
事实上,对象在Oracle数据库中的存储形式分为两种:。

相关文档
最新文档