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

下载本文档

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

文档简介

ORACLE基本知识培训教材

前言

本教材主要是介绍ORACLE的基本知识,目的是为了让新员工快速了

解ORACLE的基本知识,本教材培训及学习时间为一天,培训方式采

纳课堂讲课,自己学习,考试的方式。

本书只作为入门指南,另附有一些专题学习书,供大家进阶学习用。

ORACLE的环境介绍

•每一个Oracle数据库都是一个数据的集合,这些数据包含在一

个或多个文件中。数据库有物理和逻辑两种结构。

•在开发应用程序的过程中,用户创建表和索以便于数据进行保

存和快速检索。用户可以为对象的名称创建便利的同义词,通

过将数据库链接到不同的数据库中查看对象,并且能够限制对

象的访问权限。

•用户还可以运用外部表访问当前数据库之外的文件中的数据,

就像访问表中的数据一样。

•Oracle实例由被称为系统全局区(systemglobalarea,SGA)

的内存区域和相应的后台进程组成。这些后台进程负责SGA和

数据库磁盘文件之间的交互。

在OracleRAC中,可以有多个实例同时运用同一个数据库。

这些实例通常位于不同的服务器上,并且保持着高速互联。

•数据库中的全部逻辑结构都必需存储在数据库中的某个地

方。Oracle系统供应了一个记录及全部对象(对象全部者,

定义,相关的优先级等)相关的元数据的数据字典。对于

须要物理空间保存的对象,Oracle系统会在一个表空间中

为其安排空间。

•表空间由一个或多个文件组成,数据文件可能是表空间的

全部,也可能是一个表空间的一部分。

•为了支持事务,Oracle系统能够动态地创建,管理,撤

销数据段。

•OracleDatabase10g系统提出的回收站概念,使得表空间

和数据文件对空间的需求发生了变化。

•在Oracle系统的体系结构中,有很多不同的内存区域。不

同的内存区域用于不同的目的。Oracle的服务器进程和很

多后台进程负责在内存区域中写入,更新,读取和删除

数据。

•理解内存区域的用途,有助于理解数据库操作期间的数据

和进程流程。

•Oracle中的3个主要内存区域是:

•系统全局区域(systemglobalarea,SGA)

•程序全局区域(programglobalarea,PGA)

•用户全局区域(userglobalarea,UGA)

2)本地连接需先安装客户端。同时修改下图配置文件:

在TNSNAMES.ORA文件中增加

XZ_41_10g=

(DESCRIPTION=

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=TCP)(HOST=135.64.128.41)(PORT

二1522))

(CONNECT_DATA=

(SID=oralO)

用PLSQLDeveloper连接数据库:

3)PLSQLDeveloper常用窗口:

首先最好运用下图:

把窗口调整到旁边。常用窗口有:

1)command窗口

这里主要执行过程等。比如execpdo_for_bak;

2)sql窗口:

这里执行sql语句。如:

ORACEL的基本知识介绍

概念,用图,以及实例的方式讲解:实例,用户,表,索引,视

图,存储过程,触发器

SQL写法,以及一些高级应用案例

DML:

Select

Update

Delete

Truncate

DDL:

create

drop

alter

select语法讲解

•在Oracle系统中,select语句的基本语法格式如下:

-select[distinct][*,columnname[alias],••・]

-fromtablename

-where

-groupby

-having

orderby

•假如在select子句后面运用星号(*),则表示检索表中全部的

数据,包括全部的列和行。

•当然,也可以在select子句末尾列出将要检索的数据列名。只

要在select子句后面输入相应的列名,即可把指定的列检索出

来。

•在执行select语句时要留意,select子句和from子句都是必

需的,缺少任何一个子句都是错误的。

•在运用select语句执行操作时,不同数据类型的数据显示的方

式也不同。

•在表中,假如某个列中没有值,则把这种现象称为空值。空值

既不是字符串中的空格,也不是数字中的零,而只是表示没有

值,这是一种不能运用的值。假如某个列既不是主健约束列,

也没有定义为notnull,则该列就允许为空值。任何数据类型

的列都具有这种特性。

