天天看点

脚本+实例

监听模式

dedicated 专有

shared    共享     dispatcher  调度 

dbca-->配置数据库-->共享

SQL> alter system set max_dispatchers=4 scope=both;

SQL> alter system set max_shared_servers=5  scope=both;

==============================================

oracle 默认提供了启动脚本 dbstart (但默认不可用)

1.关闭数据库,关闭监听

SQL> shutdown abort

[oracle@sq bin]$ lsnrctl stop

2.[oracle@sq ~]$ dbstart 报错

cd /u01/app/oracle/product/10.2.0/db_1/bin/

vi dbstart

ORACLE_HOME_LISTNER=/ade/vikrkuma_new/oracle 更为

ORACLE_HOME_LISTNER=$ORACLE_HOME

3.[oracle@sq ~]$ dbstart

[oracle@sq ~]$ ipcs -m (公共内存为空)

[oracle@sq ~]$ ps -ef |grep ora_  (没有进程 证明没有启动成功)

4.[oracle@sq ~]$ vi /etc/oratab 

orcl:/u01/app/oracle/product/10.2.0/db_1:N  (把N改称Y)

5.[oracle@sq ~]$ dbstart

[oracle@sq ~]$ ps -ef |grep ora_

[oracle@sq ~]$ lsnrctl status

成功

oracle默认关闭 脚本

[oracle@sq ~]$ dbshut(直接可用)

============================================

自编 脚本

关闭数据库

1.[oracle@sq bin]$ cd $ORACLE_HOME/bin

[oracle@sq bin]$ vi dbshutdown

#!/bin/bash

sqlplus -S sys/123456 as sysdba <<EOF

shutdown abort

exit

EOF

2.[oracle@sq bin]$ chmod 755 dbshutdown 

[oracle@sq bin]$ ./dbshutdown 

开启数据库

[oracle@sq bin]$ vi dbopen

startup

[oracle@sq bin]$ chmod  755 dbopen 

[oracle@sq bin]$ ./dbopen

===================================================

查看sga

SQL> show sga

显示SGA的所有设置值

SQL> select pool,sum(bytes/1024/1024)from v$sgastat t where t.POOL is not null group by t.POOL

    union

    select name as pool,sum(bytes/1024/1024) from v$sgastat s where s.POOL is null group by s.name;

SQL> show parameter pool;

SGA是动态的并且最大值由SGA_MAX_SIZE参数控制

SQL> show parameter sga

SGA动态分配时不会超过sga_target设置的值,可以动态修改这个值

SQL> alter system set sga_target=200M;(此参数为SGA自动调整的上限值)

修改sga_max_size(注意:不能直接修改此参数,此参数修改包含两个动作:1修改到参数文件2修改到内存{这种参数不能直接修改到内存只能先修改到参数文件})

SQL> alter system set sga_max_size=300M scope=spfile;

SQL> show parameter sga(发现值没有发生变化,需要重启生效)

SQL> startup force

-------------------------------------

share_pool:用于缓存SQL语句以及SQL语句中涉及的表定义(数据列以及数据类型

查看共享池

当执行一个sql语句,就会被记录,在生产平台上,很多sql语句会被很多人重复执行,所以,缓存了的sql语句,会被更快的执行

SQL> select count(*) from dba_objects;

SQL>  select sql_text from v$sqlarea where sql_text like '%dba_objects%';

刷新(清空)share pool

SQL> alter system flush shared_pool;

再次查看之前的命令没有了

select sql_text from v$sqlarea where sql_text like '%dba_objects%';

SQL> show parameter share

SQL> alter system set shared_pool_size=64m scope=both;(此参数可以直接修改到内存和参数文件不需要重启)

----------------------------------------------

Database buffer cache(作用:缓存数据)

Buffer cache存储从数据文件检索出来的数据块拷贝,提升数据检索速度,降低IO压力

SQL> alter system flush buffer_cache;

打开自动跟踪

SQL> set autotrace traceonly;

SQL>select count(*) from dba_objects;

结果:

 5184  consistent gets (逻辑读 内存)

 914  physical reads   (物理读 硬盘)

再次执行

SQL> set autotrace traceonly;(显示执行计划进行调优)

       5047  consistent gets(只有逻辑读 说明都是从内存读出的)

          0  physical reads

设置buffer_cache大小

 alter system set db_cache_size=100M;

9i后引入ASMM自动管理 SGA中的大小

-----------------------------

热点块块分析

Touch Count(TCH) :接触点计数

Oracle虽然是根据TCH值决定块应该在冷端还是热端,但当块的TCH值发生变化时,并不会立即改变它所处的位置。服务器进程需要读块进Buffer,它会从LRU链的尾端开始搜索自由块,如果发现搜索到的块的TCH值小于2,就重用这个块。如果TCH大于2,就把此块移到热端头部,并把它的TCH设为0。2这个数字是受隐含参数_db_aging_hot_criteria控制

Select file#,dbablk,lru_flag,tch from x$bh where obj=

(select object_id from dba_objects where object_name='F1' and owner='SYS');

---------------------------

Redo log buffer cache

Redo log buffer cache记录所有的关于数据块的变化

 A主要用于数据库恢复

 B 改变的数据都要依赖于redo日志条目

 C redo日志条目包含数据重建于重做信息

Sga自动管理

     只需设置sga_target参数,由oracle根据实际情况来分配

   手动管理(设置log_buffer下限值)

     SQL> alter system set log_buffer=73400320 scope=spfile;

=====================================

如何根据经验值设定SGA和PGA

SGA设置此大小的70%-80%

PGA设置此大小的20%-30%

SQL> select t.sga_size,t.estd_physical_reads from v$sga_target_advice t order by 1;

=================================

设置pga大小

SQL> select pga_target_for_estimate/1024/1024 PGAMB,pga_target_factor,

  2  estd_pga_cache_hit_percentage,estd_overalloc_count

  3  from v$pga_target_advice;

((estd_pga_cache_hit_percentage  列为pga命中率

estd_overalloc_count 列为0意思为消除过载))

SQL> alter system set pga_aggregate_target=100M scope=both;

SQL> show parameter pga;

后台进程

数据库写进程(DBWn)

checkpoint 检查点  将数据从内存中写入磁盘

写进程就是将数据缓冲区里面的数据写到磁盘上

[oracle@sq ~]$ ps -ef|grep ora_

oracle   16879     1  0 05:43 ?        00:00:04 ora_dbw0_orcl

查看数据写进程

SQL> show parameter db_writer_processes

SQL> alter system set db_writer_processes=3 scope=spfile;

SQL> alter system checkpoint;(更改检查点)

SQL> alter system set log_checkpoints_to_alert=true scope=both;

(把检查点信息记录到 alert文件中)

日志写进程(LGWR)

系统监控进程(SMON)

在oracle断电或shutdown abort关闭数据库后,重新启动数据库是将执行下面操作,前滚日志文件中的记录修改

进程监控进程(PMON)

在数据库运行过程中清理失败的进程

回滚事务 释放锁(行级锁。表级锁)

行级锁

在修改一行数据的时候

还没有保存,那么我在另外一个窗口在来修改这条记录,那么是不行的

所有的数据库和存储引擎都会自动加锁

SQL> create table t1 (id int);

SQL> insert into t1 values(1);

SQL> commit;

SQL> insert into t1 values(2);

新会话

SQL> drop table t1;(不能删除)

SQL> alter table t2 disable table lock; 取消表级锁

SQL> alter table t2 enable table lock;  启动

     本文转自陈继松 51CTO博客,原文链接:http://blog.51cto.com/chenjisong/1737379,如需转载请自行联系原作者