天天看點

腳本+執行個體

監聽模式

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