【记录贴】国产数据库学习之路-达梦数据库DM8

前言

  因公司业务上需求需要接触达梦数据库,同时也不断开阔视野扩展知识层面,记录下学习过程,以便日后复盘加深印象。


简介

  武汉达梦数据库有限公司成立于2000年,为国有控股的基础软件企业,专业从事数据库管理系统研发、销售和服务。其前身是华中科技大学数据库与多媒体研究所,是国内最早从事数据库管理系统研发的科研机构。达梦数据库为中国数据库标准委员会组长单位,得到了国家各级政府的强力支持。
【记录贴】国产数据库学习之路-达梦数据库DM8_第1张图片

环境需求

  达梦数据库:DM8
  虚拟机环境:RedHat7-64位(CentOS7或中标麒麟同样适用)

开始前准备

软件信息

1.操作系统

[root@localhost ~]#	 uname -ra 
Linux localhost.localdomain 3.10.0-693.el7.x86_64 
#1 SMP Thu Jul 6 19:56:57 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux

根据不同的操作系统选择相对应的CPU和安装包

2.环境依赖包

[root@localhost ~]# rpm -aq | grep glibc
glibc-common-2.17-307.el7.1.x86_64
glibc-2.17-307.el7.1.x86_64
glibc-devel-2.17-307.el7.1.x86_64
glibc-headers-2.17-307.el7.1.x86_64
compat-glibc-headers-2.12-4.el7.x86_64
compat-glibc-2.12-4.el7.x86_64

如果系统没有,则可运行下列语句进行安装依赖包

[root@localhost ~]# yum install glibc -y

硬件信息

1.查看CPU

[root@localhost ~]# cat /proc/cpuinfo

注意进行区分芯片,达梦数据库根据芯片版本有着与之对应安装包,不匹配则安装不成功。
国产芯片:华为、龙芯、兆芯、安腾、飞腾(自行了解相关知识,开阔视野)

2.内存信息

[root@localhost ~]# free -m

安装数据库建议最小内存为1G
Linux服务器Swap分区为物理内存1.5倍以上

3.磁盘信息

[root@localhost ~]# fdisk -l
[root@localhost ~]# df -h

4.其他信息

安装达梦程序,如需要记录大量数据库SQL日志,需要扩大分区/tmp,临时目录至少600m

网络要求
100m以上TCP/IP协议的网卡
注意:远程访问数据库的要求,需要进行设置防火墙和selinux策略

系统要求
Linux(glibc2.3以上,内核2.6,预安装KDE/GNOME桌面环境,建议预先安装UnixODBC组件 gcc包)

[root@localhost ~]# rpm -aq | grep ODBC

环境配置

下面开始进入正题,直接进入实操,手撸方能熟能生巧

  • 规划安装路径与用户(不建议使用root账号)
     安装路径[root@localhost /]# mkdir /dm8
     规划用户
      新建用户组[root@localhost /]# groupadd dinstall
      新建用户 [root@localhost /]# useradd -g dinstall dmdba
      查看用户是否创建成功[root@localhost /]# id dmdba
      为所创建用户设置密码[root@localhost /]# passwd dmdba(这里密码默认用dameng123,以防后续出错)
      为所创建用户分配所属组权限[root@localhost /]# chown -R dmdba:dinstall /dm8

  • 配置环境变量
     切换dmdba账号进行配置[root@localhost /]# su - dmdba
     进行配置环境变量[dmdba@localhost ~]$ vim ~/.bash_profile
     底部进行增加两行信息
    export DM_HOME=/dm8
    export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$DM_HOME/bin:$DM_HOME/tool【记录贴】国产数据库学习之路-达梦数据库DM8_第2张图片

   然后进行配置更新[dmdba@localhost ~]$ source ~/.bash_profile
   最后进行查看配置是否更改[dmdba@localhost ~]$ echo $DM_HOME显示/dm8 完成配置更新

  • 设置文件最大打开数目
     方式一:使用root账号进行设置,临时设置,关闭失效[root@localhost dmdba]# ulimit -n 65536
     方式二:使用root账号进行设置,重启生效[root@localhost dmdba]# vim /etc/security/limits.conf
     底部进行增加两行信息dmdba soft nofile 65536 dmdba hard nofile 65536【记录贴】国产数据库学习之路-达梦数据库DM8_第3张图片
  • 上传达梦iso镜像
     达梦iso镜像存放于/opt目录下面
  • 挂载达梦iso镜像
    [root@localhost opt]# mount -o loop /opt/dm8_setup.iso /mnt
    

