注册
DCP学习总结-DM数据守护集群原理及搭建
培训园地/ 文章详情 /

DCP学习总结-DM数据守护集群原理及搭建

fyu 2023/07/06 955 0 0

DM 数据守护体系结构

DM 数据守护组件

    主库
        数据守护中, 主库必须是 PRIMARY 模式, 对外提供完整服务

    备库
        数据守护中, 备库必须是 STANDBY 模式, 对外提供只读服务, 备库还可以进行容灾、备份, 备库还支持对临时表的DML操作
        备库支持临时表的DML操作基于, 临时表产生的数据不写入REDO日志, 主库产生的临时表数据不会同步到备库
        备库接收到主库的日志信息后, 会写入本地归档日志, 在重演过程中产生的REDO日志不会写入归档日志中 -- 这里有疑问, 重演时产生的REDO是否写入日志文件中, 这里说不写, 但是后面又说要写

    日志文件
        记录物理页内容的变化, 数据库中所有对象的写操作, 最终都会对应到一个页或者多个页的修改操作

    日志传输进程
        通过达梦专用的 MAL 系统 发送日志包到备库, 主库产生的日志数据是以日志包(RLOG_PKG)为单位
        各中数据守护类型的区别就在于, 主库发送日志包的时机 和 备库收到日志包后的处理策略

    日志重演进程
        只存在于备库, 当备库接收到主库的REDO日志后, 通过该进程对REDO日志进行解析和重演操作
        重演进程会严格按照日志产生的顺序进行解析和修改相应物理页的数据, 在备库重演过程中产生的REDO日志会写入备库的日志文件中

    守护进程
        数据守护系统的核心组件
        他的作用主要包括
            1、监控数据库实例的运行状态
            2、主备之间数据同步情况
            3、当出现故障时启动各种处理预案
            4、接收自身监控的数据库实例、其他守护进程、监视器的消息
            5、发送自身监控的数据库实例的信息给其他守护进程和监视器
            6、守护进程必须和自身监控的数据库实例部署在同一个主机

    监视器进程
        对数据守护系统执行相关操作命令
        他的主要功能包括
            1、监控守护进程
            2、从守护进程接收数据库实例的信息
            3、执行数据守护系统的管理命令(切换、分离等)

DM 数据守护的特点

故障自动重连
    通过 dm_svc.conf 配置, 达到当主库故障发生切换后, 接口会自动连接到新的主库上

故障恢复
    当故障数据库修复后, 启动时会自动切换为 STANDBY 模式, 作为备库加入到数据守护中

历史数据自动同步
    当故障数据库修改后, 在启动过程中会自动将丢失的历史日志进行重演, 重演完成后加入集群中并切换为备库

自动负载均衡
    通过JDBC等接口配置, 无需更改应用程序,实现读写分离

DM 基本概念

数据库模式
    NORMAL  正常提供数据库服务, 操作没有限制, 可以生成本地归档, 但不发送实时归档、即时归档、异步归档
    PRIMARY 正常提供数据库服务, 操作有限制, 不能修改表空间文件名, 不支持归档参数修改, 该模式下对数据库对象的修改操作强制生成REDO日志
    STANDBY 只能提供只读操作, 可以生成本地归档, 可以发送异步归档日志, 该模式下触发器失效

    模式的切换
        -- 模式的切换必须在 MOUNT 状态下才可以进行切换
        ALTER DATABASE PRIMARY;
        ALTER DATABASE STANDBY;
        ALTER DATABASE NORMAL;
        -- DMDSC 集群中, 修改数据库模式, 必须所有节点都处于 MOUNT 状态下才可以, 并且只需要在一个节点上执行即可


数据库状态
    STARTUP    系统刚刚启动时的状态
    AFTER REDO 系统启动过程中日志文件重做完后, 回滚活动事务前的状态
    OPEN       正常提供服务的状态
    MOUNT      对数据库配置进行修改时, 处于的状态
    SUSPEND    可以正常访问数据库对象, 一旦执行关于触发REDO 日志刷盘的操作时, 则系统挂起
    SHUTDOWN   实例退出时的状态

    数据库状态切换
        ALTER DATABASE MOUNT
        ALTER DATABASE OPEN
        ALTER DATABASE SUSPEND


LSN
    LSN: 日志序列号, 由数据库自行维护的BIGINT类型的数值, 具有全局唯一性、自动递增的特点
    每个LSN值都对应一个物理事务(ptx: physical transaction)
    数据库对物理数据页的操作都会对应一个LSN值

    LSN的类型
        CUR_LSN   系统分配的最大LSN,当事务提交时, 系统会为其分配一个唯一的LSN, 该值等于 CUR_LSN + 1, 然后再修改 CUR_LSN = CUR_LSN + 1
        FILE_LSN  已写入日志文件中的日志包的最大LSN, 每次将日志包写入日志文件后都要修改该值
        FLUSH_LSN 系统已经发起日志刷盘请求, 但还没有真正写入日志文件中的最大LSN
        CKPT_LSN  检查点LSN, 对所有物理页修改的数据都从缓冲区写入磁盘, 所有小于等于 CKPT_LSN 的 LSN对应的事务都已经从缓冲区写入磁盘
        APPLY_LSN 备库已写入日志文件的日志包的原始最大LSN, 该值等于主库对应原始日志包中的最大的LSN
        RPKG_LSN  备库重演的LSN, 表示备库已经重演完成的最大LSN

            SQL> SELECT cur_lsn, file_lsn, flush_lsn, ckpt_lsn FROM v$rlog;
            行号     CUR_LSN              FILE_LSN             FLUSH_LSN            CKPT_LSN            
            ---------- -------------------- -------------------- -------------------- --------------------
            1          47498                47497                47497                46278

        CKPT_LSN -> FILE_LSN  这一段REDO日志, 是还没有磁盘和REDO的差异, 但是因为已经写入日志文件了,所以恢复时要进行恢复操作
        FILE_LSN -> FLUSH_LSN 是新产生的REDO日志, 产生新的REDO信息表示用户还没有提交, 所以不用恢复

    数据守护系统的LSN
        CLSN = CUR_LSN
        FLSN = FILE_LSN 
        ALSN = APPLY_LSN
        RLSN = RPKG_LSN
        SLSN = STANDBY_LSN   表示备库可以重演的最大LSN, 也就是说 RLSN 最当前已经重演完成的LSN 可能存在延迟, 所以 该值肯定大于 RLSN
        KLSN = KEEP_LSN      表示KEEP_RKG_CHACHE 中的最大LAN, 表示备库已经接收到, 但未明确是否可以重演的RLOG_PKG的最大LSN, 读写分离集群中 KLSN=SLSN

KEEP_PKG
    主库将日志包(RLOG_PKG), 通过实时归档机制发送到备库后, 备库将最新接收到的 日志包(RLOG_PKG) 保存到 内存的 KEEP_PKG 中, 并不立即进行重演
    KEEP_PKG的作用是: 防止主库故障后导致数据不一致和不必要的主备切换
        示例
            1、主库将日志包发送给备库
            2、备库接收到日志包后, 相应主库并进行日志重演
            3、主库在本地进行将日志包写入日志文件前发生故障 -- 这里就导致了主备数据不一致

    KEEP_PKG 的机制
        主库发送过来的最新日志包, 备库接收后放入 KEEP_PKG中, 当主库发生重启后,守护进程会检查备库的 KEEP_PKG中是否存在数据, 如果有则通知备库丢失该日志包, 主库直接OPEN数据库
        如果配置了故障自动接管或用户手动发起切换命令, 则备库会将KEEP_PKG中的日志进行重演, 备库接管时APPLY_LSN 一定是 大于等于 主库的 FILE_LSN

    KEEP_PKG 重演机制
        1、备库接收到新的RLOG_PKG
        2、备库收到主库的重演命令, 主库定期将 FILE_LSN 等信息发送到备库, 当主库 FILE_LSN = 备库的 SLSN 表示主库已经将对应备库KEEP_PKG中的LSN写入日志文件了, 所以可以进行重演
        3、备库切换为主库

        -- 即时归档, 没有 KEEP_PKG 因为 即时归档是 主库将REDO数据写入日志文件后, 发送给备库的

OGUID
数据守护系统的唯一标识码, 配置数据守护时, 数据库实例的OGUID 由用户指定该值, 必须在 MOUNT 状态下指定通过 SP_SET_OGUID() 进行设置, 守护进程和监视器的OGUID在配置文件中配置
同一个数据守护组的所有数据库、守护进程、监视器 都要配置相同的OGUID 取值范围 0 ~ 2147483647
SELECT OGUID FROM v$instance; -- 查看当前系统的 OGUID

守护进程

守护进程组
    配置了相同 OGUID 的数据守护进程, 守护进程组中所有的守护进程、监视器都必须配置相同的组名

    组分裂
        同一个守护进程组中, 不同数据库实例的数据不一致, 并且无法通过同步重新一致的情况就是组分裂
        组分裂, 被分裂出去的数据库需要通过备份还原等技术重新恢复

    脑裂
        同一个守护进程组中出现两个或多个活动主库


守护进程主要功能
    1、数据库实例和监视器之间信息交互的桥梁
    2、数据库实例只向本地守护进程发送信息和接收本地守护进程发送的命令
    3、监视器接收守护进程的消息, 并向守护进程发送命令
    4、数据库实例和监视器之间没有直接的消息交互, 一切都通过守护进程进行交互
    5、守护进程解析并执行监视器发起的各种命令, 并通知数据库实例执行相关操作
    6、守护进程提供数据库监控、故障检测、故障处理、故障恢复的各种功能


守护进程和数据库实例建立连接成功后, 数据库实例定时发送数据给守护进程
    发送的内容包括
        1、数据库实例进程ID
        2、实例名
        3、数据库模式
        4、数据库状态
        5、FILE_SEQ、FILE_LSN、CUR_SEQ、CUR_LSN
        6、MAL 链路状态
        7、归档状态
        8、公钥
        9、MPP控制文件

主备库启动运行
    数据库实例启动后, 所有实例都处于 MOUNT 状态

完整的故障恢复流程
    1、通知备库丢弃KEEP_PKG
    2、通知主库发送归档日志、同步历史数据
    3、通知主库切换为SUSPEND状态
    4、再次通知主库发送归档日志
    5、通知主库设置备库归档为 valid 状态
    6、通知主库切换为OPEN 状态


守护进程类型
    本地守护 LOCAL
        最基本的守护进程功能, 监视本地数据库服务, 如果实例使用 MOUNT 方式启动, 守护进程会通知实例自动 OPEN,

    全局守护 GLOBAL
        在本地守护类型的基础上, 通过和远程守护进程的交互, 增加了主备切换、主备库故障检测、备库接管、数据库故障重新加入等功能
        -- 全局守护类型, 守护进程所守护的数据库实例, 必须配置实时或即时归档, 否则dmwatcher会启动失败


守护模式
    故障自动切换
        主库发生故障时, 确认监视器自动选择一个备库切换为主库, 自动切换模式要求必须且只能配置一个确认监视器

    故障手动切换
        主库发生故障时, 用户通过监视器命令将备库切换为主库

    -- 一个数据守护集群中, 只能配置一个确认监视器, 如果同时启动多个确认监视器后启动的确认监视器将报错并自动推出

守护进程控制文件
    dmwatcher.ctl 仅用于记录本地数据库的分裂状态和分裂描述信息
    守护进程在检测到本地库分裂时, 自动创建 dmwatcher.ctl 文件, 保存在本地库的 SYSTEN_PATH路径下
    并且文件中记录的状态一定时 split 分裂状态, 如果守护进程加载到 dmwatcher.ctl 文件 则认为对应的库一定是分裂的
    如果需要对分裂的库进行重建, 则需要手动将 dmwatcher.ctl 文件删除, 否则守护进程仍然会认定本地库为分裂库

守护进程命令
    help    显示帮助信息
    exit    退出守护进程
    status  显示守护进程运行状态信息
        [dmdba@itsapp1 bin]$ ./dmwatcher /dmdata/dmtest/dmwatcher.ini 
        DMWATCHER[4.0] V8
        DMWATCHER[4.0] IS READY
        status
        2022-08-22 15:22:43
        --------------------------
        GROUP_NAME    = GRP1
        DW_STATUS     = OPEN
        DW_SUB_STATUS = SUB_STATE_START

    show    显示所有守护进程组追踪的本地库信息
    show version 显示守护进程自身版本信息
    show group group_name 显示指定守护进程组中的本地库信息
    show monitor config 显示监视器的配置信息
        show monitor config
        [GRP1]
        MON_INST_OGUID          = 453331
        MON_DW_IP               = 192.168.25.128:7236
        MON_DW_IP               = 192.168.25.129:7236

    show link 显示守护进程上的TCP 连接信息
        show link
        2022-08-22 15:23:18
        #GROUP(GRP1)------------------------------------------------------------------------start
        FROM_FLAG   FROM_INAME       HANDLE  MID         N_FIX   MON_ADDR                        MON_CONFIRM  CONN_TIME                 
        DMSERVER    DM01             5       NULL        1       127.0.0.1                       FALSE        2022-08-22 15:18:44       
        DMWATCHER   DM02             4       NULL        2       192.168.25.129                  FALSE        2022-08-22 15:18:53       
        DMMONITOR   dmmonitor        7       1661152770  2       ::ffff:192.168.25.130           TRUE         2022-08-22 15:19:30       
        #GROUP(GRP1)------------------------------------------------------------------------end

数据守护系统配置文件说明

数据守护相关配置文件
    dm.ini
    dm.ctl
    dmmal.ini
    dmarch.ini
    dmwatcher.ini
    dmmonitor.ini
    dmtimer.ini
    dmmpp.ctl


dm.ini 相关配置参数
    INSTANCE_NAME           # 数据库实例名称
    PORT_NUM                # 数据库实例监听的端口 对应 dmmal.ini 中的 MAL_INST_PORT
    MAL_INI                 # 是否开启 MAL 系统
    ARCH_INI                # 是否开启归档
    TIMER_INI               # 是否启动定时器
    MPP_INI                 # 是否启用 MPP 系统 
    MESSAGE_CHECK           # 是否对通信消息启动校验 默认为:1 
    ALTER_MODE_STATUS       # 是否运行修改数据库模式和状态 0: 不允许 1: 允许 默认为:1 -- 数据守护系统中建议为0, 但是数据库在第一次以mount方式启动时需要手动设置, 到时需要临时开启该参数 守护进程是通过数据库模式和状态等信息作为故障处理、故障恢复的依据, 所以在数据守护中要将 ALTER_MODE_STATUS 设置为 0 限制用户修改模式及状态
    ENABLE_OFFLINE_TS       # 是否运行表空间 OFFLINE , 0: 不允许 1: 运行 2: 禁止备库  -- 数据守护系统中要配置为: 2
    SESS_FREE_IN_SUSPEND    # 远程归档失败会导致系统挂起, 该参数表示归档失败挂起一段时间自动断开所有连接, 默认:60 s 取值范围 0-1800 s
    DW_PORT                 # 守护进程监听的端口, 该参数已经被 dmmal.ini 中的 MAL_INST_PORT 取代
    DW_INACTIVE_INTERVAL    # 服务器认定守护进程未启动的时间, 默认为:60s 取值范围 0-1800 s
    DW_MAX_SVR_WAIT_TIME    # 数据库等待守护进程启动的最大时间, 如果在设定时间内守护进程没有启动, 数据库实例则强制退出 默认为:0 取值范围 0-65534 s
    REDOS_BUF_SIZE          # 等待重演日志堆积的内存限制, 默认为:1024 取值范围 0-65536 MB
    REDOS_BUF_NUM           # 等待重演日志缓冲区运行堆积的数量, 超过此参数配置产生的新的日志会被延迟加入重演队列 默认为:4096 取值范围 0~9999
    REDOS_MAX_DELAY         # 备库重演日志缓冲区中的时间限制, 
    REDOS_PRE_LOAD          # 备库重演日志时是否开启预加载功能, 提前解析redo日志并加载数据页到缓存中 默认为: 0 1:表示开启
    REDOS_SEND_APPLY_MON    # 主库: 表示最近N次主库到备库的归档发送时间 备库: 最近N次备库重演日志的时间, 默认主备均统计最近64次的时间信息 取值范围 16 ~ 1024
    REDOS_PARALLEL_NUM      # 指定备库日志重演进程的数量   默认为:1 表示不开启并行 取值范围 1~64
    REDOS_ENABLE_SELECT     # 是否运行备库执行SELECT 操作, 默认为:1 0: 表示仅可以查询性能视图


