达梦7常见问题

1.DM7下载地址是?
http://www.dameng.com/service/download.shtml

2.使用DM7如何寻求帮助?
html

  • 在本版发帖,版主会第一时间回答您的问题java

  • 达梦24小时服务热线:400 991 6599linux

  • 达梦技术社区:http://bbs.dameng.comsql

  • 达梦官方QQ群:37727201       数据库


3.DM7
安装注意事项
为了您的数据安全,安装设置密码时建议将密码设置为大于6位数,当前版本可能会所以致使不能建立数据库,后期版本会给予更友好的提示。

4.DM7是如何实现分页的?
DM7支持top、limit和rownum三种分页方式
编程

5.DM7后台服务说明
DMservice服务是数据库核心服务
DMAMON服务是审计服务,用来作审计。
DMJMON服务是代理服务,用来作做业调度。
DMWMON服务是数据守护服务,用来作主备。
安全


6.DM7 JDBC编程注意事项
// 定义DM JDBC 驱动串
String jdbcString = "dm.jdbc.driver.DmDriver";
// 定义DM URL 链接串
String urlString = "jdbc:dm://localhost:5236";
服务器


7.命令行工具disql使用说明:
--查看帮助:
  disql help
--登陆
  disql SYSDBA/SYSDBA
--注意事项:dm7密码是大小写敏感的

8.如何修改表名
alter table WE_EFFORT ALTER SCOPE_ENUM_ID1 rename to SCOPE_ENUM_ID;

9.达梦数据库支持JPA中实体类保存和更新操做吗?
怎么调用persist方法就会报出下面的异常
Exception executing batch:
org.hibernate.StaleStateException: Batchupdate returned unexpected row count from update [0]; actual row count: 0;expected: 1

解决办法:修改dm.ini配置文件,将BATCH_PARAM_OPT 参数改成0,重启便可


10.如何查询当前用户下全部的表名?
select NAME from sysobjects where "SUBTYPE$"='UTAB'
AND SCHID=(SELECT ID FROM sysobjects WHERE NAME=USER AND TYPE$='SCH');

11.有开源的客户端工具能够连DM么?

基于JDBC的工具就能够,好比:SQuirrel SQL、DbVisualizer


12.java.sql.SQLException: 语句句柄个数超上限(1024)或系统内存不足 错误如何处理?

缘由:不申请新的session,不停地申请语句句柄,超过了每一个session可用语句句柄数的上限

解决办法:
治本:修改应用程序,每一个语句句柄用完后,将句柄关闭
指标:修改dm.ini参数,提升session可用语句句柄的上限
max_session_statement由100改成1000

13.安装在oracle linux 5.5_64位上安装DM7,初始化库的时候报错:
Extract install files..........
java.lang.UnsatisfiedLinkError: /tmp/DMInstall/source/bin/libdmutl.so:/tmp/DMInstall/source/bin/libdmutl.so: ELF file OS ABI invalid

缘由:官网提供的达梦数据库版本是基于REDHAT6的,oracle linux5.5的内核版本太低,建议使用2.6.32以上内核的linux版本。

--------------------------------------------------------------------------------------------------------------------------------
14. DM7在初始化库的过程当中须要注意哪几个重要参数?
   (1) 页大小(page_size)
         除去Clob、Blob等大字段外,数据库中一行记录的全部字段的实际长度的和不能超过页大小的一半。
        建议页大小设置为16K,防止在后期进行数据迁移和开发过程当中出现记录超长的问题;
   (2) 日志文件的大小(log_size)
         数据库redo日志文件的大小,单位为M,正式环境日志文件的大小通常设置为2048;
   (3) 字符串比较大小写敏感(case_sensitive)
         默认为大小写敏感的,根据具体状况进行设置。迁移实施中若是原始库为OracleDB2数据库的话
        需设置为大小写敏感,若为SQL Server和MySQL数据库则需设置为大小写不敏感,因此在数据库
        初始化库的过程当中须要根据具体状况来选择。
        注意事项:
        在开发环境和测试环境的页大小、字符串大小写敏感等初始化参数必定要保持一致,避免使用.bak文件进行
        还原的时候,由于初始化参数不一致致使没法还原的问题。因此在初始化库以前务必规划好上述参数,由于
        页大小和字符串比较大小写敏感这两个参数一旦初始化完成,后期没法修改。如需修改,则只能删掉现有实例
        重现初始化新的实例。
        总结:
        数据库在安装的过程当中基本上就是下一步下一步,按照默认选项安装就好,安装路径根据本身的要求选择。
        当数据库安装完成,在使用数据库配置助手dbca工具初始化库的过程当中,其它步骤按照默认选项下一步便可,
        当到这个页面时须要注意如下三个参数的设置,其它参数如无特殊要求按照默认选项就好。

15. 何为字符串比较大小写敏感?
     关于字符串比较大小写敏感主要涉及到两个方面的内容:
     (1) 对字段的值比较而言
          假如表Test中有以下两条记录
          c1       c2
           1       a        
           2       A        
           一样的查询语句:select * from Test where c2 = 'a';
           在大小写不敏感的库中会查出以下的两条记录
          c1       c2
           1       a        
           2       A
           而在大小写敏感的库中则只会查出以下的一条记录
          C1       C2
           1       a        
      (2) 对于表名、字段名而言
          在设置为大小写敏感的库中进行查询的时候,可能常常会遇到无效的表名或列名的问题,
         下面针对这种状况进行说明。
          (i) 若是使用DM管理工具图形界面建表的话建议表名和字段名都使用大写。由于使用图形界面建表至关于
              使用语句建表的时候加了双引号的,会固定住大小写。若是写成小写,那么就是小写了,在查询的时候
              也须要加双引号,不然就有可能报无效的表名或列名的问题,比较麻烦;
          (ii) 若是使用脚本建表的话,若是表名和字段名没有加双引号的话都会被系统自动转换成大写。
               如:create table test(a int);系统会自动把表名test,字段名a转换成大写,处理方式与Oracle数据库一致。
               因此针对大小写敏感的库,在使用建表脚本或者经过查询脚本进行查询的时候建议统一不要写双引号,
               让系通通一自动都转化为大写;
          (iii) 以上两点主要针对大小写敏感的库而言,大小写不敏感的库则不存在上述问题。
     总结:基于以上两点,在初始化数据库的过程当中就能够对字符串比较大小写敏感这个参数作出合理的选择了。

16. DM7是否须要设置所谓的外网IP?
     DM7是不须要设置外网IP的,只要网络畅通,相应端口(默认端口为5236)开放的状况下就能够访问。

17. DM7是否支持增量备份?第三方管理工具是否是好用些?
     DM7支持增量备份,详细内容请参考DM_DBA.pdf手册的第31章 备份和还原的相关章节。
     我的以为数据库自己本身作的增量备份确定比所谓的第三方工具更稳定可靠。   

18. DM7数据库管理员SYSDBA用户的密码忘记了可否找回?
     (1)  原则上数据库管理员SYSDBA用户的密码忘记了是没法找回的;
     (2)  极个别特殊的状况可能须要经过研发从源码层面进行修改,从而跳过密码认证这块;
     舒适提示:
     (1)  数据库管理员SYSDBA的密码不要随便修改,默认密码为SYSDBA(密码严格区分大小写)。
           若是出于安全方面的考虑非得修改,请必定要作好备案工做;
     (2)  若是数据库中还有其它的用户,能够尝试在数据迁移工具DTS中使用其它用户登陆,把数据库中
           相关用户的数据迁移到新的实例对应的用户中。