创建达梦数据库

  切换dmdba账号进行安装[root@localhost dmdba]# su - dmdba
  dmdba账号进行配置图形界面
   [dmdba@localhost ~]$ export DISPLAY=192.168.48.1:0.0(window本机IP地址)
   [dmdba@localhost ~]$ xhost +
  进入iso挂载目录[dmdba@localhost ~]$ cd /mnt
  进入图形界面安装[dmdba@localhost mnt]$ ./DMInstall.bin【记录贴】国产数据库学习之路-达梦数据库DM8_第4张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第5张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第6张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第7张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第8张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第9张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第10张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第11张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第12张图片

[root@localhost ~]# /dm8/script/root/root_installer.sh
执行成功,启动DmAPService服务成功
移动 /dm8/bin/dm_svc.conf 到/etc目录
修改服务器权限
创建DmAPService服务
Created symlink from /etc/systemd/system/multi-user.target.wants/DmAPService.service to /usr/lib/systemd/system/DmAPService.service.
创建服务(DmAPService)完成
启动DmAPService服务

【记录贴】国产数据库学习之路-达梦数据库DM8_第13张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第14张图片
至此达梦数据库安装完成
【记录贴】国产数据库学习之路-达梦数据库DM8_第15张图片
管理工具查看达梦数据库服务,进入/dm8/tool 目录下执行./dmserver.sh命令

[dmdba@localhost tool]$ ./dmservice.sh 

【记录贴】国产数据库学习之路-达梦数据库DM8_第16张图片
命令行方式进行查看达梦数据库服务,进入/dm8/bin目录下执行./DmAPService status命令

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

达梦安装目录介绍:
Bin:数据库命令和lib库
Bin2:UTF-8
Doc:用户手册和操作手册
Driver:驱动
Include:C语言的头文件
Jar:Jar包(导入导出,快速加载,日志挖掘)
Log:所有的日志文件
Jdk:Java包
Tool:所有的客户端
Script:所有的脚本文件
Web:dem 类似Oracle Oem

创建数据库实例

1. 图形化界面方式安装数据库实例

/dm8/tool目录下,执行dbca.sh命令

[dmdba@localhost tool]$ dbca.sh 

【记录贴】国产数据库学习之路-达梦数据库DM8_第17张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第18张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第19张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第20张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第21张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第22张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第23张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第24张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第25张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第26张图片

[root@localhost tool]# mv /dm8/bin/DmServiceDMSERVER.service /usr/lib/systemd/system/DmServiceDMSERVER.service
[root@localhost tool]# systemctl enable DmServiceDMSERVER.service
[root@localhost tool]# systemctl start DmServiceDMSERVER.service

【记录贴】国产数据库学习之路-达梦数据库DM8_第27张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第28张图片
至此达梦数据库实例创建完成
【记录贴】国产数据库学习之路-达梦数据库DM8_第29张图片
通过disql连接刚才创建的数据库,类似Oracle SqlPlus

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

通过达梦管理工具manager进行登录

[dmdba@localhost tool]$ manager

【记录贴】国产数据库学习之路-达梦数据库DM8_第30张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第31张图片

2. 命令行方式创建数据库实例

  • 创建实例
[dmdba@localhost ~]$ dminit path=/dm8/data DB_NAME=LEESERVER INSTANCE_NAME=LEESERVER PORT_NUM=5237
initdb V8
db version: 0x7000a
file dm.key not found, use default license!
License will expire on 2021-04-28

 log file path: /dm8/data/LEESERVER/LEESERVER01.log

 log file path: /dm8/data/LEESERVER/LEESERVER02.log
 
write to dir [/dm8/data/LEESERVER].
create dm database success. 2020-06-30 15:24:46
  • 注册实例
    进行切换root账号  进入/dm8/script/root路径
[root@localhost root]# ./dm_service_installer.sh -t dmserver -dm_ini /dm8/data/LEESERVER/dm.ini -p LEESERVER
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceLEESERVER.service to /usr/lib/systemd/system/DmServiceLEESERVER.service.
创建服务(DmServiceLEESERVER)完成
  • 实例启动和查看状态
[root@localhost root]# systemctl start DmServiceLEESERVER.service
[root@localhost root]# systemctl status DmServiceLEESERVER.service

通过./dmserver.sh 查看实例状态
【记录贴】国产数据库学习之路-达梦数据库DM8_第32张图片
通过disql进行连接

[dmdba@localhost bin]$ ./disql sysdba/SYSDBA@localhost:5237

服务器[localhost:5237]:处于普通打开状态
登录使用时间: 4.708(毫秒)
disql V8
SQL> 

通过manager工具连接
【记录贴】国产数据库学习之路-达梦数据库DM8_第33张图片

数据库实例管理

1. 达梦数据库模式

1、普通模式(normal):用户可以正常访问数据库,操作没有限制
2、主库模式(primary):用户可以正常访问数据库,对数据库对象修改强制生成redo日志,再归档有效的时候,发送redo日志到备库
3、备库模式(standby):接收主库发送过来的redo日志,并重做日志,数据库对用户只读

2.达梦数据库状态

1、配置状态(mount)
2、打开状态(open)
3、挂起状态(suspend)
4、关闭状态(shutdown)

3.状态切换

Shutdown----Mount
Shutdown----Opne
Open----Mount
Mount----Open
【记录贴】国产数据库学习之路-达梦数据库DM8_第34张图片

4.达梦数据库启动过程

【记录贴】国产数据库学习之路-达梦数据库DM8_第35张图片

  • Shutdown----Mount
    分配共享内存 ,启动后台的进程或是线程,打开控制文件
  • Mount----Open
    根据控制文件,打开所有的数据文件和重做日志文件

1.管理工具启动服务

【记录贴】国产数据库学习之路-达梦数据库DM8_第36张图片
需要注意的是:图形界面启动和关闭实例只能用root账号进行启动和关闭,其他账号可以进行查看,但是无法启动与关闭

2.命令行启动:dmserver

当前session有效,关闭会话后,连接断了

[dmdba@localhost bin]$ ./dmserver /dm8/data/LEESERVER/dm.ini 
[dmdba@localhost bin]$ ./DmServiceLEESERVER start
[root@localhost ~]# systemctl start DmServiceLEESERVER

判断达梦数据库是不是启动的
 端口

[dmdba@localhost bin]$ netstat -ntl | grep 523*

 DmServer

[dmdba@localhost bin]$ ps -ef | grep dmserver

达梦是单进程多线程的数据库

DM8数据库工具的使用

1.DiSQL

[dmdba@localhost bin]$ ./disql sysdba/dameng123

【干货分享】达梦DISQL工具使用解析之- DISQL环境变量设置
【干货分享】DISQL使用解析2
【干货分享】DISQL使用解析3

2.数据库管理工具

[dmdba@localhost tool]$ manager

【记录贴】国产数据库学习之路-达梦数据库DM8_第37张图片

3.控制台工具

[dmdba@localhost tool]$ ./console

【记录贴】国产数据库学习之路-达梦数据库DM8_第38张图片

4.数据库迁移工具

[dmdba@localhost tool]$ ./dts

【记录贴】国产数据库学习之路-达梦数据库DM8_第39张图片

5.性能检测工具

[dmdba@localhost tool]$ ./monitor

【记录贴】国产数据库学习之路-达梦数据库DM8_第40张图片

6.服务查看器

[dmdba@localhost tool]$ ./dmservice.sh

【记录贴】国产数据库学习之路-达梦数据库DM8_第41张图片

达梦数据库手册的使用

[dmdba@localhost ~]$ cd /dm8/doc/

【记录贴】国产数据库学习之路-达梦数据库DM8_第42张图片

达梦8体系结构

【记录贴】国产数据库学习之路-达梦数据库DM8_第43张图片
物理结构
【记录贴】国产数据库学习之路-达梦数据库DM8_第44张图片

表空间管理

DM8常用表空间管理
System/Rool/Main/Temp/Hmain
表空间是由一个或多个数据文件构成的,表空间是数据库的一个容器,存放数据库中的数据对象(表、索引等)

达梦默认的系统表空间
System:数据字典和全局的系统数据
Roll:存入了数据库运行过程中的产生的回滚记录
Temp:临时表空间
Main:存放对象数据的表空间,创建对象的时候,如果不指定表空间,就是放在该表空间
Hmain:Huge表空间
【记录贴】国产数据库学习之路-达梦数据库DM8_第45张图片

1.查询表空间

SQL> select tablespace_name from user_tablespaces;
SQL> select tablespace_name from user_tablespaces where tablespace_name='TBS';

2.创建表空间

1.命令行方式创建

SQL> create tablespace "TBS" datafile '/dm8/data/DAMENG/TBS01.DBF' size 32 autoextend on next 1 maxsize 1024, '/dm8/data/DAMENG/TBS02.DBF' size 32 autoextend on next 1 maxsize 1024 CACHE = NORMAL;

2.图文方式创建

【记录贴】国产数据库学习之路-达梦数据库DM8_第46张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第47张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第48张图片

3.表空间状态

1.脱机状态

