【趙強老師】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
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...