2023年8月1日发(作者:)

Oracle 初学者教材

1.安装:

在安装之前要检查好变量,各方面条件符合后在安装,在62%时出错说明有一个链接没找到,设置出错,在/usr/bin/ 下将一个文件进行链接 ln -s libstdc++.so.6 libstdc++so.5

2.连接数据库的方法:

sqlplus username/password (一般用户)

sqlplus username/password as sysdba (sys,system)

1. 通过浏览器连接 字符界面

首先在服务器端开启服务:isqlplusctl start

IP:5560/isqlplus (/dba)

2.通过看、浏览器图形界面

开启服务 :emctl start dbconsole

IP:1158/em

3. windows 客户端连接

一般用户只需写用户名和密码,但SYS需要写标识符 ora10 as sysdba;

出现一系列问题:

1、 ORA-12541: TNS: 没有监听器

显而易见,服务器端的监听器没有启动,另外检查客户端IP地址或端口填写是否正确. 启动监听器:

$ lsnrctl start

C:lsnrctl start

2、 ORA-12500: TNS: 监听程序无法启动专用服务器进程

对于Windows而言,没有启动Oracle实例服务. 启动实例服务:

C:oradim –startup -sid myoracle

3、 ORA-12535: TNS: 操作超时

出现这个问题的原因很多,但主要跟网络有关. 解决这个问题,首先检查客户端与服务端的网络是否畅通,如果网络连通,则检查两端的防火墙是否阻挡了连接.

4、 ORA-12154: TNS: 无法处理服务名

检查输入的服务名与配置的服务名是否一致. 另外注意生成的本地服务名文件(Windows下如D:,Linux/Unix下$ORACLE_HOME/network/admin/)里每项服务的首行服务名称前不能有空格.

5、 ORA-12514: TNS: 监听进程不能解析在连接描述符中给出的 SERVICE_NAME

打开Net Manager,选中服务名称,检查服务标识栏里的服务名输入是否正确. 该服务名必须与服务器端监听器配置的全局数据库名一致.

6、 Windows下启动监听服务提示找不到路径

用命令或在服务窗口中启动监听提示找不到路径,或监听服务启动异常. 打开注册表,进入HKEY_LOCAL_MACHINE/SYSTEM/Current ControlSet/Services/OracleOraHome92TNSListener项,查看ImagePath字符串项是否存在,如果没有,设定值为D:oracleora92BINTNSLSNR,不同的安装路径设定值做相应的更改. 这种方法同样适用于Oracle实例服务,同上,找到如同HKEY_LOCAL_MACHINE/SYSTEM/Current ControlSet/Services/Oracle ServiceMYORACLE项,查看ImagePath字符串项是否存在,如果没有,则新建,设定值为d:

MYORACLE.

主要是要修改服务器下$ORACLE_HOME/network/admin/ 将HOSTNAME从服务器名改为IP地址,也要修改,

安装过程称修改口令,登入到数据库的名称和密码,而网路服务名只是登录到服务器的密码和账户.

3.用户信息:

解锁 scott账户

alter user scott account unlock identified by tiger;

查看用户信息:

select username,password fron dba_users;

修改密码

alter user scott identified by redhat;

疑问: alter不是修给表的结构吗?为何可以修改表的数据?

创建用户:

create user username identified by pwd default tablespace users Temporary TABLESPACE Temp;

用户授权

grant connect,resource,dba to business;

提交

commit;

3.用数据库脚本创建数据库

如上面所述利用sqlplus以username 用户登陆,输入:@创建数据库的脚本名称.sql回车,即可创建数据库中的表、视图、存储过程等. 注:以上的创建用户过程可以使用户的表中没有了系统自动产生的n多临时表.

1、按顺序安装如下包:中文支持中文输入法2、安装完成后点击 “系统-管理-语言” 选择“简体中文”,转换语言环境. 3、重启系统验证 ,还可以直接 ctrl+alt+backspac

但是安装顺序是:

1 , rpm -ivh

2 , rpm -ivh

3 , rpm -ivh

安装完重启就可以使用ctrl + space切换.

解压缩tar文件:

tar -zxvpf 文件名

Oracle10G可以采用下面的方法

修改数据库字符集的方法:

connect system as sysdba ;

shutdown immediate ;

startup mount ;

alter system enable restricted session ;

alter system set JOB_QUEUE_PROCESSES=0;

alter system set AQ_TM_PROCESSES=0;

alter database open ;

alter database character set internal_use ZHS16GBK ;

shutdown immediate ;

startup ;

解决方法2:修改/etc/sysconfig/iptables文件. 增加2行.

-A INPUT -m state --state NEW -m tcp -p tcp --dport 1158 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 5560 -j ACCEPT

面以Linux下的Oracle 10g为例,列出Oracle说明常用目录及其位置

ORACLE_BASE:

为Oracle目录结构的根,该环境变量为指定计算机上的所有Oracle产品目录如: $ORACLE_BASE=/u01/app/oracle

ORACLE_HOME:

当前Oralce软件安装的主目录,通常该环境变量为由ORACLE_BASE指示的路径下的一个目录

如:$ORACLE_HOME=$ORACLE_BASE/10g

$ORACLE_HOME=/u01/app/oracle/10g

完整的路径即为: ORACLE_HOME包含与Oracle软件运行有关的子目录和网络文件以及选定的组件等

$ORACLE_HOME目录中的常用子目录如下:

/bin --主要包含用于数据库管理的各种命令等,如impdb,expdp,emctl,emca等

/css --与Oracle Cluster Synchronization服务有关的文件

/dbs --存放数据库服务器端的参数文件Spfile,如,,密码文件orapworcl等

/demo --存放数据库实例模式的脚本等 如human_resources的相关脚本

/install --用于存储ORACLE安装后的端口号,iSQL*Plus以及Enterprise Manager

Database Control启动并登录的方式等,如该路径下的

/network/admin --有关监听器和以及等

/sysman/config --用于与Oracle Enterprise Management有关的端口管理等

/rdbms 是Oracle关系型数据库管理系统,管理Oracle数据库的数据管理访问等

admin目录

位于$ORACLE_BASE目录下,即$ORACLE_BASE/admin/$ORACLE_SID主要存储的为Oracle

后台进程产生的相关文件及数据库管理文件

以下是其下常用的子目录 /adump --存储审计文件的目录(需要首先设置audit_file_dest参数)

/bdump --后台进程跟踪文件(使用backgroud_dump_dest参数进行设置)

/cdump --存储核心堆积文件(使用core_dump_dest参数进行设置)

/create --存储用于创建数据库的脚本. 创建新的数据库时,DBCA将创建数据库的脚本放置在这个目录

/exp --建议存储使用Export使用程序或Oracle Data Pump创建的数据库导出文件的目录

/pfile --初始化参数文件

/udump --存储用户进程跟踪文件,使用user_dump_dest参数设置

oradata目录

Oracle数据库文件缺省存储该目录下,即$ORACLE_BASE/$ORACLE_SID/oradata,主要包括数据库的控制文件、数据文件、重做日志文件.

dbf文件对应数据库中每个表空间

ctl文件为控制文件

log文件对应重做日志文件组及其成员

flash_recovery_area目录

flash_recovery_area目录存储并管理与备份和恢复有关的文件. 它包含系统中每个数据库的子目录.

该目录可用于存储与恢复有关的文件,如控制文件、联机重做日志副本、归档日志、闪回日志以及Oracle数据库恢复管理器(RMAN)备份等.

查看及设置相关路径

--使用parameter查看

SQL> show parameter dump

oracle 的参数存放在$ORACLE_BASE/admin/pfile 修改配置文件,启动之后才会生效(静态的)

系统有参数存放在$ORACLE_HOME/dba/ 以二进制的形式存放,是动态的,通过sql命令可以修改并立即生效

Oracle10g默认是spfile先启动,若是修改了sga的参数或是什么的导致Oracle起不来,则可以

create spfile from pfile;

或是启动的时候 startup '/home/u01/app/oracle/product/10.2.0/db_1/dbs/'

SPfile 优先于pfile

修改参数:

altet system set 参数名=值 scope=参数2;

参数2取值有如下三种:

1. scope=spfile: 对参数的修改记录在服务器初始化参数文件中,修改后的参数在下次启动DB时生效. 适用于动态和静态初始化参数.

2. scope=memory: 对参数的修改记录在內存中,对于动态初始化参数的修改立即生效. 在重启DB后会丟失,会复原为修改前的参数值.

3. scope=both: 对参数的修改会同时记录在服务器参数文件和內存中,对于动态参数立即生效,对静态参数不能用这个选项.

如果使用了服务器参数文件,则在执行alter system语句时,scope=both是default的选项.

如果沒有使用服务器参数文件,而在执行alter system语句时指定scope=spfile|both都会出错.

Oracle中启动AutoTrace查看SQL执行计划,监控所执行的查询的性能:

通过以下方法可以把Autotrace的权限授予Everyone,

如果你需要限制Autotrace权限,可以把对public的授权改为对特定user的授权.

进入$ORACLE_HOME/rdbms/admin下 以dba身份进入,执行@utlxplan脚本,然后SQL> create

public synonym plan_table for plan_table; 同义词已创建

SQL> grant all on plan_table to public ; 授权

然后退出进入$ORACLE_HOME/sqlplus/admin 同样以dba身份进入,执行@plustrce脚本,

运行grant plustrace to public ; 这样即可使用AutoTrace

SQL> set autotrace on

SQL> set timing on

SQL>

关于Autotrace几个常用选项的说明:

SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式 SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告

SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息

SET AUTOTRACE ON ----------------- 包含执行计划和统计信息

SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询输出

SQL> set autotrace traceonly

SQL> select table_name from user_tables;

Autotrace执行计划的各列的涵义

ID_PLUS_EXP:每一步骤的行号

PARENT_ID_PLUS_EXP:每一步的Parent的级别号

PLAN_PLUS_EXP:实际的每步

OBJECT_NODE_PLUS_EXP:Dblink或并行查询时才会用到

AUTOTRACE Statistics常用列解释

db block gets

从buffer cache中读取的block的数量

consistent gets

从buffer cache中读取的undo数据的block的数量

physical reads

从磁盘读取的block的数量

redo size

DML生成的redo的大小

sorts (memory)

在内存执行的排序量

sorts (disk)

在磁盘上执行的排序量

约束:

记住:在用的dba_....的表时,在用where 语句时,where='';''里面的要用大写字母表示,存在表格的东西都是大写的.

外键可以是空,

dba_constraints 表记录了所有表约束的信息,dba_objects 是记录了所有表,东西的有关信息,可以通过object_id来查询所建立的表格:select object_id from dba_objects where table_type='TABLE' order by object_id;

dba_tables中记录了表的控制信息

SGA

一:SGA重要参数:

_page_sga

_sga

_max_size,sga的上限值

alter system set sga_max_size=522m scope=spfile(只能静态生效)

_target 该值在sga_max_size范围内活动

二:SGA主要包含6种缓存

1)db_buffer_cache

show parameter db_cache_size(下限,由ASMM自动管理)

select current_size from v$buffer_pool(查看当前实际大小)

如果通过alter system set db_cache_size=100m scope=both;这只是修改了db_cache_size 的下限(也就是db_cache_size 每次分配都要大于100m),其他的由ASMM自动管理的都一样!

如果要修改实际的shared_pool_size 则应该怎么办?因该同时缩小db_cache_size 的大小

然后扩大相应shared_pool_size的大小. 在pfile文件中用vi静态修改,然后用pfile文件启动!再生成spfile文件即可!

db_cache_size 实际的大小会通过sga_target的改变而改变,.

db_buffer_cache主要由三部分组成 select name,current_size from v$buffer_pool;

t pool:可以自定义的开启cache特性 alter table aa cache/nocache;

查看select table_name,cache,buffer_pool from dba_tables where tabale_name='';

pool :没有cache 特性,FTS之后数据然存放在MRU端

增加keep pool 内存:alter system set db_keep_cache_size=10m scope=both;

指定使用keep pool:create table aaa(n number) storage(buffer_pool keep) or alter table bbb

storage(buffer_pool keep);

e pool:分配较小的空间,永远丢弃.创建如keep pool

_nk_cache_size(分成不同的内存块,小的节省空间,大的加快速度)

alter system set db_16k_cache_size=10m ;但事实上会分配12m 因为sga内存按照颗粒度大小granule_size分配内存,若sga<1G granule_size=4M (分配时会按4M的整数倍分配)

SGA>1G granule_size=8M.查看:select bytes from v$sgainfo where name='Granule size';

2)share pool;

分为一种是library_cache(sql语句缓存的,第一次为hard parse,而如果library_cache中有则进行soft parse)

select pool,sum(bytes) from v$sgastat group by pool;

查看library cache 的大小: select sum(sharable_mem) from v$db_object_cache;

测试library_cache:

set timing on;

alter system flush shared_pool;清空缓存

利用绑定变量的方法可以大大减少sql语句的执行时间. PL/SQL自动进行了变量的绑定.

sql>varlable i char(6);

sql>exec:i:='95001'(对i进行绑定)

sql>select * from student where sno=:i;

另一种是:data Dictionary 数据字典缓存区,

select * from dict;

select sum(sharable_mem) from v$sqlarea;查看data dictionary cache 大小!

3)large_pool:大池是系统全局区中的一个可选内存区,但通常在系统中会进行配置,大池主要以下几种情况使用

1.共享服务器存储用户全局区(UGA)信息

2.启用并行进程

3.使用RMAN作备份恢复

大池由参数large_pool_size 设置,也可以由数据库自动管理

4)java_pool:Java 池也是系统全局区中的一个可选内存区,主要用于数据库中存储的Java程序的解析和执行,通常如果不需要在数据库中运行java程序,可以不启用就个内存区,但是如果在数据库创建时选择了安装JVM组件,那么这个池必须配置

5)streams_buffer 默认是没有分配的,show parameter streams_pool_size;

6)redo_log_buffer:重做日志缓冲区,(固定的,不能由ASMM自动分配)重做日志主要被用于提供数据的恢复功能,应用日志前滚(roll forward)就是数据库的基本恢复原理

使用重做日志缓冲区的目的是为了提高DML或者DDL语句的执行速度,减少日志产生带来的性能影响,减少系统日志I/O的频度.

通过select * from v$sga;可以看到四个结果:

fix size:(固定的),是dictionary cache 的一部分与其他部分附加内存信息会被实例的后台进程访问,在实例启动后被固定咋SGA中,是固定的!

variable size:是可变的,包含library_cache、java_pool,large pool,curdor area,control file content

等缓存,还包括尚未分配的sga_max_size -sga_target;

2023年8月1日发(作者:)

Oracle 初学者教材

1.安装:

在安装之前要检查好变量,各方面条件符合后在安装,在62%时出错说明有一个链接没找到,设置出错,在/usr/bin/ 下将一个文件进行链接 ln -s libstdc++.so.6 libstdc++so.5

2.连接数据库的方法:

sqlplus username/password (一般用户)

sqlplus username/password as sysdba (sys,system)

1. 通过浏览器连接 字符界面

首先在服务器端开启服务:isqlplusctl start

IP:5560/isqlplus (/dba)

2.通过看、浏览器图形界面

开启服务 :emctl start dbconsole

IP:1158/em

3. windows 客户端连接

一般用户只需写用户名和密码,但SYS需要写标识符 ora10 as sysdba;

出现一系列问题:

1、 ORA-12541: TNS: 没有监听器

显而易见,服务器端的监听器没有启动,另外检查客户端IP地址或端口填写是否正确. 启动监听器:

$ lsnrctl start

C:lsnrctl start

2、 ORA-12500: TNS: 监听程序无法启动专用服务器进程

对于Windows而言,没有启动Oracle实例服务. 启动实例服务:

C:oradim –startup -sid myoracle

3、 ORA-12535: TNS: 操作超时

出现这个问题的原因很多,但主要跟网络有关. 解决这个问题,首先检查客户端与服务端的网络是否畅通,如果网络连通,则检查两端的防火墙是否阻挡了连接.

4、 ORA-12154: TNS: 无法处理服务名

检查输入的服务名与配置的服务名是否一致. 另外注意生成的本地服务名文件(Windows下如D:,Linux/Unix下$ORACLE_HOME/network/admin/)里每项服务的首行服务名称前不能有空格.

5、 ORA-12514: TNS: 监听进程不能解析在连接描述符中给出的 SERVICE_NAME

打开Net Manager,选中服务名称,检查服务标识栏里的服务名输入是否正确. 该服务名必须与服务器端监听器配置的全局数据库名一致.

6、 Windows下启动监听服务提示找不到路径

