创建 sokect 连接失败
【问题原因 1】:
https://www.cndba.cn/dave/article/3754
【问题原因 2】:
D:\dmdbms\bindisql SYSDBA/SYSDBA |
- 请确认 dm.ini 文件中
port_num端口号,如果修改了端口号,请按照以下方式来登录:
D:\dmdbms\bindisql SYSDBA/SYSDBA@127.0.0.1:8236 |
disql V7.6.0.142-Build(2019.03.12-103811)ENT |
- 检查数据库服务是否为启动状态。
[dmdba@localhost bin]$ ps -ef|grep dmserver |
- 检查服务器及本机防火墙状态。
红帽 6 系列解决方法:
service iptables status/start/stop/restart/save --状态/开启/停止/重启防火墙/保存防火墙配置 |
红帽 7 系列解决方法:
systemctl stop firewalld --临时关闭防火墙 |
DM 数据库怎么设置/修改最大连接
关于最大连接数,可参考《DM 系统管理员手册》dm.ini 章节(手册位于数据库安装路径 /dmdbms/doc 文件夹下),最大连接数参数如下:

- 主要修改
MAX_SESSIONS的值,根据用户自行赋值。建议值大小如下:
以主机 CPU 4 路 8 核内存 64 GB 为例,建议值大小如下:
max_session=500~1000 |
修改参数在数据库实例路径下的 dm.ini 文件,修改完成后,重启数据库才生效。
- /etc/security/limits.conf 的 open file 也要扩大。跟 Oracle 的 session 和 process 一样。
无法连接数据库(网络通信异常)
首先要明确问题,数据库是不是真的正常启动了,无法连接数据库是怎样的操作环境和流程?
本地客户端无法连接数据:
- 确认数据库是否真的正常启动了,如果未正常启动,登录时报
错误号:6001,错误消息:网络通信异常。
Windows 通过资源管理器看是否有 dmsvc.exe 进程;Linux 通过 ps -ef | grep dmserver 看是否有 dmserver 进程。如果进程存在,查看数据库日志,一般在 ../dmdbms/log 下,日志名为 dm_实例名_年月.log,例如 dm_DMSERVER_202002.log,在文件中查看启动过程中是否已经出现 SYSTEM IS READY 字样,如果出现该字样说明正常启动了,如果没有需详细查看日志具体分析。
- 确认连接数据库的 IP 地址和端口号是否正确,如果未正常启动,登录时报
错误号:6001,错误消息:网络通信异常,端口号可以在数据库目录下的 dm.ini 中找到PORT_NUM确认。 - 检查用户名和密码是否正确,如果不正确登录时会提示。
用户修改密码后,密码中有特殊字符,比如@,这个时候需要进行转义,关于转义的相关资料,可参考《DM_Disql 使用手册》。(手册位于数据库安装路径 /dmdbms/doc/special 文件夹下)
例如密码为:ZnZbn@1234,则需按照以下规则输入密码:
单引号 双引号 密码 双引号 单引号
./ddisql user_name/'"password!@#"'@ip:port |
- 安全版中开启了通信加密功能,需要 SSL 证书才能正常登陆。此时 dm.ini 中
ENABLE_ENCRYPT 不为 0。
远程无法正常登陆:
远程登录同样可能存在上述的本地登录中的一些问题,另外要确认的是网络是否正常和防火墙是否关闭或配置相关策略,建议关闭本地的防火墙以避免不必要的问题,如果一定使用防火墙,请专业人员进行正确的配置。
- 检查网络
通过 ping 命令检查网络是否通畅,通过 telnet 命令检查端口是否通畅,具体的使用方法请自行通过网络搜索这两条命令。
- 检查防火墙(包括软件防火墙和物理防火墙)
软件防火墙 Windows 一般是自带的“防火墙”和 Linux 自带的 Firewalls、iptables 防火墙。
Linux6 版本:
查看防火墙状态,执行如下命令:
\# service iptables status |
显示 ip6tables:未运行防火墙,表示防火墙未启动。
关闭防火墙,执行如下命令:
service iptables stop |
Linux7 版本:
查看防火墙,执行如下命令:
\# systemctl status firewalld.service |
显示 Active: inactive (dead) ,表示防火墙未启动。
关闭防火墙,执行如下命令:
\# systemctl stop firewalld.service |
关于防火墙配置及更多的知识请自行学习,如有条件请联系项目的系统管理员或网络管理员。
物理防火墙或网关等物理设备的详细排查请联系项目的网络管理员,改领域应有专业人士处理。
【其他原因】:
- 达到最大会话数限制,无法建立新的连接
确定是否达到最大会话数限制,在 dmdbms/log 目录下,查看当月日志。例如,本月(8 月)的日志名为:dm_DMSERVER_201808.log 若日志中有 reach the maxsession limit 的提示,则说明达到最大会话数限制。
确认是由此原因导致无法访问数据库,则需要进行以下两个方面的排查:
- 应用连接池配置,连接池最大会话数要进行合理的设置。
- dm.ini 文件中,
MAX_SESSIONS参数,默认为 100,可根据实际需要调整。
MAX_SESSIONS 系统允许同时连接的最大数,同时还受到 LICENSE 的限制,取二者中较小的值,有效值范围 (1~65000)。
例如:应用连接池设置的最大连接数设置为 500,且 license 为正式企业版、测试企业版,则需要修改 dm.ini 中 MAX_SESSION 参数 500,在数据库中执行 SP_SET_PARA_VALUE(2,‘MAX_SESSIONS’,600),修改完成后,需要重启数据库服务生效。
参考链接:https://blog.csdn.net/fengxiaozhenjay/article/details/102505293
如果在建立实例中途中断,建立实例的文件夹可能被创建,但是实际实例是没有建立成功的,这个时候如果登陆,也可能报错 6001,此时,需要删除当前没建立完整的实例,重新建立。
连接 DM 数据库时提示:未经授权的用户
新建实例,修改 max_session 为 1。
SELECT * FROM V$DM_INI WHERE "V$DM_INI".PARA_NAME LIKE 'MAX_SESSIONS'; |

报错复现:TEST 用户登陆
修改 dm.ini 里面的 MAX_SESSIONS,SP_SET_PARA_VALUE(2,'MAX_SESSIONS',2000),修改完重启数据库。
启动服务端的 console 工具查询 KEY 信息(工具在安装目录的 TOOL 目录下)。

如上图所示的最大并发数为 25,调整参数是无效的,需要找销售人员申请对应的 KEY。
再次验证 TEST 用户登陆,登录成功,如下图所示:
数据库会话不释放或者不重复利用;会一直申请到最大连接数后报错退出
其原因很有可能就是连接池没有做好相关配置,或者配置了却设置的值不对,那么超时的原因大概有以下几点:
- 最大连接数大于数据库服务器端配置的最大连接数,多余的连接在被使用到的时候出现连接超时。
- 网络抖动:每次连接的时候提交或维护大量数据,此时网络不稳定导致连接超时。
- 占用的资源未被释放,一般只 Open 一次,获取一个 *DB,但是在使用 stmt,rows 或者是 tx 时候用完没有关闭,耗尽资源也有可能导致连接超时。
对于出现的 3 种问题,可以试试下面的解决方法:
- 对于最大连接数的问题,调用函数
Db.SetMaxOpenConns()设置值(小于数据库配置的最大连接)。 - 对于维护大量数据,可以尝试采用事务操作,若失败,回滚。然后重试。
- 使用 defer 关键字,在启用操作的时候直接在下一行加上
defer *.close()函数 return 的时候会执行相关的关闭函数。
如果尝试了以上的解决方法,还是发现偶尔会出现连接超时的错误的话,很可能是因为数据库本身对连接有一个超时时间的设置,如果超时时间到了数据库会单方面断掉连接,此时再用连接池内的连接进行访问就会出错,连接池中的每个连接都维护了一个创建时间,取连接的时候会自动检查的,可以试试调用 db 的 SetConnMaxLifetime() 方法来给 db 设置一个超时时间,时间小于数据库的超时时间即可。
客户不愿意关闭防火墙,连接管理工具远程连不上的问题
配置服务器防火墙,以 root 身份编辑 /etc/sysconfig/iptables 文件,向文件中增加 -A 部分信息。
\ vi /etc/sysconfig/iptables |
重启 iptables 服务。
\#service iptables restart |
数据库会不会关闭空闲会话
【问题描述】:
创建一线程时就链接数据库了,之后线程一直闲置中,过了一天后链接会话还在吗?数据库会不会把这个会话关闭?
这个相当于长连接的问题,一天后连接还在,因为数据库不会把这个会话关闭。下面简单介绍下数据库的长连接和短连接。
- 短连接操作步骤:连接-数据传输-关闭连接。
- 长连接操作步骤:连接-数据传输-保持连接-数据传输-保持连接-…………-关闭连接。
这就要求长连接在没有数据通信时,定时发送数据包,以维持连接状态,短连接在没有数据传输时直接关闭就行了。
什么时候用长连接,短连接?
长连接主要用于在少数客户端与服务端的频繁通信,因为这时候如果用短连接频繁通信常会发生 Socket 出错,并且频繁创建 Socket 连接也是对资源的浪费。一般情况下应用和数据库直接的连接都是通过连接池实现,也就是采用长连接的方式。而一般连接到服务器查询某个数据时,这种情况采用的是短连接。
DM 数据库可以通过 v$sessions 视图查看会话连接情况。比如查询连接超过 7 天的会话,可以通过下面的 SQL 实现:
select from v$sessions where create_time < sysdate -7; |

如果要删掉超过 7 天的会话,可以通过下面的 SQL 先找过超过 7 天的会话,然后把里面的内容拿出来执行:
select 'sp_close_session('||sess_id||');' from v$sessions where create_time < sysdate -7; |

假如结果是:sp_close_session(910688560):直接在 manager 中执行即可删除该条连接。

执行结果,910688560 这个会话被关闭。

因为测试机刚启动的没有超过 7 天的会话,执行的时候没加后面的 where 条件。
必须给字段加双引号,否则提示无效的列名 TRIGGER_TIME
可能与大小写敏感的设置有关:
- 大小写敏感的情况下,字段会自动转换成大写。
- 加引号是不让字段转换成大写,这个表里面的字段在创建时应该是小写的。
- 从 MySQL 迁移到 DM,最好在迁移到之前,设置 DM 数据库初始化大小写不敏感。
大小写设置方法:
大小写明感设置在初始化实例中可以设置大小写敏感参数。

查看大小写敏感的方式:
- 链接数据库右键数据库管理服务器页面。可以看到当前数据库是否是大小写敏感设置。

- 命令行的方式查看
select para_name,case para_value when 1 then 'y' else 'n' end |
分区表(非堆表)是否能支持 global 索引/全局索引
DM 数据库支持对水平分区表建立普通索引、唯一索引、聚集索引和函数索引。创建索引时若未指定 GLOBAL 关键字则建立的索引是局部索引,即每一个表分区都有一个索引分区,并且只索引该分区上的数据。如果指定了GLOBAL 关键字则建立的索引是全局索引,即每个表分区的数据都被索引在同一个 B 树中。
目前,仅堆表的水平分区表支持 GLOBAL 索引。堆表上的 primary key 会自动变为全局索引。非堆表目前暂不支持 global 索引。
详见《DM 系统管理员手册》第 16.4 章节内容。(手册位于数据库安装路径 /dmdbms/doc 文件夹下)
在 DM 数据库中并没有 DmJobMonitor 这个服务,但是在数据库中创建的作业也是能跑起来,有什么实际用途
DmJobMonitor 是监控作业的服务,监控作业是否正常,一般是在 DM 管理工具里点击【作业】-【查看历史作业信息】即可获取作业的运行情况。