dmmal.ini 相关配置
    -- 所有实例的 MAL 配置文件必须保持一致
    [MAL_NAME]              # MAL名称, 同一个配置文件中 MAL 名称需要保持唯一性
    MAL_CHECK_INTERVAL      # 链路检测时间间隔 默认为: 30s 取值范围 0 - 1800 s
    MAL_CONN_FAIL_INTERVAL  # 链路断开的时间, 默认为: 10s  取值范围 2 - 1800 s
    MAL_LOGIN_TIMEOUT       # MPP/DBLINK等实例之间登录的超时检测间隔 默认为:15s 取值范围 3-1800 s
    MAL_BUF_SIZE            # 单个 MAL 缓存大小限制, 当 MAL缓存的信息超过此大小, 则会将信息存储到文件中 默认为:100M 取值范围 0-500000M  0:表示不限制单个MAL缓存大小
    MAX_SYS_BUF_SIZE        # MAL系统总内存发小限制 默认为:0 取值范围 0-500000 M
    MAL_VPOOL_SIZE          # MAL系统使用的内存初始化大小 默认为:128M 取值范围 1-500000 M 该值要设置比MAL_BUF_SIZE大一些
    MAL_COMPRESS_LEVEL      # MAL消息压缩 默认为:0 不压缩 取值范围 0-10
    MAL_TEMP_PATH           # 指定临时文件的目录, 当产生的MAL信息超过 MAL_BUF_SIZE 时 存储在文件的路径 , 默认存储在 temp.dbf 中
    MAL_INST_NAME           # 数据库实例名称, 要和 dm.ini 中的 INSTANCE_NAME 保持一致 并且 数据库实例名要唯一
    MAL_HOST                # MAL使用的IP地址, MAL_HOST + MAL_PORT 创建 MAL 链路
    MAL_PORT                # MAL使用的端口
    MAL_INST_HOST           # 数据库实例对外提供服务的IP地址, 如果 dm.ini 中配置了 LISTEN_IP 则需要和 LISTEN_IP 保持一致
    MAL_INST_PORT           # 数据库实例对外提供服务的端口, 要和 dm.ini 中配置的 PORT_NUM 保持一致
    MAL_DW_PORT             # 本地数据库实例的守护进程监听的端口   MAL_HOST + MAL_DW_PORT 创建该数据库实例和守护进程的TCP连接
    MAL_INST_DW_PORT        # 守护进程监听的端口, 同一个库上各实例的守护进程 使用 MAL_HOST + MAL_INST_DW_PORT 和各实例创建TCP连接
    MAL_LINK_MAGIC          # MAL 链路的网段表示, 默认为:0 同一网段内的节点都要设置相同, 不同网段内的节点设置的值必须不一样
    MAL_MESSAGE_CHECK       # 是否对MAL通信消息启动消息体校验 默认为:1 0:表示不启动


dmarch.ini
    [ARCH_NAME]    归档日志名称
    ARCH_WAIT_APPLY      # 配置归档模式, 事务一致性模式 还是 高性能模式  实时归档默认为:0 读写分离模式为:1
    ARCH_RESERVE_TIME    # 归档保留的时间 默认为:0 表示不删除归档, 取值范围 0~4294967294 单位分钟  数据库每隔5分钟检查一次是否存在超过保留时间的归档进行删除
    ARCH_LOCAL_SHARE     # 专用于 DMDSC 集群中, 配置共享归档 0: 不共享 1: 共享
    ARCH_TYPE            # 归档类型 LOCAL REMOTE REALTIME TIMELY ASYNC
    ARCH_DEST            # 归档目标, 本地归档配置为存放归档的目录, 其他方式配置为数据库实例名称   DMDSC配置数据库实例名使用 "/" 分隔 例如: dsc1/dsc2
    ARCH_FILE_SIZE       # 单个归档日志文件大小, 默认:1024M 取值单位 64-2048
    ARCH_SPACE_LIMIT     # 限制归档使用的磁盘空间, 默认为:0 表示不限制 取值范围 1024-2147483647 M
    ARCH_FLUSH_BUF_SIZE  # 归档合并刷盘的缓存大小, 默认为:0 表示不使用归档合并刷盘 取值范围 0-128 M
    ARCH_TIMER_NAME      # 定时器名称, 仅对异步归档有效
    ARCH_INCOMING_PATH   # 对应远程归档目标 ARCH_DEST 在本地存放的归档路径
    ARCH_SEND_DELAY      # 指定源库到异步备库的归档延迟发送时间, 默认为:0 表示不开启归档延迟功能 取值范围 0-1440 单位分钟


