【趙強老師】Oracle資料庫的存儲結構

来源:https://www.cnblogs.com/collen7788/archive/2020/04/04/12631238.html
-Advertisement-
Play Games

Oracle的存儲結構分為:物理存儲結構和邏輯存儲結構。 一、物理存儲結構:指硬碟上存在的文件 數據文件(data file) 一個資料庫可以由多個數據文件組成的,數據文件是真正存放資料庫數據的。一個數據文件就是一個操作系統文件。資料庫的對象(表和索引)物理上是被存放在數據文件中的。當我們要查詢一個 ...


Oracle的存儲結構分為:物理存儲結構和邏輯存儲結構。

一、物理存儲結構:指硬碟上存在的文件

  • 數據文件(data file)

一個資料庫可以由多個數據文件組成的,數據文件是真正存放資料庫數據的。一個數據文件就是一個操作系統文件。資料庫的對象(表和索引)物理上是被存放在數據文件中的。當我們要查詢一個表的數據的時候,如果該表的數據沒有在記憶體中,那麼oracle就要讀取該表所在的數據文件,然後把數據存放到記憶體中。通過下麵的語句可以查看當前存在的數據文件和對應的表空間:

select file_name,tablespace_name from dba_data_files;

 

  •  聯機日誌文件(online redo log file)

一個資料庫可以有多個聯機日誌文件,聯機日誌文件包含了重做記錄(undo records).聯機日誌文件記錄了資料庫的改變,例如當一次意外導致對數據的改變沒有及時的寫到數據文件中,那麼oracle就會根據聯機日誌文件中 的信息獲得這些改變,然後把這些改變寫到數據文件中.這也是聯機日誌文件存在的意義.聯機日誌文件中重做記錄的唯一功能就是用來做實例的恢復.比如,一次系統的意外掉電,導致記憶體中的數據沒有被寫到數據文件中.那麼oralce就會根據聯機日誌文件中的重做記錄功能包資料庫恢復到失敗前的狀態。可以通過下麵的語句查看當前存在的日誌文件和對應的日誌組信息:

select member,group# from v$logfile;

 

 註意:Oracle使用日誌組來管理日誌文件。預設有三個日誌組,每組中至少兩個成員。如上圖所示。

另外,我們已經知道了什麼是數據文件和聯機日誌文件,通過下麵的圖解來說明他們之間的關係。

  •  控制文件(control file)

一個資料庫至少要有一個控制文件,控制文件中存放的資料庫的"物理結構信息",正是因為他存放的是資料庫的物理結構信息,所以他就顯得尤其的重要.這些物理結構信息就包括:

  1. 資料庫的名字。
  2. 數據文件和聯機日誌文件的名字及位置。
  3. 創建資料庫時的時間戳。
  4. RMAN備份的元信息

為了更好的保護資料庫,我們可以鏡像控制文件.每個控制文件中的內容就是相同的.鏡像了控制文件,即使其中的一個控制文件出現了問題,也不會影響到資料庫的損壞,數據的丟失. 在啟動資料庫的時候,oracle就會根據控制文件中的數據文件和聯機日誌文件的信息來打開資料庫.

可以通過下麵的語句查看當前存在的控制文件。

select name from v$controlfile;

 

 註意:這裡預設有兩個控制文件,這種方式叫做“多路復用”。

  • 歸檔日誌文件

是聯機日誌文件的副本,他記錄了對資料庫改變的歷史。註意:Oracle預設是非歸檔模式,可以通過下麵的語句查看

archive log list;

 

 通過下麵的語句,將資料庫切換到歸檔模式。

shutdown immediate
startup mount
alter database archivelog;
alter database open;
  • 參數文件

通常情況下指的就是初始化參數文件(initialization parameter file).參數文件包括了初始化參數文件和伺服器端參數文件(server parameter file).在資料庫啟動的時候就會讀取參數文件,然後根據參數文件中的參數來分配SGA並啟動一系列的後臺進程.參數文件中存放的是資料庫和實例的參數.

Oracle的參數文件有兩種類型:

  1. Spfile:二進位形式,9i之後
  2. Pfile:文本形式,9i之前

可以通過下麵的語句查看當前的參數文件信息:

show parameter spfile

 

可以使用下麵的方式將spfile轉換為pfile:

create pfile='/home/oracle/pfile.ora' from spfile;

 查看pfile中的參數值:

可以通過下麵的語句修改參數的值。

alter system set open_cursors=400 scope=both;
註意:scope的取值有三個:memory、spfile、both 
  • 告警日誌文件

記錄了資料庫的重大活動和所發生的錯誤.警報文件按照時間的先後來記錄所發生的重大活動和錯誤.警報文件的名字的格式是 alert_SID.log。警報文件的位置可以通過查詢v$diag_info得到,如下:

select * from v$diag_info;

 

註意:在12c以前的版本,告警日誌的位置可以通過查詢參數background_dump_dest得到。

告警日誌文件中記錄的信息,包括:

  1. 資料庫啟動和停止的信息
  2. 資料庫的結構變化
  3. 強制審計的信息
  4. 死鎖的信息
  •  跟蹤文件

就是跟蹤日誌文件,每個伺服器進程和後臺進程都寫跟蹤文件.例如當後臺進程發生了錯誤的時候,oracle就會把錯誤的信息寫到跟蹤文件中.DBA就可以根據跟蹤文件的信息來查看進程中所發生的錯誤。

