达梦数据库初体验

前言

       最近由于工作需要接触了一款国产化数据–达梦数据库。可以直接在达梦官网获取开发版,可以有至发布之日起一年的试用时间,这里附上官网链接达梦官网下载,注意自己使用的环境。基本体验可以直接使用windows版,由于我是用的是中标麒麟的系统,所以我选用了DM8开发版(Linux-rh7-64位)。不同版本之间有些差别,可以直接在官网查询,这里只按照开发版来使用。

1、DM8安装中注意事项

关于达梦数据库安装的方法网上已经有了很多,这里只总结一些需要注意到的地方。

  1. 安装gcc依赖

    [root@localhost ~]# yum -y install gcc gcc-c++
    
  2. 设置文件打开数量

    [root@localhost ~]# ulimit -n 65536
    
  3. 防火墙,达梦数据库实例是端口形式,所以我们要开放对应端口,这里我直接关闭防火墙

    [root@localhost ~]# systemctl stop firewalld
    [root@localhost ~]# systemctl disable firewalld
    Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
    Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
    
  4. init命令行方法安装的数据库是没有示例库的,实例库需要通过图形化界面安装

2、DM8使用

2.1数据库工具

  • disql

    sql命令行

    两个路径下都有disql

    bin中,不需要连接

    [dmdba@localhost bin]$ ./disql sysdba/SYSDBA
    服务器[LOCALHOST:5236]:处于普通打开状态
    登录使用时间: 2.895(毫秒)
    disql V8
    SQL> exit;
    

    tool中:需要连接,相当于是oracel的sqlplus/nolog

    [dmdba@localhost tool]$ ./disql sysdba/SYSDBA
    disql V8
    SQL> select status$ from v$instance;
    未连接
    SQL> conn sysdba/SYSDBA:5236
    服务器[LOCALHOST:5236]:处于普通打开状态
    登录使用时间: 2.579(毫秒)
    
  • manager

    管理工具

    [dmdba@localhost tool]$ ./manager
    

    在这里插入图片描述

  • console工具

    查看和修改参数

    做冷备和恢复

    [dmdba@localhost tool]$ ./console
    

    在这里插入图片描述

  • DTS迁移工具

    [dmdba@localhost tool]$ ./dts
    

    在这里插入图片描述

  • 性能监视工具

    [dmdba@localhost tool]$ ./monitor
    

    在这里插入图片描述

2.2用户管理

  • 查看用户
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TH52QVOJ-1606983960309)(D:/达梦/md/1、数据库行业.assets/image-20201124162804247.png)]

  • 不同版本达梦数据库有不同的用户

    • 企业版中有

      SYS:不能登录,存放的数据字典和视图

      SYSDBA:管理员

      SYSAUDITOR:审计员

      SYSSSO:安全员

    • 安全版:

      在企业版基础上,增加SYSDBAO(数据库对象操作员)

  • 密码策略:

    PWD_POLICY,默认2,设置系统默认口令策略。

    0: 无策略;

    1: 禁止与用户名相同;

    2: 口令长度不小于9;

    4: 至少包含一个大写字母(A-Z);

    8 :至少包含一个数字(0-9);

    16:至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号)

    若为其他数字,则表示配置值的和,如3=1+2,表示同时启用第1项和第2项策略。

    当COMPATIBLE_MODE=1时,PWD_POLICY的实际值均为0

    3=2+1 6=2+4

    将密码策略设置为 禁止与用户名相同并且口令长度不小于9

    即改即生效

    SQL> sp_set_para_value(1,'PWD_POLICY',3);
    DMSQL 过程已成功完成
    已用时间: 5.084(毫秒). 执行号:322.
    SQL> SELECT para_name,para_value from v$dm_ini where para_name = 'PWD_POLICY';
    
    行号     PARA_NAME  PARA_VALUE
    ---------- ---------- ----------
    1          PWD_POLICY 3
    
    已用时间: 2.287(毫秒). 执行号:324.
    
  • 创建用户

    创建TBS用户,用户属于TBS表空间,TBS用户有建表和建视图的权限

  1. 创建TBS表空间

    create tablespace "TBS" datafile '/dm8/data/DAMENG/TBS01.DBF' size 32 CACHE = NORMAL;
    
  2. 创建用户

    create user "TBS" identified by "dameng123"
    limit failed_login_attemps 3, password_lock_time 1, password_grace_time 10
    default tablespace "TBS";
    
    grant "PUBLIC","VTI" to "TBS";
    
    grant CREATE TABLE,CREATE VIEW to "TBS";
    
  3. 修改用户

    TBS用户可以查询dmhr.employee的字段employee_name,salary

    列级控制

    grant SELECT("SALARY") on "DMHR"."EMPLOYEE" to "TBS";
    
    grant SELECT("EMPLOYEE_NAME") on "DMHR"."EMPLOYEE" to "TBS";
    
  4. 不能查看dmhr.employee的字段salary

    赋予权限可以按列,回收权限只能回收到表级

    revoke SELECT ON dmhr.employee FROM TBS;
    
  5. 修改用户默认表空间

    alter user "TBS" default tablespace "TEST";
    
  6. 锁定用户

    alter user TBS account lock;
    
  7. 解锁用户

    alter user TBS account unlock;
    
  8. 删除用户

    不能删除有表的,可以强制删除

    drop user test;
    

