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;
发布评论