用命令或在服务窗口中启动监听提示找不到路径,或监听服务启动异常. 打开注册表,进入HKEY_LOCAL_MACHINE/SYSTEM/Current ControlSet/Services/OracleOraHome92TNSListener项,查看ImagePath字符串项是否存在,如果没有,设定值为D:oracleora92BINTNSLSNR,不同的安装路径设定值做相应的更改. 这种方法同样适用于Oracle实例服务,同上,找到如同HKEY_LOCAL_MACHINE/SYSTEM/Current ControlSet/Services/Oracle ServiceMYORACLE项,查看ImagePath字符串项是否存在,如果没有,则新建,设定值为d:

MYORACLE.

主要是要修改服务器下$ORACLE_HOME/network/admin/ 将HOSTNAME从服务器名改为IP地址,也要修改,

安装过程称修改口令,登入到数据库的名称和密码,而网路服务名只是登录到服务器的密码和账户.

3.用户信息:

解锁 scott账户

alter user scott account unlock identified by tiger;

查看用户信息:

select username,password fron dba_users;

修改密码

alter user scott identified by redhat;

疑问: alter不是修给表的结构吗?为何可以修改表的数据?

创建用户:

create user username identified by pwd default tablespace users Temporary TABLESPACE Temp;

用户授权

grant connect,resource,dba to business;

提交

commit;

3.用数据库脚本创建数据库

如上面所述利用sqlplus以username 用户登陆,输入:@创建数据库的脚本名称.sql回车,即可创建数据库中的表、视图、存储过程等. 注:以上的创建用户过程可以使用户的表中没有了系统自动产生的n多临时表.

1、按顺序安装如下包:中文支持中文输入法2、安装完成后点击 “系统-管理-语言” 选择“简体中文”,转换语言环境. 3、重启系统验证 ,还可以直接 ctrl+alt+backspac

但是安装顺序是:

1 , rpm -ivh

2 , rpm -ivh

3 , rpm -ivh

安装完重启就可以使用ctrl + space切换.

解压缩tar文件:

tar -zxvpf 文件名

Oracle10G可以采用下面的方法

修改数据库字符集的方法:

connect system as sysdba ;

shutdown immediate ;

startup mount ;

alter system enable restricted session ;

alter system set JOB_QUEUE_PROCESSES=0;

alter system set AQ_TM_PROCESSES=0;

alter database open ;

alter database character set internal_use ZHS16GBK ;

shutdown immediate ;

startup ;

解决方法2:修改/etc/sysconfig/iptables文件. 增加2行.

-A INPUT -m state --state NEW -m tcp -p tcp --dport 1158 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 5560 -j ACCEPT

面以Linux下的Oracle 10g为例,列出Oracle说明常用目录及其位置

ORACLE_BASE:

为Oracle目录结构的根,该环境变量为指定计算机上的所有Oracle产品目录如: $ORACLE_BASE=/u01/app/oracle

ORACLE_HOME:

当前Oralce软件安装的主目录,通常该环境变量为由ORACLE_BASE指示的路径下的一个目录

如:$ORACLE_HOME=$ORACLE_BASE/10g

$ORACLE_HOME=/u01/app/oracle/10g

完整的路径即为: ORACLE_HOME包含与Oracle软件运行有关的子目录和网络文件以及选定的组件等

$ORACLE_HOME目录中的常用子目录如下:

/bin --主要包含用于数据库管理的各种命令等,如impdb,expdp,emctl,emca等

/css --与Oracle Cluster Synchronization服务有关的文件

/dbs --存放数据库服务器端的参数文件Spfile,如,,密码文件orapworcl等

/demo --存放数据库实例模式的脚本等 如human_resources的相关脚本

/install --用于存储ORACLE安装后的端口号,iSQL*Plus以及Enterprise Manager

Database Control启动并登录的方式等,如该路径下的

/network/admin --有关监听器和以及等

/sysman/config --用于与Oracle Enterprise Management有关的端口管理等

/rdbms 是Oracle关系型数据库管理系统,管理Oracle数据库的数据管理访问等

admin目录

位于$ORACLE_BASE目录下,即$ORACLE_BASE/admin/$ORACLE_SID主要存储的为Oracle

后台进程产生的相关文件及数据库管理文件

以下是其下常用的子目录 /adump --存储审计文件的目录(需要首先设置audit_file_dest参数)

