类别 | 实例名 | 服务器地址 | 心跳IP |
---|---|---|---|
主库 | ZB1 | 192.168.11.128 | 10.10.1.128 |
备库 | ZB2 | 192.168.11.129 | 10.10.1.129 |
名称 | 端口 |
---|---|
PORT_NUM | 5236 |
MAL_PORT | 7336 |
MAL_DW_PORT | 7536 |
MAL_INST_DW_PORT | 7436 |
MAL_INST_PORT | 5236 |
注意:上述IP地址对应的服务器端口要求双向互通,监视器心跳IP要求和主备服务器心跳IP在同一网段。
目录 | 路径 |
---|---|
安装目录 | /home/dmdba/dmdbms |
数据文件目录 | /home/dmdba/dbdata/dmdata |
备份目录 | /home/dmdba/dbbak/dmbak |
归档目录 | /home/dmdba/dbarch/dmarch |
先安装好数据库软件
注意:两台服务器都需要安装
2个节点都有实例初始化,执行以下命令:
主机ZB1:
[dmdba@LH01 ~]$ cd /home/dmdba/dmdbms/bin
[dmdba@LH01 bin]$./dminit path=/home/dmdba/dbdata/dmdata page_size=32 log_size=1024 instance_name=ZB1
开启服务
[dmdba@ZB1 bin]$ cp service_template/DmService dmserverd [dmdba@ZB1 bin]$ vim dmserverd INI_PATH=/home/dmdba/dbdata/dmdata/DAMENG/dm.ini [dmdba@ZB1 bin]$ dmserverd start
开机自启配置
[root@ZB1 ~]# cd /home/dmdba/dmdbms/bin
[root@ZB1 bin]# cp dmserverd /etc/init.d/
[root@ZB1 bin]# chkconfig --add dmserverd
[root@ZB1 bin]# chkconfig --list
备机ZB2:
[dmdba@ZB2 ~]$ cd /home/dmdba/dmdbms/bin
[dmdba@ZB2 bin]$ ./dminit path=/home/dmdba/dbdata/dmdata page_size=32 log_size=1024 instance_name=ZB2
开启服务
[dmdba@ZB2 bin]$ cp service_template/DmService dmserverd [dmdba@ZB2 bin]$ vim dmserverd INI_PATH=/home/dmdba/dbdata/dmdata/DAMENG/dm.ini [dmdba@ZB2 bin]$ dmserverd start
开机自启配置
[root@ZB2 ~]# cd /home/dmdba/dmdbms/bin
[root@ZB2 bin]# cp dmserverd /etc/init.d/
[root@ZB2 bin]# chkconfig --add dmserverd
[root@ZB2 bin]# chkconfig --list
主备机前台启动实例,出现system is ready后即为启动完成
[dmdba@ZB1 bin]$ ./dmserver /home/dmdba/dbdata/dmdata/DAMENG/dm.ini [dmdba@ZB2 bin]$ ./dmserver /home/dmdba/dbdata/dmdata/DAMENG/dm.ini
登录数据库执行参数优化脚本
[dmdba@ZB1 bin]$ ./disql SYSDBA/SYSDBA@192.168.11.128:5236 SQL> start /home/dmdba/dm.sql [dmdba@ZB2 bin]$ ./disql SYSDBA/SYSDBA@192.168.11.129:5236 SQL> start /home/dmdba/dm.sql
在主机ZB1上执行以下命令,确认主库dmap服务已启动:
ps -ef|grep dmap
若未启动,则先启动 DMAP 服务,使用dmdba用户切换到安装目录的 bin 下执行以下命令:
./DmAPService start
若已启动,则执行以下命令进行脱机备份
[dmdba@ZB1 bin]$ ./dmserverd stop
[dmdba@ZB1 bin]$ ./dmrman use_ap=2
[dmdba@ZB1 bin]$backup database '/home/dmdba/dbdata/dmdata/DAMENG/dm.ini' backupset '/home/dmdba/dbbak/dmbak/bakfull';
将备份的文件/home/dmdba/dbbak/dmbak/bakfull拷贝到备库服务器上。
[dmdba@ZB1 dmbak]# scp -r bakfull/ dmdba@192.168.11.129:/home/dmdba/dbbak/dmbak
在备机ZB2上,使用 dmrman 工具还原备库,dmdba 用户执行:
[dmdba@ZB2 dmbak]$ cd /home/dmdba/dmdbms/bin
[dmdba@ZB2 bin]$ ./dmserverd stop
[dmdba@ZB2 bin]$ ./dmrman
##执行restore
RMAN> restore database '/home/dmdba/dbdata/dmdata/DAMENG/dm.ini' from backupset '/home/dmdba/dbbak/dmbak/bakfull';
##执行recover
RMAN> recover database '/home/dmdba/dbdata/dmdata/DAMENG/dm.ini' from backupset '/home/dmdba/dbbak/dmbak/bakfull';
##执行recover update db_magic
RMAN> recover database '/home/dmdba/dbdata/dmdata/DAMENG/dm.ini' update db_magic;
在ZB1和ZB2上分别修改dm.ini参数值:
vi /dmdata/DAMENG/dm.ini
MAL_INI = 1 ARCH_INI = 1 ALTER_MODE_STATUS = 0 ENABLE_OFFLINE_TS = 2
在ZB1和ZB2上分别修改dmarch.ini参数值:
[dmdba@ZB1 DAMENG]$ vi /home/dmdba/dbdata/dmdata/DAMENG/dmarch.ini [dmdba@ZB2 DAMENG]$ vi /home/dmdba/dbdata/dmdata/DAMENG/dmarch.ini
##注意:如果没有dmarch.ini需要新建
主机ZB1上添加以下内容:
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
aRCH_DEST = ZB2 #实时归档目标实例名(主库侧填写备库实例名)
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /home/dmdba/dbarch/dmarch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 MB,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 10240 #单位 MB,0 表示无限制,范围 1024~4294967294 MB
备机ZB2上添加以下内容:
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
aRCH_DEST = ZB1 #实时归档目标实例名(主库侧填写备库实例名)
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /home/dmdba/dbarch/dmarch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 MB,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 10240 #单位 MB,0 表示无限制,范围 1024~4294967294 MB
在实例目录下新建文件 dmmal.ini,执行以下命令。
[dmdba@ZB1 DAMENG]$ vi /home/dmdba/dbdata/dmdata/DAMENG/dmmal.ini
##注意:主备库2个节点文件内容要相同,内容如下:
MAL_CHECK_INTERVAL = 5 MAL_CONN_FAIL_INTERVAL = 15 [MAL_INST1] MAL_INST_NAME = ZB1 MAL_HOST = 10.10.1.128 MAL_PORT = 7336 MAL_INST_HOST = 192.168.11.128 MAL_INST_PORT = 5236 MAL_DW_PORT = 7536 MAL_INST_DW_PORT = 7436 [MAL_INST2] MAL_INST_NAME = ZB2 MAL_HOST = 10.10.1.129 MAL_PORT = 7336 MAL_INST_HOST = 192.168.11.129 MAL_INST_PORT = 5236 MAL_DW_PORT = 7536 MAL_INST_DW_PORT = 7436
在实例目录下新建文件 dmwatcher.ini,执行以下命令:
vi /home/dmdba/dbdata/dmdata/DAMENG/dmwatcher.ini
##注意:主备库2个节点文件内容相同(由于实例路径的原因),内容如下:
[GRP_DW]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /home/dmdba/dbdata/dmdata/DAMENG/dm.ini # dm.ini 配置文件>路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserverd #命令行方式启动
修改主库oguid和数据库状态,在ZB1上执行以下命令
(1)主库mount方式后台启动
在ZB1上目录/dmdbms/bin/service_template拷贝DmService文件到/ dmdbms/bin目录下改名为dmserverd,然后修改dmserverd中INI_PATH为主库dm.ini路径(/dmdata/DAMENG/dm.ini),修改START_MODE为mount,保存修改后,执行命令:
./dmserverd start #启动主库数据库后台服务
(2)使用disql工具连接主库
[dmdba@ZB1 bin]$ ./disql SYSDBA/SYSDBA@192.168.11.128:5236
(3)修改oguid
SQL> sp_set_oguid(453331);
(4)修改数据库模式为primary
SQL> alter database primary;
修改备库oguid和数据库状态,在ZB2上执行以下命令
(1)备库mount方式后台启动
在ZB2上目录/dmdbms/bin/service_template拷贝DmService文件到/ dmdbms/bin目录下改名为dmserverd,然后修改dmserverd中INI_PATH为主库dm.ini路径(/dmdata/DAMENG/dm.ini),修改START_MODE为mount,保存修改后,执行命令:
./dmserverd start #启动主库数据库后台服务
(2)使用disql工具连接备库
[dmdba@ZB2 bin]$ ./disql SYSDBA/SYSDBA@192.168.11.129:5236
(3)修改oguid
sp_set_oguid(453331);
(4)修改数据库模式为standby
alter database standby;
如果不慎配成了primary,解决办法如下:
SQL> sp_set_para_value(1,'ALTER_MODE_STATUS',1);
SQL> alter database standby;
就可以了
(1)守护进程后台启动脚本
在ZB1和ZB2上的目录/dmdbms/bin/service_template拷贝DmWatcherService文件到/ dmdbms/bin目录下,然后修改DmWatcherService中 INI_PATH为ZB1和ZB2指定守护进程配置文件dmwatcher.ini的路径(比如/ dmdata/DAMENG/dmwatcher.ini)。
[root@ZB1 dmdbms]# cp ./bin/service_template/DmWatcherService ./bin/DmWatcherService
[root@ZB1 bin]# vi DmWatcherService
INI_PATH=/home/dmdba/dbdata/dmdata/DAMENG/dmwatcher.ini
(2)监视器进程后台脚本
在要部署的监视服务器ZB2上的/dmdbms/bin/service_template拷贝DmMonitorService到/dmdbms/bin目录下,然后修改DmMonitorService中INI_PATH为监视器配置文件dmmonitor.ini路径(比如/ dmdata/DAMENG/dmmonitor.ini).
[dmdba@ZB2 DAMENG]$ cd /home/dmdba/dmdbms/bin
[dmdba@ZB2 bin]$ cp ./service_template/DmMonitorService DmMonitorService
[dmdba@ZB2 bin]$ vi DmMonitorService
INI_PATH=/home/dmdba/dbdata/dmdata/DAMENG/dmmonitor.ini
[dmdba@ZB2 bin]$ cd /home/dmdba/dbdata/dmdata/DAMENG/
[dmdba@ZB2 DAMENG]$ vi dmmonitor.ini
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /home/dmdba/dbdata/dmdata/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60 s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 200 #每个日志文件最大 32 MB
MON_LOG_SPACE_LIMIT = 1024 #不限定日志文件总占用空间
[GRP_DW]
MON_INST_OGUID = 453331 #组 GRP_DW 的唯一 OGUID 值
#以下配置为监视器到组 GRP_DW 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 10.10.1.128:7536
MON_DW_IP = 10.10.1.129:7536
ZB1和ZB2切换到/dmdata/DAMENG/目录下,执行vi sqllog.ini(记录1.5s以上sql),修改内容如下:
[dmdba@ZB1 bin]$ cd /home/dmdba/dbdata/dmdata/DAMENG/
[dmdba@ZB1 DAMENG]$ vi sqllog.ini
BUF_TOTAL_SIZE = 10240 BUF_SIZE = 1024 BUF_KEEP_CNT = 6 [SLOG_ALL] FILE_PATH = /sqllog PART_STOR = 1 SWITCH_MODE = 2 SWITCH_LIMIT = 512 ASYNC_FLUSH = 1 FILE_NUM = 10 ITEMS = 0 SQL_TRACE_MASK = 7:14:15:22:24:25:26:27:28 MIN_EXEC_TIME = 0 USER_MODE = 0 USERS =
备注:SQL_TRACE_MASK请按实际需求配置。如果在服务器启动过程中,修改了sqllog.ini文件。修改之后的文件,只要调用过SQL> SP_REFRESH_SVR_LOG_CONFIG();就会生效。
(1)启动守护进程
dmdba 用户切换到数据库安装目录的 bin 下执行以下命令(主备库都执行):
[dmdba@ZB1 bin]$ ./DmWatcherService start [dmdba@ZB2 bin]$ ./DmWatcherService start
守护进程启动后,会将 Mount 的实例 Open。
(2)启动监视器进程
建议配置在第三台独立的服务器上(需安装和主备相同 版本的DM 数据库软件(不必初始化实例),且与主备心跳网络端口开放),守护进程配置为自动切换时,必须配置确认监视器。
使用执行以下命令,启动监视器。
[dmdba@ZB2 bin]$ ./DmMonitorService start
启动后到 /dmdbms/log查找监视器日志,其中守护进程状态 WSTATUS 为 OPEN,实例状态 ISTATUS 为 OPEN,归档类型 RTYPE 为 TIMELY,归档状态 RSTAT 为VALID。
注意:数据库日常运行情况下,监视器保持后台运行,一旦数据库有异常,可打印出监视器日志,帮助工程师分析。如果需要实时监测,可以临时关掉后台进程,改成前台启动或者重新配置一个监视器前台启动(总共可以配置8个非确认监视器):
用dmdba用户执行以下命令,前台启动监视器:
[dmdba@ZB2 bin]$ ./dmmonitor /home/dmdba/dbdata/dmdata/DAMENG/dmmonitor.ini
输入 show 命令查看集群状态:
其中守护进程状态 WSTATUS 为 OPEN,实例状态 ISTATUS 为 OPEN,归档类型 RTYPE 为 TIMELY,归档状态 RSTAT 为VALID。
(3)disql 客户端验证
使用 disql 客户端登录主库,创建测试表,插入数据,执行以下命令:
[dmdba@ZB1 bin]$./disql SYSDBA/SYSDBA@192.168.11.128:5236 SQL 提示符下执行以下命令: SQL> create table t1(id int); 操作已执行 已用时间: 160.022(毫秒). 执行号:600. SQL> insert into t1 values(1); 影响行数 1 已用时间: 37.799(毫秒). 执行号:601. SQL> commit; 操作已执行
使用 disql 客户端登录备库,查询测试表验证,执行以下命令:
[dmdba@ZB1 bin]$./disql SYSDBA/SYSDBA@192.168.11.129:5236 SQL 提示符下执行以下命令: SQL>select * from t1;
查看数据是否正常同步。
备份与单机相同(主库上备份)。
SP_INIT_JOB_SYS(1);
---全备:
call SP_CREATE_JOB('dbbak',1,0,'',0,0,'',0,'bak');
call SP_JOB_CONFIG_START('dbbak');
call SP_ADD_JOB_STEP('dbbak', 'full_bak', 6, '01040000/dbbak/dmbak', 3, 1, 0, 0, NULL, 0);
call SP_ADD_JOB_STEP('dbbak', 'delbak', 0, 'call SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/dbbak/dmbak'');
call SF_BAKSET_REMOVE_BATCH(''DISK'',NOW()-7,NULL,NULL);', 1, 1, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('dbbak', 'bak_time', 1, 2, 1, 64, 0, '00:30:00', NULL, '2022-03-28 11:02:45', NULL, '');
call SP_JOB_CONFIG_COMMIT('dbbak');
---增备:
call SP_CREATE_JOB('increbak',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('increbak');
call SP_ADD_JOB_STEP('increbak', 'incre_bak', 6, '11040000/dbbak/dmbak|/dbbak/dmbak', 1, 1, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('increbak', 'incre_time', 1, 2, 1, 63, 0, '00:30:00', NULL, '2022-03-10 11:34:42', NULL, '');
call SP_JOB_CONFIG_COMMIT('increbak');
文章
阅读量
获赞