环境:
OS:Centos 7
DB:V8
说明:
主库上安装数据库软件和启动数据库,主库在归档模式
从库上只安装了数据库软件
主备库的数据目录一致
说明:
主库上安装数据库软件和启动数据库,主库在归档模式
从库上只安装了数据库软件
主备库的数据目录一致
目录规划(主备一致):
/dmdbms/dmarch ##归档日志目录
/dmdbms/dmbak ##dmrman备份目录
/dmdbms/dmdata ##数据目录
/dmdbms/product ##软件安装目录
1.环境准备
服务器 主库IP:192.168.1.135 dm8数据库 实例名:slnngk 端口号:5236
服务器 备库IP:192.168.1.134 dm8数据库 实例名:slnngkbak 端口号:5236
2.主库需要配置归档
若已经在归档模式的,可以省略该步骤
disql sysdba/dameng123
alter database mount;
alter database add archivelog ‘dest=/dmdata/dmarch,TYPE=local,FILE_SIZE=1024,SPACE_LIMIT=204800’;
alter database archivelog;
alter database open;
3.初始化备库
因为备库目前只是安装了数据库软件,没有安装数据库,是新的库,可以进行初始化(字符集跟主库保持一致)
[root@localhost ~]# su – dmdba
[dmdba@localhost ~]$ cd /dmdbms/product/bin
[dmdba@localhost ~]$./dminit path=/dmdbms/dmdata charset=1 db_name=slnngk instance_name=slnngkbak SYSDBA_PWD=”dameng123″ SYSAUDITOR_PWD=”dameng123″
4.关闭主库,以 dmrman 备份数据库
关闭数据库
[dmdba@localhost ~]$ disql sysdba/dameng123
SQL> shutdown immediate;
或是使用操作系统命令关闭
systemctl stop DmServiceslnngk.service
这个时候查看服务情况
systemctl status DmServiceslnngk.service
[root@localhost dmdbms]# su – dmdba
[dmdba@localhost ~]$ dmrman
dmrman V8
RMAN>backup database ‘/dmdbms/dmdata/slnngk/dm.ini’ backupset ‘/dmdbms/dmbak’;
5.将备份文件复制到备库对应目录下(如果是root用户,复制成功需要将备份文件设置属于dmdba:dinstall用户组)
我这里是使用dmdba账号进行scp传输的
scp -r /dmdbms/dmbak/* dmdba@192.168.1.134:/dmdbms/dmbak
6.备库使用dmrman执行数据库还原
这个时候备库是没有启动的,疑惑备库原来初始化的数据目录下的文件是否可以删除掉?
[root@localhost ~]# su – dmdba
[dmdba@localhost ~]$ dmrman
dmrman V8
按顺序执行3个命令:
restore database ‘/dmdbms/dmdata/slnngk/dm.ini’ from backupset ‘/dmdbms/dmbak’;
recover database ‘/dmdbms/dmdata/slnngk/dm.ini’ from backupset ‘/dmdbms/dmbak’;
recover database ‘/dmdbms/dmdata/slnngk/dm.ini’ update db_magic;
RMAN> restore database '/dmdbms/dmdata/slnngk/dm.ini' from backupset '/dmdbms/dmbak'; restore database '/dmdbms/dmdata/slnngk/dm.ini' from backupset '/dmdbms/dmbak'; file dm.key not found, use default license! Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL [Percent:100.00%][Speed:0.00M/s][Cost:00:00:06][Remaining:00:00:00] restore successfully. time used: 00:00:06.952 RMAN> recover database '/dmdbms/dmdata/slnngk/dm.ini' from backupset '/dmdbms/dmbak'; recover database '/dmdbms/dmdata/slnngk/dm.ini' from backupset '/dmdbms/dmbak'; Database mode = 0, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[40437], file_lsn[40437] no log generates while the backupset [/dmdbms/dmbak] created recover successfully! time used: 401.954(ms) RMAN> recover database '/dmdbms/dmdata/slnngk/dm.ini' update db_magic; recover database '/dmdbms/dmdata/slnngk/dm.ini' update db_magic; Database mode = 0, oguid = 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL EP[0]'s cur_lsn[40437], file_lsn[40437] recover successfully! time used: 00:00:01.160
7.配置集群文件
7.1 vim dm.ini #主备库实例都需更改下面参数
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间 MAL_INI = 1 #打开 MAL 系统 ARCH_INI = 1 #打开归档配置
7.2 vim dmmal.ini #主备库配置必须完全一致
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间 [MAL_INST1] MAL_INST_NAME = SLNNGK #实例名,和 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 192.168.1.135 #MAL 系统监听 TCP 连接的 IP 地址 MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.1.135 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #实例的对外服务端口,dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 33141 #实例监听守护进程 TCP 连接的端口 [MAL_INST2] MAL_INST_NAME = SLNNGKBAK MAL_HOST = 192.168.1.134 MAL_PORT = 61141 MAL_INST_HOST = 192.168.1.134 MAL_INST_PORT = 5236 MAL_DW_PORT = 52141 MAL_INST_DW_PORT = 33141
在主库上创建然后scp到备库
scp /dmdbms/dmdata/slnngk/dmmal.ini dmdba@192.168.1.134:/dmdbms/dmdata/slnngk/
7.3 vim dmarch.ini
主库:
若主库上已经配置了本地归档的,那么只需要添加ARCHIVE_REALTIME部分
[ARCHIVE_REALTIME] ARCH_TYPE = REALTIME #实时归档类型 ARCH_DEST = SLNNGKBAK #实时归档目标实例名,这里是备库的实例名 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /dmdbms/dmarch #本地归档文件存放路径 ARCH_FILE_SIZE = 1024 #单位Mb,本地单个归档文件最大值 ARCH_SPACE_LIMIT = 204800 #单位Mb,0 表示无限制,范围 1024~4294967294M ARCH_FLUSH_BUF_SIZE = 0 ARCH_HANG_FLAG = 1
备库:
[ARCHIVE_REALTIME] ARCH_TYPE = REALTIME #实时归档类型 ARCH_DEST = SLNNGK #实时归档目标实例名,这里是主库的实例名 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /dmdbms/dmarch #本地归档文件存放路径 ARCH_FILE_SIZE = 1024 #单位Mb,本地单个归档文件最大值 ARCH_SPACE_LIMIT = 204800 #单位Mb,0 表示无限制,范围 1024~4294967294M ARCH_FLUSH_BUF_SIZE = 0 ARCH_HANG_FLAG = 1
7.4 配置dmwatcher.ini #主备库配置一致
[GRP1] DW_TYPE = GLOBAL ##全局守护类型 DW_MODE = MANUAL ##手工切换 AUTO自动切换模式必须部署一个确认监视器 DW_ERROR_TIME = 10 ##远程守护进程故障认定时间 INST_RECOVER_TIME = 60 ##主库守护进程启动恢复的间隔时间 INST_ERROR_TIME = 10 ##本地实例故障认定时间 INST_OGUID = 453332 ##守护系统唯一 OGUID 值 INST_INI = /dmdbms/dmdata/slnngk/dm.ini #dm.ini配置文件路径 INST_AUTO_RESTART = 1 ##打开实例的自动启动功能 INST_STARTUP_CMD = /dmdbms/product/bin/dmserver #命令行方式启动 RLOG_SEND_THRESHOLD = 0 ##指定主库发送日志到备库的时间阀值,默认关闭 RLOG_APPLY_THRESHOLD = 0 ##指定备库重演日志的时间阀值,默认关闭
7.5 vim dmmonitor.ini
#生产环境如果是自动切换需单独一台服务器配置监视器(我这里只需要手工切换,该配置文件省略)
MON_DW_Confirm = 0 ## 0表示普通监视器 ,最多配置8个,1 确认监视器模式 MON_LOG_PATH = /dmdbms/log ##监视器日志文件存放路径 MON_LOG_INTERVAL = 60 ##每隔 60s 定时记录系统信息到日志文件 MON_LOG_FILE_SIZE = 32 ##每个日志文件最大 32M MON_LOG_SPACE_LIMIT = 0 ##不限定日志文件总占用空间 [GRP1] MON_INST_OGUID = 453332 #组 GRP1 的唯一OGUID 值 ##配置为监视器到组GRP1的守护进程的连接信息以―IP:PORT‖的形式配置 ##IP对应dmmal.ini中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT MON_DW_IP = 192.168.1.135:52141 MON_DW_IP = 192.168.1.134:52141
8.以 Mount方式启动主备库
su – dmdba
dmserver /dmdbms/dmdata/slnngk/dm.ini mount
启动主库
[root@localhost dmdbms]# su – dmdba
dmserver /dmdbms/dmdata/slnngk/dm.ini mount
改成后台启动
nohup dmserver /dmdbms/dmdata/slnngk/dm.ini mount>dmserver.log &
启动备库
su – dmdba
dmserver /dmdbms/dmdata/slnngk/dm.ini mount
改成后台启动
nohup dmserver /dmdbms/dmdata/slnngk/dm.ini mount>dmserver.log &
#一定要以 Mount 方式启动数据库实例,否则系统启动时会重构回滚表空间,生成 Redo 日志;
##启动后应用可能连接到数据库实例进行操作,破坏主备库的数据一致性。数据守护配置结束后,守护进程会自动 Open 数据库
9.启动命令行工具 disql,登录主备库设置 OGUID 值和数据库模式。
9.1 主库
disql sysdba/dameng123
sp_set_oguid(453332);
alter database primary;
9.2 备库
disql sysdba/dameng123
sp_set_oguid(453332);
alter database standby;
这个时候数据库是在mount状态的:
System in mount status.
10.启动各个主备库上的守护进程
主库
dmwatcher /dmdbms/dmdata/slnngk/dmwatcher.ini
后台执行:
nohup dmwatcher /dmdbms/dmdata/slnngk/dmwatcher.ini>dmwatcher.log &
备库
dmwatcher /dmdbms/dmdata/slnngk/dmwatcher.ini
后台执行:
nohup dmwatcher /dmdbms/dmdata/slnngk/dmwatcher.ini>dmwatcher.log &
这个时候主库是open状态了
SQL> select status$,mode$ from v$instance;
LINEID STATUS$ MODE$
———- ——- ——-
1 OPEN PRIMARY
从库:
SQL> select status$,mode$ from v$instance;
LINEID STATUS$ MODE$
———- ——- ——-
1 OPEN STANDBY
used time: 4.518(ms). Execute id is 100.
SQL>
11.数据验证
主库上建表并写入数据
[dmdba@localhost ~]$ disql hxl/dameng123
create table tb_test01
(
id number,
name varchar(32)
);
insert into tb_test01 values(1,’name1′);
insert into tb_test01 values(2,’name2′);
insert into tb_test01 values(3,’name3′);
insert into tb_test01 values(4,’name4′);
insert into tb_test01 values(5,’name5′);
从库上登陆查看:
[dmdba@localhost ~]$ disql hxl/dameng123
SQL> select * from tb_test01;
LINEID ID NAME
———- — —–
1 1 name1
2 2 name2
3 3 name3
4 4 name4
5 5 name5
used time: 3.782(ms). Execute id is 200.
12.这个时候查看数据库的系统服务
主库,我们这里启动都是采用dmserver方式启动的,可以不用理会系统的启动方式
[root@localhost ~]# systemctl status DmServiceslnngk.service ● DmServiceslnngk.service - DM Instance Service Loaded: loaded (/usr/lib/systemd/system/DmServiceslnngk.service; enabled; vendor preset: disabled) Active: inactive (dead) since Tue 2022-07-12 10:07:26 CST; 1h 29min ago Process: 32474 ExecStop=/dmdbms/product/bin/DmServiceslnngk stop (code=exited, status=0/SUCCESS) Process: 32017 ExecStart=/dmdbms/product/bin/DmServiceslnngk start (code=exited, status=0/SUCCESS) Main PID: 32043 (code=exited, status=0/SUCCESS) Jul 12 10:04:06 localhost.localdomain systemd[1]: Starting DM Instance Service... Jul 12 10:04:21 localhost.localdomain DmServiceslnngk[32017]: [37B blob data] Jul 12 10:04:21 localhost.localdomain systemd[1]: Started DM Instance Service. Jul 12 10:07:20 localhost.localdomain systemd[1]: Stopping DM Instance Service... Jul 12 10:07:26 localhost.localdomain DmServiceslnngk[32474]: [37B blob data] Jul 12 10:07:26 localhost.localdomain systemd[1]: Stopped DM Instance Service.
13.备库重启动
停掉
disql sysdba/dameng123
SQL> shutdown immediate;
executed successfully
启动
dmserver /dmdbms/dmdata/slnngk/dm.ini
SQL> select status$,mode$ from v$instance;
LINEID STATUS$ MODE$
———- ——- ——-
1 MOUNT STANDBY
SQL> alter database open;
alter database open;
[-720]:Error in line: 1
Dmwatcher is active, or current configuration(ALTER_MODE_STATUS) not allowed to alter database.
used time: 0.284(ms). Execute id is 0.
这个是需要主备都启动dmwatcher,后数据库才能open模式
dmwatcher /dmdbms/dmdata/slnngk/dmwatcher.ini
SQL> select status$,mode$ from v$instance;
Server[LOCALHOST:5236]:mode is standby, state is open
connected
LINEID STATUS$ MODE$
———- ——- ——-
1 OPEN STANDBY
原创文章,作者:,如若转载,请注明出处:https://blog.ytso.com/tech/database/273844.html