SQL> alter tablespace TBS offline;

【记录贴】国产数据库学习之路-达梦数据库DM8_第49张图片

2.联机状态

SQL> alter tablespace TBS online;

【记录贴】国产数据库学习之路-达梦数据库DM8_第50张图片

4.维护表空间

1.表空间不足

  • 创建大表空间、数据导出、数据导入
  • Reszie数据文件大小
  • 增加数据文件

查看表空间的状态

SQL> desc dba_data_files;  
SQL> select FILE_NAME,STATUS,TABLESPACE_NAME from dba_data_files;

增加表空间数据文件

SQL> alter tablespace TBS add datafile '/dm8/data/DAMENG/TBS02.DBF' size 32;

2.更换存储位置

注意:System、Roll、Temp表空间不能offline
第一步:先将表空间进行offline离线

SQL> alter tablespace TBS offline;

第二步:进行查看表空间状态

SQL> select tablespace_name,status from dba_tablespaces;

第三步:进行修改存储位置

SQL> alter tablespace TBS rename datafile '/dm8/data/DAMENG/TBS02.DBF' to '/dm8/TBS02.DBF';
SQL> alter tablespace TBS rename datafile '/dm8/data/DAMENG/TBS01.DBF' to '/dm8/TBS01.DBF';

第四步:将表空间进行online联机

SQL> alter tablespace TBS online;

5.临时表空间

注意:无法删除临时表空间,从而创建新的临时表空间
临时表空间是系统自动创建的

SQL> select para_name,para_value from v$dm_ini where para_name like 'TEMP%';

6.Roll表空间

参数undo_retention
Roll表空间不足

Alter tablespace rool resize datafile ‘/dm8/data/DAMENG/ROLL.DBF’ to 1024;

7.删除表空间

SQL> drop tablespace XXX;        

8.练习

  创建一个表空间,初始大小 50M,表空间由 2 个数据文件组成,分别存储在不同的位置,数据文件自动扩展,每次扩展 1M,每个数据文件最大 100M。

用户管理

预定义用户
  Sys、Sysdba、Sysauditor、Syssso、Sysdbo
自定义用户
  DMHR
规划用户
  以字符开始,长度为1~128个字符,规划用户的权限,规划用户存储位置,规划用户密码安全和资源管理

1.相关的概念

在达梦数据库中用户管理主要涉及到三块:用户、权限、角色
权限:执行特定类型sql或是访问其他模式对象的权利
系统权限:数据库对象的创建、删除、修改等等
对象权限:对数据对象的数据的操作权限

数据库预定义用户
  Sys、Sysdba、Sysauditor、Syssso、Sysdbo
  Sys:不能用于用户登录,是系统内置用户

三权分立(企业版)
  Sysdba:数据库系统管理员
  Sysso:数据安全员
  Sysauditor:数据库审计员

四权分立(安全版)
  Sysdba
  Sysso
  Sysauditor
  Sysdbo:数据库对象操作员

数据库预定义角色
  DBA、PUBLIC、RESOURCE、VTI

2.如何规划用户

名字:字母开头,a-z,0-9,$#_
位置:对应的表空间
密码:口令策略
  0:无策略
  1:禁止与用户名相同
  2:口令长度不小于9
  4:至少包含一个大写字母
  8:至少包含一个数字
  16:至少包含一个标点符号(英文状态下输入,除空格和“ ”)
  口令可以单独使用、也可以组合使用。(比如:要求口令策略禁止用户名相同,并且口令长度不小于9,则设置口令策略为1+2=3)

Faild_Login_Attemps:密码尝试登陆次数
Password_Lock_Time:密码失败后锁定时间
Password_Life_Time:密码过期时间

  练习:建立用户test,用户可以创建自己的表,有属于自己的表空间,用户密码要求每60天变更一次
  第一步:创建表空间
在这里插入图片描述
create tablespace “TEST” datafile ‘/dm8/TEST01.DBF’ size 32 autoextend on next 1 maxsize 1024 CACHE = NORMAL;
  第二步:创建用户
【记录贴】国产数据库学习之路-达梦数据库DM8_第51张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第52张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第53张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第54张图片
单独赋予建表权限->Grant Create Table to TEST;
查看用户权限:

SQL> select * from all_users;
SQL> select GRANTEE, granted_role from SYS.DBA_ROLE_PRIVS where grantee='TEST';
SQL> select GRANTEE,PRIVILEGE from SYS.DBA_SYS_PRIVS where grantee='PUBLIC';
SQL> select GRANTEE,PRIVILEGE from SYS.DBA_SYS_PRIVS where grantee='VTI';  
SQL> select GRANTEE,PRIVILEGE from SYS.DBA_SYS_PRIVS where grantee='RESOURCE';

  练习:规划一个用户 test2,用户每 60 天变更一次密码,密码尝试连接2次失败,账号锁定5分钟,用户能查询dmhr.employee表
