程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle 存儲結構 詳解

Oracle 存儲結構 詳解

編輯:Oracle數據庫基礎
 

你怎麼把表空間干滿了?

首先聲明,對於Oracle來說,我只是一個菜鳥,一個不能菜再菜的菜鳥了,所以Oracle中很多的名詞、知識點對於我來說都是一個新的東西。雖然我是一個菜鳥,但是這也不能阻擋我去認真的學習Oracle。

那天早上來到公司,聽到我師傅和移動的人在通電話,對話內容大致如下:

師傅:xx,你好;
移動負責人:yy,昨晚我收到告警,說有個表空間滿了,你們昨晚是不是有什麼操作?
師傅:哦,昨晚跑了個存儲過程,出現了點問題,但是後來處理了,現在沒問題了。
移動負責人:哦,那行,以後這種操作的小心點,不要影響到白天的生產。
。。。。。。

表空間滿了?表空間是個啥?我不知道。

這張表放在哪個表空間?

那天上班的時候,師傅讓我去看一下有張表存放在哪個表空間,我當時立馬楞了,心裡想著:啥是表空間了,表為啥還要放到表空間。我承認我大學的知識都還給老師了。還好當時沒有立刻說自己不知道,要不又會被師傅罵一個狗血淋頭。於是下班回來好好的學習了一下表空間的相關概念,於是結合上面的問題,就有了這篇文章了。

Oracle的存儲結構

說到表空間,就需要先了解一下Oracle的存儲結構。對於Oracle來說,它的存儲結構分為以下兩種:

  • 物理結構
  • 邏輯結構

物理結構就是實質的對應物理存儲文件,就是在存儲介質上實實在在存在的文件;而邏輯結構就是一個對象或者組織結構,只是邏輯上存在的東西。下面就對這兩種結構進行詳細的總結。

物理結構

物理存儲結構是實際的數據存儲單元,對應於操作系統文件,是摸得著、看的見的東西,比邏輯存儲結構更易理解。Oracle數據庫就是由駐留在服務器磁盤上的這些操作系統文件組成的。這些文件有數據文件、控制文件,重做日志文件、歸檔日志文件、參數文件、警報文件、跟蹤文件和備份文件等組成。如下圖所示:
Oracle物理結構
下面就對這些文件進行簡單說明,做一個簡單的了解,到了工作中用到時,再深入研究。

  • 數據文件
    數據文件是真正存放數據庫數據的。一個數據文件就是一個操作系統文件。數據庫的對象(表和索引)物理上是被存放在數據文件中的。當我們要查詢一個表的數據的時候,如果該表的數據沒有在內存中,那麼Oracle就要讀取該表所在的數據文件,然後把數據存放的內存中;
  • 控制文件
    在《Oracle學習筆記——數據庫啟動原理》這篇文章中,說到數據庫啟動的第二步加載數據庫的時候,需要打開控制文件,就是這裡所說的控制文件。一個數據庫至少要有一個控制文件,控制文件中存放數據庫的“物理結構信息”,正是因為它存放的是數據庫的物理結構信息,這些物理結構信息就包括:

     

    • 數據庫的名字
    • 數據文件和重做日志文件的名字及位置
    • 創建數據庫時的時間戳

    為了更好的保護數據庫,我們可以鏡像控制文件。每個控制文件中的內容就是相同的。鏡像了控制文件,即使其中的一個控制文件出現了問題,也不會影響到數據庫的損壞和數據的丟失。

    控制文件的重要性不言而喻,就是說在沒有備份、鏡像的情況下,你的控制文件損壞了,很抱歉,你的數據庫很可能就over了;

  • 重做日志文件
    重做日志文件又叫聯機日志文件,記錄了對數據庫修改的信息,包括用戶對數據修改和數據庫管理員對數據庫結構的修改。它主要用於在發生故障的時候和數據庫備份文件配合恢復數據庫,一般發生故障有2個情況:一個是介質損壞另外一個是用戶誤操作。每個數據庫至少有兩個日志文件組,每組至少包含1個或者多個日志成員,這裡要多個日志成員的原因是防止日志文件組內某個日志文件損壞後及時提供備份,所以同一組的日志成員一般內容信息相同,但是存放位置不同;
  • 歸檔日志文件
    歸檔即為存檔的意思,歸檔日志文件是處於非活動(INACTIVE)的狀態的重做日志文件的存檔備份。它對Oracle數據庫的備份和恢復起至關重要的作用。它是重做日志文件的一個副本,與被復制的成員完成一樣,即重做記錄相同,日志序列號相同;
  • 參數文件
    這個就不用我多說了,請參見這篇《Oracle學習筆記——初始化參數》;
  • 警報文件
    顧名思義就是警報日志文件,它按照時間的先後來記錄所發生的重大活動和錯誤。警報文件的名字的格式是alert_SID.log。它的位置是由初始化參數background_dump_desc指定的;使用以下命令查看警報文件的位置:

     

    show parameter background_dump_dest;
  • 跟蹤文件
    就是跟蹤日志文件,每個服務器進程和後台進程都寫跟蹤文件。例如當後台進程發生了錯誤的時候,Oracle就會把錯誤的信息寫到跟蹤文件中。DBA就可以根據跟蹤文件的信息來查看進程中所發生的錯誤。跟蹤文件被寫到了兩個目錄中;和服務器進程有關的信息被寫到了由初始化參數user_dump_desc指定的目錄中,和後台進程有關信息被寫到了由初始化參數background_dump_desc指定的目錄中。伴隨著時間跟蹤文件就會被寫滿,DBA可以手動來刪除跟蹤文件,也可以限制跟蹤文件的大小。初始化參數MAX_DUMP_FILE_SIZE就可以限制跟蹤文件的大小。
  • 備份文件
    就是在數據庫發生介質損壞的時候用來還原數據庫、恢復(recover)數據的。

邏輯結構

邏輯結構完全從物理結構中抽象出來的。在Oracle中,邏輯結構的組織結構如下圖所示:
邏輯結構
Oracle存儲的邏輯結構由數據塊、區、段和表空間組成。數據庫由多個表空間組成;表空間由一個或多個段組成;段有一個或多個連續的區組成;區由一個或多個塊組成。塊是Oracle中最小的存儲單位。

表空間

好了,概念性的東西就總結這麼多,再回到文章開頭說的那兩個問題上。一個數據庫被分為一個個的邏輯單元,這些邏輯單元叫“表空間”。表空間用於存放數據庫對象(表、索引等)。一個數據庫邏輯上由一個或者多個表空間組成。表空間由一個或者多個數據文件(物理結構)組成。表空間用於存放數據庫對象,而這些對象實際上存放在數據文件中,數據文件是數據的物理載體。表空間的尺寸是組成這個表空間的所有數據文件的尺寸之和。

每個數據庫都擁有一個系統表空間和一個輔助表空間。在創建數據庫的時候,Oracle會自動創建這兩個表空間。我們也可以手動創建表空間,如下語句:

CREATE TABLESPACE testTBSP
DATAFILE 'D:\DBFILE\dbfile1.dbf' 
SIZE 50M
AUTOEXTEND ON
NEXT 20M
MAXSIZE UNLIMITED
LOGGING
EXTENT MANAGEMENT LOCAL;

使用CREATE TABLESPACE關鍵字創建一個名為testTBSP的表空間,使用DATAFILE關鍵字指定數據文件,數據文件的大小為50M,並設置成了以20M為單位自動擴展,並無上限。

如果我們把表空間對應的數據文件的最大值設置為指定大小,不如20480M,這樣就會出現文章開頭所說的把表空間干滿的問題。

表和表空間

一直都是在說表空間,那表呢?從邏輯結構上來講,表空間是表的容器,表是放在表空間裡的;但是從物理結構上來講,表實際上是存放在數據文件中的,數據文件是表的物理載體。我們可以在創建表的時候,指定該表存放的表空間。例如:

CREATE TABLE tb_student(name varchar2(20)) TABLESPACE testTBSP;

記住,每個表一定存在於一個表空間中。如果我們想查看表對應的表空間,可以使用如下語句:

SELECT table_name, tablespace_name 
FROM DBA_TABLES 
WHERE table_name='tb_student';
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved