注册
达梦数据库的几种模式及状态说明
技术分享/ 文章详情 /

达梦数据库的几种模式及状态说明

小灰灰_oO 2024/01/05 7517 3 0

达梦数据库的几种模式及状态说明

一、数据库模式

达梦数据库支持 3 种数据库模式: Normal 模式、 Primary 模式和 Standby 模式。

查看数据库模式:

SELECT MODE$ from V$instance; 行号 MODE$ ---------- ------ 1 NORMAL

1、普通模式(NORMAL)

  • 用户可以正常访问数据库,操作没有限制

  • 正常生成本地归档,但不发送实时归档(Realtime)、即时归档(Timely)和异步归档(Async)。

将数据库切换为 Normal 模式:

ALTER DATABASE NORMAL;

一般情况下,数据库为 NORMAL 模式,如果不指定 MOUNT 状态启动,则自动启动到 OPEN 状态。

2、备库模式(STANDBY)

  • 可以执行数据库备份(不能执行数据库作业备份)、查询只读数据库操作

  • 接收主库发送过来的REDO日志并重做

  • 正常生成本地归档,正常发送异步归档日志;但实时归档(Realtime)、即时归档(Timely)均强制失效。

  • 该模式下时间触发器、事件触发器等都失效。

  • 另外,还支持临时表的Insert/Delete/Update操作。因为临时表数据的修改不会产生Redo日志,所以同样主库对临时表的修改无法同步到备库

将数据库切换为 Standby 模式:

ALTER DATABASE STANDBY;

3、主库模式(PRIMARY)

  • 用户可以正常访问数据库,操作有极少限制

  • 对临时表空间以外的所有的数据库对象的修改操作都强制生成Redo日志

  • 正常生成本地归档,支持实时归档(Realtime)、即时归档(Timely)和异步归档(Async)。在归档有效时,发送REDO日志到备库;

  • 该模式下部分功能受限,包括:不支持修改表空间文件名、不支持修改arch_ini参数。正常生成本地归档,支持实时归档(Realtime)、即时归档(Timely)和异步归档(Async)。

将数据库切换为Primary模式:

ALTER DATABASE PRIMARY;

当数据库模式为非NORMAL模式(PRIMARY、STANDBY模式),无论是否指定启动状态,服务器启动时自动启动到MOUNT状态。

模式 本地归档 异步归档(Async) 实时归档(Realtime) 即时归档(Timely) 默认状态
Normal × × × OPEN
Standby × × MOUNT
Primary MOUNT

4、总结

  • 三种模式只能在MOUNT状态下设置,模式之间可以相互转换。

    • SQL> select MODE$,STATUS$ from v$instance; MODE$ STATUS$ ------- ------- STANDBY OPEN SQL> ALTER DATABASE NORMAL; 执行失败(语句1) -810: 第1 行附近出现错误[-514]:系统处于OPEN状态. SQL> ALTER DATABASE MOUNT; -- 切换成MOUNT状态 SQL> ALTER DATABASE NORMAL; 执行成功, 执行耗时42毫秒.
  • 一般情况下,数据库为NORMAL模式,如果不指定MOUNT状态启动,则自动启动到OPEN状态

  • 当数据库模式为非NORMAL模式(PRIMARY、STANDBY模式),无论是否指定启动状态,服务器启动时自动启动到MOUNT状态

  • 对于新初始化的库,首次启动不允许使用mount方式,需要先正常启动并正常退出,然后才允许mount方式启动。

  • 需要对数据库配置时(如配置数据守护、数据复制),服务器需要指定MOUNT状态启动

  • 修改DM 共享存储集群(DMDSC)库的模式必须在DMDSC库所有实例都处于MOUNT状态下才能进行,只需要在一个节点上执行以上语句即可。

二、数据库状态

达梦数据库的状态包括startup、mount、after redo、open、suspend、shutdown这几种状态,但不是所有的状态都能相互转换和人工干预。

  • 内部状态:startup、after redo、shutdown,不能人工干预切换
  • 外部状态:mount、open、suspend,可以人工干预切换

1、Startup状态

系统刚启动时设置为Startup状态。

2、配置状态(Mount)

数据库在Mount状态下,不能修改数据,不能访问表、视图等数据库对象,但可以执行修改归档配置、控制文件和修改数据库模式等操作,也可以执行一些不修改数据库内容的操作,比如查询动态视图或者一些只读的系统过程。

由于Mount状态不生成PWR日志,因此数据页可以正常刷盘,也正常推进检查点。系统从Open状态切换为Mount状态时, 会强制回滚所有活动事务,但不会强制清理(Purge)已提交事务,不会强制断开用户连接,也不会强制Buffer中的脏页刷盘。

PWR日志:

  • Page Written Record日志,是REDO日志里包含有一种特殊的记录。
  • 包括(ts_id, fil_id, page_no, page_lsn)信息。
  • 每个数据页刷盘时,都会生成一条对应的PWR日志
  • 可用来提升系统故障恢复速度。在引入PWR记录之前,数据库故障重启时需要重做所有有效的REDO 日志记录。根据PWR记录可以快速判断数据页是否已刷盘,有效避免无用IO

将数据库修改为mount状态:

ALTER DATABASE MOUNT;

示例:

SQL> select status$ from v$instance; 行号 STATUS$ ---------- ------- 1 OPEN 已用时间: 33.773(毫秒). 执行号:62907. SQL> alter database mount; 操作已执行 已用时间: 33.906(毫秒). 执行号:0. SQL> select status$ from v$instance; 行号 STATUS$ ---------- ------- 1 MOUNT

3、After Redo状态

系统启动过程中联机日志重做完成后,回滚活动事务前设置为After Redo状态。非Standby模式的实例在执行alter database open操作前,也会将系统设置为After Redo状态。

4、打开状态(OPEN)

可以访问数据库对象,对外提供正常的数据库服务,不能进行控制文件维护、归档配置等操作。

将数据库修改为Open状态:(当系统处于Primary/Standby模式时,必须强制加上FORCE子句)

ALTER DATABASE OPEN [FORCE];

示例:

SQL> SELECT MODE$,STATUS$ from v$instance; 行号 MODE$ STATUS$ ---------- ------ ------- 1 NORMAL OPEN SQL> ALTER DATABASE mount; 操作已执行 已用时间: 36.232(毫秒). 执行号:0. SQL> ALTER DATABASE STANDBY; 操作已执行 已用时间: 45.452(毫秒). 执行号:0. SQL> SELECT MODE$,STATUS$ from v$instance; 行号 MODE$ STATUS$ ---------- ------- ------- 1 STANDBY MOUNT SQL> ALTER DATABASE OPEN; 第1 行附近出现错误[-516]:非NORMAL模式需要OPEN FORCE.

5、挂起状态(SUSPEND)

数据库在Suspend状态下,可以访问数据库对象,甚至可以修改数据,但限制Redo日志刷盘一旦执行COMMIT等触发Redo日志刷盘的操作时,当前操作将被挂起

相比Open到Mount的状态切换,Open到Suspend的状态切换更加简单、高效,不会回滚任何活动事务,在状态切换完成后,所有事务可以继续执行。

在DataWatch主备系统中suspend状态的自动切换的使用:

一般在修改归档状态之前将系统切换为Suspend状态,比如备库故障恢复后,在历史数据(归档日志)同步完成后,需要重新启用实时归档功能时:

  • 将系统切换为Suspend状态,限制Redo日志写入联机Redo日志文件;

  • 修改归档状态为Valid;

  • 重新将数据库切换为Open状态,恢复Redo日志写入功能;

  • 备库与主库重新进入实时同步状态。

实时归档失败时(比如网络故障导致),Primary实例将试图切换成Suspend状态,防止后续的日志写入。因为一旦写入,主备切换时有可能备库没有收到最后那次的RLOG_PKG,导致主库上多一段日志,很容易造成主备数据不一致。当实例成功切换为SUSPEND状态时,可直接退出,强制丢弃多余的日志,避免主备数据不一致

将数据库修改为Suspend状态:

ALTER DATABASE SUSPEND;

注意:

修改DMDSC库的状态为SUSPEND时,库内所有实例都不能处于MOUNT状态,只需要在一个节点上执行ALTER DATABASE SUSPEND语句即可。

6、Shutdown状态

实例正常退出时设置为Shutdown状态。

❗7、数据库状态的切换

7.1、OPEN与SUSPEND双向切换

原状态 新状态 说明
OPEN SUSPEND 1️⃣可以访问数据库对象,甚至可以修改数据。2️⃣不会回滚任何活动事务,在状态切换完成后,所有事务可以继续执行。3️⃣限制Redo日志刷盘,一旦执行COMMIT等触发Redo日志刷盘的操作时,当前操作将被挂起
SUSPEND OPEN 1️⃣可以访问数据库对象,对外提供正常的数据库服务。2️⃣不能进行控制文件维护、归档配置等操作。3️⃣将数据库修改为Open状态,当系统处于Primary/Standby模式时,必须强制加上FORCE子句4️⃣恢复Redo日志写入功能5️⃣备库与主库重新进入实时同步状态

7.2、OPEN与MOUNT双向切换

原状态 新状态 说明
OPEN MOUNT 1️⃣不能修改数据,不能访问表、视图等数据库对象。但可以执行修改归档配置、控制文件和修改数据库模式等操作,也可以执行一些不修改数据库内容的操作,比如查询动态视图或者一些只读的系统过程2️⃣强制回滚所有活动事务3️⃣不会强制清理(Purge)已提交事务4️⃣不会强制断开用户连接5️⃣不会强制Buffer中的脏页刷盘
MOUNT OPEN 1️⃣可以访问数据库对象,对外提供正常的数据库服务。2️⃣不能进行控制文件维护、归档配置等操作。3️⃣将数据库修改为Open状态,当系统处于Primary/Standby模式时,必须强制加上FORCE子句

7.3、MOUNT与SUSPEND不能直接切换

7.4、其他内部状态不能干预状态切换

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服