dmwatcher.ini
    [GROUP_NAME]            # 守护进程组的组名 长度不能超过16
    DW_TYPE                 # 守护类型 LOCAL | GLOBAL
    DW_MODE                 # 切换模式 默认为: MANUAL AUTO:自动切换模式
    DW_ERROR_TIME           # 守护进程故障认定时间, 默认为: 15s 没有收到守护进程的消息则认定远程守护进程故障
    INST_ERROR_TIME         # 数据库故障认证时间, 默认: 15s 没有收到数据库发送的状态信息则认定数据库出现故障 取值范围 3-32767s
    INST_OGUID              # 数据守护唯一标识符 OGUID 
    INST_INI                # 守护进程监控数据库实例配置文件路径 dm.ini 的路径
    DCR_INI                 # DMDSC 环境专用
    INST_AUTO_RESTART       # 是否自动重启数据库实例 0: 不重启 1: 自动重启
    INST_STARTUP_CMD        # 数据库启动命令 
    INST_RECOVER_TIME       # 备库故障恢复检测时间间隔, 默认为 60s 也可以通过监视器设置该值
    INST_SERVICE_IP_CHECK   # 针对 LINUX 服务启动方式, 守护进程会自动检测OPEN主库的公共网络是否故障, 如果故障则通知主库强制退出
    RLOG_SEND_THRESHOLD     # 获取归档的次数, v$arch_send_info记录了实际发送归档次数
    RLOG_APPLY_THRESHOLD    # 针对WINDOWS的命令, 指定备库重演日志的时间阈值


dmmonitor.ini
    MON_DW_CONFIRM          # 是否配置为确认监视器 默认为:0
    MON_LOG_PATH            # 日志文件路径
    MON_LOG_INTERVAL        # 记录系统状态新到日志文件的时间间隔 0: 表示不记录 默认为1, 表示1s 取值范围: 5~3600
    MON_LOG_FILE_SIZE       # 单个日志文件大小 默认:64M 取值范围 16-2048
    MON_LOG_SPACE_LIMIT     # 日志使用的磁盘空间限制 0: 不限制 取值范围: 256-4096
    MON_TAKEOVER_SHUTDOWN   # 主库正常退出时, 备库自动接管需要等待的时间 默认为:0, 表示不启动备库自动接管功能
    [GROUP_NAME]            # 守护进程组名 和 dmwatcher.ini 保持一致
    MON_INST_OGUID          # 数据守护唯一标识符 OGUID
    MON_DW_IP               # 守护进程的IP地址 + 端口
    MON_MESSAGE_CHECK       # 是否开启消息体校验
    MON_INST_ID             # 监视器实例在监视器系统的id
    MON_MID                 # 当前监视器系统的唯一标识
    MON_ID                  # 当前监视器在监视器系统中的id
    MON_HOST                # 监视器在监视系统中的通信IP
    MON_PORT                # 监视器在监视系统中的通信PORT
    MON_INST_NUM            # 配置监视器实例的总个数
    MON_HB_INTERVAL         # 各监视器之间的通信心跳校验间隔
    MON_BRO_INTERVAL        # 各监视器之间通信心跳间隔
    MON_VOTE_INTERVAL       # 监视器的基础投票间隔
    [INST_NAME]             # 监视器实例名

数据守护系统搭建

注意事项

    1、对于新初始化的库, 第一次启动不允许使用 MOUNT 方式, 需要先正常启动并正常退出后, 才可以使用 MOUNT 方式启动
    2、初始化数据时, 如果主库是新初始化的库, 先正常启动并正确退出后, 在使用备份还原方式准备备库数据

数据准备
    1、如果是新搭建数据守护集群, 可以通过脱机备份和脱机还原的方式准备数据
    2、如果主库已经处于运行状态、可以通过连接备份对备库进行脱机还原的方式准备数据
    3、两种方式都需要配置归档


脱机备份、脱机还原方式
    1、关闭数据库
    2、进行脱机备份
        ./dmrman CTLSTMT="BACKUP DATABASE '/dm/data/DAMENG/dm.ini' FULL BACKUPSET  /dmbak/BACKUP_FILE1"
    3、将备份的数据拷贝到备库进行还原操作
        ./dmrman CTLSTMT="RESTORE DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/data/BACKUP_FILE_01'"
        ./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' UPDATE DB_MAGIC"


联机备份、脱机还原方式
    1、对主库进行联机备份
        SQL> BACKUP DATABASE BACKUPSET '/dm/data/BACKUP_FILE_01';
    2、将备份文件拷贝到备机
    3、执行脱机还原操作
        ./dmrman CTLSTMT="RESTORE DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/data/BACKUP_FILE_01'"
        ./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/data/BACKUP_FILE_01'"
        ./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' UPDATE DB_MAGIC"

        联机备份注意事项
            1、对于要作为主库的库, 建议先修改模式为 PRIMARY 模式, 在进行联机备份


