遇见的问题

这篇博客主要记录了在使用达梦数据库过程中遇到的各种问题及其解决方案,包括SSH配置、防火墙设置、服务启动失败、数据导入错误、JDBC连接问题、事务隔离级别等,并提供了相应的解决步骤和技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

服务名dm_svc.conf

可以通过nca.exe配置
windows C:\Windows\System32\dm_svc.conf

DMDJ=(192.168.137.3:5236,172.168.137.2:5236,192.168.17.1:5236)
TIME_ZONE=(480)
LANGUAGE=(cn)
C:\Users\bj>disql  SYSDBA/SYSDBA@DMDJ
manager工具不能使用服务名登录

LOGIN_MODE:
指定优先登录的服务器模式。0:优先连接 PRIMARY 模式的
库,NORMAL 模式次之,最后选择 STANTBY 模式;1:只连接主库;2:只连接备库;3:优先连接 STANDBY 模式的库,PRIMARY 模式次之,最后选择 NORMAL 模式;4:优先连接 NORMAL 模式的库,PRIMARY 模式次之,最后选择 STANDBY模式。

mpp集群可以使用4  或者不使用

LINUX防火墙

红帽 6 系列解决方法:

service iptables status/start/stop/restart/save --状态/开启/停止/重启防火墙/保存防火墙配置
chkconfig iptables off --永久关闭防火墙
chkconfig iptables on --永久启用防火墙
iptables -L --查看防火墙状态
iptables -F --清空防火墙配置

红帽 7 系列解决方法:

systemctl stop firewalld --临时关闭防火墙
systemctl disable firewalld --永久关闭防火墙开机自起
systemctl status firewalld --查看防火墙状态
firewall-cmd --state --查看防火墙状态
firewall-cmd --add-port=5236/tcp --临时添加 5236 端口白名单

UOS统信SSH

root@uos-PC:/tmp# dpkg -l | grep ssh
root@uos-PC:~# apt install openssh-server
echo PermitRootLogin yes >> /etc/ssh/sshd_config
root@uos-PC:~# systemctl enable ssh
root@uos-PC:~# systemctl restart ssh

导入错误

因为表已存在,可以在导入的时候,选择表存在时truncate表。
或者删除表以后,在导入。
在这里插入图片描述

ZYJ删除标记不匹配 服务器内存不足

我创建这个库的时候没放key,我放上key再建的库就好使了

字段超过8188 改成clob

在这里插入图片描述

DEM UUID

修改UUID
输入命令uuidgen,将生成的UUID写入ifcfg-ens
uuidgen
vi /etc/sysconfig/network-scripts/ifcfg-ens
UUID=065ea954-bb5e-4ff1-af50-f4273e6034c7

SSH加密

sp_set_para_value(2,‘ENABLE_ENCRYPT’,0);

统信系统无法启动达梦服务

因为selinux没有关闭,sysadmin是装系统时,创建的管理员账号,的密码,与系统未激活无关
在这里插入图片描述

几天后、几小时后、几分钟后

select sysdate - interval ‘7’ day from dual
当前时间减去7分钟的时间
select sysdate,sysdate - interval ‘7’ MINUTE from dual
当前时间减去7小时的时间
select sysdate - interval ‘7’ hour from dual
当前时间减去7天的时间
select sysdate - interval ‘7’ day from dual
当前时间减去7月的时间
select sysdate,sysdate - interval ‘7’ month from dual
当前时间减去7年的时间
select sysdate,sysdate - interval ‘7’ year from dual
时间间隔乘以一个数字
select sysdate,sysdate - 8 *interval ‘2’ hour from dual

页错误

回滚阶段有问题,修改dm.ini参数PSEG_RECV为0,导出 重新建库 导入
在这里插入图片描述
在这里插入图片描述

JDBC Could not load driverClass

在进行mysql的jdbc时,通常会出现 "Could not load driverClass “com.mysql.jdbc.Driver” 警告,多次尝试还是无法解决真的是很令人秃头,特别是在带有.properties文件的情况下,下面给出一种解决方法(与其说解决方法不如说排查方法),分分钟消灭这个警告。

1、检查是否成功导入了mysql的jdbc的jar包在这里插入图片描述
在这里插入图片描述

