达梦数据库——DM8安装操作及体系架构介绍

文章目录

  • 一、数据库行业的发展趋势
  • 二、国产数据库的现状
    • 1、自主研发
  • 三、达梦公司的介绍和达梦产品
    • 1、达梦公司的由来
    • 2、达梦公司的产品线
  • 四、DM8的安装及实例的管理
    • 1、软件信息收集
    • 2、硬件信息收集
    • 3、规划安装路径
    • 4、用户的规划
    • 5、配置环境变量
    • 6、设置文件最大打开数目
    • 7、选择相应的安装包
    • 8、安装数据库软件
    • 9、创建数据库
    • 10、连接数据库的两种方式
    • 11、达梦数据库模式及状态
  • 五、DM8工具及手册的使用
    • 1、数据库管理工具
    • 2、控制台工具
    • 3、性能监测工具
    • 4、达梦数据库手册的使用
  • 六、DM8体系架构
    • 1、物理存储结构
    • 2、逻辑存储结构
    • 3、内存结构
    • 4、DM线程管理
  • 七、DM8数据库结构介绍
    • 1、表空间管理
    • 2、用户管理
    • 3、模式对象管理
    • 4、DMSQL
    • 5、备份还原
    • 6、作业
    • 7、DM8开发

一、数据库行业的发展趋势

目前,对于数据库行业来说主要的数据库分类有自研系列、开源系列、引进混元系列、非关系型系列这几种,大概的可以看以下图中几种。
达梦数据库——DM8安装操作及体系架构介绍_第1张图片

二、国产数据库的现状

其实从上个世纪80年代开始,国产数据库就已经开始慢慢的被人挖掘开发,国内的话也有不少的企业对于这方面在不断的投入、进步。以下是我分享的几个国产数据库,以及对国产数据库的看法。

1、自主研发

达梦:华中科技大学冯裕才老师(教授)创办,完全自主研发,有自己的一套产品体系。主要是以oracle为参数进行追赶的对象。
人大金仓:人民大学王珊教授创办,自主研发。关系型数据库。
神舟通用:神舟与南大能用合作开发的关系型数据库。更多用于数据分析领域。
南大通用:2010年自主研发,基于gbase的列存储,面向数据分析、数据仓库的数据库系统。

这些是我目前了解到的国内做数据库的厂商,如有其余的厂商欢迎评论区补充。

三、达梦公司的介绍和达梦产品

1、达梦公司的由来

达梦公司是在1980年的时候成立的课题组,因为当时日本人在我们中国把3卡车的数据库资料全部都销毁了,所以冯裕才教授立志一定打造国内自己的数据库,之后课题组就成立了,80年-92年之间,也是冯裕才老师以及他的学习经过坚持不懈努力的过程,不过天无绝人之路,到92年经过长达12年的研究,第一款产品DM1出来了,也成立了自己的研究所。

2、达梦公司的产品线

1980——课题组成立
1992——研究所成立
1993——DM1
1996——DM2
2000——成立武汉达梦数据库公司、DM3问世
2001——成立上海达梦数据库公司
2002——成立北京、成都、广州达梦数据库公司
2003——DM4
2005——DM5
2009——DM6
2012——DM7
2019——DM8

四、DM8的安装及实例的管理

1、软件信息收集

(1)操作系统

[root@hdfeng03 ~]# uname -ra
Linux hdfeng03 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

(2)RPM安装包

[root@hdfeng03 ~]# rpm -qa | grep glibc
glibc-common-2.17-292.el7.x86_64
glibc-headers-2.17-292.el7.x86_64
glibc-2.17-292.el7.x86_64
glibc-devel-2.17-292.el7.x86_64

2、硬件信息收集

[root@hdfeng03 ~]# cat /proc/cpuinfo
1、查看是哪个公司的芯片,需要使用相应的DM软件安装包进行安装,不然会不兼容
[root@hdfeng03 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           7802        1877         138           7        5787        5647
Swap:          4095          19        4076
2、安装数据库的话建议最小内存1G
SWAP分区的话按物理内存的1.5倍来配置(如果内存足够大,可以适当减小swap大小)
[root@hdfeng03 ~]# fdisk -l
[root@hdfeng03 ~]# df -h
3、安装达梦程序,需要规划好硬盘大小以及sql日志的存放,安装时需要扩大/tmp分区,至少600M
网络要求,至少要百兆网卡,可以使用以下命令进行查看
[root@hdfeng03 ~]# ethtool eth0
Speed: 1000Mb/s
4、远程访问时数据库时,需要注意设置防火墙和selinux策略
5、对于系统的要求
Linux(glibc2.3以上,内核2.6,已安装KDE/GNOME桌面环境,建议先安装UnixODBC组件gcc包)

3、规划安装路径

安装路径	[root@hdfeng /]# mkdir -p /dm8

4、用户的规划

一般的话使用DM数据库都会创建一个dmdba的帐号还有一个dinstall的组

[root@hdfeng ~]# groupadd dinstall				创建所属组
[root@hdfeng ~]# useradd -g dinstall dmdba		创建所属用户
[root@hdfeng ~]# id dmdba
uid=1001(dmdba) gid=1001(dinstall) groups=1001(dinstall)
[root@hdfeng ~]# passwd dmdba					修改用户名密码
Changing password for user dmdba.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@hdfeng ~]# chown -R dmdba:dinstall /dm8	给所属目录附权

5、配置环境变量

进到变量文件到文件最后加以下两条语句即可
[root@hdfeng ~]# vim /etc/profile		
export DM_HOME=/dm8
export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$DM_HOME/bin:$DM_HOME/tool
[root@hdfeng ~]# source /etc/profile
配置完别忘了source /etc/profile哟!

6、设置文件最大打开数目

方法一:
[root@hdfeng ~]# ulimit -n 65535
计算机临时使用,重启以后失效,一般用这种也可。
方法二:
[root@hdfeng ~]# vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
dmdba soft nofile 65535
dmdba hard nofile 65535
添加dmdba用户或者添加全部

7、选择相应的安装包

达梦数据库的版本:

开发版:不能商用
标准版:一般小型应用
安全版:在企业版的基础上做了安全特性,增加了强访问控制,四权分立,一般会用到涉密机或者安全部较高的机器。
企业版:生产环境中应用最多的一个版本,三权分立

我们可以进行相应的版本进行选择!这里的话因为是做测试用就选择了开发版!

8、安装数据库软件

此次我们选择图形化的安装,准备好相应的dm8安装包进行安装,在我们DM官网可以下载到相应的开发版安装包,附上网址:达梦官方安装包下载

1、进行安装包的挂载
[root@hdfeng opt]# mount -o loop /opt/dm8_setup.iso  /mnt/
mount: /dev/loop0 is write-protected, mounting read-only
[root@hdfeng opt]# cd /mnt/
[root@hdfeng mnt]# ll
total 633569
-r-xr-xr-x 1 root root 645819977 Apr 29 16:51 DMInstall.bin
-r-xr-xr-x 1 root root   2951496 Apr 29 16:04 DM_Install.pdf
-r-xr-xr-x 1 root root       848 Apr 29 16:07 release_en.txt
-r-xr-xr-x 1 root root       953 Apr 29 16:07 release_zh.txt
然后进行安装,进行图形化界面的附权
[root@hdfeng ~]# export DISPLAY=:0.0
[root@hdfeng ~]# xhost +
access control disabled, clients can connect from any host
[root@hdfeng ~]# su - dmdba 
Last login: Sun Jul 12 17:01:15 CST 2020 on pts/1
-sh-4.2$ bash 
[dmdba@hdfeng ~]$ export DISPLAY=:0.0
[dmdba@hdfeng ~]$ xhost +
access control disabled, clients can connect from any host
然后使用bin包开始安装数据库
[dmdba@hdfeng mnt]$ ./DMInstall.bin 
The Temp Directory's size is too small, please set the size more than 800M. Or set DM_INSTALL_TMPDIR environment variable to assign the temporary directory of DM Installer.
如果遇到以上报错,则进行/tmp目录的扩容
[root@hdfeng mnt]# sudo mount -t tmpfs -o size=1G none /tmp
[root@hdfeng mnt]# df -Th /tmp
Filesystem     Type   Size  Used Avail Use% Mounted on
none           tmpfs  1.0G     0  1.0G   0% /tmp
/tmp目录如果小于800M,会导致数据库无法进行安装,一般给1G即可

图形化安装步骤:
(1)进行图形化的安装
达梦数据库——DM8安装操作及体系架构介绍_第2张图片
达梦数据库——DM8安装操作及体系架构介绍_第3张图片
(2)在这一步如果是开发版,没有key的话就直接下一步即可
达梦数据库——DM8安装操作及体系架构介绍_第4张图片
达梦数据库——DM8安装操作及体系架构介绍_第5张图片
(3)选择刚才创建的目录
达梦数据库——DM8安装操作及体系架构介绍_第6张图片
达梦数据库——DM8安装操作及体系架构介绍_第7张图片
达梦数据库——DM8安装操作及体系架构介绍_第8张图片
(4)至此数据库安装完成
(5)软件的卸载

[dmdba@hdfeng dm8]# cd /dm8/
[dmdba@hdfeng dm8]# ./uninstall.sh
到dm8目录下执行uninstall.sh脚本即可卸载。

达梦数据库——DM8安装操作及体系架构介绍_第9张图片
命令行安装数据库:

[dmdba@hdfeng mnt]# ./DMInstall.bin -i 
请选择安装语言(C/c:中文 E/e:英文) [C/c]:c
解压安装程序......... 
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 63342
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65535
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) 63342
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
可打开文件数过少,建议至少设置为65536或更多。
欢迎使用达梦数据库安装程序
是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]:n
是否设置时区? (Y/y:是 N/n:否) [Y/y]:y
设置时区:
[ 1]: GTM-12=日界线西
[ 2]: GTM-11=萨摩亚群岛
[ 3]: GTM-10=夏威夷
[ 4]: GTM-09=阿拉斯加
[ 5]: GTM-08=太平洋时间(美国和加拿大)
[ 6]: GTM-07=亚利桑那
[ 7]: GTM-06=中部时间(美国和加拿大)
[ 8]: GTM-05=东部部时间(美国和加拿大)
[ 9]: GTM-04=大西洋时间(美国和加拿大)
[10]: GTM-03=巴西利亚
[11]: GTM-02=中大西洋
[12]: GTM-01=亚速尔群岛
[13]: GTM=格林威治标准时间
[14]: GTM+01=萨拉热窝
[15]: GTM+02=开罗
[16]: GTM+03=莫斯科
[17]: GTM+04=阿布扎比
[18]: GTM+05=伊斯兰堡
[19]: GTM+06=达卡
[20]: GTM+07=曼谷,河内
[21]: GTM+08=中国标准时间
[22]: GTM+09=汉城
[23]: GTM+10=关岛
[24]: GTM+11=所罗门群岛
[25]: GTM+12=斐济
[26]: GTM+13=努库阿勒法
[27]: GTM+14=基里巴斯
请选择设置时区 [21]:21
安装类型:
1 典型安装
2 服务器
3 客户端
4 自定义
请选择安装类型的数字序号 [1 典型安装]:1
所需空间: 1056M

请选择安装目录 [/opt/dmdbms]:/dm8
可用空间: 55G
是否确认安装路径(/dm8)? (Y/y:是 N/n:否)  [Y/y]:y

安装前小结
安装位置: /dm8
所需空间: 1056M
可用空间: 55G
版本信息: 
有效日期: 
安装类型: 典型安装
是否确认安装? (Y/y:是 N/n:否):y
2020-07-12 20:04:39 
[INFO] 安装达梦数据库...
2020-07-12 20:04:40 
[INFO] 安装 基础 模块...
2020-07-12 20:04:42 
[INFO] 安装 服务器 模块...
2020-07-12 20:04:42 
[INFO] 安装 客户端 模块...
2020-07-12 20:04:42 
[INFO] 安装 驱动 模块...
2020-07-12 20:04:42 
[INFO] 安装 手册 模块...
2020-07-12 20:04:42 
[INFO] 安装 服务 模块...
2020-07-12 20:04:44 
[INFO] 移动ant日志文件。
2020-07-12 20:04:44 
[INFO] 更改安装目录权限完成。
2020-07-12 20:04:44 
[INFO] 正在启动DmAPService服务...
2020-07-12 20:04:45 
[INFO] 启动DmAPService服务成功。
2020-07-12 20:04:45 
[INFO] 安装达梦数据库完成。
安装结束

9、创建数据库

一、使用图形化的方式创建数据库
(1)图形化界面安装数据库使用/dm8/tool/dbca.sh脚本
达梦数据库——DM8安装操作及体系架构介绍_第10张图片
达梦数据库——DM8安装操作及体系架构介绍_第11张图片
(2)选择相应的数据库目录
达梦数据库——DM8安装操作及体系架构介绍_第12张图片
(3)修改数据库名、实例名、端口号,我们这里选择默认
达梦数据库——DM8安装操作及体系架构介绍_第13张图片
(4)这一步我们能选择控制文件,数据文件,日志文件、初始化日志的存放目录
达梦数据库——DM8安装操作及体系架构介绍_第14张图片
(5)选择数据库的簇、页大小等等,可以按自己的需求进行设置
达梦数据库——DM8安装操作及体系架构介绍_第15张图片
(6)设置数据库的命令,默认用户密码都是DMDBA
达梦数据库——DM8安装操作及体系架构介绍_第16张图片
(7)示例库的创建,我们这里不做演示就不选择创建了。
达梦数据库——DM8安装操作及体系架构介绍_第17张图片
(8)数据库的概要
达梦数据库——DM8安装操作及体系架构介绍_第18张图片
(9)执行以下命令来完成对数据库实例的服务注册即可
达梦数据库——DM8安装操作及体系架构介绍_第19张图片

[root@hdfeng mnt]# mv /dm8/bin/DmServiceDMSERVER.service /usr/lib/systemd/system/DmServiceDMSERVER.service
[root@hdfeng mnt]# systemctl enable DmServiceDMSERVER.service
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceDMSERVER.service to /usr/lib/systemd/system/DmServiceDMSERVER.service.
[root@hdfeng mnt]# systemctl start DmServiceDMSERVER.service

自己使用命令行的试进行进行服务的创建:
[root@hdfeng root]# ./dm_service_installer.sh -t dmserver -dm_ini /dm8/data/DM02/dm.ini -p DM02
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceDM02.service to /usr/lib/systemd/system/DmServiceDM02.service.
创建服务(DmServiceDM02)完成

达梦数据库——DM8安装操作及体系架构介绍_第20张图片
二、使用命令行的方式创建数据库

[dmdba@hdfeng bin]$ ./dminit path=/dm8/data DB_NAME=DM02 INSTANCE_NAME=DM02 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/DM02/DM0201.log
 log file path: /dm8/data/DM02/DM0202.log

write to dir [/dm8/data/DM02].
create dm database success. 2020-07-12 20:31:00

10、连接数据库的两种方式

有两种方式进行数据库的连接:
方式一:使用/bin目录下的disql进行登录

[root@hdfeng bin]# ./disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 2.663(毫秒)
disql V8
SQL> 

方式二:使用图形化界面脚本进行登录
达梦数据库——DM8安装操作及体系架构介绍_第21张图片

11、达梦数据库模式及状态

(一)数据库模式

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

(二)数据库的状态

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

(三)状态切换
对于数据库的状态切换有以下几种:

mount——open:根据控制文件,打开所有的数据文件和重做日志文件
open——mount
shutdown——open
shutdown——mount:分配共享内存,启动后台的进程或线程,打开控制文件

状态切换的命令:

[dmdba@hdfeng bin]$ disql SYSDBA/SYSDBA
SQL> select status$ from v$instance;

行号     STATUS$
---------- -------
1          OPEN

已用时间: 0.459(毫秒). 执行号:533.
SQL> alter database mount ;
操作已执行
已用时间: 00:00:01.761. 执行号:0.
SQL> select status$ from v$instance;

行号     STATUS$
---------- -------
1          MOUNT

已用时间: 0.370(毫秒). 执行号:534.
SQL> alter database open;
操作已执行
已用时间: 00:00:01.719. 执行号:0.

服务的状态、启停方式以及判断DM数据库是否启动:

服务的启停:
[dmdba@hdfeng bin]$ ./dmserver /dm8/data/DAMENG/dm.ini 
[dmdba@hdfeng bin]$ ./DmServiceDMSERVER start
[dmdba@hdfeng bin]$ systemctl stop DmServiceDMSERVER.service 
服务的判断:
[dmdba@hdfeng bin]$ netstat -nlp | grep 523*
[dmdba@hdfeng bin]$ ps -ef | grep dmserver

五、DM8工具及手册的使用

DM8目录介绍

bin:达梦数据库命令和lib库
bin2:UTF8
doc:用户手册和操作手册
driver:达梦数据库相关驱动包
include:c语言的头文件
jar:jar包(导入导出,快速加载,日志挖掘)
log:日志文件
jdk:java包
tool:客户端
script:脚本文件
web:dem平台类似oracle oem

1、数据库管理工具

一共两种

disql:使用命令行登录数据库
[dmdba@hdfeng tool]$ ./manager
使用图形化界面登录数据库

2、控制台工具

控制台管理工具主要是用来查看、修改实例的参数

[dmdba@hdfeng tool]$ ./console

备份还原工具:
主要是用做各数据库之间的迁移,以及SQL的导入导出使用

[dmdba@hdfeng tool]$ ./dts

3、性能监测工具

主要用来监控数据库服务是否正常,监控表空间大小、类型是否正常。

[dmdba@hdfeng tool]$ ./monitor

4、达梦数据库手册的使用

[dmdba@hdfeng doc]$ ll
total 29620
-rwxr-xr-x 1 dmdba dinstall 11009446 Jul 12 20:04 DM8_SQL语言使用手册.pdf
-rwxr-xr-x 1 dmdba dinstall  2951496 Jul 12 20:04 DM8安装手册.pdf
-rwxr-xr-x 1 dmdba dinstall  6836801 Jul 12 20:04 DM8程序员手册.pdf
-rwxr-xr-x 1 dmdba dinstall  9521659 Jul 12 20:04 DM8系统管理员手册.pdf
drwxr-xr-x 2 dmdba dinstall     4096 Jul 12 20:04 special
[dmdba@hdfeng doc]$ ll special/
total 35084
-rwxr-xr-x 1 dmdba dinstall 1389891 Jul 12 20:04 DM8_dexp和dimp使用手册.pdf
-rwxr-xr-x 1 dmdba dinstall  901011 Jul 12 20:04 DM8_Disql使用手册.pdf
-rwxr-xr-x 1 dmdba dinstall  498747 Jul 12 20:04 DM8_dmdbchk使用手册.pdf
-rwxr-xr-x 1 dmdba dinstall 1335002 Jul 12 20:04 DM8_dmfldr使用手册.pdf
-rwxr-xr-x 1 dmdba dinstall 1094239 Jul 12 20:04 DM8_dminit使用手册.pdf
-rwxr-xr-x 1 dmdba dinstall 1014554 Jul 12 20:04 DM8_dmPython使用手册.pdf
-rwxr-xr-x 1 dmdba dinstall  531123 Jul 12 20:04 DM8_Linux服务脚本使用手册.pdf
-rwxr-xr-x 1 dmdba dinstall 1176413 Jul 12 20:04 DM8_PROC使用手册.pdf
-rwxr-xr-x 1 dmdba dinstall 1725377 Jul 12 20:04 DM8SQL程序设计.pdf
-rwxr-xr-x 1 dmdba dinstall 2116892 Jul 12 20:04 DM8作业系统使用手册.pdf
-rwxr-xr-x 1 dmdba dinstall 3611210 Jul 12 20:04 DM8共享存储集群.pdf
-rwxr-xr-x 1 dmdba dinstall 4241475 Jul 12 20:04 DM8备份与还原.pdf
-rwxr-xr-x 1 dmdba dinstall 1974907 Jul 12 20:04 DM8大规模并行处理MPP.pdf
-rwxr-xr-x 1 dmdba dinstall 1949878 Jul 12 20:04 DM8安全管理.pdf
-rwxr-xr-x 1 dmdba dinstall 6564729 Jul 12 20:04 DM8数据守护与读写分离集群V4.0.pdf
-rwxr-xr-x 1 dmdba dinstall 4815259 Jul 12 20:04 DM8系统包使用手册.pdf
-rwxr-xr-x 1 dmdba dinstall  952838 Jul 12 20:04 DM8集群代理使用手册.pdf

以上都是我们DM数据库对于数据库接口以及一些功能使用的手册,感兴趣的小伙伴可以通过这些手册进行学习!

六、DM8体系架构

达梦数据库——DM8安装操作及体系架构介绍_第22张图片

1、物理存储结构

(一)配置文件
在实例目录下,所有以ini结尾的文件都是DM数据库的实例配置文件

[dmdba@hdfeng DAMENG]$ ll *.ini 
-rw-r--r-- 1 dmdba dinstall   907 Jul 12 20:19 dmarch_example.ini
-rw-r--r-- 1 dmdba dinstall  2147 Jul 12 20:19 dmdcr_cfg_example.ini
-rw-r--r-- 1 dmdba dinstall   631 Jul 12 20:19 dmdcr_example.ini
-rw-r--r-- 1 dmdba dinstall 49012 Jul 12 20:19 dm.ini
-rw-r--r-- 1 dmdba dinstall  1537 Jul 12 20:19 dminit_example.ini
-rw-r--r-- 1 dmdba dinstall  2070 Jul 12 20:19 dmmal_example.ini
-rw-r--r-- 1 dmdba dinstall  1277 Jul 12 20:19 dmmonitor_example.ini
-rw-r--r-- 1 dmdba dinstall   288 Jul 12 20:19 dmmpp_example.ini
-rw-r--r-- 1 dmdba dinstall  1679 Jul 12 20:19 dmtimer_example.ini
-rw-r--r-- 1 dmdba dinstall  2146 Jul 12 20:19 dmwatcher_example.ini
-rw-r--r-- 1 dmdba dinstall   635 Jul 12 20:19 sqllog_example.ini
-rw-r--r-- 1 dmdba dinstall   479 Jul 12 20:19 sqllog.ini

(二)控制文件
以ctl为后缀的都是DM数据库实例的控制文件,里面的内容主要是一些数据库实例的路径等信息

[dmdba@hdfeng DAMENG]$ ll *.ctl 
-rw-r--r-- 1 dmdba dinstall 5120 Jul 12 20:20 dm.ctl

(三)数据文件
数据文件都是以.DBF结尾的,数据文件的起始大小最小都是以4096*页大小的。
各表空间里面的数据文件大小总数也不能超过256个。
以下是数据库实例默认的4个表空间:

[dmdba@hdfeng DAMENG]$ ll *.DBF
-rw-r--r-- 1 dmdba dinstall 134217728 Jul 12 20:19 MAIN.DBF
-rw-r--r-- 1 dmdba dinstall 134217728 Jul 12 20:55 ROLL.DBF
-rw-r--r-- 1 dmdba dinstall  44040192 Jul 12 20:55 SYSTEM.DBF
-rw-r--r-- 1 dmdba dinstall  27262976 Jul 12 20:20 TEMP.DBF

(四)重做日志文件
以实例名.log结尾的文件都是重做日志文件,以下为重做日志文件

[dmdba@hdfeng DAMENG]$ ll DAMENG*.log
-rw-r--r-- 1 dmdba dinstall 268435456 Jul 13 00:45 DAMENG01.log
-rw-r--r-- 1 dmdba dinstall 268435456 Jul 12 20:20 DAMENG02.log

(五)备份文件
在数据库实例中,以.bak为扩展名的文件都是数据备份文件.meta为元数据文件
(六)归档日志文件
归档日志文件也可以在dm.ini的同级目录下,不过需要手动创建,实例创建时不会自动生成,归档日志可以将系统恢复到故障发生的前一刻,也可以还原到指定的时间点,如果没有这个归档日志,只能用备份进行恢复
(六)跟踪日志文件
跟踪文件记录了各会话执行的sql语句,数据库错误信息,还有一些性能问题,开启跟踪日志,对系统的性能影响会有较大的影响,一般情况下跟踪日志都是关闭的。
在数据库实例目录下dm.ini配置文件中SVR_LOG参数为1时则是打开跟踪日志。
(七)事件日志文件
事件日志文件一般存放在数据库下,里面记录了数据库实例的运行时的一些关键事件,比如说数据库的启动,关闭、内存的申请情况,以及io的一些情况,在本方中,对于数据库的安装目录为/dm8,所以日志就在/dm8/log目录下。
注:一般事件日志文件命令格式为:

[dmdba@hdfeng log]$ ll
-rw-r--r-- 1 dmdba dinstall  33497 Jul 13 00:55 dm_DMSERVER_202007.log
DM_实例名_日期

2、逻辑存储结构

(一)数据库
一般指在磁盘上存储DM数据库中的数据的集合,一般包括:数据文件、日志文件、控制文件以及临时文件等。
(二)实例
实例一般由一组正在运行的DM后台进程、线程以及一个大型的共享内存组成的
数据库的组成:
页——簇——段——数据文件——表空间——数据库
页:页是最小的逻辑单元,数据库最小的分配单位,DM的页的话一般大小有以下几种4K/8K/16K/32k,默认数据库为8K(页包含的信息:数据、free space、行偏行移数组)
簇:在磁盘上连续的页组成的即簇,一个簇总是在一个数据文件中。一般由16或32个连续页组成,DM数据库中默认是16
段:是一组簇的集合,族的上组逻辑单元,一个段可以跨多个数据文件
数据文件:是由一个或多个段组成
表空间:由一个或多个数据文件组成
数据库:由一个或多个表空间组成

3、内存结构

(一)共享内存
共享内存的话其实是在实例启动的时候从操作系统那里申请了一大片的内存,实例中所有使用的都可在这个共享内存池中进行申请或者释放,可以在dm.ini配置文件中进行配置。

MEMORY_TARGET=0			表示不限制大小
MEMORY_POOL				公共池
共享内存池中包括:公共池、hash区、排序区、重做日志缓冲区、数据缓冲区、字典缓冲区、sql缓冲区

(二)数据缓冲区
数据缓冲的参数的话主要是buffer。
缓存使用的是数据块,能使用数据缓冲区增加逻辑读、提高修改、查询的性能。
在DM数据库中的话可以使用v$parameter来查看缓冲的参数类型

SQL> select name,type from v$parameter where name='BUFFER';

行号     NAME   TYPE
---------- ------ -------
1          BUFFER IN FILE

已用时间: 5.479(毫秒). 执行号:535.
可以使用以下系统过程来对buffer的大小进行修改,不过要重启数据库生效
SQL> sp_set_para_value(2,'buffer',1024);

(三)字典缓冲区、sql缓冲区、重做日志缓冲区、排序区、hash区、ssd缓冲区
字典缓冲区:主要存的是一些数据字典的信息如模式信息,表信息,列 信息,触发器信息等。实例会将部分的数据字黄信息加载到字典缓冲 区中,并采用 LRU算法进行字典信息的控制。
SQL缓冲区:主要是用来存储执行计划、包信息、结果集的缓存等,对于一些SQL类别比较多,PKG比较多、比较复杂的系统建议把该缓冲区调大
重做日志缓冲区:主要是存储入重做日志,避免日志直接对io进行读写影响数据库的性能。
排序区:提供排序所需要的内存空间,如果是该空间无法完成的会转到磁盘上,其实对于磁盘上的排序受sort_buf_size参数的影响,如果是内存放不下的会根据以下三种方式进行处理:
1、MTAB(普通临时表)
2、FTAB(临时文件表)
3、MMT(内存映射表)
HASH区:hash内存片其实在服务器上没有专门的内存给hash使用,这个缓冲区是虚拟缓冲区
hash的相应参数:

HJ_BUF_GLOBAL_SIZE		全局hash join 最大的内存空间,如果hash过多,需要设置的大一些
HJ_BUF_SIZE				单次hash join操作的最大空间,每个会话都会占用一次这个空间
HAGR_BUF_SIZE			单次hash分组最大的内存空间

SSD缓冲区:内存缓冲与普通磁盘之间的缓冲层,默认是关闭的,启动后设置ssd_buf_size为0并且指定ssd_file_path的路径即可。
(四)其它运行的内存池
主要的话有两种:

1、一种是直接从内存池申请需要的内存大小
2、直接从操作系统申请一大片内存来做成自己模块的内存池来使用例:VM_POOL/SESS_POOL/RT_HEAP等。

4、DM线程管理

(一)监听线程

在服务器端口上进行循环监听,有客户进行连接请求,该线程会生成会话申请任务,加入工作线程,等待后续的工作线程进行处理。

(二)IO线程

主要处理不在缓冲区中的数据块,将数据块读入缓冲区
缓冲区满或者关闭时,将部分脏数据读入磁盘 
检查点到来时,将脏数据读入磁盘 

(三)工作线程(两种)

普通内核线程
用户态线程

(四)调度线程

接管系统中需要调度的任务
每秒进行轮询一次

(五)日志重做线程

用于系统故障恢复,根据redo日志进行并行故障恢复

(六)日志归档线程(两种)

同步归档线程:负责本地归档、远程归档任务
异步归档线程:负责远程异步归档

(七)日志刷新线程

作用:用于将事务提交或者检查点到达时将日志缓冲区中的redo日志写到日志文件中。
如配置了归档日志,flush线程日志刷盘前,将日志通过网络直接发到实时备机

七、DM8数据库结构介绍

1、表空间管理

(1)表空间的介绍

表空间是由一个或多个数据文件组成的,表空间其实是数据库的一个容器
用来存放数据库的一些数据对象(表、索引、视图、元数据等等)

DM默认的表空间有以下几种:

SYSTEM:数据字典和全局的系统数据
ROLL:存入数据库运行过程中生产的回滚记录
TEMP:临时表空间
MAIN:存放对象数据的表空间,创建相应的对象(模式)不指定表空间则默认放到该表空间下
HMAIN:HUGE表空间

查询表空间:

SQL> select tablespace_name from user_tablespaces;

行号     TABLESPACE_NAME
---------- ---------------
1          SYSTEM
2          ROLL
3          TEMP
4          MAIN
5          HMAIN

已用时间: 3.657(毫秒). 执行号:536.

创建表空间:
一般在自己规划的时候就要进行表空间的创建,预估后面表空间大概需要使用多大,也可以使用resize对原表空间进行扩容。

普通创建:
SQL> create tablespace "test" datafile '/dm8/data/DAMENG/test01.DBF' size 128;
操作已执行
已用时间: 14.874(毫秒). 执行号:537.
自增长创建:
SQL> create tablespace "test1" datafile '/dm8/data/DAMENG/test02.DBF' size 128 autoextend on next 1 maxsize 1024,'/dm8/data/DAMENG/test03.DBF' size 128 autoextend on next 1 maxsize 1024 CACHE=NORMAL;
操作已执行
已用时间: 19.540(毫秒). 执行号:538.

表空间的状态(两种)

脱机状态
联机状态

查看创建的表空间:

SQL> select FILE_NAME,STATUS,TABLESPACE_NAME FROM dba_data_files;

行号     FILE_NAME                   STATUS    TABLESPACE_NAME
---------- --------------------------- --------- ---------------
1          /dm8/data/DAMENG/SYSTEM.DBF AVAILABLE SYSTEM
2          /dm8/data/DAMENG/test03.DBF AVAILABLE test1
3          /dm8/data/DAMENG/test02.DBF AVAILABLE test1
4          /dm8/data/DAMENG/test01.DBF AVAILABLE test
5          /dm8/data/DAMENG/MAIN.DBF   AVAILABLE MAIN
6          /dm8/data/DAMENG/TEMP.DBF   AVAILABLE TEMP
7          /dm8/data/DAMENG/ROLL.DBF   AVAILABLE ROLL

7 rows got
已用时间: 4.799(毫秒). 执行号:539.
在已有的表空间添加数据文件:
SQL> alter tablespace "test" add datafile '/dm8/data/DAMENG/test04.DBF' size 128;
操作已执行
已用时间: 10.944(毫秒). 执行号:543.

修改表空间状态:

SQL> alter tablespace "test" offline;
操作已执行
已用时间: 90.001(毫秒). 执行号:544.
SQL> alter tablespace "test" online;
操作已执行
已用时间: 3.949(毫秒). 执行号:545.

修改表空间位置:(只能在表空间为脱机状态下使用)

SQL> alter tablespace "test" rename datafile '/dm8/data/DAMENG/test01.DBF' to '/dm8/test01.DBF';
操作已执行
已用时间: 114.615(毫秒). 执行号:547.
SQL> alter tablespace "test" rename datafile '/dm8/data/DAMENG/test04.DBF' to '/dm8/test02.DBF';
操作已执行
已用时间: 108.152(毫秒). 执行号:548.

(2)临时表空间
临时表空间的查看:

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

行号     PARA_NAME        PARA_VALUE
---------- ---------------- ----------------
1          TEMP_PATH        /dm8/data/DAMENG
2          TEMP_SIZE        10
3          TEMP_SPACE_LIMIT 0

已用时间: 4.131(毫秒). 执行号:550.

(3)ROLL表空间
ROLL表空间在实际场景中使用到的不多,这里不过多的讲解,用法其实和普通表空间类似。
(4)删除表空间

SQL> drop tablespace "test";
操作已执行
已用时间: 123.176(毫秒). 执行号:551.

2、用户管理

概念:
在数据库中用户管理分三块用户、权限、角色
权限:
(1)权限:执行特定类型sql或访问其它模式对象的权利
(2)系统权限:对数据库对象的创建、删除、修改等等。
(3)对象权限:对数据库对象数据的操作权限。
数据库自带用户:

SYSDBA:数据库管理员
SYS:内置用户无法登录
SYSSSO:数据库安全员
SYSAUDITOR:数据库审计员
SYSDBO:数据库对象操作员

创建用户示例:
示例1:建立用户test,可以创建自己的表、有属于自己的表空间,密码要求60天变更一次

SQL> create user "test" identified by "test123123" limit failed_login_attemps 3,password_life_time 60,password_lock_time 1,password_grace_time 10 default tablespace "test1";
操作已执行
已用时间: 26.402(毫秒). 执行号:553.

查看用户的权限:

查看test用户所拥有的权限
SQL> SELECT * FROM SYS.DBA_ROLE_PRIVS WHERE GRANTEE='TEST';

行号     GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE
---------- ------- ------------ ------------ ------------
1          TEST    PUBLIC       N            NULL

已用时间: 1.553(毫秒). 执行号:559.
查看public所拥有的权限
SQL> SELECT * FROM SYS.DBA_SYS_PRIVS WHERE GRANTEE='PUBLIC';

行号     GRANTEE PRIVILEGE        ADMIN_OPTION
---------- ------- ---------------- ------------
1          PUBLIC  INSERT TABLE     NO
2          PUBLIC  UPDATE TABLE     NO
3          PUBLIC  DELETE TABLE     NO
4          PUBLIC  SELECT TABLE     NO
5          PUBLIC  REFERENCES TABLE NO
6          PUBLIC  GRANT TABLE      NO
7          PUBLIC  INSERT VIEW      NO
8          PUBLIC  UPDATE VIEW      NO
9          PUBLIC  DELETE VIEW      NO
10         PUBLIC  SELECT VIEW      NO
11         PUBLIC  GRANT VIEW       NO

行号     GRANTEE PRIVILEGE                ADMIN_OPTION
---------- ------- ------------------------ ------------
12         PUBLIC  EXECUTE PROCEDURE        NO
13         PUBLIC  GRANT PROCEDURE          NO
14         PUBLIC  SELECT SEQUENCE          NO
15         PUBLIC  GRANT SEQUENCE           NO
16         PUBLIC  EXECUTE PACKAGE          NO
17         PUBLIC  GRANT PACKAGE            NO
18         PUBLIC  SELECT ANY DICTIONARY    NO
19         PUBLIC  SELECT MATERIALIZED VIEW NO
20         PUBLIC  GRANT DOMAIN             NO
21         PUBLIC  USAGE DOMAIN             NO
22         PUBLIC  DUMP TABLE               NO

22 rows got
已用时间: 1.413(毫秒). 执行号:560.
附创建表权限给用户test
SQL> grant create table to TEST;
操作已执行
已用时间: 1.881(毫秒). 执行号:561.
用户创建表成功
SQL> connect test
密码:
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 2.691(毫秒)
SQL> create table t1(id int);
操作已执行
已用时间: 5.763(毫秒). 执行号:563.

示例2:创建用户test1,用户60天更改一次密码,密码尝试连接2次失败,帐号锁定5分钟,能查询TEST.T1表
使用manager管理工具创建用户:
达梦数据库——DM8安装操作及体系架构介绍_第23张图片
达梦数据库——DM8安装操作及体系架构介绍_第24张图片
达梦数据库——DM8安装操作及体系架构介绍_第25张图片
点击确定即可完成用户的创建。

用户的状态查询:

SQL> select username,account_status,lock_date from dba_users;

行号     USERNAME   ACCOUNT_STATUS LOCK_DATE
---------- ---------- -------------- ---------
1          SYSSSO     OPEN           NULL
2          TEST       OPEN           NULL
3          SYSDBA     OPEN           NULL
4          TEST1      OPEN           NULL
5          SYS        OPEN           NULL
6          SYSAUDITOR OPEN           NULL

6 rows got

已用时间: 8.813(毫秒). 执行号:628.

用户的解锁与锁定:

SQL> alter user test1 account lock;
操作已执行
已用时间: 2.158(毫秒). 执行号:629.
SQL> alter user test1 account unlock;
操作已执行
已用时间: 3.655(毫秒). 执行号:630.

给用户赋(删)权限:

SQL> grant delete on TEST.T1 to TEST1;
操作已执行
已用时间: 2.528(毫秒). 执行号:632.
SQL> revoke select on TEST.T1 FROM TEST1;
操作已执行
已用时间: 3.183(毫秒). 执行号:633.

示例3:公司招聘一批人员,要求权限固定,只能录入test表的权限,角色为一组固定权限的集合。

SQL> create role r1;
操作已执行
已用时间: 3.069(毫秒). 执行号:641.
SQL> grant insert on TEST.T1 TO r1;
操作已执行
已用时间: 2.156(毫秒). 执行号:642.
SQL> grant references any table to r1;
操作已执行
已用时间: 1.937(毫秒). 执行号:643.
SQL> grant r1 to test1;
操作已执行
已用时间: 1.891(毫秒). 执行号:644.
SQL> connect TEST1;
密码:

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 2.542(毫秒)
SQL> insert into TEST.T1 VALUES(2);
影响行数 1
已用时间: 1.459(毫秒). 执行号:692.
SQL> commit;
操作已执行
已用时间: 0.218(毫秒). 执行号:645.

删除用户和角色:

SQL> drop user test1 cascade;
操作已执行
已用时间: 20.268(毫秒). 执行号:646.
SQL> drop role r1;
操作已执行
已用时间: 2.489(毫秒). 执行号:647.

3、模式对象管理

(一)模式
模式其实就是类似mysql里面的一个库,里面可以很多对象,这些对象可以是表、视图、索引等等还有一些其它对象
(二)模式对象
指的是在模式下面的一些内容。例:表、视图、约束、索引、序列、包、同义词、存储过程、函数、类、域。
在DM8以及以往版本中,创建用户时会同时创建一个同名的模式,如果有同名的模式存在,该同名用户无法创建。同时一个用户下可以拥有多个模式。
(三)表的管理
达梦支持的表有以下几种:

索引组织表、堆表、临时表、分区表、外部表。

表的定义:

表的命名、表的数据类型、表的存储位置 、表的约束、注释等等

示例1:
(1)创建一张学生表
条件:表名STUDENT 学号 id char(10) 姓名 sname varchar(15) not null
年龄 age int 性别 sex char(1) 电话 phone varchar(11) not null 家庭地址 addredss varchar(100)
表空间 TEST1 约束 主键 id sname/phone 非空列 备注 student information

create table TEST.STUDENT 
(
	"id" char(10) not null,
	"sname" varchar(20) not null,
	"sex" char(1),
	"age" int,
	"phone" varchar(11) not null,
	"address" varchar(100),
	primary key("id")
)
storage(initial 1,next 1,minextents 1,fillfactor 0,on "test1");
comment on table TEST.STUDENT is 'student information';

给表增加列

SQL> alter table TEST.STUDENT ADD COLUMN(AGE INT);
操作已执行
已用时间: 9.183(毫秒). 执行号:697.

删除列:

SQL> alter table TEST.STUDENT DROP COLUMN AGE;
操作已执行
已用时间: 9.031(毫秒). 执行号:698.

创建表时指定约束:
1、非空约束

SQL> create table test.t2(id int);
操作已执行
已用时间: 2.824(毫秒). 执行号:699.
SQL> alter table test.t2 modify id int not null;
操作已执行
已用时间: 5.471(毫秒). 执行号:700.

2、唯一约束

SQL> create table test.t3(id int,name varchar(10) unique);
操作已执行
已用时间: 4.499(毫秒). 执行号:701.
SQL> insert into test.t3 values(1,'sdfsf');
影响行数 1

已用时间: 0.566(毫秒). 执行号:702.
SQL> insert into test.t3 values(2,'sdfsf');
insert into test.t3 values(2,'sdfsf');
[-6602]:违反表[T3]唯一性约束.
已用时间: 0.419(毫秒). 执行号:0.
SQL> insert into test.t3 values(3,null);
影响行数 1

已用时间: 0.416(毫秒). 执行号:704.
SQL> insert into test.t3 values(4,null);
影响行数 1

已用时间: 0.356(毫秒). 执行号:705.

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

SQL> create table test.t4(id int primary key,name varchar(20));
操作已执行
已用时间: 4.756(毫秒). 执行号:706.

4、检查约束

SQL> create table test.t6(id int check(id>=5));
操作已执行
已用时间: 4.263(毫秒). 执行号:707.

5、外键约束

SQL> create table test.t7(id int primary key,pid int);
操作已执行
已用时间: 3.945(毫秒). 执行号:708.
SQL> create table test.t8(sid int primary key,id int foreign key references test.t7(id));
操作已执行
已用时间: 6.422(毫秒). 执行号:709.

6、对表中的字段加备注

SQL> comment on column test.t8.sid is 'idcard';
操作已执行
已用时间: 1.972(毫秒). 执行号:710.

7、查看约束

SQL> select constraint_name,constraint_type,table_name,status from dba_constraints where table_name='T8';

行号     CONSTRAINT_NAME CONSTRAINT_TYPE TABLE_NAME STATUS
---------- --------------- --------------- ---------- -------
1          CONS134218767   P               T8         ENABLED
2          CONS134218768   R               T8         ENABLED

已用时间: 8.082(毫秒). 执行号:712.
SQL> select * from dba_col_comments where table_name='T8';

行号     OWNER TABLE_NAME COLUMN_NAME COMMENTS
---------- ----- ---------- ----------- --------
1          TEST  T8         SID         idcard
2          TEST  T8         ID          NULL

已用时间: 3.135(毫秒). 执行号:713.

8、使用sql脚本导入数据

[root@hdfeng opt]# cat test.sql
insert into test.t1 values(1);
insert into test.t1 values(2);
insert into test.t1 values(3);
insert into test.t1 values(4);
insert into test.t1 values(5);
insert into test.t1 values(6);
insert into test.t1 values(7);
insert into test.t1 values(8);
insert into test.t1 values(9);
commit;

SQL> start /opt/test.sql
SQL> insert into test.t1 values(1);
影响行数 1

已用时间: 0.508(毫秒). 执行号:723.
SQL> insert into test.t1 values(2);
影响行数 1

已用时间: 0.170(毫秒). 执行号:724.
SQL> insert into test.t1 values(3);
影响行数 1

已用时间: 0.165(毫秒). 执行号:725.
SQL> insert into test.t1 values(4);
影响行数 1

已用时间: 0.177(毫秒). 执行号:726.
SQL> insert into test.t1 values(5);
影响行数 1

已用时间: 0.162(毫秒). 执行号:727.
SQL> insert into test.t1 values(6);
影响行数 1

已用时间: 0.169(毫秒). 执行号:728.
SQL> insert into test.t1 values(7);
影响行数 1

已用时间: 0.160(毫秒). 执行号:729.
SQL> insert into test.t1 values(8);
影响行数 1

已用时间: 0.179(毫秒). 执行号:730.
SQL> insert into test.t1 values(9);
影响行数 1

已用时间: 0.161(毫秒). 执行号:731.
SQL> commit;
操作已执行
已用时间: 0.725(毫秒). 执行号:732.

9、重命名表名,启用和禁用约束

SQL> alter table test.t01 rename to t1;
操作已执行
已用时间: 6.154(毫秒). 执行号:735.
SQL> select constraint_name,constraint_type,table_name,status from dba_constraints where table_name='T8';

行号     CONSTRAINT_NAME CONSTRAINT_TYPE TABLE_NAME STATUS
---------- --------------- --------------- ---------- -------
1          CONS134218767   P               T8         ENABLED
2          CONS134218768   R               T8         ENABLED

已用时间: 1.788(毫秒). 执行号:742.
启用和禁用约束
SQL> alter table TEST.T8 disable constraint CONS134218768;
操作已执行
已用时间: 3.951(毫秒). 执行号:743.
SQL> alter table TEST.T8 enable constraint CONS134218768;
操作已执行
已用时间: 6.361(毫秒). 执行号:744.

10、删除表

SQL> drop table test.T1;
操作已执行
已用时间: 10.154(毫秒). 执行号:746.

(四)视图
视图分为以下几类:

简单视图
复杂视图
物化视图

1、简单视图的使用

创建视图
SQL> create view test.view1 as select * from test.T2;
操作已执行
已用时间: 7.807(毫秒). 执行号:747.
修改视图
SQL> create or replace view test.view1 as select * from test.T2 limit 5;
操作已执行
已用时间: 6.878(毫秒). 执行号:748.
视图的删除
SQL> DROP VIEW TEST.VIEW1;
操作已执行
已用时间: 9.423(毫秒). 执行号:753.
视图的查询
SQL> SELECT * FROM DBA_VIEWS WHERE OWNER='TEST';

行号     OWNER VIEW_NAME TEXT_LENGTH TEXT                                      TYPE_TEXT_LENGTH TYPE_TEXT OID_TEXT_LENGTH OID_TEXT VIEW_TYPE_OWNER VIEW_TYPE SUPERVIEW_NAME EDITIONING_VIEW READ_ONLY
---------- ----- --------- ----------- ----------------------------------------- ---------------- --------- --------------- -------- --------------- --------- -------------- --------------- ---------
1          TEST  VIEW1     41           SELECT TEST.T2.ID FROM TEST.T2 LIMIT( 5) NULL             NULL      NULL            NULL     NULL            NULL      NULL           NULL            NULL

已用时间: 2.316(毫秒). 执行号:752.

(五)索引
索引主要是为了加快sql语句对于数据记录查询,对数据库进行DML操作的时候,数据库也会进行索引的维护,索引会在数据库中占一部分的表空间
在DM8数据库中,支持的索引有以下几种:

二级索引、位图索引、唯一索引、复合索引、函数索引、分区索引等等。

需要建索引的列有以下几种情况:

1、经常查询的列,数据量比较大的
2、连接条件列,有多表连接的,数据量大的
3、经常有谓词(where)条件出现的sql也需要建索引

不建议建索引的情况:

1、列上有大量重复值的
2、列上面有大量的null
3、已经具有其它索引的列

查看表索引的语句:

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

行号     TABLE_NAME INDEX_NAME
---------- ---------- -------------
1          T2         INDEX33555454

已用时间: 174.137(毫秒). 执行号:755.

建索引表空间,主要是用来存放索引的,建索引存放到索引表空间下

SQL> create tablespace index1 datafile '/dm8/data/DAMENG/index_01.DBF' size 128;
操作已执行
已用时间: 15.969(毫秒). 执行号:789.
SQL> create table test.student1 as select * from test.student;
操作已执行
已用时间: 3.738(毫秒). 执行号:757.
SQL> create table test.student2 as select * from test.student;
操作已执行
已用时间: 5.052(毫秒). 执行号:758.
SQL> create index student_index on test.student1('id') tablespace index1;
操作已执行
已用时间: 4.987(毫秒). 执行号:790.

查看表的执行计划:

SQL> explain select * from test.student1 where 'id'<20;

1   #NSET2: [0, 1, 252]
2     #PRJT2: [0, 1, 252]; exp_num(7), is_atom(FALSE)
3       #SLCT2: [0, 1, 252]; var1 < 20
4         #CSCN2: [0, 1, 252]; INDEX33555463(STUDENT1)

已用时间: 0.689(毫秒). 执行号:0.

从以上执行计划可以看出,直接使用了全盘扫描,并没有走我们创建的索引,所以需要新建数据进行统计信息
创建DMSQL的存储过程,进行统计

SQL> begin
2   dbms_stats.gather_table_stats('TEST','STUDENT1');
3   END;
4   /
DMSQL 过程已成功完成
已用时间: 44.156(毫秒). 执行号:791.

索引重建以及索引的删除:

SQL> alter index test.student_index rebuild;
操作已执行
已用时间: 5.093(毫秒). 执行号:930.
SQL> drop index test.student_index ;
操作已执行
已用时间: 10.546(毫秒). 执行号:931.

注:DM的统计信息需要手动收集,系统不会自动收集,所以可以使用作业来定时的收集统计信息。

4、DMSQL

DM8中的DMSQL其实也是类似于mysql的DDL/DML/DCL/DQL
在DM8中也分为这么几种:

DDL:数据定义语句	例:createdrop	
DML:数据操作语句	例:insertupdatedelete
DCL:数据控制语句	例:grant/revoke/commit/rollback/lock/unlock
DQL:数据查询语句	例:select

本章内容较简单,主要都是一些SQL语句的使用,在我前面的MySQL章节中已经详细介绍在这里不一一展开!

5、备份还原

备份还原的作用:

1、主要是给数据库制作一个类似快照的副本,能在数据库故障的情况下,把备份还原回去,恢复正常
2、防止数据库数据丢失无法找回
3、也可以在数据库损坏以后进行数据重建

备份的逻辑:

全量备份:把数据库中所有数据都进行备份
增量备份:在上一次的全备或者增量备份后,每次只备份增加部署的内容

备份的方式:

物理备份:主要是把磁盘上的所有文件进行拷贝
逻辑备份:主要是把数据库中的语句进行备份,然后通过重新执行的方式还原回去。

备份的介质主要有磁盘、磁带和光盘,一般用在集群中比较多,比如说没有主备的rac集群是非常需要备份的,同时DM8也支持爱数、鼎甲这一类的第三方备份软件
(一)物理备份
物理备份分为:

冷备:dmap服务为启用,数据库实例则是关闭状态	
1、可以通过console的图形化管理工具去备份,进行脱机还原时,需要先还原再进行恢复
2、通过DMRMAIN脚本工具通过命令行进行恢复(/dm8/bin目录下)
备份命令
[root@hdfeng bin]# ./dmrman
dmrman V8
RMAN> backup database '/dm8/data/DAMENG/dm.ini';
backup database '/dm8/data/DAMENG/dm.ini';
file dm.key not found, use default license!
Database mode = 0, oguid = 0
EP[0]''s cur_lsn[37919]
BACKUP DATABASE [DAMENG],execute......
CMD CHECK LSN......
BACKUP DATABASE [DAMENG],collect dbf......
CMD CHECK ......
DBF BACKUP SUBS......
total 1 packages processed...
total 2 packages processed...
total 3 packages processed...
total 4 packages processed...
total 5 packages processed...
total 6 packages processed...
DBF BACKUP MAIN......
BACKUPSET [/dm8/data/DAMENG/bak/DB_DAMENG_FULL_20200714_013548_660676] END, CODE [0]......
META GENERATING......
file [DB_DAMENG_FULL_20200714_013548_660676.bak] finished, name:[DB_DAMENG_FULL_20200714_013548_660676.bak],created time:[2020-07-14 01:35:49],expire time:[2105-12-31 23:59:59],label:[],comment:[]

file [DB_DAMENG_FULL_20200714_013548_660676.meta] finished, name:[DB_DAMENG_FULL_20200714_013548_660676.meta],created time:[2020-07-14 01:35:49],expire time:[2105-12-31 23:59:59],label:[],comment:[]

total 10 packages processed...
total 10 packages processed...
total 10 packages processed!
CMD END.CODE:[0]
backup successfully!
time used: 995.342(ms)
到这里即可备份成功!

热备:dmap服务是需要打开的,数据库实例也是需要打开的,还需要开启数据库归档模式
使用命令行的方式打开归档:
[root@hdfeng bin]# ./disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 2.901(毫秒)
disql V8
SQL> alter database mount ;
操作已执行
已用时间: 00:00:01.770. 执行号:0.
SQL> alter database add archivelog 'type=local,dest=/dm8/arch,file_size=64,space_limit=0';
操作已执行
已用时间: 0.930(毫秒). 执行号:0.
SQL> alter database archivelog;
操作已执行
已用时间: 5.280(毫秒). 执行号:0.
SQL> alter database open;
操作已执行
已用时间: 00:00:01.727. 执行号:0.
SQL> select name,status$,arch_mode from v$database;

行号     NAME   STATUS$     ARCH_MODE
---------- ------ ----------- ---------
1          DAMENG 4           Y

已用时间: 1.881(毫秒). 执行号:4.
使用manager管理工具比较简单,在这里不再进行扩展。
使用命令行的方式进行全备,增量备:
全备:
SQL> backup database full backupset '/dm8/backup/fullbak2';
操作已执行
已用时间: 817.578(毫秒). 执行号:6.
增量备:
SQL> backup database increment backupset '/dm8/backup/incr_bak';
操作已执行
已用时间: 00:00:02.571. 执行号:7.

表空间的还原:
表空间的还原只能使用脱机还原,所以需要关闭数据库实例

模拟表空间test1损坏
[root@hdfeng DAMENG]# mv test02.DBF test02.DBF.bak
此时系统会处于mount状态,无法进行数据库操作,现在就需要把数据库实例进行关闭,然后进行还原恢复
[root@hdfeng bin]# ./DmServiceDMSERVER restart
Stopping DmServiceDMSERVER:                                [ OK ]
Starting DmServiceDMSERVER: 上一次登录:二 714 02:21:26 CST 2020
                                                           [ OK ]
[root@hdfeng bin]# ./disql SYSDBA/SYSDBA

服务器[LOCALHOST:5236]:处于普通配置状态
登录使用时间: 3.060(毫秒)
disql V8
SQL> select status$ from tablespace;
select status$ from tablespace;1 行附近出现错误[-510]:系统处于MOUNT状态.
已用时间: 1.822(毫秒). 执行号:0.
进行校验备份集:
RMAN> check backupset '/dm8/backup/fullbak2';
check backupset '/dm8/backup/fullbak2';
CMD END.CODE:[0]
check backupset successfully.
time used: 7.871(ms)
还原表空间:
RMAN> restore database  '/dm8/data/DAMENG/dm.ini' tablespace "test1" from backupset '/dm8/backup/fullbak2';
restore database '/dm8/data/DAMENG/dm.ini' tablespace "test1" from backupset '/dm8/backup/fullbak2';
RESTORE TABLESPACE[test1] IN DB[/dm8/data/DAMENG/dm.ini] CHECK......
Database mode = 0, oguid = 0
begin redo pwr log collect, last ckpt lsn: 41716 ...
redo pwr log collect finished
main rfil[/dm8/data/DAMENG/DAMENG01.log]'s grp collect 0 valid pwr record, discard 0 invalid pwr record
EP[0]'s cur_lsn[41716]
RESTORE TABLESPACE[test1] IN DB[/dm8/data/DAMENG/dm.ini],dbf collect......
RESTORE TABLESPACE[test1] IN DB[/dm8/data/DAMENG/dm.ini],ts status and dbf refresh ......
RESTORE BACKUPSET [/dm8/backup/fullbak2] START......
total 2 packages processed...
total 6 packages processed...
RESTORE TABLESPACE[test1] IN DB[/dm8/data/DAMENG/dm.ini],UPDATE ctl file......
total 6 packages processed...
total 6 packages processed!
CMD END.CODE:[0]
restore successfully.
time used: 376.620(ms)

恢复表空间:
RMAN> recover database '/dm8/data/DAMENG/dm.ini' tablespace "test1";
recover database '/dm8/data/DAMENG/dm.ini' tablespace "test1";
Database mode = 0, oguid = 0
[WARN]tablespace test1 is corrupted(state: 2), restore or drop please.
begin redo pwr log collect, last ckpt lsn: 41716 ...
redo pwr log collect finished
main rfil[/dm8/data/DAMENG/DAMENG01.log]'s grp collect 0 valid pwr record, discard 0 invalid pwr record
EP[0]'s cur_lsn[41716]
RECOVER TABLESPACE[test1] IN DB[/dm8/data/DAMENG/dm.ini] CHECK......
begin redo pwr log collect, last ckpt lsn: 41716 ...
redo pwr log collect finished
main rfil[/dm8/data/DAMENG/DAMENG01.log]'s grp collect 0 valid pwr record, discard 0 invalid pwr record
EP[0]'s cur_lsn[41716]
EP:0 total 2 pkgs applied, percent: 18%
EP:0 total 4 pkgs applied, percent: 36%
EP:0 total 6 pkgs applied, percent: 54%
EP:0 total 8 pkgs applied, percent: 72%
EP:0 total 10 pkgs applied, percent: 90%
EP:0 total 11 pkgs applied, percent: 100%
Recover from archive log finished, time used:0.007s.
CMD END.CODE:[0]
recover successfully.
time used: 429.420(ms)

至此恢复成功,后面重启实例即可!

(二)逻辑备份
逻辑备份的导入导出使用以下两个工具:

dexp:逻辑备份导出工具
dimp:逻辑备份导入工具

逻辑备份能备份以下四个等级,并且不能同时存在:

1、数据库级别
2、用户
3、模式
4、表级

逻辑导出:

[root@hdfeng bin]# ./dexp SYSDBA/SYSDBA@localhost:5236 file=dexp1.dmp log=dexp1.log directory=/dm8/backup/dexp full=y
dexp V8.1.1.78-Build(2020.04.28-121039)ENT
导出第 1 个SYSPACKAGE_DEF: SYS_VIEW
.
.
.
成功导出 第3SCHEMA :SYSDBA
共导出 3SCHEMA
整个导出过程共花费    0.196 s
成功终止导出, 没有出现警告

逻辑导入:

[root@hdfeng bin]# ./dimp SYSDBA/SYSDBA@localhost:5236 file=/dm8/backup/dexp/dexp1.dmp log=/dm8/backup/dexp/dimp1.log
dimp V8.1.1.78-Build(2020.04.28-121039)ENT
导入 GLOBAL 对象……
导入 SYSPACKAGES_DEF 对象……
.
.
.
开始导入模式[SYSDBA]......
导入模式中的 NECESSARY GLOBAL 对象……
模式中的 NECESSARY GLOBAL 对象导入完成……
导入模式中的 GLOBAL 对象……
模式中的 GLOBAL 对象导入完成……
模式[SYSDBA]导入完成......
整个导入过程共花费    0.935 s
成功终止导入, 但出现警告

6、作业

作业的使用的话一定要先初始化代理环境:
可以使用命令行做,也可以使用图形化工具做,这里我们使用图形化界面做
达梦数据库——DM8安装操作及体系架构介绍_第26张图片
达梦数据库——DM8安装操作及体系架构介绍_第27张图片
步骤1:新建作业01,每周六23:00进行全备
达梦数据库——DM8安装操作及体系架构介绍_第28张图片
达梦数据库——DM8安装操作及体系架构介绍_第29张图片
达梦数据库——DM8安装操作及体系架构介绍_第30张图片
选择完成以后点确定即可!
使用语句则是:

call SP_CREATE_JOB('JOB01',1,0,'',0,0,'',0,'');

call SP_JOB_CONFIG_START('JOB01');

call SP_ADD_JOB_SCHEDULE('JOB01', 'test1', 1, 2, 1, 64, 0, '23:00:00', NULL, '2020-07-14 03:17:11', NULL, '');

call SP_JOB_CONFIG_COMMIT('JOB01');

7、DM8开发

达梦还支持多种语句的开发接口:

c、c++、java、python、php、perl、.net等等

下面介绍如何使用ODBC连接DM数据库:
一、检查gcc包是否安装

[root@hdfeng bin]# rpm -qa | grep gcc
gcc-4.8.5-39.el7.x86_64
gcc-c++-4.8.5-39.el7.x86_64
libgcc-4.8.5-39.el7.x86_64

二、安装rpm包

[root@hdfeng opt]# rpm -ivh unixODBC-2.3.1-11.el7.x86_64.rpm

三、查看ODBC是否安装完成、查看相应版本

[root@hdfeng opt]# odbc_config --version
2.3.1

四、查看ODBC配置文件的路径

[root@hdfeng opt]# odbcinst -j
unixODBC 2.3.1
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

五、配置odbc.ini和odbcinst.ini来进行对数据库的连接

[root@hdfeng opt]# cat /etc/odbc.ini
[dm8]
Description = DM ODBC DSND
Driver = DM8 ODBC DRIVER
SERVER = localhost
UID = SYSDBA
PWD = SYSDBA
TCP_PORT = 5236
[root@hdfeng opt]# cat /etc/odbcinst.ini
[DM8 ODBC DRIVER]
Description  	= ODBC for DM8
Driver 		= /dm8/bin/libdodbc.so
使用dmdba帐号连接
[root@hdfeng opt]# su - dmdba
上一次登录:二 714 02:44:13 CST 2020
-sh-4.2$ bash
[dmdba@hdfeng ~]$ isql dm8
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>
连接成功!

到这里DM8最基本的一些应用都在这里啦,一般用户的话看了我以上的教程应该是都能对自己的数据库进行操作啦,后续还会出各方面更深入的博文,期待大家多多关注!有相关问题可以在评论区留言,我会及时解答!

你可能感兴趣的:(数据库层面,sql,数据库,达梦数据库,大数据,linux)