/bdump --后台进程跟踪文件(使用backgroud_dump_dest参数进行设置)

/cdump --存储核心堆积文件(使用core_dump_dest参数进行设置)

/create --存储用于创建数据库的脚本. 创建新的数据库时,DBCA将创建数据库的脚本放置在这个目录

/exp --建议存储使用Export使用程序或Oracle Data Pump创建的数据库导出文件的目录

/pfile --初始化参数文件

/udump --存储用户进程跟踪文件,使用user_dump_dest参数设置

oradata目录

Oracle数据库文件缺省存储该目录下,即$ORACLE_BASE/$ORACLE_SID/oradata,主要包括数据库的控制文件、数据文件、重做日志文件.

dbf文件对应数据库中每个表空间

ctl文件为控制文件

log文件对应重做日志文件组及其成员

flash_recovery_area目录

flash_recovery_area目录存储并管理与备份和恢复有关的文件. 它包含系统中每个数据库的子目录.

该目录可用于存储与恢复有关的文件,如控制文件、联机重做日志副本、归档日志、闪回日志以及Oracle数据库恢复管理器(RMAN)备份等.

查看及设置相关路径

--使用parameter查看

SQL> show parameter dump

oracle 的参数存放在$ORACLE_BASE/admin/pfile 修改配置文件,启动之后才会生效(静态的)

系统有参数存放在$ORACLE_HOME/dba/ 以二进制的形式存放,是动态的,通过sql命令可以修改并立即生效

Oracle10g默认是spfile先启动,若是修改了sga的参数或是什么的导致Oracle起不来,则可以

create spfile from pfile;

或是启动的时候 startup '/home/u01/app/oracle/product/10.2.0/db_1/dbs/'

SPfile 优先于pfile

修改参数:

altet system set 参数名=值 scope=参数2;

参数2取值有如下三种:

1. scope=spfile: 对参数的修改记录在服务器初始化参数文件中,修改后的参数在下次启动DB时生效. 适用于动态和静态初始化参数.

2. scope=memory: 对参数的修改记录在內存中,对于动态初始化参数的修改立即生效. 在重启DB后会丟失,会复原为修改前的参数值.

3. scope=both: 对参数的修改会同时记录在服务器参数文件和內存中,对于动态参数立即生效,对静态参数不能用这个选项.

如果使用了服务器参数文件,则在执行alter system语句时,scope=both是default的选项.

如果沒有使用服务器参数文件,而在执行alter system语句时指定scope=spfile|both都会出错.

Oracle中启动AutoTrace查看SQL执行计划,监控所执行的查询的性能:

通过以下方法可以把Autotrace的权限授予Everyone,

如果你需要限制Autotrace权限,可以把对public的授权改为对特定user的授权.

进入$ORACLE_HOME/rdbms/admin下 以dba身份进入,执行@utlxplan脚本,然后SQL> create

public synonym plan_table for plan_table; 同义词已创建

SQL> grant all on plan_table to public ; 授权

然后退出进入$ORACLE_HOME/sqlplus/admin 同样以dba身份进入,执行@plustrce脚本,

运行grant plustrace to public ; 这样即可使用AutoTrace

SQL> set autotrace on

SQL> set timing on

SQL>

关于Autotrace几个常用选项的说明:

SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式 SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告

SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息

SET AUTOTRACE ON ----------------- 包含执行计划和统计信息

SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询输出

SQL> set autotrace traceonly

SQL> select table_name from user_tables;

Autotrace执行计划的各列的涵义

ID_PLUS_EXP:每一步骤的行号

PARENT_ID_PLUS_EXP:每一步的Parent的级别号

PLAN_PLUS_EXP:实际的每步

OBJECT_NODE_PLUS_EXP:Dblink或并行查询时才会用到

AUTOTRACE Statistics常用列解释

db block gets

从buffer cache中读取的block的数量

consistent gets

从buffer cache中读取的undo数据的block的数量

physical reads

从磁盘读取的block的数量

redo size

DML生成的redo的大小

sorts (memory)

在内存执行的排序量

sorts (disk)

在磁盘上执行的排序量

约束:

记住:在用的dba_....的表时,在用where 语句时,where='';''里面的要用大写字母表示,存在表格的东西都是大写的.

外键可以是空,

