ORACLE基本知识培训教材_第1页
ORACLE基本知识培训教材_第2页
ORACLE基本知识培训教材_第3页
ORACLE基本知识培训教材_第4页
ORACLE基本知识培训教材_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ORACLE基本知识培训教材前言本教材主要是介绍ORACLE的基本知识,目的是为了让新员工快速了解ORACLE的基本知识,本教材培训及学习时间为一天,培训方式采用课堂讲课、自己学习、考试的方式。本书只作为入门指南,另附有一些专题学习书,供大家进阶学习用。ORACLE的环境介绍l 每一个Oracle数据库都是一个数据的集合,这些数据包含在一个或多个文件中。数据库有物理和逻辑两种结构。l 在开发应用程序的过程中,用户创建表和索以便于数据进行保存和快速检索。用户可以为对象的名称创建方便的同义词,通过将数据库链接到不同的数据库中查看对象,并且能够限制对象的访问权限。l 用户还可以使用外部表访问当前数据

2、库之外的文件中的数据,就像访问表中的数据一样。l Oracle实例由被称为系统全局区(system global area,SGA)的内存区域和相应的后台进程组成。这些后台进程负责SGA和数据库磁盘文件之间的交互。在Oracle RAC中,可以有多个实例同时使用同一个数据库。这些实例通常位于不同的服务器上,并且保持着高速互联。l 数据库中的所有逻辑结构都必须存储在数据库中的某个地方。Oracle系统提供了一个记录与所有对象(对象所有者、定义、相关的优先级等)相关的元数据的数据字典。对于需要物理空间保存的对象,Oracle系统会在一个表空间中为其分配空间。l 表空间由一个或多个文件组成,数据文件

3、可能是表空间的全部,也可能是一个表空间的一部分。 l 为了支持事务,Oracle系统能够动态地创建、管理、撤销数据段。 l Oracle Database 10g系统提出的回收站概念,使得表空间和数据文件对空间的需求发生了变化。 l 在Oracle系统的体系结构中,有许多不同的内存区域。不同的内存区域用于不同的目的。Oracle的服务器进程和许多后台进程负责在内存区域中写入、更新、读取和删除数据。l 理解内存区域的用途,有助于理解数据库操作期间的数据和进程流程。l Oracle中的3个主要内存区域是:l 系统全局区域(system global area,SGA)l 程序全局区域(progra

4、m global area,PGA)l 用户全局区域(user global area,UGA)2)本地连接需先安装客户端。同时修改下图配置文件:在TNSNAMES.ORA文件中增加XZ_41_10g = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 135.64.128.41)(PORT = 1522) ) (CONNECT_DATA = (SID = ora10) ) )用PLSQL Developer连接数据库:3)PLSQL Developer常用窗口:首先最好使用下图:把窗口调整到旁边。常用窗口有:

5、1)command窗口这里主要执行过程等。比如exec p_do_for_bak;2)sql窗口:这里执行sql语句。如:ORACEL的基本知识介绍概念,用图,以及实例的方式讲解:实例、用户、表、索引、视图、存储过程、触发器SQL写法,以及一些高级应用案例DML:Select Update Delete TruncateDDL:create dropalter select 语法讲解l 在Oracle系统中,select语句的基本语法格式如下: select distinct *, column_name alias, from tablename where group by havingo

6、rder byl 如果在select子句后面使用星号(*),则表示检索表中所有的数据,包括所有的列和行。l 当然,也可以在select子句末尾列出将要检索的数据列名。只要在select子句后面输入相应的列名,即可把指定的列检索出来。 l 在执行select语句时要注意,select子句和from子句都是必须的,缺少任何一个子句都是错误的。 l 在使用select语句执行操作时,不同数据类型的数据显示的方式也不同。l 在表中,如果某个列中没有值,那么把这种现象称为空值。空值既不是字符串中的空格,也不是数字中的零,而只是表示没有值,这是一种不能使用的值。如果某个列既不是主健约束列,也没有定义为no

7、t null,那么该列就允许为空值。任何数据类型的列都具有这种特性。l 空值的特性非常奇怪。在算术表达式中,任何包含了空值运算的表达式的结果依然是空值。 l 连接查询的理论基础是笛卡尔乘积。也就是说,连接运算建立在笛卡尔乘积的基础上,所有连接运算的结果都是笛卡尔乘积的子集。 l 笛卡尔乘积是指两个或两个以上的表进行相乘运算,结果是这些表中所有行的任意组合。例如,emp表中有14行数据,dept表中有4行数据,其结果中有56行数据l 内连接把两个表连接成一个临时表,在这个表中,仅包含那些满足连接条件的记录行。l 内连接主要有两种形式,等价连接和非等价连接。l 等价就是在连接列相等的条件下执行的连

8、接操作。非等价连接是指在连接列不相等的连接条件下执行连接操作。l 在外连接中,某些不满足条件的列也会显示出来,也就是说,只限制其中一个表的行,而不限制另外一个表中的行。l 这种连接形式在许多情况下是非常有用的。l 外连接只能用于两个表中。l 外连接的语法格式如下:l select table1.column, table2.columnl from table1, table2l where table1.column1(+) = table2.column2 l 外连接又可以分为左外连接和右外连接。在oracle中+号放在=右边相当于左连接,而+号放在=左边相当于右连接l 左向外联接的结果集

9、包括   LEFT   OUTER   子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。l RIGHT   JOIN   或   RIGHT   OUTER   JOIN。       右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。l 自连接就是把某一个表中的行同该表中另外一些行连接起来。自连接主要用于比较相同的信息,但是所比较的列必

10、须有相同的或者兼容的数据类型。为了连接同一个表,为该表指定两个别名是非常重要的,这样才可以把该表在逻辑上作为两个不同的表来使用。l 使用union集合运算符,可以把第一个查询语句中的所有数据行与第二个查询语句的所有数据行相加,消除重复行,最后返回结果。l union all集合运算符与union集合运算符非常类似,但是两者也有一个显著的差别,即不消除查询结果中重复的数据行,只是简单地把多个查询语句的结果合并在一起l intersect集合运算符用来执行交集运算,集合的差集运算可以由minus集合运算符来实现 如:select TRUNC(89.985,2) from dual修改数据:l 向表

11、中插入数据可以使用insert命令。Insert命令的语法格式如下: insert into table (column, column) values (value, value)在上面的语法格式中,table表示将要插入数据的表名称,column表示将要操纵的表中的列名称,value是将要插入column列的数据值l 在插入数据之前,需要了解该表的结构。如果在表名称后面没有指定列名称,那么表示按照表定义的列顺序插入数据。如果在表名称后面指定了列名称,那么按照这些列的顺序插入数据。l 如果表中的某个列允许空值,则可以在插入数据的时候不为该列提供数据。但是,如果某个列是非空的,那么不能为该列提

12、供空值。如果为该列提供了空值,那么系统返回相应的错误信息。l 在向表中插入数据时,可以使用系统提供的函数来插入数据还可以使用替换变量插入数据。l 如果表中的数据有错,那么可以使用update命令来更新。使用update命令更新表中数据的语法格式如下:l update tablel set column = value, column = valuel where condition如果希望更新表中的某行数据,那么可以使用where子句来指定将要更新的行。如果在更新表中的数据时没有使用where子句,那么表示更新表中所有行的数据。在更新表中数据的时候,可以使用子查询提供值,且可以使用多列子查询l

13、 如果表中的某些数据没有用了,可以删除这些数据。在Oracle Database 10g系统中,使用delete命令删除表中的数据。Delete命令的语法格式如下: delete from table where conditionl 在上面的语法格式中,table参数指定包含将要被删除的数据的表名称,condition参数指定将要删除的数据应该满足的条件。在删除数据的时候,最好使用where子句指定需要删除的数据应该满足的条件如果没有指定where子句,则删除表中的所有数据-DDLl 创建表的最简单、最常见的方法的语法格式如下: create table schema_name.<ta

14、ble_name>( <column_name> <data type> default <expression> <constraint> ,<column_name> <data type> default <expression> <constraint> , );l 约束既可以在create table语句中创建,也可以在alter table语句中添加。在这两种定义方式中,定义约束的语法是类似的。 l 下面主要介绍使用alter table语句定义约束的基本语法格式: alter t

15、able schema.<table_name> add constraint <name> <constraint definition> );l 表的主键可以确保在一个表中没有重复行。尽管用户可以创建没有主键的表,但是应该尽量避免这样做。在表的所有行中,用作主键的列或列的集合必须是唯一的,且不能为null。l 在Oracle系统中,主键可以由一个表的一个列或若干个列构成。但是,主键最多只能由32个列构成。l 定义主键约束的基本语法格式如下: alter table table_name add constraint primary_key_name pr

