DM8实例相关知识总结
一、数据库和实例
在 DM7 之前版本的 DM 数据库中,“数据库”和“实例”这两个术语经常可以互相替换, 意义也很相近。在 DM7 以及之后版本的数据库中,“数据库”和“实例”这两个概念之间有 着很大的差别,甚至可以说它们是两个完全不同的实体。
1、数据库
单独提到 DM 数据库时,可能 指的是 DM 数据库产品,也有可能是正在运行的 DM 数据库实例,还可能是 DM 数据库运行中 所需的一系列物理文件的集合等。
当同时出现 DM 数据库和实例时,DM 数据库指的是 磁盘上存放在 DM 数据库中的数据的集合,一般包括:数据文件、日志文件、控制文件以及 临时数据文件等。
2、实例
实例一般是由一组正在运行的 DM 后台进程/线程以及一个大型的共享内存组成。简单来 说,实例就是操作 DM 数据库的一种手段,是用来访问数据库的内存结构以及后台进程的集合。DM 数据库存储在服务器的磁盘上,而 DM 实例则存储于服务器的内存中。通过运行 DM实例,可以操作 DM 数据库中的内容。在任何时候,一个实例只能与一个数据库进行关联(装载、打开或者挂起数据库)。在大多数情况下,一个数据库也只有一个实例对其进行操作。但是在 DM 共享存储集群(DMDSC)中,多个实例可以同时装载并打开一个数据库(位于一组由多台服务器共享的物理磁盘上)。此时,我们可以同时从多台不同的计算机访问这个数据库。
二、数据库的状态与模式相关知识
1、数据库状态
1. 配置状态(MOUNT):不允许访问数据库对象,只能进行控制文件维护、归档配置、 数据库模式修改等操作;
2. 打开状态(OPEN):不能进行控制文件维护、归档配置等操作,可以访问数据库对象,对外提供正常的数据库服务;
3. 挂起状态(SUSPEND):与 OPEN 状态的唯一区别就是,限制磁盘写入功能;一旦修改了数据页,触发 REDO 日志、数据页刷盘,当前用户将被挂起。
2、数据库模式
1. 普通模式(NORMAL):用户可以正常访问数据库,操作没有限制;
2. 主库模式(PRIMARY):用户可以正常访问数据库,所有对数据库对象的修改强制
生成 REDO 日志,在归档有效时,发送 REDO 日志到备库;
3. 备库模式(STANDBY):接收主库发送过来的 REDO 日志并重做。数据对用户只读。
3、数据库模式之间的转换
Shutdown —— mount
Shutdown —— open
Mount ——open
Open ——mount
Open ——suspend
Open ——shutdown
Suspend ——open
4、示例
查询数据库状态:select INSTANCE_NAME,STATUS$ from v$instance;
首先启动数据库,两种方式
1、Shutdown —— mount
2、Shutdown —— open
直接启动
3、Mount---open
4、open—Suspend
5、总结
三种模式
Normal 模式:用户可以正常访问数据库,操作没有限制。正常生成本地归档,但不发送实时归档(Realtime)、即时归档(Timely)和异步归档(Async)。
Primary 模式:用户可以正常访问数据库,操作有极少限制。对临时表空间以外的所有的数据库对象的修改操作都强制生成 Redo 日志。正常生成本地归档,支持实时归档(Realtime)、即时归档(Timely)和异步归档(Async)。 在归档有效时,发送 REDO 日志到备库;该模式下部分功能受限,包括:不支持修改表空间文件名、不支持修改 arch_ini 参数。正常生成本地归档,支持实时归档(Realtime)、即时归档(Timely)和异步归档(Async)。
Standby 模式:可以执行数据库备份(不能执行数据库作业备份)、查询等只读数据库操作。接收主库发送过来的REDO 日志并重做。正常生成本地归档,正常发送异步归档日志;但实时归档(Realtime)、即时归档(Timely)均强制失效。该模式下时间触发器、事件触发器等都失效。另外,还支持临时表的 Insert/Delete/Update 操作。因为临时表数据的修改不会产生 Redo 日志,所以同样主库对临时表的修改无法同步到备库。
注:
1、三种模式只能在 MOUNT 状态下设置,模式之间可以相互转换。
3、一般情况下,数据库为 NORMAL 模式,如果不指定 MOUNT 状态启动,则自动启动到 OPEN状态。
4、在需要对数据库配置时(如配置数据守护、数据复制),服务器需要指定 MOUNT 状态启动。
5、当数据库模式为非 NORMAL 模式(PRIMARY、 STANDBY 模式),无论是否指定启动状态,服务器启动时自动启动到 MOUNT 状态。
四种状态
Mount 状态:数据库在 Mount 状态下,不能修改数据,不能访问表、视图等数据库对象,但可以执行修改归档配置、控制文件和修改数据库模式等操作,也可以执行一些不修改数据库内容的操作,比如查询动态视图或者一些只读的系统过程。由于 Mount 状态不生成 PWR 日志,因此数据页可以正常刷盘,也正常推进检查点。系统从 Open 状态切换为 Mount 状态时, 会强制回滚所有活动事务,但不会强制清理(Purge)已提交事务,不会强制断开用户连接,也不会强制 Buffer 中的脏页刷盘。
Open 状态:可以访问数据库对象,对外提供正常的数据库服务,不能进行控制文件维护、归档配置等操作。
Suspend 状态:数据库在 Suspend 状态下,可以访问数据库对象,甚至可以修改数据,但限制 Redo 日志刷盘。相比 Open 到 Mount 的状态切换, Open 到 Suspend 的状态切换更加简单、高效,不会回滚任何活动事务,在状态切换完成后,所有事务可以继续执行。
Shutdown 状态:实例正常退出时设置为 Shutdown 状态。
状态切换
Open 状态与 Mount 状态可以相互切换;
Open 状态与 Suspend 状态可以相互切换;
Mount 和 Suspend 状态不能直接转换;
其他状态为系统内部状态,用户不能主动干预。