•空值的特性特别惊奇。在算术表达式中,任何包含了空值运算

的表达式的结果依旧是空值。

•连接查询的理论基础是笛卡尔乘积。也就是说,连接运算建立

在笛卡尔乘积的基础上,全部连接运算的结果都是笛卡尔乘积

的子集。

•笛卡尔乘积是指两个或两个以上的表进行相乘运算,结果是这

些表中全部行的随意组合。

例如,omp表中有14行数据,dept表中有4行数据,其结果中有56

行数据

•内连接把两个表连接成一个临时表,在这个表中,仅包含那些

满意连接条件的记录行。

•内连接主要有两种形式,等价连接和非等价连接。

•等价就是在连接列相等的条件下执行的连接操作。非等价连接

是指在连接列不相等的连接条件下执行连接操作。

•在外连接中,某些不满意条件的列也会显示出来,也就是说,

只限制其中一个表的行,而不限制另外一个表中的行。

•这种连接形式在很多状况下是特别有用的。

•外连接只能用于两个表中。

•外连接的语法格式如下:

•selecttablel.column,table2.column

•fromtablel,table2

•wheretablel.columnl(+)=table2.column2

•外连接又可以分为左外连接和右外连接。在。racle中+号放在二

右边相当于左连接,而+号放在=左边相当于右连接

•左向外联接的结果集包括LEFTOUTER子句中指定

的左表的全部行,而不仅仅是联接列所匹配的行。假如左表的

某行在右表中没有匹配行,则在相关联的结果集行中右表的全

部选择列表列均为空值。

•RIGHTJOIN或RIGHTOUTERJOINo

右向外联接是左向外联接的反向联接。将返回右表的全部

行。假如右表的某行在左表中没有匹配行,则将为左表返回空

值。

•自连接就是把某一个表中的行同该表中另外一些行连接起来。

自连接主要用于比较相同的信息,但是所比较的列必需有相同

的或者兼容的数据类型。为了连接同一个表,为该表指定两个

别名是特别重要的,这样才可以把该表在逻辑上作为两个不同

的表来运用。

•运用union集合运算符,可以把第一个查询语句中的全部数据

行及第二个查询语句的全部数据行相加,消退重复行,最终返

回结果。

•unionall集合运算符及union集合运算符特别类似,但是两

者也有一个显著的差别,即不消退查询结果中重复的数据行,

只是简单地把多个查询语句的结果合并在一起

•intersect集合运算符用来执行交集运算,集合的差集运算可

以由minus集合运算符来实现

如:selectTRUNC(89.985,2)fromdual

修改数据:

•向表中插入数据可以运用insert命令。Insert命令的语法格

式如下:

-insertintotable(column[,column***])