按上图所示顺序,查看是否已经导入了驱动包。若能找到Driver.class包,则说明驱动包已经成功导入,否则,需要重新导入驱动包。

2、检查.properties文件的信息是否正确

首先检查自己所写的信息是否正确,像URL最容易写错,其次用户名密码是否填写正确。
在这里插入图片描述

.properties里的内容都是以键值对存储的,所有的值都不用双引号引起来。检查自己所写的值是否有双引号,有的话删掉即可。
在这里插入图片描述

URL中涉及多种符号,需要进行转义。检查自己所写信息是否进行了转义。

3、检查.properties文件中是否有多余的空格
在这里插入图片描述

每一行写完之后直接回车即可,每行后面不能跟空格。检查自己所写信息后面是否有空格,若有,则删掉即可。

4、检查.java代码中变量名称是否一致
在这里插入图片描述

注意自己在写代码时所用的变量名称,不能马马虎虎。

以上检查都通过后,再试试运行一下代码,"Could not load driverClass "com.mysql.jdbc.Driver"这个警告就不会出现了。

JDBC连接达梦主备

ZYJ可能需要打包服务才能使用到1.2.8 dm_svc.conf打包,
遇到的这个问题是通过,修改连接服务名和重启服务器解决的
在这里插入图片描述

模拟批量插入数据

declare
temp varchar(20):='aaaa';
i  int;
begin
for i in 1..30000 loop
insert into TABLE_1 values(i,temp||i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i);
commit;
end loop;
end;

to_timestamp

select '0.128472',to_char(to_timestamp('23:00:00.000','HH24:MI:SS.FF3') +0.12847,'HH24:MI:SS') from dual
02:05:00
select '0.128472',(to_char(to_timestamp('23:00:00.000','HH24:MI:SS.FF3') +0.12847,'HH24:MI:SS')) from dual
02:04:59
select '0.1284724',(to_char(to_timestamp('23:00:00.000','HH24:MI:SS.FF3') +0.128474,'HH24:MI:SS')) from dual
02:05:00

dminit不要用相对路径

           CTL_PATH                        = ./dmdata/dem/dm.ctl     #ctl file path
            CTL_BAK_PATH                    = ./dmdata/dem/ctl_bak    #dm.ctl backup path
            CTL_BAK_NUM                     = 10                       #backup number of dm.ctl, allowed to keep one more backup file besides specified number.
            SYSTEM_PATH                     = ./dmdata/dem            #system path
            CONFIG_PATH                     = ./dmdata/dem            #config path
            TEMP_PATH                       = ./dmdata/dem            #temporary file path
            BAK_PATH                        = ./dmdata/dem/bak        #backup file path

jdbc链接参数,能让查询没找到结果时,语句返回来的值不是NULL

compatible_mode改成2,comOra=true,jdbc再加上这个

事务隔离级别

DM 数据库支持三种事务隔离级别:读未提交、读提交和串行化。其中,读提交是 DM 数
据库默认使用的事务隔离级别。可重复读升级为更严格的串行化隔离级。

用户可以在事务开始时使用以下语句设定事务为读提交隔离级:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
用户可以在事务开始时使用以下语句设定事务为串行化隔离级:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
用户可以在事务开始时使用以下语句,设定事务为读未提交隔离级:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
用户可以在事务开始时使用以下语句,设定事务为只读事务:
SET TRANSACTION READ ONLY;

初始化 SSL 环境失败

将 dm.ini 里面的 ENABLE_ENCRYPT 修改为 0 后,重启实例即可解决。

core文件

echo core > /proc/sys/kernel/core_pattern
gdb dmserver core文件

./dmrdc sfile=core文件路径

overcommit_memory
overcommit_ratio
overcommit_memory改成0吧
ratio改到90往上也行
0 默认设置,不允许普通用户overcommit, 但是允许root用户轻微的overcommit.
表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
遗憾的是因为内存是使用启发式overcommitting handle(会尽量减少swap的使用)而非准确算法计算进行部署,这个设置有时可能会造成系统中的可用内存超载。

1 允许overcommit
即允许分配所有的物理内存,而不管当前的内存状态如何。
使用这个设置会增大内存超载的可能性,但也可以增强大量使用内存任务的性能。

