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.

發佈了43 篇原創文章 · 獲贊 30 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章