簡述oracle資料庫結構

jane_pop發表於2014-09-04
我們知道,oracle server是由oracle instance和oracle database兩大部分組成,下面我們簡述oracle
database的結構:
oracle資料庫由作業系統檔案組成,這些檔案為資料庫資訊提供實際物理儲存。
oracle資料庫主要物理檔案可分為三類:
(1)資料檔案
資料檔案儲存的是oracle資料庫的實際資料,包括各個表,索引,檢視等。資料檔案有三個特性:
.一個資料檔案只能屬於一個資料庫
.資料庫中的資料檔案可以設定成自動增長,就是說,當資料庫的空間用完後,資料庫的資料檔案就會自動增長,比如原來1G的資料檔案自動變成2G的資料檔案。
.一個或多個資料檔案組成了oracle資料庫的一個邏輯單位---tablespace
資料檔案分兩種:永久資料檔案和臨時資料檔案
我們可以透過以下命令來檢視永久資料檔案的名稱大小:
SYS@orcl 04-SEP-14>col name for a50
SYS@orcl 04-SEP-14>col bytes/1024/1024||'MB' for a25
SYS@orcl 04-SEP-14>select name,bytes/1024/1024||'MB' from v$datafile;

NAME                                               BYTES/1024/1024||'MB'
-------------------------------------------------- -------------------------
/datafile/system01.dbf                             680MB
/datafile/sysaux01.dbf                             520MB
/datafile/undotbs01.dbf                           60MB
/datafile/users01.dbf                               5MB
/datafile/example01.dbf                          100MB
/u01/app/datafile/test01.dbf                    100MB
/datafile/hh01.dbf                                  10MB
/u01/app/datafile/goods01.dbf                 50MB

8 rows selected.

可以透過如下命令檢視臨時資料檔案名稱和大小:
SYS@orcl 04-SEP-14>col name for a50
SYS@orcl 04-SEP-14>col bytes/1024/1024||'MB' for a25
SYS@orcl 04-SEP-14>select name,bytes/1024/1024||'MB' from v$tempfile;


NAME                                               BYTES/1024/1024||'MB'
-------------------------------------------------- -------------------------
/u01/app/oracle/oradata/orcl/temp01.dbf            20MB

(2)控制檔案
每個資料庫都有控制檔案,控制檔案對於一個資料庫來說是十分重要的。它是一個二進位制檔案,
一般都很小,十幾兆到幾十兆。控制檔案中記錄的是資料庫物理結構的資訊,主要有:
.資料庫名稱
.資料檔案,重做日誌檔案的名稱和儲存位置
.資料庫建立時間戳
.表空間資訊
.備份檔案的資訊等
oracle可以使用多重資料檔案,也就是可以存在多個控制檔案的映象,這是保護資料庫的一種方法。
如果資料庫同時維護三個控制檔案,只要其中一個控制檔案損壞了資料庫都無法mount,為了讓
資料庫儘快開啟供使用者連線,較好的解決方法是把有問題的控制檔案刪除,把沒有問題的控制檔案
複製一份到原來的位置就可以了。當oracle資料庫的例項啟動的時候,它就會透過控制檔案來識別,
要想執行資料庫的一些操作,必須要知道是哪些資料檔案和重做日誌檔案以及這些檔案的位置。當
資料庫的物理結構發生改變時,比如增加了一個資料檔案或日誌檔案,增加了一個表空間等,控制
檔案就會自動更新記錄這些變化。
可以透過以下命令查詢控制檔案的資訊:
SYS@orcl 04-SEP-14>select name,block_size,file_size_blks from v$controlfile;


NAME                                               BLOCK_SIZE FILE_SIZE_BLKS
-------------------------------------------------- ---------- --------------
/u01/app/controlfile/control01.ctl                      16384            616
/u01/app/oracle/flash_recovery_area/orcl/control02      16384            616
.ctl
/u01/app/oracle/flash_recovery_area/orcl/control03      16384            616
.ctl
也可以透過show parameter 快速查詢控制檔案的存放路徑和數量:
SYS@orcl 04-SEP-14>show parameter control_files;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      /u01/app/controlfile/control01
                                                 .ctl, /u01/app/oracle/flash_re
                                                 covery_area/orcl/control02.ctl
                                                 , /u01/app/oracle/flash_recove
                                                 ry_area/orcl/control03.ctl


如果想要檢視控制檔案裡到底存放了哪些資訊可以檢視v$controlfile_record_section:
SYS@orcl 04-SEP-14>col type for a30
SYS@orcl 04-SEP-14>select type,record_size from v$controlfile_record_section;