dba_constraints 表记录了所有表约束的信息,dba_objects 是记录了所有表,东西的有关信息,可以通过object_id来查询所建立的表格:select object_id from dba_objects where table_type='TABLE' order by object_id;

dba_tables中记录了表的控制信息

SGA

一:SGA重要参数:

_page_sga

_sga

_max_size,sga的上限值

alter system set sga_max_size=522m scope=spfile(只能静态生效)

_target 该值在sga_max_size范围内活动

二:SGA主要包含6种缓存

1)db_buffer_cache

show parameter db_cache_size(下限,由ASMM自动管理)

select current_size from v$buffer_pool(查看当前实际大小)

如果通过alter system set db_cache_size=100m scope=both;这只是修改了db_cache_size 的下限(也就是db_cache_size 每次分配都要大于100m),其他的由ASMM自动管理的都一样!

如果要修改实际的shared_pool_size 则应该怎么办?因该同时缩小db_cache_size 的大小

然后扩大相应shared_pool_size的大小. 在pfile文件中用vi静态修改,然后用pfile文件启动!再生成spfile文件即可!

db_cache_size 实际的大小会通过sga_target的改变而改变,.

db_buffer_cache主要由三部分组成 select name,current_size from v$buffer_pool;

t pool:可以自定义的开启cache特性 alter table aa cache/nocache;

查看select table_name,cache,buffer_pool from dba_tables where tabale_name='';

pool :没有cache 特性,FTS之后数据然存放在MRU端

增加keep pool 内存:alter system set db_keep_cache_size=10m scope=both;

指定使用keep pool:create table aaa(n number) storage(buffer_pool keep) or alter table bbb

storage(buffer_pool keep);

e pool:分配较小的空间,永远丢弃.创建如keep pool

_nk_cache_size(分成不同的内存块,小的节省空间,大的加快速度)

alter system set db_16k_cache_size=10m ;但事实上会分配12m 因为sga内存按照颗粒度大小granule_size分配内存,若sga<1G granule_size=4M (分配时会按4M的整数倍分配)

SGA>1G granule_size=8M.查看:select bytes from v$sgainfo where name='Granule size';

2)share pool;

分为一种是library_cache(sql语句缓存的,第一次为hard parse,而如果library_cache中有则进行soft parse)

select pool,sum(bytes) from v$sgastat group by pool;

查看library cache 的大小: select sum(sharable_mem) from v$db_object_cache;

测试library_cache:

set timing on;

alter system flush shared_pool;清空缓存

利用绑定变量的方法可以大大减少sql语句的执行时间. PL/SQL自动进行了变量的绑定.

sql>varlable i char(6);

sql>exec:i:='95001'(对i进行绑定)

sql>select * from student where sno=:i;

另一种是:data Dictionary 数据字典缓存区,

select * from dict;

select sum(sharable_mem) from v$sqlarea;查看data dictionary cache 大小!

3)large_pool:大池是系统全局区中的一个可选内存区,但通常在系统中会进行配置,大池主要以下几种情况使用

1.共享服务器存储用户全局区(UGA)信息

2.启用并行进程

3.使用RMAN作备份恢复

大池由参数large_pool_size 设置,也可以由数据库自动管理

4)java_pool:Java 池也是系统全局区中的一个可选内存区,主要用于数据库中存储的Java程序的解析和执行,通常如果不需要在数据库中运行java程序,可以不启用就个内存区,但是如果在数据库创建时选择了安装JVM组件,那么这个池必须配置

5)streams_buffer 默认是没有分配的,show parameter streams_pool_size;

6)redo_log_buffer:重做日志缓冲区,(固定的,不能由ASMM自动分配)重做日志主要被用于提供数据的恢复功能,应用日志前滚(roll forward)就是数据库的基本恢复原理

使用重做日志缓冲区的目的是为了提高DML或者DDL语句的执行速度,减少日志产生带来的性能影响,减少系统日志I/O的频度.

通过select * from v$sga;可以看到四个结果:

fix size:(固定的),是dictionary cache 的一部分与其他部分附加内存信息会被实例的后台进程访问,在实例启动后被固定咋SGA中,是固定的!

variable size:是可变的,包含library_cache、java_pool,large pool,curdor area,control file content

等缓存,还包括尚未分配的sga_max_size -sga_target;