DM 数据库如何删除主键索引
遇到 DM 数据库主键索引无法删除的情况不要着急,可以先将表的主键约束去除,再执行删除即可。

怎么解决没有查询动态视图权限的问题?没有对象的查询权限
用户查询报错:

【解决方法】:
- 使用 SYSDBA 用户,给没有权限的用户赋权(赋予 VTI 角色):
grant VTI to user123; |
- 或者直接赋予相应视图的查询权限(比如查询 v$dm_ini 视图的权限):
grant select on v$dm_ini to user123; |
创建用户失败要怎么解决
创建用户失败的原因可能有多,具体问题要具体分析,遇到错误时首先查看报错的详细信息,这样才能快速的定位和解决问题,下面列举几种常见的错误:
- 用户名已经存在该用户

- 密码复杂度不符合要求
可修改 PWD_POLICY 参数,如下图所示:

- 授权不正确,如下授权,选择的是【ALL】,有些权限是不能分配给普通用户的,如下图所示:

快速获取表定义、详细信息的 SQL 语句
如果是在 windows 操作界面,可以直接用管理工具-单击表然后右键查看。
如果是在 Linux 界面可通过以下方法查看。
- 方法一
调用 DM 存储系统过程 SP_TABLEDEF,获得表的定义,如下图所示:

参数说明:
schname:模式名 |
这个存储过程,直接 call 调用或者写在匿名块中调用均可。
比如,查询 DMHR 模式下 EMPLOYEE 表定义:
call sp_tabledef(‘DMHR’,’EMPLOYEE’); |

BEIGN |

这个存储过程是 DM 数据库独有的,Oracle 并没有这个存储过程。但是它存在一个缺点,只能查询表,不能查询其他类型的对象。
所以这里推荐第二种方法,也是笔者最常用的查询表定义的方法。
- 方法二
DBMS_METADATA.GET_DDL,DBMS_METADATA 系统包包含了许多实用的函数,有兴趣可以查看 DM 官方文档慢慢了解,这里就不一一赘述了,介绍一下 GET_DDL,如下图所示:

我们再测试一下这个包:

GET_DDL 功能非常强大,可以用于获取数据库对表、视图、索引、全文索引、存储过程、函数、包、序列、同义词、约束、触发器等的 DDL 语句。
报错:无效的用户名
- 建立用户的时候,会建个同名的模式,如果模式已存在就会报错,如下图所示:

- 所登陆的用户名就没有建立。
- 搭建 dsc 的时候,asm 环境初始化报的
无效的用户名,检查一下 DMDCR_CFG.INI 里面的dcr_seqno,如下图所示:

使用图形界面创建作业
首次使用时,需要先创建代理环境,如下图,在代理上右键,选择【创建代理环境】,如下图所示:

然后在作业上右键新建作业,出现右边的方框中选择【添加】,如下图所示:


