数据库模式
Normal 模式
用户可以正常访问数据库,操作没有限制。正常生成本地归档,但不发送实时归档(Realtime)、即时归档(Timely)和异步归档(Async)。
将数据库切换为 Normal 模式:
ALTER DATABASE NORMAL;
Primary 模式
用户可以正常访问数据库,有极少限制。对临时表空间以外的所有的数据库对象的修改操作都强制生成 Redo 日志。正常生成本地归档,支持实时归档(Realtime)、即时归档(Timely)和异步归档(Async)。 在归档有效时,发送 REDO 日志到备库;
该模式下部分功能受限,包括:不支持修改表空间文件名、不支持修改 arch_ini 参数。
将数据库切换为Primary模式:
ALTER DATABASE PRIMARY;
Standby 模式
可以执行数据库备份(不能执行数据库作业备份)、查询等只读数据库操作。接收主库发送过来的REDO日志并重做。正常生成本地归档,正常发送异步归档日志;但实时归档(Realtime)、即时归档(Timely)均强制失效。该模式下时间触发器、事件触发器等都失效。
另外,还支持临时表的 Insert/Delete/Update 操作。因为临时表数据的修改不会产生 Redo 日志,所以同样主库对临时表的修改无法同步到备库。
将数据库切换为 Standby 模式:
ALTER DATABASE STANDBY;
注意事项
- 三种模式只能在 MOUNT 状态下设置,模式之间可以相互转换。
- 对于新初始化的库,首次启动不允许使用 mount 方式,需要先正常启动并正常退出,然后才允许 mount 方式启动。
- 一般情况下,数据库为 NORMAL 模式,如果不指定 MOUNT 状态启动,则自动启动到 OPEN状态。
- 在需要对数据库配置时(如配置数据守护、数据复制),服务器需要指定 MOUNT 状态启动。
- 当数据库模式为非 NORMAL 模式(PRIMARY、 STANDBY 模式),无论是否指定启动状态,服务器启动时自动启动到 MOUNT 状态。
- 修改 DMDSC 库的模式必须在 DMDSC 库所有实例都处于 MOUNT 状态下才能进行,只需要在一个节点上执行以上语句即可
数据库状态转换
Startup 状态
系统刚启动时设置为 Startup 状态。
After Redo 状态
系统启动过程中redo日志重做完成后,回滚活动事务前设置为 After Redo 状态。非Standby 模式的实例在执行 alter database open 操作前,也会将系统设置为 After Redo 状态。
Open 状态(99%的时间都处于open状态)
数据库处于正常提供服务的状态,但不能进行归档配置等操作。
Mount 状态
数据库在 Mount 状态下,限制 Redo 日志刷盘,不能修改数据,不能访问表、视图等数据库对象,但可以执行修改归档配置、控制文件和修改数据库模式等操作,也可以执行一些不修改数据库内容的操作,比如查询动态视图或者一些只读的系统过程。
系统从 Open 状态切换为 Mount 状态时,需要回滚所有活动事务,但不会断开用户连接,也不会强制 Buffer 中的脏页刷盘。
Suspend 状态
数据库在 Suspend 状态下,限制 Redo 日志刷盘,可以访问数据库对象,甚至可以修改数据,但是一旦执行 COMMIT 等操作触发 Redo 日志写盘时,当前操作将被挂起。
相比 Open 到 Mount 的状态切换, Open 到 Suspend 的状态切换更加简单、高效,不会回滚任何活动事务,在状态切换完成后,所有事务可以继续执行。
一般在修改归档状态之前将系统切换为 Suspend 状态,比如备库故障恢复后,在历史数据(归档日志)同步完成后,需要重新启用实时归档功能时:
- 将系统切换为 Suspend 状态,限制 Redo 日志写入联机 Redo 日志文件。
- 修改归档状态为 Valid。
- 重新将数据库切换为 Open 状态,恢复 Redo 日志写入功能。
- 备库与主库重新进入实时同步状态。
另外,实时归档失败时(比如网络故障导致),Primary 实例将试图切换成 Suspend状态,防止后续的日志写入。因为一旦写入,主备切换时,有可能备库没有收到最后那次的RLOG_BUF,导致主库上多一段日志,很容易造成主备数据不一致。当实例成功切换为SUSPEND 状态时,可直接退出,强制丢弃多余的日志,避免主备数据不一致。
更多知识可以去达梦云适配中心了解 https://eco.dameng.com