2.3角色管理

       角色是一组权限的集合,方便权限管理。角色是可以被授予给角色和用户的。

  1. 创建角色

    create role "R1";
    
    grant "PUBLIC","RESOURCE" to "R1";
    
    grant CREATE TABLE,CREATE TRIGGER,CREATE INDEX to "R1";
    
    grant SELECT("EMPLOYEE_NAME"),UPDATE("EMPLOYEE_NAME") on "DMHR"."EMPLOYEE" to "R1";
    
  2. 授予角色给用户

    grant "R1" to "TBS";
    
  3. 撤回角色

    revoke "R1" from "TBS";
    
  4. 启用、禁用角色

    ./manager工具右键用户

  5. 删除角色

    drop role R1;
    

2.4备份还原

  • 物理备份

    冷备:不需要开启归档,需要开启DmAP服务,需要关闭数据库实例,针对整库做备份

    1. console(dmdba下使用,不要使用root)

      关闭数据库实例

      [dmdba@localhost bin]$ ./DmServiceDMSERVER stop
      Stopping DmServiceDMSERVER:                                [ OK ]
      

      检查DmAP服务

      [dmdba@localhost bin]$ ./DmAPService status
      DmAPService (pid 8851) is running.
      

      新建备份
      在这里插入图片描述

    2. 用dmrman工具备份,只支持冷备

      [dmdba@localhost bin]$ ./dmrman 
      dmrman V8
      RMAN> backup database '/dm8/data/DAMENG/dm.ini' backupset '/dm8/backup';
      
  • 物理还原

    1. 检查备份集是否有效

      [dmdba@localhost bin]$ ./dmrman 
      dmrman V8
      RMAN> check backupset '/dm8/backup';
      check backupset '/dm8/backup';
      CMD END.CODE:[0]
      check backupset successfully.
      time used: 32.745(ms)
      
    2. console工具还原
      在这里插入图片描述
      在这里插入图片描述

    3. 还原后需更新魔数,不然报错
      在这里插入图片描述

    4. 更新魔数
      在这里插入图片描述

    5. 正常启动,完成全库还原
      在这里插入图片描述

  • 导入、导出

    dexp/dimp命令,可以导入导出库、用户、模式、表四个级别

    查看帮助

    [dmdba@localhost bin]$ ./dexp help
    dexp V8
    格式: ./dexp  KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
    
    例程: ./dexp  SYSDBA/SYSDBA GRANTS=Y TABLES=(SYSDBA.TAB1,SYSDBA.TAB2,SYSDBA.TAB3)
    
    USERID 必须是命令行中的第一个参数
    
    关键字              说明(默认值)
    --------------------------------------------------------------------------------
    USERID              用户名/口令 格式:USER/PWD*MPP_TYPE@SERVER:PORT#SSLPATH@SSLPWD
    FILE                导出文件 (dexp.dmp)
    
    [dmdba@localhost bin]$ ./dimp help
    dimp V8
    格式: ./dimp KEYWORD=value 或 KEYWORD=(value1,value2,...,vlaueN)
    
    例程: ./dimp SYSDBA/SYSDBA IGNORE=Y ROWS=Y FULL=Y
    
    USERID 必须是命令行中的第一个参数
    
    关键字                 说明(默认值)
    --------------------------------------------------------------------------------
    USERID                 用户名/口令 格式:USER/PWD*MPP_TYPE@SERVER:PORT#SSLPATH@SSLPWD
    
    

    全库导出

    [dmdba@localhost bin]$ ./dexp sysdba/SYSDBA file=full.dmp log=full.log directory=/dm8/backup full=y
    

    用户导出

    [dmdba@localhost bin]$ ./dexp sysdba/SYSDBA file=dmhr.dmp log=dmhr.log directory=/dm8/backup owner=SYSDBA
    

    表导出

    [dmdba@localhost bin]$ ./dexp sysdba/SYSDBA file=emp.dmp log=emp.log directory=/dm8/backup tables=emp
    

    库导入

    [dmdba@localhost bin]$ ./dimp sysdba/SYSDBA file=full.dmp log=imp_full.log directory=/dm8/backup full=y
    

    注意:执行用户导入时,如果用户不存在,要先创建用户。否则报错,无法导入。

3、总结

3.1设置文件最大打开数

       安装数据库时提示文件大小问题
       linux系统对于文件打开数量会有限制,查看方法

[root@localhost ~]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 14989
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 14989
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

