目前一些主流的数据库系统架构如下:
在 DM MPP 中,数据根据用户指定的分布规则分布在不同的 EP 上。MPP 的核心在于对用户请求的并行执行,其执行流程可简单描述如下:
使用 DM MPP 可获得以下功能特性支持:
服务器配置信息
--初始化实例
[dmdba@dmp ~]$dminit PATH=/dm8/data/ DB_NAME=MPP1_01 INSTANCE_NAME=MPP1_01 PORT_NUM=5236 PAGE_SIZE=32 LOG_SIZE=2048
--启动服务
[dmdba@dmp ~]$ dmserver /dm8/data/MPP1_01/dm.ini
--开启归档
[dmdba@dmp ~]$ disql SYSDBA/[email protected]:5236
SQL> ALTER DATABASE MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/dm8/data/MPP1_01/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200';
SQL> ALTER DATABASE OPEN;
--备份数据
SQL> BACKUP DATABASE BACKUPSET '/dm8/data/MPP1_01/bak/BACKUP_FILE';
--修改dm.ini
SQL> SP_SET_PARA_VALUE (2,'PORT_NUM',5236);
SQL> SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60);
SQL> SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);
SQL> SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);
SQL> SP_SET_PARA_VALUE (2,'MAL_INI',1);
SQL> SP_SET_PARA_VALUE (2,'MPP_INI',1);
SQL> SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);
[dmdba@dmp ~]$ vi /dm8/data/MPP1_01/dmarch.ini
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm8/data/MPP1_01/arch/ #本地归档存放路径
ARCH_FILE_SIZE = 1024 #单个归档大小,单位MB
ARCH_SPACE_LIMIT = 51200 #归档上限,单位MB
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = MPP1_01B #实时归档目标实例名
[dmdba@dmp ~]$ vi /dm8/data/MPP1_01/dmmal.ini
MAL_CHECK_INTERVAL = 10 #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 10 #判定MAL链路断开的时间
MAL_TEMP_PATH = /dm8/data/malpath/MPP1_01/ #临时文件目录
MAL_BUF_SIZE = 512 #单个MAL缓存大小,单位MB
MAL_SYS_BUF_SIZE = 2048 #MAL总大小限制,单位MB
MAL_COMPRESS_LEVEL = 0 #MAL消息压缩等级,0表示不压缩
[MAL_INST1]
MAL_INST_NAME = MPP1_01 #实例名,和 dm.ini中INSTANCE_NAME一致
MAL_HOST = 192.168.10.100 #MAL系统监听TCP连接的IP地址
MAL_PORT = 5336 #MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.2.100 #实例的对外服务IP地址
MAL_INST_PORT = 5236 #实例对外服务端口,和dm.ini中PORT_NUM一致
MAL_DW_PORT = 5436 #实例对应的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 5536 #实例监听守护进程TCP连接的端口
[MAL_INST2]
MAL_INST_NAME = MPP1_01B
MAL_HOST = 192.168.10.101
MAL_PORT = 5337
MAL_INST_HOST = 192.168.2.101
MAL_INST_PORT = 5237
MAL_DW_PORT = 5437
MAL_INST_DW_PORT = 5537
[MAL_INST3]
MAL_INST_NAME = MPP1_02
MAL_HOST = 192.168.10.101
MAL_PORT = 5336
MAL_INST_HOST = 192.168.2.101
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
[MAL_INST4]
MAL_INST_NAME = MPP1_02B
MAL_HOST = 192.168.10.100
MAL_PORT = 5337
MAL_INST_HOST = 192.168.2.100
MAL_INST_PORT = 5237
MAL_DW_PORT = 5437
MAL_INST_DW_PORT = 5537
[dmdba@dmp ~]$ vi /dm8/data/MPP1_01/dmmpp.ini
[service_name1]
mpp_seq_no = 0
mpp_inst_name = MPP1_01
[service_name2]
mpp_seq_no = 1
mpp_inst_name = MPP1_02
[dmdba@dmp ~]$ /dm8/bin/dmctlcvt t2c /dm8/data/MPP1_01/dmmpp.ini /dm8/data/MPP1_01/dmmpp.ctl
[dmdba@dmp ~]$ vi /dm8/data/MPP1_01/dmwatcher.ini
[GMPP1_01]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = MANUAL #故障手动切换模式
DW_ERROR_TIME = 20 #远程守护进程故障认定时间
INST_ERROR_TIME = 20 #本地实例故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_OGUID = 45331 #守护系统唯一OGUID值
INST_INI = /dm8/data/MPP1_01/dm.ini #dm.ini文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm8/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
[GMPP1_02]
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 20
INST_ERROR_TIME = 20
INST_RECOVER_TIME = 60
INST_OGUID = 45332
INST_INI = /dm8/data/MPP1_02/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /dm8/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
--拷贝实例到B机器
[dmdba@dmp ~]$ scp -r /dm8/data/MPP1_01 192.168.10.101:///dm8/data/
[root@dmp ~]# /dm8/script/root/dm_service_installer.sh -t dmserver -p MPP1_01 -dm_ini /dm8/data/MPP1_01/dm.ini -m mount
[root@dmp ~]# /dm8/script/root/dm_service_installer.sh -t dmwatcher -p MPP1_01 -watcher_ini /dm8/data/MPP1_01/dmwatcher.ini
备注:删除自启
[root@dmp ~]# /dm8/script/root/dm_service_uninstaller.sh -n DmServiceMPP1_01
[root@dmp ~]# /dm8/script/root/dm_service_uninstaller.sh -n DmWatcherServiceMPP1_01
--初始化实例
[dmdba@dms1 ~]$ /dm8/bin/dminit PATH=/dm8/data/ DB_NAME=MPP1_02 INSTANCE_NAME=MPP1_02 PORT_NUM=5236 PAGE_SIZE=32 LOG_SIZE=2048
--启动服务
[dmdba@dms1 ~]$ /dm8/bin/dmserver /dm8/data/MPP1_02/dm.ini
--开启归档
[dmdba@dms1 ~]$ /dm8/bin/disql SYSDBA/[email protected]:5236
SQL> ALTER DATABASE MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/dm8/data/MPP1_02/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200';
SQL> ALTER DATABASE OPEN;
--备份数据
SQL> BACKUP DATABASE BACKUPSET '/dm8/data/MPP1_02/bak/BACKUP_FILE';
--修改dm.ini
SQL> SP_SET_PARA_VALUE (2,'PORT_NUM',5236);
SQL> SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60);
SQL> SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);
SQL> SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);
SQL> SP_SET_PARA_VALUE (2,'MAL_INI',1);
SQL> SP_SET_PARA_VALUE (2,'MPP_INI',1);
SQL> SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);
[dmdba@dms1 ~]$ vi /dm8/data/MPP1_02/dmarch.ini
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm8/data/MPP1_02/arch/ #本地归档存放路径
ARCH_FILE_SIZE = 1024 #单个归档大小,单位MB
ARCH_SPACE_LIMIT = 51200 #归档上限,单位MB
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = MPP1_02B #实时归档目标实例名
[dmdba@dms1 ~]$ vi /dm8/data/MPP1_02/dmmal.ini
MAL_CHECK_INTERVAL = 10 #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 10 #判定MAL链路断开的时间
MAL_TEMP_PATH = /dm8/data/malpath/MPP1_02/ #临时文件目录
MAL_BUF_SIZE = 512 #单个MAL缓存大小,单位MB
MAL_SYS_BUF_SIZE = 2048 #MAL总大小限制,单位MB
MAL_COMPRESS_LEVEL = 0 #MAL消息压缩等级,0表示不压缩
[MAL_INST1]
MAL_INST_NAME = MPP1_01 #实例名,和 dm.ini中INSTANCE_NAME一致
MAL_HOST = 192.168.10.100 #MAL系统监听TCP连接的IP地址
MAL_PORT = 5336 #MAL系统监听TCP连接的端口
MAL_INST_HOST = 192.168.2.100 #实例的对外服务IP地址
MAL_INST_PORT = 5236 #实例对外服务端口,和dm.ini中PORT_NUM一致
MAL_DW_PORT = 5436 #实例对应的守护进程监听TCP连接的端口
MAL_INST_DW_PORT = 5536 #实例监听守护进程TCP连接的端口
[MAL_INST2]
MAL_INST_NAME = MPP1_01B
MAL_HOST = 192.168.10.101
MAL_PORT = 5337
MAL_INST_HOST = 192.168.2.101
MAL_INST_PORT = 5237
MAL_DW_PORT = 5437
MAL_INST_DW_PORT = 5537
[MAL_INST3]
MAL_INST_NAME = MPP1_02
MAL_HOST = 192.168.10.101
MAL_PORT = 5336
MAL_INST_HOST = 192.168.2.101
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
[MAL_INST4]
MAL_INST_NAME = MPP1_02B
MAL_HOST = 192.168.10.100
MAL_PORT = 5337
MAL_INST_HOST = 192.168.2.100
MAL_INST_PORT = 5237
MAL_DW_PORT = 5437
MAL_INST_DW_PORT = 5537
[dmdba@dms1 ~]$ vi /dm8/data/MPP1_02/dmmpp.ini
[service_name1]
mpp_seq_no = 0
mpp_inst_name = MPP1_01
[service_name2]
mpp_seq_no = 1
mpp_inst_name = MPP1_02
[dmdba@dms1 ~]$ /dm8/bin/dmctlcvt t2c /dm8/data/MPP1_02/dmmpp.ini /dm8/data/MPP1_02/dmmpp.ctl
[dmdba@dms1 ~]$ vi /dm8/data/MPP1_02/dmwatcher.ini
[GMPP1_01]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = MANUAL #故障手动切换模式
DW_ERROR_TIME = 20 #远程守护进程故障认定时间
INST_ERROR_TIME = 20 #本地实例故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_OGUID = 45331 #守护系统唯一OGUID值
INST_INI = /dm8/data/MPP1_01/dm.ini #dm.ini文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm8/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
[GMPP1_02]
DW_TYPE = GLOBAL
DW_MODE = MANUAL
DW_ERROR_TIME = 20
INST_ERROR_TIME = 20
INST_RECOVER_TIME = 60
INST_OGUID = 45332
INST_INI = /dm8/data/MPP1_02/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /dm8/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
--拷贝实例到A机器
[dmdba@dms1 ~]$ scp -r /dm8/data/MPP1_02 [email protected]:/dm8/data/
[root@dms1 ~]# /dm8/script/root/dm_service_installer.sh -t dmserver -p MPP1_02 -dm_ini /dm8/data/MPP1_02/dm.ini -m mount
[root@dms1 ~]# /dm8/script/root/dm_service_installer.sh -t dmwatcher -p MPP1_02 -watcher_ini /dm8/data/MPP1_02/dmwatcher.ini
备注:删除自启
[root@dms1 ~]# /dm8/script/root/dm_service_uninstaller.sh -n DmServiceMPP1_02
[root@dms1 ~]# /dm8/script/root/dm_service_uninstaller.sh -n DmWatcherServiceMPP1_02
[dmdba@dms1 ~]$ vi /dm8/data/MPP1_01/dm.ini
INSTANCE_NAME = MPP1_01B #数据库实例名
PORT_NUM = 5237 #数据库实例监听端口
[dmdba@dms1 ~]$ vi /dm8/data/MPP1_01/dmarch.ini
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm8/data/MPP1_01/arch/ #本地归档存放路径
ARCH_FILE_SIZE = 1024 #单个归档大小,单位MB
ARCH_SPACE_LIMIT = 51200 #归档上限,单位MB
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = MPP1_01 #实时归档目标实例名
与A机器MPP1_01的dmmal.ini、dmmpp.ini、dmmpp.ctl相同
[root@~]# /dm8/script/root/dm_service_installer.sh -t dmserver -p MPP1_01B -dm_ini /dm8/data/MPP1_01/dm.ini -m mount
备注:删除自启
[root@~]# /dm8/script/root/dm_service_uninstaller.sh -n DmServiceMPP1_01B
3.4.5恢复数据
[dmdba@dms1 ~]$ /dm8/bin/dmrman CTLSTMT="RESTORE DATABASE '/dm8/data/MPP1_01/dm.ini' FROM BACKUPSET '/dm8/data/MPP1_01/bak/BACKUP_FILE'"
[dmdba@dms1 ~]$ /dm8/bin/dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/MPP1_01/dm.ini' FROM BACKUPSET '/dm8/data/MPP1_01/bak/BACKUP_FILE'"
[dmdba@dms1 ~]$ /dm8/bin/dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/MPP1_01/dm.ini' UPDATE DB_MAGIC"
[dmdba@dmp ~]$ vi /dm8/data/MPP1_02/dm.ini
INSTANCE_NAME = MPP1_02B #数据库实例名
PORT_NUM = 5237 #数据库实例监听端口
[dmdba@dmp ~]$ vi /dm8/data/MPP1_02/dmarch.ini
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm8/data/MPP1_02/arch/ #本地归档存放路径
ARCH_FILE_SIZE = 1024 #单个归档大小,单位MB
ARCH_SPACE_LIMIT = 51200 #归档上限,单位MB
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = MPP1_02 #实时归档目标实例名
与B机器MPP1_02的dmmal.ini、dmmpp.ini、dmmpp.ctl相同
[root@dmp ~]# /dm8/script/root/dm_service_installer.sh -t dmserver -p MPP1_02B -dm_ini /dm8/data/MPP1_02/dm.ini -m mount
备注:删除自启
[root@dmp ~]# /dm8/script/root/dm_service_uninstaller.sh -n DmServiceMPP1_02B
[dmdba@dmp ~]$ /dm8/bin/dmrman CTLSTMT="RESTORE DATABASE '/dm8/data/MPP1_02/dm.ini' FROM BACKUPSET '/dm8/data/MPP1_02/bak/BACKUP_FILE'"
[dmdba@dmp ~]$ /dm8/bin/dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/MPP1_02/dm.ini' FROM BACKUPSET '/dm8/data/MPP1_02/bak/BACKUP_FILE'"
[dmdba@dmp ~]$ /dm8/bin/dmrman CTLSTMT="RECOVER DATABASE '/dm8/data/MPP1_02/dm.ini' UPDATE DB_MAGIC"
1、在各节点数据库的bin目录中 存放非确认监视器配置文件。
2、在确认监视器机器上(非集群节点) 注册确认监视器自启服务。
[dmdba@dmm ~]$ vi /dm8/bin/dmmonitor_manual.ini
MON_DW_CONFIRM = 0 #0为非确认,1为确认
MON_LOG_PATH = ../log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 512 #单个日志大小,单位MB
MON_LOG_SPACE_LIMIT = 2048 #日志上限,单位MB
[GMPP1_01]
MON_INST_OGUID = 45331 #组GMPP1_01的唯一OGUID 值
MON_DW_IP = 192.168.10.100:5436 #IP对应MAL_HOST,PORT对应MAL_DW_PORT
MON_DW_IP = 192.168.10.101:5437
[GMPP1_02]
MON_INST_OGUID = 45332 #组GMPP1_02的唯一OGUID 值
MON_DW_IP = 192.168.10.101:5436
MON_DW_IP = 192.168.10.100:5437
[root@dmm ~]# /dm8/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /dm8/bin/dmmonitor_manual.ini
备注:删除自启
[root@dmm ~]# /dm8/script/root/dm_service_uninstaller.sh -n DmMonitorServiceMonitor
A机器-MPP1_01
[dmdba@dmp ~]$ /dm8/bin/DmServiceMPP1_01 start
[dmdba@dmp ~]$ /dm8/bin/disql SYSDBA/[email protected]:5236
SQL> SP_SET_OGUID(45331);
SQL> ALTER DATABASE PRIMARY;
B机器-MPP1_02
[dmdba@dms1 ~]$ /dm8/bin/DmServiceMPP1_02 start
[dmdba@dms1 ~]$ /dm8/bin/disql SYSDBA/[email protected]:5236
SQL> SP_SET_OGUID(45332);
SQL> ALTER DATABASE PRIMARY;
A机器-MPP1_02B
[dmdba@dmp ~]$ /dm8/bin/DmServiceMPP1_02B start
[dmdba@dmp ~]$/dm8/bin/disql SYSDBA/[email protected]:5237
SQL> SP_SET_OGUID(45332);
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL> ALTER DATABASE STANDBY;
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
B机器-MPP1_01B
[dmdba@dms1 ~]$ /dm8/bin/DmServiceMPP1_01B start
[dmdba@dms1 ~]$ /dm8/bin/disql SYSDBA/[email protected]:5237
SQL> SP_SET_OGUID(45331);
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL> ALTER DATABASE STANDBY;
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
A机器:[dmdba@dmp ~]$ /dm8/bin/DmWatcherServiceMPP1_01 start
B机器:[dmdba@dms1 ~]$ /dm8/bin/DmWatcherServiceMPP1_02 start
[dmdba@dmm bin]$ DmMonitorServiceMonitor start
Starting DmMonitorServiceMonitor: [ OK ]
--前台启动
[dmdba@dmm bin]$ dmmonitor dmmonitor_manual.ini
[monitor] 2022-06-01 12:16:58: DMMONITOR[4.0] V8
[monitor] 2022-06-01 12:16:58: DMMONITOR[4.0] IS READY.
[monitor] 2022-06-01 12:16:58: 收到守护进程(MPP1_02)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2022-06-01 12:16:58 OPEN OK MPP1_02 OPEN PRIMARY VALID 3 37860 37860
[monitor] 2022-06-01 12:16:58: 收到守护进程(MPP1_01)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2022-06-01 12:16:58 OPEN OK MPP1_01 OPEN PRIMARY VALID 4 39318 39318
[monitor] 2022-06-01 12:16:58: 收到守护进程(MPP1_01B)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2022-06-01 12:16:58 OPEN OK MPP1_01B OPEN STANDBY VALID 4 39317 39317
[monitor] 2022-06-01 12:16:58: 收到守护进程(MPP1_02B)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2022-06-01 12:16:58 OPEN OK MPP1_02B OPEN STANDBY VALID 3 37859 37859
输入命令非法,请输入help命令查看帮助信息!
tip
[monitor] 2022-06-01 12:17:06: [!!! 提示:本监视器不是确认监视器,在故障自动切换模式下如果发生主库故障,本监视器无法执行自动接管 !!!]
[monitor] 2022-06-01 12:17:06: 实例MPP1_01[PRIMARY, OPEN, ISTAT_SAME:TRUE]不可加入其他实例,守护进程状态:OPEN,Open记录状态:VALID
[monitor] 2022-06-01 12:17:06: 实例MPP1_01[PRIMARY, OPEN, ISTAT_SAME:TRUE]当前没有命令正在执行
[monitor] 2022-06-01 12:17:06: 实例MPP1_01[PRIMARY, OPEN, ISTAT_SAME:TRUE]运行正常, 守护进程是OPEN状态,守护类型是GLOBAL
[monitor] 2022-06-01 12:17:06: 实例MPP1_01B[STANDBY, OPEN, ISTAT_SAME:TRUE]可加入实例MPP1_01[PRIMARY, OPEN, ISTAT_SAME:TRUE]
[monitor] 2022-06-01 12:17:06: 实例MPP1_01B[STANDBY, OPEN, ISTAT_SAME:TRUE]当前没有命令正在执行
[monitor] 2022-06-01 12:17:06: 实例MPP1_01B[STANDBY, OPEN, ISTAT_SAME:TRUE]运行正常, 守护进程是OPEN状态,守护类型是GLOBAL
[monitor] 2022-06-01 12:17:06: 组(GMPP1_01)当前活动实例运行正常
[monitor] 2022-06-01 12:17:06: 实例MPP1_02[PRIMARY, OPEN, ISTAT_SAME:TRUE]不可加入其他实例,守护进程状态:OPEN,Open记录状态:VALID
[monitor] 2022-06-01 12:17:06: 实例MPP1_02[PRIMARY, OPEN, ISTAT_SAME:TRUE]当前没有命令正在执行
[monitor] 2022-06-01 12:17:06: 实例MPP1_02[PRIMARY, OPEN, ISTAT_SAME:TRUE]运行正常, 守护进程是OPEN状态,守护类型是GLOBAL
[monitor] 2022-06-01 12:17:06: 实例MPP1_02B[STANDBY, OPEN, ISTAT_SAME:TRUE]可加入实例MPP1_02[PRIMARY, OPEN, ISTAT_SAME:TRUE]
[monitor] 2022-06-01 12:17:06: 实例MPP1_02B[STANDBY, OPEN, ISTAT_SAME:TRUE]当前没有命令正在执行
[monitor] 2022-06-01 12:17:06: 实例MPP1_02B[STANDBY, OPEN, ISTAT_SAME:TRUE]运行正常, 守护进程是OPEN状态,守护类型是GLOBAL
[monitor] 2022-06-01 12:17:06: 组(GMPP1_02)当前活动实例运行正常
[monitor] 2022-06-01 12:17:06: 系统当前活动组(有活动PRIMARY实例)的MPP控制文件处于一致状态!
[monitor] 2022-06-01 12:17:06: 所有组中的活动实例运行正常!
i
启动
A机器:[dmdba@dmp ~]$ /dm8/bin/DmWatcherServiceMPP1_01 start
B机器:[dmdba@~]# /dm8/bin/DmWatcherServiceMPP1_02 start
停止
A机器:[dmdba@dmp ~]$ /dm8/bin/DmWatcherServiceMPP1_01 stop
B机器:[dmdba@dms1 ~]$ /dm8/bin/DmWatcherServiceMPP1_02 stop
A机器:[dmdba@dmp ~]$ /dm8/bin/DmServiceMPP1_01 stop
B机器:[dmdba@dms1 ~]$ /dm8/bin/DmServiceMPP1_02 stop
B机器:[dmdba@dms1 ~]$ /dm8/bin/DmServiceMPP1_01B stop
A机器:[dmdba@dmp ~]$ /dm8/bin/DmServiceMPP1_02B stop
参考手动切换步骤进行配置,唯一区别如下:
[dmdba@dmp ~]$ vi /dm8/data/MPP1_01/dmwatcher.ini
[GMPP1_01]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #故障手动切换模式
DW_ERROR_TIME = 20 #远程守护进程故障认定时间
INST_ERROR_TIME = 20 #本地实例故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_OGUID = 45331 #守护系统唯一OGUID值
INST_INI = /dm8/data/MPP1_01/dm.ini #dm.ini文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm8/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
[GMPP1_02]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 20
INST_ERROR_TIME = 20
INST_RECOVER_TIME = 60
INST_OGUID = 45332
INST_INI = /dm8/data/MPP1_02/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /dm8/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
[dmdba@dmm ~]$ vi /dm8/bin/dmmonitor_manual.ini
MON_DW_CONFIRM = 1 #0为非确认,1为确认
MON_LOG_PATH = ../log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 512 #单个日志大小,单位MB
MON_LOG_SPACE_LIMIT = 2048 #日志上限,单位MB
[GMPP1_01]
MON_INST_OGUID = 45331 #组GMPP1_01的唯一OGUID 值
MON_DW_IP = 192.168.10.100:5436 #IP对应MAL_HOST,PORT对应MAL_DW_PORT
MON_DW_IP = 192.168.10.101:5437
[GMPP1_02]
MON_INST_OGUID = 45332 #组GMPP1_02的唯一OGUID 值
MON_DW_IP = 192.168.10.101:5436
MON_DW_IP = 192.168.10.100:5437
[root@dmm root]# ./dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /dm8/bin/dmmonitor_auto.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmMonitorServiceMonitor.service to /usr/lib/systemd/system/DmMonitorServiceMonitor.service.
创建服务(DmMonitorServiceMonitor)完成
[dmdba@dmm ~]$ DmMonitorServiceMonitor start
Starting DmMonitorServiceMonitor: [ OK ]
[dmdba@dmm ~]$
[dmdba@dmm bin]$ dmmonitor dmmonitor_auto.ini
[monitor] 2022-06-01 13:11:43: DMMONITOR[4.0] V8
[monitor] 2022-06-01 13:11:43: DMMONITOR[4.0] IS READY.
[monitor] 2022-06-01 13:11:43: 收到守护进程(MPP1_02B)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2022-06-01 13:11:43 OPEN OK MPP1_02B OPEN STANDBY NULL 3 38953 38953
[monitor] 2022-06-01 13:11:43: 收到守护进程(MPP1_01B)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2022-06-01 13:11:43 OPEN OK MPP1_01B OPEN STANDBY NULL 4 40411 40411
[monitor] 2022-06-01 13:11:43: 收到守护进程(MPP1_02)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2022-06-01 13:11:43 OPEN OK MPP1_02 OPEN PRIMARY VALID 3 38954 38955
[monitor] 2022-06-01 13:11:43: 收到守护进程(MPP1_01)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2022-06-01 13:11:43 OPEN OK MPP1_01 OPEN PRIMARY VALID 4 40412 40413
输入命令非法,请输入help命令查看帮助信息!
tip
[monitor] 2022-06-01 13:11:52: 实例MPP1_01[PRIMARY, OPEN, ISTAT_SAME:TRUE]不可加入其他实例,守护进程状态:OPEN,Open记录状态:VALID
[monitor] 2022-06-01 13:11:52: 实例MPP1_01[PRIMARY, OPEN, ISTAT_SAME:TRUE]当前没有命令正在执行
[monitor] 2022-06-01 13:11:52: 实例MPP1_01[PRIMARY, OPEN, ISTAT_SAME:TRUE]运行正常, 守护进程是OPEN状态,守护类型是GLOBAL
[monitor] 2022-06-01 13:11:52: 实例MPP1_01B[STANDBY, OPEN, ISTAT_SAME:TRUE]可加入实例MPP1_01[PRIMARY, OPEN, ISTAT_SAME:TRUE]
[monitor] 2022-06-01 13:11:52: 实例MPP1_01B[STANDBY, OPEN, ISTAT_SAME:TRUE]当前没有命令正在执行
[monitor] 2022-06-01 13:11:52: 实例MPP1_01B[STANDBY, OPEN, ISTAT_SAME:TRUE]运行正常, 守护进程是OPEN状态,守护类型是GLOBAL
[monitor] 2022-06-01 13:11:52: 组(GMPP1_01)当前活动实例运行正常
[monitor] 2022-06-01 13:11:52: 实例MPP1_02[PRIMARY, OPEN, ISTAT_SAME:TRUE]不可加入其他实例,守护进程状态:OPEN,Open记录状态:VALID
[monitor] 2022-06-01 13:11:52: 实例MPP1_02[PRIMARY, OPEN, ISTAT_SAME:TRUE]当前没有命令正在执行
[monitor] 2022-06-01 13:11:52: 实例MPP1_02[PRIMARY, OPEN, ISTAT_SAME:TRUE]运行正常, 守护进程是OPEN状态,守护类型是GLOBAL
[monitor] 2022-06-01 13:11:52: 实例MPP1_02B[STANDBY, OPEN, ISTAT_SAME:TRUE]可加入实例MPP1_02[PRIMARY, OPEN, ISTAT_SAME:TRUE]
[monitor] 2022-06-01 13:11:52: 实例MPP1_02B[STANDBY, OPEN, ISTAT_SAME:TRUE]当前没有命令正在执行
[monitor] 2022-06-01 13:11:52: 实例MPP1_02B[STANDBY, OPEN, ISTAT_SAME:TRUE]运行正常, 守护进程是OPEN状态,守护类型是GLOBAL
[monitor] 2022-06-01 13:11:52: 组(GMPP1_02)当前活动实例运行正常
[monitor] 2022-06-01 13:11:52: 系统当前活动组(有活动PRIMARY实例)的MPP控制文件处于一致状态!
[monitor] 2022-06-01 13:11:52: 所有组中的活动实例运行正常!
--shutdown abort实例
[dmdba@dmp MPP1_01]$ disql SYSDBA/[email protected]:5236
服务器[192.168.10.100:5236]:处于主库打开状态
登录使用时间 : 3.951(ms)
disql V8
SQL>
SQL> shutdown abort;
操作已执行
已用时间: 0.441(毫秒). 执行号:0.
--查看监视器
[monitor] 2022-06-01 13:13:45: 实例MPP1_01[PRIMARY, OPEN, ISTAT_SAME:TRUE]故障
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2022-06-01 13:13:45 STARTUP ERROR MPP1_01 OPEN PRIMARY VALID 5 41934 41934
[monitor] 2022-06-01 13:13:45: 守护进程(MPP1_01)状态切换 [OPEN-->STARTUP]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2022-06-01 13:13:45 STARTUP ERROR MPP1_01 OPEN PRIMARY VALID 5 41934 41934
[monitor] 2022-06-01 13:13:45: 检测到PRIMARY实例故障,开始对组(GMPP1_01)执行自动接管
[monitor] 2022-06-01 13:13:45: 通知组(GMPP1_01)当前活动的守护进程设置MID
[monitor] 2022-06-01 13:13:45: 通知组(GMPP1_01)当前活动的守护进程设置MID成功
[monitor] 2022-06-01 13:13:45: 通知组(GMPP1_02)当前活动的守护进程设置MID
[monitor] 2022-06-01 13:13:46: 通知组(GMPP1_02)当前活动的守护进程设置MID成功
[monitor] 2022-06-01 13:13:46: 开始使用实例MPP1_01B接管
[monitor] 2022-06-01 13:13:46: 通知守护进程MPP1_01B切换TAKEOVER状态
[monitor] 2022-06-01 13:13:46: 守护进程(MPP1_01B)状态切换 [OPEN-->TAKEOVER]
[monitor] 2022-06-01 13:13:47: 切换守护进程MPP1_01B为TAKEOVER状态成功
[monitor] 2022-06-01 13:13:47: 实例MPP1_01B开始执行SP_SET_GLOBAL_DW_STATUS(0, 7)语句
[monitor] 2022-06-01 13:13:47: 实例MPP1_01B执行SP_SET_GLOBAL_DW_STATUS(0, 7)语句成功
[monitor] 2022-06-01 13:13:47: 实例MPP1_01B开始执行SP_APPLY_KEEP_PKG()语句
[monitor] 2022-06-01 13:13:47: 实例MPP1_01B执行SP_APPLY_KEEP_PKG()语句成功
[monitor] 2022-06-01 13:13:47: 实例MPP1_01B开始执行ALTER DATABASE MOUNT语句
[monitor] 2022-06-01 13:13:47: 实例MPP1_01B执行ALTER DATABASE MOUNT语句成功
[monitor] 2022-06-01 13:13:47: 实例MPP1_01B开始执行ALTER DATABASE PRIMARY语句
[monitor] 2022-06-01 13:13:47: 实例MPP1_01B执行ALTER DATABASE PRIMARY语句成功
[monitor] 2022-06-01 13:13:47: 通知实例MPP1_01B修改所有归档状态无效
[monitor] 2022-06-01 13:13:47: 修改所有实例归档为无效状态成功
[monitor] 2022-06-01 13:13:47: 构造新的MPPCTL文件成功
[monitor] 2022-06-01 13:13:47: 通知更新实例MPP1_01B[PRIMARY, MOUNT, ISTAT_SAME:TRUE]的MPPCTL文件
[monitor] 2022-06-01 13:13:47: 通知实例MPP1_01B[PRIMARY, MOUNT, ISTAT_SAME:TRUE]更新MPPCTL文件成功
[monitor] 2022-06-01 13:13:47: 通知更新实例MPP1_02[PRIMARY, OPEN, ISTAT_SAME:TRUE]的MPPCTL文件
[monitor] 2022-06-01 13:13:47: 通知守护进程MPP1_02切换MPPCTL UPDATE状态
[monitor] 2022-06-01 13:13:47: 守护进程(MPP1_02)状态切换 [OPEN-->MPPCTL UPDATE]
[monitor] 2022-06-01 13:13:48: 切换守护进程MPP1_02为MPPCTL UPDATE状态成功
[monitor] 2022-06-01 13:13:48: 实例MPP1_02开始执行SP_SET_GLOBAL_DW_STATUS(0, 12)语句
[monitor] 2022-06-01 13:13:48: 实例MPP1_02执行SP_SET_GLOBAL_DW_STATUS(0, 12)语句成功
[monitor] 2022-06-01 13:13:48: 实例MPP1_02开始执行SP_SET_GLOBAL_DW_STATUS(12, 0)语句
[monitor] 2022-06-01 13:13:48: 实例MPP1_02执行SP_SET_GLOBAL_DW_STATUS(12, 0)语句成功
[monitor] 2022-06-01 13:13:48: 通知守护进程MPP1_02切换OPEN状态
[monitor] 2022-06-01 13:13:49: 守护进程(MPP1_02)状态切换 [MPPCTL UPDATE-->OPEN]
[monitor] 2022-06-01 13:13:50: 切换守护进程MPP1_02为OPEN状态成功
[monitor] 2022-06-01 13:13:50: 通知实例MPP1_02[PRIMARY, OPEN, ISTAT_SAME:TRUE]更新MPPCTL文件成功
[monitor] 2022-06-01 13:13:50: 实例MPP1_01B开始执行ALTER DATABASE OPEN FORCE语句
[monitor] 2022-06-01 13:13:50: 实例MPP1_01B执行ALTER DATABASE OPEN FORCE语句成功
[monitor] 2022-06-01 13:13:50: 实例MPP1_01B开始执行SP_SET_GLOBAL_DW_STATUS(7, 0)语句
[monitor] 2022-06-01 13:13:50: 实例MPP1_01B执行SP_SET_GLOBAL_DW_STATUS(7, 0)语句成功
[monitor] 2022-06-01 13:13:50: 通知守护进程MPP1_01B切换OPEN状态
[monitor] 2022-06-01 13:13:51: 守护进程(MPP1_01B)状态切换 [TAKEOVER-->OPEN]
[monitor] 2022-06-01 13:13:51: 切换守护进程MPP1_01B为OPEN状态成功
[monitor] 2022-06-01 13:13:51: 通知组(GMPP1_01)的守护进程执行清理操作
[monitor] 2022-06-01 13:13:51: 清理守护进程(MPP1_01)请求成功
[monitor] 2022-06-01 13:13:51: 清理守护进程(MPP1_01B)请求成功
[monitor] 2022-06-01 13:13:51: 通知组(GMPP1_02)的守护进程执行清理操作
[monitor] 2022-06-01 13:13:51: 清理守护进程(MPP1_02)请求成功
[monitor] 2022-06-01 13:13:51: 清理守护进程(MPP1_02B)请求成功
[monitor] 2022-06-01 13:13:51: 使用实例MPP1_01B接管成功
[monitor] 2022-06-01 13:13:51: 组(GMPP1_01)使用实例MPP1_01B自动接管成功
输入命令非法,请输入help命令查看帮助信息!
tip
[monitor] 2022-06-01 13:14:05: 实例MPP1_01B[PRIMARY, OPEN, ISTAT_SAME:TRUE]不可加入其他实例,守护进程状态:OPEN,Open记录状态:VALID
[monitor] 2022-06-01 13:14:05: 实例MPP1_01B[PRIMARY, OPEN, ISTAT_SAME:TRUE]当前没有命令正在执行
[monitor] 2022-06-01 13:14:05: 实例MPP1_01B[PRIMARY, OPEN, ISTAT_SAME:TRUE]运行正常, 守护进程是OPEN状态,守护类型是GLOBAL
[monitor] 2022-06-01 13:14:05: 实例MPP1_01[PRIMARY, OPEN, ISTAT_SAME:TRUE]当前没有命令正在执行
[monitor] 2022-06-01 13:14:05: 实例MPP1_01[PRIMARY, OPEN, ISTAT_SAME:TRUE]故障,请等待守护进程将其自动拉起
[monitor] 2022-06-01 13:14:05: 组(GMPP1_01)中当前有PRIMARY&OPEN的实例,但存在有其他异常实例,请参考上述提示信息进行处理!
[monitor] 2022-06-01 13:14:05: 实例MPP1_02[PRIMARY, OPEN, ISTAT_SAME:TRUE]不可加入其他实例,守护进程状态:OPEN,Open记录状态:VALID
[monitor] 2022-06-01 13:14:05: 实例MPP1_02[PRIMARY, OPEN, ISTAT_SAME:TRUE]当前没有命令正在执行
[monitor] 2022-06-01 13:14:05: 实例MPP1_02[PRIMARY, OPEN, ISTAT_SAME:TRUE]运行正常, 守护进程是OPEN状态,守护类型是GLOBAL
[monitor] 2022-06-01 13:14:05: 实例MPP1_02B[STANDBY, OPEN, ISTAT_SAME:TRUE]可加入实例MPP1_02[PRIMARY, OPEN, ISTAT_SAME:TRUE]
[monitor] 2022-06-01 13:14:05: 实例MPP1_02B[STANDBY, OPEN, ISTAT_SAME:TRUE]当前没有命令正在执行
[monitor] 2022-06-01 13:14:05: 实例MPP1_02B[STANDBY, OPEN, ISTAT_SAME:TRUE]运行正常, 守护进程是OPEN状态,守护类型是GLOBAL
[monitor] 2022-06-01 13:14:05: 组(GMPP1_02)当前活动实例运行正常
[monitor] 2022-06-01 13:14:05: 系统当前活动组(有活动PRIMARY实例)的MPP控制文件处于一致状态!
[monitor] 2022-06-01 13:14:05: 所有组中都存在有PRIMARY&OPEN实例,但仍然存在有异常实例!
[monitor] 2022-06-01 13:14:08: 实例MPP1_01[STANDBY, MOUNT, ISTAT_SAME:TRUE]恢复正常
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2022-06-01 13:14:08 STARTUP OK MPP1_01 MOUNT STANDBY INVALID 5 41934 41934
[monitor] 2022-06-01 13:14:09: 守护进程(MPP1_01)状态切换 [STARTUP-->OPEN]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2022-06-01 13:14:09 OPEN OK MPP1_01 OPEN STANDBY INVALID 5 41934 41934
[monitor] 2022-06-01 13:14:19: 守护进程(MPP1_01B)状态切换 [OPEN-->RECOVERY]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2022-06-01 13:14:19 RECOVERY OK MPP1_01B OPEN PRIMARY VALID 6 43302 43302
[monitor] 2022-06-01 13:14:22: 守护进程(MPP1_01B)状态切换 [RECOVERY-->OPEN]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2022-06-01 13:14:22 OPEN OK MPP1_01B OPEN PRIMARY VALID 6 43303 43303
输入命令非法,请输入help命令查看帮助信息!
show global info
2022-06-01 13:14:32
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GMPP1_01 45331 TRUE AUTO TRUE
<<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.10.101 5437 2022-06-01 13:14:31 GLOBAL VALID OPEN MPP1_01B 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.10.100 5436 2022-06-01 13:14:31 GLOBAL VALID OPEN MPP1_01 OK 1 1 OPEN STANDBY DSC_OPEN REALTIME VALID
#--------------------------------------------------------------------------------#
2022-06-01 13:14:32
#--------------------------------------------------------------------------------#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GMPP1_02 45332 TRUE AUTO TRUE
<<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.10.101 5436 2022-06-01 13:14:32 GLOBAL VALID OPEN MPP1_02 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.10.100 5437 2022-06-01 13:14:32 GLOBAL VALID OPEN MPP1_02B OK 1 1 OPEN STANDBY DSC_OPEN REALTIME VALID
#================================================================================#
--登录的时候失败
[dmdba@dmp backup_file]$ disql SYSDBA/[email protected]:5236
[-6024]:全局登录时远程节点连接失败.
disql V8
用户名:SYSDBA
密码:
[-6024]:全局登录时远程节点连接失败.
用户名:
密码:
[-6024]:全局登录时远程节点连接失败.
--原因
MPP系统中数据分布在各个EP中,用户只需要登录到某个EP,系统自动建立这个 EP与其余 EP 的连接,因此用户建立的实际上是与整个 MPP 系统的全局连接,用户对数据库的操作通过全局连接在 MPP 系统的所有 EP 进行。使用全局连接时,要求 MPP 系统的所有EP都正常提供服务,否则无法建立接。
--解决,启动MPP1_02实例
[dmdba@dms1 MPP1_01]$ DmServiceMPP1_02 start
Starting DmServiceMPP1_02: [ OK ]
--尝试登录
[dmdba@dmp backup_file]$ disql SYSDBA/[email protected]:5236
服务器[LOCALHOST:5236]:处于普通配置状态
登录使用时间 : 3.198(ms)
disql V8
社区地址:https://eco.dameng.com
文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr
文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc
文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8
文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束
文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求
文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname
文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<iostream>#include<stack>#include<queue>using namespace std;typed_二叉树的建立
文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码
文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词
文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限
文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定
文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland