監聽模式
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,如需轉載請自行聯系原作者