19. DM7如何断定当前库中一个表是否存在?
      能够经过查询DBA_TABLES或ALL_TABLES,若是要查询某个用户下某个表是否存在,能够经过OWNER列进行限定。
     如:查询用户TEST下是否存在表TAB,SQL脚本以下
           select * from DBA_TABLESwhere owner = 'TEST' and table_name = 'TAB';
      注:
          (1) 关于DBA_TABLES中每一个字段的具体含义能够参考DM_DBA.pdf手册_附录3 ORACLE兼容视图;
          (2) 为了提升 DM7与ORACLE 的兼容性,DM7提供了较为丰富的与Oracle兼容的视图。

20. DM7如何配置归档?
     DM7配置归档的详细操做步骤以下:
     (1) 打开dm.ini中的归档开关:ARCH_INI=1;
     (2) 在数据文件目录data/DAMENG下配置dmarch.ini,内容以下:
          [ARCHIVE_LOCAL1]
           ARCH_TYPE             = LOCAL           #归档类型 LOCAL/REALTIME
           ARCH_DEST             = d:\dmdbms\data\DAMENG\ARCH #归档目标路径(注意实际路径)
           ARCH_FILE_SIZE      = 1024             #单个归档文件大小,单位Mb,缺省128M
          ARCH_SPACE_LIMIT  = 10240            #REDO日志归档空间限制,单位为Mb,0表示无限制
     (3) 重启数据库服务器
     完成上述三步则就完成了DM7归档的配置。
     关于每一个参数具体含义介绍:
     (i) ARCH_TYPE 归档类型,对于单机的数据库配置归档而言,基本就是本地归档(LOCAL),若是涉及到DM7
          其它集群的配置时,则会涉及到其它的归档类型;
     (ii) ARCH_DEST 归档目标路径,通常专门新建一个归档文件夹存放归档文件,这样产生的归档文件就会放到
          该归档文件夹中;
     (iii) ARCH_FILE_SIZE 单个归档文件的大小,数据库在运行的过程当中会产生归档文件,当单个归档文件的大小
           达到1024M时,系统会自动切换写下一个归档文件;
     (iiii) ARCH_SPACE_LIMIT 归档空间限制,首先须要说明的一点就是归档文件是循环写的,上面已经提到了当
           单个归档文件的大小达到1024M时,系统会自动切换写下一个归档文件。随着系统的运行归档日志文件
           会愈来愈多,当达到归档空间限制以后,系统会自动删除老的归档文件。而关于这个归档空间限制的大小
           通常须要结合备份策略来考虑,基本的设置的原则是至少要可以容纳下2~3个全库全库备份间的全部归档。

21. DM7如何屏蔽保留字?
     方法一:双引号法
     这个通常能够用来处理建表语句中的保留字冲突,如表名或者字段名是DM7的保留字。这种方法通常能够
     快速地绕过问题,可是对于大小写敏感的库,这种用双引号的方法会固定死字段大小写,对于小写的字段,
     可能会带来无效的表名或者列名的问题。
     方法二:dm.ini中的参数设置
     在dm.ini中有个参数EXCLUDE_RESERVED_WORDS,这个参数能够用来屏蔽你想要屏蔽的保留字,将须要屏蔽
     的保留字写在=号后面,而后以逗号分隔。设置在dm.ini中的好处就是一旦设置,永久生效并且对全部客户端都有效,
     这样就不须要在全部客户端系统中进行专门配置。可是设置在dm.ini中以后,这个保留字就永久性失效了,哪怕你想
     经过manager客户端工具在本地链接也没用了。并且该方式还存在一个隐患就是因为屏蔽掉了一些系统的保留字,
     因此可能会致使系统的一些功能没法正常使用。
     建议:
     在移植过程当中遇到DM7的保留字,最好的处理方式仍是对这些保留字进行修改,尽可能不要使用DM7的保留字。

22. 在安装DM7的过程当中出现错误 ELF file OSABI invalid 该如何解决?
      解决办法:报这个错误说明安装的数据库版本与操做系统版本不匹配,需找咱们商务人员从新申请相匹配的数据库版本。

23. 使用DM7时如何进行导入导出?
      建议经过命令行的方式进行导入导出。详细可参见:DM_DBA.pdf手册第31章 备份和还原 中逻辑备份和逻辑还原的
      相关章节。