选择作业调度之后,在右下方选择【新建】,然后出现调度频率和时间的选项。
数据库登陆密码问题
- 忘记密码怎么办?
如果是系统用户 SYSDBA、SYSSSO 忘记密码,是没有办法找回来的。
温馨提示
- 数据库管理员 SYSDBA 的密码不要随便修改,默认密码为 SYSDBA(密码严格区分大小写)。如果出于安全方面的考虑非得修改,请一定要做好备案工作。
- 如果数据库中还有其它的用户,可以尝试在数据迁移工具 DTS 中使用其它用户登录,把数据库中相关用户的数据迁移到新的实例对应的用户中。
- 如果库里面没有业务数据或者数据不重要,则可以考虑卸载重装。
如果是自定义的用户密码丢失了,可以通过 SYSDBA 来更改密码。
- 数据库是否有默认密码/用户口令?
如果是非 zyj,默认是和用户一样的,大写 SYSDBA。
- 密码中含有@/等特殊字符怎么办?
需要通过转义符来处理。disql 转义符使用如下:
linux 环境,需要使用双引号将密码包含进来,同时外层再使用单引号进行转义,具体例子如下:
./disql SYSDBA/' "abcd@efgh" '@localhost |
windows 环境,需要使用双引号将密码包含进来,同时对双引号使用\进行转义,具体例子如下:
disql SYSDBA/\"abcd@efgh\"@localhost |
- Manager 客户端登录保存密码为什么还是需要输入密码?
需要注册连接。
- SYS 用户密码是多少,SYS 能登陆吗?
SYS 是不能登陆的?
- ZYJ 密码过期怎么办?
ZYJ 口令过期限制为 7 天,之后通过本用户原密码登录修改密码。需要记住密码,如果忘记了密码,只能重新建立实例了。
- 数据库更改密码策略,对以前建立的用户不生效?
删除重建。
- SYSSSO 用户密码是多少?
DM 数据库初始化时设置 SYSSSO 的密码,默认为 SYSSSO,仅在安全版本下可见和可设置。
- 用户密码过期及修改用户登录失败次数超过限制怎么办?
用 SYSDBA 登录来修改用户的配置,先修改密码再修改资源。
alter user "SYSDBA" limit password_life_time unlimited; |
- DM 数据库的密码策略是什么?
通过 DM.INI 里的参数:PWD_POLICY 设置系统默认口令策略。
0: 无策略; |
若为其他数字,则表示配置值的和,如 3=1+2,表示同时启用第 1 项和第 2 项策略。
当 INI 参数 COMPATIBLE_MODE=1 时,PWD_POLICY 的实际值均为 0。
- 怎么设置密码?
参考《DM_SQL 语言使用手册》管理用户-用户定义语句。(手册位于数据库安装路径 /dmdbms/doc 文件夹下)
DM 数据库是否支持 navicat 连接
Navicat 工具暂不支持 DM 数据库,DM 数据库的连接可以使用数据库自身的 DM 管理工具进行连接。
DM 数据库管理工具存放在安装目录 dmdbms 下的 tool 文件夹中打开 manager.exe 进行连接即可。

MANAGER 如何保存登录信息
DM 管理工具 MANAGER,在打开以后,可以通过注册连接按钮新建连接,该方新建的连接会保存到左侧的连接导航栏中。

MANAGER 如何执行 SQL
DM 管理工具 MANAGER,在登录以后,右侧 SQL 窗口输入 SQL 语句后,可以点击工具栏上对应的绿色三角按钮执行,完成后需要点击后面的【提交】或者【回滚】按钮完成事务的提交和回滚。

MANAGER 常用配置
- 打开管理工具-选项

在选项下有一些设置,DM 管理工具-窗口-选项。可以根据实际需求进行一些配置的调整。
消息区显示的最大字符数
会影响使用语句块进行批量循环 PRINT 信息,需要调大。如果过小,消息区显示的 SQL 内容不全,PRINT 的信息也显示不全。
- 大小写敏感
如果不是必须大小写敏感,建议将管理工具上保持大小写敏感配置取消,这样后台全部转换成大写,就不会造成表名、字段名等由于大小写缘故出现无效的字段或者表名之类的错误。
- 出错后继续执行
生产环境要关闭自动提交和出错后继续运行的配置,避免出现错误后,无法挽回。

- 显示的最大字符数



MANAGER 写 SQL 时如何提示表名
DM 数据库中可以模糊提示表名,在 DM 管理工具中右键【选项】,把编辑器中需要的选项全部勾选上。

根据需要勾选好就可以达到自己想要的设置了。
图形化界面处理自增参数
DM 支持 INT 和 BIGINT 两种数据类型的自增列,并提供以下函数查看表上自增列的当前值、种子和增量等信息:
IDENT_CURRENT:获得表上自增列的当前值; |
在新建表的时候,选中表-修改-把对应列设置为自增列。

使用 DM 管理工具更新表数据
登录用户,找到【模式】,找到相关的表,点击右键,选择【浏览数据】,将列表中的数据拉到最底下,点击【not null】输入数据,然后点击保存。






