数据库检查

可参考以下文章:

DM 对 Oracle 兼容之 SQL 运维实战攻略上

DM 对 Oracle 兼容之 SQL 运维实战攻略下

动态级参数在 dm.ini 里修改后重启应用不生效吗

数据库的配置文件 dm.ini 中参数属性分为三种:静态、动态和手动。

  • 静态,可以被动态修改,修改后重启服务器才能生效;
  • 动态,可以被动态修改,修改后即时生效;
  • 手动,不能被动态修改,必须手动修改 dm.ini 参数文件,然后重启才能生效。

动态参数又分为会话级和系统级两种。会话级参数被修改后,新参数值只会影响新创建的会话,之前创建的会话不受影响;系统级参数的修改则会影响所有的会话。

dmsql_数据库实例名.log,这个日志怎么关掉

以 dmsql_数据库实例名.log 类型命名的文件为跟踪日志文件,跟踪日志内容包含系统各会话执行的 SQL 语句、参数信息、错误信息等。跟踪日志主要用于分析错误和分析性能问题,比如,可以挑出系统现在执行速度较慢的 SQL 语句,进而对其进行优化。

打开跟踪日志对系统的性能有较大影响,一般用于查错和调优的时候才会打开,默认情况下系统是关闭跟踪日志的。当把 dm.ini 参数 SVR_LOG 设置为 1,才会打开 SQL 日志,若需要跟踪日志但对日志的实时性没有严格的要求,又希望系统有较高的效率,可以设置参数 SQL_TRACE_MASK 和 SVR_LOG_MIN_EXEC_TIME 只记录关注的相关记录。

在记录完成后,可执行: SP_SET_PARA_VALUE(1, 'SVR_LOG', 0); 进行关闭跟踪日志。

更多配置文件 dm.ini 中各参数的含义可查看《DM 系统管理员手册》第二章 2.1 节内容,手册位于数据库安装路径 /dmdbms/doc 文件夹。

如何查看数据库初始化信息,如页大小,簇大小,字符集和大小写敏感等

达梦数据库提供了多种方法查看数据库实例的初始化信息,以下给出详细使用方式:

【方法 1】

进入数据库实例初始化路径,查看初始化日志 dminit***.log 文件

初始化实例日志

【方法 2】

打开 DM 管理工具,右键选择数据库---管理服务器---查看系统概览

管理服务器

系统概述

【方法 3】

利用 SQL 语句进行查询,语句参考如下:

查询大小写是否敏感:

SELECT SF_GET_CASE_SENSITIVE_FLAG();
或
SELECT CASE_SENSITIVE();

查询页大小:

SELECT SF_GET_PAGE_SIZE();  /* 32768/1024=32KB */
或
SELECT CAST(PAGE()/1024 AS VARCHAR);

查询簇大小:

SELECT SF_GET_EXTENT_SIZE();  

查询字符集:

SELECT SF_GET_UNICODE_FLAG();
或
SELECT unicode();
或
SELECT (CASE SF_GET_UNICODE_FLAG() WHEN '0' THEN 'GBK18030' WHEN '1' THEN 'UTF-8' WHEN '2' THEN 'EUC-KR' END);

DM 数据库管理常用 SQL 命令

--查询数据库版本
select * from  v$version;--DM7
select id_code();--DM8

--查询授权信息
select * from  v$license;

--查询服务器信息
select * from  V$SYSTEMINFO;

--查询会话连接信息
select * from  v$sessions;

select  count(*),state from v$sessions group by state;
select  count(*),clnt_ip from v$sessions group by clnt_ip;

--查看数据库服务器配置参数

select * from  v$dm_ini;

--查询最近的 sql 执行记录
select * from  v$sql_history;

--查询某个用户下所有的表
select * from  user_tables; --查询当前用户下所有的表

select * from  all_tables where owner=’TEST’; --dba 用户查询某个模式下的所有表

--查询某个用户下所有表字段
select * from  all_tab_cols where owner=’TEST’;

--查看表注释
select * from  ALL_TAB_COMMENTS where ower=’TEST’;

--查看字段注释
select * from  ALL_COL_COMMENTS where ower=’TEST’;

select '实例名称' 数据库选项,INSTANCE_NAME 数据库集群相关参数值 FROM v$instance union all

select '数据库版本',substr(svr_version,instr(svr_version,'(')) FROM v$instance union all   SELECT '字符集',CASE SF_GET_UNICODE_FLAG() WHEN '0' THEN 'GBK18030' WHEN '1' then 'UTF-8' when '2' then 'EUC-KR' end union all

SELECT '页大小',cast(PAGE()/1024 as varchar) union all   SELECT '簇大小',cast(SF_GET_EXTENT_SIZE() as varchar) union all

SELECT '大小写敏感',cast(SF_GET_CASE_SENSITIVE_FLAG() as varchar) union all

select '数据库模式',MODE$ from v$instance union all

select '唯一魔数',cast(permanent_magic as varchar) union all

select 'LSN',cast(cur_lsn as varchar) from v$rlog;

报错日志、系统日志

达梦数据库有相应的错误日志,存放在达梦数据库安装目录的 log 文件目录下,会有相应对应的实例名日期 .log 文件,打开相应的文件,如果里面有 ERROR 的错误信息,则可以查看具体的报错来进行修改。

DM 内存泄漏/异常的检查

DM 运行过程中,如果发现内存突然飙升,或者占用过大, 或者操作系统反复 OOM 时,需要考虑是否是服务器存在内存泄漏问题,按照目前 DM7 的动态视图所能提供的信息,需要获取以下内容:

  1. 数据库的内存使用情况
  2. 是否存在扩展到非常大的内存池
  3. 确认该内存的详细使用情况

数据库的内存使用情况

操作系统级别的命令判断:TOP、WINDOWS 资源管理器等,查看数据占用多少内存

数据库级别的判断:数据库使用的内存大致等于 BUFFER_SIZE + POOL_SIZE,对应的 SQL 语句如下:

select (select sum(n_pages * page_size) from v$bufferpool) + (select sum(total_size) from v$mem_pool) from dual;

一般来说,发生内存泄漏的都在 mem_pool 上,比如操作系统上看到内存占用 60G,但 BUFFER 已经占用到 50 GB,实际上发生泄漏的概率较小,应该适当调小 BUF,空出内存给内存池使用。

是否存在使用内存过多的 SQL

较新版本的 DM7 服务器提供会话及语句资源监控视图(ENABLE_MONITOR=1) 生效 V​SESSION_STAT VSQL_STAT 视图上字段比较丰富,我们这里主要关注 MAX_MEM_USED 字段。 一般来讲,如果是某条或者特定的几条 SQL 导致内存增长过多,可以通过这两个视图查询出来。

通过执行以下语句:

SELECT MAX_MEM_USED,SQL_TEXT FROM V$SQL_STAT order by MAX_MEM_USED DESC;

可以确定使用内存较大的 SQL,可以针对行的优化(消除 HASH,SORT,DISTINCT 等) 注意:该查询只能查询当前活动 STMT 上的语句消耗情况,历史情况需要查询 V$SQL_STAT_HISTORY,该视图上保留 1 万行 SQLSTAT 历史信息。

以上 MAX_MEM_USED 列的单位均为 KB。

是否存在扩展过大的内存池

前面介绍过,正常使用过程中,内存池的大小一般会维持在 TARGET_SIZE 左右,不会发生太大的差距,如果发生非常多次计划外的扩展,需要考虑该池是否发生内存泄漏,与之相关的系统视图和系统视图字段为:v$mem_pool 上的 N_EXTEND_EXCLUSIVE 字段。

相应的查询语句为如下:

Select * from v$mem_pool where n_extend_exclusive  0;

确认池后,通过 MEM_POOL 的 CREATOR 也就是创建这个池的线程号,去 V​SESSIONS 或者 VSESSIONS_HISTORY 里面确认会话号,然后再去 V​SQL_STAT_HISTORY 或者 VSESSION_STAT_HISTORY 中寻找内存 消耗大的 SQL 即可。

查看存在超出计划大小扩展的内存池的计划外扩展次数以及大小,如果池大小为可 以通过 INI 调整的(如 VM_POOL_TARGET、SESS_POOL_TARGET,但这两个参数慎用,调整过大对并发影响较大),可以适当放大计划大小,再运行观察计划外扩展情况是否有改善,如果仍然存在大量的计划外扩展则需要继续跟进内存使用实况。

确认内存的详细使用情况

详细的内存使用情况需要视图 v$mem_reginfo,该视图在 INI 参数 MEM_LEAK_CHECK 为 1 时有效,可动态开启,开启后登记数据库中所有内存的申请释放信息。

相应的查询语句如下:

Select sum(reserved_size),fname,lineno from v$mem_reginfo group by fname,lineno order by sum(reserved_size) desc;

按照大小降序,或者根据文件名、行号分组,查看是否存在大量某文件某行使用内存未释放的情况,转交研发处理。

内存异常的检查

DM 提供自动的内存异常检查,检查参数为 INI 中的 MEMORY_MAGIC_CHECK,默认值为 2 大致的检查原理如下:

在每次申请内存时,返回的内存块中包含,返回内存的管理结构大小 + 申请长度 + 一个 ULINT_SIZE 大小的内存块 其中首部用于存放管理这块内存结构的结构,实际使用的内存为第二段,最后一段填入一个校验码。

校验码为一个固定魔术和该内存管理结构的首地址计算出来的一个常数。每当需要释放内存时,如果 MEMORY_MAGIC_CHECK 为 1 则会根据需要释放内存的地址计算出一个校验码,与该内存结构尾部的校验码比较,若不相等,则说明该片内存可能出现过写溢出,数据库会 HALT 掉。