24. DM7如何关闭一个session?
     能够经过调用一个系统函数SP_CLOSE_SESSION来关闭一个session。
     函数定义:
     VOID SP_CLOSE_SESSION(SESSION_ID  INT)
      功能说明:
     中止一个活动的会话
     参数说明:
     SESSION_ID:会话 ID
      举例说明:
     SP_CLOSE_SESSION(510180488);

25. DM7有相似于Oracle的AWR分析报告吗?
     有的,详细请参考DM_SQL.pdf手册中 21.25 DBMS_WORKLOAD_REPOSITORY包中的相关内容和示例说明。

26. Oracle中raw类型在DM7中能够用哪一种类型代替?
     Oracle中raw类型在DM7中可使用varbinary代替。

27. 如何扩展数据库的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;

28. DM7数据库如何进行卸载?
      在使用DM7的过程当中,有时候咱们可能须要卸载DM7后从新安装新的数据库版本,下面简单讲述如何正常卸载
      DM7数据库。
      前提条件:在进行卸载达梦数据库以前,先正常关闭达梦数据库。
      Windows环境:
      方法1:在Windows的开始 -> 全部程序 -> 达梦数据库 -> 卸载;
      方法2:在达梦数据库的安装目录,如D:\dmdbms目录下能够看到达梦数据库的卸载程序uninstall.exe,双击该
                 程序也能够完成卸载。
      注意事项:先保证达梦数据库处于关闭状态而后再进行卸载,不然Windows服务窗口中达梦数据库注册的一些服务和
                     注册表中的一些信息可能没法正常删除,这样可能会给下一次的安装带来麻烦。
      Linux环境:
      方法1:图形界面卸载
                 若是能够直接接触Linux服务器的桌面,在桌面上会有一个DMDBMS的文件夹,里面也有卸载的图标,
                 双击便可完成卸载,与Windows的界面风格彻底一致;
      方法2:字符界面卸载
                 在达梦数据库的安装目录,如/opt/dmdbms目录下有一个卸载脚本uninstall.sh,在Linux终端中执行命令
                ./uninstall.sh -i 便可以字符界面完成对达梦数据库的卸载。
       注意事项:先保证达梦数据库处于关闭状态而后再进行卸载。


29. DM7存储过程和语句块中如何进行打印?  begin
    print '使用print语法打印';
  end;

  --使用dbms_output包打印首先须要建立系统包:
SP_CREATE_SYSTEM_PACKAGES(1);
--而后开启这个打印的包:
    dbms_output.enable;

  begin
    dbms_output.put_line('使用dbms_output包语法打印');
end;

30.linux系统下 达梦数据库设置为开机自启动怎么设置?
网络

修改启动脚本,将DM启动脚本DmServiceXXXXX 移到/etc/init.d下,chkconfig DmServiceXXXXX onsession

确认此数据库能以dmdba用户正常前台启动后(必须步骤),操做步骤以下:

第一步:复制数据库实例服务脚本dmserverd,命名为DmInstanceServiceDAMENG并修改,修改path值为dm.ini路径(必须),dm_home设置为dm主程序安装路径(必须),svc_porg设置为数据库实例名(可选推荐)。

第二步:将脚本DmInstanceServiceDAMENG 复制到 /etc/rc.d/init.d 目录下。

cp /opt/dmdbms/bin/DmInstanceServiceDAMENG  /etc/rc.d/init.d/DmInstanceServiceDAMENG

第三步:赋予服务脚本DmInstanceServiceDAMENG 可执行权限。

chmod  777  /etc/rc.d/init.d/DmInstanceServiceDAMENG

第四步:注册 DM实例服务并配置开机自动启动。

chkconfig --add DmInstanceServiceDAMENG

chkconfig DmInstanceServiceDAMENG on

chkconfig --list DmInstanceServiceDAMENG

第五步:后台启动达梦数据库实例服务,查看服务状态,关闭实例服务。

