天天看點

oracle教育訓練第五天

1.oracle體系架構

執行個體和資料庫

oracle server :database + instance

database :data file ,control file ,redolog file

instance:an instance access a database

oracle memory:sga + pga

instance::sga + backgroud process

一個instance隻有一個sga,sga供所有session共享,随着instance啟動而配置設定,instance down,sga釋放

sga的基本元件

1.shared pool

共享池是對sql,pl/sql程式文法分析,編譯,執行的記憶體區域

2.database buffer cache

用于存儲從磁盤資料檔案中讀入的資料,為所有使用者共享

伺服器程序将讀入的資料儲存在資料緩沖區中,當後續的請求需要這些資料時可以在記憶體中找到,不需要從磁盤讀取。

資料緩沖區中被修改的資料塊(髒塊)由背景程序dbwr将其寫入磁盤。

3.redo log buffer

日志條目(redo entries),記錄了資料庫的所有修改資訊(包括DML和DDL),為的是資料庫修複,日志條目首先産生于日志緩沖區。

日志緩沖區較小,它是以位元組為機關的,他極其重要。

show parameter log_buffer

日志緩沖區的大小是固定的,如果要調整,隻能修改參數檔案,然後重新開機資料庫。不能由sga自動管理。

oracle程序:

user process

server process

background process

背景程序

smon系統監控程序

在執行個體崩潰後,oracle會自動恢複執行個體。另一個作用是釋放不再使用的臨時段。

pmon程序監控

1.當user process失敗時,清理出現故障的程序。釋放目前所有挂起的鎖定。釋放伺服器端使用的資源。

2.監控空閑會話是否達到門檻值

3.動态注冊監聽

dbwr資料寫入程序

1.将修改後的緩沖區資料寫入資料檔案中。寫髒快。

2.釋放data buffer空間

以下情況發生時,dbwr都會寫

1.ckpt發生 2.髒塊太多 3.db_buffer自由空間不足 4. 3s 5.表空間read only/offline/backup

commit不能觸發dbwr寫

lgwr寫日志條目

從redo log buffer 到  redo logfile(必須在dwnr寫髒塊之前寫入日志)

以下情況發生時,lgwr都會寫

1.commit 2.三分之一滿 3先于dbwr寫而寫 4. 3s

ckpt生成檢查點

通知或督促dwnr寫髒塊

完全檢查點:保證資料一緻性

增量檢查點:不斷更新控制檔案中的檢查點位置,當發生執行個體崩潰時。可以盡量縮短執行個體恢複時間。

pga

屬于oracle記憶體結構,存放使用者遊标,變量,控制,資料排序,存放hash值。與sga不同,pga是獨立的,非共享。

使用者與伺服器的連接配接方式

1.專用連接配接(dedicated)

2.共享連接配接(shared)

3.駐留連接配接池模式

執行個體管理及資料庫的啟動及關閉

instance

用于管理和通路database

instance在啟動階段讀取初始化參數檔案(init parameter files)

init parameter files

管理執行個體相關啟動參數,位置$oracle_home/dbs

pfile(parameter file)靜态參數檔案

1.文本檔案,通過編輯器修改參數

2.修改參數,下次重新開機執行個體才生效

3.pfile參數檔案 可以不在database server上

init+sid.ora

spifle(system parameter file)動态參數檔案

1.二進制檔案,不能通過編輯器修改

2.必須在database server的指定路徑下

spfile+sid.ora

靜态參數和動态參數

在spfile讀到記憶體後,有一部分參數是可以直接在記憶體中修改,并對目前instance立即生效,這樣的參數叫動态參數。

除了動态參數都是靜态參數。靜态參數修改spfile檔案。動态參數在instance關閉後失效,靜态參數在instance下次啟動後生效。

修改spfile檔案的方法

alter system set 參數=值 [scope =memory|spfile|both] --both是預設值

alter system reset 參數 --恢複預設值

優先spfile啟動,找不到spfile用pfile啟動

pfile和spfile可以互相生成

create pfile from spfile

create spfile from pfile

啟動的三個階段

nomount階段

讀取init parameter

mount階段

讀取控制檔案

open階段

加載資料檔案

檢查資料庫的一緻性(control file ,datafile,redo file的檢查點是否一緻,一緻的話正常打開,不一緻的話做media recover)

select * from v$datafile;

select * from v$datafile_header;

select *  from v$instance;