16、imary key primary key(table_column);l 在Oracle系统中,表能够通过使用所谓的外键约束进行关联。外键约束可以放在一个表(子表)中的一个列或一组列上。作为外键约束定义的组成部分,必须要定义子表的列去参照另一个表(父表)中的一个匹配列或组列。l 如果插入子表的行在外键列中具有非null值,那么在父表行中必须在所引用的列中有相同的值。如果在父表中没有相应的值,那么这种插入操作将会失败。通过定义外键约束,可以在表与表之间建立父子关系。这是数据库中参照完整性的基础。l 定义外键约束的语法格式如下: alter table child_table add const

17、raint foreign_key_name foreign key(child_table_column) references parent_table(parent_table_column);l 唯一性约束可以确保表中的各行,对于值为非null的给定列或列组都具有唯一值。在使用唯一性约束时,应该遵循下面的原则: 在表中,可以有多个行在相应的唯一性约束列中具有null值。 可以使用多个列建立唯一性约束。 唯一键最多有32个列组成; 当定义唯一键约束时,Oracle会在后台建立一个唯一性索引来强制唯一性。 l 定义唯一性约束的语法格式如下: alter table table_name a

18、dd constraint unique_key_name unique(column_name);l 在创建表时,必须将表放置在某个表空间中。该表空间可以使用tablespace子句指定。tablespace子句是可选的,如果没有明确规定tablespace子句,那么所建立的表就会存放在建立表的用户帐户默认的表空间中。l 为了提高数据库的可靠性,记录数据库中所有数据的改变,可以在创建表时使用logging子句。这时表示对数据库的操作会产生重做日志。如果所发生的故障使数据不能从内存传递到数据库的数据文件中,那么就可以从重做日志中获取这些改变。这样,可以防止数据丢失,提高系统的可用性。l 当在c

19、reate table语句中规定了nologging子句时,就认为这个表是非日志记录表。在这个表上进行的操作可能会导致数据库中很少的日志记录。对于许多用户来说,这意味着当使用nologging子句创建表时,在表上执行的操作就不会产生重做日志。事实并非如此。l Oracle提供了增加新列、修改已有列,以及从已有表中删除列而不影响表中其他数据的能力。如alter table people add( phone_number varchar2(10);l alter table people modify(ssn number(15) not null);l alter table people d

20、rop column email;l alter table <table_name> move tablespace <tablespace_name>l alter table <table_name> set unused column <column_name>-alter table table_name set unused (col1,col2,.);-设置无效l 可以使用drop table语句删除表。drop table语句的语法格式如下:l drop table <table_name> cascade const

21、raints;l truncate table是用来删除表中所有数据、但是不删除表本身的DDL语句。同时,该表的索引也被删除。truncate table命令能够用于堆组织表、索引组织表、临时表等。l truncate table命令的语法格式如下: truncate table schema.<table_name> drop storage | reuse storagedrop table gender_tab;drop table purge;l Oracle Database 10g提供了flashback drop语句。通过使用flashback table to be

22、fore drop命令,该语句允许恢复drop table命令的操作效果。 drop table bin_table;flashback table bin_table to before drop rename to new_bin_table; ORACLER的一些高级应用1)现在有两个数据库-DBlinkadb,用户名和密码分别是adb/adb,在本地主机配置的tns名字是tns_a,所在主机a;bdb,用户名和密码分别是bdb/bdb,在本地主机配置的tns名字是tns_b,所在主机b;现在需要在adb上面建一个连接到bdb数据库的dblink;方法:在a主机上编辑tnsnames.o

23、ra文件配置bdb数据库的tns别名tns_b,如下:tns_b = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.70.9.12)(PORT = 1521) ) (CONNECT_DATA = (SERVICE_NAME = dbtestb) ) )然后创建数据库连接,如下:create database link connect to bdb identified by identified by bdbusing 'tns_b'2) oracle的同义词总结: 从字面上理解就是别名

24、的意思,和视图的功能类似。就是一种映射关系创建同义词语句:create public synonym table_name for user.table_name;其中第一个user_table和第二个user_table可以不一样。此外如果要创建一个远程的数据库上的某张表的同义词,需要先创建一个Database Link(数据库连接)来扩展访问,然后在使用如下语句创建数据库同义词:create synonym table_name for table_nameDB_Link;当然,你可能需要在user用户中给当前用户(user2)授权: gr

25、ant select/delete/update on user22.删除同义词:drop public synonym table_name;3.查看所有同义词:select * from dba_synonyms同义词拥有如下好处:节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;扩展的数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;同义词可以创建在不同一个数据库服务器上,通过网络实现连接。3)触发器是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。功能:1、 允许/限制对表的修

