1、部署
1.1、下载
用户在安装 DM 数据库之前需要检查或修改操作系统的配置,以保证 DM 数据库能够正确安装和运行。
操作系统 | CPU | 数据库 |
---|---|---|
CentOS7 | x86_64 | dm8_20250506_x86_rh7_64.zip |
1.2、新建 dmdba 用户
安装前必须创建 dmdba 用户,禁止使用 root 用户安装数据库。
创建用户所在的组,命令如下:
groupadd dinstall -g 2001
创建用户,命令如下:
useradd -G dinstall -m -d /home/dmdba -s /bin/bash -u 2001 dmdba
修改用户密码,命令如下:
passwd dmdba
1.3、修改文件打开最大数
在 Linux、Solaris、AIX 和 HP-UNIX 等系统中,操作系统默认会对程序使用资源进行限制。如果不取消对应的限制,则数据库的性能将会受到影响。
永久修改和临时修改。
重启服务器后永久生效。
使用 root 用户打开 /etc/security/limits.conf 文件进行修改,命令如下:
* soft noproc 65536
* hard noproc 65536
* soft nofile 131072
* hard nofile 131072
* hard stack 32768
* soft stack 16384
* hard memlock unlimited
* soft memlock unlimited
切换到 dmdba 用户,查看是否生效,命令如下:
su - dmdba
ulimit -a
1.4、目录规划
1.4.1、创建目录
- 可根据实际需求规划安装目录,本示例使用默认配置 DM 数据库安装在 /home/dmdba 文件夹下。
- 规划创建实例保存目录、归档保存目录、备份保存目录。
##实例保存目录
mkdir -p /data/dm/data
##归档保存目录
mkdir -p /data/dm/arch
##备份保存目录
mkdir -p /data/dm/dmbak
1.4.2、修改目录权限
chown -R dmdba:dinstall /data/dm/data
chown -R dmdba:dinstall /data/dm/arch
chown -R dmdba:dinstall /data/dm/dmbak
1.4.3、设置 755 权限
chmod -R 755 /data/dm/data
chmod -R 755 /data/dm/arch
chmod -R 755 /data/dm/dmbak
1.5、挂载镜像
1.5.1、解压安装包
mkdir -p /opt/apps/dm
unzip -d /opt/apps/dm/ dm8_20250506_x86_rh7_64.zip
1.5.2、镜像挂载(root)
mkdir -p /mnt/dm
mount dm8_20250506_x86_rh7_64.iso /mnt/dm
1.5.3、命令行安装(dmdba用户)
su - dmdba
cd /mnt/dm
##数据库安装与配置(dmdba用户)
./DMInstall.bin -i
- 按需求选择安装语言,默认中文;
- 没有 key 文件选择 “n”;
- 时区按需求选择一般选择 “21”;
- 安装类型选择“1”;
- 安装目录按实际情况配置,默认安装位置:/home/dmdba/dm。
数据库安装大概 1~2 分钟,数据库安装完成后,显示如下界面。
#### 1.5.4、创建 DmAPService
数据库安装完成后,需要切换至 root 用户执行上图中的命令 /home/dmdba/dmdbms/script/root/root_installer.sh 创建 DmAPService,否则会影响数据库备份。
1.5.5、配置实例(dmdba用户)
部分参数解释如下
page_size:数据文件使用的页大小。取值范围 4、8、16、32,单位:KB。缺省值为 8。可选参数。选择的页大小越大,则 DM 支持的元组长度也越大,但同时空间利用率可能下降。数据库创建成功后无法再修改页大小,可通过系统函数 SF_GET_PAGE_SIZE()获取系统的页大小。
extent_size:数据文件使用的簇大小,即每次分配新的段空间时连续的页数。取值范围 16、32、64。单位:页数。缺省值为 16。可选参数。数据库创建成功后无法再修改簇大小,可通过系统函数 SF_GET_EXTENT_SIZE()获取系统的簇大小。
case_sensitive: 标识符大小写敏感。当大小写敏感时,小写的标识符应用""括起,否则被系统自动转换为大写;当大小写不敏感时,系统不会转换标识符的大小写,系统比较函数会将大写字母全部转为小写字母再进行比较。取值:Y、y、1 表示敏感;N、n、0 表示不敏感。缺省值为 Y。可选参数。此参数在数据库创建成功后无法修改,可通过系统函数 SF_GET_CASE_SENSITIVE_FLAG()或 CASE_SENSITIVE()查询设置的参数值。
charset:字符集选项。取值范围 0、1、2。0 代表 GB18030,1 代表 UTF-8,2 代表韩文字符集 EUC-KR。缺省值为 0。可选参数。此参数在数据库创建成功后无法修改,可通过系统函数 SF_GET_UNICODE_FLAG()或 UNICODE()查询设置的参数值。
BLANK_PAD_MODE:设置字符串比较时,结尾空格填充模式是否兼容 ORACLE。1:兼容;0:不兼容。缺省值为 0。可选参数。此参数在数据库创建成功后无法修改,可通过查询 V$PARAMETER 中的 BLANK_PAD_MODE 参数名查看此参数的设置值。
PAGE_CHECK:PAGE_CHECK 为页检查模式。取值范围 0、1、2、3。0:禁用页校验;1:开启页校验并使用 CRC 校验;2:开启页校验并使用指定的 HASH 算法进行校验;3:开启页校验并使用快速 CRC 校验。缺省值为 3。可选参数。在数据库创建成功后无法修改。
需要注意的是 页大小 (page_size)、簇大小 (extent_size)、大小写敏感 (case_sensitive)、字符集 (charset) 、空格填充模式 (BLANK_PAD_MODE) 、页检查模式(PAGE CHECK) 等部分参数,一旦确定无法修改,在初始化实例时确认需求后谨慎设置。
/home/dmdba/dm/bin/dminit/dminit path=/data/dm/data PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=y CHARSET=1 DB_NAME=DAMENG INSTANCE_NAME=DBSERVER PORT_NUM=5236 SYSDBA_PWD=Dmdb#2025 SYSAUDITOR_PWD=Dmdb#2025
1.5.6、注册服务(root用户)
注册服务(root用户)
/home/dmdba/dm/script/root/dm_service_installer.sh -t dmserver -dm_ini /data/dm/DAMENG/dm.ini -p DMSERVER
部分参数说明
标志 参数 说明
-t 服务类型 注册服务类型,支持一下服务类型:dmap、dmamon、dmserver、dmwatcher、dmmonitor、dmasmsvr、dmasmsvrm、dmcss、dmcssm。
-dm_ini INI 文件路径 指定服务所需要的 dm.ini 文件路径。
-p 服务名后缀 指定服务名后缀,生成的操作系统服务名为“服务脚本模板名,称 + 服务名后缀”。此参数只针对 dmserver、dmwatcher、dmmonitor、dmasmsvr、dmasmsvrm、dmcss、dmcssm 服务脚本生效。
1.5.7、启动、停止数据库(root用户)
1、启停及开机自启
systemctl start DmServiceDMSERVER.service
systemctl stop DmServiceDMSERVER.service
systemctl restart DmServiceDMSERVER.service
systemctl status DmServiceDMSERVER.service
systemctl enable DmServiceDMSERVER.service
systemctl is-enabled DmServiceDMSERVER.service
2、配置环境变量
vi /home/dmdba/.bash_profile
# DMDB
export DM_HOME=/home/dmdba/dm
export PATH=$PATH:$DM_HOME/bin
source /home/dmdba/.bash_profile
1.5.8、数据库目录结构
1、数据库安装目录
/home/dmdba/dmdbms/bin 目录存放 DM 数据库的可执行文件,例如 disql 命令、dminit 命令、dmrman 工具等。
/home/dmdba/dmdbms/desktop/icons 存放 DM 数据库各个工具的桌面图标。
/home/dmdba/dmdbms/doc 存放 DM 数据库用户手册。
/home/dmdba/dmdbms/drivers 存放连接 DM 数据库的驱动文件。
/home/dmdba/dmdbms/log 存放 DM 数据库日志,包括工具的日志、数据库日志、服务日志等。
/home/dmdba/dmdbms/samples 存放 DM 数据库各类配置文件的示例文件。
/home/dmdba/dmdbms/script/root 存放注册、注销 DM 数据库服务的工具,例如 dm_service_installer.sh 等。
/home/dmdba/dmdbms/tool 存放 DM 数据库的各个工具,例如 manager 管理工具、dbca 数据库配置助手等。
/home/dmdba/dmdbms/uninstall 目录存放卸载 DM 数据库的脚本。
/home/dmdba/dmdbms/web 目录存放 DM 数据库 dem 工具的 web 环境。
2、数据库实例目录
/data/dm/data 为数据库实例目录,该目录存放各个实例的文件。
以实例 DAMENG 为例,该目录下存放 DAMENG 实例的配置文件 *.ini、控制文件 dm.ctl、数据文件 *.DBF、日志文件 *.log 等。
1.6、
2、数据库操作
2.1、模式名、表空间、用户
- 表空间其实就相当于mysql的库概念,达梦是分配表空间,而mysql是新建数据库。mysql是在数据库里建表插入数据,达梦是在表空间里建表插入数据。
- 用户的模式(SCHEMA)指的是用户账号拥有的对象集,在概念上可将其看作是包含表、 视图、索引和权限定义的对象。
- 默认情况模式与用户相同
2.2、创建表空间,并绑定用户和表空间
1、登录
disql SYSDBA/\"Dmdb#2025\"@localhost:5236
disql ZHUGE_IO/\"zhugeIO#2025\"@localhost:5236
2、创建表空间,用户赋权限
-- 创建表空间
CREATE TABLESPACE SDKV DATAFILE '/data/dm/data/DAMENG/SDKV.DBF' SIZE 256 AUTOEXTEND ON NEXT 256 MAXSIZE 512;
--创建用户绑定表空间
create user "ZHUGE_IO" IDENTIFIED BY "zhugeIO#2025" default tablespace "SDKV" default index tablespace "SDKV";
-- 给用户赋权限
-- grant "DBA" to "ZHUGE_IO";
grant "PUBLIC", "RESOURCE", "SOI" to ZHUGE_IO;
grant SELECT ANY TABLE,CREATE SESSION ,CREATE TABLE,CREATE VIEW,CREATE INDEX,BACKUP DATABASE, INSERT TABLE, ALTER PROFILE, ALTER TABLE to ZHUGE_IO;
2.3、表空间
1、表空间操作
-- 查询所有表空间,需DBA权限
DROP TABLESPACE IF EXISTS SDKV;
DROP TABLESPACE 'SDKV';
DROP TABLESPACE "SDKV" INCLUDING CONTENTS;
SELECT "SDKV" FROM DBA_TABLESPACES;
SELECT TABLESPACE_NAME, STATUS, CONTENTS FROM DBA_TABLESPACES;
SELECT USERNAME, DEFAULT_TABLESPACE FROM DBA_USERS WHERE DEFAULT_TABLESPACE = 'SDKV';
SELECT TABLE_NAME FROM DBA_TABLES WHERE OWNER = 'ZHUGE_IO'; -- 将 'ZHUGE_IO' 替换为目标模式名
SELECT USERNAME, DEFAULT_TABLESPACE, TEMPORARY_TABLESPACE FROM DBA_USERS;
SELECT USERNAME FROM ALL_USERS;
ALTER USER "ZHUGE_IO" IDENTIFIED BY "zhgeIO#2025"; -- 修改密码
DROP USER "ZHUGE_IO" CASCADE; -- CASCADE级联删除用户对象
select * from DBA_USERS; -- 查询用户信息
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'ZHUGE_IO'; -- 查看用户权限
select * from DBA_TABLESPACES; -- 查看所有表空间
select * from DBA_DATA_FILES; -- 查看表空间数据文件信息
select ts.NAME, df.PATH from V$tablespace AS ts, V$DATAFILE AS df where ts.ID = df.GROUP_ID; --查询表空间与数据文件对应关系
2、用户操作
-- 查询当前用户有权限访问的表
SELECT TABLE_NAME, TABLESPACE_NAME FROM ALL_TABLES WHERE TABLESPACE_NAME = 'SDKV';
SELECT TABLESPACE_NAME, STATUS, CONTENTS FROM DBA_TABLESPACES;
SELECT SF_GET_UNICODE_FLAG(); -- 返回整数值
select UNICODE (); -- 查看字符集;0 表示 GB18030,1 表示 UTF-8,2 表示 EUC-KR
select SF_GET_PAGE_SIZE(); -- 查看页大小
2.4、管理表
https://eco.dameng.com/document/dm/zh-cn/pm/management-table.html#9.2.2%20%E6%8C%87%E5%AE%9A%E8%A1%A8%E7%9A%84%E8%81%9A%E9%9B%86%E7%B4%A2%E5%BC%95
2.5、创建表
1、T_ROLE表
CREATE TABLE "T_ROLE"
(
"ROLE_ID" INT IDENTITY(1, 1) NOT NULL,
"ROLE_NAME" VARCHAR(200) NOT NULL,
"ROLE_CODE" VARCHAR(200) NOT NULL,
"COMMENTS" VARCHAR(400),
"DELETED" INT DEFAULT 0 NOT NULL,
"TENANT_ID" INT DEFAULT 1 NOT NULL,
"CREATE_TIME" TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP NOT NULL,
"UPDATE_TIME" TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP NOT NULL,
NOT CLUSTER PRIMARY KEY("ROLE_ID")) ;
COMMENT ON TABLE "T_ROLE" IS '角色表';
COMMENT ON COLUMN "T_ROLE"."COMMENTS" IS '备注';
COMMENT ON COLUMN "T_ROLE"."CREATE_TIME" IS '创建时间';
COMMENT ON COLUMN "T_ROLE"."DELETED" IS '是否删除, 0否, 1是';
COMMENT ON COLUMN "T_ROLE"."ROLE_CODE" IS '角色标识';
COMMENT ON COLUMN "T_ROLE"."ROLE_ID" IS '角色id';
COMMENT ON COLUMN "T_ROLE"."ROLE_NAME" IS '角色名称';
COMMENT ON COLUMN "T_ROLE"."TENANT_ID" IS '租户id';
COMMENT ON COLUMN "T_ROLE"."UPDATE_TIME" IS '修改时间';
INSERT INTO T_ROLE(role_name,role_code,comments,deleted,tenant_id,create_time,update_time) VALUES ('管理员', 'admin', '管理员', 0, 1, '2020-02-26 15:18:37', '2020-03-21 15:15:54');
2、EMP表
create table emp (
id int,
name varchar(255) not null,
email varchar(255),
dept_id int,
hire_date date,
-- 定义主键
primary key (id),
-- 定义唯一键
constraint uk_dept unique (dept_id),
-- 联合唯一约束
constraint uk_id_dept unique (id,dept_id)
);
comment on table emp is '客户基本信息表';
comment on column emp.id is '员工id';
comment on column emp.name is '姓名';
comment on column emp.email is '邮箱';
comment on column emp.dept_id is '部门id';
comment on column emp.hire_date is '入职日期';
2.6、查看表
-- 查看当前用户
SELECT CURRENT_USER;
-- 查看是否存在 SDKV 模式
SELECT * FROM SYSOBJECTS WHERE NAME = 'ZHUGE_IO' AND TYPE$ = 'SCH';
-- 查看你是否有权限访问该模式下的表
SELECT * FROM ALL_TABLES WHERE OWNER = 'ZHUGE_IO';
-- 如果存在且有权限,切换模式
SET SCHEMA 'SDKV';
-- 查询建表语句
SP_TABLEDEF('ZHUGE_IO', 'T_ROLE');
-- 查看当前用户模式下的所有表
SELECT TABLE_NAME FROM USER_TABLES;
-- 使用 ALL_TABLES (适用于有权限访问的情况),将 'ZHUGE_IO' 替换为目标模式名
SELECT TABLESPACE_NAME as 表空间,OWNER as 模式名,TABLE_NAME as 表名,TABLE_LOCK as 是否允许锁定,STATUS as 表状态 FROM ALL_TABLES WHERE OWNER = 'ZHUGE_IO';
-- 查看表级别的注释
SELECT TABLE_NAME, COMMENTS FROM USER_TAB_COMMENTS WHERE TABLE_NAME = 'T_ROLE';
-- 查看列级别的注释
SELECT COLUMN_NAME, COMMENTS FROM USER_COL_COMMENTS WHERE TABLE_NAME = 'T_ROLE';
-- 获取列级别的注释
SELECT T.COLUMN_NAME, T.DATA_TYPE, C.COMMENTS
FROM USER_COL_COMMENTS C
JOIN USER_TAB_COLUMNS T ON C.COLUMN_NAME = T.COLUMN_NAME AND C.TABLE_NAME = T.TABLE_NAME
WHERE C.TABLE_NAME = 'T_ROLE';