写在前面:文章中引用了其他作者的优秀文章,有问题联删
1.下载安装
装前准备:保证操作系统至少 1 GB 以上的可用内存 (RAM)
官网链接:技术文档-武汉达梦数据库股份有限公司
官网链接:产品下载 | 达梦数据库
下载好的是一个.iso文件,直接打开
官方技术文档:数据库安装 | 达梦技术文档
每种安装方式里面都有很详细的介绍
简单介绍一下达梦数据库(典型安装)安装自带的工具:
数据库配置助手:./dbca.sh就是一开始安装完了初始化数据库的工具,用于创建、删除数据库实例和服务的。
ps:这里需要注意的是起名字需要使用’‘-’‘的,在disql操作创建的对象时需要带上双引号进行转义。
服务查看器:./dmservice.sh 查看所有的服务以及属性,控制服务启停。
管理工具:./manager连接和操作数据库,相当于一个数据库连接工具,方便进行日常运维。
ps:这里也需要注意在创建新的对象时名字以及密码带有特殊字符的时候会需要转义。
控制台工具:./console数据库管理员可以完成服务器参数配置、管理 DM 服务、脱机备份与还原、查看系统信息、查看许可证信息等功能。
审计分析工具:./analyzer审计规则的创建与修改,审计记录的查看与导出。按照我们的需求创建审计规则和条件来筛选日志里符合条件的记录。
性能监视工具:./monitor监视服务器的活动和性能情况,并对系统参数进行调整的客户端工具,它允许系统管理员在本机或远程监视服务器的运行状况。主要包括:统计分析、性能监视、调优向导、预警警告四大功能。
迁移工具:./dts提供了主流大型数据库迁移到 DM、DM 到 DM、文件迁移到 DM 以及 DM 迁移到文件等功能。
SQL交互式查询工具:打开是一个dos窗口,用于执行disql命令。
这些附带的数据库工具,在上面的官方技术文档也有详细的使用介绍
2.文件概览
3.核心概念
数据库实例:数据库软件运行时的内存结构和后台进程集合,它代表了对数据库物理文件的实际操作层。每个数据库实例对应一个独立的数据库服务进程,负责管理和维护数据库的读写操作、缓存管理、事务处理、并发控制等任务。
数据库服务:是指数据库实例对外提供的网络服务,允许客户端通过网络连接到数据库并执行SQL语句。数据库服务一般与数据库监听器相关联,监听特定端口上的连接请求,并将这些请求转发给相应的数据库实例进行处理。
用户:是在数据库系统中拥有权限的实体,它们能够登录到数据库并对数据库中的数据进行访问和操作。每个用户都有自己的权限体系和关联的模式,在各自的模式下创建和管理数据库对象。用户通过认证后,可以在其所拥有的模式内执行CRUD(Create, Read, Update, Delete)等操作,以及执行其他数据库管理任务。
模式(SCHEMA):模式是一个逻辑容器,用于组织数据库对象,如表、视图、索引、存储过程等。在一个数据库中,可以有多个模式,每个模式都隶属于一个特定的数据库用户,并且具有独立的命名空间。模式定义了数据库对象的结构和关系,但不包含具体的数据。
页: 是最小的逻辑单元, 是数据库最小的分配单位。 ( 默认 8k,(4k,8k,16k,32k),数据页包括 4 个部分: 页头控制信息, 数据, 空闲空间, 行偏移数组。如果页的大小设置得过大,虽然可以减少IO次数,但可能会导致内存的浪费;如果页的大小设置得过小,虽然可以提高内存的利用率,但可能会增加IO次数。
簇: 由磁盘上连续的页组成, 一个簇总是在一个数据文件中, 由 16 或是 32 个页组成。如果簇的大小设置得过大,虽然可以减少存储空间的使用,但可能会导致数据的检索效率降低;如果簇的大小设置得过小,虽然可以提高数据的检索效率,但可能会增加存储空间的使用。
段: 一组簇的集合, 是簇的上级逻辑单位, 一个段可以跨多个数据文件, 一个簇只能在一个数据文件中。段是达梦数据库中存储特定类型数据的逻辑单位,例如表段、索引段等。段的管理方式会影响数据库的性能,如果段的管理方式不当,可能会导致空间的浪费或者检索效率的降低。
数据文件: 由一个或多个段组成。
表空间: 是一个或多个数据文件组成, 最多由 256 个数据文件。
关系:
一个数据库实例通常对应一个数据库,而一个数据库在分布式或集群的情况下可能会对应多个实例,但不会在同一时间点对数据库进行直接管理。每个数据库实例通常只与一个数据库服务关联,以提供特定的数据访问和管理功能。
1、SYS -----达梦数据库内置管理用户,不能登录数据库,数据库使用的大部分的数据字典和动态性能视图SYS; 2、SYSDBA-----数据库的管理员; 3、SYSAUDITOR---审计用户; 4、SYSSSO---安全用户在DM数据库中;
每一个用户都有一个默认的表空间,对于 SYS、SYSSSO、SYSAUDITOR 系统用户,默认的用户表空间是 SYSTEM,SYSDBA 的默认表空间为 MAIN,新创建的用户如果没有指定默认表空间,则系统自动指定 MAIN 表空间为用户默认的表空间。 模式:一个用户默认对应一个同名的模式,但一个用户也可以创建多个模式; 角色:类似于用户组,创建角色时一般会指定角色权限,将角色赋给一个用户,这个用户就拥有了这个角色中的所有权限,DM数据库预定义角色有三个: DBA、PUBLIC、RESOURCE。
4.使用心得
数据迁移(迁移工具dts):
图形化界面迁移工具迁移时如果字段名过长会报错:列长度超出定义
先自定义映射类型
然后新建迁移,我这里是MySQL转DM
不使用默认类型映射,使用刚刚自定义的(如果大家还有别的方法欢迎留言讨论或者告知作者)
注意:
这里迁移工具是会将“-”也保留的,所以在操作数据库时需要使用“”“对”-“进行转义
我们勾选了保持对象名的大小写,但是如果我们的数据库没有设置区分大小的话,在进行数据操纵语言(DML)操作,如插入、更新、删除数据时,对象名的大小写通常不会影响操作的结果,因为数据库本身不区分大小写。但是,如果查询条件中包含了字符串比较,那么字符串的大小写就需要根据具体情况来处理;进行数据定义语言(DDL)操作,如创建表、修改表结构等时,由于迁移工具保持了对象名的大小写,应该在DDL语句中使用与迁移工具保持一致的大小写形式。这样一来非常容易产生混乱,最好就是两个都保持一致。
用户名不区分大小写,在数据库里面统一保存为大写。而对于模式名,如果其为小写,那么在使用时需要加双引号,否则会报错。大写模式名则不需要加双引号。
管理工具:
单独操作达梦数据库时推荐自带的管理工具(manager)简单好用
同时操作不同的数据库推荐DBeaver
注意:因为DBeaver没有达梦数据库的驱动,所以需要新建驱动,下面是操作流程
1、DBeaver可以绿色版安装,下载zip包解压即可使用
下载地址:Download | DBeaver Community
2、解压完成后运行dbeaver.exe
3、选择“数据库”-“驱动管理器”,然后点击“新建”
4、创建新驱动-“设置”界面填写“驱动名称”,“类名”,“URL模板”,“默认端口”
5、创建新驱动-“库”界面选择添加文件,添加DM JDBC驱动,然后点击“确定”
6、配置完成后选择“数据库”-“新建连接”,选择“DM”然后根据提示下一步输入账号密码,再点击完成即可连接达梦数据库成功
7、点击“SQL”,右边界面就会打开一个SQL编辑器,可以执行SQL语句
Linux启用图形化工具无法启动:
达梦数据库无法打开图形化界面的解决方法 (taodudu.cc)
若实在无法启动图形化界面,使用命令行进行操作:
按照教程进行实例化后,登录达梦数据库(命令行方式,manager图形管理工具直接启动)
[root@localhost bin]# ./disql SYSDBA/SYSDBA@localhost:5236 不含特殊字符 ./disql usky_cloud/'"Yt$66u"'@localhost:5238 含特殊字符
带有特殊字符需要进行转义!
推荐新建一个数据库实例和服务使用,默认5236端口数据库实例是区分大小写的,默认大写,修改不便
达梦数据库命令行初始化操作_达梦数据库初始化命令-CSDN博客
达梦数据库三种模式:
达梦数据库支持 3 种数据库模式: Normal 模式、 Primary 模式和 Standby 模式。
1.1 Normal 模式(普通模式)
-
用户可以正常访问数据库,操作没有限制。
-
正常生成本地归档,但不发送实时归档(Realtime)、即时归档(Timely)和异步归档(Async)。
将数据库切换为 Normal 模式:
ALTER DATABASE NORMAL;
1.2 Primary 模式(主库模式)
-
用户可以正常访问数据库,操作有极少限制。
-
对临时表空间以外的所有的数据库对象的修改操作都强制生成Redo日志。
-
正常生成本地归档,支持实时归档(Realtime)、即时归档(Timely)和异步归档(Async)。在归档有效时,发送REDO日志到备库;
-
该模式下部分功能受限,包括:不支持修改表空间文件名、不支持修改arch_ini参数。正常生成本地归档,支持实时归档(Realtime)、即时归档(Timely)和异步归档(Async)。
将数据库切换为Primary模式:
ALTER DATABASE PRIMARY;
1.3 Standby 模式(备库模式)
-
可以执行数据库备份(不能执行数据库作业备份)、查询等只读数据库操作。
-
接收主库发送过来的REDO日志并重做。
-
正常生成本地归档,正常发送异步归档日志;但实时归档(Realtime)、即时归档(Timely)均强制失效。
-
该模式下时间触发器、事件触发器等都失效。
-
另外,还支持临时表的Insert/Delete/Update操作。因为临时表数据的修改不会产生Redo日志,所以同样主库对临时表的修改无法同步到备库。
将数据库切换为 Standby 模式:
ALTER DATABASE STANDBY;
需要注意的是:
-
三种模式只能在MOUNT状态下设置,模式之间可以相互转换。
-
对于新初始化的库,首次启动不允许使用mount方式,需要先正常启动并正常退出,然后才允许mount方式启动。
-
一般情况下,数据库为NORMAL模式,如果不指定MOUNT状态启动,则自动启动到OPEN状态。
-
在需要对数据库配置时(如配置数据守护、数据复制),服务器需要指定MOUNT状态启动。
-
当数据库模式为非NORMAL模式(PRIMARY、STANDBY模式),无论是否指定启动状态,服务器启动时自动启动到MOUNT状态。
-
修改DMDSC库的模式必须在DMDSC库所有实例都处于MOUNT状态下才能进行,只需要在一个节点上执行以上语句即可。
达梦数据库状态:
达梦数据库的状态包括startup、mount、after redo、open、suspend、shutdown这几种状态,但不是所有的状态都能相互转换和人工干预。
2.1 Startup 状态
系统刚启动时设置为Startup状态。
2.2 Mount 状态
数据库在Mount状态下,不能修改数据,不能访问表、视图等数据库对象,但可以执行修改归档配置、控制文件和修改数据库模式等操作,也可以执行一些不修改数据库内容的操作,比如查询动态视图或者一些只读的系统过程。
由于Mount状态不生成PWR 日志,因此数据页可以正常刷盘,也正常推进检查点。系统从Open状态切换为Mount状态时, 会强制回滚所有活动事务,但不会强制清理(Purge)已提交事务,不会强制断开用户连接,也不会强制Buffer中的脏页刷盘。
将数据库修改为mount状态:
ALTER DATABASE MOUNT;
示例:
服务器[LOCALHOST:5236]:处于普通打开状态 登录使用时间: 5.273(毫秒) SQL> select status$ from v$instance; 行号 STATUS$ ---------- ------- 1 OPEN 已用时间: 0.407(毫秒). 执行号:5. SQL> alter database mount; 操作已执行 已用时间: 00:00:01.778. 执行号:0. SQL> select status$ from v$instance; 行号 STATUS$ ---------- ------- 1 MOUNT
PWR日志:Page Written Record日志,是REDO日志里包含有一种特殊的记录。包括(ts_id, fil_id, page_no, page_lsn)信息。每个数据页刷盘时,都会生成一条对应的PWR日志。
2.3 After Redo 状态
系统启动过程中联机日志重做完成后,回滚活动事务前设置为After Redo状态。非Standby模式的实例在执行alter database open操作前,也会将系统设置为After Redo状态。
2.4 Open 状态
可以访问数据库对象,对外提供正常的数据库服务,不能进行控制文件维护、归档配置等操作。
将数据库修改为Open状态:
(当系统处于Primary/Standby模式时,必须强制加上FORCE子句。)
ALTER DATABASE OPEN [FORCE];
示例:
SQL> select status$ from v$instance; 行号 STATUS$ ---------- ------- 1 MOUNT 已用时间: 54.783(毫秒). 执行号:4. SQL> alter database open; 操作已执行 已用时间: 00:00:09.971. 执行号:0. SQL> select status$ from v$instance; 行号 STATUS$ ---------- ------- 1 OPEN 已用时间: 0.407(毫秒). 执行号:5.
2.5 Suspend 状态(挂起)
数据库在Suspend状态下,可以访问数据库对象,甚至可以修改数据,但限制Redo日志刷盘, 一旦执行COMMIT等触发Redo日志刷盘的操作时,当前操作将被挂起。
相比Open到Mount的状态切换,Open到Suspend的状态切换更加简单、高效,不会回滚任何活动事务,在状态切换完成后,所有事务可以继续执行。
在DataWatch主备系统中suspend状态的自动切换的使用:
一般在修改归档状态之前将系统切换为Suspend状态,比如备库故障恢复后,在历史数据(归档日志)同步完成后,需要重新启用实时归档功能时:
-
将系统切换为Suspend状态,限制Redo日志写入联机Redo日志文件;
-
修改归档状态为Valid;
-
重新将数据库切换为Open状态,恢复Redo日志写入功能;
-
备库与主库重新进入实时同步状态。网址:yii666.com
实时归档失败时(比如网络故障导致),Primary实例将试图切换成Suspend状态,防止后续的日志写入。因为一旦写入,主备切换时有可能备库没有收到最后那次的RLOG_PKG,导致主库上多一段日志,很容易造成主备数据不一致。当实例成功切换为SUSPEND状态时,可直接退出,强制丢弃多余的日志,避免主备数据不一致。
将数据库修改为Suspend状态:
ALTER DATABASE SUSPEND;
注意:修改DMDSC库的状态为SUSPEND时,库内所有实例都不能处于MOUNT状态,只需要在一个节点上执行ALTER DATABASE SUSPEND语句即可。
示例:
Session 1: SQL> alter database suspend; 操作已执行 已用时间: 100.968(毫秒). 执行号:0. SQL> select status$ from v$instance; 行号 STATUS$ ---------- ------- 1 SUSPEND Session 2: SQL> select count(*) from test; ---查询正常 行号 COUNT(*) ---------- -------------------- 1 3 已用时间: 2.639(毫秒). 执行号:8. SQL> insert into test values(1,'a',10000); ---插入正常 影响行数 1 已用时间: 0.882(毫秒). 执行号:11. SQL> commit; ---但是提交会挂起 Session 3: SQL> create table t(id int); ---设计会一直挂起 Session 1: 修改为open状态: SQL> alter database open; 操作已执行 已用时间: 0.644(毫秒). 执行号:0. Session 2:创建成功 SQL> create table t(id int); 操作已执行 已用时间: 00:05:41.432. 执行号:7. Session 3: 提交成功 SQL> insert into test values(1,'a',10000); 影响行数 1 已用时间: 0.882(毫秒). 执行号:11. SQL> commit; 操作已执行 已用时间: 00:01:44.580. 执行号:12. SQL>
2.6 Shutdown 状态
实例正常退出时设置为Shutdown状态。
数据库状态之间的切换
-
Open状态与Mount状态可以相互切换;
-
Open状态与Suspend状态可以相互切换;
-
Mount和Suspend状态不能直接转换;
-
其他状态为系统内部状态,用户不能主动干预。
另外, 可以通过参数ALTER_MODE_STATUS来控制是否允许手工修改服务器的模式、状态和OGUID,1:允许;0:不允许。默认为1。此参数可以动态修改。
示例:
-
Open状态与Mount状态的相互切换
SQL> select status$ from v$instance; 行号 STATUS$ ---------- ------- 1 OPEN 已用时间: 0.287(毫秒). 执行号:13. SQL> alter database mount; 操作已执行 已用时间: 00:00:01.760. 执行号:0. SQL> select status$ from v$instance; 行号 STATUS$ ---------- ------- 1 MOUNT 已用时间: 0.677(毫秒). 执行号:14. SQL> alter database open; 操作已执行 已用时间: 00:00:01.741. 执行号:0. SQL> select status$ from v$instance; 行号 STATUS$ ---------- ------- 1 OPEN 已用时间: 0.280(毫秒). 执行号:15.
-
Open状态与Suspend状态的相互切换
SQL> select status$ from v$instance; 行号 STATUS$ ---------- ------- 1 OPEN 已用时间: 0.280(毫秒). 执行号:15. SQL> alter database suspend; 操作已执行 已用时间: 100.965(毫秒). 执行号:0. SQL> select status$ from v$instance; 行号 STATUS$ ---------- ------- 1 SUSPEND 已用时间: 0.700(毫秒). 执行号:16. SQL> alter database open; 操作已执行 已用时间: 0.517(毫秒). 执行号:0. SQL> select status$ from v$instance; 行号 STATUS$ ---------- ------- 1 OPEN 已用时间: 0.291(毫秒). 执行号:17.
-
Mount状态与Suspend状态不能直接切换
mount状态切换suspend状态:
SQL> select status$ from v$instance; 行号 STATUS$ ---------- ------- 1 MOUNT 已用时间: 0.673(毫秒). 执行号:18. SQL> alter database suspend; alter database suspend; 第1 行附近出现错误[-510]:系统处于MOUNT状态. 已用时间: 0.523(毫秒). 执行号:0.
suspend状态切换mount状态:
SQL> select status$ from v$instance; 行号 STATUS$ ---------- ------- 1 SUSPEND 已用时间: 0.665(毫秒). 执行号:19. SQL> alter database mount; alter database mount; 第1 行附近出现错误[-515]:系统处于SUSPEND状态. 已用时间: 0.337(毫秒). 执行号:0. SQL>
5.常见问题
DM 支持的字段名最大长度 正规标识符的最大长度是 128 个英文字符或 64 个汉字。
disql 中,用";" 无法结束,或报错:The script file is not complete,last sql has not been executed 创建触发器,存储过程,函数,包,模式等时需要用“/”结束。
登录进入以后Deldte无法删除 需要使用Ctrl+Delete
如何查询一个表涉及到的所有触发器
select * from dba_triggers where DBA_TRIGGERS.OWNER = '模式名' AND DBA_TRIGGERS.TABLE_NAME = '表名'
不退出disql切换用户 conn
达梦数据库Java连接:JAVA | 达梦技术文档 (dameng.com)
DTS 迁移时,报错:“非法 IDENTITY 列类型” 达梦数据库也有自增函数 IDENTITY(2,1),但是只支持 INT ,BIGINT 两种字段类型,需手动修改映射关系为字段 int 或者手动修改 SMALLINT 为 INT 类型再进行建表。
运行 SQL 文件/执行 SQL 脚本
-
Windows 环境
启动 disql 时,运行脚本如下:
Copydisql SYSDBA/SYSDBA `D:\test.sql
启动 disql 之后,运行脚本如下:
Copystart D:\test.sql;
-
Linux 环境
Copy./disql SYSDBA/SYSDBA\ `/dev/test.sql**