-values(value[,value***!)

在上面的语法格式中,table表示将要插入数据的表名称,column表

示将要操纵的表中的列名称,value是将要插入column列的数据值

•在插入数据之前,须要了解该表的结构。假如在表名称后面没

有指定列名称,则表示依据表定义的列依次插入数据。假如在

表名称后面指定了列名称,则依据这些列的依次插入数据。

•假如表中的某个列允许空值,则可以在插入数据的时候不为该

列供应数据。但是,假如某个列是非空的,则不能为该列供应

空值。假如为该列供应了空值,则系统返回相应的错误信息。

•在向表中插入数据时,可以运用系统供应的函数来插入数据还

可以运用替换变量插入数据。

•假如表中的数据有错,则可以运用update命令来更新。运用

update命令更新表中数据的语法格式如下:

•updatetable

•setcolumn=value[,column=value]

・wherecondition

假如吩望更新表中的某行数据,则可以运用where子句来指定将要更

新的行。假如在更新表中的数据时没有运用where子句,则表示更新

表中全部行的数据。在更新表中数据的时候,可以运用子查询供应值,

且可以运用多列子查询

•假如表中的某些数据没有用了,可以删除这些数据。在Oracle

Database10g系统中,运用delete命令删除表中的数据。

Delete命令的语法格式如下:

-deletefromtable

-wherecondition

•在上面的语法格式中,table参数指定包含将要被删除的数据

的表名称,condition参数指定将要删除的数据应当满意的条

件。

在删除数据的时候,最好运用where子句指定须要删除的数据应当满

意的条件假如没有指定where子句,则删除表中的全部数据

-DDL

•创建表的最简单,最常见的方法的语法格式如下:

-createtable[schemaname.]<tablename>(

-<columnname><datatype>[default<expressicn>]

[〈constraint)]

-[,<column_name><datatype>[default<expressicn>]

[〈constraint〉]]

•约束既可以在createtable语句中创建,也可以在altertable

语句中添加。在这两种定义方式中,定义约束的语法是类似的。

•下面主要介绍运用altertable语句定义约束的基本语法格式:

-altertable[schema.]<tablename>

-add[constraint[<name>]](constraintdefinition>

•表的主键可以确保在一个表中没有重复行。尽管用户可以创建

没有主键的表,但是应当尽量避开这样做。在表的全部行中,

用作主键的列或列的集合必需是唯一的,且不能为null。

•在Oracle系统中,主键可以由一个表的一个列或若干个列构

成。但是,主键最多只能由32个列构成。

•定义主键约束的基本语法格式如下:

altertabletablename

-addconstraintprimary_key_nameprimarykey

-primarykey(table_column);

•在Oracle系统中,表能够通过运用所谓的外键约束进行关联。

外键约束可以放在一个表(子表)中的一个列或一组列上。作为

外键约束定义的组成部分,必须要定义子表的列去参照另一个

表(父表)中的一个匹配列或组列。

•假如插入子表的行在外键列中具有非null值,则在父表行中必

需在所引用的列中有相同的值。假如在父表中没有相应的值,

则这种插入操作将会失败。通过定义外键约束,可以在表及表

之间建立父子关系。这是数据库中参照完整性的基础。

•定义外键约束的语法格式如下:

-altertablechildtable

-addconstraintforeignkeyname

foreignkey(childtablecolumn)references

parent,table(parent_table_column);

•唯一性约束可以确保表中的各行,对于值为非null的给定列或

列组都具有唯一值。在运用唯一性约束时,应当遵循下面的原

-在表中,可以有多个行在相应的唯一性约束列中具有

null值。

-可以运用多个列建立唯一性约束。

-唯一键最多有32个列组成;

-当定义唯一键约束时,Oracle会在后台建立一个唯一,性

索引来强制唯一性。

•定义唯一性约束的语法格式如下:

-altertabletablename

-dadconstraintuniquekeyname

-unique(columnname);

•在创建表时,必需将表放置在某个表空间中。该表空间可以运

用tablespace子句指定。tablespace子句是可选的,假如没

有明确规定tablespace子句,则所建立的表就会存放在建立表

的用户帐户默认的表空间中。

•为了提高数据库的牢靠性,记录数据库中全部数据的改变,可

以在创建表时运用logging子句。这时表示对数据库的操作会

产生重做日志。假如所发生的故障使数据不能从内存传递到数

据库的数据文件中,则就可以从重做日志中获得这些改变。这

样,可以防止数据丢失,提高系统的可用性。

•当在createtable语句中规定了nologging子句时,就认为这

个表是非日志记录表。在这个表上进行的操作可能会导致数据

库中很少的日志记录。对于很多用户来说,这意味着当运用

nologging子句创建表时,在表上执行的操作就不会产生重做

日志。事实并非如此。

•Oracle供应了增加新列,修改已有列,以及从已有表中删除

列而不影响表中其他数据的实力。如altertable

peopleadd(phone_numbervarchar2(10);

•altertablepeoplemodify(ssnnumber(15)notnull);

•altertablepeopledropcolumnemail;

・altertable<table_name>movetablespace

<tablespacename>

・altertable<tablename>setunusedcolumn

<columnname>-altertabletablenamesetunused

(coll,col2,...)「设置无效

•可以运用drcptable语句删除表。droptable语句的语法格

式如下:

・droptable<table_name>[cascadeconstraints];

•truncatetable是用来删除表中全部数据,但是不删除表本

身的DDL语句。同时,该表的索引也被删除。truncatetable

命令能够用于堆组织表,索引组织表,临时表等。

•truncatetable命令的语法格式如下:

-truncatetable[schema.]<table_name>[dropstorage

reusestorage]

droptablegendertab;

droptablepurge;

•OracleDatabase10g供应了flashbackdrop语句。通过运用

flashbacktabletobeforedrop命令,该语句允许复原drop

table命令的操作效果。

droptablebin_table;

flashbacktablebin_tabletobeforedroprenameto

newbintable;

ORACLER的一些高级应用

1)现在有两个数据库-DBlink

adb,用户名和密码分别是adb/adb,在本地主机配置的tns名字是

tns_a,所在主机a;

bdb,用户名和密招分别是bdb/bdb,在本地主机配置的tns名字是

tns_b,所在主机b;

现在须要在adb上面建一个连接到bdb数据库的dblink;

方法:

在a主机上编辑tnsnames.ora文件配置bdb数据库的tns别名tns_b,

如下:

tns_b=

(DESCRIPTION=

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=TCP)(HOST=10.70.9.12)(PORT=1521))

(CONNECT_DATA=

(SERVICE_NAME=dbtestb)

然后创建数据库连接,如下:

createdatabaselink

connecttobdbidentifiedbyidentifiedbybdb

using'tns_b';

2)oracle的同义词总结:

从字面上理解就是别名的意思,和视图的功能类似。就是一种映

射关系

创建同义词语句:

createpublicsynonymtable_nameforuser.table_nane;

其中第一个usertable和第二个usertable可以不一样。

此外假如要创建一个远程的数据库上的某张表的同义词,须要先

创建一个DatabaseLink(数据库连接)来扩展访问,然后在运用如下

语句创建数据库同义词:createsynonymtable_namefor

table_name@DB」,ink;

当然,你可能须要在user用户中给当前用户(user2)授权:

grantselect/delete/updateonuser2

2.删除同义词:

droppublicsynonymtable_name;

3.查看全部同义词:

select*fromdbasynonyms

同义词拥有如下好处:节约大量的数据库空间,对不同用户的操

作同一张表没有多少差别;扩展的数据库的运用范围,能够在不同的

数据库用户之间实现无缝交互;同义词可以创建在不同一个数据医服

务器上,通过网络实现连接。

3)触发器

