達夢數據庫(DM Database)作為國產數據庫的核心代表,其模式與狀態機制是保障數據高可用、實現主備同步的關鍵基礎。無論是日常運維中的數據庫配置,還是故障場景下的主備切換,都需要深入理解模式與狀態的特性及交互邏輯。
一、達夢數據庫的三種核心模式
達夢數據庫的模式定義了數據庫的核心功能邊界,尤其是在數據同步(主備、歸檔)和用戶訪問權限上的差異。三種模式分別為 Normal 模式、Primary 模式 和 Standby 模式,僅能在 MOUNT 狀態下切換,且模式間可相互轉換。
1.1 Normal 模式:獨立運行的默認模式
Normal 模式是數據庫初始化后的默認模式,適用于無需主備同步的獨立部署場景,也是最靈活的運行模式。
核心特性
- 訪問權限:用戶可無限制執行所有操作(增刪改查、表結構修改、備份恢復等)。
- 歸檔機制:僅生成本地歸檔日志,不支持實時歸檔(Realtime)、即時歸檔(Timely)和異步歸檔(Async),即不向其他節點發送 REDO 日志。
- 適用場景:單節點部署的業務系統,無需數據冗余或異地備份的場景。
模式切換命令
-- 需在 MOUNT 狀態下執行
ALTER DATABASE NORMAL;
1.2 Primary 模式:主備架構中的主庫模式
Primary 模式專為 主備同步(DataWatch) 設計,作為主庫節點運行,負責接收業務寫入并同步日志到備庫。
核心特性
- 訪問權限:用戶可正常訪問數據庫,但存在極少限制(如不支持修改表空間文件名、不支持修改
arch_ini
歸檔配置參數)。 - REDO 日志強制生成:對臨時表空間以外的所有數據庫對象修改,均強制生成 REDO 日志(保障備庫可完整重做)。
- 歸檔機制:生成本地歸檔的同時,支持實時、即時、異步三種歸檔方式,可將 REDO 日志實時發送到備庫。
- 適用場景:主備架構中的主庫節點,需對外提供寫入服務并保障數據同步到備庫。
模式切換命令
-- 需在 MOUNT 狀態下執行
ALTER DATABASE PRIMARY;
1.3 Standby 模式:主備架構中的備庫模式
Standby 模式作為主備架構的備庫節點,主要功能是接收主庫的 REDO 日志并重做,保障數據與主庫一致,僅提供只讀服務。
核心特性
- 訪問權限:僅支持只讀操作(查詢、備份),不允許寫入;可執行臨時表的
INSERT/DELETE/UPDATE
(臨時表修改不生成 REDO 日志,主備臨時表數據獨立)。 - 日志處理:接收主庫發送的 REDO 日志并自動重做,保持與主庫數據一致;僅生成本地歸檔和異步歸檔,實時、即時歸檔強制失效。
- 功能限制:時間觸發器、事件觸發器等自動執行功能失效;不支持數據庫作業備份(僅支持常規備份)。
- 適用場景:主備架構中的備庫節點,用于讀寫分離(承擔查詢壓力)或故障切換(主庫故障后可切換為新主庫)。
模式切換命令
-- 需在 MOUNT 狀態下執行
ALTER DATABASE STANDBY;
模式切換的關鍵注意事項
- 切換前提:所有模式切換必須在 MOUNT 狀態下執行,Open 或 Suspend 狀態無法直接修改模式。
- 新初始化數據庫:首次啟動需以 Open 狀態正常啟動并退出,后續才能以 MOUNT 狀態啟動并修改模式。
- DMDSC 集群(共享存儲集群):修改模式需所有實例處于 MOUNT 狀態,且僅需在一個節點執行命令即可同步到所有節點。
- 啟動狀態關聯:非 Normal 模式(Primary/Standby)的數據庫,啟動時會自動進入 MOUNT 狀態,需手動切換為 Open 狀態后才能對外提供服務。
二、達夢數據庫的六種運行狀態
達夢數據庫的狀態描述了數據庫當前的服務能力(如是否允許訪問、是否允許日志寫入),分為 用戶可干預狀態(Mount、Open、Suspend)和 系統內部狀態(Startup、After Redo、Shutdown),狀態間切換有明確的規則限制。
2.1 系統內部狀態:用戶無法主動干預
此類狀態由數據庫自動管理,用于標識啟動、恢復等過程中的中間狀態,用戶無需手動操作。
狀態名稱 | 觸發場景 | 核心作用 |
---|---|---|
Startup 狀態 | 數據庫實例剛啟動時 | 初始化內存結構、加載配置文件(如 dm.ini ),為后續狀態切換做準備 |
After Redo 狀態 | 啟動過程中聯機日志重做完成后、回滾活動事務前;非 Standby 模式執行 OPEN 前 | 確保數據一致性(重做已提交事務日志),為進入 Open 狀態做最終準備 |
Shutdown 狀態 | 數據庫實例正常退出時(執行 SHUTDOWN 命令或正常關閉進程) | 標識實例已停止服務,釋放內存、文件句柄等資源 |
2.2 用戶可干預狀態:運維核心操作對象
用戶可通過 SQL 命令切換這三種狀態,分別對應“配置模式”“提供服務”“限制日志寫入”三種核心場景。
2.2.1 Mount 狀態:配置與維護專用狀態
Mount 狀態是“中間態”,不對外提供業務訪問,但支持模式修改、歸檔配置、控制文件維護等核心運維操作。
核心特性
- 訪問限制:不能修改數據,不能訪問表、視圖等業務對象;可查詢動態視圖(如
v$instance
)、執行只讀系統過程。 - 日志與刷盤:不生成 PWR 日志(Page Written Record,記錄數據頁刷盤信息),但數據頁可正常刷盤,檢查點正常推進。
- 狀態切換影響:從 Open 切換到 Mount 時,會強制回滾所有未提交的活動事務,但不清理已提交事務、不強制斷開用戶連接、不刷盤 Buffer 中的臟頁。
狀態切換命令
-- 從 Open/Suspend 狀態切換到 Mount 狀態
ALTER DATABASE MOUNT;
實操示例
-- 1. 查看當前狀態(Open 狀態)
SQL> select status$ from v$instance;
行號 STATUS$
---------- -------
1 OPEN
已用時間: 0.407(毫秒). 執行號:5.-- 2. 切換到 Mount 狀態
SQL> alter database mount;
操作已執行
已用時間: 00:00:01.778. 執行號:0.-- 3. 驗證狀態
SQL> select status$ from v$instance;
行號 STATUS$
---------- -------
1 MOUNT
已用時間: 0.352(毫秒). 執行號:6.
2.2.2 Open 狀態:對外提供服務的正常狀態
Open 狀態是數據庫的“業務態”,可對外提供完整的讀寫服務(Normal 模式下)或只讀服務(Standby 模式下),是業務運行的核心狀態。
核心特性
- 訪問權限:支持所有符合模式權限的操作(如 Primary 模式可寫入,Standby 模式僅只讀)。
- 功能限制:不能執行控制文件維護、歸檔配置修改、模式切換等操作(需先切換到 Mount 狀態)。
- 特殊注意:若數據庫為 Primary/Standby 模式,從 Mount 切換到 Open 時必須加
FORCE
子句(強制打開,保障主備同步正常)。
狀態切換命令
-- Normal 模式:直接切換
ALTER DATABASE OPEN;-- Primary/Standby 模式:必須加 FORCE 子句
ALTER DATABASE OPEN FORCE;
實操示例(Primary 模式切換 Open)
-- 1. 查看當前狀態(Mount 狀態)
SQL> select status$ from v$instance;
行號 STATUS$
---------- -------
1 MOUNT
已用時間: 54.783(毫秒). 執行號:4.-- 2. Primary 模式下切換 Open(加 FORCE)
SQL> alter database open force;
操作已執行
已用時間: 00:00:09.971. 執行號:0.-- 3. 驗證狀態
SQL> select status$ from v$instance;
行號 STATUS$
---------- -------
1 OPEN
已用時間: 0.407(毫秒). 執行號:5.
2.2.3 Suspend 狀態:限制日志寫入的臨時狀態
Suspend 狀態是“過渡態”,主要用于主備同步異常時的臨時維護,限制 REDO 日志刷盤,避免主備數據不一致。
核心特性
- 訪問權限:可正常查詢、修改數據,但執行
COMMIT
(觸發日志刷盤)或CREATE TABLE
(需寫入元數據日志)時會掛起。 - 狀態切換優勢:從 Open 切換到 Suspend 時,不回滾活動事務、不斷開用戶連接,切換效率遠高于 Open 到 Mount。
- 典型場景:備庫故障恢復后,重新啟用實時歸檔前;主庫實時歸檔失敗時,數據庫自動切換為 Suspend 狀態,防止多余日志寫入導致主備不一致。
狀態切換命令
-- 從 Open 狀態切換到 Suspend 狀態
ALTER DATABASE SUSPEND;-- 從 Suspend 狀態恢復到 Open 狀態
ALTER DATABASE OPEN;
實操示例(Suspend 狀態下的事務行為)
-- Session 1:切換到 Suspend 狀態
SQL> alter database suspend;
操作已執行
已用時間: 100.968(毫秒). 執行號:0.
SQL> select status$ from v$instance;
行號 STATUS$
---------- -------
1 SUSPEND-- Session 2:插入數據正常,提交掛起
SQL> insert into test values(1,'a',10000); -- 插入成功
影響行數 1
已用時間: 0.882(毫秒). 執行號:11.
SQL> commit; -- 提交掛起,等待狀態恢復-- Session 1:恢復到 Open 狀態
SQL> alter database open;
操作已執行
已用時間: 0.644(毫秒). 執行號:0.-- Session 2:提交成功
SQL> commit;
操作已執行
已用時間: 00:01:44.580. 執行號:12.
2.3 狀態切換的核心規則
達夢數據庫的狀態切換并非完全自由,存在明確的限制,核心規則如下:
- 允許直接切換的組合:
- Open ? Mount(相互切換)
- Open ? Suspend(相互切換)
- 禁止直接切換的組合:
- Mount 與 Suspend 不能直接切換(需先通過 Open 狀態過渡)
- 系統內部狀態:Startup、After Redo、Shutdown 由數據庫自動管理,用戶無法主動切換。
此外,可通過參數 ALTER_MODE_STATUS
控制是否允許手工修改模式/狀態:
ALTER SYSTEM SET ALTER_MODE_STATUS = 1;
(默認值,允許手工修改)ALTER SYSTEM SET ALTER_MODE_STATUS = 0;
(禁止手工修改,用于高安全場景)
三、模式與狀態的協同關系
模式與狀態是達夢數據庫運維的兩大核心維度,二者相互依賴、協同工作,具體體現在以下場景:
運維場景 | 模式選擇 | 狀態切換流程 | 核心目的 |
---|---|---|---|
單節點業務部署 | Normal 模式 | Startup → After Redo → Open | 快速對外提供完整讀寫服務 |
主備架構主庫配置 | Primary 模式 | Startup → After Redo → Mount(改模式)→ Open | 配置主庫模式,對外提供寫入并同步日志 |
主備架構備庫配置 | Standby 模式 | Startup → After Redo → Mount(改模式)→ Open | 配置備庫模式,接收主庫日志并提供只讀服務 |
主備歸檔異常維護 | Primary 模式 | Open → Suspend(維護)→ Open | 臨時限制日志刷盤,避免主備數據不一致 |
修改歸檔配置 | 任意模式 | Open → Mount(改配置)→ Open | 保障配置修改時數據一致性 |
四、總結
達夢數據庫的模式與狀態機制是其高可用架構的基礎,理解二者的特性與交互邏輯,是運維人員保障業務穩定運行的關鍵:
- 模式決定“數據庫能做什么”(如是否支持主備同步、是否允許寫入),核心服務于數據冗余與高可用;
- 狀態決定“數據庫當前的服務能力”(如是否對外提供訪問、是否允許日志刷盤),核心服務于運維操作與故障處理。
在實際運維中,需根據業務場景(單節點/主備)選擇合適的模式,結合狀態切換完成配置修改、故障恢復等操作,同時嚴格遵循模式(需 MOUNT 狀態)與狀態(禁止 Mount?Suspend 直接切換)的切換規則,確保數據庫運行穩定、數據一致。