service DmInstanceServiceDAMENG start

service DmInstanceServiceDAMENG status

service DmInstanceServiceDAMENG stop


31.
如何使用SQL插入BLOBcreate or replace directory utllobdir as 'C:\alipay'; --你的BLOB文件所在位置。
create table bfile_tab (bfile_column BFILE);
create table t (blob_column BLOB);
----------------------------------------
declare
   a_blob  BLOB;
   a_bfile BFILE := BFILENAME('UTLLOBDIR','test.jpg');
begin
   insert into bfile_tab values (a_bfile)
     returning bfile_column into a_bfile;
   insert into t values (empty_blob())
     returning blob_column into a_blob;
   dbms_lob.fileopen(a_bfile);
   dbms_lob.loadfromfile(a_blob, a_bfile, dbms_lob.getlength(a_bfile));
   dbms_lob.fileclose(a_bfile);
   commit;
end;
要较新的版本才支持

32.没有bool类型怎么办?
用bit类型就好
--未完待续,欢迎你们提问,我来整理。

33.使用WINDOWS系统时,本来在DM服务查看器里面能够看到的数据库服务怎么没了呢?

基本上,都是因为杀毒软件删除了服务致使的,请从新注册服务,而后关闭360


34.达梦数据库的数据文件最大能够多少?


受操做系统和文件系统限制


35.使用达梦管理工具访问DM数据库,在使用图形化工具查看数据库对象时,报错“非法的基类名****”,“无效的列名****”等。

通常发生在客户端工具与服务器版本差异很大时,须要更新到客户端与服务器版本相同。

 

36.DM7字符串链接符号是?

使用||进行字符串链接



37.
如何替换KEY文件

将key文件拷贝到DM的安装目录下的bin目录下,更名并替换掉本来的dm.key。而后重启服务。

38.DM7查表必需要 表空间.表名  是怎么回事?

使用某一个用户登录时,访问该用户的默认表空间里的表时,不须要带表空间名。

39.连上之后如何切换模式?

set schema XXX

40.为何个人对象名写的是对的,查询时还报找不到对象呢?

通常出现这种状况,是由于你的对象名是小写的,而DM在执行SQL时自动将全部小写字符转化为了大写。解决方法是将小写字符用双引号“”包起来。或是全部对象名都使用大写。

41.标度和精度有啥区别?

精度指数字的位数。 标度指小数点后的数字位数。 例如,数 123.45 的精度是 5,标度是 2。

42.想要存储年月日和时分,使用什么数据类型?

Datetime

43.数据库还原时,报XX参数不匹配

通常是字符大小写敏感、页大小这两个参数不匹配。从新初始化一个参数与作备份的实例相同的实例便可。

44.个人TEMP表空间为何这么大?当用户的 SQL 语句须要磁盘空间来完成某个操做时,DM 数据库会从 TEMP 表空间分配临时段。如建立索引、没法在内存中完成的排序操做、SQL 语句中间结果集以及用户建立的临时表等都会使用到 TEMP表空间。
若是你的TEMP表空间很大,那说明你的业务当中存在不少急需优化的SQL。
TEMP表空间在重启后会释放掉,也能够手动回收。

45.DM配置UNIXODBC及PERL经过ODBC链接DM。有另一个帖子解释的很详细:http://www.itpub.net/thread-1824202-1-1.html

46.达梦中的一个SQL有没有惟一的ID?

V$SQL_PLAN里查看SQL_ID

47.达梦的密码策略?  