查询用户状态:

SQL> select username ,account_status, lock_date from dba_users	;

用户解锁:

SQL> alter user test2 account unlock;

用户锁定:

SQL> alter user test2 account lock;

赋予用户权限:

SQL> grant select on dmhr.employee to test2;

收回用户权限:

SQL> revoke select on dmhr.employee from test2;

赋予用户部分权限:

SQL> grant select(employee_name,hire_date)on dmhr.employee to test2;

  练习:企业招聘一批录入人员,权限固定,只能录入 city 表的权限。角色:一组固定权限的集合
创建角色:

SQL> create role r1;

赋予角色权限:

SQL> grant insert on dmhr.city to r1;
SQL> grant references any table to r1;

R1角色 test2 用户:

SQL> grant r1 to test2;
SQL> insert into dmhr.city values ('sdf','ddsfsf',7);
SQL> commit;

注意:一定要记得commit 提交!!!DM8不会自动提交,除非管理工具设置了自动提交

删除用户:

SQL> Drop user test2 caseade ;	

集联删除,慎重操作,最好先进行备份

SQL> Drop user test2;

删除角色:

SQL>Drop role r1;

模式对象管理

  模式是一个特定的对象集合,在概念上可将其看作是包含表、视图、索引等若干对象的对象集
  模式对象:表、视图、约束、索引、序列、触发器、存储过程/函数、包、同义词、类、域
  DM创建用户的时候,会默认去创建一个同名的模式,如果你创建的用户,模式名已存在,用户无法创建,一个用户可以拥有多个模式

表的管理

达梦支持哪些表

  默认的表示索引组织表,支持堆表,临时表,分区表,外部表等

如何去规划表

  遵循三大范式
1、命名:字母开头、a-z,0-9,$#_
2、数据类型:int char varchar date clob blob number等等
3、存储位置:自己规划的表空间,如果没有指定的表空间,则会存在main表中间中。
4、约束(5大约束)非空约束、唯一约束、主键、外键、检查约束
5、注释:comment
  练习:规划一张学员信息表
表名:STU
学号:id char(10)
姓名:sname varchar(20) not null
性别:sex char(1)
年龄:age int
电话:tel varchar(15) not null
家庭住址:address varchar(50)

表空间:STU
约束 主键列–学号 非空–姓名和电话
备注:student info
【记录贴】国产数据库学习之路-达梦数据库DM8_第55张图片
增加列

SQL> alter table HWA.STU ADD COLUMN (FH INT);

删除列

SQL> alter table HWA.STU drop column FH;

创建表的指定约束

约束
  数据库约束是为了保证数据的完整性(正确性)而实现的一套机制
  约束分为两类:行级和表级,处理机制是一样的
  常见的约束类型:NOT NULL 、UNIQUE、PRIMARY KEY 、FOREIGN KEY、CHECK

1、非空约束 NOT NULL

SQL> create TABLE HWA.H1(ID INT );
SQL> ALTER TABLE HWA.H1 MODIFY ID INT NOT NULL;

2、唯一约束 UNIQUE

SQL>create	table	hwa.h3(id	int,name	varchar(20)	unique); 	SQL>insert into hwa.h3 values(1,'ssss'); 
SQL>insert into hwa.h3 values(2,null); 
SQL>insert into hwa.h3 values(3,null); 
SQL>insert into hwa.h3 values(4,null); 
Commit; 

唯一约束遇到 null,忽略,可录入多个 null 值

3、主键约束(一张表只能有一个主键约束)

SQL> create table hwa.h4(id int primary key,name varchar(20));
SQL> create table hwa.h5(id int);
SQL> alter table hwa.h5 add constraint t5_pri primary key(id);

4、检查约束

SQL> create table hwa.h6(id int check(id>=5));

5、外键约束

SQL> create table hwa.h8(sid int primary key ,pid int);
SQL> create table hwa.h9(id int primary key ,sid int foreign key references hwa.h8(sid));

6、对列加备注

SQL> comment on column hwa.h8.sid is '编号';

查看约束

SQL> desc dba_col_comments;
SQL> desc dba_constraints;
SQL> select CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME,STATUS from dba_constraints where TABLE_NAME='H8';
SQL> select * from dba_col_comments where table_name='H8';

导入数据到表中
1、Insert into 表名values ();
2、通过脚本把数据导入到表中
【记录贴】国产数据库学习之路-达梦数据库DM8_第56张图片

SQL> start /home/dmdba/a.sql

Oracle 为 @
DM8为 start

如何维护表?
1、重命名

SQL> alter table hwa.h1 rename to hw1;

2、启用和禁用约束

SQL> alter table hwa.h3 disable constraint CONS134218846;		禁用约束
SQL> alter table hwa.h3 enable constraint CONS134218846;		启用约束

3、进行查看约束名称、状态等

SQL> select CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME,STATUS from dba_constraints where TABLE_NAME='H3'; 

4、删除表

SQL> drop table hwa.hw1;

视图

  视图概念
  从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据、从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表

  视图分类:简单视图、复杂视图、物化视图
  1、简单视图
创建语法:create view() as select() from() where()
修改语法:create or replace view() as select() from()where()

SQL> create view hwa.v1 as select * from dmhr.employee;
SQL> create or replace view hwa.v1 as select employee_name from dmhr.employee limit 5;

  2、删除视图

SQL> drop view hwa.v1;           

  3、查询视图
DBA_VIEWS;

索引

  索引的作用:加快表的查询,增加数据库的查询性能,对数据库做DML操作的时候,数据库会自动维护索引,索引占空间,视图不占用空间(物化视图不占用)
  达梦支持的索引:二级索引,位图索引,唯一索引,复合索引,函数,分区索引,分区索引等

建立索引的规则

适合建索引的情况:
  1、经常查询的列
  2、连接条件列
  3、谓词经常出现的列(where )
  4、查询是返回表的一小部分数据
  根据业务逻辑进行创建

不适合建索引的情况
  1、列上有大量的NULL
  2、列上的数据是有限的(比如说性别)

查看表的索引

SQL> select table_name,index_name from dba_indexes where table_name ='STU';

创建索引
  规划索引表空间,表的数据无序的,索引的数据有序的
  创建索引表空间

SQL> create tablespace index1 datafile '/dm8/data/DAMEMG/index1_01.dbf' size 32;

  建索引

SQL> create table hwa.emp as select * from dmhr.employee;
SQL> create table hwa.dept as select * from dmhr.department;
SQL> create index ind_emp on hwa.emp(employee_id) tablespace index1;

查看表的执行计划
  没有走我们自己建立的索引,统计信息是旧的,需要重新收集统计信息;
  收集统计信息

SQL> begin
2   dbms_stats.gather_table_stats('HWA','EMP');
3   END;
4   /

  DMSQL 过程已成功完成
【记录贴】国产数据库学习之路-达梦数据库DM8_第57张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第58张图片
相关字典
  DBA_INDEXES
  注意:创建索引,删除索引,重建索引和收集统计信息,不要再业务高峰去做。在业务低估的时候去操作
维护索引:

SQL> alter index hwa.ind_emp rebuild;

重建索引:

SQL> alter index hwa.ind_emp rebuild online;		-慎重使用

删除索引

SQL> drop index hwa.ind_emp;

  注意:达梦默认不会自动收集统计信息,需要手动收集,可以利用作业来定时的自动收集

DMSQL

DMSQL 基于SQL92,部分SQL99的
SQL的语句分类
  DQL:数据查询语句 select from where 组成的查询块
  DDL:数据定义语句 create table create vie create index等等
  DML:数据操作语句 insert update delete
  DCL:数据控制语句 用于授予或回收访问数据库的某种特权,控制数据操作纵事务,对数据库进行监视等
  Grant revoke commit rollback lock unlock 等等。

简单查询

  语法:select ()from () where()

过滤查询

  Where《查询条件》
  Where 子句常用的查询条件

谓词种类 谓词
比较 > < <= >= != not
确定范围 Between and >= and <=
集合 In not in
字符匹配 Like not like
空值 Is null is not null
多重条件 And or

  Like % _

SQL> select employee_name,salary from hwa.emp where employee_name like '%马%';
SQL> select employee_name,salary from hwa.emp where employee_name like '马_';

  查找工资在20000到30000之间的员工

SQL> select employee_name,salart from hwa.emp where salary between 20000 and 30000;

等同于

SQL> select employee_name,salary from hew.emp where salary >=20000 and salary <=30000;

单行函数

  大小写处理函数

函数 结果
LOWER(‘SQL Course’)
UPPER(‘SQL Course’)
INITCAP(‘SQL Course’)
SQL Course
SQL Course
SQL Course

  字符处理函数