环境说明
    实例一  外网IP 100.63.1.1 内网IP 192.168.25.128 数据库端口 5236 MAL_PORT 6236 MAL_DW_PORT 7236 MAL_INST_DW_PORT 8236
    实例二  外网IP 100.63.1.2 内网IP 192.168.25.129 数据库端口 5236 MAL_PORT 6236 MAL_DW_PORT 7236 MAL_INST_DW_PORT 8236
    监视器  外网IP 100.63.1.1 内网IP 192.168.25.128 


一、各个节点安装数据库软件
    [root@itsapp1 ~]# su - dmdba
    [dmdba@itsapp1 ~]$ cd /mnt/dm8/
    [dmdba@itsapp1 dm8]$ ./DMInstall.bin -i


二、主库和备库初始化数据库实例
    主库
        [dmdba@itsapp1 bin]$ ./dminit PATH=/dmdata DB_NAME=dmtest INSTANCE_NAME=dm01

    备库
        [dmdba@itsapp2 bin]$ ./dminit PATH=/dmdata DB_NAME=dmtest INSTANCE_NAME=dm02


三、主库和备库前台启动后关闭数据库
    主库
        [dmdba@itsapp1 bin]$ ./dmserver /dmdata/dmtest/dm.ini   -- 前台启动方式, 在启动的窗口直接输入 exit 则会关闭当前数据库

    备库
        [dmdba@itsapp2 bin]$ ./dmserver /dmdata/dmtest/dm.ini 

    -- 第一次安装完成后, 需要前台启动一次, 才可以对数据库进行备份操作


三、主库进行脱机备份
    [dmdba@itsapp1 bin]$ ./dmrman CTLSTMT="BACKUP DATABASE '/dmdata/dmtest/dm.ini' FULL BACKUPSET '/dmbak/full_database'"
    [dmdba@itsapp1 bin]$ scp -r /dmbak/full_database 100.63.1.2:/dmbak/     -- 将备份文件拷贝到备库, 备库需要进行还原操作


四、备库脱机进行还原
    [dmdba@itsapp2 bin]$ ./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/dmtest/dm.ini' FROM BACKUPSET '/dmbak/full_database'"
    [dmdba@itsapp2 bin]$ ./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/dmtest/dm.ini' FROM BACKUPSET '/dmbak/full_database'"
    [dmdba@itsapp2 bin]$ ./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/dmtest/dm.ini' UPDATE DB_MAGIC"


五、主库进行配置文件修改
    1、dm.ini
        INSTANCE_NAME        = GRP1_RT_01   # 数据库实例名称
        PORT_NUM             = 5236         # 数据库实例监听端口
        DW_INACTIVE_INTERVAL = 60           # 接收守护进程消息超时时间
        ALTER_MODE_STATUS    = 0            # 不允许手工方式修改实例模式/状态/OGUID
        ENABLE_OFFLINE_TS    = 2            # 不允许备库OFFLINE表空间
        MAL_INI              = 1            # 打开MAL系统
        ARCH_INI             = 1            # 打开归档配置
        RLOG_SEND_APPLY_MON  = 64           # 统计最近64次的日志发送信息

    2、dmmal.ini
        MAL_CHECK_INTERVAL     = 5          # MAL链路检测时间间隔
        MAL_CONN_FAIL_INTERVAL = 5          # 判定MAL链路断开的时间

        [MAL_INST1]                         # 示例一的MAL名称
        MAL_INST_NAME    = DM01             # 实例名 和 dm.ini 中的INSTANCE_NAME一致
        MAL_HOST         = 192.168.25.128   # MAL系统监听TCP连接的IP地址
        MAL_PORT         = 6236             # MAL系统监听TCP连接的端口
        MAL_INST_HOST    = 100.63.1.1       # 实例的对外服务IP地址
        MAL_INST_PORT    = 5236             # 实例的对外服务端口, 和 dm.ini 中的PORT_NUM一致
        MAL_DW_PORT      = 7236             # 实例本地的守护进程监听TCP连接的端口
        MAL_INST_DW_PORT = 8236             # 实例监听守护进程TCP连接的端口

        [MAL_INST2]
        MAL_INST_NAME    = DM02
        MAL_HOST         = 192.168.25.129
        MAL_PORT         = 6236
        MAL_INST_HOST    = 100.63.1.2
        MAL_INST_PORT    = 5236
        MAL_DW_PORT      = 7236
        MAL_INST_DW_PORT = 8236

    3、dmarch.ini
        [ARCHIVE_REALTIME]
        ARCH_TYPE = REALTIME          # 实时归档类型
        ARCH_DEST = DM02              # 实时归档目标实例名, 对应备库的数据库实例名

        [ARCHIVE_LOCAL1]
        ARCH_TYPE        = LOCAL      # 本地归档类型
        ARCH_DEST        = /dmarch    # 本地归档文件存放路径
        ARCH_FILE_SIZE   = 128        # 单位MB, 本地单个归档文件最大值
        ARCH_SPACE_LIMIT = 0          # 单位MB, 0表示无限制范围1024~2147483647M

    4、dmwatcher.ini
        [GRP1]                                        # 组名称
        DW_TYPE              = GLOBAL                 # 全局守护类型
        DW_MODE              = AUTO                   # 自动切换模式
        DW_ERROR_TIME        = 10                     # 远程守护进程故障认定时间
        INST_RECOVER_TIME    = 60                     # 主库守护进程启动恢复的间隔时间
        INST_ERROR_TIME      = 10                     # 本地实例故障认定时间
        INST_OGUID           = 453331                 # 守护系统唯一OGUID值
        INST_INI             = /dmdata/dmtest/dm.ini  # dm.ini配置文件路径
        INST_AUTO_RESTART    = 1                      # 打开实例的自动启动功能
        INST_STARTUP_CMD     = /dm8/bin/dmserver      # 命令行方式启动
        RLOG_SEND_THRESHOLD  = 0                      # 指定主库发送日志到备库的时间阈值,默认关闭
        RLOG_APPLY_THRESHOLD = 0                      # 指定备库重演日志的时间阈值,默认关闭


六、备库进行配置文件修改
    1、dm.ini
        dm.ini 和主库的区别在于 INSTANCE_NAME 不同, 其他的都是相同的

    2、dmmal.ini
        和主库保持完全一致

    3、dmarch.ini
        和主库的区别在于 实时归档的 ARCH_DEST 目标是主库的数据库实例名

        [dmdba@itsapp2 bin]$ vi /dmdata/dmtest/dmarch.ini 
        [ARCHIVE_REALTIME]
        ARCH_TYPE = REALTIME    # 实时归档类型
        ARCH_DEST = DM01        # 实时归档目标实例名, 对应备库的数据库实例名

        [ARCHIVE_LOCAL1]
        ARCH_TYPE = LOCAL       # 本地归档类型
        ARCH_DEST = /dmarch     # 本地归档文件存放路径
        ARCH_FILE_SIZE = 128    # 单位MB, 本地单个归档文件最大值
        ARCH_SPACE_LIMIT = 0    # 单位MB, 0表示无限制范围1024~2147483647M

    4、dmwatcher.ini
        和主库保持完全一致


七、主库以 MOUNT 方式启动, 并设置 OGUID 和 主库模式
    [dmdba@itsapp1 bin]$ ./dmserver /dmdata/dmtest/dm.ini mount
    [dmdba@itsapp1 bin]$ ./disql SYSDBA/SYSDBA

    SQL> SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1);
    SQL> SP_SET_OGUID(453331);                      -- 设置的OGUID 要和守护进程配置文件 dmwatcher.ini 中设置的保持一致
    SQL> ALTER DATABASE PRIMARY;
    SQL> SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',0);
    SQL> SELECT instance_name, host_name, status$, mode$, oguid FROM v$instance;
    行号     INSTANCE_NAME HOST_NAME STATUS$ MODE$   OGUID      
    ---------- ------------- --------- ------- ------- -----------
    1          DM01          itsapp1   MOUNT   PRIMARY 453331


八、备库以 MOUNT 方式启动, 并设置 OGUID 和 备库模式
    [dmdba@itsapp2 bin]$ ./dmserver /dmdata/dmtest/dm.ini mount
    [dmdba@itsapp2 bin]$ ./disql SYSDBA/SYSDBA

    SQL> SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1);
    SQL> SP_SET_OGUID(453331);
    SQL> ALTER DATABASE STANDBY;   
    SQL> SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',0);
    SQL> SELECT instance_name, host_name, status$, mode$, oguid FROM v$instance;
    行号     INSTANCE_NAME HOST_NAME STATUS$ MODE$   OGUID      
    ---------- ------------- --------- ------- ------- -----------
    1          DM02          itsapp2   MOUNT   STANDBY 453331


九、配置监视器
    [dmdba@itsapp3 ~]$ vi /dm8/dmmonitor.ini
    MON_DW_CONFIRM = 1         # 确认监视器模式
    MON_LOG_PATH = /dm8/log    # 监视器日志文件存放路径
    MON_LOG_INTERVAL = 60      # 每隔60s定时记录系统信息到日志文件
    MON_LOG_FILE_SIZE = 32     # 每个日志文件最大32M
    MON_LOG_SPACE_LIMIT = 0    # 不限定日志文件总占用空间

    [GRP1]
    MON_INST_OGUID = 453331            # 组GRP1的唯一OGUID值, 要和 守护进程 dmwatcher.ini 中保持一致
    MON_DW_IP = 192.168.25.128:7236    # IP对应 dmmal.ini 中 MAL_HOST PORT对应dmmal.ini中的MAL_DW_PORT
    MON_DW_IP = 192.168.25.129:7236


十、启动各节点的守护进程
    主库
        [dmdba@itsapp1 bin]$ ./dmwatcher /dmdata/dmtest/dmwatcher.ini 
        DMWATCHER[4.0] V8
        DMWATCHER[4.0] IS READY

    备库
        [dmdba@itsapp2 bin]$ ./dmwatcher /dmdata/dmtest/dmwatcher.ini 
        DMWATCHER[4.0] V8
        DMWATCHER[4.0] IS READY


