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.