函数 结果
CONCAT(‘Hello’,’World’)
SUBSTR(‘HelloWorld’,1,5
LENGTH(‘HelloWorld’)
INSTR(‘HelloWorld’,’W’)
LPAD(salary,10,’’)
RPAD(salary,10,’
’)
TRIM(‘H’ FROM ‘HelloWorld’)
HelloWorld
Hello
10
6
24000
24000

elloWorld

  数值处理函数
ROUND:将值舍入到指定的小数位(四舍五入)
  Round(49.36,1)->49.4
TRUNC:将值截断到指定的小数位(不舍入)
  Trunc(49.36,1)->49.3
MOD:返回除法运算的余数
  Mod(100,3) ->1

日期函数
  Months_between 两个日期之间的月数
  Add_Months 将日历月份添加到日期中
  Next_Day 指定日期的下一天
  Last_DAY 月份的最后的一天

显示转换
To_Char

SQL> select employee_name,to_char(salary,'L999,999.00') from dmhr.employee limit 3;

To_Number(char[,fmt])
To_Date(Char[,fmt])

SQL> select employee_name,hire_date,to_date(hire_date,'yyyy-mm-dd')from dmhr.employee limit 2;

分组函数
  分组函数作用于一组数据,并对一组数据返回一个值
常见的分组函数
  Avg、count、max、min、sum…

案例一:求各个部门的最高工资

SQL> select department_id ,max(salary) from hwa.emp group by department_id;

案例二:找出部门平均工资大于10000的所有部门

SQL> select department_id,avg(salary) av1 from hwa.emp group by department_id having avg(salary)>10000order by av1 desc;

  注意:having表示分组后的数据进行过滤,having不能单独使用,一定是和grouo by 一起使用的,分组函数不能出现在where子句中
  排序order by
  升序:asc 降序:desc 默认是升序
案例三:从邮件地址中取出邮箱名字

SQL> select substr(email,1,(instr(email,'@')-1)),employee_name from hwa.emp limit 5;

多表联接查询

  语法:select () from join () on ()
1、内连接:结果集显示全部满足条件的记录、

SQL> select employee_name,department_name from hwa.emp e join hwa.dept d on e.department_id=d.department_id limit 8;

2、外连接
  左外连接:把left join 左边的全部显示出来,右边的只显示满足条件的,不满足条件的用null代替

SQL> select employee_name,department_name from hwa.emp e left join hwa.dept d on e.department_id=d.department_id limit 8;

  右外连接:把 right join 右边的全部显示出来,左边的只显示满足条件的,不满足条件的用NUll代替

SQL> select employee_name,department_name from hwa.emp e right join hwa.dept d on e.department_id=d.department_id limit 8;

  全外连接=左外连接+右外连接

SQL> select employee_name,department_name from hwa.emp e full join hwa.dept d on e.department_id=d.department_id limit 8;

备份还原

  数据库备份就是制作数据库的“副本”
  防止数据库丢失数据
  在数据丢失后重建数据库
  完全备份是指在一个备份包含指定数据库或表空间的所有数据
  增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件
  备份的方式:物理备份和逻辑备份
  备份的介质:磁盘、磁带、光盘
  集群:数据守护,dsc(rac)
  也支持第三方的备份软件:爱数、鼎甲

物理备份

  物理备份分为热备和冷备

热备管理方式

一、打开归档
 1)命令行方式

SQL> alter database mount;
SQL> alter database add archivelog 'type=local,dest=/dm8/arch,file_size=64,space_limit=0';
SQL> alter database archivelog;
SQL> alter database open;
SQL> select name,status$,arch_mode from v$database;

【记录贴】国产数据库学习之路-达梦数据库DM8_第59张图片
 2)利用管理工具
【记录贴】国产数据库学习之路-达梦数据库DM8_第60张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第61张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第62张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第63张图片
进行查看归档状态
【记录贴】国产数据库学习之路-达梦数据库DM8_第64张图片
二、热备备份
 1)命令行方式

SQL> backup database full to "DB_DAMENG_FULL_2020_06_28_10_28_10" backupset 'DB_MAMENG_FULL_2020_06_28_10_28_10';

 backup database full to “备份名” backupset ‘备份集目录’
 2)利用管理工具
【记录贴】国产数据库学习之路-达梦数据库DM8_第65张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第66张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第67张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第68张图片
 3)命令行方式进行全备、增量备份
 全备

SQL> backup database full backupset '/dm8/backup/fullbak2';

 增量备

SQL> backup database increment backupset '/dm8/backup/incr_bak';

 4)表空间进行还原
  表空间只能脱机还原、使用DMRMAN–>-->/dm8/bin/./dmrman
