天天看點

oracle 11g 資料庫結構

1. 表空間與資料檔案

Oracle資料庫的表空間tablespace是一個邏輯上的存儲概念,如我們建立一個表,必須要指明将表存在哪個表空間中。實際上的資料實體存儲在硬碟上的檔案中,我們稱它叫資料檔案data file。一個tablespace可以由一個或多個data file組成,當然一個data file隻能隸屬于一個tablespace(不能劈腿哦)。

更詳細點。

tablespace由多個段sengment組成,oracle把占空間的對象(如表,索引,簇cluster等)統一稱為segment。Segment是由多個區間extent構成,extent又有多個塊block組成,block的編号位址相鄰。是以block是oracle基本的存儲單元。

datafile也是由稱為塊單元組成,但是他們是系統塊os block,windows總的os block大小一般是2048KB。

oracle block一般是os block的倍數,如8192KB。

SQL> show parameter db_block_size

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

db_block_size integer 8192

  • SYSTEM表空間用于存放系統内部表和資料字典的資料。
  • SYSAUX表空間是11g以後新增的,主要用于存儲系統内部常用樣例使用者的對象,如CRM使用者的表和索引等。
  • UNDOTBS1撤銷表空間,用于存儲修改前的資料。
  • USERS表空間,使用者可以在這個空間上建立對象。
  • TEMP臨時表空間,系統用于臨時存放資料(如排序),處理完後即可釋放。

SQL> select file_name, tablespace_name from dba_data_files;

FILE_NAME TABLESPACE_NAME

-------------------------------------------------------------------------------- ------------------------------

C:\ORACLE\ORADATA\ORCL\USERS01.DBF USERS

C:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF UNDOTBS1

C:\ORACLE\ORADATA\ORCL\SYSAUX01.DBF SYSAUX

C:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF SYSTEM

C:\ORACLE\ORADATA\ORCL\EXAMPLE01.DBF EXAMPLE

SQL> select file_name, tablespace_name from dba_temp_files;

FILE_NAME TABLESPACE_NAME

-------------------------------------------------------------------------------- ------------------------------

C:\ORACLE\ORADATA\ORCL\TEMP01.DBF TEMP

2. 控制檔案control file

我們平時所指的oracle資料庫,主要由兩部分組成,資料庫database和執行個體instance。

database就是實體硬碟上我們看得到的各種檔案,如datafile,control file,redo log file,它們儲存着所有資料。

instance則是由記憶體(SGA)和程序組成。當oracle啟動時,它将資料加載到記憶體中,然後通過各種程序(PMON,SMON,DBWR,LGWR,CKPT)同database保持一緻(讀寫資料)。是以我們操作oralce實際上是在和instance打交道,然後由它來更新資料庫。

其中比較重要的是控制檔案control file,它是存儲着oracle instance資訊,datafile,log file資訊的内部二進制檔案。

出于安全考慮,control file不止1個,它們儲存着相同的内容,如果一個control file壞了,咱們還有備份。建議不要将所有的control file放在一個地方。

資料庫啟動次序:讀取初始化參數檔案SPFILE -> 為系統全局區(SGA)配置設定記憶體 -> 讀取control file,然後找到資料檔案和日志檔案并打開使用。

SQL> select name, status from v$controlfile;

NAME STATUS

-------------------------------------------------------------------------------- -------

C:\ORACLE\ORADATA\ORCL\CONTROL01.CTL

C:\ORACLE\ORADATA\ORCL\CONTROL02.CTL

C:\ORACLE\ORADATA\ORCL\CONTROL03.CTL

3. 日志檔案

日志檔案分為重做日志檔案(redo log file)和歸檔日志檔案(archive log file)。

SQL> select group#, status, member from v$logfile;

GROUP# STATUS MEMBER

---------- ------- --------------------------------------------------------------------------------

3 C:\ORACLE\ORADATA\ORCL\REDO03.LOG

2 C:\ORACLE\ORADATA\ORCL\REDO02.LOG

1 C:\ORACLE\ORADATA\ORCL\REDO01.LOG

