监听模式
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
[[email protected] bin]$ lsnrctl stop
2.[[email protected] ~]$ 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.[[email protected] ~]$ dbstart
[[email protected] ~]$ ipcs -m (公共内存为空)
[[email protected] ~]$ ps -ef |grep ora_ (没有进程 证明没有启动成功)
4.[[email protected] ~]$ vi /etc/oratab
orcl:/u01/app/oracle/product/10.2.0/db_1:N (把N改称Y)
5.[[email protected] ~]$ dbstart
[[email protected] ~]$ ps -ef |grep ora_
[[email protected] ~]$ lsnrctl status
成功
oracle默认关闭 脚本
[[email protected] ~]$ dbshut(直接可用)
============================================
自编 脚本
关闭数据库
1.[[email protected] bin]$ cd $ORACLE_HOME/bin
[[email protected] bin]$ vi dbshutdown
#!/bin/bash
sqlplus -S sys/123456 as sysdba <<EOF
shutdown abort
exit
EOF
2.[[email protected] bin]$ chmod 755 dbshutdown
[[email protected] bin]$ ./dbshutdown
开启数据库
[[email protected] bin]$ vi dbopen
#!/bin/bash
sqlplus -S sys/123456 as sysdba <<EOF
startup
exit
EOF
[[email protected] bin]$ chmod 755 dbopen
[[email protected] 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
SQL> show parameter sga
-------------------------------------
share_pool:用于缓存SQL语句以及SQL语句中涉及的表定义(数据列以及数据类型
查看共享池
SQL> select pool,sum(bytes/1024/1024)from v$sgastat t where t.POOL is not null group by t.POOL
当执行一个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 shared_pool;
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;(显示执行计划进行调优)
SQL>select count(*) from dba_objects;
结果:
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 检查点 将数据从内存中写入磁盘
写进程就是将数据缓冲区里面的数据写到磁盘上
[[email protected] ~]$ 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; 启动