是特定事务出现的时候,自动执行的代码块。类似于存储过程,但是

用户不能直接调用他们。

功能:

1、允许/限制对表的修改

2、自动生成派生列,比如自增字段

3、强制数据一样性

4、供应审计和日志记录

5、防止无效的事务处理

6、启用困难的业务逻辑

触发器类型:

1、语句触发器

2、行触发器

3.INSTEADOF触发器

4、系统条件触发器

5、用户事务触发器

6、这里只谈行触发器,其他请大家运用时自己探讨。

例子:

CreateOrReplaceTriggertracctbalanced

Beforedeleteontbbilacctbalance999

foreachrowdeclare

s_uservarchar2(20);

Beginselectsys.login_userintos_userfromdual;

insertintotbbilacctbalanced(ACCTBALANCEID,ACCTID,

BALANCE_TYPE_ID,CYCLE_CEIL,CYCLE_FL()()R,USE_ORDER,

EFF_DATE,

EXPDATE,

CREATED_DATE,

STATE,

FLAG,

BALANCE,

BALANCE_NAME,

LATN_1D,

OCSFLAG,

SERVID,

s_user)

values(:old.ACCT^BALANCE_ID,:old.ACCTJD,:old.BALANCE_TY

PE_TD,:old.CYCLE_CEIL,:old.CYCLE_FL00R,:old.USE^ORDER,

:old.EFFDATE,

:old.EXPDATE,

:old.CREATEDDATE,

:old.STATE,

:old.FLAG,

:old.BALANCE,

:old.BALANCE_NAME,

:old.LATN_ID,

:old.OCS_CHANGE_FLAG,

:old.SERVID,

s_user);

End;

4)过程

存储过程就是命了名的PL/SQL块,可以被给予参数,存储在数据库

