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