redo log fiel有多個組group構成。一個group中能包括不止一個log file,日志資訊是寫到group的每個logfile中,是以一個group中的log file存儲着一樣的資訊。當一個group寫滿之後就轉到下一個group中,稱之為日志切換。

當所有group都寫滿了後,就重頭開始從第一個group開始,原來的内容将被覆寫丢失。如果不想被丢失,可以采用歸檔模式,即将資料儲存到archive log file中。歸檔模式會給系統帶來一定的性能問題。

檢視database采用哪種模式:

SQL> select dbid,name,log_mode from v$database;

DBID NAME LOG_MODE

---------- --------- ------------

1232416663 ORCL NOARCHIVELOG

歸檔日志路徑由SPFILE的log_archive_dest參數确定。

SQL> show parameter log_archive_dest;

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

log_archive_dest string

log_archive_dest_1 string

log_archive_dest_10 string

log_archive_dest_2 string

log_archive_dest_3 string

log_archive_dest_4 string

log_archive_dest_5 string

log_archive_dest_6 string

log_archive_dest_7 string

log_archive_dest_8 string

log_archive_dest_9 string

log_archive_dest_state_1 string enable

log_archive_dest_state_10 string enable

log_archive_dest_state_2 string enable

log_archive_dest_state_3 string enable

log_archive_dest_state_4 string enable

log_archive_dest_state_5 string enable

log_archive_dest_state_6 string enable

log_archive_dest_state_7 string enable

log_archive_dest_state_8 string enable

log_archive_dest_state_9 string enable

警告日志檔案alert_sid.log儲存着例行的資訊和錯誤資訊,它的路經是:

SQL> select value from v$parameter where name='background_dump_dest';

VALUE

--------------------------------------------------------------------------------

c:\oracle\diag\rdbms\orcl\orcl\trace

SQL> show parameter background_dump_dest;

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

background_dump_dest string c:\oracle\diag\rdbms\orcl\orcl\trace

使用者跟蹤檔案是oracle出現異常時自動建立的文本檔案,它與警告檔案一起構成了完整的故障資訊描述體系。

SQL> select value from v$parameter where name='user_dump_dest';

VALUE

--------------------------------------------------------------------------------

c:\oracle\diag\rdbms\orcl\orcl\trace

SQL> show parameter user_dump_dest;

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

user_dump_dest string c:\oracle\diag\rdbms\orcl\orcl\trace

4. SGA

系統全局區(system global area)主要由3個區組成。

  • 資料高速緩存區(data buffer cache):存放着系統最近使用的資料塊。它有3種類型:髒區(dirty buffers, 已經修改需要寫回資料檔案的資料塊),自由區(free buffers, 不包含任何資料并可以寫入的區),保留區(pinend buffers, 包含正在處理的或明確定留的區)。
  • 重做日志緩沖區(redolog buffer): 儲存日志資訊,并在檢查點checkpoint或buffer達到一定塊數時由程序LGWR寫入重做日志檔案。
  • 共享池(shared pool):用于存儲sql,pl/sql,package,dictionary,lock,character set等。分為library cache和dictionary cache。
  • 大池(large pool):可選的,可供備份和恢複操作。

4. 背景程序

  • DBWn資料庫寫入器: 在SPFILE中的DB_WRITER_PROCESSES參數設定程序數目。
  • CKPT檢查點參數:可選, 重做日志切換switch時産生。修改SPFILE中的CHECKPOINT_PROCESS參數為TRUE來啟動檢查點程序。
  • LGRW日志寫入器
  • SMON系統監控器:執行恢複必須的程序。
  • PMON程序監控器:清除實效的使用者程序,釋放資源。
  • ARCH歸檔器: 可選,參數LOG_ARCHIVE_MAX_PROCESSES用來設定程序數。
  • LCKn鎖:可選,并行伺服器下可出現多個程序以便于通信。
  • RECO恢複器:分布式資料庫下的可選程序。
  • Dnnn排程: 共享模式下的可選程序。一般多種通信協定情況下,每種協定至少建立一個排程程序(像路由,負責使用者與伺服器間的連接配接)。
  • SNPn快照程序: 可啟動多個,參數JOB_QUEUE_PROCESS。
  • Pnnn并行查詢程序: 參數PARALLEL_MIN_SERVERS設定啟動數量。

