oracle数据库:开发成功的Oracle应用_笔记13
7.开放性
经常看到,人们选择艰难的道路还有一个原因。这还是与那种观点有关,我们总认为要不遗余力地追求开放性和数据库独立性。开发人员希望避免使用封闭的专有数据库特性,即使像存储过程或序列这样简单的特性也不敢用,因为使用这些专有特性会把他们锁定到某个数据库系统。
Oracle数据库提供了一个称为细粒度访问控制(fine-grained access control,FGAC)的特性。简而言之,这种技术允许开发人员把过程嵌入数据库中,向数据库提交查询时可以修改查询。这种查询修改可用于限制客户只能接收或修改某些行。过程在运行查询时能查看是谁在运行查询,他们从哪个终端运行查询,等等,然后能适当地约束对数据的访问。利用FGAC,可以保证以下安全性。
.某类用户在正常工作时间之外执行的查询将返回0条记录。
.如果终端在一个安全范围内,可以向其返回所有数据,但是远程客户终端只能得到不敏感的信息。
实质上讲,FGAC允许把访问控制放在数据库中,与数据“如影随形”。不论用户从bean、JSP、使用ODBC的Visual Basic应用,还是通过SQL*Plus访问数据,都会执行同样的安全协议。这样你就能很好的应对即将到来的下一种新技术。
人们总是不遗余力地去争取数据库独立性和完全的开放性,但我认为这是一个错误的决定。不管使用的是什么数据库,都应该充分地加以利用,把它的每一个功能都“挤出来”。
1.3.5怎么能让应用运行得更快
实际上,根据经验,80%以上的性能问题都出现在设计和实现级,而不是数据库级。在对数据库上运行的应用进行调优之前,先不要对数据库进行调优。
sys@ORCL>select /* TAG */ substr(username,1,1)
2 from all_users au1
3 where rownum=1;
SUBSTR(USERN
------------
S
sys@ORCL>alter session set cursor_sharing=force;
Session altered.
sys@ORCL>select /* TAG */ substr(username,1,1)
2 from all_users au2
3 where rownum=1;
SUBSTR(USERNAME,1,1)
----------------------------------------------------------------------------------------------------
S
sys@ORCL>select sql_text from v$sql where sql_text like 'select /* TAG */ %'
SQL_TEXT
----------------------------------------------------------------------------------------------------
select /* TAG */ substr(username,:"SYS_B_0",:"SYS_B_1") from all_users au2 where rownum=:"SYS_B_2"
select /* TAG */ substr(username,1,1) from all_users au1 where rownum=1
sys@ORCL>
游标共享会删除查询中的信息。它找到每一个字面量,包括这里使用的substr常量。它把这些直接量从查询中删除,并代之以绑定变量。SQL引擎再也不知道这个列是长度为1的子串,它的长度是不确定的。另外,可以看到where rownum=1现在也已经绑定。看上去似乎不错。不过,优化器把一个重要的信息也一并删除了。它不知道“这个查询将获取一行”;现在只认为“这个查询将返回前N行,而N可能是任何值”。这对你生成的查询计划有负作用。
另外,与解析和优化大量各不相同的查询相比,使用CURSOR_SHARING=FORCE会让运行速度更快,倘若开发人员确实在查询中使用了绑定变量,查询的速度就比使用游标共享要快。
一定要记住重点的一点,只打开CURSOR_SHARING=FORCE并不一定能解决问题。而且游标共享还可能带来新的问题。开发得很好的应用从不需要游标共享。从长远来看,要尽可能地使用绑定变量,而在需要时才使用常量,这才是正确的做法。
在整个开发阶段,都要把性能作为一个目标精心地设计,合理地构建,并且不断地测试。绝对不能把它当做马后炮,事后才想起来。为什么那么多人根本不对应用调优,就草率地把应用交付到客户手里,匆匆上马,并运行起来。见过一些应用除了主键索引外,居然没有其他的任何索引。查询从来没有执行过调优,也没有执行过压力测试。应用的用户数很少,从未让更多的用户试用过。这些应用总是把调优当成产品安装的一部分。对我来说,这种做法绝对不可接受。最终用户应该第一天就拿到一个响应迅速、充分优化的系统。
1.3.6DBA与开发人员的关系
有一点很肯定,要建立最成功的信息系统,前提是DBA与应用开发人员之间要有一种“共生关系”。
DBA最重大的职责是数据库恢复。这也是DBA唯一重要的职责。DBA要知道回滚(rollback)和重做(redo)怎么工作,不错,这也是开发人员要了解的。
DBA还要知道如何完成表空间时间点恢复,这一点开发人员不必介入。在数据库实例级调优,并得出最优的PGA_AGGREGATE_TARGET是什么,这一般是DBA的任务。也有一些例外情况,有时开发人员可能需要修改会话的某个设置,但是如果在数据库级修改设置,就要由DBA来负责。一般数据库并不是只支持一位开发人员的应用,而是运行着多个应用,因此只有支持所有应用的DBA才能做出正确的决定。
分配空间和管理文件也是DBA的工作。开发人员可能对分配的空间做出估计,但是余下的都是由DBA/SA决定。
基本上,开发人员不必知道如何运数据库,他们只需知道如何在数据库中运行。
http://www.52ij.com/jishu/5141.htmloracle数据库:开发成功的Oracle应用_笔记12
本文来源 我爱IT技术网 http://www.52ij.com/jishu/5142.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