【记录贴】国产数据库学习之路-达梦数据库DM8_第69张图片
  模拟表空间test损坏

[dmdba@localhost DAMENG]$ mv TEST01.DBF TEST01.DBF.BAK

在这里插入图片描述
重启实力服务,实例处于mount状态。关闭实例服务

SQL> alter database mount;
[root@localhost ~]# systemctl stop DmServiceDMSERVER

使用dmrman进行还原
1、校验备份集

RMAN> check backupset '/dm8/backup/fullbak2';

【记录贴】国产数据库学习之路-达梦数据库DM8_第70张图片
2、还原表空间

RMAN> restore database '/dm8/data/DAMENG/dm.ini' tablespace test from backupset '/dm8/backup/fullbak2';

【记录贴】国产数据库学习之路-达梦数据库DM8_第71张图片
3、恢复表空间

RMAN> recover database '/dm8/data/DAMENG/dm.ini' tablespace test;

【记录贴】国产数据库学习之路-达梦数据库DM8_第72张图片
4、重启实例服务

[root@localhost ~]# systemctl start DmServiceDMSERVER
SQL> alter database open;

冷备管理方式

  冷备份:dmap服务是打开的,数据库实例是关闭的
【记录贴】国产数据库学习之路-达梦数据库DM8_第73张图片

[dmdba@localhost tool]$ ./console

  应使用dmdba账号去开启console图形界面,而不是root账号,会导致还原的时候出现服务无法启动,造成还原时部分文件权限发生改变,所以应使用dmdba启动./console
【记录贴】国产数据库学习之路-达梦数据库DM8_第74张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第75张图片
  脱机还原时,先还原再恢复进行更新
【记录贴】国产数据库学习之路-达梦数据库DM8_第76张图片
【记录贴】国产数据库学习之路-达梦数据库DM8_第77张图片
完成备份后需要重启实例、Root账号

systemctl start DmServiceDMSERVER

冷备dmrman工具去备份
【记录贴】国产数据库学习之路-达梦数据库DM8_第78张图片
需要进行停止服务

systemctl stop DmServiceDMSERVER

【记录贴】国产数据库学习之路-达梦数据库DM8_第79张图片
冷备:需要进行停止数据库,如果不停止会造成数据丢失

逻辑备份

  导入导出(dexp,dimp)
  分四级别:分别独立、互斥不能同时存在
  数据库级别
  用户
  模式
  表级
1、逻辑导出

 [dmdba@localhost bin]$ ./dexp sysdba/dameng123@localhost:5236 file=dexp01.dmplog=dexp01.logdirectory=/dm8/backup/dexpfull=y 

2、逻辑导入

 [dmdba@localhost bin]$ ./dimp sysdba/SYSDBA@localhost:5239 file=/dm8/backup/dexp/dexp01.dmp log=/dm8/backup/dexp/dimp01.log

DM8开发

达梦支持的语言:cc++ javapythonphpperl.net
Linux环境下配置ODBC(以ROOT配置)
检查GCC包:

[root@localhost~]#rpm-aq|grepgcc

解压安装包:

[root@localhostopt]#tar-xzvfunixODBC-2.3.0.tar.gz 

配置odbc:

[root@localhostunixODBC-2.3.0]#./configure--enable-gui=no 

编译安装ODBC:

[root@localhostunixODBC-2.3.0]#make&&makeinstall 

查看ODBC的版本:

[root@localhostunixODBC-2.3.0]#odbc_config--version 

在这里插入图片描述
查看ODBC配置文件的路径

[root@localhostunixODBC-2.3.0]#odbcinst-j 

【记录贴】国产数据库学习之路-达梦数据库DM8_第80张图片
配置odbc.ini和odbcinst.ini

[root@localhost dmdba]# vim /usr/local/etc/odbc.ini 
[dm8]
Description=DM ODBC DSND
Driver=DM8 ODBC DRIVER
SERVER=localhost
UID=SYSDBA
PWD=dameng123
TCP_PORT=5236

【记录贴】国产数据库学习之路-达梦数据库DM8_第81张图片

[DM8 ODBC DRIVER]
Description=ODBC DRIVER FOR DM8
DRIVER=/dm8/bin/libdodbc.so

在这里插入图片描述
切换su - dmdba
isql dm8
【记录贴】国产数据库学习之路-达梦数据库DM8_第82张图片

以上资料均来自达梦培训讲义
感谢达梦大学-李春红导师


人无完人,赶项目验收未参加后期培训,些许资料可能有误,欢迎指正

你可能感兴趣的:(达梦数据库)