十一、启动监视器
    [dmdba@itsapp3 ~]$ vi /dm8/dmmonitor.ini
    [dmdba@itsapp3 ~]$ cd /dm8/bin
    [dmdba@itsapp3 bin]$ ./dmmonitor /dm8/dmmonitor.ini 
    show
    2022-08-22 15:20:02 
    #================================================================================#
    GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG  
    GRP1             453331      TRUE            AUTO            FALSE     


    <<DATABASE GLOBAL INFO:>>
    DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
    192.168.25.128      7236         2022-08-22 15:20:02  GLOBAL    VALID     OPEN           DM01             OK        1     1     OPEN        PRIMARY   DSC_OPEN       REALTIME  VALID    

    EP INFO:
    INST_IP             INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
    100.63.1.1          5236       OK        DM01             OPEN        PRIMARY   0          0            REALTIME  VALID    4625            40194           4626            40195           NONE                  

    <<DATABASE GLOBAL INFO:>>
    DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
    192.168.25.129      7236         2022-08-22 15:20:02  GLOBAL    VALID     OPEN           DM02             OK        1     1     OPEN        STANDBY   DSC_OPEN       REALTIME  VALID    

    EP INFO:
    INST_IP             INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
    100.63.1.2          5236       OK        DM02             OPEN        STANDBY   0          0            REALTIME  VALID    4601            40194           4601            40194           NONE                  

    DATABASE(DM02) APPLY INFO FROM (DM01), REDOS_PARALLEL_NUM (1):
    DSC_SEQNO[0], (RSEQ, SSEQ, KSEQ)[4625, 4625, 4626], (RLSN, SLSN, KLSN)[40194, 40194, 40195], N_TSK[0], TSK_MEM_USE[512] 
    REDO_LSN_ARR: (40194)

    #================================================================================#
    show global info            -- 输入的命令
    2022-08-22 15:20:55 
    #================================================================================#
    GROUP            OGUID       MON_CONFIRM     MODE            MPP_FLAG  
    GRP1             453331      TRUE            AUTO            FALSE     

    <<DATABASE GLOBAL INFO:>>
    DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
    192.168.25.128      7236         2022-08-22 15:20:55  GLOBAL    VALID     OPEN           DM01             OK        1     1     OPEN        PRIMARY   DSC_OPEN       REALTIME  VALID    

    DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
    192.168.25.129      7236         2022-08-22 15:20:55  GLOBAL    VALID     OPEN           DM02             OK        1     1     OPEN        STANDBY   DSC_OPEN       REALTIME  VALID    

    -- DW_IP       守护进程IP地址
    -- MAL_DW_PORT 守护进程端口
    -- WTIME       守护进程本地的当前时间
    -- WTYPE       守护进程的类型
    -- WCTLSTAT    守护进程控制文件状态 valid split invalid 
    -- WSTATUS     守护进程状态
    -- INAME       数据库实例名称
    -- INST_OK     数据库实例状态是否正常
    -- N_EP        库的节点个数
    -- N_OK        专用于 DMDSC 环境 ok表示DMDSC集群内ok的节点个数
    -- ISTATUS     数据库状态
    -- IMODE       数据库模式
    -- DSC_STATUS
    -- RTYPE       数据库归档模式
    -- RSTAT       备库有效, 表示备库归档状态
        
    #================================================================================#
    show database dm01
    2022-08-22 15:43:07 
    #================================================================================#

    <<DATABASE GLOBAL INFO:>>
    DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
    192.168.25.128      7236         2022-08-22 15:43:07  GLOBAL    VALID     OPEN           dm01             OK        1     1     OPEN        PRIMARY   DSC_OPEN       REALTIME  VALID    

    EP INFO:
    INST_IP             INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
    100.63.1.1          5236       OK        DM01             OPEN        PRIMARY   0          0            REALTIME  VALID    5092            40656           5092            40656           NONE                  

    #================================================================================#
    -- INST_IP         实例的IP
    -- INST_PORT       实例的端口
    -- INST_OK         守护进程认定的节点状态
    -- INAME           数据库实例名
    -- ISTATUS         数据库状态
    -- IMODE           数据库模式
    -- DSC_SEQNO       专用于DSC环境
    -- DSC_CTL_NODE    专用于DSC环境
    -- FSEQ            数据库实例已写入日志文件的RLOG_PKG序号
    -- FLSN            已日志文件的的LSN
    -- CSEQ            当前数据库最新的RLOG_PKG包序号
    -- CLSN            当前数据库实例的最大LSN
    -- DW_STAT_FLAG    数据库实例的执行标记      

    show database dm02
    2022-08-22 15:46:54 
    #================================================================================#

    <<DATABASE GLOBAL INFO:>>
    DW_IP               MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT    
    192.168.25.129      7236         2022-08-22 15:46:53  GLOBAL    VALID     OPEN           dm02             OK        1     1     OPEN        STANDBY   DSC_OPEN       REALTIME  VALID    

    EP INFO:
    INST_IP             INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CTL_NODE RTYPE     RSTAT    FSEQ            FLSN            CSEQ            CLSN            DW_STAT_FLAG          
    100.63.1.2          5236       OK        DM02             OPEN        STANDBY   0          0            REALTIME  VALID    4601            40730           4601            40730           NONE                  

    DATABASE(DM02) APPLY INFO FROM (DM01), REDOS_PARALLEL_NUM (1):
    DSC_SEQNO[0], (RSEQ, SSEQ, KSEQ)[5168, 5168, 5169], (RLSN, SLSN, KLSN)[40730, 40730, 40731], N_TSK[0], TSK_MEM_USE[512] 
    REDO_LSN_ARR: (40730)

    #================================================================================#


十二、注册服务
    主库
    1、注册数据库实例服务
    2、注册守护进程服务
    ./dm_service_installer.sh -t dmserver -p dm01 -dm_ini /dmdata/dmtest/dm.ini -m mount

    备库
    1、注册数据库实例服务
    2、注册守护进程服务

    监视器注册
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服