达梦数据库登陆失败的排查方法

使用 DM 数据库时,有时会碰到登录失败的情况。根据使用的连接工具不同,问题具体可能表现为网络通讯异常或者 socket 连接失败。此问题通常与连接信息、网络、会话数等配置有关,以下提供排查方法。

检查数据库是否已正常启动

  • Windows 环境下:通过资源管理器看是否有 dmsvc.exe 进程,或者打开 DM 服务查看器查看服务状态。
  • Linux 环境下:通过 ps -ef | grep dmserver 看是否有 dmserver 进程。

如果进程存在,查看数据库日志,一般在 ../dmdbms/log 下,日志名为 dm_实例名_年月.log,例如 dm_DMSERVER_202002.log,在文件中查看启动过程中是否已经出现 SYSTEM IS READY 字样,如果出现该字样说明正常启动了,如果没有,需详细查看日志具体分析。

检查连接数据库的 IP 地址和端口号

  • Windows 环境下:执行 ipconfig 查看 IP 信息,在数据库目录下 dm.ini 中找到 PORT_NUM 确认端口信息。
  • Linux 环境下:执行 ifconfig 查看 IP 信息,在数据库目录下 dm.ini 中找到 PORT_NUM 确认端口信息。

参数说明:PORT_NUM 服务器通讯端口号,有效值范围(1024~65534),默认值 5236。
disql 中按照以下方式登录:

./disql SYSDBA/SYSDBA@127.0.0.1:8236
服务器 [127.0.0.1:8236]: 处于普通打开状态
登录使用时间: 66.208(毫秒)

检查是否开启了通信加密

若当前为安全版数据库,需要检查是否开启了通信加密功能,若已开启需要 SSL 证书才能正常登陆。
可检查 dm.ini 中 ENABLE_ENCRYPT 的值是否为 0。

远程登录场景中,检查网络

通过 ping 命令检查网络是否通畅,通过 telnet 命令检查端口是否通畅。

远程登录场景中,检查防火墙

如果服务在本地连接正常,但是使用远程连接时提示网络异常,一般情况下是防火墙引发的问题。此时需要检查防火墙相关设置。若不能直接关闭防火墙,就需要在数据库服务器上开启对应端口远程访问的权限(默认为5236)。服务器上的防火墙一般有两种:firewalld 和 iptables。

firewalld 的基本使用如下:

(1)firewalld 的查看、关闭和重启等(以 Linux 环境为例)。

---启动一个服务
systemctl start firewalld.service

---关闭一个服务
systemctl stop firewalld.service

---重启一个服务
systemctl restart firewalld.service

---显示一个服务的状态
systemctl status firewalld.service

---在开机时启用一个服务
systemctl enable firewalld.service

---在开机时禁用一个服务
systemctl disable firewalld.service

---查看服务是否开机启动
systemctl is-enabled firewalld.service

---查看已启动的服务列表
systemctl list-unit-files|grep enabled

---查看启动失败的服务列表
systemctl --failed

(2)配置 firewalld-cmd。

--查看版本
firewall-cmd --version

--查看帮助
firewall-cmd --help

--显示状态
firewall-cmd --state

--查看所有打开的端口
firewall-cmd --zone=public --list-ports

--更新防火墙规则
firewall-cmd --reload

--查看区域信息
firewall-cmd --get-active-zones

--查看指定接口所属区域
firewall-cmd --get-zone-of-interface=eth0

--拒绝所有包
firewall-cmd --panic-on

--取消拒绝状态
firewall-cmd --panic-off

--查看是否拒绝
firewall-cmd --query-panic

(3)开启一个端口。

--添加(--permanent永久生效,没有此参数重启后失效)
firewall-cmd --zone=public --add-port=80/tcp --permanent

--重新载入
firewall-cmd --reload

--查看
firewall-cmd  --zone=  public  --query-port= 80/tcp

--删除
firewall-cmd --zone= public --remove-port=80/tcp --permanent

iptables 使用方法如下:

(1)检查并安装 iptables。

--查看防火墙状态,若显示iptables.service could not be found,表示 iptables 没有安装
service iptables status

---安装 iptables
yum install -y iptables

---安装iptables-services
yum install iptables-services

--查看iptables现有规则
iptables -L -n

--关闭防火墙
service iptables stop

(2)开启相关规则的命令。

--先允许所有
iptables -P INPUT ACCEPT

--清空所有默认规则
iptables -F

--清空所有自定义规则
iptables -X

--所有计数器归 0
iptables -Z

--允许来自于 lo 接口的数据包(本地访问)
iptables -A INPUT -i lo -j ACCEPT

--开放22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

--允许ping
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT

--允许接受本机请求之后的返回数据 RELATED,是为FTP设置的
iptables -A INPUT -m state --state  RELATED,ESTABLISHED -j ACCEPT

--其他入站一律丢弃
iptables -P INPUT DROP

--所有出站一律接收
iptables -P OUTPUT ACCEPT

--所有转发一律丢弃
iptables -P FORWARD DROP

--保存配置并重启
service iptables save
systemctl restart iptables.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),修改完成后,需要重启数据库服务生效。

检查实例是否创建成功

如果在建立实例中途中断,建立实例的文件夹可能被创建,但是实际实例是没有建立成功的,这个时候如果登陆,也可能出现报错。此时,需要删除当前没建立完整的实例,重新建立。

<think>嗯,用户遇到了达梦数据库删除表空间失败的问题,我需要帮他们找出可能的原因和解决方案。首先,根据引用中的信息,记得引用[1]提到了一个常见错误:“局部唯一索引必须包含全部分区列”[^1]。不过这个问题可能和表空间删除无关,但其他引用可能有帮助。 首先,可能的原因之一是表空间仍被某个对象占用,比如表或索引没有被正确删除。用户需要检查是否有对象还在使用这个表空间,可以通过查询系统表如DBA_SEGMENTS来确认。如果有的话,需要先删除这些对象或者迁移到其他表空间。 另外,用户是否有足够的权限?可能需要DBA权限才能删除表空间。还有,表空间是否处于在线状态?可能需要先将其离线,再进行删除操作。此外,检查是否有未提交的事务或活动会话正在使用该表空间,这也会导致删除失败。可以通过查询V$TRANSACTION和V$SESSION来排查。 根据引用[3],文件路径的问题也可能存在,比如DBF文件被锁定或路径错误[^3]。需要确认文件是否被正确关闭,或者是否有其他进程占用。此外,备份或复制配置可能还在引用该表空间,比如引用[4]提到的数据复制配置[^4],需要检查是否有相关的复制任务还在运行。 解决方案步骤可能包括:检查并删除占用对象、确保权限足够、处理文件状态、终止相关会话、检查复制配置等。最后,如果表空间是系统默认的,比如MAIN或SYSTEM,可能无法删除,需要特别注意。 需要提醒用户在操作前备份数据,避免数据丢失。可能还需要具体错误信息来更精准地解决问题,建议用户提供错误代码或日志内容。</think>### 达梦数据库删除表空间失败的原因及解决方案 #### **错误原因分析** 1. **表空间被对象占用** - 若表空间中存在未删除的表、索引、视图等对象,或存在未迁移的数据文件,删除操作会失败。可通过以下SQL查询占用对象: ```sql SELECT OWNER, SEGMENT_NAME, SEGMENT_TYPE FROM DBA_SEGMENTS WHERE TABLESPACE_NAME = '表空间名'; ``` 2. **权限不足** - 删除表空间需要具备`DROP TABLESPACE`权限。普通用户需切换至DBA权限账户操作。 3. **表空间处于在线状态** - 若表空间仍处于在线(`ONLINE`)状态,需先将其设置为离线(`OFFLINE`): ```sql ALTER TABLESPACE 表空间名 OFFLINE; ``` 4. **文件被锁定或路径错误** - 数据文件(如`.DBF`文件)可能被其他进程占用,或文件路径配置错误(例如迁移后路径未更新)[^4]。 5. **存在未提交的事务或活动会话** - 通过系统视图`V$TRANSACTION`和`V$SESSION`检查是否有未提交事务或会话占用表空间。 --- #### **解决方案步骤** 1. **强制删除占用对象** - 手动删除表空间内的所有对象,或迁移至其他表空间: ```sql DROP TABLE 表名 CASCADE CONSTRAINTS; -- 级联删除依赖对象 ``` 2. **终止相关会话** - 通过系统视图`V$SESSION`查找占用表空间的会话并终止: ```sql ALTER SYSTEM KILL SESSION 'SID,SERIAL#'; ``` 3. **检查数据复制配置** - 若表空间参与数据复制任务(如引用[4]所述),需先停止相关复制链路。 4. **使用`INCLUDING CONTENTS`选项强制删除** - 若确认表空间可删除,添加`INCLUDING CONTENTS AND DATAFILES`选项: ```sql DROP TABLESPACE 表空间名 INCLUDING CONTENTS AND DATAFILES; ``` --- #### **注意事项** - **系统表空间不可删除**:如`SYSTEM`、`TEMP`、`MAIN`等默认表空间无法删除。 - **备份数据**:操作前建议通过`DMDUMP`工具备份数据[^3]。 - **错误日志分析**:通过`$DM_HOME/log`目录下的日志定位具体错误代码(如引用[1]中提到的索引问题)[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DB实践

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值