这是一位大师的讲oracle时的第一节课的课件,专门讲如何学习oracle
东台网站建设公司成都创新互联公司,东台网站设计制作,有大型网站制作公司丰富经验。已为东台成百上千家提供企业网站建设服务。企业网站搭建\外贸网站制作要多少钱,请找那个售后服务好的东台做网站的公司定做!
一、目前学习Oracle的两派人--------1.只是操作,2.学习理论深入了解
二、Oracle的重要性
三、学习前提
学习Oracle的前提是:熟悉Linux操作系统、Unix操作系统、存储、带库。主要是管理和操作系统原理
四、学习方法
1、sql、pl/sql(网上有很多的视频,可以做一个简单的入手,然后看几本书,多做实验)
作为oracle的基本功,需要大家对sql和plsql非常的熟悉。特别是sql里面的多表连接、子查询、各种新版本的函数,以及plsql里面的所有语法。建议大家拿出足够的时间来研究这两块。不要认为这是开发人员的工作,他也是DBA的重要工作,而且对DBA的要求更高,你不但能看懂,还要能够找出问题。学些这方面知识的要点就是:多练、多思考,多测试。
2、Oracle管理(体系结构)(这一块一定要听课,而且是要听“大师”的课、多讨论)
这是Oracle的难点,Orcle技术博大精深,主要的难点就集中在这里面。包括Oracle的存储管理、对象管理、内存和进程、undo管理、初始化参数、数据字典视图、安全、latch和lock、权限和角色、资源调度、闪回、日志原理等。
学习这一块知识的时候,一个重点是:要知道原理和“根”,知道表面的东西没有任何意义。
知道原理以后,通过实验去证明,将原理总结出来。
这一块学习的好还是不好,直接决定了以后的一个备份恢复、优化、排错。
这一块虽然是研究管理,但是更加注重原理和体系结构的分析和解剖。
应该叫做“深入剖析Oracle体系结构”,多深都需要。
在这一部分的学习中,已经学习了很多优化的内容,在学习任何一个知识点的时候,我们都离不开对性能的分析。
3、备份恢复(听听课、看几本书,多做做实验、多讨论)
有了第二部分的铺垫,这一章的学习相对有意思,前提是我们对Oracle的日志原理研究得较深,对oracle的内存和进程研究得较深。策划一个完美和正确的备份计划和实施方案(具体要分析出原理),实施备份;对各种损坏进行恢复(还是要能够够分析出原理);另外可以做一些高难度的恢复实验(还是老话、要能够分析出原理)。
4、优化(单实例优化)(还是要听课,最好听一些专题性的,深入讲解的专家课,还是要看一些经典的书籍,特别是英文书)
这一块完全是第一部分和第二部分的一个结合。这一块的学习没有最深,只有更深,学习方法和第二部分类似。
首先需要大家掌握一些Oracle的优化方面的基础知识,例如深入分析索引原理、分区、等待事件、时间统计模型、动态性能视图、操作系统的一些性能优化和查看命令,例如:top、iostat、vmstat、sar、pmap、prstat、filemon、nmon、svmon等。
最关键的还是要做三件事情:Oracle的动态性能视图、Oracle的报告(trace、statspack、awr、addm、ash)、执行计划;对这三块要熟悉和分析出来。这个部分的分析和动手实验很重要。
5、RAC(可以听听课,有了前面的基础以后,基本上自己就能看懂书了,因此,可以看书,也可以听一些专题课)
现在RAC的使用越来越多,学习RAC的重点还是:基础原理+RAC优化。
RAC系统的优化分为两个步骤:RAC系统优化和单实例优化;根据RAC的基础原理,能够设计高性能的RAC系统,能够分析RAC性能问题。对RAC的动态性能视图、等待事件、报告,能够看懂和分析。
6、GC、DG、Stream、Gold Gate等
对于这些工具和组件,我们熟悉其体系结构,原理,一些监控性能的工具等。
学习这些部分的几个点:熟悉体系结构、原理;搭建;监控(包括故障和性能);排错和优化。
7、SQL优化(看一本经典的英文书籍、多做实验、多实践、多分析)
为什么单独的拿出来呢?因为这部分需要持之以恒的进行研究和实验,而且工作中几乎是每天都要做的事情。
目前这方面,有一些比较经典的中文书,值得大家去看看。
8、PL/SQL深度学习
在这部分学习的时候,就要时时刻刻注意性能,主要是注意测试。
9、综合性项目实战:
模拟环境:
规划、搭建、测试、管理、排错、优化、分析
实战环境:
同上
Oracle的安全措施主要有三个方面,一是用户标识和鉴定;二是授权和检查机制;三是审计技术(是否使用审计技术可由用户灵活选择);除此之外,Oracle还允许用户通过触发器灵活定义自己的安全性措施。
一、用户标识和鉴定
在Oracle中,最外层的安全性措施是让用户标识自己的名字,然后由系统进行核实。Oracle允许用户重复标识三次,如果三次未通过,系统自动退出。
二、授权与检查机制
Oracle的权限包括系统权限和数据库对象的权限两类,采用非集中的授权机制,即DBA负责授予与回收系统权限,每个用户授予与回收自己创建的数据库对象的权限。
Oracle允许重复授权,即可将某一权限多次授予同一用户,系统不会出错。Oracle也允许无效回收,即用户没有某种权限,但回收此权限的操作仍算成功。
1. 系统权限
Oracle提供了80多种系统权限,如创建会话、创建表、创建视图、创建用户等。DBA在创建一个用户时需要将其中的一些权限授予该用户。
Oracle支持角色的概念。所谓角色就是一组系统权限的集合,目的在于简化权限管理。Oracle除允许DBA定义角色外,还提供了预定义的角色,如CONNECT,RESOURCE和DBA。
具有CONNECT角色的用户可以登录数据库,执行数据查询和操纵。即可以执行ALTER TABLE,CREATE VIEW,CREATE INDEX,DROP TABLE,DROP VIEW,DROP INDEX,GRANT,REVOKE,INSERT,SELECT,UPDATE,DELETE,AUDIT,NOAUDIT等操作。
RESOURCE角色可以创建表,即执行CREATE TABLE操作。创建表的用户将拥有对该表的所有权限。
DBA角色可以执行某些授权命令,创建表,对任何表的数据进行操纵。它涵盖了前两种角色,此外还可以执行一些管理操作,DBA角色拥有最高级别的权限。
例如DBA建立一用户U1后,欲将ALTER TABLE,CREATE VIEW,CREATE INDEX,DROP TABLE,DROP VIEW,DROP INDEX,GRANT,REVOKE,INSERT,SELECT,UPDATE,DELETE,AUDIT,NOAUDIT等系统权限授予U1,则可以只简单地将CONNECT角色授予U1即可:
GRANT CONNECT TO U1;
这样就可以省略十几条GRANT语句。
2. 数据库对象的权限
在Oracle中,可以授权的数据库对象包括基本表、视图、序列、同义词、存储过程、函数等,其中最重要的是基本表。
对于基本表Oracle支持三个级别的安全性:表级、行级和列级。
(1)表级安全性
表的创建者或者DBA可以把表级权限授予其他用户,表级权限包括:
ALTER:修改表定义
DELETE:删除表记录
INDEX:在表上建索引
INSERT:向表中插入数据记录
SELECT:查找表中记录
UPDATE:修改表中的数据
ALL:上述所有权限
表级授权使用GRANT和REVOKE语句。
(2)行级安全性
Oracle行级安全性由视图实现。用视图定义表的水平子集,限定用户在视图上的操作,就为表的行级提供了保护。视图上的授权与回收与表级完全相同。
例如,只允许用户U2查看Student表中信息系学生的数据,则首先创建信息系学生的视图S_IS,然后将该视图的SELECT权限授予U2用户。
由于ORACLE数据库产品是当前数据库技术的典型代表,她的产品除了数据库系统外,还有应用系统、开发工具等。刚接触Oracle的人员都有这样的感觉:Oracle的产品太多,每个产品内容精深,不知道从哪儿开始学才好。为了用少量时间更好地理解和使用oracle 数据库系统,有必要对oracle的一些基本术语及概念进行了解,下面给出一些在管理中经常用到的概念和术语,供初学者快速了解Oracle数据库系统提供方便。
§1.1 ORACLE7和ORACLE8
ORACLE7是一种完全的关系数据库系统,它不支持面向对象。
ORACLE8 则是一个引入面向对象的数据库系统,它既非纯的面向对象的数据库也非纯的关系数据库,它是两者的结合,因此叫做“对象关系数据库”。
§1.2 ORACLE8 特点
ORACLE8 于 1997年6月正式发布,它包括了几乎所有的数据库技术,因此被认为是未来企业级主选数据库之一。主要有以下特点:
1.对象/关系模型
ORACLE8对于对象模型采取较为现实和谨慎的态度,使用了对象/关系模型,即在完全支持传统关系模型的基础上,为对象机制提供了有限的支持。ORACLE8不仅能够处理传统的表结构信息,而且能够管理由C++,Smalltalk 以及其它开发工具生成的多媒体数据类型,如文本,视频,图形,空间对向等。这种做法允许现有软件开发产品与工具软件及ORACLE8应用软件共存,保护了客户的投资。
2.数据库服务器系统的动态可伸缩性
ORACLE8引入了连接存储池(connection polling)和多路复用(multiplexing)机制,提供了对大型对象的支持。当需要支持一些特殊数据类型时,用户可以创建软件插件(catridge )来实现。ORACLE8采用了高级网络技术,提高共享池和连接管理器来提高系统的可括性,容量可从几 GB 到 几百 TB 字节,可允许10万用户同时并行访问,ORACLE 的数据库中每个表可以容纳 1000列,能满足目前数据库及数据仓库应用的需要。
ORACLE 公司称,ORACLE8可以支持达 512PB的数据量。但目前还未有哪一家用户的数据库的数据量达到这个数量。下面是几种常用数据量的等价关系:
1MB = 1024 KB
1GB = 1Gigabyte Byte = 1024 MB
1TB = 1TeraByte = 1024 GB = 1024*1024MB
1PB = 1PeraByte = 1024 TB = 1024 * 1024 * 1024 MB
1EB = 1ExaByte = 1024 PB = 1024 * 1024 *1024 *1024 MB
3.系统的可用性和易用性
ORACLE8提供了灵活多样的数据分区功能,一个分区可以是一个大型表,也可以是索引易于管理的小块,可以根据数据的取值分区。有效地提高了系统操作能力及数据可用性 ,减少I/O 瓶颈。ORACLE8还对并行处理进行了改进,在位图索引,查询,排序,连接和一般索引扫描等操作引入并行处理,提高了单个查询的并行度。ORACLE8通过并行服务器(Parallel Server Option )来提高系统的可用性。
4.系统的可管理性和数据安全功能
ORACLE8提供了自动备份和恢复功能,改进了对大规模和更加细化的分布式操作系统的支持,如加强了SQL 操作复制的并行性。为了帮助客户有效地管理整个数据库和应用系统,ORACLE还提供了企业管理系统(ORACLE Enterprise Manager),数据库管理员可以从一个集中控制台拖放式图形用户界面管理ORACLE的系统环境。
ORACLE8通过安全服务器中提供的安全服务,加强了ORACLE Web Server 中原有的用户验证和用户管理。
5.面向网络计算
ORACLE8i在 与JAVA VM 及 CORBA ORB 集成后,将成为NCA(网络计算机体结构)的核心部件。NCA是ORACLE 关于分布式对象与网络计算机的战略规划。ORACLE8 对NCA产生了巨大影响,简化了应用软件的化分,推动了瘦型客户机及Web 应用软件的发展。在ORACLE8 FOR NT 中还提共了新产品Web 发布助理(Web Publishing Assistant ORACLE),提供了一种在WORD WIDE WEB 上发布数据库信息的简便,有效的方法。
6.对多平台的支持与开放性
网络结构往往含有多个平台,ORACLE8 可以运行于目前所有主流平台上,如
SUN Solarise, Sequent Dynix/PTX,Intel Nt,HP_UX,DEC_UNIX,IBM AIX 和 SP等。ORACLE8 的异构服务为同其它数据源以及使用SQL 和PL/SQL的服务进行通讯提供了必要的基础设施。ORACLE8 继续至力于对开放标准规范SQL3,JDBC,JSQL和CORBA 的支持。
§1.3 ORACLE8和ORACLE8i
当 ORACLE 8 第一次发行时,它提供了优于 ORACLE 7 的性能和选件,但是它基本是ORACLE7 的引擎。 在ORACLE8 的后来版本中不断作过多次的完善,出现 ORACLE 8.0.X 版本。然而1998年初发行(推出)的 ORACLE 8I 可以被看作是 ORACLE 8 的功能扩展集。
由于ORACLE 8I 比 ORACLE 8 提供了更多的功能,它除了共同的RDBMS功能外,还提供了许多与INTERNET 有关的能力,最重要的是它将 JAVA 集成为一种内部的数据语言,这种语言可充当或替代品,而且它还集成了一个WEB服务器和开发平台(Web DB )。对ORACLE 8.0.x 来说只到 ORACLE 8.0.5 版本就终止了,接着就推出了 ORACLE8i 8.1.5版本,ORACLE8i 8.1.5版本也经常被称为Release 1;而ORACLE8i 8.1.6版本被称为Release 2;ORACLE8i 8.1.7版本被称为Release 3。
§1.4 ORACLE8i和ORACLE9i
在正式进入21世纪前的2000年年底,ORACLE公司正式发布了ORACLE 9i 新数据库系统。原先预料可能会有ORACLE 8i V8.1.8等版本,但ORACLE8i版本只推出8.1.7就被Oracle9i所代替。ORACLE公司和其它的软件公司一样,为了抢占市场,不再愿意在原来版本上再作更多的改进和优化工作,而是直接的推出新产品这样一种策略。ORACLE9i 与ORACLE8i 比较,ORACLE 9i 主要包括下面三大部分:
l 数据库核心(Database )
l 应用服务器(Application Server )
l 开发工具集(Developer Suite )
Oracle9i 主要焦点(Oracle9i Focus ):
l 电子商务智能化( E-Business Intelligence )
l 应用开发( Applications Development )
l 应用主机( Applications Hosting )
l 门户与内容( Portals and Content )
l 电子商务连续性( E-Business Continuity )
Oracle9i 为了结合 Internet 市场设计。Oracle9i适合并胜任市场上所有的苛刻要求。
l Oracle9I实时应用( Oracle9i Real Application)
l Oracle9I高可用性(Oracle9i High Availability)
l Oracle9I 系统管理( Oracle9i Systems Management )
l Oracle9I 安全( Oracle9i Security)
Oracle9i 数据库服务(Oracle9i Database Services):
l 商业智能与数据仓库( Business Intelligence and Data Warehousing)
l Oracle9I动态服务( Oracle9i Dynamic Services)
l Oracle9I JAVA 和XML(Oracle9i Java and XML)
l 电子商务集成( E-Business Integration )
§1.5 ORACLE OAS和ORACLE iAS
目前的ORACLE公司的iAS 的早期版本是 ORACLE Web Server ,后来第4版改名为ORACLE APPLICATION SERVER ,2000年底前又改名为 ORACLE9i Internet Application Server(ORACLE iAS)。目前的iAS可以与ORACLE8i 或ORACLE9i 结合在一起的综合开发工具。为创建和部署任何基于网络的应用程序提供了一个完整的Internet 平台,iAS包括了门户、事务应用、商业智能工具、无线上网应用和企业集成等。
Oracle Internet Application Server 提供了行业中最全面的中间层产品,包括通信、表示、商业逻辑、数据缓存和系统服务等。
1.通信服务:
基于Apache 的ORACLE HTTP Server,主要包括下面模块:
mod_jserv:将对servlet 的HTTP请求分发到Oracle iAS 的Servlet 引擎。
Mod_perl:将perl 程序的HTTP 请求分发到Apache Web Server 的Perl Interpreter。
Mod_ssl:提供基于SSL证书的公共密钥,它被用来在客户端和Apache Server 之间进行加密通信。
Mod_plsql:Oracle 专用模块,用来将HTTP请求传到数据库内的PL/SQL和Java存储过程。
2. 表示服务
提供下面方法进行内容表示:
Oracle portal(Oracle 门户)
Apache Jserver (Apache Java 服务器)
Perl Interpreter( Perl 解释程序 )
Oracle JavaServer Pager(JSP)
Oracle PL/SQL Server Pages(PSP)
3.商业逻辑服务
可提供以下服务组件:
Oracle8i JVM( Java 虚拟机)
Oracle8i PL/SQL
Java 商业组件(BC4J)
Form Service
Report Service
Discoverer Viewer
4.数据管理服务
Oracle 8i cache
5.系统服务
Oracle Enterprise Manager(Oracle 企业管理器)
Oracle Advanced Security (Oracle 高级安全性)
Developer's KITS(开发工具),包括:
l Oracle database client developer's Kit
l Oracle XML developer's Kit(XDK)
l Oracle LDAP developer's Kit
§1.6 ORACLE Application R11i
Oracle 公司除了提供完美的数据库系统外,也提供完整的解决方案的套件,即全套应用系统,通常称作 Oracle Application R11i。它是一全面集成的电子商务套件。它包括:
1.数据仓库平台
l Oracle 8i 企业级数据库服务器
l Oracle Warehouse Builder(数据仓库构造器)
2.商业智能工具集
l Oracle Discoverer
l Oracle Express产品系列
l Oracle darwin
3.Oracle 金融服务应用
l 绩效管理
l 客户关系管理
l 风险管理
4.ORACLE财务系统
基于Internet 的财务管理系统包括下面模块:
l 商业智能管理
l 预算管理
l 合并管理
l 现金预测管理
l 员工费用管理
l Oracle 财务分析系统
l Oracle 项目管理系统
l 工作流程管理
l 预警系统
§1.7 ORACLE 服务器组件
l 过程组件
可以用于建立过程、触发器(封装),这些代码可以存放在数据库服务器中。Oracle,Sybase,Informix,Sql Server 都把这些所谓存储过程存放在数据库内,而DB2则把这些所谓存储过程存放在服务器的另外一个专门分区内。
l 分布选件
可以支持多台服务器(在不同的地方)间的通信,即每个服务器上均有Oracle系统,而分布选件就是把这些不同的地方的数据库系统管理起来的部件。
l 并行选件
对一台具有多个CPU的机器能进行并行查询、充分利用计算机的性能。
l 并行服务器
对于多台机器(有自己的处理器)共同访问同一个硬盘这样的结构进行管理,为用户提供很高的容错性。当某台机器出现故障时,可以安排用户使用(登录)到另一台机器上。当两台都出现故障时,则整个系统都不能使用。
l 图象选件
可以存储、管理和提供实时的,全屏幕的图象和高质量的声音给网络上的用户。
l 企业管理器
Oracle 提供一个帮助用户管理系统,应用网络和数据库工具“Oracle企业管理器(OEM)”.
l 空间数据选件(Spatial data option)
空间数据选件是一种存储和检索数据的新方法,在查询中系统根据所关心的数据进行组织,因此,数据库性能的主要决定因素是所感兴趣的数据库集的大小。
l 上下文选件
是一种文本管理方案,它把非结构化的文本数据管理如同结构化一样。可以建立和开展基于文本的带有类似SQL接口的应用。这种方法只有 ORACLE8 及以后版本能支持。
l Web服务器
可以通过WWW来访问Oracle数据库中的数据。
l OLAP选件
联机分析处理,Oracle提供Oracle Express作为联机分析处理。
§1.8 目前ORACLE8i 的主要产品
(Oracle9i产品在最后一天介绍)
l SQL*Plus
Oracle的SQL*Plus是标准SQL的一个超集,它除提供符合SQL标准的语句外,还提供一些Oracle特定的外加语句,set,column,Ttitle等。
l Oralce Forms
Oracle Forms的前身是SQL*Forms。SQL*Forms和Oracle Forms都是为用户提供输入、查询、修改等功能的开发工具,前者是在字符终端上运行。后者是在图形终端上运行。Oracle Forms除了在许多触发器及功能键继承前者外,大部分的设计界面都发生了变化。
SQL*Forms不含Menu功能,Menu专门为一个产品叫SQL*Menu;而Oracle Forms 把Menu,Library 等融为一体,使功能更强大。
l Oracle Reports
Oracle Reports的先前版本是SQL*Reportwriter,自从Oracle7以后,将其发展为能支持Windows界面的开发工具,在最新版本中,它可以访问其他主要数据库,如Sybase, Informix, DB2 ,Microsoft SQL Server等。
l Oracle Book
Oracle Book提供一个共享Oracle产品文本的联机文档生成与浏览工具。
l Oracle Loader
Oracle Loader早期就提供一个ODL(Oracle data Loader)数据加载工具。该工具可以把多种格式的文本数据加载到Oracle表中。后来的版本更名为SQL*Loader,现在叫Oracle Loader,目前版本可以把多媒体数据加载到数据库系统中。
l Developer/2000 和 Oracle Developer
是一个综合产品的总称,它包括:
l Oracle Reports
l Oracle Forms
l Oracle Graphics
l Procedure Builder
四个部件,它的先前名称叫CDE产品(即协同开发环境),现在Oracle的开发工具叫Oracle Developer。
l ORACLE Designer(Designer /2000)
ORACLE Designer 的前身是 Designer/2000,而Designer/2000的前身是SQL*Case,它是一个数据库Case工具(计算机辅助设计工具),它目前版本包含:
Business Process Reengineering
Modellers
Generators
l Personal Oracle
95年后,Oracle 提供了可以在Dos,Windows3.x,Windows95,Windows NT 等不同的单机版,它的基本使用方法完全同工作组版和企业版一样。
l SQL*Net和Net 8
SQL*Net和Net 8都提供在网络下的访问Oracle数据库的产品。SQL*Net 分为SQL*Net V1 和SQL*Net V2。SQL*Net V1主要支持字符终端方式,如Dos,终端服务器方式;SQL*Net V2.x主要支持图形终端与Oracle的连接,而Net 8则是Oracle 8网络产品SQL*Net V2.x的升级版。
l Oracle Jdeveloper
Oracle 最新产品,它是一个具有高效生产力的3GL编程工具,它可以使编程人员在Java中嵌入SQL语句,编写能访问数据库的Java程序。
l Oracle Express
可以在线分析处理的工具,利用它可以方便地进行各种数据分析。
l PRO*C, PRO*COBOL, PRO*FORTRAN等
可以提供与3GL接口的工具,利用它可以在高级语言中嵌入 SQL语句,从而达到访问Oracle数据库的目的。
l 财务软件( ORACLE Financials )
ORACLE Financials 是 ORACLE APPLICATION 中用于财务管理的应用程序模块。包括财务会计,管理会计。
l 供应链与制造应用软件
包括:
l 销售定单管理
l 供应商管理
l 新产品工程设计管理
l 物料管理
l 成本管理
l 质量管理
Sql性能非常差的时候,oracle提供了SQL_TRACE来跟踪sql的执行情况。
注:分析sql的方式比较多,还有根据优化器、sql执行计划来分析。
SQL_TRACE能够将sql执行的过程输出到一个trace文件里面。
首先设置自己定义的trace文件的标识方便查找。
alter session set tracefile_identifier='mytest';
然后对当前会话启动SQL_TRACE,最好不要一直打开该开关,代价比较大。
alter session set sql_trace=true;
然后我们执行一条sql语句。
最后关闭该开关的状态。
alter session set sql_trace=false;
我们可以从目录%ORACLE_BASE%/diag/rdbms/orcl/orcl/trace(11g版本的路径,如果是10g的应该不一样)中
找到自己定义的trace文件。
原始的trace文件的可读性不高,我们一般使用oracle自带的工具,tkprof来处理这个trace文件。我们可以查看tkprof的帮助。
tkprof orcl_ora_3820_mytest.trc out.txt
我们来看刚才生成的trace文件,头部信息描述了tkprof 的版本以及报告中一些列的含义,对于任何一条sql语句,都应该包含Parse—sql分析阶段,Execute—sql执行阶段,Fetch—数据提取阶段,横向的列如图所示,包含消耗cpu时间0.00秒,操作总耗时0.04秒,物理读取了0个数据块,没有发生current方式的读取(一般在update会发生),一共提取记录1条。
Misses in library cache during parse: 0表示这是一次软分析(关于硬分析和软分析下面会接着谈到)
Optimizer mode: ALL_ROWS表示oracle的优化器模式为ALL_ROWS。这也就是前面提到的另外的分析方式优化器。
下面是sql执行的具体计划,可以看到执行计划选择的是全表扫描。
经过处理以后的trace文件的确比较容易看明白,它有助于我们分析sql的性能问题。
下面我通过一个trace实例来解释一下,为什么OLTP系统中需要变量绑定机制。
当用户和数据库建立连接,并发送一条sql语句以后,oracle会对该sql进行hash函数运算(hash算法提供了一种快速存取数据的方法,它用一种算法建立键值与真实值之间的对应关系,每一个真实值只能有一个键值,但是一个键值可以对应多个真实值,以方便存取),得到一个hash值,然后到共享池中寻找是否有匹配的hash值的sql存在,如果有,就直接使用该sql的执行计划去执行sql。如果没有,oracle就会认为这是一条新的sql语句,然后按照语法分析,语义分析,生成执行计划,执行sql这些步骤来执行最终把结果返回给用户。这些步骤也被成为硬分析,可以想象,如果减少硬分析,能够大大降低数据库花费在sql解析上的资源开销。
我们先执行一条sql 1000次,比较绑定变量和不绑定变量的差异。得到结果以后,要计算实际的消耗,我们需要把OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS以及OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS的时间累计起来,前者表示数据字典表的相关的信息,包含权限控制等,后者表示sql所衍生出的递归sql语句的信息。可以看到绑定变量的,整条语句执行时间为0.22+0.02=0.24秒,CPU时间0.18+0.03=0.21秒,分析次数3次,执行次数1003次。而不绑定变量的时候,整条语句执行时间为0.28+1.29=1.57秒,CPU时间0.31+1.26=1.57秒,分析次数1002次,执行次数1003次。可见绑定变量的确能够带来更低的开销。(如何设计数据库中使用绑定变量也是和系统息息相关的,很多数据库问题都是在设计以后就已经存在的)
应用级调优分析:
就通常所说的三层架构来说,中间件这一层能够起到一个缓冲池的作用,如果并发用户数到3000这个数量级的时候,中间件能够控制不是所有的用户都能直接连接到数据库,当然这里的程序会快速响应用户请求,保证缓冲池的队列等待不会很久。
对应用这一级别的调优,主要集中在app程序,中间件的监控,集群配置等方面。如果是发现应用级别的问题,首先要分析是配置问题,还是程序本身的问题。如果并发用户数很大,中间件的线程池最大值配置过小,会导致在请求队列堆积,表现就是线程监控视图中,请求的队列堆积比较多,一般可以调整线程池最大值来解决。我们来看看weblogic的监控视图。
考虑到如果为每一个请求都创建一个新线程来处理的话,那么我们难以在系统中实现足够数量的线程。不受限制的创建线程可能耗尽系统资源,因此引入了线程池。线程池的思想是在进程开始时创建一定数量的线程并将它们置入一个池(pool)中,线程在这个池中等待工作。当服务器接收到一个请求时,它就从池中唤醒一个线程(如果有可用的线程),由它来处理请求。一旦线程服务完毕,它就返回线程池等待后面的工作。
线程池利用已存在的线程服务请求要比等待创建一个线程要快,并且线程池限制了线程的数量。
如果怀疑是程序的问题,我们一般可以通过java自带的工具来帮助分析,工具很多。这里我主要提到一个jdk1.6以后附带的jvisualvm。
我们打开jdk1.6,找到并运行jvisualvm.exe。
我们发现应用程序分为本地,远程两部分。本地包含本地运行的java进程,远程能够通过配置连接到远程服务器上的java进程。我们先启动一个tomcat。可以看到本地应用程序已经打开了一个带有tomcat以及进程标识id的菜单。双击打开。这里我们一般关心2个视图。监视、线程。
其中监视视图比较关心垃圾回收活动(顾名思义,回收那些在程序里面不再使用到的内存空间),堆内存变化。如果在压力测试过程中,堆内存变化是一个逐渐上涨的趋势,并且经过多次手动gc回收,还是保持这个趋势,说明内存泄漏的可能性很大。如果猜测有内存泄漏,可以通过分析java的heap dump。JVM (java虚拟机)记录下问题发生时系统的运行状态并将其存储在转储(dump)文件中。Heap dump就是这样一种文件形式。
线程视图比较关心线程的当前执行状态,这里可以生成另一种转储文件 Java dump。Java dump,也叫做 Thread dump,是 JVM 故障诊断中最重要的转储文件之一。JVM 的许多问题都可以使用这个文件进行诊断,其中比较典型的包括线程阻塞,CPU 使用率过高,JVM Crash,堆内存不足,和类装载等问题。其中线程阻塞更加常见。
原文转自:
-- 首先,以超级管理员的身份登录oracle
sqlplus sys/bjsxt as sysdba
--然后,解除对scott用户的锁
alter user scott account unlock;
--那么这个用户名就能使用了。
--(默认全局数据库名orcl)
1、select ename, sal * 12 from emp; --计算年薪
2、select 2*3 from dual; --计算一个比较纯的数据用dual表
3、select sysdate from dual; --查看当前的系统时间
4、select ename, sal*12 anuual_sal from emp; --给搜索字段更改名称(双引号 keepFormat 别名有特殊字符,要加双引号)。
5、--任何含有空值的数学表达式,最后的计算结果都是空值。
6、select ename||sal from emp; --(将sal的查询结果转化为字符串,与ename连接到一起,相当于Java中的字符串连接)
7、select ename||'afasjkj' from emp; --字符串的连接
8、select distinct deptno from emp; --消除deptno字段重复的值
9、select distinct deptno , job from emp; --将与这两个字段都重复的值去掉
10、select * from emp where deptno=10; --(条件过滤查询)
11、select * from emp where empno 10; --大于 过滤判断
12、select * from emp where empno 10 --不等于 过滤判断
13、select * from emp where ename 'cba'; --字符串比较,实际上比较的是每个字符的AscII值,与在Java中字符串的比较是一样的
14、select ename, sal from emp where sal between 800 and 1500; --(between and过滤,包含800 1500)
15、select ename, sal, comm from emp where comm is null; --(选择comm字段为null的数据)
16、select ename, sal, comm from emp where comm is not null; --(选择comm字段不为null的数据)
17、select ename, sal, comm from emp where sal in (800, 1500,2000); --(in 表范围)
18、select ename, sal, hiredate from emp where hiredate '02-2月-1981'; --(只能按照规定的格式写)
19、select ename, sal from emp where deptno =10 or sal 1000;
20、select ename, sal from emp where deptno =10 and sal 1000;
21、select ename, sal, comm from emp where sal not in (800, 1500,2000); --(可以对in指定的条件进行取反)
22、select ename from emp where ename like '%ALL%'; --(模糊查询)
23、select ename from emp where ename like '_A%'; --(取第二个字母是A的所有字段)
24、select ename from emp where ename like '%/%%'; --(用转义字符/查询字段中本身就带%字段的)
25、select ename from emp where ename like '%$%%' escape '$'; --(用转义字符/查询字段中本身就带%字段的)
26、select * from dept order by deptno desc; (使用order by desc字段 对数据进行降序排列 默认为升序asc);
27、select * from dept where deptno 10 order by deptno asc; --(我们可以将过滤以后的数据再进行排序)
28、select ename, sal, deptno from emp order by deptno asc, ename desc; --(按照多个字段排序 首先按照deptno升序排列,当detpno相同时,内部再按照ename的降序排列)
29、select lower(ename) from emp; --(函数lower() 将ename搜索出来后全部转化为小写);
30、select ename from emp where lower(ename) like '_a%'; --(首先将所搜索字段转化为小写,然后判断第二个字母是不是a)
31、select substr(ename, 2, 3) from emp; --(使用函数substr() 将搜素出来的ename字段从第二个字母开始截,一共截3个字符)
32、select chr(65) from dual; --(函数chr() 将数字转化为AscII中相对应的字符)
33、select ascii('A') from dual; --(函数ascii()与32中的chr()函数是相反的 将相应的字符转化为相应的Ascii编码) )
34、select round(23.232) from dual; --(函数round() 进行四舍五入操作)
35、select round(23.232, 2) from dual; --(四舍五入后保留的小数位数 0 个位 -1 十位)
36、select to_char(sal, '$99,999.9999')from emp; --(加$符号加入千位分隔符,保留四位小数,没有的补零)
37、select to_char(sal, 'L99,999.9999')from emp; --(L 将货币转化为本地币种此处将显示¥人民币)
38、select to_char(sal, 'L00,000.0000')from emp; --(补零位数不一样,可到数据库执行查看)
39、select to_char(hiredate, 'yyyy-MM-DD HH:MI:SS') from emp; --(改变日期默认的显示格式)
40、select to_char(sysdate, 'yyyy-MM-DD HH:MI:SS') from dual; --(用12小时制显示当前的系统时间)
41、select to_char(sysdate, 'yyyy-MM-DD HH24:MI:SS') from dual; --(用24小时制显示当前的系统时间)
42、select ename, hiredate from emp where hiredate to_date('1981-2-20 12:24:45','YYYY-MM-DD HH24:MI:SS'); --(函数to-date 查询公司在所给时间以后入职的人员)
43、select sal from emp where sal to_number('$1,250.00', '$9,999.99'); --(函数to_number()求出这种薪水里带有特殊符号的)
44、select ename, sal*12 + nvl(comm,0) from emp; --(函数nvl() 求出员工的"年薪 + 提成(或奖金)问题")
45、select max(sal) from emp; -- (函数max() 求出emp表中sal字段的最大值)
46、select min(sal) from emp; -- (函数max() 求出emp表中sal字段的最小值)
47、select avg(sal) from emp; --(avg()求平均薪水);
48、select to_char(avg(sal), '999999.99') from emp; --(将求出来的平均薪水只保留2位小数)
49、select round(avg(sal), 2) from emp; --(将平均薪水四舍五入到小数点后2位)
50、select sum(sal) from emp; --(求出每个月要支付的总薪水)
------------------------/组函数(共5个):将多个条件组合到一起最后只产生一个数据------min() max() avg() sum() count()----------------------------/
51、select count(*) from emp; --求出表中一共有多少条记录
52、select count(*) from emp where deptno=10; --再要求一共有多少条记录的时候,还可以在后面跟上限定条件
53、select count(distinct deptno) from emp; --统计部门编号前提是去掉重复的值
------------------------聚组函数group by() --------------------------------------
54、select deptno, avg(sal) from emp group by deptno; --按照deptno分组,查看每个部门的平均工资
55、select max(sal) from emp group by deptno, job; --分组的时候,还可以按照多个字段进行分组,两个字段不相同的为一组
56、select ename from emp where sal = (select max(sal) from emp); --求出
57、select deptno, max(sal) from emp group by deptno; --搜素这个部门中薪水最高的的值
--------------------------------------------------having函数对于group by函数的过滤 不能用where--------------------------------------
58、select deptno, avg(sal) from emp group by deptno having avg(sal) 2000; (order by )--求出每个部门的平均值,并且要 2000
59、select avg(sal) from emp where sal 1200 group by deptno having avg(sal) 1500 order by avg(sal) desc;--求出sal1200的平均值按照deptno分组,平均值要1500最后按照sal的倒序排列
60、select ename,sal from emp where sal (select avg(sal) from emp); --求那些人的薪水是在平均薪水之上的。
61、select ename, sal from emp join (select max(sal) max_sal ,deptno from emp group by deptno) t on (emp.sal = t.max_sal and emp.deptno=t.deptno); --查询每个部门中工资最高的那个人
------------------------------/等值连接--------------------------------------
62、select e1.ename, e2.ename from emp e1, emp e2 where e1.mgr = e2.empno; --自连接,把一张表当成两张表来用
63、select ename, dname from emp, dept; --92年语法 两张表的连接 笛卡尔积。
64、select ename, dname from emp cross join dept; --99年语法 两张表的连接用cross join
65、select ename, dname from emp, dept where emp.deptno = dept.deptno; -- 92年语法 表连接 + 条件连接
66、select ename, dname from emp join dept on(emp.deptno = dept.deptno); -- 新语法
67、select ename,dname from emp join dept using(deptno); --与66题的写法是一样的,但是不推荐使用using : 假设条件太多
--------------------------------------/非等值连接------------------------------------------/
68、select ename,grade from emp e join salgrade s on(e.sal between s.losal and s.hisal); --两张表的连接 此种写法比用where更清晰
69、select ename, dname, grade from emp e
join dept d on(e.deptno = d.deptno)
join salgrade s on (e.sal between s.losal and s.hisal)
where ename not like '_A%'; --三张表的连接
70、select e1.ename, e2.ename from emp e1 join emp e2 on(e1.mgr = e2.empno); --自连接第二种写法,同62
71、select e1.ename, e2.ename from emp e1 left join emp e2 on(e1.mgr = e2.empno); --左外连接 把左边没有满足条件的数据也取出来
72、select ename, dname from emp e right join dept d on(e.deptno = d.deptno); --右外连接
73、select deptno, avg_sal, grade from (select deptno, avg(sal) avg_sal from emp group by deptno) t join salgrade s on (t.avg_sal between s.losal and s.hisal);--求每个部门平均薪水的等级
74、select ename from emp where empno in (select mgr from emp); -- 在表中搜索那些人是经理
75、select sal from emp where sal not in(select distinct e1.sal from emp e1 join emp e2 on(e1.sal e2.sal)); -- 面试题 不用组函数max()求薪水的最大值
76、select deptno, max_sal from
(select avg(sal) max_sal,deptno from emp group by deptno)
where max_sal =
(select max(max_sal) from
(select avg(sal) max_sal,deptno from emp group by deptno)
);--求平均薪水最高的部门名称和编号。
77、select t1.deptno, grade, avg_sal from
(select deptno, grade, avg_sal from
(select deptno, avg(sal) avg_sal from emp group by deptno) t
join salgrade s on(t.avg_sal between s.losal and s.hisal)
) t1
join dept on (t1.deptno = dept.deptno)
where t1.grade =
(
select min(grade) from
(select deptno, grade, avg_sal from
(select deptno, avg(sal) avg_sal from emp group by deptno) t
join salgrade s on(t.avg_sal between s.losal and s.hisal)
)
)--求平均薪水等级最低的部门的名称 哈哈 确实比较麻烦
78、create view v$_dept_avg_sal_info as
select deptno, grade, avg_sal from
(select deptno, avg(sal) avg_sal from emp group by deptno) t
join salgrade s on(t.avg_sal between s.losal and s.hisal);
--视图的创建,一般以v$开头,但不是固定的
79、select t1.deptno, grade, avg_sal from v$_dept_avg_sal_info t1
join dept on (t1.deptno = dept.deptno)
where t1.grade =
(
select min(grade) from
v$_dept_avg_sal_info t1
)
)--求平均薪水等级最低的部门的名称 用视图,能简单一些,相当于Java中方法的封装
80、---创建视图出现权限不足时候的解决办法:
conn sys/admin as sysdba;
--显示:连接成功 Connected
grant create table, create view to scott;
-- 显示: 授权成功 Grant succeeded
81、-------求比普通员工最高薪水还要高的经理人的名称 -------
select ename, sal from emp where empno in
(select distinct mgr from emp where mgr is not null)
and sal
(
select max(sal) from emp where empno not in
(select distinct mgr from emp where mgr is not null)
)
82、---面试题:比较效率
select * from emp where deptno = 10 and ename like '%A%';--好,将过滤力度大的放在前面
select * from emp where ename like '%A%' and deptno = 10;
83、-----表的备份
create table dept2 as select * from dept;
84、-----插入数据
insert into dept2 values(50,'game','beijing');
----只对某个字段插入数据
insert into dept2(deptno,dname) values(60,'game2');
85、-----将一个表中的数据完全插入另一个表中(表结构必须一样)
insert into dept2 select * from dept;
86、-----求前五名员工的编号和名称(使用虚字段rownum 只能使用 或 = 要使用 必须使用子查询)
select empno,ename from emp where rownum = 5;
86、----求10名雇员以后的雇员名称--------
select ename from (select rownum r,ename from emp) where r 10;
87、----求薪水最高的前5个人的薪水和名字---------
select ename, sal from (select ename, sal from emp order by sal desc) where rownum =5;
数据库安全性问题一直是围绕着数据库管理员的恶梦,数据库数据的丢失
以及数据库被非法用户的侵入使得数据库管理员身心疲惫不堪。本文围绕数据
库的安全性问题提出了一些安全性策略,希望对数据库管理员有所帮助,不再
夜夜恶梦。数据库安全性问题应包括两个部分:
一、数据库数据的安全
它应能确保当数据库系统DownTime时,当数据库数据存储媒体被破
坏时以及当数据库用户误操作时,数据库数据信息不至于丢失。
二、数据库系统不被非法用户侵入
它应尽可能地堵住潜在的各种漏洞,防止非法用户利用它们侵入数据
库系统。
对于数据库数据的安全问题,数据库管理员可以参考有关系统双机
热备份功能以及数据库的备份和恢复的资料。
以下就数据库系统不被非法用户侵入这个问题作进一步的阐述。
组和安全性:
在操作系统下建立用户组也是保证数据库安全性的一种有效方法。
Oracle程序为了安全性目的一般分为两类:一类所有的用户都可执行,
另一类只DBA可执行。在Unix环境下组设置的配置文件是/etc/group,
关于这个文件如何配置,请参阅Unix的有关手册,以下是保证安全性的
几种方法:
(1) 在安装Oracle Server前,创建数据库管理员组(DBA)而且
分配root和Oracle软件拥有者的用户ID给这个组。DBA能执
行的程序只有710权限。在安装过程中SQL*DBA系统权限命令
被自动分配给DBA组。
(2) 允许一部分Unix用户有限制地访问Oracle服务器系统,增加
一个由授权用户组的Oracle组,确保给Oracle服务器实用例
程Oracle组ID,公用的可执行程序,比如SQL*Plus,SQL*Fo
rms等,应该可被这组执行,然后该这个实用例程的权限为
710,它将允许同组的用户执行,而其他用户不能。
(3) 改那些不会影响数据库安全性的程序的权限为711。
注:在我们的系统中为了安装和调试的方便,Oracle数据库中
的两个具有DBA权限的用户Sys和System的缺省密码是manager。
为了您数据库系统的安全,我们强烈建议您该掉这两个用户的
密码,具体操作如下:
在SQL*DBA下键入:
alter user sys indentified by password;
alter user system indentified by password;
其中password为您为用户设置的密码。
Oracle服务器实用例程的安全性:
以下是保护Oracle服务器不被非法用户使用的几条建议:
(1) 确保$ORACLE_HOME/bin目录下的所有程序的拥有权归Oracle
软件拥有者所有;
(2) 给所有用户实用便程(sqiplus,sqiforms,exp,imp等)711权
限,使服务器上所有的用户都可访问Oracle服务器;
(3) 给所有的DBA实用例程(比如SQL*DBA)700权限。Oracle服务器
和Unix组当访问本地的服务器时,您可以通过在操作系统下把
Oracle服务器的角色映射到Unix的组的方式来使用Unix管理服
务器的安全性,这种方法适应于本地访问。
在Unix中指定Oracle服务器角色的格式如下:
ora_sid_role[_dla]
其中
sid 是您Oracle数据库的oracle_sid;
role 是Oracle服务器中角色的名字;
d (可选)表示这个角色是缺省值;
a (可选)表示这个角色带有WITH ADMIN选项,
您只可以把这个角色授予其他角色,不能是其他用户。
以下是在/etc/group文件中设置的例子:
ora_test_osoper_d:NONE:1:jim,narry,scott
ora_test_osdba_a:NONE:3:pat
ora_test_role1:NONE:4:bob,jane,tom,mary,jim
bin: NONE:5:root,oracle,dba
root:NONE:7:root
词组“ora_test_osoper_d”表示组的名字;词组“NONE”表示这
个组的密码;数字1表示这个组的ID;接下来的是这个组的成员。前两
行是Oracle服务器角色的例子,使用test作为sid,osoper和osdba作
为Oracle服务器角色的名字。osoper是分配给用户的缺省角色,osdba
带有WITH ADMIN选项。为了使这些数据库角色起作用,您必须shutdown
您的数据库系统,设置Oracle数据库参数文件initORACLE_SID.ora中
os_roles参数为True,然后重新启动您的数据库。如果您想让这些角色
有connect internal权限,运行orapwd为这些角色设置密码。当您尝
试connect internal时,您键入的密码表示了角色所对应的权限。
SQL*DBA命令的安全性:
如果您没有SQL*PLUS应用程序,您也可以使用SQL*DBA作SQL查权
限相关的命令只能分配给Oracle软件拥有者和DBA组的用户,因为这些
命令被授予了特殊的系统权限。
(1) startup
(2) shutdown
(3) connect internal
数据库文件的安全性:
Oracle软件的拥有者应该这些数据库文件
($ORACLE_HOME/dbs/*.dbf)设置这些文件的使用权限为0600:文件的
拥有者可读可写,同组的和其他组的用户没有写的权限。
Oracle软件的拥有者应该拥有包含数据库文件的目录,为了增加
安全性,建议收回同组和其他组用户对这些文件的可读权限。
网络安全性:
当处理网络安全性时,以下是额外要考虑的几个问题。
(1) 在网络上使用密码
在网上的远端用户可以通过加密或不加密方式键入密码,
当您用不加密方式键入密码时,您的密码很有可能被非法用
户截获,导致破坏了系统的安全性。
(2) 网络上的DBA权限控制
您可以通过下列两种方式对网络上的DBA权限进行控制:
A 设置成拒绝远程DBA访问;
B 通过orapwd给DBA设置特殊的密码。
建立安全性策略:
系统安全性策略
(1) 管理数据库用户
数据库用户是访问Oracle数据库信息的途径,因此,
应该很好地维护管理数据库用户的安全性。按照数据库系统
的大小和管理数据库用户所需的工作量,数据库安全性管理
者可能只是拥有create,alter,或drop数据库用户的一个
特殊用户,或者是拥有这些权限的一组用户,应注意的是,只
有那些值得信任的个人才应该有管理数据库用户的权限。
(2) 用户身份确认
数据库用户可以通过操作系统,网络服务,或数据库进行
身份确认,通过主机操作系统进行用户身份认证的优点有:
A 用户能更快,更方便地联入数据库;
B 通过操作系统对用户身份确认进行集中控制:如果操作
系统与数据库用户信息一致,那么Oracle无须存储和管
理用户名以及密码;
C 用户进入数据库和操作系统审计信息一致。
(3) 操作系统安全性
A 数据库管理员必须有create和delete文件的操作系统权限;
B 一般数据库用户不应该有create或delete与数据库相关文
件的操作系统权限;
C 如果操作系统能为数据库用户分配角色,那么安全性管理者
必须有修改操作系统帐户安全性区域的操作系统权限。
数据的安全性策略:
数据的生考虑应基于数据的重要性。如果数据不是很重要,那么数
据的安全性策略可以稍稍放松一些。然而,如果数据很重要,那么应该
有一谨慎的安全性策略,用它来维护对数据对象访问的有效控制。
用户安全性策略:
(1) 一般用户的安全性
A 密码的安全性
如果用户是通过数据库进行用户身份的确认,那么建议
使用密码加密的方式与数据库进行连接。这种方式的设置方
法如下:
在客户端的oracle.ini文件中设置
ora_encrypt_login数为true;
在服务器端的initORACLE_SID.ora文件中设置
dbling_encypt_login参数为true。
B 权限管理
对于那些用户很多,应用程序和数据对象很丰富的数据
库,应充分利用“角色”这个机制所带的方便性对权限进行
有效管理。对于复杂的系统环境,“角色”能大大地简化权
限的管理。
(2) 终端用户的安全性
您必须针对终端用户制定安全性策略。例如,对于一个有
很多用户的大规模数据库,安全性管理者可以决定用户组分类,
为这些用户组创建用户角色,把所需的权限和应用程序角色授
予每一个用户角色,以及为用户分配相应的用户角色。当处理
特殊的应用要求时,安全性管理者也必须明确地把一些特定的
权限要求授予给用户。您可以使用“角色”对终端用户进行权
限管理。
数据库管理者安全性策略:
(1) 保护作为sys和system用户的连接
当数据库创建好以后,立即更改有管理权限的sys和system用
户的密码,防止非法用户访问数据库。当作为sys和system用户
连入数据库后,用户有强大的权限用各种方式对数据库进行改动。
(2) 保护管理者与数据库的连接
应该只有数据库管理者能用管理权限连入数据库,当以sysdba
或startup,shutdown,和recover或数据库对象(例如create,
drop,和delete等)进行没有任何限制的操作。
(3) 使用角色对管理者权限进行管理
应用程序开发者的安全性策略:
(1) 应用程序开发者和他们的权限
数据库应用程序开发者是唯一一类需要特殊权限组完成自己
工作的数据库用户。开发者需要诸如create table,create
procedure等系统权限,然而,为了限制开发者对数据库的操作,
只应该把一些特定的系统权限授予开发者。
(2) 应用程序开发者的环境
A 程序开发者不应与终端用户竞争数据库资源;
B 用程序开发者不能损害数据库其他应用产品。
(3) free和controlled应用程序开发
应用程序开发者有一下两种权限:
A free development
应用程序开发者允许创建新的模式对象,包括table,index,
procedure,package等,它允许应用程序开发者开发独立于其
他对象的应用程序。
B controlled development
应用程序开发者不允许创建新的模式对象。所有需要table,
indes procedure等都由数据库管理者创建,它保证了数据
库管理者能完全控制数据空间的使用以及访问数据库信息的
途径。但有时应用程序开发者也需这两种权限的混和。
(4) 应用程序开发者的角色和权限
数据库安全性管理者能创建角色来管理典型的应用程序开
发者的权限要求。
A create系统权限常常授予给应用程序开发者,以到于
他们能创建他的数据对象。
B 数据对象角色几乎不会授予给应用程序开发者使用的
角色。
(5) 加强应用程序开发者的空间限制
作为数据库安全性管理者,您应该特别地为每个应用程
序开发者设置以下的一些限制:
A 开发者可以创建table或index的表空间;
B 在每一个表空间中,开发者所拥有的空间份额。应用程
序管理者的安全在有许多数据库应用程序的数据库系统
中,您可能需要一应用程序管理者,应用程序管理者应
负责以下的任务:
C 为每一个应用程序创建角色以及管理每一个应用程序
的角色;
D 创建和管理数据库应用程序使用的数据对象;
E 需要的话,维护和更新应用程序代码和Oracle的存储
过程和程序包。