跟蹤文件的位置跟告警日誌文件,在同一個目錄下:

select * from v$diag_info;

 

  • 備份文件

就是在資料庫發生介質損壞的時候用來還原(restore)資料庫的,恢復(recover)數據的。

 

二、邏輯存儲結構

從邏輯上來看,

  1. 資料庫是由一個或者多個表空間等組成。
  2. 一個表空間(tablespace)由一組段組成
  3. 一個段(segment)由一組區組成
  4. 一個區(extent)由一批資料庫塊組成
  5. 一個資料庫塊(block)對應一個或多個物理塊
  • Database(資料庫)

資料庫是按照數據結構來組織、存儲和管理數據的倉庫。

  • Tablespaces(表空間)

表空間是資料庫的邏輯劃分,一個表空間只能屬於一個資料庫。表空間(tablespace)是最大的邏輯單位,對應一個或多個數據文件,通常由相關的段組成。表空間的大小是它所對應的數據文件大小的總和。所有的資料庫對象都存放在指定的表空間中。但主要存放的對象是表, 所以稱作表空間。

必須存在的表空間

  • system
  • sysaux
  • temp
  • undo

可選的表空間:一般指用戶創建的用戶表空間,比如:users

可以通過下麵的語句查看當前資料庫的表空間信息:

select tablespace_name from dba_tablespaces;

 

  • Segments (段)

一個段是分配給一個邏輯結構(一個表、一個索引或其他對象)的一組區,是資料庫對象使用的空間的集合;段可以有表段、索引段、回滾段、臨時段和高速緩存段等。

  • extents (區)

是資料庫存儲空間分配的一個邏輯單位,它由連續數據塊所組成。第一個段是由一個或多個盤區組成。當一段中間所有空間已完全使用,oracle為該段分配一個新的範圍。

  • Data Block (數據塊)

是oralce 管理數據文件中存儲空間的單位,為資料庫使用的I/O的最小單位,最小的邏輯部件,其大小可不同於操作系統的標準I/O塊大小。數據塊的大小由DB_BLOCK_SIZE參數確定。塊尺寸是處理Oracle更新、選擇、或者插入數據事務的最小單位。當用戶從表中選擇數據時,選擇操作從資料庫文件中以塊為單位讀取或者提取數據。例如Oracle塊的大小為8kb,即使只想檢索4kb的字元的名字,也必須讀取含有這4個字元的整個8kb的塊。

通過下麵的語句查看當前數據塊設置的大小:

show parameter db_block_size

 

 

 









 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 如何處理幾十萬條併發數據? 答:用存儲過程或事務。取得最大標識的時候同時更新..註意主鍵不是自增量方式這種方法併發的時候是不會有重覆主鍵的..取得最大標識要有一個存儲過程來獲取. 2.寫出一條Sql語句,取出表A中第31到第40記錄(SQLServer,以自動增長的ID作為主鍵,註意:數據不是連續的 ...
  • 有時我們臨時需要一個 JSON 字元串,直接拼接肯定不是好方法,但又懶得去定義一個類,這是用 就會非常的方便。 但是在 中添加數組卻經常被坑。 輸出結果: 非常正確,但如果把 換成 就不對了。 這麼寫會報: Could not determine JSON object type for type ...
  • 0、概述 先瞭解下https是個啥: https://www.bilibili.com/video/BV1j7411H7vV so!只要給我們的web伺服器配置一個證書就行了,證書可以買,也可以用免費的Let's Encrypt,此證書提供商是多個牛X大公司為了推進全球https化搞出來的,所以不用 ...
  • HTTP Method 較為簡單,我們常用的習慣如下: 一般查詢我們都會使用 GET 方法, 創建新的記錄使用 POST 方法 更新已有數據使用 PUT 方法 更新已有數據部分屬性使用 PATCH 方法 刪除已有數據使用 DELETE 方法 下麵來詳細介紹一下常用的 HTTP 狀態碼 1xx 1xx ...
  • 最近是真的比較閑,花了點時間算是把我自己的微博庫的 nuget 包的坑填上了(https://github.com/h82258652/HN.Social.Weibo 歡迎大佬來 Star)。dino 大佬也一直忽悠我弄動畫,可惜我沒啥藝術細胞而且 Composition API 也不太熟悉,就只能 ...
  • Xamarin.Forms客戶端第一版 作為TerminalMACS的一個子進程模塊,目前完成第一版:讀取展示手機基本信息、聯繫人信息、應用程式本地化。 1. 功能簡介 2. 詳細功能說明 3. 關於TerminalMACS 1. 功能簡介 1.1. 讀取手機基本信息 主要使用Xamarin.Ess ...
  • 通過VPN訪問Google時,Google仍舊無法打開,但是能訪問部分網站。這是什麼情況? 顯然能夠訪問部分網站,說明網路是正常的,經過不停的測試,我發現只要是支持HTTPS協議的網站都無法訪問,腦袋靈機一動,是不是跟HTTPS的埠443有關,檢查之後,發現果真VPN服務端的443埠沒有在防火牆 ...
  • Shell腳本殺掉除自己外的舊進程 在寫後臺Shell腳本的時候,這是比較常見的一個需求。比如之前運行了一個叫做a.sh的腳本在後臺運行,後來更新了a.sh腳本想重新運行,但卻不想手動殺掉已經存在的後臺a.sh進程。 命令其實非常簡單: 其中 是篩選出除腳本自己之外的舊進程的PID。 這裡的 做了些 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...