问题描述
开发让把数据库启动下,启动后输入如下报错:
字面意思的报错就是参数非法,推测是有人改参数没改对,可是和开发沟通没人改参数。
--查看进程
[root@topnet31 ~]# ps -ef | grep dmserver
dmdba 34732 1 1 5月27 ? 00:21:03 /opt/dmdba/dmdbms/bin/dmserver path=/opt/dmdba/data/topoers/dm.ini
--启动实例
[dmdba@topnet31 bin]$ cd /opt/dmdba/dmdbms/bin/
[dmdba@topnet31 bin]$ ./DmServiceTOPISP start
Starting DmServiceTOPISP: [ FAILED ]
Global parameter value of LIKE_OPT_FLAG is illegal, use max value!
Global parameter value of VIEW_PULLUP_FLAG is illegal, use max value!
Global parameter value of GROUP_OPT_FLAG is illegal, use max value!
Global parameter value of HASH_PLL_OPT_FLAG is illegal, use max value!
Global parameter value of ENHANCED_SUBQ_MERGING is illegal, use default value!
Global parameter value of OUTER_CVT_INNER_PULL_UP_COND_FLAG is illegal, use default value!
Global parameter value of SUBQ_EXP_CVT_FLAG is illegal, use max value!
Global parameter value of TOP_ORDER_OPT_FLAG is illegal, use default value!
Global parameter value of SPEED_SEMI_JOIN_PLAN is illegal, use max value!
Global parameter value of CNNTB_OPT_FLAG is illegal, use max value!
Global parameter value of NBEXP_OPT_FLAG is illegal, use max value!
Global parameter value of VIEW_FILTER_MERGING is illegal, use max value!
Global parameter value of PSEG_RECV is illegal, use max value!
Global parameter value of ENABLE_IGNORE_PURGE_REC is illegal, use default value!
version info: enterprise
ctl file info get failed!
问题原因
一个服务器上部署了2个版本不同的数据库,dmserver命令所在的目录不对。
[dmdba@topnet31 ~]$ find / -name dmserver
/opt/dmdba/dm8/bin/dmserver
/opt/dmdba/dmdbms/bin/dmserver
解决办法
换个版本的安装目录启动解决
--启动实例
[dmdba@topnet31 bin]$ cd /opt/dmdba/dm8/bin
[dmdba@topnet31 bin]$ ./DmServiceTOPISP start
补充
数据库启动过程
shutdown->mount
根据配置文件 dm.ini 分配共享内存, 启动后台进程/线程, 找到控制文件的位置, 验证控制文件是否损坏, 最后打开控制文件。
mount->open
根据控制文件找到数据库的数据文件和重做日志文件, 分析数据库是否需要做恢复。
控制文件介绍
每个DM 数据库都有一个名为dm.ctl的控制文件。控制文件是一个二进制文件,它记录了数据库必要的初始信息,其中主要包含以下内容:
- 数据库名称;
- 数据库服务器模式;
- OGUID 唯一标识;
- 数据库服务器版本;
- 数据文件版本;
- 数据库的启动次数;
- 数据库最近一次启动时间;
- 表空间信息,包括表空间名,表空间物理文件路径等,记录了所有数据库中使用的表空间,数组的方式保存起来;
- 控制文件校验码,校验码由数据库服务器在每次修改控制文件后计算生成,保证控制文件合法性,防止文件损坏及手工修改。
最后,达梦在数据文件保护方面做的还是挺好的,版本不匹配直接启动失败,保持数据文件不变化。但是在一个服务器上部署多个版本的场景下,有个弊端就是,库关闭后不好去查dm.ini对应的安装目录是哪个。