2 不允许过度 overcommit
即允许分配超过所有物理内存和交换空间总和的内存
即拒绝等于或者大于总可用 swap 大小以及 overcommit_ratio 指定的物理 RAM 比例的内存请求。如果您希望减小内存过度使用的风险,这个设置就是最好的。

公式:CommitLimit = (Physical RAM * vm.overcommit_ratio / 100) + Swap

默认为 50,为物理内存分配时的比例。
只有当 vm.overcommit_memory = 2 的时候才会生效

查看系统 overcommit 信息

cat /proc/meminfo |grep -i commit
CommitLimit:最大能分配的内存(个人理解仅仅在vm.overcommit_memory=2时候生效),具体的值是
SWAP内存大小 + 物理内存 * overcommit_ratio / 100

Committed_AS:当前已经分配的内存大小

本地连接不好使,通过IP连接好使

在这里插入图片描述

不能创建主键,提示数据重复

原因是因为主键列有空格导致,oracle那边可以创建,但是达梦这边不可以,因为有一条数据尾部有空格导致。
BLANK_PAD_MODE 设置空格填充模式(0),可选值:0/1 兼容oracle设置为1

select * from SYS."V$DM_INI"  where "V$DM_INI".PARA_NAME like '%PAD%';
只读参数
select count(*) from (select COLUMN_1,count(1)  from  cy123.table_1 group by COLUMN_1 having count (*) >1)
--去掉空格
select trim(COLUMN_1), count(*) from CY123.TABLE_1 group by trim(COLUMN_1) having count(*)>1;

DTS迁移CLOB是遇到违法协议提示

在这里插入图片描述
–解决:迁移时替换oracle驱动程序,为/u01/app下的 odbc14.jar即可。

页大小

在这里插入图片描述

数据库无法连接

能ping 端口也能telnet 但是不能连接 本地能连接
–解决 子网掩码不对导致。

嵌套层次太深

在这里插入图片描述

当时现场是/+OPTIMIZER_VERSION(70086)/通过hint把优化器回退了就行 bug105511

JDBC问题

在这里插入图片描述
原来报错是迁移过来的表 后来把表删了 重新生成了一下 好用了

DMGEO 包
空间数据类型和空间
数据类型的初始化,以及针对空间数据类型的几何体计算函数。

查连接用的jdbc版本

select clnt_ip,clnt_ver from v$sessions

GLIBC_2.14’ not found

strings /lib64/libc.so.6 | grep GLIBC
Linux 7中有 linux6没有

不能同时包含聚集KEY和大字段

DROP TABLE T2;
create table t2
        (id int,
         name varchar2(10),
         primary key (id)
        );

alter table t2 add column c3 blob;

执行失败(语句1)
第1 行附近出现错误[-3243]:
表[T2]中不能同时包含聚集KEY和大字段
– 关闭默认主键指定CLUSTER数据库参数,动态参数无需重启数据库

sp_set_para_value(1,'PK_WITH_CLUSTER',0);

图形界面

在这里插入图片描述

查看页大小写敏感

select DECODE(para_value,1,'是','否') "LENGTH_IN_CHAR",
 page "PAGE_SIZE",
 SF_GET_EXTENT_SIZE() "EXTENT_SIZE",
 DECODE(unicode,'1','utf8',0,'gbk','EUC-KR') "CHARSET",
 decode(CASE_SENSITIVE,'1','敏感','不敏感') CASE_SENSITIVE
 from v$dm_ini
    where para_name = 'LENGTH_IN_CHAR';

达梦数据守护集群,高性能模式就是主备集群,强一致模式就是读写分离集群

查询有多少模式用户

select distinct owner from dba_objects where object_type=‘SCH’

预定义异常

DM8 - SQL Program程序设计.pdf
DM8_SQL 程序设计
6 DMSQL 程序异常处理
6.2 预定义异常

创建用户失败,提示用户名无效:

因为在模式里已有该用户名的模式,
在这里插入图片描述

any权限:

SP_SET_PARA_VALUE(1,‘ENABLE_DDL_ANY_PRIV’,1);

游标:

在达梦里面的参数是max_session_statement,默认100:上限是20480:单个会话上允许同时打开的语句句柄最大数,有效值范围(64~20480)

图形界面display

echo $DISPLAY
xhost +
su - dmdba
export DISPLAY=:2
dbca

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值