如果 MEMORY_MAGIC_CHECK 配置为 2 则会在 1 的检查基础上,由于申请内存长度可能是大于需求长度的(因为申请时要求申请大小为 2 的 N 次幂,会在大于需求长度后面的每一位上都添加上特殊校验码,释放时每一位都回检查,检查失败也会 HALT。

如果实际生产中发现 CHECK 为 2 比较慢,则可以将 MAGIC_CHECK 改为 1。

扩展数据库的 REDO 日志

调整数据库 REDO 日志的大小,如将 2 个 REDO 日志都扩展到 2G (注意 REDO 日志的实际路径)。

使用 SYSDBA 用户登录,然后执行如下脚本:

alter database resize logfile 'D:\dmdbms\data\DAMENG\DAMENG01.log' to 2048;
alter database resize logfile 'D:\dmdbms\data\DAMENG\DAMENG02.log' to 2048;

DEM 工具及使用方法示例

DEM 工具存放在数据库安装目录 dmdbms 下的 web 文件夹中。

web 目录

DEM 配置示例(以 Windows 为例)

Jdk 目录:

JDK 目录

Tomact 目录:

Tomcat 目录

DEM 目录:

DEM 目录

Dmagent 目录:

Dmagent 目录

配置环境变量:

用户变量-java

用户变量-tomcat

系统变量 path

系统变量 path

cmd 启动 tomcat(E:\tomcat\bin\startup.bat),会自动将 dem 解压到相同目录下:

启动 tomcat

在数据库中新建 DEM 用户,并用 DEM 用户执行 dem_init.sql 脚本 (E:\dmdbms\web\dem_init.sql)。

执行 sql 脚本

更改 db.xml (E:\tomcat\webapps\dem\WEB-INF\db.xml) 中 dem 监控连接后台数据库的 ip/账号/密码/端口号:

修改配置文件

在 server.xml(E:\tomcat\conf\server.xml)的 host 节点中补全以下内容:

修改 host 文件

在 catalina.bat(E:\tomcat\bin\catalina.bat) 的最后添加以下内容:

set java_opts= -server -Xms40m -Xmx1024m -XX:MaxPermSize=512m -Djava.library.path=d:\dmdbms\bin;

修改 bat 文件

启动 tomcat 服务,并启动 DEM (http://127.0.0.1:8080/dem),账号/密码:admin/888888

界面展示

MANAGER 如何查看数据库配置信息

DM 管理工具 MANAGER,在登录以后,可以选中导航菜单中的顶层连接,右键-管理服务器打开管理服务器窗口,系统概览里面展示的是数据库配置信息。

管理工具

管理服务器

MANAGER 查看外键

在模式中找到对应的模式,点开表,找到你想要查看的表,点开【键】。

外键

如图片所示就是需要查看的外键信息,如果想要继续查看具体的信息,右键点击【外键】,选择自己需要查看的选项。

控制台工具查看试用截止日期

下图是 DM 控制台工具查看不到试用截止日期。

控制台工具

【解决方法】

通过管理工具登陆数据库执行 select * from SYS."V$LICENSE"; 语句即可查找出有效时间。

执行结果

V$license 字段信息可在《DM 系统管理员手册》中查找,手册位于数据库安装路径 /dmdbms/doc 文件夹。。

数据库完整性校验

可以的,达梦数据库提供了 dmdbchk 工具用于检查数据库完整性、正确性的命令行工具。在服务器正常关闭后的脱机情况下,用户可以使用 dmdbchk 对数据库进行校验,包括校验 DM 数据库内部的物理存储结构是否正常,对象信息是否合法等。

检验的内容具体包括三方面:

  1. 数据文件合法性检验
    数据文件校验只校验数据文件大小。如果数据库文件实际大小大于或等于文件头中记录的大小,则合法。
  2. 索引正确性校验
    索引检验包括:普通表 B 树索引校验、LIST 表扁平 B 树索引校验、列存储表索引校验。校验内容具体包括:B 树的层次、层次关系,每层的内部页、叶子页以及页之间的前后链接关系,每个页的页头信息(如页类型等)等。
  3. 对象 ID 合法性校验
    对象 ID 校验包括数据库内的所有对象的 ID 检验。对象包括:索引、表、约束、存储过程、模式、同义词、用户等。如果从系统表中查出的对象 ID 小于库的 ID 预留页中记录的该类型对象的下一分配 ID,则合法。因为库的 ID 预留页中记录的是各类型对象下一个新分配对象将使用的 ID,因此若系统表中的对象 ID 大于或等于该 ID,说明库已损坏。
注意

dmdbchk 并不能检查出用户实际数据的正确性,如果数据文件被手动人为修改,正好修改到的是用户数据部分,是检查不出来的。

达梦数据库校验工具的使用

达梦数据库校验需要在数据库服务正常关闭后进行,进入数据库程序目录 bin 下,输入 ./dmdbchk path=dm.ini 路径,例如数据文件目录为 /opt/dmdbms/data,则应该输入 ./dmdbchk path=/opt/dmdbms/data/DAMENG/dm.ini,校验完毕后,dmdbchk 会在当前目录下(dmdbchk 所在目录)生成一个名为 dbchk_err.txt 的检查报告,供用户查看。

具体使用和解析请查看《DM_dmdbchk 使用手册》,手册位于数据库安装路径 /dmdbms/doc/special 文件夹。。

数据库重演工具的使用

数据库重演 (Database Replay) 是 DM 中用来重现、定位和分析问题的一个重要手段,其基本原理是在数据库系统上捕获所有负载(记录外部客户端对服务器的请求),保存到二进制捕获文件,然后通过 DM 提供的数据库重演工具将捕获文件中的请求发送给捕获前由原始数据库备份恢复而来的重演测试系统上,从而帮助重现当时的场景。

使用方法:用户可以调用系统过程 sp_start_capture(path varchar(256), duration int) 来启动捕获发往数据库的所有负载,并将该阶段收到的所有请求保存到二进制捕获文件中,然后使用 DM 提供的数据库重演客户端工具重放二进制捕获文件,再现当时真实环境的负载及运行情况,帮助进行问题跟踪和诊断。使用系统过程 sp_stop_capture() 可以停止捕获。

Replay 的使用必须指定必要的执行参数,其调用格式为:

例如:DREPLAY SERVER=LOCALHOST:5236 FILE=.\test.cpt

例如我们设置 d:\下捕获文件 test.cpt,-1 表示持续时间为无限制,即需要手动停止捕获或磁盘空间满为止。

call sp_start_capture('d:\test.cpt',-1) ; --开始捕获
create table t10(id int);
insert into t10 values(10);
commit;
call sp_stop_capture ; --停止捕获`

结束后我们可以在 d:\ 看到捕获文件 test.cpt,开始进行重演。

dreplay.exe server=127.0.0.1:5236 file=d:\test.cpt

信息

成功信息

最终可以看到重演成功,而我们在捕获过程中数据库收到的所有请求都已经重演完成。

字符串比较大小写敏感

关于字符串比较大小写敏感主要涉及到两个方面的内容:

对字段的值比较而言

假如表 Test 中有如下两条记录
c1 c2
1 a
2 A

同样的查询语句:

select * from Test where c2 = 'a';

在大小写不敏感的库中会查出如下的两条记录
c1 c2
1 a
2 A

而在大小写敏感的库中则只会查出如下的一条记录
C1 C2
1 a

对于表名、字段名而言

在设置为大小写敏感的库中进行查询的时候,可能经常会遇到无效的表名或列名的问题,

下面针对这种情况进行说明。

  • 如果使用 DM 管理工具图形界面建表的话建议表名和字段名都使用大写。因为使用图形界面建表相当于使用语句建表的时候加了双引号的,会固定住大小写。如果写成小写,那么就是小写了,在查询的时候也需要加双引号,否则就有可能报无效的表名或列名的问题,比较麻烦;
  • 如果使用脚本建表的话,如果表名和字段名没有加双引号的话都会被系统自动转换成大写。

如:create table test(a int); 系统会自动把表名 test,字段名 a 转换成大写,处理方式与 Oracle 数据库一致。所以针对大小写敏感的库,在使用建表脚本或者通过查询脚本进行查询的时候建议统一不要写双引号,让系统统一自动都转化为大写;

  • 以上两点主要针对大小写敏感的库而言,大小写不敏感的库则不存在上述问题。

总结:基于以上两点,在初始化数据库的过程中就可以对字符串比较大小写敏感这个参数做出合理的选择了。参考链接:详解 DM 数据库字符串大小写敏感

查询达梦关键字列表/保留字

【问题描述】:

如何达梦关键字列表/保留字?如何屏蔽保留字/关键字?

【解决方法】:

达梦的关键字/保留字可以在《DM SQL 语言使用手册》附录 1 中查询,手册位于数据库安装路径 /dmdbms/doc 文件夹。

下面是处理表语句和关键字或者保留字冲突的方法:

双引号法

这个一般可以用来处理建表语句中的保留字冲突,如表名或者字段名是 DM 的保留字。这种方法一般可以快速地绕过问题,但是对于大小写敏感的库,这种用双引号的方法会固定死字段大小写,对于小写的字段,可能会带来无效的表名或者列名的问题。

dm.ini 中的参数设置

在 dm.ini 中有个参数 EXCLUDE_RESERVED_WORDS,这个参数可以用来屏蔽你想要屏蔽的保留字,将需要屏蔽的保留字写在 = 号后面,然后以逗号分隔。设置在 dm.ini 中的好处就是一旦设置,永久生效而且对所有客户端都有效,这样就不需要在所有客户端系统中进行专门配置。但是设置在 dm.ini 中之后,这个保留字就永久性失效了,哪怕你想通过 Manager 客户端工具在本地连接也没用了。而且该方式还存在一个隐患就是由于屏蔽掉了一些系统的保留字,所以可能会导致系统的一些功能无法正常使用。

不建议用这个参数,会有严重的副作用,并且比较隐蔽;在不改表的字段的情况下,最好的方案是改名字,次之给对象名加双引号。

建议

在移植过程中遇到 DM 的保留字,最好的处理方式还是对这些保留字进行修改,尽量不要使用 DM 的保留字。

[-5567]授权者没有此授权权限

【问题描述】:

创建用户后,给用户赋予系统权限 Any 的时候报错:错误号: -5567
错误消息: 第 1 行附近出现错误:
授权者没有此授权权限

【解决方法】:

方法 1:在 dm.ini 文件中修改参数 ENABLE_DDL_ANY_PRIV 为 1。
方法 2: 通过以下语句修改参数 ENABLE_DDL_ANY_PRIV。

sp_set_para_value(1,'ENABLE_DDL_ANY_PRIV',1);
或者
alter SYSTEM set 'ENABLE_DDL_ANY_PRIV'=1 both; 
注意

考虑到参数的特殊性,在部分版本数据库的 dm.ini 文件中,没有放入参数 ENABLE_DDL_ANY_PRIV,但用户可通过调用系统过程(方法 2)进行参数值的设置。

报错:多版本操作冲突过多 或 Too many mvcc conflict

【解决方法】:

MVCC 多版本并发控制是指维持一个数据的多个版本,在保证事务隔离级的情况下,使得读写操作没有冲突,提高了数据库并发读写的性能。因此可以解决在并发读写数据库时,做到在读操作时不用阻塞写操作,写操作也不用阻塞读操作。
以上报错是对一张表修改时,并发量较大导致的。可以修改数据库 dm.ini 文件中静态参数 MVCC_RETRY_TIMES,将数据调大,然后重启数据库即可。

[-2148]:标记不匹配

  1. 将配置文件 dm.ini 里面的参数 ENABLE_ENCRYPT=1 改成 0
  2. 检查数据库服务器版本/客户端版本 /dm.key 版本。若企业版数据库使用了安全版的 key 文件或者相反,也会报这个错误。

达梦数据库开启日志

  • 开启 SQL 日志:SP_SET_PARA_VALUE(1, ‘SVR_LOG’, 1);
  • 关闭 SQL 日志:SP_SET_PARA_VALUE(1, ‘SVR_LOG’, 0);

需要配置文件:sqllog.ini

可参考《DM 数据库管理手册》,手册位于数据库安装路径 /dmdbms/doc 文件夹。

注意

记得关闭或者配置日志文件大小限制,不然磁盘会撑爆。

修改数据库实例的字符集

字符集设置是在初始化实例的时候设置的,一旦设置完成就不能修改,只能重新初始化实例。

修改数据库实例的端口号

修改 dm.ini 中的 port_num,需要重启数据库。

删除模式报错

删除模式的时候报错:试图删除用户[****]的默认模式

通常一个用户对应一个模式;要删除用户的同名模式,需要级联删除,或者直接删除对应用户。

达梦错误码汇总

可以使用以下语句进行查询

select * from v$err_info;

也可以查看《DM 程序员手册》附录 1 错误码汇编,手册位于数据库安装路径 /dmdbms/doc 文件夹。

空间数据类型

【问题描述】:

达梦数据库之间支持空间数据库的迁移/空间/地理空间 /GEOMETRY/ 几何类型 查询吗?

【解决方法】:

支持,请参考《DM 系统包使用手册》DMGEO 包章节”,手册位于数据库安装路径 /dmdbms/doc/special 文件夹下。

如何查询数据库版本

【问题描述】:

如何查询当前使用的达梦数据库版本。

【解决方法】:

可以执行一下命令获取信息:

select * from v$version;

设置插入空字符串,在数据库里存 NULL

修改设置 dm.ini 的参数 compatible_mode=2,Oracle 没有空串这个概念,所以‘’和 null 都是显示 null 。

注意修改完之后需要重启数据库。

建议

建议写个触发器,把空串转成 NULL 再插入,compatible_mode 设成 2 可能产生其它影响。

无法比较的数据类型

【问题描述】:

在使用 Union 连接的时候,报错 error:无法比较的数据类型

【解决方法】:

检查是否有 clob/blob/TEXT 类型,如果有是要去重,对 clob/blob/text 类型不能去重。

建议

如果数据用 varchar 能存储的话,就重建表,将数据类型改成 varchar。

如果因为多个数据库组合,一定要用 Union 来合并的话,可以试试 union all,但是不去重。在其它操作符,例如 order by 时,也可能报相同错误,解决方法类似。

查询所有表的字段,注释、类型、类型长度等

【问题描述】:

如何查询在达梦某个库中存在某个字段的所有表?字段,注释、类型、类型长度?达梦怎么通过字段注释找到表?

【解决方法】:

查询 user_tab_columns、dba_tab_columns 视图。相应视图的字段,可以在“DM 系统管理员手册“附录里面查看。

DMSBT 接口版本号与数据库服务器不匹配

【问题描述】:

  • 执行下面语句
SQL> backup database full backupset '/home/dmdba/baktest/DMSERVER_BAK_09_10_2020_FULL' device type tape;
backup database full backupset '/home/dmdba/baktest/DMSERVER_BAK_09_10_2020_FULL' device type tape;

报错:[-10033]:DMSBT 接口版本号与数据库服务器不匹配.

  • 设置跟踪日志文件,查看追踪日志里面内容是空的
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 10.717(毫秒)
SQL> backup database full backupset '/home/dmdba/baktest/DMSERVER_BAK_09_10_2020_FULL' device type tape TRACE FILE '/home/dmdba/baktest/DMSERVER_BAK_trace.log' TRACE LEVEL 2;
backup database full backupset '/home/dmdba/baktest/DMSERVER_BAK_09_10_2020_FULL' device type tape TRACE FILE '/home/dmdba/baktest/DMSERVER_BAK_trace.log' TRACE LEVEL 2;
[-10033]:DMSBT接口版本号与数据库服务器不匹配.
已用时间: 00:00:01.004. 执行号:0.

【解决方法】:

检查服务器上是否安装了多套不同版本的 DM 数据库。检查目前启动的 dmap 服务和当前的 dmserver 服务的版本是否相同,是否使用同样的用户启动的。

执行查询返回错误[-7120]:回滚记录版本太旧无法获取用户记录

【解决方法】:

  • 方法一:修改 dm.ini 中的 undo_retention=1800 ,然后重启数据库;
  • 方法二:这个参数可以动态调整,sp_set_para_value(1,'UNDO_RETENTION',1800);
  • 方法三:SQL 执行时,涉及到的数据被其他人修改了,所以会这样,建议停应用或者找个没人用的时候再迁移。

备注: UNDO_RETENTION 单位为秒,建议后续改回默认参数。

查看数据库的到期时间

可以执行以下 SQL 语句:

select * from v$license;

查看 expired_date 列的信息。

自增列不允许修改

自增列一旦生成,无法更新,也不允许用 UPDATE 语句进行修改。

可以参考《DM SQL 语言使用手册》--5.6 DM 自增列的使用,手册位于数据库安装路径 /dmdbms/doc 文件夹。

如何收集统计信息

/* 收集整个库的统计信息 */
CALL SP_DB_STAT_INIT ();
DBMS_STATS.GATHER_SCHEMA_STATS('用户名',100,TRUE,'FOR ALL COLUMNS SIZE AUTO');

/* 统计用户下所有索引 */
DBMS_STATS.GATHER_SCHEMA_STATS('用户名',1.0,TRUE,'FOR ALL INDEXED SIZE AUTO');

/* 统计用户下所有字段 */
DBMS_STATS.GATHER_SCHEMA_STATS('用户名',100,TRUE,'FOR ALL COLUMNS SIZE AUTO');

/* 统计用户下某表 */
DBMS_STATS.GATHER_TABLE_STATS('用户名','表名',NULL,100,TRUE,'FOR ALL COLUMNS SIZE AUTO');

获取某个模式下某表的存储大小

有两种方式:

  • 使用管理工具,选择表右键属性;
  • 可以使用下列语句查询,TEST 为表名。
SELECT TABLE_USED_SPACE('SYSDBA','TEST')*page()/1024/1024.0  FROM dual;
SELECT segment_name AS TABLENAME,
       BYTES B,
       BYTES / 1024 KB,
       BYTES / 1024 / 1024 MB
  FROM user_segments
WHERE segment_name = upper('TEST');

扩展数据库的重做日志

调整数据库 REDO 日志的大小,比如将 2 个 REDO 日志都扩展到 2 GB,注意 REDO 日志的实际路径。
使用 SYSDBA 用户登录,然后执行如下脚本:

alter database resize logfile 'D:\dmdbms\data\DAMENG\DAMENG01.log' to 2048;
alter database resize logfile 'D:\dmdbms\data\DAMENG\DAMENG02.log' to 2048;

达梦数据库怎么开启审计功能

在 DM 系统中,专门为审计设置了开关,要使用审计功能首先要打开审计开关。审计开关由过程 VOID SP_SET_ENABLE_AUDIT(param int); 控制,过程执行完后会立即生效,param 有三种取值:

  • 0:关闭审计
  • 1:打开普通审计
  • 2:打开普通审计和实时审计

缺省值为 0。

例,打开普通审计开关,需要使用 SYSAUDITOR 用户登录,执行:SP_SET_ENABLE_AUDIT (1);

怎样修改“LENGTH_IN_CHAR(长度是否以字符为单位)”

“LENGTH_IN_CHAR(长度是否以字符为单位)”一旦设置好,就无法修改。如需修改,则需要重新初始化数据库实例。

logmnr_contents 视图中,哪些字段表示用户的主机名和用户的 IP

如果想要查看用户的主机名和用户的 IP 等信息,可以查看 SESSION 动态视图:

SELECT CLNT_HOST,CLNT_IP,OSNAME FROM V$SESSIONS;

查询 SQL 执行记录

可以执行下面语句进行查询:

SELECT * FROM V$SQL_HISTORY;

SQL 执行历史存放数据有限,若有需要,可以开启 DEM 监控,具体部署方法请参考 DEM 快速部署

报错:reached the max session limit

需要调整 max_session 参数,数值调大一点,可以参考以下设置:

SP_SET_PARA_VALUE(2,'MAX_SESSIONS', 1000);
SP_SET_PARA_VALUE(2,'MAX_SESSION_STATEMENT', 20000);

查询当前模式下有那些表的 SQL 语句

SELECT TABLE_NAME FROM DBA_TABLES WHERE OWNER='模式名';
建议

可以参考《DM 系统管理员手册》附录-兼容 Oracle 视图章节,查看更多动态视图信息,手册位于**数据库安装路径** `/dmdbms/doc` 文件夹。

如何查出某个用户下的某个数据库的所有表名

select NAME from sysobjects where "SUBTYPE$"='UTAB'
AND SCHID=(SELECT ID FROM sysobjects WHERE NAME='USER01' AND TYPE$='SCH');
--查询用户为 USER01 的 USER01模式下所有表名
建议

可以参考《DM 系统管理员手册》附录,查看更多动态视图信息,手册位于**数据库安装路径** `/dmdbms/doc` 文件夹。

如何查看建库时的字符集

执行以下语句:

select unicode();
--根据返回值进行判断
--0 表示 GB18030,1 表示 UTF-8,2 表示 EUC-KR

是否有 show parameter/show variables 之类的功能参数

执行下面语句进行参数查询:

select * from v$dm_ini;
建议

可以参考《DM 系统管理员手册》附录章节,查看更多动态视图信息,手册位于**数据库安装路径** `/dmdbms/doc` 文件夹。

达梦的页大小,怎么设置以及获取

页大小的设置:达梦数据库的页大小是初始化参数,只能在初始化数据库实例的时候设置,修改只能重新初始化实例。

页大小的获取:可以通过语句获取 select page/1024; 单位为 KB。

如何切换模式

单机切换模式:set schema 模式名;

实时主备的集群如何切换模式:确认监视器输入 login,然后输入用户名 SYSDBA 密码 SYSDBA,最后输入执行 switchover。

如何切换数据库

使用不同用户登录即可访问各自数据库用户下的表。

如何查询和修改数据库实例名

查询:

SELECT * FROM V$INSTANCE;

修改:

可以修改 dm.ini 配置文件的 INSTANCE_NAME 参数值。

如何收缩数据库大小

不能收缩

如何把 varchar 类型变成 clob/TEXT 类型

不能直接把 varchar 转换成大字段。可以用如下方式:

在表中创建大字段,首先把 varchar 字段内容 insert 或者 update 到大字段,然后把字段名称互相调换更改,最后删除 varchar 字段。

如何获取达梦当前模式名

运行下面语句获取:

SELECT SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID());

列长度超出定义如何处理

  1. 找到报错列,将精度调大;
  2. 可以加大类型:比如 varchar 内容太长,改成 text 类;
  3. 调整数据库页大小,建议调整成 16 KB 以上。

达梦数据库的 boolean 类型是用什么表示

达梦数据库的 boolean 类型可以用 bit 类型。

创建表的 blob 类型字段如何指定精度

blob 类型不能修改精度,大字段类型的精度都不能修改。

timestamp 类型为什么不可以修改精度

不可以修改精度,可以修改标度。

字符类型 TEXT 的精度是否可以调高

不能调,TEXT 为变长字符串类型。其字符串的长度最大为 2G-1。

如何判定当前库中某一个表是否存在

可以通过查询 DBA_TABLES 或 ALL_TABLES,如果要查询某个用户下某个表是否存在,可以通过 OWNER 列进行限定。

如:查询用户 TEST 下是否存在表 TAB,SQL 脚本如下:

select * from DBA_TABLES where owner = 'TEST' and table_name = 'TAB';
注意

+ 关于 DBA_TABLES 中每个字段的具体含义,可以参考《DM 系统管理员手册》附录-兼容 Oracle 视图章节,查看更多动态视图信息,手册位于**数据库安装路径** `/dmdbms/doc` 文件夹。 + 为了提高 DM 与 Oracle 的兼容性,DM 提供了较为丰富的与 Oracle 兼容的视图。

page_size/页大小在初始化数据库后是否可以更改

簇,页,日志文件大小,字符集,大小写敏感,这些是需要在数据库创建之前就确定好的,不可以修改。

对 blob 字段进行 like 查询性能较慢

可以使用全文索引。DM 的全文索引现只支持简体中文、英文语言。较为详细的语法介绍可参考《DM_SQL 语言使用手册》,手册位于数据库安装路径 /dmdbms/doc 文件夹。

给 TEXT 类型创建索引失败:试图在 BLOB/ClOB/ 用户自定义数据类型上建索引

TEXT 类型在达梦里面是大字段,是不允许创建索引的。

V$database 视图里 total_size 的单位是什么

单位是页,total_size*页大小(K)/1024 单位才是 MB。

如何查看实例是否是空格自动填充

select  * from v$dm_ini where para_name = 'BLANK_PAD_MODE';

BLANK_PAD_MODE:字符串比较时,结尾空格填充模式是否兼容 Oracle。取值:1 兼容;0 不兼容。 默认为 0。可选参数。

该参数设置后不能修改,需要重新初始化数据库。

删除用户报错:当前对象被占用

可以使用语句进行级联删除:

drop user 用户名 cascade;
警告

级联删除用户,将删除该用户所拥有的所有表、视图等资源,为保证数据不丢失,请务必确认无误后进行删除。

应用插入数据到达梦数据库报磁盘空间不足

  1. 表空间是不是没开自动扩展;
  2. df -h 查看下操作系统空间,另外查看下是哪个表空间满了。

字符串转换出错一般出现在怎样的使用场景中

数据类型最好一致,不同数据类型转换可能会报错。

具体的类型转换相容矩阵,可以参考《DM SQL 语言使用手册》函数章节--类型转换函数,手册位于数据库安装路径 /dmdbms/doc 文件夹。

试图删除已经使用的表空间

可以尝试先把表空间里的表删掉,如果删除表空间里面的数据还是报错:

  1. 可以尝试先 offline 表空间,表空间脱机处理后进行删除操作。
  2. 查询 sysobjects 或者 dba_objects,查看表空间里是否还存放了其它对象。

无效的数组查询对象

添加 hint: /+ ENABLE_TABLE_EXP_REF_FLAG(1)/ 解决。

数据插入后但是归档日志分析结果没内容

问题截图

需要修改 dm.ini 中以下两个参数值

  • ARCH_INI = 1
  • RLOG_APPEND_LOGIC = 1

重启数据库服务器生效

SELECT NAME , FIRST_TIME , NEXT_TIME , FIRST_CHANGE# , NEXT_CHANGE# FROM V$ARCHIVED_LOG;

DECLARE
BEGIN
FOR LOGPATH IN (SELECT PATH FROM V$ARCH_FILE) LOOP
DBMS_LOGMNR.ADD_LOGFILE(LOGPATH.PATH);
--DBMS_LOGMNR.ADD_LOGFILE('F:\arch\ARCHIVE_LOCAL1_0x10F0D1B2[0]_2020-12-25_11-55-05.log');
END LOOP;
END;
SELECT LOW_SCN, NEXT_SCN, LOW_TIME, HIGH_TIME, LOG_ID, FILENAME FROM V$LOGMNR_LOGS;

DBMS_LOGMNR.START_LOGMNR(OPTIONS=>2130 , STARTTIME=>TO_DATE('2020-11-20 01:05:44','YYYY-MM-DD HH24:MI:SS') , ENDTIME=>TO_DATE('2020-12-25 23:04:55','YYYY-MM-DD HH24:MI:SS'));
SELECT * FROM V$LOGMNR_CONTENTS;

分析结果

DBMS_LOGMNR.END_LOGMNR();

MEMORY_POOL 一般设置多少合适

【问题背景】

用户找了一些资料 说设置为服务器内存的 80 %,结果直接内存溢出了。

用户服务器 32 GB 内存,memory_pool 调到 20 GB,然后数据库宕机了。

用户主要是在做压力测试过程中,发现数据库内存使用量上不来,就强行提高了 memory_pool

错误结果

【问题解答】

这个资料完全不对,如果按照以上资料进行配置的话,数据库运行不了多久就会宕机。请按照下面进行配置:

主机物理内存配置(G) 16 32 64 128 256
应用最大连接数(个) 200 1000 2000 4000 5000
最大连接占用内存(G) 2 6 12 36 36
DM 软件内存占用(G) 5 5 5 5 5
MAX_OS_MEMORY 100 100 100 100 100
MEMORY_POOL(M) 2048 2048 2048 2048 2048
BUFFER(M) 8000 17000 33000 66000 131000
MAX_BUFFER(M) 8000 17000 33000 66000 131000
BUFFER_POOLS(个) 23 43 83 101 101
RECYCLE(M) 2000 4000 8000 16000 33000
HJ_BUF_GLOBAL_SIZE(M) 1000 2000 4000 8000 15000
HJ_BUF_SIZE(M) 500 500 1000 1000 1000
HAGR_BUF_GLOBAL_SIZE(M) 1000 2000 4000 8000 15000
HAGR_BUF_SIZE(M) 500 500 1000 1000 1000
SESS_POOL_SIZE(K) 16 16 32 32 32
SESS_POOL_TARGET(M)K 16384 16384 16384 16384 32768
CACHE_POOL_SIZE(M) 1024 1024 2048 2048 2048
DICT_BUF_SIZE(M) 500 500 500 500 500
SORT_FLAG 0 0 1 1 1
SORT_BLK_SIZE(M) 1 1 1 1 1
SORT_BUF_SIZE(M) 10 10 512 512 512
SORT_BUF_GLOBAL_SIZE(M) 2000 2000 5120 5120 5120

VARCHAR、TEXT 字段类型存储内容长度受分页限制吗?

VARCHAR 存储内容受分页限制,TEXT 最大内容可以存 2G-1 不受分页限制。
VARCHAR 数据类型指定变长字符串,用法类似 CHAR 数据类型,可以指定一个 不超过 8188 的正整数作为字符长度,例如:VARCHAR (100)。如果未指定长度,缺省为 8188。 在基表中,当没有指定 USING LONG ROW 存储选项时,插入 VARCHAR 数据类型的实际最大存储长度由数据库页面大小决定,具体最大长度算法如下表:

数据库页面大小 实际最大长度
4K 1900
8K 3900
16K 8000
32K 8188

如果指定了 USING LONG ROW 存储选项,则插入 VARCHAR 数据类型的长度不受数据库页面大小限制。VARCHAR 类型在表达式计算中的长度上限不受页面大小限制,为 32767。

如何修改 dm.ini 配置文件的参数

达梦的配置参数参数属性分为三种:静态、动态和手动。
静态,可以被动态修改,修改后重启服务器才能生效。
动态,可以被动态修改,修改后即时生效。参数详情参考安装目录 DOC 目录下的“ DM 系统管理员手册”-第 2.1 章节。
在 DM 数据库中,很多参数都是动态的,会自动响应各种负载,但是 DBA 仍然可以调用系统过程来改变 DM 实例的运行参数,从而获得更佳的性能体验。
DBA 可以在 DM 数据库运行过程中执行:SF_GET_PARA_VALUE 、 SF_GET_PARA_DOUBLE_VALUE 和 SF_GET_PARA_STRING_VALUE 这三个函数来获取系统的当前配置参数,并且可以使用 SP_SET_PARA_VALUE 和 SP_SET_PARA_DOUBLE_VALUE 过程来修改静态/动态配置参数。
详细函数修改方式参数详情参考安装目录 DOC 目录下的“ DM 系统管理员手册”-第 20 章节- 20.5 调整配置参数。

Oracle 中 raw 类型在达梦中可以用哪种类型代替

在 DM 中可以使用 varbinary 代替。

表空间的大小,对于数据库模式的性能会不会有影响

表空间打开自动扩充,其大小不会有什么数据库性能有影响。
详细的性能参考资料,可以参考:数据库性能诊断

收集统计信息是什么机制,是隔多长时间会执行一次,必须要手动执行?

默认需要手动执行,如果有需求,可以配置定时作业,定期收集。
详细请参考:统计信息与索引详解

Key/授权过期后,用新的授权加载进数据库,之前数据库数据是会保留还是会被自动删除

数据库里面的数据不会删除,将新的授权替换旧的授权后,数据库可以正常启动。

管理工具黑屏

【问题详情】:
达梦 7 数据库,在达梦管理工具中,新建管理用户后,给其分配“系统权限”,点击“系统权限”按钮,出现黑屏然后自动跳转到用户登录界面。在其他相同系统的服务器上使用相同的工具链接相同的数据库就没问题。
【问题解答】:

  1. 可以重启一下管理工具客户端
  2. 检查客户端和服务器版本是否一致,如果客户端版本比较低,可以升级一下客户端版本
备注

检查数据库版本的命令: dm7:select * from v$version; Dm8:select id_code();

表字段实际占用的长度与 VARCHAR() 精度不一致

如果数据库的 LENGTH_IN_CHAR 初始化是设置为 1,那么 VARCHAR 表示以字符为长度,中文数据实际长度会比 VARCHAR 精度大。

备注

LENGTH_IN_CHAR 这个参数是确定:VARCHAR 类型对象的长度是否以字符为单位。 1:是,设置为以字符为单位时,定义长度并非真正按照字符长度调整,而是将存储长度值按照理论字符长度进行放大。所以会出现实际可插入字符数超过定义长度的情况,这种情况也是允许的。同时,存储的字节长度 8188 上限仍然不变,也就是说,即使定义列长度为8188 字符,其实际能插入的字符串占用总字节长度仍然不能超过 8188; 0:否,所有 VARCHAR 类型对象的长度以字节为单位

如何调整配置参数/调整 dm.ini 参数/调整兼容性(COMPATIBLE_MODE)参数/…

可以参考安装目录下 doc 目录下 DM 系统管理员手册 第 20 章节 —20.5 小节调整配置参数。

如何在达梦数据库中获取表的创建时间

select * from dba_objects where OBJECT_TYPE='TABLE';
--查询的结果集中 created 列就是对象的创建时间。

达梦数据库创建函数时,如何捕获异常信息

可以参考安装目录 doc 目录下的 DM SQL 程序设计手册—第 6 章节 DMSQL 程序异常处理。

达梦里有 v$sql_stat_history 获取 sql 的视图机制吗

开启 SQL 跟踪日志,可以看到开启之后的执行过的 sql 操作:

开启语句:SP_SET_PARA_VALUE(1,‘SVR_LOG’,1);

日志文件在安装目录的 log 目录下,有个 dm_sql 这种开头的 log 文件。

用完记得关闭:执行 SP_SET_PARA_VALUE(1,‘SVR_LOG’,0);

是否可以通过不重启数据库服务的方式将临时授权替换正式授权?

可以,具体步骤如下:

  • 至数据库安装目录 bin 下将临时授权 dm.key 重命名
例:mv dm.key dm.key_bak
  • 将正式授权 dmxxxx.key 修改为 dm.key 文件拷贝至 bin 目录下
  • 登录客户端
    执行 SQL:
sp_load_lic_info();

如何查看数据库里的所有外键关联表

SQL 语句查询如下:

select
 t1.owner 原始表用户名,
  t1.table_name 原始表,
  t2.owner as 被依赖表用户名,
      t2.table_name as  被依赖的表,
      t1.constraint_name 外键名称,
      a1.column_name 列,
      a2.column_name as  被依赖的列
  
from dba_constraints t1, dba_constraints t2, dba_cons_columns a1, dba_cons_columns a2
where
     t1.r_constraint_name = t2.constraint_name and
     t1.constraint_name = a1.constraint_name and
     t1.r_constraint_name = a2.constraint_name
     order by t1.owner;

如何查询数据库实例的初始化参数?

select '实例名称' 数据库选项,INSTANCE_NAME  数据库集群相关参数值 FROM v$instance union all
select top 1 '数据库版本', banner ||'.'||id_code from v$version
union all
SELECT '字符集',CASE SF_GET_UNICODE_FLAG() WHEN '0' THEN 'GBK18030' WHEN '1' then 'UTF-8' when '2' then 'EUC-KR' end union all
SELECT '页大小',cast(PAGE()/1024 as varchar) union all
SELECT '簇大小',cast(SF_GET_EXTENT_SIZE() as varchar) union all
SELECT '大小写敏感',cast(SF_GET_CASE_SENSITIVE_FLAG() as varchar) union all
select '数据库模式',MODE$ from v$instance;

达梦数据库如何查询那些表使用了自增列?

select
       b.table_name,
       a.name COL_NAME
from
       SYS.SYSCOLUMNS a,
       all_tables b    ,
       sys.sysobjects c
where
       a.INFO2=1
   and a.id           =c.id
   and c.name         = b.table_name;

统计用户下的表和数据量

--创建表存储信息
create table test(table_name varchar,cnt bigint);

--将以下SYSDBA替换成需要统计的用户名
declare
sql varchar ;
cnt bigint ;
begin
for rec in (select table_name from dba_tables where owner = 'SYSDBA') loop
 sql = 'select count(*) from SYSDBA."'||rec.table_name||'"';
 execute immediate sql into cnt;
 insert into test values (rec.table_name,cnt);
 commit;
end loop;
end;

--查询
select * from test order by cnt desc;

如何查询用户拥有哪些角色权限?

  • 使用管理员权限用户执行:
select * from dba_role_privs where grantee = '用户名';
  • 右键用户查看属性,在会话框点击权限即可;
    用户权限

数据库查询时间与服务器本身时间不一致

【问题描述】

服务器本身时区及时间均正确,但数据库中查询 select sysdate; 比实际时间早 8 小时。

【问题解答】

需要配置 dm_svc.conf 文件,其中指定 TIME_ZONE=(480),即指明客户端的时区为东八区。
dm_svc.conf 文件是 DM 安装时生成一个配置文件,不同平台的目录有所不同:

  • 32 位的 DM 安装在 Win32 操作平台下,此文件位于 %SystemRoot%\system32 目录;
  • 64 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\system32 目录;
  • 32 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\SysWOW64 目录;
  • 在 Linux 平台下,此文件位于/etc 目录。

数据库中执行 DML 语句长时间无响应

【问题分析】

主要通过以下两点进行排查:

  • 首先排查数据库中是否产生了锁;如果存在,则可以等待或使用 call sp_close_session 杀掉相关阻塞会话。
  • 其次查看磁盘空间是否正常,比如归档满了,数据盘满了等问题也会导致数据库无法写入。

在 DSC 环境中修改 DCR 配置信息时报错:Disk[/dev/raw/raw1] is in using

【问题描述】

导入 DCR 配置文件时,报如下错误:

报错信息

【问题解决】

出现该报错是由于导入 dcr 文件时,dcr 配置信息被 css 进程占用。需要把 css 服务关闭才可以导入修改 dcr 信息。

用达梦管理工具,创建表空间报错:创建数据文件失败

【问题描述】

利用 DM 管理工具,创建表空间报错,具体报错信息如下:

报错信息

【问题解决】

达梦管理工具创建表空间在输入文件路径时,不需要手动新建.dbf 文件,只需要在确认文件路径后,输入文件名即可。具体步骤如下:
步骤 1:新建表空间;

新建表空间

步骤 2:输入表空间名(TEST);

输入表空间名

步骤 3:点击添加数据文件,设置文件大小,自动扩展等;

添加数据文件

步骤 4:输入文件路径,选择需要存放的路径;

选择文件路径

步骤 5:在选择好文件存放路径后,直接输入想要创建的文件名,不需要自己手动新建.dbf 文件。

输入文件名

如何查看数据库所有表空间大小及其使用情况

【问题解决】

可利用如下语句查询表空间大小及其使用情况:

SELECT F.TABLESPACE_NAME,
(T.TOTAL_SPACE - F.FREE_SPACE) / 1024 "USED (GB)",
F.FREE_SPACE / 1024 "FREE (GB)",
T.TOTAL_SPACE / 1024 "TOTAL(GB)",
(ROUND((F.FREE_SPACE / T.TOTAL_SPACE) * 100)) || '% '
PER_FREE
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BLOCKS *
(SELECT PARA_VALUE / 1024
FROM V$DM_INI
WHERE PARA_NAME =
'GLOBAL_PAGE_SIZE') / 1024)) FREE_SPACE
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT TABLESPACE_NAME, ROUND(SUM(BYTES /
1048576)) TOTAL_SPACE
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME) T
WHERE F.TABLESPACE_NAME = T.TABLESPACE_NAME;

达梦工具(manager、dts、dbca 和 console 等)详细报错可以在哪里获取

【问题解决】

在数据库的安装目录下的../log 文件夹中的 tool.log 文件获取,该日志文件中有详细的错误信息。

dem 安装集群报错:没有创建服务权限

【问题解决】

原因是 dmagent 是用 dmdba 用户权限启动的,使用 root 权限重新启动 agent 程序即可。

改为 root 权限启动

更改后的 key 文件不生效,授权的日期时间没变,应如何正确更换 DM 的 key 文件

【问题解决】

  • 替换 key 文件
  1. 移出原有的 dm.key 文件到其他目录或重名为其他名称;
  2. 将授权文件 dm.key 拷贝到安装目录的 bin 目录下,以下以数据库软件安装在/home/dmdba/dmdbms 目录,授权文件是 dm.key 上传到了/home/dmdba 目录为例。
su - dmdba
cd /home/dmdba/dmdbms/bin
cp /home/dmdba/dm.key /home/dmdba/dmdbms/bin     #将授权文件 dm.key 拷贝到bin目录下
chown -R dmdba:dinstall dm.key      #修改 dm.key 文件权限
chmod 755 dm.key
  • 让 key 文件信息生效

方法一:等待数据库自动检测并更新。
默认每天凌晨数据库会自动检测 key 信息,如果 key 被替换,会自动更新,建议第三天查询授权是否生效。
方法二:不重启数据库,执行函数生效。
该方法非所有版本都有,需要查看手册进行确认。打开数据库工具,新建查询:

call sp_load_lic_info();

方法三:重启数据库使 key 文件生效。
若为单机库,在/home/dmdba/dmdbms/bin 目录执行:./DmS(按 tab 键补全)空格 restart
若为集群,请和工程师确定重启方式。

  • 查询授权是否生效
select expired_date from  v$license;  #查询 key 的到期时间

若查询返回结果是否为'NULL',则表示已更新为永久授权,否则返回到期时间。

注意

1. 切勿在生产环境下,随意替换 key 文件; 2. key 文件名称一定要改成 dm.key,如果不修改直接放到服务器上是不生效的; 3. 如果之前的旧授权也在,可以先移走或者删除; 4. 替换 key 文件前,请确保与服务器架构匹配,否则有可能造成服务启动失败; 5. 若 key 替换完后,查询结果未达到预期,请确保 key 文件的权限属组正常。

本地 disql 登录正常,应用连接网络偶尔断开

【问题解决】

检查服务器进程:

ps -ef|grep port

Kill 该进程,并将 ports.sh 修改为 ports.sh_bak,重新连接即可。

如何查看统计信息收集情况

【问题解决】

利用如下 SQL 语句,可以查看某用户下的统计信息收集情况:

select a.object_name,a.owner,a.object_type,b.last_gathered 
from dba_objects a,SYSSTATS b 
where a.object_id = b.id --and a.OWNER = '用户名'
order by b.last_gathered limit 10;

查询结果如下图:

查询结果

扩展表空间失败:[-3410]:表空间上有事务未提交

【问题解决】

可通过以下步骤进行检查:

  1. 检查是否有查询表空间类视图未提交,例如 dba_data_files 等;
  2. 检查是否有查询表类视图未提交,例如 user_tables 等;
  3. 检查是否存在一些其他涉及表空间查询的事务未提交,可以通过查询视图 v$trxwait 查看具体等待事务及 sql。查询语句如下:
select tw.*,ss.clnt_ip,ss.SQL_TEXT from V$TRXWAIT tw join v$sessions ss on ss.trx_id=tw.wait_for_id order by wait_time desc;

如何查询统计表的各种约束

【问题解决】

---查询主键
SELECT a.OWNER as "模式名",a.TABLE_NAME as "表名",b.COLUMN_NAME as "列名", a.CONSTRAINT_NAME as "约束名"
from DBA_CONSTRAINTS a, ALL_CONS_COLUMNS b where a.CONSTRAINT_NAME=b.CONSTRAINT_NAME and CONSTRAINT_TYPE='P';

---查询外键
SELECT a.OWNER as "模式名",a.TABLE_NAME as "表名",b.COLUMN_NAME as "列名", a.CONSTRAINT_NAME as "约束名"
from DBA_CONSTRAINTS a, ALL_CONS_COLUMNS b where a.CONSTRAINT_NAME=b.CONSTRAINT_NAME and CONSTRAINT_TYPE='R';

---查询唯一约束
SELECT a.OWNER as "模式名",a.TABLE_NAME as "表名",b.COLUMN_NAME as "列名", a.CONSTRAINT_NAME as "约束名"
from DBA_CONSTRAINTS a, ALL_CONS_COLUMNS b where a.CONSTRAINT_NAME=b.CONSTRAINT_NAME and CONSTRAINT_TYPE='U';

---查询check约束
SELECT a.OWNER as "模式名",a.TABLE_NAME as "表名",b.COLUMN_NAME as "列名", a.CONSTRAINT_NAME as "约束名",SEARCH_CONDITION as "CHECK约束的条件"
from DBA_CONSTRAINTS a, ALL_CONS_COLUMNS b where a.CONSTRAINT_NAME=b.CONSTRAINT_NAME and CONSTRAINT_TYPE='C';

---查询默认列
SELECT OWNER as "模式名",TABLE_NAME as "表名",COLUMN_NAME as "列名",DATA_TYPE as "列类型",DATA_DEFAULT as "默认值" FROM DBA_TAB_COLUMNS WHERE DATA_DEFAULT IS NOT NULL;

---查询非空列
SELECT OWNER as "模式名",TABLE_NAME as "表名",COLUMN_NAME as "列名",DATA_TYPE as "列类型" FROM DBA_TAB_COLUMNS WHERE NULLABLE ='Y';

审计日志文件如何指定自定义路径

【问题解决】

审计日志文件缺省使用 SYSTEM_PATH 路径,若要把审计日志文件单独指定到自定义的路径下,dm.ini 文件中提供了 AUD_PATH 参数,可以指定自定义路径,该参数为静态参数,修改后重启数据库生效。

存储过程中对自动扩展的分区表执行插入未定义的分区数据报错:"语句块/包/存储函数中的间隔分区不支持自动扩展"

【问题描述】

问题重现过程如下:

---创建表
create table  dmtest(
c1 datetime(6) default sysdate not null,
c2 varchar2(10))partition by range(c1)
interval(numtodsinterval(1,'DAY'))
(
partition p1 values less than (datetime'2018-04-01 00:00:00')
);

---创建存储过程,执行分区表插入
create or replace procedure insert_interval(v_update datetime, v_paravalue varchar(10))
as
begin
 insert into dmtest values(v_update,v_paravalue);
 commit;
end;
/

---调用存储过程,出现报错:执行失败,语句块/包/存储函数中的间隔分区不支持自动扩展
call insert_interval(datetime'2021-10-13 19:33:41','aswq');

【问题解决】

dm.ini 提供了 DEL_HP_OPT_FLAG 参数来控制分区表的操作优化,该参数为动态会话级参数。出现如上问题,需要修改 DEL_HP_OPT_FLAG 的取值,使其包含 4:允许语句块中的间隔分区表自动扩展。

DEL_HP_OPT_FLAG 参数说明:控制分区表的操作优化。
0:不优化;
1:打开分区表 DELETE 优化;
2:控制范围分区表创建的优化处理,转换为数据流方式实现;
4:允许语句块中的间隔分区表自动扩展;
8:开启对 truncate 分区表的优化处理;
16:完全刷新时删除老数据使用 delete 方式。
DEL_HP_OPT_FLAG 参数取值支持使用上述有效值的组合值,如 7 表示同时进行 1、2、4 的优化。

启动 dmagent 报错:permission denied

【问题描述】

搭建 DEM 时,启动 dmagent 时出现如下报错:

报错信息

【问题解决】

该情况一般出现在 dmagent 是从其他数据库拷贝过来的情况,拷贝过来后文件权限改变,导致报错,修改 dmagent 文件权限即可。

chown -R dmdba:dinstall /home/dmdba/dmagent
chmod -R 755 /home/dmdba/dmagent

DEM 监控不到主机信息

【问题描述】

A 主机 Dmagent 正常启动,B 主机部署的 DEM 检测不到对应的主机信息。DEM 主机部署和 dmagent 均按照规范部署。

【问题解决】

查看两台主机的时间,发现 A、B 主机间的时间不一致,如下图:

主机时间

DEM 监控 5 分钟为消息有效时间,即如果收到 dmagent 发送的消息的时间与 DEM 运行机器当前时间相差 5 分钟,则认为该消息无效,不处理该消息。
因此需要重新同步时间,并重启 dmagent。之后查看 DEM 主机监控信息,可以查看到监控的主机信息。

创建 dm8-oracle11G 的 dblink,进行查询时报错:[-6010]:Error in line:1 Connection lost.

【问题描述】

报错截图如下:

报错信息

【问题解决】

查看 dm_DMSERVER_202109.log 日志,查看报错信息,发现报用户名和密码错误:

日志信息

返回创建 dblink 的语法确定用户名与密码是否正常,注意检查大小写,如果密码为小写,请注意用双引号引起来。

DM 数据库在麒麟 10 操作系统上关闭 numa,透明大页和修改磁盘调度算法未生效

【问题解决】

1.检查操作系统内核版本。
操作系统内核版本为 27 之前和 27 之后的修改方法有所不同,如果是 27 版本之后的用通用方法关闭,如果是 27 版本之前的用下面的方法关 numa ,透明大页和磁盘调度;

2.关闭 numa 和透明大页。
修改/boot/efi/EFI/kylin/grub.cfg 文件,查找关键字:menuentry,在相对位置添加 numa 和透明大页命令:

numa=off transparent_hugepage=never

重启生效,如用命令查看 numa 没有生效,请联系友商,从 BIOS 上进行关闭 numa 。

3.修改磁盘调度算法。修改/usr/lib/udev/rules.d/60-block-scheduler.rules 文件,改磁盘调度算法,重启生效。

dmagent 使用 service.sh start 以服务方式启动时报错:The service DmAgentService is not install

【问题解决】

出现该问题是由于 DmAgentService 服务未注册导致。可通过如下方法解决:

以 root 用户登陆后,进入到 dmagent 安装目录,执行:./service.sh install 注册服务,然后输入 dmagent 的路径,dmagent.ini 的路径进行注册即可。如下图所示:

注册服务

注册完成后,就可以使用./service.sh start 或者 systemctl start DmAgentService.service 进行启动。

在服务器没有 JDK 的环境下,应如何启动 dmagent 服务

【问题解决】

在此种情况下,用户未安装 JDK 环境,可以使用 DM 数据库自带的 JDK 环境,位于数据库安装目录 $DM_HOME/jdk 下,具体步骤如下:
1.配置 Java 环境变量:

export JAVA_HOME=$DM_HOME/jdk --此变量替换为达梦数据库安装目录绝对路径
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

如下图所示:
配置 JDK 环境

2.启动 dmagent。当前提供了两种方式启动 dmagent,具体如下:
(1)使用 dmdba 以进程启动。直接进入 dmagent 目录执行:./startup agent.ini 即可正常启动。

以进程方式启动 dmagent

(2)以服务方式启动。需要在 root 用户中先载入数据库的 JDK 环境变量,参考第 1 步(未执行此步骤将无法注册服务)。然后进入 dmagent 的目录中执行:./service.sh install 进行注册。

以进程方式启动 dmagent

最后,注册完成后,在 dmagent/service/DmAgentService 中添加第(1)步的 JDK 环境变量保存后即可使用服务方式启动。注意,JDK 的路径一定要使用达梦数据库 JDK 的绝对路径,否则还是无法正常启动 dmagent。

查看服务配置

查看服务状态

如何将两台主备集群修更改为 nomal 模式

【问题解决】
先启动到 mount 状态,执行如下命令,修改 ALTER_MODE_STATUS 参数

SQL> sp_set_para_value(1,'ALTER_MODE_STATUS',1);  
SQL> alter database normal;
SQL> sp_set_para_value(1,'ALTER_MODE_STATUS',0);
SQL> alter database open;

然后,修改启动服务内容

vi DmServiceSERVER
---修改服务启动方式为 open
start_mode=open

最后,将配置文件做备份,并修改回原本的参数:
1、修改 dmarch.ini,只保留 local 本地归档;
2、dm.ini 关闭 MAL_INI;
3、重启数据服务。

DEM 监控 linux 多台主机的时候只能显示一台

【问题解决】

配置 agent 时,修改 center_url,还需要配置 id_policy = 1 使用 ip 的方式监控(默认 0 采用 mac 地址),配置完成之后重启正常。

配置 agent

DEM 添加 DSC 集群问题

DEM 添加 DSC 集群时,主要包含以下两类问题:

问题一: DEM 监控 DSC 集群无法通过扫描站点添加成功

【问题描述】

DEM 监控 DSC 集群通过扫描站点测试连接成功,但点击确定后,报错:站点扫描失败。

【问题解决】

通过新增站点来添加 DSC 集群,点击下图中的“+”号,填写 DSC 集群信息,新增即可(DSC 每个节点都要新增一次)。

新增 dsc 集群

问题二:添加站点时候无法无法直接修改保存

【问题描述】

当需要修改下图中服务名和启动命令时报错,并提示以下信息:主机和对应端口已存在。

待修改的集群信息

【问题解决】

点击标记的倒三角形图标,如下图,选择“编辑”,进行修改即可。

修改步骤

数据库连接资源释放

【问题解决】

如果用户的资源一直没有释放,可以从应用层和数据库两个方面来做设置。
注意需要考虑实际业务场景:如果从数据库层面断开,应用层面再次连接数据库会报错,那么最好从应用层面来设置资源限制。
从应用层面设置会话空闲期,请联系应用负责人进行相应设置,以下主要介绍从数据库层面进行资源限制。

  • 管理工具设置:设置用户会话空闲时间,管理工具–管理用户–修改用户—资源设置项—会话空闲期。
  • 命令行设置:比如设置会话空闲时间为 10 分钟,采用如下 SQL 语法:
    alter user 用户名 limit CONNECT_IDLE_TIME 10;
  • 通过 V$SESSIONS 查出空闲会话,然后使用 sp_close_session(会话 ID) 关闭会话。
select * from V$SESSIONS where  STATE='IDLE' ;
sp_close_session(会话ID)

DM8 客户端管理工具上修改普通用户报错“无效的表或视图名[SYSUSERPROFILES]"

【问题解决】

1、通过 select * from sysuserprofiles 查询报错,确实不存在相关的表;
2、通过 select id_code 查询服务器端版本为 2021.06.07 号的,再查看 manager 客户端为 2021.10.21 号的版本,客户端版本超过服务端版本;
3、更换客户端为 2021.06 月份左右的版本后,修改普通用户,正常执行;

总结:建议在 DM8 的数据库上,客户端版本尽量和服务端版本保持一致。

新建用户创建作业失败:没有 JOB 权限

【问题解决】

可以通过单独授权或者授权 dba 角色进行解决。

方法一: 通过管理工具授予用户 admin job 权限。

修改步骤

方法二: 通过命令的方式进行授权。

grant ADMIN JOB to "CYTEST";

说明:也可通过授予用户 dba 权限解决该问题,但生产环境中不推荐使用该方法。

测试环境中经常有一些长时间运行的会话,如何批量 kill 这些会话,释放连接

【问题解决】

结束会话一般使用 sp_close_session() 命令。如果想批量执行的话,可以根据条件在 v$sessions 中查询,并使用游标去执行。
批量结束会话操作要小心,可以先根据条件查看相关的 SQL_TEXT,确定后再去执行。
以下例子是结束 60 秒以上的活动会话。

1.首先查看一下符合条件的相关会话:

select * from
(SELECT
       DATEDIFF(SS, LAST_RECV_TIME, SYSDATE) SS    ,
       DBMS_LOB.SUBSTR(SF_GET_SESSION_SQL(SESS_ID)),
       *
FROM
       V$SESSIONS
WHERE
       STATE = 'ACTIVE'
order by
       ss desc) where SS >60;

2.使用游标去执行:

DECLARE
CURSOR c_sessions
is
select * from
(SELECT
       DATEDIFF(SS, LAST_RECV_TIME, SYSDATE) SS    ,
       DBMS_LOB.SUBSTR(SF_GET_SESSION_SQL(SESS_ID)),
       *
FROM
       V$SESSIONS
WHERE
       STATE = 'ACTIVE'
order by
       ss desc) where SS >60;
c_raw c_sessions%rowtype;
begin
for c_row in c_sessions
loop
execute immediate 'sp_close_session('''||c_row.sess_id||''')';
end loop;
end;

使用系统包 DBMS_STATS.GATHER_SCHEMA_STATS 收集统计信息时,如何查看收集进度?

【问题描述】

使用系统包:DBMS_STATS.GATHER_SCHEMA_STATS(),收集一个模式下的表的统计信息时,应如何查看收集进度。
例如:

--收集SYSDBA模式下所有对象的统计信息
DBMS_STATS.GATHER_SCHEMA_STATS('SYSDBA',100,FALSE,'FOR ALL COLUMNS SIZE AUTO');

【问题解决】

系统表 dba_tables 中的 last_analyzed 字段可以看到调用系统包收集统计信息的最后收集时间,所以一般可以使用下面的 SQL 以表个数为单位查看收集进度(可根据实际情况调整 OWNER):

SELECT wm_concat(progess) from (
select COUNT(*)  progess from dba_tables where 
OWNER='SYSDBA' AND to_char(last_analyzed,'yyyymmdd') =to_char(sysdate,'yyyymmdd') --目前收集的个数
UNION
SELECT COUNT(*) progess  from dba_tables where OWNER='SYSDBA' --总的表个数
)

在 DM 达梦数据库的运行日志中出现大量 Failure occurs in data_recv_inet_once 警告信息

【问题描述】

在 DM 达梦数据库的运行日志中出现大量 Failure occurs in data_recv_inet_once 警告信息,如下图:

报错截图

【问题解决】

如果 WARNING 非常频繁,可能会导致告警日志文件特别大。这里的 Failure occurs in data_recv_inet_once 是消息检验的告警,与网络环境有一定的关系,网络不稳定的情况下触发此告警的可能性较大,可以直接修改 dm.ini 的 COMM_VALIDATE 参数来关闭该功能。该参数可以动态或系统级修改,用来控制是否对消息进行校验。0 表示不检验;1 表示检验,默认值为 1。
关闭消息校验的警告操作如下:

---查看 COMM_VALIDATE 参数
select para_name,para_value,description,para_type from v$dm_ini where para_name='COMM_VALIDATE';

---修改参数 COMM_VALIDATE 为 0
SP_SET_PARA_VALUE(1, 'COMM_VALIDATE', 0);

修改完成后在 dm.ini 中检查是否参数是否已修改。

cat dm.ini |grep COMM_VALIDATE

如何将 ASM 磁盘中的文件拷贝出来

【问题解决】

---A、B 机器启动 CSS 和 ASM 服务:
[dmdba@ ~]$ /opt/dsc/dmdbms/bin/dmcss DCR_INI=/opt/dsc/config/dmdcr.ini
[dmdba@ ~]$ /opt/dsc/dmdbms/bin/dmasmsvr DCR_INI=/opt/dsc/config/dmdcr.ini

---在A机器上创建data目录:
[dmdba@dmdsc01 ~]$ mkdir /opt/ASMdata

---在A机器上拷贝ASM中文件到操作系统,在ASM磁盘中拷贝文件需要加绝对路径或加单引号:
[dmdba@dmdsc01 ~]$ /opt/dsc/dmdbms/bin/dmasmtool DCR_INI=/opt/dsc/config/dmdcr.ini
 ASM> cp -r '*' '/opt/ASMdata'
ASM>cp 'ARCHIVE_LOCAL1_0x71BFA289[0]_2021-08-26_08-00-05.log' '/opt/ASMdata'
ASM>cp -r +DMDATA/data/dsc1/arch/ARCHIVE_LOCAL1_0x71BFA289[0]_2021-08-26_08-00-05.log /opt/ASMdata

数据库中缺少 DBA_TABLES、USER_TABLES、DBA_FREE_SPACE 等系统视图

【问题解决】

可通过如下步骤解决:

1.创建系统视图 SP_CREATE_SYSTEM_VIEWS(1);

2.如果报语法错误或其它错误,检查是否屏蔽了关键字;

select * from v$dm_ini where para_name='EXCLUDE_RESERVED_WORDS';

如果存在关键字屏蔽,修改 dm.ini 中 EXCLUDE_RESERVED_WORDS 参数,去掉关键字屏蔽后重启数据库。并执行 SP_CREATE_SYSTEM_VIEWS(1);

DEM 后台数据库数据总量过大怎么办?能定期清理吗?

【问题描述】

DEM 在长期使用后,后台数据库中会保存很多历史数据信息,后台数据总数据量会变的很大,占用磁盘空间。同时,部分记录详细信息表的数据量会变的很大,导致前台部分功能点涉及到大表的关联查询时,会出现缓慢卡顿的问题。

【问题解决】

可通过以下两种方法解决问题:

方法一: 使用 DEM 管理平台的历史数据管理功能,设置历史数据保留时间上限。进行该设置后,系统会自动删除指定天数之前的历史数据。

1.选择系统配置模块。

系统配置模块

2.历史数据管理选项,选择数据保留时间,勾选对应表,点击应用。

选择数据保留时间

方法二: 在相应表上设置索引和定时作业,解决查询慢和占用磁盘空间大的问题。

1.在大表上添加索引。

CREATE INDEX IDX_DMA_DATABASE_SQL_COUNT_TS ON DEM.DMA_DATABASE_SQL_LOG_FILE_INFO(TS);
CREATE INDEX IDX_DMA_DATABASE_SESSION_TS ON DEM.DMA_DATABASE_SESSION(TS);
CREATE INDEX IDX_DMA_DATABASE_SQL_SLOW_TS ON DEM.DMA_DATABASE_SQL_LOG_VIEW_INFO(TS);
CREATE INDEX IDX_DMA_MAINFRAME_DISK_TS ON DEM.DMA_MAINFRAME_DISK(TS);
CREATE INDEX IDX_DMA_DATABASE_TS_TS ON DEM.DMA_DATABASE_TS(TS);

2.创建存储过程,更新大表统计信息和清理大表数据。

CREATE PROCEDURE CLEAR_HISTORY_DAYS(DAYS INT) AS
BEGIN
DELETE FROM DEM.DMA_DATABASE_SQL_LOG_FILE_INFO WHERE TS < TIMESTAMPDIFF(MS,'1970-01-01',SYSDATE - DAYS); 
DELETE FROM DEM.DMA_DATABASE_SESSION WHERE TS < TIMESTAMPDIFF(MS,'1970-01-01',SYSDATE - DAYS);
DELETE FROM DEM.DMA_DATABASE_STAT WHERE TS < TIMESTAMPDIFF(MS,'1970-01-01',SYSDATE - DAYS);
DELETE FROM DEM.DMA_MAINFRAME_STAT WHERE TS < TIMESTAMPDIFF(MS,'1970-01-01',SYSDATE - DAYS);
DELETE FROM DEM.DMA_DATABASE_SQL_LOG_VIEW_INFO WHERE TS < TIMESTAMPDIFF(MS,'1970-01-01',SYSDATE - DAYS);
DELETE FROM DEM.DMA_MAINFRAME_DISK WHERE TS < TIMESTAMPDIFF(MS,'1970-01-01',SYSDATE - DAYS);
DELETE FROM DEM.DMA_DATABASE_EVENT WHERE TS < TIMESTAMPDIFF(MS,'1970-01-01',SYSDATE - DAYS);
DELETE FROM DEM.DMA_DATABASE_TS WHERE TS < TIMESTAMPDIFF(MS,'1970-01-01',SYSDATE - DAYS);
COMMIT;

--更新统计信息
EXECUTE IMMEDIATE 'STAT 100 ON INDEX DEM.DMA_DATABASE_SQL_LOG_FILE_INFO';
EXECUTE IMMEDIATE 'STAT 100 ON INDEX DEM.IDX_DMA_DATABASE_SESSION_TS';
EXECUTE IMMEDIATE 'STAT 100 ON INDEX DEM.INDEX_DMA_DB_STAT_TS';
EXECUTE IMMEDIATE 'STAT 100 ON INDEX DEM.INDEX_DMA_MF_STAT_TS';
EXECUTE IMMEDIATE 'STAT 100 ON INDEX DEM.DMA_DATABASE_SQL_LOG_VIEW_INFO';
EXECUTE IMMEDIATE 'STAT 100 ON INDEX DEM.IDX_DMA_MAINFRAME_DISK_TS';
EXECUTE IMMEDIATE 'STAT 100 ON INDEX DEM.INDEX_DMA_DB_EVENT_TS';
EXECUTE IMMEDIATE 'STAT 100 ON INDEX DEM.IDX_DMA_DATABASE_TS_TS';
END;

3.创建定时作业,定时执行存储过程。

SP_INIT_JOB_SYS(1);
call SP_CREATE_JOB('HIS_CLEAR',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('HIS_CLEAR');
call SP_ADD_JOB_STEP('HIS_CLEAR', 'STEP1', 0, 'CALL CLEAR_HISTORY_DAYS(30);', 1, 2, 0, 0, NULL, 0);--清除30天前历史数据
call SP_ADD_JOB_SCHEDULE('HIS_CLEAR', 'DAY1', 1, 1, 1, 0, 0, '02:00:00', NULL, '2021-01-11 16:24:10', NULL, '');
call SP_JOB_CONFIG_COMMIT('HIS_CLEAR');

使用 Tomcat 10 版本部署 DEM 时,浏览器打开管理界面报错:HHTP 状态 404-未找到

【问题描述】:

当部署 DEM 时,使用 Tomcat 10 版本,不管使用 JDK 1.8.0_333(JDK8 最新版本),还是使用 JDK 11.0.9(JDK11 最新版本),浏览器打开 http://xx.xx.xx.xx:8080/dem 都提示:HHTP 状态 404-未找到。

【问题解决】:

达梦 DEM 目前暂不支持 Tomcat 10 的版本。

处理办法:替换 Tomcat 10 版本至 Tomcat 7-9 之间的版本即可。

微信扫码
分享文档
扫一扫
联系客服