达梦数据库支持3种数据库模式:Normal、Primary、Standby,三种模式只能在 MOUNT 状态下设置,模式之间可以相互转换(ALTER BATABASE 进行切换)。
用户可以正常访问数据库,操作没有限制;正常生成本地归档,但不发送实时归档、即时归档和异步归档。
用户可以正常访问数据库,所有对数据库对象的修改强制生成 REDO 日志,在归档有效时,发送 REDO 日志到备库;正常生成本地归档,支持实时归档、即时归档和异步归档。在归档有效时,发送REDO日志到备库。该模式下部分功能受限,包括不支持修改表空间文件名、不支持修改arch_ini参数。
接收主库发送过来的 REDO 日志并重做。数据对用户只读。正常生成本地归档,正常发送异步归档日志;但实时归档、即时归档均强制失效。该模式下时间触发器、事件触发器等都失效。另外,还支持临时表的Insert/Delete/Update操作。因为临时表数据的修改不会产生Redo日志,所以同样主库对临时表的修改无法同步到备库。
PS:对于新初始化的库,首次启动不允许使用 mount 方式,需要先正常启动并正常退出,然后才允许 mount 方式启动。
一般情况下,数据库为 NORMAL模式,如果不指定 MOUNT 状态启动,则自动启动到 OPEN 状态。在需要对数据库配置时(如配置数据守护、数据复制),服务器需要指定 MOUNT 状态启动。当数据库模式为非 NORMAL 模式( PRIMARY 、 STANDBY 模式),无论是否指定启动状态,服务器启动时自动启动到 MOUNT 状态。
达梦数据库的状态包括:startup、mount、after redo 、open、suspend、shutdown
系统刚启动时设置为Startup状态
数据库在 Mount 状态下,不能修改数据,不能访问表、视图等数据库对象,但可以执行修改归档配置、控制文件和修改数据库模式等操作,也可以执行一些不修改数据库内容的操作,比如查询动态视图或者一些只读的系统过程。由于 Mount 状态不生成 PWR 日志,因此数据页可以正常刷盘,也正常推进检查点。系统从 Open 状态切换为 Mount 状态时, 会强制回滚所有活动事务,但不会强制清理(Purge)已提交事务,不会强制断开用户连接,也不会强制 Buffer 中的脏页刷盘
系统启动过程中联机日志重做完成后,回滚活动事务前设置为 After Redo 状态。非Standby 模式的实例在执行 alter database open 操作前,也会将系统设置为 After Redo 状态。
可以访问数据库对象,对外提供正常的数据库服务,不能进行控制文件维护、归档配置等操作。
将数据库修改为 Open 状态:(当系统处于 Primary/Standby 模式时,必须强制加上 FORCE 子句。)
ALTER DATABASE OPEN FORCE;
数据库在 Suspend 状态下,可以访问数据库对象,甚至可以修改数据,但限制 Redo 日志刷盘, 一旦执行 COMMIT 等触发 Redo 日志刷盘的操作时,当前操作将被挂起。相比 Open 到 Mount 的状态切换, Open 到 Suspend 的状态切换更加简单、高效,不会回滚任何活动事务,在状态切换完成后,所有事务可以继续执行。
应用场景:
在DataWatch主备系统中suspend状态的自动切换的使用:
一般在修改归档状态之前将系统切换为 Suspend 状态,比如备库故障恢复后,在历史数据(归档日志)同步完成后,需要重新启用实时归档功能时:
1、将系统切换为 Suspend 状态,限制 Redo 日志写入联机 Redo 日志文件;
2、修改归档状态为 Valid;
3、重新将数据库切换为 Open 状态,恢复 Redo 日志写入功能;
4、备库与主库重新进入实时同步状态。
实时归档失败时(比如网络故障导致), Primary 实例将试图切换成 Suspend状态,防止后续的日志写入。因为一旦写入,主备切换时有可能备库没有收到最后那次的RLOG_PKG,导致主库上多一段日志,很容易造成主备数据不一致。当实例成功切换为SUSPEND 状态时,可直接退出,强制丢弃多余的日志,避免主备数据不一致。
实例正常退出时设置为 Shutdown 状态,操作系统分配给达梦数据库的内存和后台进程、线程都被回收,数据文件、日志文件、配置文件等均处于离线状态,用户不再能使用数据库。
更多专业技术交流请点击:达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台