中,然后由另一个应用或者PL/SQL例程调用。比如

CREATEPROCEDUREmy_procas

BEGIN

NULL;

END;

语法:

CREATE[ORREPLACE]PROCEDUREprocedure_name(参数)

IS|AS

[PRAGMAAUTONOMOUS,TRANACT1ON;]一声明自主事务处理。

[本地变量声明]

BEGIN

执行语句部分

[EXCEPTION]

错误处理部分

END[name];

CREATEORREPLACEPROCEDUREmy_procas—ORREPLACE

BEGIN

Dbmsoutput.putline("Hello,world?;

END;

执行存储过程

setserveroutputon

begin

myproc

end;

直接执行:

executemyproc

execmy_proc

权限:

表和视图具有SELECT,INSERT,UPDATE,DELETE这样的特权,而过

程具有EXECUTE特权。只有将EXECUTE特权给予用户,用户才可以

运行它。而将它给予PUBLIC用户,则全部用户都可以运行。

例子学习。测试库P_DOFORBAKo

带参数:

请见附件。

5)job:

留意只填what,interval.然后run

6)性能监控:

动态性能视图用于记录当前例程的活动。启动例程时,oracle会自

动建立动态性能视图;停止时,。racle会自动停止。须要留意,数

据字典信息是从数据文件中获得的,而动态性能视图信息是从SGA和

限制文件中取得。通过查询动态性能视图,一方面可以获得性能数据,

另一方面还可以取得磁盘和内存结构相关的其他信息。全部动态视图

都是以V_$开始的,oracle为每个动态性能视图供应了相应的同义

词。例如,V_$datafile的同义词为v$datafile;V_$SGA的同义词

通过查询V$FIXED_TABLE,KY显示全部动态性能视图。当

数据库处于不同状态时,可以访问的动态性能视图有所不同

常用:

dba_data_files:通常用来查询关于数据库文件的信息

dba_db_links:包括数据库中的全部数据库链路,也就是

databaselinkso

dba_extents:数据库中全部分区的信

dbafreespace:全部表空间中的自由分区

dba_indexs:关于数据库中全部索引的描

dba_ind_columns:在全部表及聚集上压缩索引的列

dba_objects:数据库中全部的对

dbarollbacksegs:回滚段的描述

dba_segments:全部数据库段分段的存储空

dba_synonyms:关于同义词的信息查询

dba_tables:数据库中全部数据表的描

dba_tabespaces:关于表空间的信息

dba_tab_columns:全部表描述,视图以及聚集的列

dba_tab_grants/privs:对象所授予的权限

dba_ts_quotas:全部用户表空间限

dba_users:关于数据的全部用户的信息

dba_views:数据库中全部视图的文本

二,DBA最常用的动态性能视图

v$datafile:数据库运用的数据文件信

v$librarycache:共享池中SQL语句的管理信息

v$lock:通过访问数据库会话,设置对象锁的全部信息

v$log:从限制文件中提取有关重做日志组的信息

v$logfile有关实例重置日志组文件名及其位置的信息

v$parameter:初始化参数文件中全部项的值

v$process:当前进程的信

v$ro11name:回滚段信息

v$rollstat联机回滚段统计信

v$rowcache:内存中数据字典活动/性能信息

v$session:有关会话的信

v$sesstat:在v$session中报告当前会话的统计信息

v$sqlarea:共享池中运用当前光标的统计信息,光标是一块内存区

域,有Oracle处理SQL语句时打开。

v$statname:在v$sesstat中报告各个统计的含义

v$sysstat:基于当前操作会话进行的系统统计

如内存运用:

select*fromv$PROCESS_MEMORY

6)表空间监控:

SELECTD.TABLESPACE_NAME,SPACE〃SUM_SPACE(M)〃,BLOCKS

SUM_BLOCKS,SPACE-NVL(FREESPACE,0)"USEDSPACE(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)

SPACE,SUM(BLOCKS)BLOCKS

FROMDBA_DATA_FILESGROUPBYTABLESPACE_NAME)D,

(SELECTTABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2)

FREE_SPACE

7)查看,杀死session