​       其中open files的默认值是1024,这在我们使用中很容易达到,造成性能瓶颈,所以我们直接设置为最大值,也就是65536。此方法为临时生效,针对进程、系统级别的调整这里不进一步介绍。可以参考Linux设置系统打开文件数量

[root@localhost ~]# ulimit -n 65536
[root@localhost ~]# ulimit -n 
65536

3.2不要用root账户

​       在linux下,不同账户之间的权限应该严格隔离。为了减少对操作系统的影响,用户不应该以 root 系统用户来安装和运行 DM。同样也不建议用户使用 root 系 统用户初始化和运行 DM 数据库系统和客户端工具。

3.3初始化图形化界面失败

在这里插入图片描述
       如果使用root用户登录,然后执行了su - dmdba切换用户之后,安装数据库就会出现无法调用安装图形化界面的问题。虽然可以直接使用-i来命令行安装,但是非常不方便。同理,也会出现在切换用户后任意一图形界面上。
       比如。xclock时钟组件,在root下可以显示,但是dmdba不能
在这里插入图片描述
在这里插入图片描述

如果提示xclock指令未找到,可能是没有安装xorg-x11-apps

[root@localhost ~]# yum install xorg-x11-apps*

       这是因为你从root登录到dmdba上运行dmdba的程序时,对于应用程序来说,root是客户端。对于图形化界面来说,它就会在root客户端上显示。但是我们本意是要在dmdba上显示,所以我们需要使用root作为服务端,dmdba作为客户端输出图形化界面。因此登录到dmdba之前,需要在root中运行xhost+来设置使其他用户也能访问root的服务端。
       在Linux/Unix类操作系统上, DISPLAY用来设置将图形显示到何处。

xhost补充:
命令用途: 是用来控制X server访问权限的
xhost + 是使所有用户都能访问Xserver.
xhost + ip 使ip上的用户能够访问Xserver.

​ 在dmdba下显示图形化界面操作如下

  1. 查看root用户下display环境变量

    [root@localhost ~]# echo $DISPLAY
    :0
    
  2. 设置xhost+

    [root@localhost ~]# xhost +
    access control disabled, clients can connect from any host
    
  3. 切换dmdba,查看dmdba的display环境变量

    [dmdba@localhost ~]$ export DISPLAY=:0
    
  4. 设置dmdba的display参数

    [dmdba@localhost ~]$ export DISPLAY=:0
    [dmdba@localhost ~]$ echo $DISPLAY
    :0
    
  5. 执行xclock打开图形化界面
    在这里插入图片描述

3.4锁超时

在使用达梦数据的过程中,出现未知原因的事务锁。
在这里插入图片描述

​ 可以直接在./disql中执行commit提交事务,结束会话。

上面只是一种临时解决手段,我们可以通过另一种方法来解决这个问题

  1. 达梦数据库提供了视图查询,其中有锁、会话信息视图

    ---查询锁信息
    select * from v$lock
    ---查询对象信息
    select * from sysobjects
    ---查询会话信息
    select * from v$sessions
    
  2. 通过连接查询就可以查出是那张表的哪个锁由那个会话操作造成的

    select l.*,sys.NAME,s.SESS_ID from v$lock l
    left join sysobjects sys on sys.ID=l.TABLE_ID
    left join v$sessions s on l.TRX_ID=s.TRX_ID
    
  3. 关闭掉会话就会释放掉锁

    SP_CLOSE_SESSION(session_id)
    

3.5sql命令行填充历史命令

​ linux下的oracle、sqlplus等sql命令行都不能自动填充历史命令,十分不方便。达梦数据库的./disql工具也是一样,好在我们可以使用第三方的工具来帮我们完成这件事

  1. 安装readline依赖

    [root@localhost ~]#  yum -y install readline*
    
  2. 下载解压安装rlwrap

    github地址rlwrap下载

    [root@localhost opt]# tar -xvf rlwrap-0.43.tar.gz 
    [root@localhost opt]# cd rlwrap-0.43/
    [root@localhost rlwrap-0.43]# ./configure 
    [root@localhost rlwrap-0.43]#  make && make install
    
  3. 使用rlwrap运行./disql

    [root@localhost rlwrap-0.43]# rlwrap /dm8/tool/disql 
    disql V8
    SQL> conn SYSDBA/SYSDBA
    
    服务器[LOCALHOST:5236]:处于普通打开状态
    登录使用时间: 2.886(毫秒)
    SQL> conn SYSDBA/SYSDBA
    

    此时使用上下键已经可以填充历史命令了

  4. 还可以配置环境变量,更加方便使用

    [dmdba@localhost ~]$ vim .bash_profile 
    [dmdba@localhost ~]$ source .bash_profile 
    

    在这里插入图片描述

    下次运行./disql就会自动使用rlwrap了

3.6sql脚本

​ DM数据库执行sql脚本命令start,oracle数据库执行sql脚本名用@

SQL> start /tmp/test.sql
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