TYPE                           RECORD_SIZE
------------------------------ -----------
DATABASE                               316
CKPT PROGRESS                         8180
REDO THREAD                            256
REDO LOG                                72
DATAFILE                               520
FILENAME                               524
TABLESPACE                              68
TEMPORARY FILENAME                      56
RMAN CONFIGURATION                    1108
LOG HISTORY                             56
OFFLINE RANGE                          200


TYPE                           RECORD_SIZE
------------------------------ -----------
ARCHIVED LOG                           584
BACKUP SET                              40
BACKUP PIECE                           736
BACKUP DATAFILE                        200
BACKUP REDOLOG                          76
DATAFILE COPY                          736
BACKUP CORRUPTION                       44
COPY CORRUPTION                         40
DELETED OBJECT                          20
PROXY COPY                             928
BACKUP SPFILE                          124


TYPE                           RECORD_SIZE
------------------------------ -----------
DATABASE INCARNATION                    56
FLASHBACK LOG                           84
RECOVERY DESTINATION                   180
INSTANCE SPACE RESERVATION              28
REMOVABLE RECOVERY FILES                32
RMAN STATUS                            116
THREAD INSTANCE NAME MAPPING            80
MTTR                                   100
DATAFILE HISTORY                       568
STANDBY DATABASE MATRIX                400
GUARANTEED RESTORE POINT               212


TYPE                           RECORD_SIZE
------------------------------ -----------
RESTORE POINT                          212
DATABASE BLOCK CORRUPTION               80
ACM OPERATION                          104
FOREIGN ARCHIVED LOG                   604

37 rows selected.

也可以透過作業系統命令strings檢視二進位制控制檔案的內容:
[oracle@localhost orcl]$ strings control02.ctl|grep /datafile
/datafile/users01.dbf
/datafile/undotbs01.dbf
/datafile/sysaux01.dbf
/datafile/system01.dbf
/datafile/example01.dbf
/u01/app/datafile/test01.dbf
/datafile/hh01.dbf
/u01/app/datafile/goods01.dbf
/datafile/users01.dbf
/datafile/undotbs01.dbf
/datafile/sysaux01.dbf
/datafile/system01.dbf
/datafile/example01.dbf
/u01/app/datafile/test01.dbf
/datafile/hh01.dbf
/u01/app/datafile/goods01.dbf
u01/app/datafile/test01.dbf
u01/app/datafile/test01.dbf
u01/app/datafile/test01.dbf
/u01/app/datafile/hh01.dbf
u01/app/datafile/test01.dbf
u01/app/datafile/test01.dbf
u01/app/datafile/test01.dbf
/u01/app/datafile/hh01.dbf
/datafile/sysaux01.dbf
/datafile/hh01.dbf

(3)重做日誌檔案
資料庫的重做日誌檔案記錄了資料庫的所有修改資訊,用於故障恢復,重做日誌檔案的內容是由一條
條的redo entry組成的。當一個故障導致被修改的資料還未從記憶體永久寫入資料檔案,比突然的斷電,
那麼當資料庫重新啟動的時候丟失的資料是可以被恢復的,可以從最近的重做日誌檔案中讀取丟失的
資訊然後應用到資料檔案中,這樣就可以把資料庫恢復到斷電之前的狀態,在恢復操作中恢復重做日
志資訊的過程叫做前滾。
重做日誌的資訊只用於恢復由於系統過介質故障所引起的資料沒法寫入資料檔案的資料。
重做日誌一般有幾組,是迴圈使用的。
為了防止重做日誌自身發生故障,一個日誌組的成員一般有幾個,將相同的日誌組成員存放在不同的
磁碟,即可避免磁碟損壞導致的重做日誌檔案損壞。
可以透過如下命令檢視重做日誌組的資訊:
SYS@orcl 04-SEP-14>select group#,sequence#,members,bytes/1024/1024||'MB' from v$log;

GROUP#  SEQUENCE#    MEMBERS BYTES/1024/1024||'MB'
---------- ---------- ---------- -------------------------
         1         10          1 50MB
         2          8          1 50MB
         3          9          1 50MB

也可檢視日誌組成員資訊:
SYS@orcl 04-SEP-14>select group#,type,member from v$logfile;


    GROUP# TYPE                           MEMBER
---------- ------------------------------ ----------------------------------------
         3 ONLINE                         /u01/app/oracle/oradata/orcl/redo03.log
         2 ONLINE                         /u01/app/oracle/oradata/orcl/redo02.log
         1 ONLINE                         /u01/app/oracle/oradata/orcl/redo01.log






來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29800581/viewspace-1264083/,如需轉載,請註明出處,否則將追究法律責任。

相關文章