PL/SQLDeveloper-tools-sessions查看:

选中某个sessiong-右键选kill

8)备份(backup)实际就是数据的副本,备份的目的是为了防止不

可预料的数据丢失和应用错误。

转储(restore)是指当数据文件或限制文件出现损坏时,将已备份

的副本文件还原到原数据库的过程。

复原(recover)是指应用归档日志和重做日志事务更新副本文件到

数据文件失败前的状态。

Oracle的备份及复原有三种标准的模式,大致分为两大类,备份复

原(物理上的)以及导入导出(逻辑上的),而备份复原又可以依据数据

库的工作模式分为非归档模式(Nonarchive1og-style)和归档模式

(Archivelog-style),通常,我们把非归档模式称为冷备份,而相应

的把归档模式称为热备份

从OracleDatabase10g开始,供应了数据泵导出导入工具EXPDP和

IMPDPoEXPDP和IMPDP的速度要优于EXP和IMP。

EXP和IMP是客户端工具程序,它们既可以在客户端运用,也可以

在服务端运用。

EXPDP和TMPDP是服务端的工具程序,它们只能在Oracle服务器

端运用,不能在Oracle客户端运用。

IMP只能运用EXP导出文件,而不能运用EXPDP导出文件;IMPDP

只能运用EXPDP导出文件,而不能运用EXP导出文件

ORACLER平安性方面要留意的事情

在Oracle数据库中,涉及平安方面的内容包括:用户和模式,系统

权限,对象权限,数据库角色,访问粒度限制等

在实际应用中,用户应当避开运用sys,system等

1)建立用户:

2)修改表空间:

•3)向用户给予系统权限的基本语法格式如下:

-grantsystemprivilegetousername[withadmin

option];

•为了向数据库用户给予指定的系统权限,并且使其有实力将相

同的权限给予其他用户,则须要在用户的grant语句中包含

withadminoption子句。为用户给予任何系统权限时须要多

加当心,对adminoption权限更是如此。

•及给予权限相对应的是删除权限。从数据库用户中删除权限的

基本语法格式如下:

-revokesystem_privilegefromusername;

4)系统权限可以用来许可或限制DDL语句的执行,而对象权限可以

用来许可或阻挡DML语句的执行

•授予对象权限的语法格式如下:

-grantobjectprivilegeonobjectnametousername

[withgrantoption];

•为了授予数据库用户指定的对象权限,并同时给予其将相同的

权限给予其他用户的权限,须要在用户的grant语句中包括

withgrantoption。

•及此相对应的,取消数据库用户对象权限的基本语法格式如下:

-revokeobject_privilegeonobjectnamefrom

username;

5)数据库角色就是权限的命名集合。运用角色可以大大降低用户权

限的维护负担。角色可以是对象权限或系统权限的命名集合。数据库

管理员只需创建特定的数据库角色,使其反映组织或应用的平安权

限,就可以将这些角色给予用户

ORACLE应用运用介绍

下面介绍几个简单的思路:

1)UPDATEtablelouterSETcolumn=(SELECTexpressionFROM

table2innerWHEREouter.column=inner.column)利用此

方法可以利用其他表的data修改一个表的data

2)INSERTALL

whenempid>=7521then

INTOsal_historyVALUES(EMPID,HIREDATE,SAL)

whenmgr>=7839then

INTOmgr_historyVALUES(EMPID,MGR,SAL)

SELECTempnoEMPID,HIREDATE,SAL,MGR

FROMemp

WHEREempno<7654;

commit;一多表插入

3)邓琳/*+INDEX_FFS(tb_prd_prd_inst_999

IN_ACCT」D,IN_PRD」NST」D)*/*FROM也prd_prd_inst_999d-

联合索引

4)优化入门:

PL/SQLDeveloper-F5查看执行支配:

通常看操作,比如,大表是否有全表扫描等;cost这项也是主要要

看的,数字越小越好

a)以下会全表:

在索引列上运用NOT或者“<〉”;如如goods_no!=2,要改为

good_no>2orgood_no<2

对索引列运用函数或者计算-建立函数索引;

NOTIN操作;

