一、环境
原有主库:10.172.147.33 备库:10.172.147.34 新增备库:10.172.147.35
二、操作步骤
1. 从主库进行全库备份
BACKUP DATABASE BACKUPSET '/dm/data/DAMENG/bak/BACKUP_FILE';
2. 新备库初始化实例并进行恢复
实例化实例
dminit PATH=/dm/data PAGE_SIZE=32 EXTENT_SIZE=32 DB_NAME=DAMENG LOG_SIZE=2048 PORT_NUM=1521
前台启动然后退出
将主库的备份复制到新增备库
scp -r /dm/data/DAMENG/bak/BACKUP_FILE 10.172.147.35:/dm/data/DAMENG/bak/
然后开始进行恢复
dmrman use_ap=2 CTLSTMT="RESTORE DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/data/DAMENG/bak/BACKUP_FILE'"
注:如果此处报错提示【-4558】:文件已存在,再次恢复提示system.dbf文件不存在,是和dm.ini有关,可将主库的复制过来用一下
dmrman use_ap=2 CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/data/DAMENG/bak/BACKUP_FILE'"
dmrman use_ap=2 CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' UPDATE DB_MAGIC"
3. 新增备库配置 dm.ini dmarch.ini dmmal.ini dmwatcher.ini
可以复制主库的这几个文件,然后进行修改,主要修改的地方有:
Dm.ini 的instance_name
Dmarch.ini中新增实时归档目标
Dmmal.ini 新增mal_instance
主库和第一个备库的参数文件不需要更新,后面会通过命令动态增加归档和mal_instance。
4. 将新备库以mount方式启动
5. 新备库设置OGUID、修改数据库模式
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
sp_set_oguid(45330);
alter database standby;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
6. 主库和旧备库动态添加 mal
SF_MAL_CONFIG(1,0);
SF_MAL_INST_ADD('MAL_INST3','DMSERVER_03', '10.172.147.35',5336,'10.172.147.35',1521,5436,0,5536);
SF_MAL_CONFIG_APPLY();
SF_MAL_CONFIG(0,0);
查看dmmal.ini,多了mal_inst3
7. 主库和旧备库动态添加归档
关闭原系统中所有实例的守护进程和监视器
顺序为:1)关闭监视器 2) 关闭备库守护进程 3) 关闭主库守护进程
手动修改原系统中所有实例为 MOUNT 状态
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SP_SET_PARA_VALUE(1, 'DW_INACTIVE_INTERVAL', 0); //临时关闭守护进程活动状态检测,允许用户手动修改模式状态,动态添加完毕后需要再改回原值
ALTER DATABASE MOUNT;
动态添加新的归档节点,在原系统中所有实例都执行
ALTER DATABASE ADD ARCHIVELOG 'DEST=DMSERVER_03, TYPE=REALTIME';
查看dmarch.ini,多了DMSERVER_03
手动修改原系统中所有实例为 OPEN 状态
必须先修改备库,再修改主库,否则可能会引发主备数据同步失败导致主库挂起
ALTER DATABASE OPEN FORCE;
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
SP_SET_PARA_VALUE(1, 'DW_INACTIVE_INTERVAL', 60);
8.启动watcher
分别启动主库和备库(包括 新增备库)的所有守护进程,最后修改dmmonitor.ini后启动监视器,查看状态
三、总结
1. 当在添加归档节点时,需要将原系统中所有实例mount,此时,原有的连接不会断开,但是不能进行操作,提示数据库是mount状态,当实例open后,才可以进行操作,所以只能算是伪动态。
2. 如果想暂停主备同步,可以使用detach database dbname将备库摘出去。恢复同步使用attach database dbname,但要保证归档日志不缺失,即使只缺最新的也不会进行同步。
3. 函数解释
SF_MAL_CONFIG设置 MAL 配置状态。
SF_MAL_CONFIG(CFG_FLAG INT,BRO_FLAG INT)
CFG_FLAG: 1,设置配置状态; 0 取消配置状态
BRO_FLAG: 1,多节点广播设置; 0 本地设置
SF_MAL_CONFIG_APPLY() 将 MAL 配置生效
SF_MAL_INST_ADD增加 MAL 配置项
SF_MAL_INST_ADD(ITEM_NAME VARCHAR,INST_NAME VARCHAR,MAL_IP VARCHAR,MAL_PORT INT,MAL_INST_IP VARCHAR,MAL_INST_PORT INT)
ITEM_NAME: 配置项名称
INST_NAME: 实例名
MAL_IP: MAL IP 地址
MAL_PORT: MAL 端口
MAL_INST_IP 实例 IP 地址
MAL_INST_PORT 实例端口