经过DM.INI里的参数:PWD_POLICY设置系统默认口令策略。0: 无策略;1: 禁止与用户名相同;2:口令长度不小于 9;4:至少包含一个大写字母(A-Z);8 :至少包含一个数字(0-9);16:至少包含一个标点符号(英文输入法状态下,除“和空格外的全部符号;若为其余数字,则表示配置值的和,如 3=1+2,表示同时启用第 1 项和第 2 项策略。当 INI参数COMPATIBLE_MODE=1时,PWD_POLICY 的实际值均为 0


48.DM.INI介绍
每建立一个 DM 数据库,就会自动生成 dm.ini。dm.ini 是 DM 数据库启动所必须的配置文件,经过配置该文件能够设置 DM 数据库服务器的各类功能和性能选项,主要的配置内容见DBA手册。
参数分为动态参数与静态参数,动态参数能够经过SP_SET_PARA_VALUE函数直接修改并生效


49.导入DMP文件时的常见问题
a)中文乱码。通常是因为导出与导入时的字符集的环境变量不一样。使用命令行dimp命令导入,并在执行dimp前先执行export LANG=...将当前字符集调整的和导出时的同样
b)报各类初始化参数不一致的警告(CASE_SENSIVE参数不匹配、页大小不一致等)。导出的库与导入的库的初始化参数不一致时会出现这些错误。
c)XX对象已存在。提示已经很明确了。


50.删除表空间时提示“试图删除已经使用的表空间”?

提示已经很明确了,把表空间里的表删掉吧


51.关于VARCHAR类型的长度的限制。

VARCHAR类型字段的长度问题,是在异构数据库迁移时很是常见的一个问题。
DM的VARCHAR字段的最大长度与“页大小”这一参数有关。在建库时指定,以后没法修改。
4K的1900,8K的3900,16K的8000,32K的8188


52.SQL语句报错: 嵌套层次太深。通常的嵌套层次不会太多,通常出现这种问题极可能是有死循环!!!例如建了个触发器,而后一条SQL执行触发器的时候触发了本身53.关于拆分字符串,能够参考下面的例子:create table test_wm(c1 int,c2 varchar(100),c3 varchar(100));insert into test_wm values(1,'3,2,4,5','no');insert into test_wm values(2,'5,1,1+2','yes');select C1,C3,regexp_substr(C2,'[^,]+',1,level) son,LEVEL   from test_wm   CONNECT BY LEVEL<=REGEXP_COUNT(C2,',')+1 and prior C1=C1 andprior dbms_random.value() is not null; 54.JAVA外部函数的调用方法。a.先生成一个JAVA包,放到某个目录下,咱们假设放在了E:\test.jarb.执行SQL:CREATE OR REPLACE FUNCTION MY_INT(a int, b int)RETURN intEXTERNAL 'e:\test.jar'"test.testAdd" USING java;注意类名和函数名区分大小写c.而后就能够调用外部函数了select MY_INT(1,2);55.为啥我查询时,有过滤条件,也建了索引,但它就是不走索引?注意两点:数据分布、统计信息不少时候,统计信息不全会致使优化器计算执行代价的时候算错,误认为走索引会比全表慢,形成执行计划不对。统计信息的收集方法:某用户下的全部索引:DBMS_STATS.GATHER_SCHEMA_STATS('SSCKF',100,TRUE,'FOR ALL INDEXED SIZE AUTO');某用户下全部字段(包括索引):DBMS_STATS.GATHER_SCHEMA_STATS('SSCKF',100,TRUE,'FOR ALL COLUMNS SIZE AUTO'); 某表下的全部字段:DBMS_STATS.GATHER_TABLE_STATS('SSCKF','FO_ACCOUNTBILL',null,100,TRUE,'FOR ALLCOLUMNS SIZE AUTO');收集某一列的统计信息sp_col_stat_init('JXWOA','OA2_RECEIVEDOC','RD_STATE');sp_col_stat_init('JXWOA','OA2_SENDDOC','SD_STATE');有个客户本身作了10W条测试数据,而后写了个SELECT *FROM T WHERE C='A';这样的测试语句。但这10W条数据全是同样的,怎么可能走索引。修改测试数据的脚本,让C这个字段的值平均分布在1~1000上,作完后收集统计信息,就走索引了。56. DM7如何查看建库时的字符集?  select unicode();--根据返回值进行判断  0 表示 GB18030,1 表示 UTF -8,2 表示 EUC -KR

相关文章
相关标签/搜索