通配符位于查询字符串的第一个字符;

ISNULL或者ISNOTNULL;

多列索引,但它的第一个列并没有被Where子句引用;

b)对于大表查询中的列应尽量避开进行诸如

To_char,to_date,to_number

等转换

c)假如索引是建立在多个列上,只有在它的第一个列(leading

column)被where子句引用时,

优化器才会选择运用该索引.这也是一条简单而重要的规则,当仅引

用索引的第二个列时,

优化器运用了全表扫描而忽视了索引

d)避开改变索引列的类型.:

当比较不同数据类型的数据时,ORACLE自动对列进行简单的类型转

换.

假设EMPNO是一个数值类型的索引列.

SELECT…FROMEMPWHEREEMPNO='123'

事实上,经过ORACLE类型转换,语句转化为:

SELECT…FROMEMPWHEREEMPNO=TO_NUMBER('123')

幸运的是,类型转换没有发生在索引列上,索引的用途没有被改变.

现在,假设EMPJYPE是一个字符类型的索引列.

SELECT…FROMEMPWHEREEMP_TYPE=123

这个语句被ORACLE转换为:

SELECT…FROMEMPWHERETONUMBER(EMPTYPE)=123

因为内部发生的类型转换,这个索引将不会被用到!为了避开

ORACLE对你的SQL进行隐式

的类型转换,最好把类型转换用显式表现出来.留意当字符和数值

比较时,ORACLE会优先

转换数值类型到字符类型

e)选择最有效率的表名依次(只在基于规则的优化器中有效):

ORACLE的解析器依据从右到左的依次处理FROM子句中的表名,FROM

子句中写在最终的表

(基础表drivingtable)将被最先处理,在FROM子句中包含多个表

的状况下,你必需选择记

录条数最少的表作为基础表。假如有3个以上的表连接查询,那就须

要选择交叉表(intersec

tiontable)作为基础表,交叉表是指那个被其他表所引用的表.

f)WHERE子句中的连接依次.:

ORACLE采纳自下而上的依次解析州ERE子句,依据这个原理,表之间

的连接必需写在其他WHERE条件之前,那些可以过滤掉最大数量记

录的条件必需写在WHERE子句的末尾.

G)系统视图,详细指的是

dba_tab_modifications/all_tab_modifications/user_tab_modif

ications,这几个视图收集了表自从上一次分析之后的DML累积次

数。-可查询以下信息:

图形化的工具有toado

H)io分析-每隔2秒检察一次,共执行20次

其中的%usr指的是用户进程运用的cpu资源的百分比,%sys指的是

系统资源运用cpu资源的百分比/wi。指的是等待io完成的百分比,

这是值得我们观注的一项,%idle即空闲的百分比。假如wio列的值

很大,如在35%以上,说明你的系统的10存在瓶颈,你的CPU花费

了很大的时间去等待10的完成。Idle很小说明系统CPU很忙。像我

的这个示例,可以看到wio平均值为3说明io没什么非凡的问题,

而我的idle值为50以上,说明我的cpu不忙。

i)当进行全表扫描时,CACHE提示能够将表全部缓存到内存中,这样

访问同一个表的用户可直接在内存中查找数据.比较适合数据量小

但常被访问的表,也可以建表时指定cache选项这样在第一次访问

时就可以对其缓存.NOCACHE则表示对已经指定了CACHE选项的表不

进行缓存

SELECT"+FULL(acct)CAHE(acct)*/acctidfromacct

A+ROWID(TABLE)*/

提示明确表明对指定表依据ROWID进行访问.

例如:

SELECT/*+ROWTD(BSEMPMS)*/*FROMBSEMPMSWHERE

ROWID>=AAAAAAAAAAAAAA,

ANDEMP_NO=,SCOTTJ;

J)索引失效分析-USABLE有效

查询dba_indexes表,其索引状态STATUS应当为VALID,假如是

DISABLE或者unusable都为不正常索引。

假如是分区索引,可用以下语句进行查询。如下:

selectt.IndexName,t.PartitionName,t.TablespaceName,

t.Status

from

温馨提示

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

评论

0/150

提交评论