oracle結構-物理結構

來源:互聯網
上載者:User
oracle物理結構在一個伺服器中,每一個啟動並執行資料庫都有一個資料庫執行個體(instancename) 相聯絡。資料庫啟動時,系統首先在伺服器記憶體中分配系統全域區(SGA),即構成了oracle的記憶體結構。然後啟動若干個常駐記憶體的作業系統進程,即組成了oracle的進程結構。除此之外,還有資料庫的物理與邏輯結構。資料庫體系統結構圖可以參考第一篇。在接下來的篇幅中將分五篇來詳細說明oracle資料庫的體繫結構。

  • oracle物理結構
  • oracle邏輯結構
  • oracle記憶體結構
  • oracle進程結構
  • oracle串連配置結構

  因為我的學習路線與學任何東西一樣,分四個階段,先需瞭解總體結構和原理,然後再進一步型清楚他們,第三再分塊理解吸收,最後再綜合提升。當然動手做實驗須貫穿始終。

  本篇說明物理結構。

  物理結構,即oracle資料庫使用的作業系統檔案結構。對於資料庫物理結構檔案,不同的oracle版本,不同的作業系統平台上有不同的儲存目錄結構。

  • winnt  | d:\oracle\product\10.1.0\oradata\DB_NAME\*.*(oracle 10g);d:\orant\database\*.*(oracle7,oracle8)
  • Unix | /home/app/oracle/product/10.1.0/oradata/DB_NAME/*.*(10g);/home/app/oradata/db_name/*.*(8i,9i)

  資料庫的物理結構檔案按其作用可以分為三類:

  • 資料檔案
  • 記錄檔
  • 控制檔案

一、資料檔案

  資料檔案用來儲存資料庫的資料,如表、索引等。讀取資料時,系統首先從資料庫檔案中讀取資料,並儲存到SGA的資料緩衝區中。這是為了減少I/O,如果讀取資料時,緩衝區中已經有要讀取的資料,就不需要再從磁碟中讀取了。儲存資料時也是一樣,事務提交時改變的資料先儲存到記憶體緩衝區中,再由oracle後台進程DBWR決定如何將其寫入到資料檔案中。

1.查詢資料檔案的資訊

sql>select * from dba_data_files或

sql>select * from v$datafile(此資料字典包含檔案的動態資訊)

一個資料檔案只與一個資料庫相聯絡。資料檔案的大小是可以改變的。可以通過以下語句查詢資料表空間的空間空閑量

sql>select * from dba_free_space

2.修改資料檔案的大小

sql>alter database datafile "d:\...\df1.dbf" resize 800m

3.資料庫檔案的自動擴充特性。請看下面的例子:

sql>alter tablespace tbs1 add datafile "d:\...\df2.dbf" size 500m autoextend on next 50m maxsize 1000m

sql>alter database mydb1 datafile "d:\...\df2.dbf","d:\...\df3.dbf" autoexetend off

sql>alter database mydb1 datafile "d:\...\df2.dbf","d:\...\df3.dbf" autoexetend on next 30m maxsize unlimited

二、重做記錄檔

  重做記錄檔記錄對資料庫的所有修改資訊。它是三類檔案中最複雜的一類檔案,也是保證資料庫安全與Database Backup與恢複有直接關係的檔案。

 1.記錄檔組與日誌成員

  在每一個oracle資料庫中,至少有兩個重做記錄檔組。每組有一個個或多個重做記錄檔,即日誌成員。同一組中的成員是鏡像關係,它們儲存的內容是一模一樣的。oracle在寫日誌時,以一個日誌組為邏輯單位寫入,只在將日誌都寫入日誌組中的每個成員檔案中後,寫日誌才完成。

2.日誌工作原理

  oracle有多個記錄檔組,當一個記錄檔組中所有的成員所有的成員同時被寫滿資料時,系統自動轉換到下一個記錄檔組,這個轉換過程稱為日誌切換。

  當日誌切換後,會給前一個日誌組編一個號,用于歸檔日誌的編號,這個編號稱為記錄序號。此編號由1開始,每切換一次,序號自動加1,最大值受參數MAXLOGHISTORY限制,該參數的最大值為65534。

  當oracle把最後一個日誌組寫滿了以後,自動轉向第一個日誌組,這時,再向第一個日誌組寫日誌的時候,如果資料庫運行在非歸檔模式下,這個日誌組中的原有日誌資訊就會被覆蓋。

  使用以下語句查詢記錄檔資訊:

sql>select * from v$log

相關欄位說明如下:

GROUP#:記錄檔組號

THREAD#:記錄檔線程號,一般為1,雙機容時為2

SEQUENCE#:記錄序號

BYTES:記錄檔大小

MEMBERS:該組的日誌成員個數

ARC:該組日誌資訊是否已經完成歸檔

STATUS:該組狀態(CURRENT:表示當前正在使用的組;NACTIVE:表示非活動組;ACTIVE:表示歸檔未完成)

FIRST_CHANGE#:系統改變號SCN,也叫檢查點號

FIRST_TIME:系統改變時間

DBA可以使用下列命令進行強制日誌切換

sql>alter system switch logfile

 3.NOARCHIVELOG/ARCHIVELOG

  NOARCHIVELOG是非歸檔模式,如果資料庫運行在這種模式下,當日誌切換時,新切換到的日誌組中的日誌資訊會被覆蓋。ARCHIVELOG:歸檔模式,如果資料庫運行在這種模式下,日誌會被Archive Storage,產生歸檔日誌,且在未歸檔之前,日誌不允許被覆蓋寫入。

  要確認資料庫的歸檔方式,可以查詢資料字典v$database:

sql>select log_mode from v$database

  要瞭解歸檔日誌的資訊,可以查詢資料字典v$archived_log。

  要將資料庫改為歸檔模式:

a.alter database archivelog

b.設定初始化參數LOG_ARCHIVE_START=TRUE

c.設定歸檔檔案目標儲存路徑 LOG_ARCHIVE_DEST=C:\ORA\ARCHIVE

d.設定歸檔檔案命名格式參數 LOG_ARCHIVE_FORMAT="ORCK%T%S.ARC"。這個格式中的%S表示記錄序號,自動左邊補零;%s表示記錄序號,自動左邊不補零;%T表示日誌線程號,左邊補零;%t表示日誌線程號不補零。

e.重新啟動資料庫

4.CKPT進程(檢查點進程)

  CKPT進程保證有修改過的資料庫緩衝區中的資料都被寫入到資料檔案,記錄檔、資料檔案、資料庫頭和控制檔案中都有寫入檢查點標記。資料庫在恢複時,只需提供自上一個檢查以來所做的修改。檢查點完成時系統將更新資料庫資料庫頭和控制檔案。

  參數LOG_CHECKPOINT_TIMEOUT決定一個檢查點發生的時間間隔。LOG_CHECKPOINT_INTERVAL決定一個檢查需要填充的記錄檔塊的數量。檢查點號,也稱系統改變號(SCN),它標識一個檢查點。可以通過v$log查詢記錄檔的檢查點資訊,通過v$datafile查詢資料檔案的檢查點資訊,通過v$database查詢資料庫頭的檢查點資訊。三個地方的檢查點號相同,如果不同,說明發明資料庫不同步,此時資料庫肯定無法正常啟動。

5.增加與刪除記錄檔組、日誌成員(詳細文法請參考oracle文檔)

alter database [database] add logfile [group integer] filespec[,[group...

alter database [database] add logfile (...)

alter database [database] drop logfile [grout integer]

alter database  [database] add logfile member "filespec" [reuse] to group integer

alter database [database] drop logfile member "filename","filename"...

alter database [database] rename file "filename" to "filename"

6.清除記錄檔資料

alter database [database] clear [unarchived] logfile group integer|filespec

 

三、控制檔案

  控制檔案是一個二進位檔案,用來描述資料庫的物理結構,一個資料庫只需要一個控制檔案,控制檔案的內容包括:

  • 資料庫名及資料庫唯一標識
  • 資料檔案和記錄檔標識
  • 資料庫恢複所需的同步資訊,即檢查點號

  控制檔案由參數control_files指定,格式如下:

control_files=("home/app/.../control01.ctl","home/app/.../control02.ctl")

參數中各個檔案是鏡像關係,也就是說,幾個檔案中只要有一個檔案完好,資料庫就可以正常運行。

  以下語句查詢控制檔案的資訊:

sql>select * from v$controlfile

  如果控制檔案損壞或丟失,資料庫將終止並且無法啟動,所以,要對控制檔案進行鏡象,手工鏡像步驟如下:

a.關閉資料庫

b.複製控制檔案

c.修改參數檔案,加入新增的控制檔案位置描述

d.重新啟動資料庫

  另外注意,控制檔案中還包含幾個伺服器參數的設定,如果修改這些參數的值,剛需要重新建立控制檔案,這些參數是:

  • MAXLOGFILES:最大記錄檔個數
  • MAXLOGMEMBERS:最大日誌成員個數
  • MAXLOGHISTORY:最大歷史日誌個數
  • MAXDATAFILES:最大資料檔案個數
  • MAXINSTANCES:最大執行個體檔案個數

  所有修改資料庫結構的命令都會引起控制檔案的改變。同時出會記錄在oracle追蹤檔案中,追蹤檔案的名稱為alter_SID.log,路徑如下:

d:\oracle\product\10.1.0\admin\DB_NAME\bdump\SIDALRT.log(unix是alter_SID.ora)

也可以在參數檔案中指定追蹤檔案的儲存路徑,後台進程追蹤檔案目錄由參數background_dump_dest指定,使用者追蹤檔案位置由參數user_bdump_dest指定,如:

background_bdump_dest=/u01/app/oracle/oralog/bdump

user_bdump_dest=/u01/app//oralog/udump

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.