【趙強老師】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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...