26、改2、 自动生成派生列,比如自增字段3、 强制数据一致性4、 提供审计和日志记录5、 防止无效的事务处理6、 启用复杂的业务逻辑触发器类型:1、 语句触发器2、 行触发器3、 INSTEAD OF 触发器4、 系统条件触发器5、 用户事件触发器6、 这里只谈行触发器,其他请大家使用时自己研究。例子:Create Or Replace Trigger tr_acct_balance_dBefore delete on tb_bil_acct_balance_999for each rowdeclare s_user varchar2(20);Beginselect sys.login_user

27、into s_user from dual;insert into tb_bil_acct_balance_d(ACCT_BALANCE_ID , ACCT_ID, BALANCE_TYPE_ID , CYCLE_CEIL, CYCLE_FLOOR, USE_ORDER, EFF_DATE , EXP_DATE , CREATED_DATE , STATE , FLAG , BALANCE , BALANCE_NAME , LATN_ID , OCS_FLAG , SERV_ID ,s_user) values(:old.ACCT_BALANCE_ID , :old.ACCT_ID, :old

28、.BALANCE_TYPE_ID , :old.CYCLE_CEIL, :old.CYCLE_FLOOR, :old.USE_ORDER, :old.EFF_DATE , :old.EXP_DATE , :old.CREATED_DATE , :old.STATE , :old.FLAG , :old.BALANCE , :old.BALANCE_NAME , :old.LATN_ID , :old.OCS_CHANGE_FLAG , :old.SERV_ID ,s_user);End;4) 过程存储过程就是命了名的PL/SQL块,可以被赋予参数,存储在数据库中,然后由另一个应用或者PL/SQ

29、L例程调用。比如CREATE PROCEDURE my_proc as BEGINNULL;END;/语法:CREATE OR REPLACE PROCEDURE procedure_name (参数)IS | ASPRAGMA AUTONOMOUS_TRANACTION; -声明自主事务处理。本地变量声明BEGIN执行语句部分EXCEPTION错误处理部分ENDname;/CREATE OR REPLACE PROCEDURE my_proc as - OR REPLACEBEGINDbms_output.put_line(Hello, world);END;/执行存储过程set serve

30、routput onbeginmy_procend;/直接执行:execute my_procexec my_proc权限:表和视图具有SELECT, INSERT, UPDATE, DELETE 这样的特权,而过程具有EXECUTE特权。只有将EXECUTE 特权赋予用户,用户才可以运行它。而将它赋予PUBLIC用户,则所有用户都可以运行。例子学习。测试库P_DO_FOR_BAK。带参数:请见附件。5)job:注意只填what,interval.然后run6)性能监控:动态性能视图用于记录当前例程的活动。启动例程时,oracle会自动建立动态性能视图;停止时,oracle会自动停止。需要注意

31、,数据字典信息是从数据文件中获得的,而动态性能视图信息是从SGA和控制文件中取得。通过查询动态性能视图,一方面可以获得性能数据,另一方面还可以取得磁盘和内存结构相关的其他信息。所有动态视图都是以V_$开始的,oracle为每个动态性能视图提供了相应的同义词。例如,V_$datafile的同义词为v$datafile; V_$SGA的同义词是v$sga。通过查询V$FIXED_TABLE,KY 显示所有动态性能视图。当数据库处于不同状态时,可以访问的动态性能视图有所不同常用:dba_data_files:通常用来查询关于数据库文件的信息    dba_db_link

32、s:包括数据库中的所有数据库链路,也就是databaselinks。 dba_extents:数据库中所有分区的信息                      dba_free_space:所有表空间中的自由分区 dba_indexs:关于数据库中所有索引的描述          

33、0;      dba_ind_columns:在所有表及聚集上压缩索引的列 dba_objects:数据库中所有的对象                             dba_rollback_segs:回滚段的描述 dba_segments:所有数据库段分段

34、的存储空间             dba_synonyms:关于同义词的信息查询 dba_tables:数据库中所有数据表的描述                      dba_tabespaces:关于表空间的信息 dba_tab_columns:所有表描述、视图

35、以及聚集的列      dba_tab_grants/privs:对象所授予的权限 dba_ts_quotas:所有用户表空间限额                         dba_users:关于数据的所有用户的信息 dba_views:数据库中所有视图的文本 二、DBA最常用的动态性能视图 v$da

36、tafile:数据库使用的数据文件信息                    v$librarycache:共享池中SQL语句的管理信息 v$lock:通过访问数据库会话,设置对象锁的所有信息  v$log:从控制文件中提取有关重做日志组的信息 v$logfile有关实例重置日志组文件名及其位置的信息     v$parameter:初始化参数文件中所有项的

37、值 v$process:当前进程的信息                                  v$rollname:回滚段信息  v$rollstat:联机回滚段统计信息      

38、60;                       v$rowcache:内存中数据字典活动/性能信息 v$session:有关会话的信息                    &

39、#160;                v$sesstat:在v$session中报告当前会话的统计信息  v$sqlarea:共享池中使用当前光标的统计信息,光标是一块内存区域,有Oracle处理SQL语句时打开。 v$statname:在v$sesstat中报告各个统计的含义    v$sysstat:基于当前操作会话进行的系统统计如内存使用:select * from v$PROCESS_MEMOR

40、Y6)表空间监控:SELECT D.TABLESPACE_NAME,SPACE "SUM_SPACE(M)",BLOCKS SUM_BLOCKS,SPACE-NVL(FREE_SPACE,0) "USED_SPACE(M)", ROUND(1-NVL(FREE_SPACE,0)/SPACE)*100,2) "USED_RATE(%)",FREE_SPACE "FREE_SPACE(M)" FROM (SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) SPA

41、CE,SUM(BLOCKS) BLOCKS FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME) D, (SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) FREE_SPACE 7)查看,杀死sessionPL/SQL Developer-tools-sessions查看:选中某个sessiong-右键选kill8)备份(backup)实际就是数据的副本,备份的目的是为了防止不可预料的数据丢失和应用错误。转储(restore)是指当数据文件或控制文件出现损坏时,将已备份的副本文件还原到原数据库的过

42、程。恢复(recover)是指应用归档日志和重做日志事务更新副本文件到数据文件失败前的状态。Oracle的备份与恢复有三种标准的模式,大致分为两大类,备份恢复(物理上的)以及导入导出(逻辑上的),而备份恢复又可以根据数据库的工作模式分为非归档模式(Nonarchivelog-style)和归档模式(Archivelog-style),通常,我们把非归档模式称为冷备份,而相应的把归档模式称为热备份从Oracle Database 10g 开始,提供了数据泵导出导入工具EXPDP 和 IMPDP。EXPDP 和IMPDP 的速度要优于EXP 和IMP。EXP 和 IMP 是客户端工具程序,它们既可

43、以在客户端使用,也可以在服务端使用。 EXPDP 和 IMPDP 是服务端的工具程序,它们只能在Oracle 服务器端使用,不能在Oracle 客户端使用。 IMP 只能使用 EXP 导出文件,而不能使用 EXPDP 导出文件;IMPDP 只能使用 EXPDP 导出文件,而不能使用 EXP 导出文件ORACLER安全性方面要注意的事情在Oracle数据库中,涉及安全方面的内容包括:用户和模式、系统权限、对象权限、数据库角色、访问粒度控制等在实际应用中,用户应该避免使用sys、system等1) 建立用户:2) 修改表空间:l 3)向用户赋予系统权限的基本语法格式如下: grant system

44、_privilege to username with admin option;l 为了向数据库用户赋予指定的系统权限,并且使其有能力将相同的权限赋予其他用户,则需要在用户的grant语句中包含with admin option子句。为用户赋予任何系统权限时需要多加小心,对admin option权限更是如此。l 与赋予权限相对应的是删除权限。从数据库用户中删除权限的基本语法格式如下: revoke system_privilege from username;4)系统权限可以用来许可或限制DDL语句的执行,而对象权限可以用来许可或阻止DML语句的执行l 授予对象权限的语法格式如下: gra

45、nt object_privilege on object_name to username with grant option;l 为了授予数据库用户指定的对象权限,并同时赋予其将相同的权限赋予其他用户的权限,需要在用户的grant语句中包括with grant option。l 与此相对应的,取消数据库用户对象权限的基本语法格式如下: revoke object_privilege on object_name from username;5)数据库角色就是权限的命名集合。使用角色可以大大降低用户权限的维护负担。角色可以是对象权限或系统权限的命名集合。数据库管理员只需创建特定的数据库角色,

46、使其反映组织或应用的安全权限,就可以将这些角色赋予用户ORACLE应用使用介绍下面介绍几个简单的思路:1) UPDATE table1 outer SET column=(SELECT expression FROM table2 inner WHERE outer.column=inner.column);- 利用此方法可以利用其他表的data修改一个表的data2) INSERT ALLwhen empid >= 7521 then INTO sal_history VALUES(EMPID,HIREDATE,SAL)when mgr >= 7839 then INTO mgr

47、_history VALUES(EMPID,MGR,SAL)SELECT empno EMPID, HIREDATE, SAL, MGRFROM empWHERE empno < 7654 ;commit ;-多表插入 3)SELECT /*+INDEX_FFS(tb_prd_prd_inst_999 IN_ACCT_ID,IN_PRD_INST_ID)*/ * FROM tb_prd_prd_inst_999 d-联合索引4)优化入门: PL/SQL Developer-F5查看执行计划:通常看操作,比如,大表是否有全表扫描等;cost这项也是主要要看的,数字越小越好a)以下会全表:在

48、索引列上使用NOT或者“<>”; 如如goods_no != 2,要改为good_no > 2 or good_no <2对索引列使用函数或者计算-建立函数索引; NOT IN操作; 通配符位于查询字符串的第一个字符; IS NULL或者IS NOT NULL; 多列索引,但它的第一个列并没有被Where子句引用;b) 对于大表查询中的列应尽量避免进行诸如,等转换c) 如果索引是建立在多个列上, 只有在它的第一个列(leading column)被where 子句引用时, 优化器才会选择使用该索引. 这也是一条简单而重要的规则,当仅引用索引的第二个列时, 优化器使用了全

49、表扫描而忽略了索引d) 避免改变索引列的类型.: 当比较不同数据类型的数据时, ORACLE 自动对列进行简单的类型转换. 假设EMPNO 是一个数值类型的索引列. SELECT FROM EMP WHERE EMPNO = 123' 实际上,经过ORACLE 类型转换, 语句转化为: SELECT FROM EMP WHERE EMPNO = TO_NUMBER(123') 幸运的是,类型转换没有发生在索引列上,索引的用途没有被改变. 现在,假设EMP_TYPE 是一个字符类型的索引列. SELECT FROM EMP WHERE EMP_TYPE = 123 这个语句被OR

50、ACLE 转换为: SELECT FROM EMP WHERETO_NUMBER(EMP_TYPE)=123 因为内部发生的类型转换, 这个索引将不会被用到! 为了避免ORACLE 对你的SQL 进行隐式 的类型转换, 最好把类型转换用显式表现出来. 注意当字符和数值比较时, ORACLE 会优先 转换数值类型到字符类型e) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE 的解析器按照从右到左的顺序处理FROM 子句中的表名,FROM 子句中写在最后的表 (基础表driving table)将被最先处理,在FROM 子句中包含多个表的情况下,你必须选择记 录条数最少的表作

51、为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(intersec tion table)作为基础表, 交叉表是指那个被其他表所引用的表.f) WHERE 子句中的连接顺序: ORACLE 采用自下而上的顺序解析WHERE 子句,根据这个原理,表之间的连接必须写在其他WHERE 条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE 子句的末尾.G) 系统视图,具体指的是dba_tab_modifications/all_tab_modifications/user_tab_modifications,这几个视图收集了表自从上一次分析之后的DML累积次数。-可查询以下信息:图

52、形化的工具有toad。H)io分析-每隔2秒检察一次,共执行20次其中的%usr指的是用户进程使用的cpu资源的百分比,%sys指的是系统资源使用cpu资源的百分比,%wio指的是等待io完成的百分比,这是值得我们观注的一项,%idle即空闲的百分比。假如wio列的值很大,如在35%以上,说明你的系统的IO存在瓶颈,你的CPU花费了很大的时间去等待IO的完成。Idle很小说明系统CPU很忙。像我的这个示例,可以看到wio平均值为3说明io没什么非凡的问题,而我的idle值为50以上,说明我的cpu不忙。 i) 当进行全表扫描时,CACHE提示能够将表全部缓存到内存中,这样访问同一个表的用户可直接在内存中查找数据. 比较适合数据量小但常被访问的表, 也可以建表时指定cache选项这样在第一次访问时就可以对其缓存. NOCACHE则表示对已经指定了CACHE选项的表不进行缓存SELECT /*+ FULL(acct) CAHE(acct) */ acct_id from acct/*+ROWID(TABLE)*/提示明确表明对指定表根据ROWID进行访问.例如:SELECT /*+ROWID(BSEMPMS)*/ * FROM BSEMPMS WHERE ROWID>='AAAAAAAAAAAAAA'AND EMP_NO='

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论