執行個體關閉

shutdown normal

拒絕新的連接配接,等待目前事務和會話結束,生成檢查點

shutdown transaction

拒絕新的連接配接,等待目前事務結束,生成檢查點

shutdown immediate

拒絕新的連接配接,未送出的事務復原,生成檢查點

shutdown abort(startup force)

事務不復原,不生成檢查點,下次啟動需要做instance recovery

密碼檔案

OS認證

 sqlplus / as sysdba

密碼檔案認證 sysdba權限

sqlplus sys/bsoft as sysdba

普通使用者登入

 sqlplus scott/bsoft

密碼密碼不是以檔案形式存放,由oracle保管在他的内部字典裡

控制檔案

1.定義資料庫目前實體狀态

2.維護資料的一緻性

3.是一個二進制檔案

4.在mount階段被讀取

5.記錄rman備份的中繼資料

redo日志

1.記錄資料庫的變化(DML,DDL)

2.用于資料庫的recovery

3.以組的方式管理redo file,最少兩組redo,循環使用

4.和資料檔案存放到不同的磁盤上,需要讀寫速度快的磁盤

日志切換

1.歸檔模式:将曆史日志連續的進行儲存

2.非歸檔:曆史日志被覆寫

3.産生checkpoint,通知redo log所對應的髒塊從data buffer寫入到datafile 并且更新控制檔案

歸檔日志 archivelog

歸檔和非歸檔的差別

1.歸檔模式下,切換日志時,備份曆史日志,可以進行冷備和熱備。可以實作完全恢複和不完全恢複(基于時間點)

2.歸檔會啟用arcn背景程序,占用磁盤空間

3.非歸檔隻能冷備,隻能恢複到最後一次備份狀态

管理undo

使用undo tablespace存放從datafiles讀出的資料塊的前鏡像

供以下情況使用

1.復原事務

2.讀一緻性:正在做DML操作的資料塊,事務結束前,其他使用者讀undo裡面的資料前鏡像

3.執行個體恢複:instance recover(undo ->rollback)

4.閃回技術 

檢查點checkpoint

checkpoint是資料庫的一個内部事件,檢查點激活時會觸發dbwr,将資料緩沖區中的髒資料寫入到資料檔案

1.保證資料庫的一緻性(保證記憶體和硬碟上的資料一緻)

2.縮短執行個體恢複時間,執行個體恢複要把記憶體中的髒資料寫入到硬碟,髒資料多的話,需要更長的恢複時間

執行個體恢複機制

1.重新構成記憶體崩潰時記憶體中未被儲存到磁盤的已commit事務

2.復原已被寫入到資料檔案的uncommit事務

2.oracle存儲架構

database->tablespaces->segments->extends->blocks

 表空間分類

1.permanent 永久表空間

2.undo撤銷表空間

3.temporary臨時表空間

建立表空間

create tablespace a datafile 'D:\a.dmp' size 10M

資料庫open下不能删除的表空間

1.system 2.active undo tablespace 3.default temporary tablespace 4. default tablespace

資料庫open下不能offline的表空間

1.system 2.active undo tablespace 3.default temporary tablespace 

檢視表空間空閑大小

select * from dba_free_space

segment段

1.表空間邏輯上對應多個段,實體上對應多個資料檔案,一個段比較大時,可以跨越多個資料檔案

2.建立一個表,oracle為表建立一個或多個段。在一個段中儲存該表的所有表資料(表資料不能跨段)

3.段中至少有一個初始區,當區不夠用時,為這個段配置設定新的區

一般一個單純的表就配置設定一個段,但表往往沒那麼單純。比如索引有索引段,分區表,每個分區有獨立的段,oracle 的大對象(blob,clob)會被分出過個段

oracle11gr2新的初始化參數deferred_segment_creation(僅适用未分區的heap table),此參數設定為true後,create table後并不會馬上配置設定segment,當第一個insert後才會配置設定segment

extend區

區是oracle進行存儲空間配置設定的最小機關,是由一系列邏輯上連續的oracle資料塊組成的邏輯存儲結構。

block資料塊

block是oracle進行存儲空間IO操作的最小機關

臨時表空間

用于排序,可以建立多個臨時表空間.但預設的臨時表空間隻能有一個.預設表空間不能offline和drop.如果沒有指定預設的臨時表空間.

oracle會使用system作為臨時表空間.,隻有temp表空間,是nologing.