服务名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