达梦数据库安装指南
下载地址
https://eco.dameng.com/download/
安装步骤
创建安装用户和组
groupadd dinstall
useradd -s /bin/bash -m -d /home/dmdba -g dinstall dmdba
passwd dmdba
关闭SELinux
setenforce 0
vi /etc/selinux/config
-- 确保配置为:SELINUX=disabled
cat /etc/selinux/config |grep ^SELINUX=
创建配置文件
cat /etc/security/limits.d/dmdba.conf
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft nproc 4096
dmdba hard nproc 63653
dmdba soft core unlimited
dmdba hard core unlimited
验证ulimit参数 ulimit -n
创建安装目录(可选)
mkdir -p /opt/db/dm
chown -R dmdba:dinstall /opt/db/dm
chmod -R 775 /opt/db/dm
挂载ISO文件
mkdir -p /mnt/cdrom
mkdir -p /opt/dm8
mount /opt/dm8/dm8_20240712_HWarm920_kylin10_64.iso /mnt/cdrom
复制安装程序
cp /mnt/cdrom/DMInstall.bin /home/dmdba/
chown dmdba:dinstall /home/dmdba/DMInstall.bin
安装数据库
切换到dmdba用户:su - dmdba
图形化安装:./DMInstall.bin
命令行安装:./DMInstall.bin -i
安装选项:
跳过Key文件输入(默认一年有效期)
选择时区:[21]: GTM+08=中国标准时间
选择典型安装
指定安装目录(默认:$HOME/dmdbms)
确认安装前总结,输入y继续
安装完成后以root用户执行:
#完成系统级环境配置
sh /home/dmdba/dmdbms/script/root/root_installer.sh
#查看达梦辅助进程服务(DmAPService)的运行状态
systemctl status DmAPService.service
su - dmdba
cd $DM_HOME/bin
./dminit PATH=/home/dmdba/dmdbms/data EXTENT_SIZE=32 PAGE_SIZE=32 LOG_SIZE=2048 CASE_SENSITIVE=0 CHARSET=1 DB_NAME=DAMENG INSTANCE_NAME=DMSERVER PORT_NUM=5236
./dminit PATH=/home/dmdba/dmdbms/data EXTENT_SIZE=32 PAGE_SIZE=32 LOG_SIZE=2048 CASE_SENSITIVE=1 CHARSET=0 DB_NAME=DAMENG INSTANCE_NAME=DMSERVER PORT_NUM=5236 SYSDBA_PWD="SY_GZZXDA_test123" SYSAUDITOR_PWD="SY_GZZXDA_test123"
注册实例服务
su - root
cd /home/dmdba/dmdbms/script/root
./dm_service_installer.sh -t dmserver -p DAMENG -dm_ini /home/dmdba/dmdbms/data/DAMENG/dm.ini
#启动名为 DmServiceDAMENG 的数据库服务(即达梦数据库实例)
systemctl start DmServiceDAMENG
ps -ef|grep dm.ini
参数说明:
-t dmserver:设置服务类型为数据库主服务(dmserver为达梦数据库核心进程)
-p DAMENG:定义服务名称前缀为DAMENG,最终生成的服务名为DmServiceDAMENG(命名规则:固定前缀DmService+自定义后缀)
-dm_ini /home/dmdba/.../dm.ini:指定数据库实例的主配置文件路径(dm.ini),服务启动时将依据该文件加载实例配置参数
配置环境变量
su - dmdba
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/dmdba/dmdbms/bin"
export DM_HOME="/home/dmdba/dmdbms"
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool
source ~/.bash_profile
数据库操作
-- 登录数据库
disql / as SYSDBA(免密)
disql SYSDBA/SYSDBA
-- 查看版本信息
SELECT * FROM V$VERSION;
-- 设置schema
SET SCHEMA gddtjcxt;
-- 检查数据库状态1:数据库正在启动 2:启动redo完成 3:启动到mount状态 4:为open状态 5:数据库为挂起状态 6:数据库为关闭状态
select status$ from v$database;
--创建数据表空间
create tablespace test datafile '/data/dmdata/dmdb/test01.dbf' size 1024 autoextend on next 128 maxsize 10240;
-- 创建用户
CREATE USER DMDBA IDENTIFIED BY "My-123456" ; DEFAULT TABLESPACE "myspace" DEFAULT INDEX TABLESPACE "myspace";
-- 授权用户
GRANT "PUBLIC","RESOURCE","SOI","SVI","VTI" TO "DMDBA";
-- 连接测试
disql GZGJJAPI/L1qaz2wsx
常用运维语句
--查询用户信息
SELECT * FROM dba_users ORDER BY username;
SELECT * FROM SYSUSERS;
--合并查询
SELECT DBA_USERS.USERNAME, SYSUSERS.*
FROM SYSUSERS, DBA_USERS
WHERE SYSUSERS.ID=DBA_USERS.USER_ID;
--查询用户登录信息
SELECT * FROM V$SESSIONS;
--查看用户状态
SELECT * FROM SYS.DBA_USERS WHERE USERNAME = 'SY_GZZXDA_KF';
-- 查询兼容模式参数
SELECT NAME, VALUE, DESCRIPTION
FROM V$PARAMETER
WHERE NAME = 'COMPATIBLE_MODE';
--查询数据库配置参数值
SELECT
PARA_NAME 参数名,
PARA_VALUE 当前运行值,
FILE_VALUE 配置文件值
FROM V$DM_INI
WHERE PARA_NAME IN ('MAX_SESSIONS','RLOG_FLUSH_OPT','RLOG_FLUSH_PAGES','RLOG_IO_CTRL');
-- 获取当前最大会话数设置
SELECT sf_get_para_value(2, 'MAX_SESSIONS');
--sf_get_para_value (1, 参数名) → 查dm.ini 文件值(配置文件里的)
--sf_get_para_value (2, 参数名) → 查内存运行值
-- 设置最大会话数为500
SP_SET_PARA_VALUE(0, 'MAX_SESSIONS', 10000);
--0:仅修改内存,重启失效;仅支持动态参数
--1:修改 当前运行值 + 写入配置文件 立即生效
--2:仅修改配置文件(不修改当前运行值)重启才生效
-- 查询所有空闲会话
SELECT * FROM V$SESSIONS WHERE STATE = 'IDLE';
-- 查询各会话信息
SELECT
COUNT(*) AS 总连接数,
SUM(CASE WHEN STATE = 'IDLE' THEN 1 ELSE 0 END) AS 空闲连接数,
SUM(CASE WHEN STATE = 'ACTIVE' THEN 1 ELSE 0 END) AS 活跃连接数,
(COUNT(*) - SUM(CASE WHEN STATE = 'IDLE' THEN 1 ELSE 0 END)) AS 已使用连接数
FROM V$SESSIONS;
--查询历史sql
SELECT * from V$SQL_HISTORY;
--查询数据库模式与状态
SELECT MODE$, STATUS$ FROM V$INSTANCE;
-- 修改数据库状态
ALTER DATABASE OPEN; -- 打开数据库
ALTER DATABASE MOUNT FORCE; -- 挂载数据库
| 状态名称 | 英文名称 | 序号 (STATUS$) | 简要说明 |
| 关闭状态 | SHUTDOWN | 6 | 数据库实例已关闭,未运行。 |
| 启动状态 | STARTUP | 1 | 数据库正在启动过程中。 |
| 配置状态 | MOUNT | 3 | 已启动实例,但数据文件未打开。用于修改归档、转换模式等维护操作,不提供数据库服务。 |
| 打开状态 | OPEN | 4 | 数据库正常运行,对外提供完整的数据库服务。 |
| 挂起状态 | SUSPEND | 5 | 数据库可读可写,但限制 Redo 日志刷盘。一旦有操作触发写盘,该会话将被挂起。 |
补充说明:`STATUS$` 为 2 的状态是“启动重做完成”(AFTER REDO),这是一个启动过程中的中间状态,通常不能人工干预切换。
| 模式名称 | 英文名称 | 简要说明 | 默认启动状态 |
| 普通模式 | NORMAL | 用户可以正常访问数据库,无特殊限制。不参与主备同步。 | OPEN |
| 主库模式 | PRIMARY | 集群中的主数据库,处理所有读写操作,并生成 Redo 日志发送给备库。 | MOUNT |
| 备库模式 | STANDBY | 集群中的备数据库,接收并重做来自主库的 Redo 日志,提供只读服务。 | MOUNT |
--查询锁事项
SELECT * FROM V$SESSIONS WHERE trx_id in (SELECT id FROM V$TRXWAIT);
--查询未提交事项
SELECT * FROM V$SESSIONS where trx_id ='44114996';
SELECT
s.SESS_ID,
s.USER_NAME,
s.CREATE_TIME,
s.LAST_RECV_TIME,
s.STATE AS SESSION_STATE,
t.ID AS TRX_ID,
t.STATUS AS TRX_STATUS
FROM V$SESSIONS s
JOIN V$TRX t ON s.TRX_ID = t.ID
WHERE t.STATUS = 'ACTIVE' -- 筛选出“活跃”的事务
AND s.STATE = 'IDLE'; -- 通常,空闲会话但有活跃事务,就是可疑的未提交会话
--合并使用(核心)
SELECT * FROM V$SESSIONS where trx_id in (SELECT t.ID FROM V$SESSIONS s
JOIN V$TRX t ON s.TRX_ID = t.ID WHERE t.STATUS = 'ACTIVE' AND s.STATE = 'IDLE' );
--查询阻塞会话
SELECT * FROM V$SESSIONS WHERE trx_id in (SELECT id FROM V$TRXWAIT);
--关闭阻塞会话
CALL SP_KILL_SESSION(1245963096);--(早期版本)
sp_close_session(281463368385784);--(新版本)
--生成批量关闭会话的命令
SELECT 'SP_CLOSE_SESSION(' || SESS_ID || ', ' || SESS_SEQ || ');' AS KILL_COMMAND
FROM V$SESSIONS
WHERE trx_id IN (SELECT id FROM V$TRXWAIT);
--查询模式下各表大小
SELECT
t.TABLE_NAME,
s.BYTES / 1024 / 1024 / 1024 AS TABLE_SIZE_GB
FROM
ALL_TABLES t
JOIN DBA_SEGMENTS s ON t.TABLE_NAME = s.SEGMENT_NAME
AND t.OWNER = s.OWNER
AND s.SEGMENT_TYPE = 'TABLE' WHERE
t.OWNER = 'ZHFWPT_DSP' order by TABLE_SIZE_GB desc;
--查询表数据量条数
SELECT
TABLE_NAME AS 表名,
TABLE_ROWCOUNT('ZHFWPT_DSP', TABLE_NAME) AS 数据条数
FROM DBA_TABLES
WHERE OWNER = 'ZHFWPT_DSP'
ORDER BY 数据条数 DESC;
常用目录配置文件解析
1、核心目录结构
达梦数据库的安装目录(DM_HOME)是系统的基础目录,其子目录按功能划分如下:
目录路径 功能说明
DM_HOME/bin 核心执行程序目录,包含dmserver、disql、dmctl等关键工具
DM_HOME/conf 默认配置文件存放处,如dm.ini、dmmal.ini等模板文件
DM_HOME/data 数据库物理文件存储区(安装时可自定义路径),包含数据文件和日志文件等
DM_HOME/log 系统日志存储目录,记录服务日志和错误日志(部分路径可配置)
DM_HOME/script 数据库脚本文件存放处,包括初始化脚本dm_init.sql和集群部署脚本
DM_HOME/drivers 数据库驱动目录,提供JDBC(dmjdbc8.jar)、ODBC等应用程序连接所需的驱动
DM_HOME/tool 图形化管理工具存放处(Windows环境下常见manager和console等工具)
DM_HOME/include C/C++开发头文件目录(如dmdb.h),支持数据库应用开发
2、常用配置文件解析
达梦数据库主要使用.ini格式的配置文件,核心文件包括:
- 主配置文件:dm.ini
功能:定义数据库实例的核心运行参数
位置:实例数据目录(如DM_HOME/data/DAMENG/dm.ini)
关键参数:
INSTANCE_NAME:实例名称(默认DAMENG)
PORT_NUM:服务端口(默认5236)
MAX_OS_MEMORY:最大内存占比(默认80%)
SVR_LOG:服务日志路径(默认../log/dmserver.log)
CHARSET:字符集设置(0=GBK,1=UTF-8)
BUFFER:数据缓冲区大小(默认100MB)
- 集群配置文件:dmmal.ini
功能:配置数据守护集群或MPP集群的节点通信
位置:实例数据目录(需手动创建)
配置示例:
[MAL_INST1]
MAL_INST_NAME = DM1
MAL_HOST = 192.168.1.101
MAL_PORT = 61141
- 归档日志配置文件:dmarch.ini
功能:定义归档日志存储策略
位置:实例数据目录(需手动创建)
配置示例:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL # 归档类型
ARCH_DEST = ../arch # 存储路径
ARCH_FILE_SIZE = 1024 # 单文件大小(MB)
ARCH_SPACE_LIMIT = 0 # 空间限制(0表示无限制)
- 服务启动配置文件:dm_service.conf
功能:定义数据库服务启动参数
位置:DM_HOME/bin或实例数据目录
关键参数:
SERVICE_NAME:服务名称(如DmServiceDAMENG)
INSTANCE_DIR:实例数据目录
USER:启动用户(如dmdba)
3、配置文件使用指南
生效方式
多数参数需重启生效(如PORT_NUM)
动态参数可通过disql在线修改(ALTER SYSTEM SET...)
路径配置
建议使用绝对路径避免混淆
数据文件路径可通过dminit工具初始化时指定
集群配置
确保dmmal.ini配置各节点一致
主从集群需保证归档日志可访问
日志文件
dmserver.log:主运行日志
dmarch.log:归档操作日志
alert.log:关键事件告警日志(部分版本合并到dmserver.log)
[MAL_INST1]
MAL_INST_NAME = DAMENG1 # 实例名
MAL_HOST = 192.168.1.101 # 节点IP
MAL_PORT = 5336 # MAL通信端口(与服务端口不同)
[MAL_INST2]
MAL_INST_NAME = DAMENG2
MAL_HOST = 192.168.1.102
MAL_PORT = 5336
各日志文件的分类解析:
| 日志类型 | 代表文件示例 | 功能说明 |
|---|---|---|
| 备份恢复日志 | dm_BAKRES_202508.log | 记录数据库备份(如全量、增量备份)、恢复操作的结果、进度和异常信息。 |
| DmAP 服务日志 | dm_dmap_202508.log dm_dmap_br_202508.log | DmAP(达梦应用平台服务)的运行日志,_br 可能是备份相关的子模块日志,记录服务启动、通信、任务执行等信息。 |
| 守护进程/集群日志 | dm_dmwatcher_GRP1_DW_01_202508.log dm_GRP1_DW_01_202508.log DmWatcherServiceGRP1_err.logDmWatcherServiceGRP1.log | 主备集群中守护进程(DmWatcher)的日志,记录集群状态监控、故障切换、主备同步等集群管理相关信息。_err.log 是错误日志,log 是常规运行日志 |
| 工具操作日志 | dm_dmrman_202508.log dmmonitor_20250814170209.log | dmrman 是达梦备份恢复管理工具的日志;dmmonitor 是监控工具日志,记录监控任务、性能数据采集等信息。 |
| 数据库服务日志 | DmServicedmdb_err.log DmServicedmdb.log | 达梦数据库服务(DmService)的运行日志,_err 是错误日志,记录服务启动、运行中的报错;普通日志记录常规运行信息。 |
| 其他服务日志 | DmAPService_err.log DmAPService.log dmsvc_sh.log | DmAPService 是达梦应用平台的服务日志;dmsvc_sh.log 可能是服务脚本执行日志,记录服务启停等脚本操作信息。 |
| 归档日志 | ARCHIVE_LOCAL1xxx STANDBY_ARCHIVE_xxx | ARCHIVE_LOCAL1xxx 主库本地归档日志,记录主数据库的事务日志归档信息,用于主库的事务恢复和数据一致性保障;STANDBY_ARCHIVE_xxx 备库归档日志,用于主备集群环境下,备库接收并归档主库同步的事务日志,保障主备数据同步和备库的恢复能力。 |
| 安装日志 | install_ant.log install.log | 达梦数据库安装日志,记录数据库安装过程中的操作、组件部署、配置等信息,用于排查安装过程中的问题。。 |
| 其他日志 | dmsvc_sh.log dm_unknown_202508.log | dmsvc_sh.log 达梦服务脚本执行日志,记录数据库服务启停等脚本操作信息;dm_unknown_202508.log 可能是系统中某个未明确分类的组件运行日志。 |
这些日志覆盖了达梦数据库的备份恢复、集群管理、服务运行、工具操作等核心场景,是排查数据库故障、监控系统状态的关键依据。例如,若集群状态异常,可重点查看
dm_dmwatcher和dm_GRP开头的日志;若备份失败,可分析dm_BAKRES系列日志。
SQL 查询与操作语句
1. 数据库信息查询
实例信息查询
SELECT '实例名称' 数据库选项, INSTANCE_NAME 数据库集群相关参数值 FROM v$instance
UNION ALL
SELECT '数据库授权码', (SELECT SERIES_NO FROM V$LICENSE)
UNION ALL
SELECT '数据库有效期', CAST((SELECT EXPIRED_DATE FROM V$LICENSE) AS VARCHAR)
UNION ALL
SELECT '授权客户', (SELECT AUTHORIZED_CUSTOMER FROM V$LICENSE)
UNION ALL
SELECT '数据库版本', SUBSTR(svr_version, INSTR(svr_version,'(')) FROM v$instance
UNION ALL
SELECT '数据库版本小号', (SELECT id_code) FROM v$instance
UNION ALL
SELECT '数据库实例路径', (SELECT PARA_VALUE FROM v$dm_ini WHERE para_name LIKE '%SYSTEM_PATH%') FROM v$instance
UNION ALL
SELECT '字符集',
CASE SF_GET_UNICODE_FLAG()
WHEN '0' THEN 'GBK18030'
WHEN '1' THEN 'UTF-8'
WHEN '2' THEN 'EUC-KR'
END
UNION ALL
SELECT '页大小', CAST(PAGE()/1024 AS VARCHAR)
UNION ALL
SELECT '簇大小', CAST(SF_GET_EXTENT_SIZE() AS VARCHAR)
UNION ALL
SELECT '大小写敏感', CAST(SF_GET_CASE_SENSITIVE_FLAG() AS VARCHAR)
UNION ALL
SELECT '数据库模式', MODE$ FROM v$instance
UNION ALL
SELECT '唯一魔数', CAST(permanent_magic AS VARCHAR)
UNION ALL
SELECT 'LSN', CAST(cur_lsn AS VARCHAR) FROM v$rlog
UNION ALL
SELECT 'BLANK_PAD_MODE', CAST(BLANK_PAD_MODE() AS VARCHAR);
归档日志查询
-- 查看归档配置详情
SELECT ARCH_NAME, ARCH_TYPE, ARCH_DEST, ARCH_FILE_SIZE, ARCH_SPACE_LIMIT
FROM V$DM_ARCH_INI;
-- 查看归档日志状态
SELECT NAME, FIRST_TIME, NEXT_TIME, STATUS
FROM V$ARCHIVED_LOG;
-- 查看错误信息
SELECT ERROR_CODE, ERROR_MESSAGE FROM V$ARCHIVE_DEST_STATUS;
-- 重启归档进程
ALTER DATABASE ARCHIVELOG RESUME DEST 'ARCHIVE_REALTIME1';
-- 删除7天前归档
SF_ARCHIVELOG_DELETE_BEFORE_TIME(SYSDATE-7);
归档配置详情配置参数详解
- ARCHIVE_LOCAL1 (本地归档)
| 参数 | 值 | 说明 |
|---|---|---|
| ARCH_TYPE | LOCAL | 本地归档类型(自主管理归档文件) |
| ARCH_DEST | /data/dmdata/dmarch/dmdb | 归档文件存储路径(本地文件系统) |
| ARCH_FILE_SIZE | 2048(MB) = 2GB | 单个归档文件最大容量(超过此大小将创建新文件) |
| ARCH_SPACE_LIMIT | 102400(MB) = 100GB | 归档目录总容量限制(达到此限制将触发空间清理) |
- ARCHIVE_REALTIME1 (实时归档)
| 参数 | 值 | 说明 |
|---|---|---|
| ARCH_TYPE | REALTIME | 实时归档类型(用于主备集群数据同步) |
| ARCH_DEST | GRP1_DW_02 | 目标实例名称(接收实时归档的备库) |
| ARCH_FILE_SIZE | NULL | 不适用(实时归档直接传输REDO日志,不生成文件) |
| ARCH_SPACE_LIMIT | NULL | 不适用(无本地存储空间限制) |
数据库配置查询
-- 查询兼容模式参数
SELECT NAME, VALUE, DESCRIPTION
FROM V$PARAMETER
WHERE NAME = 'COMPATIBLE_MODE';
-- 获取当前最大会话数设置
SELECT sf_get_para_value(2, 'MAX_SESSIONS');
-- 设置最大会话数为500
SP_SET_PARA_VALUE(2, 'MAX_SESSIONS', 500);
-- 查询所有空闲会话
SELECT * FROM V$SESSIONS WHERE STATE = 'IDLE';
-- 查询各会话信息
SELECT
COUNT(*) AS 总连接数,
SUM(CASE WHEN STATE = 'IDLE' THEN 1 ELSE 0 END) AS 空闲连接数,
SUM(CASE WHEN STATE = 'ACTIVE' THEN 1 ELSE 0 END) AS 活跃连接数,
(COUNT(*) - SUM(CASE WHEN STATE = 'IDLE' THEN 1 ELSE 0 END)) AS 已使用连接数
FROM V$SESSIONS;
--查询历史sql
SELECT * from V$SQL_HISTORY
--查询数据库模式与状态
SELECT MODE$, STATUS$ FROM V$INSTANCE;
-- 修改数据库状态
ALTER DATABASE OPEN; -- 打开数据库
ALTER DATABASE MOUNT FORCE; -- 挂载数据库
| 状态名称 | 英文名称 | 序号 (STATUS$) | 简要说明 |
| 关闭状态 | SHUTDOWN | 6 | 数据库实例已关闭,未运行。 |
| 启动状态 | STARTUP | 1 | 数据库正在启动过程中。 |
| 配置状态 | MOUNT | 3 | 已启动实例,但数据文件未打开。用于修改归档、转换模式等维护操作,不提供数据库服务。 |
| 打开状态 | OPEN | 4 | 数据库正常运行,对外提供完整的数据库服务。 |
| 挂起状态 | SUSPEND | 5 | 数据库可读可写,但限制 Redo 日志刷盘。一旦有操作触发写盘,该会话将被挂起。 |
补充说明:`STATUS$` 为 2 的状态是“启动重做完成”(AFTER REDO),这是一个启动过程中的中间状态,通常不能人工干预切换。
| 模式名称 | 英文名称 | 简要说明 | 默认启动状态 |
| 普通模式 | NORMAL | 用户可以正常访问数据库,无特殊限制。不参与主备同步。 | OPEN |
| 主库模式 | PRIMARY | 集群中的主数据库,处理所有读写操作,并生成 Redo 日志发送给备库。 | MOUNT |
| 备库模式 | STANDBY | 集群中的备数据库,接收并重做来自主库的 Redo 日志,提供只读服务。 | MOUNT |
2. 表空间信息
表空间详情
SELECT
C."ID" "表空间 ID",
C."NAME" "表空间名称",
CASE
WHEN C."TYPE$"='1' THEN 'DB 类型'
WHEN C."TYPE$"='2' THEN '临时表空间'
END "表空间类型",
CASE
WHEN C."STATUS$"='0' THEN 'ONLINE'
WHEN C."STATUS$"='1' THEN 'OFFLINE'
WHEN C."STATUS$"='2' THEN 'RES_OFFLINE'
WHEN C."STATUS$"='3' THEN 'CORRUPT'
END "状态",
C."TOTAL_SIZE"*page/1024/1024||'M' "总大小",
C."FILE_NUM" "包含的文件数",
C."ENCRYPT_NAME" "加密算法名",
C."ENCRYPTED_KEY" "加密密钥",
D.used_per ||'%' "表空间使用率"
FROM V$TABLESPACE c
JOIN (
SELECT
a.id,
100-(SUM(b.free_size)*100/SUM(b.total_size)) used_per
FROM V$TABLESPACE a,
V$DATAFILE b
WHERE a.id=b.GROUP_ID
GROUP BY a.id
) d ON c.id=d.id
ORDER BY c.id;
表空间操作
--表空间查询
select * from v$tablespace;
select path from v$datafile;
--查询用户表空间信息
select username,user_id,default_tablespace,default_index_tablespace
from dba_users;
--创建数据表空间
create tablespace test datafile '/data/dmdata/dmdb/test01.dbf' size 1024 autoextend on next 128 maxsize 10240;
--给表空间新增文件
alter tablespace test add datafile '/data/dmdata/dmdb/test02.dbf' size 128 autoextend on next 128 maxsize 10240;
--修改文件最大空间大小
ALTER DATABASE MODIFY DATAFILE '/data/dmdata/dmdb/test01.dbf' MAXSIZE 20480;
--设置用户的默认表空间
alter user test default tablespace test;
alter user test default index tablespace test_index;
--创建索引表空间
create tablespace test_index datafile '/data/dmdata/dmdb/test_index01.dbf' size 128 autoextend on next 128 maxsize 10240;
-- 查询特定表空间下的所有表(示例)
SELECT 'DROP TABLE "' || OWNER || '"."' || TABLE_NAME || '";' AS drop_stmt
FROM DBA_TABLES
WHERE TABLESPACE_NAME = 'MYSPACE';
-- 查询表空间状态(0:联机, 1:脱机)
SELECT tablespace_name, status FROM dba_tablespaces
WHERE tablespace_name = 'MYSPACE';
-- 修改表空间状态
ALTER TABLESPACE myspace OFFLINE; -- 离线
ALTER TABLESPACE myspace ONLINE; -- 在线
表空间清理
-- 在线重建索引,业务不中断
ALTER INDEX 索引名 REBUILD ONLINE;
-- 查询指定用户下所有分区表段信息
SELECT * FROM DBA_SEGMENTS WHERE OWNER='SY_GZZXDA_KF' AND SEGMENT_TYPE='TABLE PARTITION';
-- 查询SHINEYUE40表空间总容量、已用、空闲及使用率
SELECT
df.tablespace_name AS 表空间名,
df.bytes/1024/1024 AS 文件总大小_MB,
(df.bytes-fs.bytes)/1024/1024 AS 已用_MB,
fs.bytes/1024/1024 AS 空闲_MB,
ROUND(100*(df.bytes-fs.bytes)/df.bytes) AS 使用率_百分比
FROM
(SELECT tablespace_name, SUM(bytes) bytes
FROM dba_data_files
WHERE tablespace_name='SHINEYUE40'
GROUP BY tablespace_name) df,
(SELECT tablespace_name, SUM(bytes) bytes
FROM dba_free_space
WHERE tablespace_name='SHINEYUE40'
GROUP BY tablespace_name) fs;
-- 查询指定表空间下所有段对象大小,按占用空间倒序
SELECT
t.OWNER,
t.SEGMENT_NAME,
t.SEGMENT_TYPE,
t.BYTES/1024/1024 AS SIZE_MB,
t.BYTES/1024/1024/1024 AS SIZE_GB
FROM DBA_SEGMENTS t
WHERE t.TABLESPACE_NAME = 'SHINEYUE40' -- 换成上一步查到的表空间名
ORDER BY t.BYTES DESC;
-- 查询SHINEYUE40表空间内占用空间最大的前5张普通表
SELECT OWNER, SEGMENT_NAME, ROUND(BYTES/1024/1024,2) AS SIZE_MB
FROM DBA_SEGMENTS
WHERE SEGMENT_TYPE='TABLE'
AND TABLESPACE_NAME='SHINEYUE40'
order by SIZE_MB desc
LIMIT 5;
-- 查询指定用户下所有表的数据总行数,按数据量倒序
SELECT
TABLE_NAME AS 表名,
TABLE_ROWCOUNT('SY_GZZXDA_KF', TABLE_NAME) AS 数据条数
FROM DBA_TABLES
WHERE OWNER = 'SY_GZZXDA_KF'
ORDER BY 数据条数 DESC;
-- 直接删除分区表并永久清除,不进入回收站
DROP TABLE SY_GZZXDA_KF.EAMS_SMZLMXNEW PURGE;
-- 清理 SHINEYUE40 表空间的回收站
PURGE TABLESPACE SHINEYUE40;
-- 也可以直接清整个数据库的回收站(如果其他表空间也有)
PURGE RECYCLEBIN;
3. 表数据查询
表数据大小
-- 查询指定模式下所有表数据大小(MB)
SELECT
SEGMENT_NAME AS TABLE_NAME,
ROUND(SUM(BYTES) / 1024 / 1024, 2) AS TABLE_SIZE_MB
FROM
DBA_SEGMENTS
WHERE
OWNER = 'APP_ZS'
AND SEGMENT_TYPE = 'TABLE'
GROUP BY
SEGMENT_NAME
ORDER BY
TABLE_SIZE_MB DESC;
约束查询
--检查约束
SELECT * FROM ALL_CONSTRAINTS WHERE CONSTRAINT_NAME = 'T_DA_WSGD_PK';
--删除约束
ALTER TABLE "SY_GZZXDA_KF"."T_DA_WSGD" DROP CONSTRAINT "T_DA_WSGD_PK";
--修改约束
ALTER TABLE T_ER_SRCLIST RENAME CONSTRAINT T_ER_SRCLIST_ID TO T_ER_SRCLISTbak;
--约束查询
SELECT
con.constraint_name,
con.constraint_type
FROM
all_constraints con
JOIN
all_cons_columns col
ON
con.constraint_name = col.constraint_name
WHERE
con.owner = 'WXWEB'
AND con.table_name = 'JC_SITE_ACCESS_COUNT_HOUR';
--查询概要文件信息(包括密码策略、会话资源限制、连接限制等安全和资源管理相关的参数。)
SELECT * FROM DBA_PROFILES;
--查询GLOBAL_STR_CASE_SENSITIVE参数
SELECT * FROM v$parameter
WHERE name = 'GLOBAL_STR_CASE_SENSITIVE';
#检查当前会话的字符串大小写敏感性
SELECT case_sensitive() FROM dual;
达梦查询表数据量
SELECT
TABLE_NAME AS 表名,
TABLE_ROWCOUNT('SY_GZZXDA_KF', TABLE_NAME) AS 数据条数
FROM DBA_TABLES
WHERE OWNER = 'SY_GZZXDA_KF'
ORDER BY 数据条数 DESC;
-- 生成查询所有表数据量的SQL
SELECT 'SELECT ''' || TABLE_NAME || ''' AS 表名, COUNT(*) AS 数据条数 FROM APP_ZS.' || TABLE_NAME || ' UNION ALL'
FROM DBA_TABLES
WHERE OWNER = 'APP_ZS';
--查询日志表接口调用数量排名
SELECT reqFwurl, COUNT(*) AS cnt
FROM dsp_req_log
GROUP BY reqFwurl
ORDER BY cnt DESC;
-- 创建存储表统计结果的临时表
CREATE GLOBAL TEMPORARY TABLE TEMP_TABLE_COUNTS
(
TABLE_NAME VARCHAR(128),
ROW_COUNT BIGINT
) ON COMMIT PRESERVE ROWS;
-- 插入统计结果
BEGIN
FOR tbl IN (SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'ZH_DZJICHA') LOOP
DECLARE
v_count BIGINT;
v_sql VARCHAR(1000);
BEGIN
v_sql := 'SELECT COUNT(*) FROM ZH_DZJICHA."' || tbl.TABLE_NAME || '"';
EXECUTE IMMEDIATE v_sql INTO v_count;
INSERT INTO TEMP_TABLE_COUNTS VALUES (tbl.TABLE_NAME, v_count);
END;
END LOOP;
COMMIT;
END;
/
-- 查询统计结果
SELECT
TABLE_NAME AS 表名,
ROW_COUNT AS 记录数
FROM TEMP_TABLE_COUNTS
ORDER BY ROW_COUNT DESC;
-- 清理临时表
DROP TABLE TEMP_TABLE_COUNTS;
未提交与会话锁查询
--查询锁事项
SELECT * FROM V$SESSIONS WHERE trx_id in (SELECT id FROM V$TRXWAIT);
--查询未提交事项
SELECT * FROM V$SESSIONS where trx_id ='44114996';
SELECT
s.SESS_ID,
s.USER_NAME,
s.CREATE_TIME,
s.LAST_RECV_TIME,
s.STATE AS SESSION_STATE,
t.ID AS TRX_ID,
t.STATUS AS TRX_STATUS
FROM V$SESSIONS s
JOIN V$TRX t ON s.TRX_ID = t.ID
WHERE t.STATUS = 'ACTIVE' -- 筛选出“活跃”的事务
AND s.STATE = 'IDLE'; -- 通常,空闲会话但有活跃事务,就是可疑的未提交会话
--合并使用(核心)
SELECT * FROM V$SESSIONS where trx_id in (SELECT t.ID FROM V$SESSIONS s
JOIN V$TRX t ON s.TRX_ID = t.ID WHERE t.STATUS = 'ACTIVE' AND s.STATE = 'IDLE' )
-- 查看所有活动会话及执行的SQL
SELECT
SESS_ID,
USER_NAME,
STATE,
SUBSTR(SQL_TEXT, 1, 200) AS "SQL片段",
TRX_ID,
SYSDATE - CREATE_TIME AS "会话持续时间"
FROM V$SESSIONS
WHERE USER_NAME = 'SY_GZZXDA_KF'
AND STATE = 'ACTIVE'
ORDER BY CREATE_TIME;
-- 捕获正在运行的慢SQL:
SELECT
SESS_ID,
USER_NAME,
SYSDATE - LAST_SEND_TIME AS "已执行秒数",
SF_GET_SESSION_SQL(SESS_ID) AS "SQL"
FROM V$SESSIONS
WHERE USER_NAME = 'SY_GZZXDA_KF'
AND STATE = 'ACTIVE'
AND (SYSDATE - LAST_SEND_TIME) * 24 * 3600 > 0;
关键字查询与添加白名单
-- 添加关键字到白名单
SP_SET_PARA_STRING_VALUE(2,'EXCLUDE_RESERVED_WORDS','DOMAIN');
-- 查询关键字白名单
SELECT PARA_VALUE,FILE_VALUE FROM V$DM_INI WHERE PARA_NAME='EXCLUDE_RESERVED_WORDS';
4. 用户与数据库操作
4.1 用户管理
4.1.1 用户信息查询
--查询用户信息
SELECT * FROM dba_users ORDER BY username;
SELECT * FROM SYSUSERS;
--合并查询
SELECT DBA_USERS.USERNAME, SYSUSERS.*
FROM SYSUSERS, DBA_USERS
WHERE SYSUSERS.ID=DBA_USERS.USER_ID;
--查询用户登录信息
SELECT * FROM V$SESSIONS;
--查看用户状态
SELECT * FROM SYS.DBA_USERS WHERE USERNAME = 'SY_GZZXDA_KF';
4.1.2 用户操作管理
-- 创建用户
CREATE USER DMDBA IDENTIFIED BY "My-123456" DEFAULT TABLESPACE "myspace" DEFAULT INDEX TABLESPACE "myspace";
-- 授权用户
GRANT "PUBLIC","RESOURCE","SOI","SVI","VTI" TO "DMDBA";
-- 解锁用户
ALTER USER SY_GZZXDA_KF ACCOUNT UNLOCK;
-- 修改用户默认表空间
ALTER USER "DMDBA" DEFAULT TABLESPACE "MAIN";
-- 修改用户密码
ALTER USER GDSJGXPT IDENTIFIED BY "My-123456";
4.1.3 密码安全策略
修改达梦数据库密码策略
-- 修改密码策略(需要重启数据库生效)
ALTER SYSTEM SET 'PWD_POLICY' = 15 BOTH;
-- 或者使用存储过程(使用存储过程方式修改参数时,第一个参数1表示立即生效,0表示延迟生效。)
SP_SET_PARA_VALUE(1, 'PWD_POLICY', 15);
密码策略值采用位掩码方式:
1:密码不能与用户名相同
2:密码长度不小于9个字符
4:密码必须包含大写字母(A-Z)
8:密码必须包含数字(0-9)
16 (2^4): 密码必须包含特殊字符
31:启用所有检查(1+2+4+8+16)
查询密码有效期相关参数
--查看当前密码策略
SELECT * FROM V$DM_INI WHERE PARA_NAME = 'PWD_POLICY';
--查询密码有效期
SELECT DBA_USERS.USERNAME, SYSUSERS.PWD_POLICY, SYSUSERS.LIFE_TIME,DBA_USERS.ACCOUNT_STATUS
FROM SYSUSERS, DBA_USERS
WHERE SYSUSERS.ID=DBA_USERS.USER_ID;
4.2 数据库操作
-- 删除用户及关联模式
DROP USER GDSJGXPT CASCADE;
-- 生成删除所有表的SQL
SELECT 'DROP TABLE GDSJGXPT.' || TABLE_NAME || ' CASCADE CONSTRAINTS;'
FROM DBA_TABLES
WHERE OWNER = 'GDSJGXPT';
-- 移除表中「标识列(自增列)」的自增属性
ALTER TABLE "GDDTJCXT"."BM_SQJG" DROP IDENTITY;
--新增列 + 自增 + 非空 + 主键
ALTER TABLE "GDSJGXPT"."BM_SQJG"
ADD COLUMN "列名" BIGINT IDENTITY(1,1) NOT NULL PRIMARY KEY;
--开启目标表的「标识列手动插入开关」,允许你主动给自增列(IDENTITY 列)赋值
SET IDENTITY_INSERT "GDSJGXPT"."BM_SQJG" ON;--OFF
密码策略与资源限制
-- 创建表空间
CREATE TABLESPACE "dzjc" DATAFILE '/data/dmdata/dmdb/dzjc.DBF' SIZE 2048;
-- 创建用户并设置默认表空间
CREATE USER dzjc IDENTIFIED BY "My-123456"
DEFAULT TABLESPACE "main"
DEFAULT INDEX TABLESPACE "main";
-- 授予用户权限
GRANT "PUBLIC","RESOURCE","SOI","SVI","VTI" TO "dzjc";
-- 连接数据库
disql SYSDBA/'"Hn@dameng123"'
-- 设置用户资源限制
ALTER USER APP_ZS LIMIT
CPU_PER_SESSION 100000,
CPU_PER_CALL 10000,
MEM_SPACE 1024,
READ_PER_SESSION 100000,
READ_PER_CALL 10000,
PASSWORD_LIFE_TIME 90,
PASSWORD_GRACE_TIME 20,
CONNECT_IDLE_TIME 15,
FAILED_LOGIN_ATTEMPTS 15,
PASSWORD_LOCK_TIME 15;
ALTER USER SYS LIMIT
CPU_PER_SESSION 100000,
CPU_PER_CALL 10000,
MEM_SPACE 1024,
READ_PER_SESSION 100000,
READ_PER_CALL 10000,
PASSWORD_LIFE_TIME 90,
PASSWORD_GRACE_TIME 20,
CONNECT_IDLE_TIME 15,
FAILED_LOGIN_ATTEMPTS 15,
PASSWORD_LOCK_TIME 15;
ALTER USER SYSDBA LIMIT
CPU_PER_SESSION 100000,
CPU_PER_CALL 10000,
MEM_SPACE 1024,
READ_PER_SESSION 100000,
READ_PER_CALL 10000,
PASSWORD_LIFE_TIME 90,
PASSWORD_GRACE_TIME 20,
CONNECT_IDLE_TIME 15,
FAILED_LOGIN_ATTEMPTS 15,
PASSWORD_LOCK_TIME 15;
一、资源限制参数(控制用户对系统资源的使用)
CPU_PER_SESSION 100000:限制用户一个会话(Session) 可使用的总 CPU 时间,单位为百分之一秒(即 100000 = 1000 秒 ≈ 16.7 分钟)
CPU_PER_CALL 10000:限制用户单次调用(Call,如一条 SQL 语句或存储过程执行) 可使用的 CPU 时间,防止单个复杂操作(如全表扫描、低效查询)长时间占用 CPU
MEM_SPACE 1024:限制用户会话可使用的内存空间,单位通常为 KB(即 1024 KB = 1 MB),控制用户对内存资源的占用,避免内存耗尽
READ_PER_SESSION 100000:限制用户一个会话可读取的数据块(Data Block)总数(100000 块),防止单个会话通过大量读操作消耗 I/O 资源
READ_PER_CALL 10000:限制用户单次调用可读取的数据块总数(10000 块),控制单个 SQL 语句的 I/O 消耗,避免低效查询占用过多磁盘资源
CONNECT_IDLE_TIME 15:限制用户会话的最大空闲时间,单位为分钟(15 分钟),若会话超过 15 分钟未活动,系统会自动断开连接,释放资源
二、密码策略参数(控制用户密码的安全规则)
PASSWORD_LIFE_TIME 90:密码的有效期为 90 天
ALTER USER SYSDBA LIMIT PASSWORD_LIFE_TIME UNLIMITED;:不限制有效期
PASSWORD_GRACE_TIME 20:密码过期后的宽限期为 20 天
FAILED_LOGIN_ATTEMPTS 15:允许的最大失败登录次数为 15 次
PASSWORD_LOCK_TIME 15:账户被锁定后的解锁时间为 15 天(或指定 “UNLIMITED” 需管理员手动解锁)
-- 查询用户信息
SELECT
DBA_USERS.USERNAME,
SYSUSERS.*
FROM
SYSUSERS,
DBA_USERS
WHERE
SYSUSERS.ID = DBA_USERS.USER_ID;
-- 查询用户安全状态
SELECT
DBA_USERS.USERNAME,
SYSUSERS.FAILED_NUM,
SYSUSERS.LOCK_TIME,
SYSUSERS.CONN_IDLE_TIME,
ACCOUNT_STATUS
FROM
SYSUSERS,
DBA_USERS
WHERE
SYSUSERS.ID = DBA_USERS.USER_ID;
安全审计
启用审计
1.使用SYSAUDITOR账户登录数据库
2.执行命令
SP_SET_ENABLE_AUDIT(1);
3.重启数据库服务使配置生效
审计设置
-- 登录/登出审计
SP_AUDIT_STMT('CONNECT','NULL','FAIL');
-- 用户管理操作审计(创建/删除)
SP_AUDIT_STMT('USER','NULL','SUCCESSFUL');
-- 角色管理操作审计(创建/修改/删除)
SP_AUDIT_STMT('ROLE','NULL','SUCCESSFUL');
-- 表空间操作审计(创建/修改/删除)
SP_AUDIT_STMT('TABLESPACE','NULL','ALL');
-- 权限授予操作审计
SP_AUDIT_STMT('GRANT','NULL','SUCCESSFUL');
-- 权限回收操作审计
SP_AUDIT_STMT('REVOKE','NULL','SUCCESSFUL');
审计日志配置
-- SYSDBA用户执行
sp_set_para_value(1,'AUDIT_MAX_FILE_SIZE',1024);
默认存储在数据目录
可通过修改dm.ini中的AUD_PATH指定存储路径(需重启生效)
支持手动拷贝至第三方服务器保存
审计信息查询
-- 查看审计功能状态(SYSDBA用户)
SELECT * FROM V$DM_INI
WHERE PARA_NAME IN ('ENABLE_AUDIT','AUDIT_MAX_FILE_SIZE');
-- 查看审计规则(SYSAUDITOR用户)
SELECT * FROM SYSAUDITOR.SYSAUDIT;
-- 查询特定审计记录(SYSAUDITOR用户)
SELECT * FROM SYSAUDITOR.V$AUDITRECORDS
WHERE SQL_TEXT LIKE '%AUDIT%';
注意事项
开启审计会影响数据库性能,建议按需配置
补充配置
修改dm.ini中的AUDIT_SPACE_LIMIT参数(单位:MB)
默认值:8192(8GB)
默认路径:SYSTEM_PATH(如/dmdata/dmdb)
自定义路径:设置AUD_PATH参数(确保路径权限正确)
#查询当前配置
grep SYSTEM_PATH dm.ini
grep AUD_PATH dm.ini
ssl加密传输配置
-- 1. 指定高强度加密算法(国密SM4,合规首选)
SP_SET_PARA_STRING_VALUE(2,'COMM_ENCRYPT_NAME','SM4_CFB'); -- DES_CFB AES256CBC、AES128CFB、RC4
-- 2. 开启加密总开关
sp_set_para_value(2,'ENABLE_ENCRYPT',1);
说明:
COMM_ENCRYPT_NAME:空 = 不加密;设算法名 = 开启应用层加密。
ENABLE_ENCRYPT:
0:关闭(默认) 1:SSL 加密 + 双向认证
2:仅认证、不加密 4:仅加密、不认证(常用)
5:加密 + 单向认证
--查询配置结果
SELECT *
FROM V$PARAMETER
WHERE NAME='ENABLE_ENCRYPT' OR NAME='COMM_ENCRYPT_NAME';
-- 1. 查询通信加密开关状态(0=关闭,1=开启)
SELECT SF_GET_PARA_VALUE(2,'ENABLE_ENCRYPT');
-- 2. 查询通信加密算法配置
SELECT SF_GET_PARA_STRING_VALUE(2,'COMM_ENCRYPT_NAME');
数据对象复用功能
参数设置:
sp_set_para_value(2,'ENABLE_OBJ_REUSE',1);
--查询配置结果
SELECT *
FROM V$PARAMETER
WHERE NAME='ENABLE_OBJ_REUSE';
**功能说明:**
- **默认值(0)**:关闭对象复用
- 优点:逻辑简单,无额外资源消耗
- 缺点:表空间无限膨胀、产生大量磁盘碎片、性能较差
- 适用场景:测试环境、极少执行删除/插入操作的静态表
- **推荐值(1)**:开启对象复用(当前配置)
- 优点:
- 空间重复利用
- 控制表空间膨胀
- 提升删除/插入性能
- 减少磁盘碎片
- 缺点:仅需占用少量内存维护复用标记
- 适用场景:
- ✅ 生产环境全场景
- ✅ 高频删除/插入业务
- ✅ 大表操作
- ✅ 分区表# 数据库性能优化参数配置
更新数据库有效期
以数据库软件安装在/home/dmdba/dmdbms目录,授权文件是dm.key,并上传到了/home/dmdba目录为例说明:
(1)
su - dmdba
cd /home/dmdba/dmdbms/bin
cp /home/dmdba/dm.key /home/dmdba/dmdbms/bin/
注意:
1.操作系统执行ps -ef|grep dmserver可以知道数据库软件安装在哪个路径。
2.dm.key的权限:chown -R dmdba:dinstall dm.key
如果之前的旧授权也在,可以先移走或者删除。
(2)登陆数据库执行:call sp_load_lic_info();
(3)查询key的到期时间,数据库执行:select expired_date,cluster_type from v$license;
说明:查询出的expired_date值是NULL,表名授权已经更新成功,且是永久授权。
其他:
查询操作系统版本,服务器上执行:cat /etc/os-release
查询cpu型号: lscpu
查询数据库版本:
DM7执行:select * from v$version;
DM8执行:select id_code;
cp /home/dmdba/dm.key /home/dmdba/dmdbms/bin/
chown dmdba.dinstall /home/dmdba/dmdbms/bin/dm.key
call sp_load_lic_info();
select expired_date,cluster_type from v$license;
省厅达梦库信息及常用操作
数据库软件安装路径:/home/dmdba/dmdbms/
数据库数据文件路径:/data/dmdata/dmdb/
数据库归档文件路径:/data/dmdata/dmrach/dmdb/
归档空间限制:100G #如果不够可调整
数据库备份文件路径:/data/dmdata/dmbak/dmdb/
数据库驱动路径:/home/dmdba/dmdbms/drivers
数据库文档路径:/home/dmdba/dmdbms/doc
数据库日志路径:/home/dmdba/dmdbms/log
cd /home/dmdba/dmdbms/bin
关闭确认监视器进程:./DmMonitorServiceGRP1 stop
关闭主库守护进程:./DmWatcherServiceGRP1 stop
关闭备库守护进程:./DmWatcherServiceGRP1 stop
关闭主库实例:./DmServicedmdb stop 重启:systemctl restart DmServicedmdb
关闭备库实例:./DmServicedmdb stop
启动主库实例:./DmServicedmdb start
启动备库实例:./DmServicedmdb start
启动主库守护进程:./DmWatcherServiceGRP1 start
启动备库守护进程:./DmWatcherServiceGRP1 start
启动确认监视器进程:./DmMonitorServiceGRP1 start
====普通监视器查看集群状态
在主备节点均部署普通监视器,可以用于日常查看集群状态
切换dmdba用户
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmmonitor /data/dmdata/dmdb/dmmonitor_GRP1.ini
=== 手动切换主库(打开监视器后)
示例:
./dmmonitor /data/dmdata/dmdb/dmmonitor_GRP1.ini
login
用户名:SYSDBA
密码:Hn@dameng123
switchover GRP1.GRP1_DW_02
锁等待 / 阻塞常用操作
-- 查询所有发生事务阻塞的会话
SELECT * FROM V$SESSIONS WHERE trx_id in (SELECT id FROM V$TRXWAIT);
-- 关闭阻塞会话(早期达梦版本存储过程)
CALL SP_KILL_SESSION(1245963096);
-- 关闭阻塞会话(新版达梦推荐存储过程)
sp_close_session(281463368385784);
-- 根据阻塞事务批量生成关闭会话SQL语句
SELECT 'SP_CLOSE_SESSION(' || SESS_ID || ', ' || SESS_SEQ || ');' AS KILL_COMMAND
FROM V$SESSIONS
WHERE trx_id IN (SELECT id FROM V$TRXWAIT);
-- 查询所有处于活跃状态的事务,统计增删改操作行数
SELECT t.ID AS TRX_ID,t.SESS_ID,t.STATUS,t.INS_CNT,t.DEL_CNT,t.UPD_CNT
FROM V$TRX t WHERE t.STATUS='ACTIVE';
-- 根据会话ID查询会话详情:账号、客户端IP、状态、执行SQL
SELECT s.SESS_ID,s.USER_NAME,s.CLNT_IP,s.STATE,s.SQL_TEXT
FROM V$SESSIONS s WHERE s.SESS_ID=281448401669640;
-- 查询数据库锁信息,区分持锁会话与等待锁的阻塞会话
SELECT ADDR,TRX_ID,LTYPE,LMODE,
BLOCKED, -- 1=被阻塞(在等锁),0=正常持有锁
TABLE_ID,
TID -- 阻塞我的事务ID
FROM V$LOCK;
-- 根据事务ID查询单条事务详情(会话ID、状态、DML操作计数)
SELECT ID AS TRX_ID,SESS_ID,STATUS,INS_CNT,DEL_CNT,UPD_CNT FROM
V$TRX WHERE ID=53840939;
-- 关联阻塞事务、会话视图,查询完整阻塞链:等待事务、阻塞源事务、等待会话及执行SQL、客户端信息
SELECT VTW.ID AS WAIT_TRX_ID,VTW.WAIT_FOR_ID AS BLOCKING_TRX_ID,VS.SESS_ID AS WAITING_SESSION_ID,VS.SQL_TEXT AS WAITING_SQL,VS.APPNAME,VS.CLNT_IP
FROM V$TRXWAIT VTW
LEFT JOIN V$TRX VT ON (VTW.ID=VT.ID)
LEFT JOIN V$SESSIONS VS ON (VT.SESS_ID=VS.SESS_ID);
-- 查询当前所有正在执行操作的活跃会话基础信息
SELECT SESS_ID, SQL_TEXT, STATE, TRX_ID, CLNT_IP, APPNAME
FROM V$SESSIONS
WHERE STATE = 'ACTIVE';
-- 根据事务ID查询对应会话ID、客户端IP、应用名称
SELECT SESS_ID, TRX_ID, CLNT_IP, APPNAME
FROM V$SESSIONS
WHERE TRX_ID = 53842134;
权限常用操作
达梦数据库的角色分为 系统预定义角色(数据库内置,无需创建)和 自定义角色(用户按需创建),其中系统预定义角色是日常运维中最常用的,下面按「核心分类+权限明细」梳理所有关键角色及权限,覆盖达梦8/9主流版本。
一、核心系统预定义角色(必掌握)
这类角色是达梦内置的高权限/基础角色,权限范围覆盖管理、开发、只读等核心场景:
| 角色名 | 核心权限 | 适用场景 | 注意事项 |
|---|---|---|---|
| DBA | 1. 所有系统权限(创建/删除用户、授权、修改配置等) 2. 操作所有用户的数据库对象(表、视图、存储过程等) 3. 执行数据库级维护(备份、恢复、导入导出) | 数据库管理员(最高权限) | 生产环境仅授予运维管理员,禁止业务用户使用 |
| SYSDBA | 1. 包含DBA的所有权限 2. 数据库启动/关闭、参数修改( SP_SET_PARA_VALUE)3. 主备集群配置、归档管理、用户密码重置 | 超级管理员(最高权限) | 仅用于数据库底层维护,默认只有初始安装的SYSDBA用户拥有 |
| RESOURCE | 1. 创建表、索引、视图、触发器、存储过程、序列、同义词等业务对象 2. 修改/删除自己创建的对象 3. 执行自己创建的存储过程/函数 | 普通开发/业务用户(核心) | 无创建用户、授权、修改系统配置的权限,遵循最小权限原则 |
| PUBLIC | 1. 所有用户默认继承的基础权限 2. 查询系统基础视图(如 V$INSTANCE)、执行内置函数(如SYSDATE())3. 访问公共同义词 | 所有用户(默认) | 显式授予/回收不影响默认继承,仅用于补充基础权限 |
| CONNECT | 1. 连接数据库的权限(登录权限) 2. 执行基础DML(INSERT/UPDATE/DELETE,需对象级权限) | 所有需要登录的用户 | 新版本中PUBLIC已包含该权限,无需单独授予 |
二、只读类系统预定义角色(精细化权限)
这类角色聚焦「只读操作」,适合运维排查、报表查询等场景,避免过度授权:
| 角色名 | 全称 | 核心权限 |
|---|---|---|
| SOI | SELECT ANY INDEX | 查询任意用户下的索引(结构/信息) |
| VTI | VIEW ANY TABLE | 查看任意用户下的表结构(仅元数据,无数据查询权) |
| SVI | SELECT ANY VIEW | 查询任意用户下的视图(数据+结构) |
| SELECT_CATALOG_ROLE | - | 查询所有系统数据字典视图(如DBA_TABLES、V$LOCK) |
| SCT | SELECT ANY TABLE | 查询任意用户下的表数据(高危只读权限) |
三、管理类系统预定义角色(细分运维权限)
这类角色拆分了DBA的高权限,适合精细化运维(如仅授予备份权限):
| 角色名 | 核心权限 | 适用场景 |
|---|---|---|
| DATABASE_BACKUP_OPER | 执行数据库全备/增备、归档备份 | 备份管理员 |
| DATABASE_RECOVERY_OPER | 执行数据库恢复(基于备份/归档) | 恢复管理员 |
| SYSTEM_OPER | 执行系统级操作(如修改表空间、清理归档) | 系统运维员 |
| SECURITY_OPER | 管理用户/角色/权限(创建/授权/回收) | 权限管理员 |
四、自定义角色(按需创建)
若内置角色无法满足需求,可创建自定义角色并授予精细化权限,示例:
-- 1. 创建自定义角色(仅授予查询业务表+创建视图的权限)
CREATE ROLE test_role;
-- 2. 给角色授予具体权限
GRANT SELECT ON scott.emp TO test_role; -- 授予查询scott.emp表的权限
GRANT CREATE VIEW TO test_role; -- 授予创建视图的权限
-- 3. 将角色授予用户
GRANT test_role TO test;
### 五、关键查询命令(验证角色/权限)
日常运维中可通过以下SQL查看角色及权限:
-- 1. 查看所有系统预定义角色
SELECT * FROM DBA_ROLES;
-- 2. 查看指定用户拥有的角色(如test)
SELECT GRANTEE, GRANTED_ROLE, ADMIN_OPTION
FROM DBA_ROLE_PRIVS
WHERE GRANTEE = 'TEST';
-- 3. 查看角色包含的具体系统权限(如RESOURCE)
SELECT ROLE, PRIVILEGE
FROM ROLE_SYS_PRIVS
WHERE ROLE = 'RESOURCE';
-- 4. 查看当前用户的有效权限
SELECT * FROM SESSION_PRIVS;
权限授予/回收原则
- 最小权限原则:业务用户优先授予
RESOURCE + 必要对象权限,而非DBA/SYSDBA;- 只读场景:优先用
SOI/VTI/SVI而非SCT(SCT能查所有表数据,风险高);- 自定义角色:多用户需相同权限时,先创建角色再批量授予,避免重复授权。
- 达梦核心系统角色分「管理员类(SYSDBA/DBA)」「业务类(RESOURCE)」「只读类(SOI/VTI/SVI)」,覆盖绝大多数场景;
SYSDBA是最高权限,RESOURCE是业务用户标配,PUBLIC是所有用户默认基础权限;- 生产环境优先用「自定义角色+最小权限」,避免过度授权导致数据安全风险。
sql性能优化
-- 查询指定表指定字段的字段名、数据类型、字段长度
SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH
FROM ALL_TAB_COLUMNS
WHERE OWNER = 'SY_GZZXDA_KF'
AND TABLE_NAME IN ('EAMS_DAJBXX', 'EAMS_ZJGL')
AND COLUMN_NAME IN ('HBBSF', 'ID');
-- 查询指定索引的所属表、索引状态、可见性
SELECT TABLE_NAME,INDEX_NAME, STATUS, VISIBILITY
FROM ALL_INDEXES
WHERE OWNER = 'SY_GZZXDA_KF'
AND INDEX_NAME = 'INDEX34029746';
-- 关闭表并行查询功能
ALTER TABLE EAMS_DAJBXX NOPARALLEL;
-- 设置表并行度为1(等价关闭并行)
ALTER TABLE EAMS_DAJBXX PARALLEL 1;
-- 达梦快速收集单张大表统计信息(简写语法)
STAT ON SY_GZZXDA_KF.EAMS_JNML_FILE_PRE;
-- 达梦快速收集单张小表统计信息(简写语法)
STAT ON SY_GZZXDA_KF.EAMS_YWJNML_PRE;
-- 达梦存储过程收集大表统计信息
CALL SP_TAB_STAT_INIT('SY_GZZXDA_KF', 'EAMS_JNML_FILE_PRE');
-- 达梦存储过程收集小表统计信息
CALL SP_TAB_STAT_INIT('SY_GZZXDA_KF', 'EAMS_YWJNML_PRE');
-- 标准DBMS_STATS收集表统计,采样率100%
DBMS_STATS.GATHER_TABLE_STATS('SY_GZZXDA_KF', 'EAMS_JNML_FILE_PRE', NULL, 100);
DBMS_STATS.GATHER_TABLE_STATS('SY_GZZXDA_KF', 'EAMS_YWJNML_PRE', NULL, 100);
-- 批量收集指定用户下所有对象统计信息
DBMS_STATS.GATHER_SCHEMA_STATS('SY_GZZXDA_KF');
-- 查询指定两张表的总行数、最后收集统计时间
SELECT table_name, num_rows, last_analyzed
FROM all_tables
WHERE owner = 'SY_GZZXDA_KF'
AND table_name IN ('EAMS_ZJGL', 'EAMS_DAJBXX');
-- 100%全量采样收集大表统计,保证执行计划精准
DBMS_STATS.GATHER_TABLE_STATS('SY_GZZXDA_KF', 'EAMS_DAJBXX', ESTIMATE_PERCENT=>100);
DBMS_STATS.GATHER_TABLE_STATS('SY_GZZXDA_KF', 'EAMS_DAGSZ', ESTIMATE_PERCENT=>100);
DBMS_STATS.GATHER_TABLE_STATS('SY_GZZXDA_KF', 'EAMS_ZJGL', ESTIMATE_PERCENT=>100);
-- 常规采样收集其他业务表统计信息
DBMS_STATS.GATHER_TABLE_STATS('SY_GZZXDA_KF', 'BM_EAMS_YWFL');
DBMS_STATS.GATHER_TABLE_STATS('SY_GZZXDA_KF', 'T_MK_SYS_USER');
-- 收集指定索引的统计信息(修正用户名笔误:SY_GZZDA_KF → SY_GZZXDA_KF)
DBMS_STATS.GATHER_INDEX_STATS('SY_GZZDA_KF', 'INDEX_EAMS_DAJBXX_HBBSF');
DBMS_STATS.GATHER_INDEX_STATS('SY_GZZDA_KF', 'INDEX34029746');
-- 查询指定表全部索引,拼接索引包含字段、索引类型、是否唯一
SELECT
i.OWNER AS SCHEMA_NAME,
i.TABLE_NAME,
i.INDEX_NAME,
i.INDEX_TYPE,
i.UNIQUENESS,
LISTAGG(c.COLUMN_NAME, ', ') WITHIN GROUP (ORDER BY c.COLUMN_POSITION) AS INDEX_COLUMNS
FROM
ALL_INDEXES i
JOIN
ALL_IND_COLUMNS c
ON i.INDEX_NAME = c.INDEX_NAME
AND i.TABLE_NAME = c.TABLE_NAME
AND i.OWNER = c.INDEX_OWNER
WHERE
i.TABLE_NAME='EAMS_ZJGL'
--i.OWNER = 'SY_GZZXDA_KF' and i.INDEX_NAME not like '%3%' and i.TABLE_NAME not like '%2%' and i.TABLE_NAME not like '%DK%'
--and i.UNIQUENESS='NONUNIQUE' and (i.TABLE_NAME like 'BM_EAMS%' or i.TABLE_NAME like 'EA%' or i.TABLE_NAME like 'HR_YG_SJQX_DA%' )
GROUP BY
i.OWNER, i.TABLE_NAME, i.INDEX_NAME, i.INDEX_TYPE, i.UNIQUENESS
ORDER BY
i.OWNER, i.TABLE_NAME, i.INDEX_NAME;
-- 隐藏索引,优化器不再使用该索引
ALTER INDEX SY_GZZXDA_KF.IDX_EAMS_JNML_FILE_PRE_JIIICSFFFY INVISIBLE;
-- 恢复索引可见性,优化器正常选用
ALTER INDEX SY_GZZXDA_KF.IDX_EAMS_JNML_FILE_PRE_JIIICSFFFY VISIBLE;
-- 查询EAMS_JNML_FILE_PRE表全部索引信息(类型、唯一性、状态、可见性)
SELECT index_name, index_type, uniqueness, status, visibility
FROM dba_indexes
WHERE owner = 'SY_GZZXDA_KF'
AND table_name = 'EAMS_JNML_FILE_PRE'
ORDER BY index_name;
-- 查询EAMS_JNML_FILE_PRE表主键约束名称
SELECT constraint_name, constraint_type
FROM dba_constraints
WHERE owner = 'SY_GZZXDA_KF'
AND table_name = 'EAMS_JNML_FILE_PRE'
AND constraint_type = 'P';
SP_SET_PARA_VALUE(1, 'ENABLE_HASH_JOIN', 1);
--0改内存(实例当前)
--1:改内存 + ini
--2:只改 ini
-- 获取当前最大会话数设置
SELECT sf_get_para_value(2, 'OLAP_FLAG');
SELECT sf_get_para_value(2, 'ENABLE_HASH_JOIN');
SELECT sf_get_para_value(2, 'MAX_PARALLEL_DEGREE');
SELECT sf_get_para_value(2, 'DEL_HP_OPT_FLAG');
--1查 ini 文件值,2查当前内存值
-- DEL_HP_OPT_FLAG
--0(默认):不启用任何分区优化;存储过程里间隔分区不能自动扩展(报 -2903)
--1:打开分区表 DELETE 优化
--2:范围分区表创建优化,改为数据流方式
--4:允许语句块 / 存储过程中的间隔分区自动扩展(解决你的 -2903)
--8:开启 TRUNCATE 分区表优化
--16:完全刷新时删除老数据用 DELETE 方式
--常用组合(按位或)
--4:只解决 “存储过程自动扩分区”(最常用)
--5(1+4):DELETE 优化 + 允许语句块自动扩分区
--7(1+2+4):DELETE + 建分区优化 + 允许语句块自动扩分区
ALTER SESSION SET 'ENABLE_HASH_JOIN' = 0; -- 正确:参数名加单引号,值用0/1
SP_SET_PARA_VALUE(1, 'OLAP_FLAG', 2);
--清除执行计划缓存
CALL SP_CLEAR_PLAN_CACHE();
物理备份还原
一、前言
1.1 概念
物理备份是找出那些已经分配、使用的数据页,拷贝并保存到备份集中。物理还原是物理备份的逆过程,物理还原一般通过 DMRMAN 工具(或者 SQL 语句),把备份集中的数据内容(数据文件、数据页、归档文件)重新拷贝、写入目标文件。
1.2 术语
联机备份还原:联机备份还原指数据库处于运行状态时,并正常提供数据库服务情况下进行的备份还原操作,称为联机备份还原。
脱机备份还原:脱机还原指数据库处于关闭状态时执行的还原操作。库备份、表空间备份和归档备份,可以执行脱机还原。脱机还原操作的目标库必须处于关闭状态。
备份集:备份集用来存放备份过程中产生的备份数据及备份信息。一个备份集对应了一次完整的备份。一般情况下,一个备份集就是一个目录,备份集包含一个或多个备份片文件,以及一个备份元数据文件。
二、准备工作
联机备份数据库必须要配置归档。联机备份时,大量的事务处于活动状态,为确保备份数据的一致性,需要同时备份一段日志(备份期间产生的 REDO 日志),因此要求数据库必须配置本地归档且归档处于开启状态。
脱机备份数据库可配置归档也可以不配置。正常退出的库的备份不需要考虑本地归档日志的完整性,可以不配置归档;但对于故障退出的库的备份要求因故障未刷盘的日志也必须存在于本地归档中,因此必须配置归档。
归档配置有两种方式:一是联机归档配置,数据库实例启动情况下,使用 SQL 语句完成 dmarch.ini 和 ARCH_INI 配置;二是手动配置归档,数据库实例未启动的情况下,手动编写 dmarch.ini 文件和设置参数 ARCH_INI。下面将分别说明这两种归档如何配置。
方式一:联机配置归档
##修改数据库为 Mount 状态
ALTER DATABASE MOUNT;
##开启归档模式
ALTER DATABASE ARCHIVELOG;
##配置本地归档
ALTER DATABASE ADD ARCHIVELOG 'DEST = /home/dm_arch/arch, TYPE = local,FILE_SIZE = 1024, SPACE_LIMIT = 2048';
##修改数据库为 Open 状态
ALTER DATABASE OPEN;
方法二:手动配置归档
##关闭数据库
##在 dm.ini 所在目录,创建 dmarch.ini 文件。dmarch.ini 文件内容如下:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dm_arch/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 2048
编辑 dm.ini 文件,设置参数ARCH_INI=1
启动数据库实例,数据库已运行于归档模式。
注意
联机备份时,关闭已配置的本地归档之后再重新打开,会造成归档文件中部分日志缺失,备份时检查归档文件连续性时将会报错。存在该类操作时,若要避免该错误,备份前需要调用【
checkpoint(100) ;】命令主动刷新检查点。
三、联机备份还原
联机方式支持数据库、用户表空间、用户表和归档的备份以及用户表的还原。在进行联机库级备份、归档备份和表空间备份时,必须保证系统处于归档模式,否则联机备份不能进行。
3.1 数据备份
3.1.1 手动备份
- 数据库备份
(1)概述
在 disql 工具或图形化管理工具 SQL 编辑区中使用 BACKUP 语句可以备份整个数据库,执行以下命令:
##全备
BACKUP DATABASE FULL BACKUPSET '/opt/dmdbms/BAK/db_full_bak_01';
还原见:4.3.1 数据库还原和恢复
(2)设置数据库备份选项
设置联机数据库备份集路径。
##指定备份集路径为 /home/dm_bak/db_bak_3_01
##BACKUPSET 参数用于指定备份集的输出路径
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_01';
设置备份名。
##创建备份集,备份名设置为“WEEKLY_FULL_BAK”
BACKUP DATABASE TO WEEKLY_FULL_BAK BACKUPSET '/home/dm_bak/db_bak_3_02';
##备份名的设置不可以使用特殊格式,例如%NAME。
添加备份描述。
##创建备份为备份集添加描述信息为“完全备份”。
##描述信息可以更详细地对备份类型、用途等进行说明
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_04' BACKUPINFO '完全备份';
限制备份片大小。
##MAXPIECESIZE 参数用于控制单个备份片的大小
##MAXPIECESIZE 不能大于磁盘剩余空间大小,否则报错磁盘空间不足。
##创建备份限制备份片大小为300M
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_05' MAXPIECESIZE 300;
备份压缩。
##执行备份压缩,压缩级别设置为 5。
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_06' COMPRESSED LEVEL 5;
##压缩选项有不同的压缩级别可以选择,取值范围为 0~9。
##应根据存储空间、数据文件大小等确定合适地压缩级别
设置并行备份。
##可通过关键字 PARALLEL 指定是否执行并行备份,以及执行并行备份的并行数。
##创建并行备份,指定并行数为8
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_07' PARALLEL 8;
- 表空间备份
(1)概述
在 disql 工具中使用 BACKUP 语句可以备份单个表空间。同备份数据库一样,执行表空间备份数据库实例也必须运行在归档模式下,启动 disql 输入以下语句即可备份表空间:
BACKUP TABLESPACE MAIN BACKUPSET 'ts_bak_01';
(2)设置表空间备份选项
增量备份指定基备份路径。
##以增量备份用户 MAIN 表空间为例,指定 BASE ON BACKUPSET 参数执行增量备份
BACKUP TABLESPACE MAIN BACKUPSET 'ts_full_bak_01';
BACKUP TABLESPACE MAIN INCREMENT BACKUPSET 'ts_increment_bak_01';
BACKUP TABLESPACE MAIN INCREMENT BASE ON BACKUPSET'ts_full_bak_01' BACKUPSET 'ts_increment_bak_02';
完全备份。
BACKUP TABLESPACE MAIN FULL BACKUPSET '/home/dm_bak/ts_full_bak_01';
增量备份。
BACKUP TABLESPACE MAIN INCREMENT WITH BACKUPDIR '/home/dm_bak' BACKUPSET '/home/dm_bak/ts_increment_bak_02';
注意
1.当备份数据超过限制大小时,会生成新的备份文件,新的备份文件名是初始文件名后加文件编号。
2.系统处于归档模式下时,才允许进行表空间备份。
3.Mount 状态下,不允许进行表空间备份。
4.MPP 集群环境不允许进行表空间备份。
5.更多备份选项可以查看数据库软件安装路径 doc 目录下《DM8 备份还原》手册。
- 表备份
与备份数据库与表空间不同,备份表不需要服务器配置归档,disql 输入以下命令即可备份用户表。
BACKUP TABLE TAB_01 BACKUPSET 'tab_bak_01';
##备份集“tab_bak_01”会生成到默认的备份路径下
#表还原:
SQL>RESTORE TABLE TAB_01 FROM BACKUPSET 'tab_bak_01';
注意
1.表备份均为联机完全备份;
2.不需要配置归档日志;
3.没有增量备份。
- 归档备份
(1)概述
在 disql 工具中使用 BACKUP 语句可以备份归档日志。归档备份的前提:
数据库必须配置归档;
归档文件的 db_magic、permanent_magic 值和数据库的 db_magic、permanent_magic 值必须一样;
归档日志必须连续,如果出现不连续的情况,前面的连续部分会忽略,仅备份最新的连续部分。
disql 输入以下命令即可备份归档:
SQL>BACKUP ARCHIVE LOG ALL BACKUPSET 'arch_bak_01';
##备份集“arch_bak_01”会生成到默认的备份路径下。
(2)设置归档备份选项
归档备份常用的备份选项有设置备份名、设置备份集路径、指定介质参数、添加备份描述等,详细设置方式可参考设置数据库备份选项。
3.1.2 定时备份
- 图形化方式创建定时备份
(1)右击管理工具-【代理】-【作业】-【新建作业】。

(2)出现如下图所示界面,在作业名称和作业描述中填写备份名称和描述。

(3)在作业步骤中选择具体的备份方式,如下图所示。

(4)执行完上述步骤后点击【确定】。
- 定时备份日志查看
右击管理工具,选择【代理】-【作业】-【job 名称】,点击【查看历史作业信息】,即可查看定时备份日志。

3.2 管理备份
3.2.1 备份目录管理
添加备份目录。
--函数 SF_BAKSET_BACKUP_DIR_ADD (device_type,backup_dir) 用于添加备份目录
--使用方法:
SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/home/dm_bak');
删除备份目录。
--函数 SF_BAKSET_BACKUP_DIR_REMOVE (device_type,backup_dir) 用于删除备份目录
--使用方法:
SELECT SF_BAKSET_BACKUP_DIR_REMOVE('DISK','/home/dm_bak');
清理全部备份目录。
--函数 SF_BAKSET_BACKUP_DIR_REMOVE_ALL () 用于清理全部备份目录
--使用方法:
SELECT SF_BAKSET_BACKUP_DIR_REMOVE_ALL();
3.2.2 备份集校验与删除
备份集校验。
--SF_BAKSET_CHECK (device_type,backup_dir)
SELECT SF_BAKSET_CHECK ('DISK','/home/dm_bak/db_bak_for_check');
备份集删除。
备份集删除相关函数参考如下,相关函数具体使用方法可参考数据库安装目录下 doc 目录中《DM8 备份与还原》手册。
--删除指定设备类型和指定备份集目录地备份集
SF_BAKSET_REMOVE
--批量删除满足指定条件的所有备份集
SF_BAKSET_REMOVE_BATCH
--批量删除指定时间之前的数据库备份集
SP_DB_BAKSET_REMOVE_BATCH
--批量删除指定表空间对象及指定时间之前的表空间备份集
SP_TS_BAKSET_REMOVE_BATCH
--批量删除指定表对象及指定时间之前的表备份集。
SP_TAB_BAKSET_REMOVE_BATCH
--批量删除指定时间之前的归档备份集。
SP_ARCH_BAKSET_REMOVE_BATCH
3.3 数据还原
达梦数据库仅支持表的联机还原,数据库、表空间和归档日志的还原必须通过脱机工具 DMRMAN 执行,详细内容见 脱机备份还原。
表还原的具体操作如下,表还原之后不需要恢复操作。disql 中输入以下 RESTORE 语句即可还原表:
SQL>RESTORE TABLE TAB_01 FROM BACKUPSET 'tab_bak_01';
3.4 管理工具进行联机备份还原
注意
3.4.1 数据备份
下面将介绍如何使用达梦数据库的 MANAGER 管理工具来执行联机的备份与还原操作。
点击【备份】,针对相应的备份对象,例如备份数据库,则右键点击【库备份】选择【新建备份】。

右键点击【库备份】之后显示如下界面,可设置备份的相关选项。【选择项】中的【常规】选项可以设置备份集的名字、存储目录、备份片的大小、备份描述以及备份类型等等。

【选择项】中的【高级】选项可以对备份集的相关属性进行设置,例如是否进行备份压缩、压缩级别、是否备份日志、加密类型等等,详细的属性设置见下图。

备份成功结果如下图所示。

3.4.2 备份管理
备份管理包括备份集查看、备份校验、备份删除和指定工作目录。
- 备份集查看
(1)选择上节数据备份成功的一个备份集,例如库备份下的 DB_DAMENG_FULL_2019_09_16_11_33_27,右键该备份集点击【属性】,可查看备份集的属性信息。

(2)【选择项】中的【文件信息】可查看备份集存储的目录、备份片数以及备份片的具体信息、数据文件数量以及数据文件的具体信息。

(3)【选择项】中的【数据库信息】可以查看进行备份操作的数据库信息。

- 备份集校验
点击某备份集节点右键菜单-> 备份校验,即可校验备份集的合法性。
- 备份删除
点击某备份集节点右键菜单->【删除】,可以删除该备份集。也可以同时选中多个备份集节点进行批量删除。
- 指定工作目录
点击备份文件夹节点右键菜单-> 指定工作目录,可以指定备份的工作目录,允许同时指定多个工作目录。如果设置了备份工作目录,备份文件夹下会显示所有工作目录下的所有备份。指定工作目录的对话框如下:

点击【添加】按钮可以添加一个工作目录,选中一个工作目录点击【删除】按钮可以删除一个工作目录。系统有一个默认工作目录,该目录会一直保留无法被删除。
3.4.3 数据还原
库备份和表空间备份不支持联机还原,只有表备份支持联机还原。表还原过程中表空间中其他的表可以正常操作。

四、脱机备份与还原
4.1 DMRMAN 工具
DMRMAN(DM RECOVERY MANAGER)是脱机备份还原命令行工具,无需额外安装,由它来统一负责库级脱机备份、脱机还原、脱机恢复等相关操作,该工具支持命令行指定参数方式和控制台交互方式执行,降低用户的操作难度。
启动和退出 DMRMAN。进入数据库安装目录的 bin 目录下,例如 /dm8/bin,执行以下命令:
##启动DMRMAN
./dmrman
##退出DMRMAN
##启动后控制台中输入 exit 命令
RMAN>exit;
4.2 数据备份
因表空间备份和表备份都只能在联机状态下进行,因此脱机状态下的数据备份只包括数据库备份和归档备份。
4.2.1 数据库备份
- 创建完全备份
注意
1.执行数据库脱机备份要求数据库处于脱机状态。
2.若是正常退出的数据库,则脱机备份前不需要配置归档;若是故障退出的数据库,则备份前,需先进行归档修复。
创建一个完整的数据库脱机备份的步骤如下:
##保证数据库处于脱机状态
##启动DMRMAN命令行工具
./dmrman
##DMRMAN中输入以下命令:
RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini ' FULL BACKUPSET '/home/dm_bak/db_full_bak_01';
##FULL参数表示执行的备份为完全备份
2. 创建增量备份
增量备份指基于指定的库的某个备份(完全备份或者增量备份),备份自该备份以来所有发生修改了的数据页。脱机增量备份要求两次备份之间数据库必须有操作,否则备份会报错。
创建脱机增量备份数据库的步骤如下:
##保证数据库处于脱机状态
##启动DMRMAN命令行工具
./dmrman
##DMRMAN中输入以下命令:
RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR '/home/dm_bak'BACKUPSET '/home/dm_bak/db_increment_bak_02';
##INCREMENT参数表示执行的备份为增量备份
4.2.2 归档备份
使用 DMRMAN 备份归档需要设置归档,否则会报错。同时,归档备份得是归档日志,防止归档日志的丢失导致重要数据缺失。
执行归档备份要求数据库处于脱机状态,完整的创建脱机归档备份的过程如下:
##配置归档,请参考归档配置;
##保证数据库处于脱机状态;
##启动 DMRMAN 命令行工具;
##DMRMAN 中输入以下命令:
RMAN>BACKUP ARCHIVE LOG ALL DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET '/home/dm_bak/arch_all_bak_01';
4.3 备份管理
管理备份一个重要的目的是删除不再需要的备份。DMRMAN 工具提供 SHOW、CHECK、REMOVE、LOAD 等命令分别用来查看、校验、删除和导出备份集。
4.2.1 备份信息查看
DMRMAN 中使用 SHOW 命令可以查看备份集的信息,若指定具体备份集目录,则会生成相应的备份集链表信息。使用方法如下:
##查看单个备份集信息
RMAN> show backupset '/home/test/yy/dm_bak/db_full_bak_01'
##批量显示备份集信息
##SHOW BACKUPSETS...命令用于批量显示指定搜索目录下的备份集信息。
##可通过WITH BACKUPDIR 参数指定多个备份集搜索目录,同时查看所有的备份集。
RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'
BACKUPSET'/home/dm_bak1/db_bak_for_show_01';
RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'
BACKUPSET'/home/dm_bak2/db_bak_for_show_01';
RMAN>SHOW BACKUPSETS WITH BACKUPDIR '/home/dm_bak1','/home/dm_bak2';
4.2.2 备份集校验
DMRMAN 中使用 CHECK 命令对备份集进行校验,校验备份集是否存在及合法。
##语法:CHECK BACKUPSET '<备份集目录>' ;
##CHECK BACKUPSET...命令用于校验特定备份集,每次只能检验一个备份集。
RMAN>CHECK BACKUPSET '/home/dmbak/dbbakforcheck01';
4.2.3 备份集删除
DMRMAN 中使用 REMOVE 命令删除备份集,可删除单个备份集,也可批量删除备份集。单个备份集删除时并行备份中的子备份集不允许单独删除;在指定备份集搜集目录中,发现存在引用待删除备份集作为基备份的需要执行级联删除,默认报错。批量删除备份集时,跳过收集到的单独的子备份集。
RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'
BACKUPSET'/home/dm_bak/db_bak_for_remove_01';
RMAN>REMOVE BACKUPSET '/home/dm_bak/db_bak_for_remove_01'
4.2.4 备份集导出
DMRMAN 中使用 LOAD 命令导出备份集。
##导出磁带/dev/nst0 上所有备份集的 meta 文件到目录/mnt/hgfs/dmsrc/bak_ dir中。直接输##入导出语句将报错,如下所示:
RMAN>LOAD BACKUPSETS FROM DEVICE TYPE TAPE TO BACKUPDIR '/mnt/hgfs/dmsrc/bak_dir';
LOAD BACKUPSETS FROM DEVICE TYPE TAPE TO BACKUPDIR '/mnt/hgfs/dmsrc/bak_dir';
##load backupsets failed.error code:-10000 [-10000]:[错误码:-20022]磁带打开失败
##退出 dmrman,设置环境变量 TAPE,值为/dev/nst0:
[root@192 debug]#export TAPE=/dev/nst0
[root@192 debug]#echo $TAPE /dev/nst0
##启动 dmrman,再次执行
[root@192 debug]# ./dmrman
RMAN>LOAD BACKUPSETS FROM DEVICE TYPE TAPE TO BACKUPDIR '/mnt/hgfs/dmsrc/bak_dir';
LOAD BACKUPSETS FROM DEVICE TYPE TAPE TO BACKUPDIR '/mnt/hgfs/dmsrc/bak_dir';
load meta file [SBT_TEST_T-20140909192629000000-4966] to path
[/mnt/hgfs/dmsrc/bak_dir/0/0.meta]...
load meta file [SBT_TEST_T-20140909192629000000-4966] to path
[/mnt/hgfs/dmsrc/bak_dir/0/0.meta]...success
load meta file [SBT_TEST_T2-20140909192746000000-9983] to path
[/mnt/hgfs/dmsrc/bak_dir/1/1.meta]...
load meta file [SBT_TEST_T2-20140909192746000000-9983] to path
[/mnt/hgfs/dmsrc/bak_dir/1/1.meta]...success
load backupsets successfully.
##退出 dmrman,查看本地磁盘目录/mnt/hgfs/dmsrc/bak_dir:
[root@192 debug]# ls -1 /mnt/hgfs/dmsrc/bak_dir total 0
drwxrwxrwx 1 root root 0 Sep 11 00:23 0
drwxrwxrwx 1 root root 0 Sep 11 00:23 1
[root@192 debug]# ls -1 /mnt/hgfs/dmsrc/bak_dir/0 total 12
-rwxrwxrwx 1 root root 24576 Sep 11 00:23 0.meta
[root@192 debug]# ls -1 /mnt/hgfs/dmsrc/bak_dir/1
total 12
-rwxrwxrwx 1 root root 24576 Sep 11 00:23 1.meta
4.2.5 备份集映射文件导出
备份集映射文件,又称为 mapped file。备份集映射文件导出,是将备份集中各数据文件的原始路径或者调整后的路径生成到一个本地文件中,可通过关键字 MAPPED FILE 应用于表空间和库的还原操作中。
DMRMAN 中使用 DUMP 命令导出映射文件。不支持导出到 DMASM 文件系统中。
##导出备份集中数据文件的原始路径
RMAN>DUMP BACKUPSET'/mnt/dmsrc/db_bak'DEVICE TYPE DISK MAPPED FILE '/mnt/dmsrc/db_bak_mapped.txt';
##指定 ini_path,导出调整后的数据文件路径到映射文件:
RMAN>DUMP BACKUPSET'/mnt/dmsrc/db_bak'DEVICE TYPE DISK DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'
MAPPED FILE '/mnt/dmsrc/db_bak_mapped.txt';
4.3 数据还原恢复
4.3.1 数据库还原和恢复
- 数据库还原
使用 RESTORE 命令完成脱机还原操作,在还原语句中指定库级备份集,可以是脱机库级备份集,也可以是联机库级备份集。
注意 通过 RESTORE 命令还原后的数据库不可用,需进一步执行 RECOVER 命令,将数据库恢复到备份结束时的状态。
以联机数据库备份说明使用 DMRMAN 如何执行数据库还原操作:
##联机备份数据库,保证数据库运行在归档模式及 OPEN 状态;
SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
##准备目标库。还原目标库可以是已经存在的数据库,也可使用 dminit 工具初始化一个新库。如下所示:
./dminit path=/opt/dmdbms/data db_name=DAMENG_FOR_RESTORE SYSDBA_PWD=****** SYSAUDITOR_PWD=******
##校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验;
RMAN>CHECK BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
##还原数据库。启动 DMRMAN,输入以下命令:
RMAN>RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM
BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
- 数据库恢复
使用 RECOVER 命令完成数据库恢复工作,可以是基于备份集的恢复工作,也可以是使用本地归档日志的恢复工作。数据库恢复是指重做 REDO 日志,有两种方式:从备份集恢复,即重做备份集中的 REDO 日志;或从归档恢复,即重做归档中的 REDO 日志。
方式一:从备份集恢复
##执行还原数据库的命令之后,可以直接执行恢复数据库的命令,如下:
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_recover_backupset';
方式二:从归档恢复
##通过使用 WITH ARCHIVEDIR 关键字进行归档恢复,如下:
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' WITH ARCHIVEDIR'/home/dm_arch/arch'
- 数据库更新
数据库更新是指更新数据库的 DB_MAGIC,并将数据库调整为可正常工作状态,与数据库恢复一样使用 RECOVER 命令完成。数据库更新发生在重做 REDO 日志恢复数据库后。
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' UPDATE DB_MAGIC;
4.3.2 表空间还原和恢复
- 表空间还原
使用 RESTORE 命令完成表空间的脱机还原,还原的备份集可以是联机或脱机生成的库备份集,也可以是联机生成的表空间备份集。脱机表空间还原仅涉及表空间数据文件的重建与数据页的拷贝。不需要事先设置目标表空间为 OFFLINE 状态。
表空间还原后,表空间状态被置为 RES_OFFLINE,并设置数据标记 FIL_TS_RECV_STATE_RESTORED,表示经过还原但数据不完整。表空间还原命令如下:
RMAN>RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' TABLESPACE MAIN FROM BACKUPSET '/home/dm_bak/ts_full_bak_for_restore';
注意
表空间还原的目标库只能是备份集产生的源库,否则将报错。
- 表空间恢复
表空间恢复通过重做 REDO 日志,以将数据更新到一致状态。由于日志重做过程中,修改好的数据页首先存入缓冲区,缓冲区分批次将修改好的数据页写入磁盘,如果在此过程中发生异常中断,可能导致缓冲区中的数据页无法写入磁盘,造成数据的不一致,数据库启动时校验失败,所以表空间恢复过程中不允许异常中断。
恢复完成后,表空间状态置为 ONLINE,并设置数据标记为 FIL_TS_RECV_STAT_RECOVERED,表示数据已恢复到一致状态。恢复表空间命令如下:
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RECOVER/dm.ini' TABLESPACE MAIN;
4.3.3 归档还原与修复
- 归档还原
使用 RESTORE 命令完成脱机还原归档操作,在还原语句中指定归档备份集。备份集可以是脱机归档备份集,也可以是联机归档备份集。归档还原的命令如下:
##还原归档。启动 DMRMAN,设置 OVERWRITE 为 2,如果归档文件已存在,会报错。
##1、指定还原的目标归档日志目录:
RMAN>RESTORE ARCHIVE LOG FROM BACKUPSET '/home/dm_bak/arch_all_for_restore' TO ARCHIVEDIR'/opt/dmdbms/data/DAMENG_FOR_RESTORE/arch_dest' OVERWRITE 2;
##2、指定还原目标库的 dm.ini 文件路径:
RMAN>RESTORE ARCHIVE LOG FROM BACKUPSET '/home/dm_bak/arch_all_for_restore' TO DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' OVERWRITE 2;
- 归档修复
使用 REPAIR 命令完成指定数据库的归档修复,归档修复会对目标库 dmarch.ini 中配置的所有本地归档日志目录执行修复。若目标库没有配置本地归档,则不执行修复。执行修复时,目标库一定不能处于运行状态。一般建议在数据库故障后,应立即执行归档修复,否则后续还原恢复将会导致联机日志中未刷入本地归档的 REDO 日志中而丢失,届时再利用本地归档恢复将无法恢复到故障前的最新状态。归档恢复的命令如下:
##单机环境下,确保目标库已经停止工作后,执行归档修复;
RMAN> REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/data/dm.ini';
##DSC 环境下,需要每个节点停止工作后,每个节点独立执行修复操作;
##对于两节点 DSC01、DSC02 执行修复如下:
RMAN> REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/dsc/dm01.ini';
RMAN> REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/dsc/dm02.ini'
4.4 控制台工具进行脱机备份
下面将介绍如何使用 DM 控制台工具 CONSOLE 来执行脱机的备份与还原操作。
4.4.1 数据备份
下图为 console 工具的主页面,点击【新建备份】设置备份选项。

点击【新建备份】后的界面显示如下,【选择项】中的【常规】可选择备份的对象(库备份或归档备份)、备份名、备份集目录、是否对备份集大小进行限制以及备份类型等等。

【选择项】中的【高级】可设置备份集的具体属性信息,例如是否进行备份压缩、是否备份日志、加密类型、加密密码、介质类型、介质参数等等。

4.4.2 备份管理
在备份还原管理页面中,【指定搜索目录】选择备份集存储的目录,点击【获取备份】按钮,即可获取备份集列表。

点击【获取备份】按钮后可以获取到指定搜索目录下的所有备份集,并显示在备份集列表中。选择要查看的备份集,点击【属性】按钮。

点击【属性】按钮后打开备份属性对话框,可查看备份属性。【选择项】中的【常规】可查看备份集的组 ID 和备份集 ID。

【选择项】中的【元信息】主要显示备份集本身相关的信息如备份是否为联机备份、备份的范围、备份的加密信息以及备份的压缩信息等。

【选择项】中的【节点信息】显示系统中各节点开始/结束 LSN 以及开始/结束日志包序号。单库只有一个节点,集群系统中会有多个节点。
【选择项】中的【文件信息】显示备份集的所有数据文件和备份片信息。
【选择项】中的【数据库信息】显示数据库的具体信息。
4.5 控制台工具还原数据库
4.5.1 验证物理备份文件有效性
在数据库安装目录下 bin 目录中启动 DMRMAN 工具进行备份集校验。
./dmrman
RMAN> check backupset ‘/dmdata/DAMENG/bak/DB_DAMENG_FULL_2024_04_23_00_15_09’
check backupset ‘/dmdata/DAMENG/bak/DB_DAMENG_FULL_2024_04_23_00_15_09’
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00]
check backupset successfully.
time used: 141.062(ms)
在进行还原操作时需停止数据库服务。
4.5.2 启动控制台工具
使用 root 用户启动 console 工具进行还原时,容易修改达梦相关文件的用户和用户组权限,所以建议使用数据库安装用户,即 dmdba 用户启动 console 工具。一般情况 dmdba 用户启动工具时,会出现如下报错:
其次根据上述报错 “Screen for GtkWindow not set; you must always seta screen for a GtkWindow before using the window” 提示的是图形化界面窗口设置异常,即问题属于图形化界面调用异常。
在 Linux/Unix 类操作系统上的 GUI 应用程序使用 X Window 系统(X Window System),它旨在允许多个用户使用窗口化的应用程序通过网络访问计算机。 DISPLAY 环境变量用来设置将图形显示到何处。
确认当前环境设置的环境变量 DISPLAY:
[root@localhost ~]#
[root@localhost ~]# echo KaTeX parse error: Expected 'EOF', got '#' at position 30: …ot@localhost ~]#̲ xhost +
access… echo $DISPLAY
##这里需要设置 dmdba 变量和 root 的一致,才能在 dmdba 用户下,启动 manager 时调用图形化界面。
[dmdba@localhost ~]$ export DISPLAY=:0
##xhost + 这个命令,是允许别的用户启动的图形程序将图形显示在当前屏幕上。
[dmdba@localhost ~]$ xhost +
access control disabled, clients can connect from any host
[dmdba@localhost ~]$ echo DISPLAY:0[dmdba@localhost ]DISPLAY
:0
[dmdba@localhost ~]DISPLAY:0[dmdba@localhost ]
此时即可正常启动 console 工具。
[dmdba@localhost ~]$ cd /home/dm/tool
[dmdba@localhost tool]$ ./console
4.5.3 指定备份文件
配置备份路径,获取备份文件。
4.5.4 数据库还原
选择备份文件集,并点击【还原】,指定还原实例的 dm.ini 文件,并点击确定,如下图:
4.5.5 数据库恢复
点击【恢复】,并选择对应数据库实例的 dm.ini 文件后确定,如下图:
4.5.6 更新 db_magic
点击【更新 db_magic】,如下图:
逻辑备份还原
一、前言
1.1 概念
逻辑备份还原是对数据库逻辑组件(如表、视图和存储过程等数据库对象)的备份还原。逻辑导出(dexp)和逻辑导入(dimp)是 DM 数据库的两个命令行工具,分别用来实现对 DM 数据库的逻辑备份和逻辑还原。逻辑备份和逻辑还原都是在联机方式下完成,即在数据库服务器正常运行过程中进行的备份和还原。
1.2 术语
逻辑导出:使用 dexp 工具可以对本地或者远程数据库进行数据库级、用户级、模式级和表级的逻辑备份。
逻辑导入:dimp 逻辑导入工具利用 dexp 工具生成的备份文件对本地或远程的数据库进行联机逻辑还原。dimp 导入是 dexp 导出的相反过程。
1.3 适用范围
本文所涉及的内容适用于 DM8 数据库的逻辑备份还原。
二、dexp 逻辑导出
dexp 工具可以对本地或者远程数据库进行数据库级、用户级、模式级和表级的逻辑备份。备份的内容非常灵活,可以选择是否备份索引、数据行和权限,是否忽略各种约束(外键约束、非空约束、唯一约束等),在备份前还可以选择生成日志文件,记录备份的过程以供查看。
2.1 使用 dexp 工具
dexp 工具需要从命令行启动。以数据库软件安装目录为 /dm8/bin 为例,在 /dm8/bin 路径下输入 dexp 和参数后回车。参数在下一节详细介绍。
##语法如下
dexp PARAMETER= { PARAMETER= }
2.2 dexp 相关参数含义
参数 含义 备注
USERID 数据库的连接信息 必选
FILE 明确指定导出文件名称 可选。如果缺省该参数,则导出文件名为dexp.dmp
DIRECTORY 导出文件所在目录 可选
FULL 导出整个数据库(N) 可选,四者中选其一。缺省为SCHEMAS
OWNER 用户名列表,导出一个或多个用户所拥有的所有对象
SCHEMAS 模式列表,导出一个或多个模式下的所有对象
TABLES 表名列表,导出一个或多个指定的表或者表分区
FUZZY_MATCH TABLES 选项是否支持模糊匹配(N) 可选
QUERY 用于指定对导出表的数据进行过滤的条件 可选
PARALLEL 用于指定导出的过程中所使用的线程数目 可选
TABLE_PARALLEL 用于指定导出每张表所使用的线程数,在MPP模式下会转换成单线程 可选
TABLE_POOL 用于设置导出过程中存储表的缓冲区个数 可选
此处列举参数为 dexp 部分参数,更多参数详细说明可以参考数据库安装路径 doc 目录下《DM8_dexp 和 dimp 使用手册》。
2.3 四种级别导出功能
2.3.1 FULL
FULL 方式导出数据库的所有对象。
##设置 FULL=Y,导出数据库的所有对象,导出数据库文件和日志文件放在路径 /mnt/data/dexp下。
./dexp USERID=SYSDBA/***** FILE=db_str.dmp LOG=db_str.log FULL=Y DIRECTORY=/mnt/data/dexp
2.3.2 OWNER
OWNER 方式导出一个或多个用户拥有的所有对象。
##设置 OWNER=USER01,导出用户 USER01 所拥有的对象全部导出。
./dexp USERID=SYSDBA/***** FILE=db_str.dmp LOG=db_str.log OWNER=USER01 DIRECTORY=/mnt/data/dexp
2.3.3 SCHEMAS
SCHEMAS 方式的导出一个或多个模式下的所有对象。
##设置 SCHEMAS=USER01,导出模式 USER01 模式下的所有对象。
./dexp USERID=SYSDBA/***** FILE=db_str.dmp LOG=db_str.log SCHEMAS=USER01 DIRECTORY=/mnt/data/dexp
2.3.4 TABLES
TABLES 方式导出一个或多个指定的表或表分区。导出所有数据行、约束、索引等信息。
##设置 TABLES=table1,table2,导出 table1,table2 两张表的所有数据和信息。
./dexp USERID=SYSDBA/***** FILE=db_str.dmp LOG=db_str.log TABLES=table1,table2 DIRECTORY=/mnt/data/dexp
和 TABLES 导出有关的参数还有 QUERY、EXCLUDE 和 INCLUDE,都是用来设置过滤条件的。
2.4 使用示范
2.4.1 环境准备
导出库:环境为 Linux,服务器为 192.168.0.248,用户名为 SYSDBA。导出的是 DM 数据库系统安装时自带的名为 BOOKSHOP 的示例库,端口号 5236。
2.4.2 dexp 逻辑导出
导出数据库的所有对象 (FULL=Y),导出文件为 dexp01.dmp ,导出日志为 dexp01.log,导出文件和日志文件都存放在 /emc_2/data/dexp 目录中。
./dexp SYSDBA/*****@192.168.0.248:5236 FILE=dexp01.dmp LOG=dexp01.log DIRECTORY=/emc_2/data/dexp FULL=Y
##若使用加密参数对备份进行加密,可使用加密参数 ENCRYPT、ENCRYPT_PASSWORD、ENCRYPT_NAME 。
##具体使用方法如下:
./dexp SYSDBA/*****@192.168.0.248:5236 FILE=dexp03.dmp LOG=dexp03.log DIRECTORY=/emc_2/data/dexp FULL=Y ENCRYPT=Y ENCRYPT_PASSWORD=damengren ENCRYPT_NAME= DES_CBC
##导出数据库的所有对象 (FULL=Y),导出文件为 dexp03.dmp,导出日志为 dexp03.log,导出文件和日志文件都存放在 /emc_2/data/dexp 目录中。
三、dimp 逻辑导入
dimp 逻辑导入工具利用 dexp 工具生成的备份文件对本地或远程的数据库进行联机逻辑还原。dimp 导入是 dexp 导出的相反过程。还原的方式可以灵活选择,例如是否忽略对象存在而导致的创建错误、是否导入约束、是否导入索引、导入时是否需要编译、是否生成日志等。
3.1 使用 dimp 工具
dimp 工具需要从命令行启动。以数据库软件安装目录为 /dm8/bin 为例,在 /dm8/bin 路径下输入 dimp 和参数后回车。参数在下一节详细介绍。
##语法如下
dimp PARAMETER=value { PARAMETER=value }
##将逻辑备份采用 FULL 方式完全导入到用户名为 SYSDBA,IP 地址为 192.168.0.248,端口号为 8888 的数据库。导入文件名为 db_str.dmp,导入的日志文件名为 db_str.log,路径为/mnt/data/dexp
./dimp USERID=SYSDBA/*****@192.168.0.248:8888 FILE=db_str.dmp DIRECTORY=/mnt/data/dexp LOG=db_str.log FULL=Y
3.2 dimp 相关参数含义
参数 含义 备注
USERID 数据库的连接信息 必选
FILE 输入文件,即 dexp 导出的文件 必选
DIRECTORY 导入文件所在目录 可选
FULL 导入整个数据库 (N) 可选,四者中选其一。缺省为SCHEMAS
OWNER 导入指定的用户名下的模式
SCHEMAS 导入的模式列表
TABLES 表名列表,指定导入的 tables 名称。不支持对外部表进行导入
PARALLEL 用于指定导入的过程中所使用的线程数目 可选
TABLE_PARALLEL 用于指定导入的过程中每个表所使用的子线程数目 可选。在 FAST_LOAD 为 Y 时有效
IGNORE 忽略创建错误 (N)。如果表已经存在则向表中插入数据,否则报错表已经存在 可选
TABLE_EXISTS_ACTION 需要的导入表在目标库中存在时采取的操作 [SKIP| APPEND | TRUNCATE | REPLACE] 可选
FAST_LOAD 是否使用 dmfldr 进行数据导入(N) 可选
FLDR_ORDER 使用 dmfldr 是否需要严格按顺序来导数据(Y) 可选
COMMIT_ROWS 批量提交的行数(5000) 可选
此处列举参数为 dimp 部分参数,更多参数详细说明可以参考数据库安装路径 doc 目录下《DM8_dexp 和 dimp 使用手册》。
3.3 四种级别导入功能
3.3.1 FULL
FULL 方式导入整个数据库。
##设置 FULL=Y,导入数据库,导入的数据库文件在 /mnt/data/dexp,即将生成的日志文件放在 /mnt/data/dimp。
./dimp USERID=SYSDBA/***** FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log FULL=Y DIRECTORY=/mnt/data/dimp
3.3.2 OWNER
OWNER 方式导入一个或多个用户拥有的所有对象。
##设置 OWNER=USER01,导入用户 USER01 所拥有的对象全部导出。导入的数据库文件在 /mnt/data/dexp,即将生成的日志文件放在 /mnt/data/dimp。
./dimp USERID=SYSDBA/***** FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log OWNER=USER01 DIRECTORY=/mnt/data/dimp
3.3.3 SCHEMAS
SCHEMAS 方式的导入一个或多个模式下的所有对象。
##设置 SCHEMAS=USER01,导入模式 USER01 模式下的所有对象。导入的数据库文件在/mnt/data/dexp,即将生成的日志文件放在 /mnt/data/dimp。
./dimp USERID=SYSDBA/***** FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log SCHEMAS=USER01 DIRECTORY=/mnt/data/dimp
3.3.4 TABLES
TABLES 方式导入一个或多个指定的表或表分区。导入所有数据行、约束、索引等信息。
##设置 TABLES=table1,table2,导入 table1,table2 两张表的所有数据和信息。导入的数据库文件在 /mnt/data/dexp,即将生成的日志文件放在 /mnt/data/dimp。
./dimp USERID=SYSDBA/***** FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log TABLES=table1,table2 DIRECTORY=/mnt/data/dimp
与 TABLES 导入有关的参数还有 EXCLUDE,用来指定导入时过滤某类对象。
3.4 使用示范
3.4.1 环境准备
导入库:环境为 Linux,服务器为 192.168.0.248,用户名为 SYSDBA。准备一个空数据库作为导入库,端口号为 8888。
3.4.2 dimp 逻辑导入
导入 SYSDBA、OTHER、PERSON 模式中的数据 (SCHEMAS = SYSDBA,OTHER,PERSON),导入文件就是上一步导出的文件 dexp01.dmp ,导入日志 dimp02.log 放入 /emc_2/data/dimp 目录中。
./dimp SYSDBA/*****@192.168.0.248:8888 FILE=/emc_2/data/dexp/dexp01.dmp LOG=dimp02.log DIRECTORY=/emc_2/data/dimp SCHEMAS=SYSDBA,OTHER,PERSON
四、使用图形化工具进行逻辑导入导出
使用方式:打开数据库管理工具,右键选择【导入】/【导出】即可进行逻辑导入导出。
4.1 逻辑导出
以下图片为逻辑导出的选项界面,包含导出目录、导出文件、日志文件和导出选项。
导出目录可以选择逻辑导出的文件存储位置,例如下图中导出目录为 D:\DM8\data\DAMENG\dexp。
导出文件的命名格式为 .dmp。
日志文件与导出文件存储在同一导出目录下。
导出选项可以根据逻辑导出的实际需要设置。包括设置文件大小、文件数、描述信息、权限、压缩等等。
4.2 逻辑导入
以下图片为逻辑导入的选项界面,包含导入目录、导入文件、日志文件和导入选项。
导入目录可以选择逻辑导入的文件存储位置,例如下图中导入目录为 D:\DM8\data\DAMENG\dexp。
导入文件选择逻辑导出的文件。例如,逻辑导出表的相关数据,导出文件的格式为 test.dmp,逻辑导入时,导入文件选择为 test.dmp。
日志文件不能与旧文件同名。
导入选项可以根据逻辑导入的实际需要设置。包括数据行,是否选择索引约束、并发数等等。
数据守护集群安装部署
一、安装前准备
1.1 集群规划
| 配置项 | A 机器 | B 机器 |
|---|---|---|
| 业务 IP | 172.16.1.1 | 172.16.1.2 |
| 心跳 IP | 192.168.1.1 | 192.168.1.2 |
| 实例名 | GRP1_RT_01 | GRP1_RT_02 |
| 实例端口 | 5236 | 5236 |
| MAL 端口 | 5336 | 5336 |
| MAL 守护进程端口 | 5436 | 5436 |
| 守护进程端口 | 5536 | 5536 |
| OGUID | 45331 | 45331 |
| 守护组 | GRP1 | GRP1 |
| 安装目录 | /opt/dmdbms | /opt/dmdbms |
| 实例目录 | /opt/dmdbms/data/ | /opt/dmdbms/data/ |
| 归档上限 | 51200 | 51200 |
确认监视器 IP 为 10.10.10.10。
说明:具体规划及部署方式以现场环境为准。
1.2集群架构

1.3 切换模式说明
故障切换方式对比表
| 切换方式 | dmarch 参数 | dmwatcher 参数 | dmmonitor 参数 | 监视器配置要求 |
|---|---|---|---|---|
| 手动切换 | ARCH_WAIT_APPLY=0 | DW_MODE=MANUAL | MON_DW_CONFIRM=0 | 1. 在各集群节点的bin目录中存放非确认监视器配置文件 |
| 自动切换 | ARCH_WAIT_APPLY=0 | DW_MODE=AUTO | MON_DW_CONFIRM=1 | 1. 同手动切换配置要求 2. 需在独立的确认监视器节点上存放配置文件并注册自启服务 |
- ARCH_WAIT_APPLY 参数,设置为 0:高性能模式;设置为 1:事务一致模式。
- 故障手动切换情境下 ARCH_WAIT_APPLY 只能为 0。故障自动切换情境下 ARCH_WAIT_APPLY 可以为 0,也可以为1。
- ARCH_WAIT_APPLY 参数设置的判断依据为业务是否要查询备机最新数据。如果需要,则配置为1(较大性能衰减);如果不需要,则配置为 0。
二、集群搭建
2.1 配置 A 机器
2.1.1 初始化实例并备份数据
初始化实例
[dmdba@~]$ /opt/dmdbms/bin/dminit PATH=/opt/dmdbms/data/ INSTANCE_NAME=GRP1_RT_01 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048 SYSDBA_PWD=****** SYSAUDITOR_PWD=******
启动服务
[dmdba@~]$ /opt/dmdbms/bin/dmserver /opt/dmdbms/data/DAMENG/dm.ini
开启归档
[dmdba@~]$ /opt/dmdbms/bin/disql SYSDBA/*****@172.16.1.1:5236
SQL> ALTER DATABASE MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/opt/dmdbms/data/DAMENG/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200';
SQL> ALTER DATABASE OPEN;
备份数据
SQL> BACKUP DATABASE BACKUPSET '/opt/dmdbms/data/DAMENG/bak/BACKUP_FILE';
修改 dm.ini
SQL> SP_SET_PARA_VALUE (2,'PORT_NUM',5236);
SQL> SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60);
SQL> SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);
SQL> SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);
SQL> SP_SET_PARA_VALUE (2,'MAL_INI',1);
SQL> SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);
关闭前台实例服务
2.1.2 修改 dmarch.ini
[dmdba@~]$ vi /opt/dmdbms/data/DAMENG/dmarch.ini
ARCH_WAIT_APPLY = 0 #0:高性能 1:事务一致
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /opt/dmdbms/data/DAMENG/arch/ #本地归档存放路径
ARCH_FILE_SIZE = 1024 #单个归档大小,单位 MB
ARCH_SPACE_LIMIT = 51200 #归档上限,单位 MB
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = GRP1_RT_02 #实时归档目标实例名
2.1.3 创建 dmmal.ini
[dmdba@~]$ vi /opt/dmdbms/data/DAMENG/dmmal.ini
MAL_CHECK_INTERVAL = 10 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 链路断开的时间
MAL_TEMP_PATH = /opt/dmdbms/data/malpath/ #临时文件目录
MAL_BUF_SIZE = 512 #单个 MAL 缓存大小,单位 MB
MAL_SYS_BUF_SIZE = 2048 #MAL 总大小限制,单位 MB
MAL_COMPRESS_LEVEL = 0 #MAL 消息压缩等级,0 表示不压缩
[MAL_INST1]
MAL_INST_NAME = GRP1_RT_01 #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST = 192.168.1.1 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 172.16.1.1 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = GRP1_RT_02
MAL_HOST = 192.168.1.2
MAL_PORT = 5336
MAL_INST_HOST = 172.16.1.2
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
2.1.4 创建 dmwatcher.ini
[dmdba@~]$ vi /opt/dmdbms/data/DAMENG/dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #MANUAL:故障手切 AUTO:故障自切
DW_ERROR_TIME = 20 #远程守护进程故障认定时间
INST_ERROR_TIME = 20 #本地实例故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_OGUID = 45331 #守护系统唯一 OGUID 值
INST_INI = /opt/dmdbms/data/DAMENG/dm.ini #dm.ini 文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
2.1.5 拷贝备份文件
##拷贝备份文件到 B 机器
[dmdba@~]$ scp -r /opt/dmdbms/data/DAMENG/bak/BACKUP_FILE dmdba@192.168.1.2:/opt/dmdbms/data/DAMENG/bak
2.1.6 注册服务
[root@~]# /opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -p GRP1_RT_01 -dm_ini /opt/dmdbms/data/DAMENG/dm.ini -m mount
[root@~]# /opt/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /opt/dmdbms/data/DAMENG/dmwatcher.ini
[root@~]# /opt/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceGRP1_RT_01
[root@~]# /opt/dmdbms/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher
2.2 配置 B 机器
2.2.1 初始化实例
[dmdba@~]$ /opt/dmdbms/bin/dminit PATH=/opt/dmdbms/data/ INSTANCE_NAME=GRP1_RT_02 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048 SYSDBA_PWD=****** SYSAUDITOR_PWD=******
2.2.2 恢复数据
[dmdba@~]$ /opt/dmdbms/bin/dmrman CTLSTMT="RESTORE DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/data/DAMENG/bak/BACKUP_FILE'"
[dmdba@~]$ /opt/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/data/DAMENG/bak/BACKUP_FILE'"
[dmdba@~]$ /opt/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC"
2.2.3 替换 dmarch.ini
[dmdba@~]$ vi /opt/dmdbms/data/DAMENG/dmarch.ini
ARCH_WAIT_APPLY = 0 #0:高性能 1:事务一致
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /opt/dmdbms/data/DAMENG/arch/ #本地归档存放路径
ARCH_FILE_SIZE = 1024 #单个归档大小,单位 MB
ARCH_SPACE_LIMIT = 51200 #归档上限,单位 MB
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = GRP1_RT_01 #实时归档目标实例名
2.2.4 配置 dm.ini、dmmal.ini 和 dmwatcher.ini
INSTANCE_NAME = GRP1_RT_02
PORT_NUM = 5236 #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志重演信息
2.2.5 注册服务
[root@~]# /opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -p GRP1_RT_02 -dm_ini /opt/dmdbms/data/DAMENG/dm.ini -m mount
[root@~]# /opt/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /opt/dmdbms/data/DAMENG/dmwatcher.ini
[root@~]# /opt/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceGRP1_RT_02
[root@~]# /opt/dmdbms/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher
2.3 配置确认监视器
2.3.1 创建 dmmonitor.ini
[dmdba@~]$ vi /opt/dmdbms/bin/dmmonitor.ini
MON_DW_CONFIRM = 1 #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH = ../log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 512 #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT = 2048 #日志上限,单位 MB
[GRP1]
MON_INST_OGUID = 45331 #组 GRP1 的唯一 OGUID 值
MON_DW_IP = 192.168.1.1:5436 #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP = 192.168.1.2:5436
[dmdba@~]$ vi /opt/dmdbms/bin/dmmonitor_manual.ini
MON_DW_CONFIRM = 0 #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH = ../log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 512 #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT = 2048 #日志上限,单位 MB
[GRP1]
MON_INST_OGUID = 45331 #组 GRP1 的唯一 OGUID 值
MON_DW_IP = 192.168.1.1:5436 #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP = 192.168.1.2:5436
2.3.2 注册服务
[root@~]# /opt/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /opt/dmdbms/bin/dmmonitor.ini
[root@~]# /opt/dmdbms/script/root/dm_service_uninstaller.sh -n DmMonitorServiceMonitor
2.3.3 监视器使用
| 命令 | 功能描述 |
|---|---|
| list | 显示守护进程配置信息 |
| show global info | 查看所有实例组信息 |
| tip | 显示系统当前运行状态 |
| login | 登录监视器 |
| logout | 退出登录 |
| choose switchover GRP1 | 主机正常运行状态下查看可切换主机的实例列表 |
| switchover GRP1.实例名 | 主机正常时使用指定实例切换为主机 |
| choose takeover GRP1 | 主机故障时查看可切换主机的实例列表 |
| takeover GRP1.实例名 | 主机故障时使用指定实例切换为主机 |
| choose takeover force GRP1 | 强制切换模式下查看可切换主机的实例列表 |
| takeover force GRP1.实例名 | 强制使用指定实例切换为主机 |
对于在生产环境中配置有确认监视器时,主备只是发生了切换的情况下,再想将主备切换回去时,只需要启动非确认监视器执行切换命令即可。
例如,有主库 GRP1_RT_01 与备库 GRP1_RT_02 发生切换,恢复方法如下:
通过前台方式启动非确认监视器。
./dmmonitor dmmonitor_manual.ini

从监视器中可以看到 GRP1_RT_02 变成了主库,GRP1_RT_01 变成了备库。
检查集群状态。
可通过监视器命令"tip"或"show"来检查集群状态是否正常。

通过 “tip” 命令可以看到集群状态正常。
登录非确认监视器。
在非确认监视器中输入"login"再输入用户名和密码登录监视器。

查看满足切换条件的实例。
输入命令"choose switchover 组名"查看可切换为主机的实例列表。
choose switchover GRP1

可以看到 GRP1_RT_01 可以进行切换。
主备切换。
执行命令"switchover GRP1.实例名"进行切换。
switchover GRP1.GRP1_RT_01

切换成功,GRP1_RT_01 恢复到主库对外提供服务。
退出非确认监视器。
先通过监视器命令"tip"和"show"检查当前集群状态。

集群状态正常,执行“exit”命令退出监视器。

建议 生产环境中建议应用使用服务名的方式进行连接,在配置文件 dm_svc.conf
中配置只连主库,这样连接的好处在于当主备发生切换后应用会自动连接到当前的主库,不会影响应用的正常使用。dm_svc.conf
详细介绍参考第三章节 dm_svc.conf 配置。
2.4 启动服务及查看信息
2.4.1 启动数据库并修改参数
##A 机器
[dmdba@~]$ /opt/dmdbms/bin/DmServiceGRP1_RT_01 start
[dmdba@~]$ /opt/dmdbms/bin/disql SYSDBA/*****@172.16.1.1:5236
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL> SP_SET_OGUID(45331);
SQL> ALTER DATABASE PRIMARY;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
##B 机器
[dmdba@~]$ /opt/dmdbms/bin/DmServiceGRP1_RT_02 start
[dmdba@~]$ /opt/dmdbms/bin/disql SYSDBA/*****@172.16.1.2:5236
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL> SP_SET_OGUID(45331);
SQL> ALTER DATABASE STANDBY;
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
2.4.2 启动守护进程
##A/B机器
[dmdba@~]$ /opt/dmdbms/bin/DmWatcherServiceWatcher start
2.4.3 启动监视器
##后台启动
[dmdba@~]$ /opt/dmdbms/bin/DmMonitorServiceMonitor start
##前台启动
[dmdba@~]$ /opt/dmdbms/bin/dmmonitor /opt/dmdbms/bin/dmmonitor.ini
2.5 启停集群
##启动
##A/B 机器
[dmdba@~]$ /opt/dmdbms/bin/DmWatcherServiceWatcher start
##停止
##A/B机器
[dmdba@~]$ /opt/dmdbms/bin/DmWatcherServiceWatcher stop
##A 机器
[dmdba@~]$ /opt/dmdbms/bin/DmServiceGRP1_RT_01 stop
##B机器
[dmdba@~]$ /opt/dmdbms/bin/DmServiceGRP1_RT_02 stop
三、dm_svc.conf 配置
3.1 简介
dm_svc.conf 是使用达梦数据库时非常重要的配置文件,它包含了达梦各接口和客户端工具所需要配置的一些参数。通过它可以实现达梦各种集群的读写分离和均衡负载,且必须和接口/客户端工具位于同一台机器上才能生效。
初始 dm_svc.conf 文件由达梦安装时自动生成。不同的平台生成目录有所不同,注意相应访问用户需要对该文件有读取权限。
32 位的 DM 安装在 Win32 操作平台下,此文件位于 %SystemRoot%\system32 目录;
64 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\system32 目录;
32 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\SysWOW64 目录;
在 Linux 平台下,此文件位于 /etc 目录。
但在某些情况下,所使用的用户没有读取和修改 /etc 目录下文件的权限,这时就需要将 dm_svc.conf 文件放到有权限的目录下,并修改 url 连接串的内容。以 Linux 平台,文件放在 /home/dmdba 目录下为例:
在 /home/dmdba 目录下,编辑 dm_svc.conf 文件。
TIME_ZONE=(480)
LANGUAGE=(cn)
dm=(ip:端口)
[dm]
KEYWORDS=(需要排除的关键字)
修改连接串。
jdbc:dm://dm?dmsvcconf=/home/dmdba/dm_svc.conf
dm_svc.conf 配置文件的内容分为全局配置区和服务配置区。全局配置区在前,可配置所有的配置项,服务配置区在后,以“[服务名]”开头,可配置除了服务名外的所有配置项。服务配置区中的配置优先级高于全局配置区(服务配置区的相同配置项会覆盖全局配置区对应的配置项)。
3.2 常用配置项介绍
服务名
用于连接数据库的服务名,参数值格式为:
服务名=(IP[:PORT],IP[:PORT],…)。
TIME_ZONE
指明客户端的默认时区设置范围为:-779~840M,如 60 对应 +1:00 时区,+480 对于东八区,如果不做配置默认是操作系统的时区。
KEYWORDS
该参数可以用于屏蔽数据库关键字,如果数据库关键字在 SQL 语句中以单词的形式存在,无法识别需要加上双引号或者可以通过该参数来屏蔽关键字,建议大小写都写入参数中。
例如:KEYWORDS=(versions,VERSIONS,type,TYPE)。
LOGIN_MODE
指定优先登录的服务器模式。0:优先连接 PRIMARY 模式的库,NORMAL 模式次之,最后选择 STANTBY 模式;1:只连接主库;2:只连接备库;3:优先连接 STANDBY 模式的库,PRIMARY 模式次之,最后选择 NORMAL 模式;4:优先连接 NORMAL 模式的库,PRIMARY 模式次之,最后选择 STANDBY 模式。
注意 在 2021 年版本之后,此参数的默认值由 0 变更为 4。该参数详细介绍及使用办法请参考《DM 数据守护与读写分离集群》-5.8
章节。手册位于数据库安装路径 /dmdbms/doc 文件夹。
SWITCH_TIMES
表示以服务名连接数据库时,若未找到符合条件的库成功建立连接,将尝试遍历服务名中库列表的次数。有效值范围 1~9223372036854775807,默认值为 1,可以设置至少 3 次用来避免由于网卡的波动,造成数据库连接测频繁切换。
SWITCH_INTERVAL
表示在服务器之间切换的时间间隔,单位为毫秒,有效值范围 1~9223372036854775807。与参数 SWITCH_TIMES、EP_SELECTOR 配合使用,EP_SELECTOR 设置为 0,等待 SWITCH_INTERVAL 后会切换尝试连接下一个服务器,EP_SELECTOR 设置为 1,等待 SWITCH_INTERVAL 后会继续尝试连接该服务器,直到 SWITCH_TIMES 次再切换下一个服务器。
EP_SELECTOR
表示连接数据库时采用何种模型建立连接。0:依次选取列表中的不同节点建立连接,使得所有连接均匀地分布在各个节点上;1:选择列表中最前面的节点建立连接,只有当前节点无法建立连接时才会选择下一个节点进行连接。
AUTO_RECONNECT
表示连接发生异常或一些特殊场景下连接处理策略。0:关闭连接,1:当连接发生异常时自动切换到其他库,无论切换成功还是失败都会抛一个 SQLEXCEPTION,用于通知上层应用进行事务执行失败时的相关处理;2 配合 EP_SELECTOR=1 使用,如果服务名列表前面的节点恢复了,将当前连接切换到前面的节点上,可以根据应用的实际要求设定。
3.3 常用配置
3.3.1 单机配置
##以#开头的行表示是注释
##全局配置区
TIME_ZONE=(480)
LANGUAGE=(cn)
DM=(172.16.1.1:5236)
Disql 连接:
[dmdba@localhost~]$/dmsoft/dmdbms/disql SYSDBA/*****@DM
通过管理工具连接:

3.3.2 主备集群配置
##以#开头的行表示是注释#
##全局配置区
TIME_ZONE=(480)
LANGUAGE=(cn)
DMHA=(172.16.1.1:5236,172.16.1.2:5236)
##服务配置
[DMHA]
SWITCH_TIMES=(3)
SWITCH_INTERVAL=(100)
LOGIN_MODE=(1)
jdbc:dm://DMHA
195

被折叠的 条评论
为什么被折叠?