oracle不同版本的背景程序數目不同,11g有200多個。

SQL> select name, description from v$bgprocess;

NAME DESCRIPTION

----- ----------------------------------------------------------------

PMON process cleanup

VKTM Virtual Keeper of TiMe process

DIAG diagnosibility process

.........................................

212 rows selected

5. 程式全局區PGA

PGA: process global area或者 program global area,儲存私有資訊和正在使用的作業系統資源資訊。

SQL> show parameter pga

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

pga_aggregate_target big integer 0

6. 資料字典

資料字典的格式(字首)

  • USER_: 記錄使用者自己的對象
  • ALL_: 使用者可以通路的所有對象
  • DBA_: 資料庫的所有對象
  • V$_: 動态視圖
  • GV_:分布式環境下的同台視圖(global V$)

基本的資料庫字典

DBA_TABLES(=TABS) 所有表
DBA_TAB_COLUMNS(=COLS) 所有表的列資訊
DBA_VIEWS 所有視圖
DBA_SYNONYMS(=SYN) 所有同義詞
DBA_SEQUENCES(=SEQ) 序列
DBA_CONSTRAINTS 限制
DBA_INDEXS(=IND) 索引的簡要資訊
DBA_IND_COLUMNS 索引的列資訊
DBA_TRIGGERS 觸發器
DBA_SOURCE 存儲過程
DBA_SEGMENTS
DBA_EXTENTS 區間
DBA_OBJECTS 所有對象
CAT 目前使用者能通路的所有基表
TAB 目前使用者建立的表,視圖,同義詞
DICT 構成資料字典的所有表資訊

按資料庫元件分類的資料字典

資料庫 V$DATABASE
表空間 DBA_TABLESPACES
DBA_DATA_FILES
DBA_FREE_SPACE
控制檔案 V$CONTROLFILE
V$PARAMETER
V$CONTROLFILE_RECORD_SECTION
資料檔案 DBA_DATA_FILES
V$DATAFILE
V$FILESTAT
V$DATAFILE_HEADER
DBA_SEGMENTS
擴充 DBA_EXTENTS
日志 V$THREAD
V$LOG
V$LOGFILE
歸檔狀态 V$DATABASE
V$LOG
V$ARCHIVED_LOG
V$ARCHIVED_DEST
執行個體 V$INSTANCE
V$PARAMETER
V$SYSTEM_PARAMETER
記憶體狀态 V$SGA
V$SGASTAT
V$DB_OBJECT_CACHE
V$SQL
V$SQLTEXT
V$SQLAREA
背景程序 V$BGPROCESS
V$SESSION

常用動态性能視圖

V$FIXED_TABLE 列出目前發行的固定對象的說明
V$INSTANCE 顯示目前執行個體的狀态
V$LATCH 列出鎖存器的統計資料
V$LIBRARYCACHE 有關庫緩存性能的統計資料
V$ROLLSTAT 列出聯機的復原段的名稱
V$ROWCACHE 顯示活動資料字典的統計
V$SGA 有關系統全局區的總結資訊
V$SGASTAT 有關系統全局區的詳細資訊
V$SORT_USAGE 顯示臨時段的大小及回話,可以看出哪些程序在進行硬碟的排序操作
V$SQLAREA 列出共享區的sql使用統計(每個sql占一行),包括sql語句在記憶體,分析及執行準備的統計文本限制在1000個字元内
V$SQLTEXT 在sga中屬于共享sql遊标的sql語句内容
V$SYSSTAT 包括基本的執行個體統計資訊
V$SYSTEM_EVENT 包括一個事件的總等待時間
V$WAITSTAT 列出塊競争統計資料

轉載位址http://space.itpub.net/10336955/viewspace-659689