直接查看参数文件
less /dmdata/data/DMOA/dm.ini
1.控制文件(dm.ctl) 是数据库的“元数据总目录”,记录数据库名、数据文件路径、表空间信息、日志文件位置等核心结构信息。数据库启动时必须读取它,找不到或损坏就无法启动
查看控制文件(dm.ctl)的位置和备份位置
grep -E "CTL_PATH|CTL_BAK_PATH" /dmdata/data/DMOA/dm.ini
2.实例名
查看当前数据库实例名
grep -E "CTL_PATH|CTL_BAK_PATH" /dmdata/data/DMOA/dm.ini
3.内存相关控制数据库运行时内存如何分配,直接影响性能和并发能力
MEMORY_POOL:内存池大小,数据库运行的“工作台”
BUFFER:数据缓冲区,缓存磁盘数据页,减少物理 IO;
MAX_SESSIONS:最大会话数,即允许的最大并发连接数;
MEMORY_TARGET:内存总目标上限
grep -E "MEMORY_POOL|BUFFER|MAX_SESSIONS|MEMORY_TARGET" /dmdata/data/DMOA/dm.ini
4.查询优化相关控制 SQL 优化器行为和并行执行策略,决定查询执行计划的生成方式和执行效率
OPTIMIZER_MODE:优化器模式,1 为新优化器,执行计划更智能;
MAX_PARALLEL_DEGREE:单条 SQL 最大并行度;
PARALLEL_POLICY:并行策略,0 关闭,1 自动,2 手动
grep -E "OPTIMIZER_MODE|PARALLEL_POLICY|MAX_PARALLEL_DEGREE" /dmdata/data/DMOA/dm.ini
5. Redo 日志记录所有数据修改操作,用于故障恢复和保证事务持久性。相关参数控制日志缓冲区大小、日志包大小等
RLOG_BUF_SIZE:日志缓冲区大小;
RLOG_PKG_MAX_SIZE:单个日志包最大大小
grep -E "RLOG_BUF_SIZE|RLOG_PKG_MAX_SIZE|CKPT_INTERVAL" /dmdata/data/DMOA/dm.ini
6.数据库相关控制数据库对外服务的基础属性
PORT_NUM:监听端口,客户端通过它连接;
MAX_CONNECTIONS:最大连接数;
COMPATIBLE_MODE:兼容模式,影响 SQL 语法行为
grep -E "PORT_NUM|MAX_CONNECTIONS|COMPATIBLE_MODE" /dmdata/data/DMOA/dm.ini
动态参数又分成两种:
1.使用达梦数据库过程函数进行修改
DM 提供了一组系统过程用于在服务器运行期间动态修改参数,按参数的数据类型选择不同的过程:
整型参数SP_SET_PARA_VALUE(scope, 'PARA_NAME', value);
浮点型参数SP_SET_PARA_DOUBLE_VALUE(scope, 'PARA_NAME', value);
字符串型参数SP_SET_PARA_STRING_VALUE(scope, 'PARA_NAME', value);
例1:改一个动态参数,立即生效(改内存 + 改文件)
SP_SET_PARA_VALUE(1, 'SORT_BUF_GLOBAL_SIZE', 2000);
例2:改一个静态参数,必须重启才生效(只改文件)
SP_SET_PARA_VALUE(2, 'BUFFER', 2000);
重启后查证: para_value 和 file_value与修改内容 一致
SELECT PARA_NAME, PARA_VALUE, FILE_VALUE, PARA_TYPE
FROM V$DM_INI WHERE PARA_NAME = 'BUFFER';
2.ALTER SYSTEM 语句
ALTER SYSTEM SET 'LIST_TABLE' = 1 BOTH; -- 内存 + 参数文件(推荐)
ALTER SYSTEM SET 'LIST_TABLE' = 1 MEMORY; -- 只改内存,重启失效
ALTER SYSTEM SET 'LIST_TABLE' = 0 SPFILE; -- 只改文件,重启生效
3.会话级修改(只影响当前会话)
有些动态参数是会话级的,想让它在当前会话立刻按新值运行、又不动全局配置时,用专门的过程,这类修改只对当前会话和之后新建的会话有效,不影响其他会话,也不写回 dm.ini,断开连接就没了
SF_SET_SESSION_PARA_VALUE('SORT_BUF_SIZE', 50);
断开连接后无修改内容
4.直接修改 dm.ini 文件
手动类参数只能用这种方式,静态参数如果不想用存储过程,也可以直接改文件:
写文件时如果填了非法值,DM 的处理规则是:类型不兼容 → 取默认值;小于最小值 → 取最小值;大于最大值 → 取最大值。而通过存储过程动态修改时填非法值,会直接报错。
一个 dm_svc.conf 分成两个区,顺序不能颠倒,服务配置区的配置项会覆盖全局配置区里同名的配置项:
配置项 缺省值 含义
服务名 无 格式:服务名=(IP[:PORT],IP[:PORT],...)。用来定义一组可连接的库地址
TIME_ZONE 操作系统时区 客户端默认时区,单位分钟,60 表示 +1:00,东八区写作 480。范围 -779~840
LANGUAGE 操作系统语言 帮助信息、错误提示使用的语言。
CHAR_CODE 操作系统编码 客户端编码,影响帮助信息和错误提示,必须与客户端编码一致。取值有 PG_UTF8、PG_GBK、PG_GB18030、PG_BIG5、PG_EUC_JP、PG_EUC_KR、PG_ISO_8859_1 等
KEYWORDS 无 屏蔽数据库关键字。若 SQL 里把关键字当普通单词用会报错,可在此屏蔽
LOGIN_MODE 4 优先登录服务器模式:0 = PRIMARY>NORMAL>STANDBY;1 = 只连主库;2 = 只连备库;3 = STANDBY>PRIMARY>NORMAL;4 = NORMAL>PRIMARY>STANDBY
SWITCH_TIMES 1 指定自动重连次数。如果无法成功连接到单节点数
据库,则按照SWITCH_TIMES指定次数尝试自动重连
SWITCH_INTERVAL 200 服务器之间的切换时间间隔(毫秒)
EP_SELECTOR 0 连接数据库时采用何种模型建立连接。0:依次选取列表中的不同节点建立连接,使得所有连接均匀地分布在各个节点上;1:选择列表中最前面的节点建立连接,只有当前节点无法建立连接时才会选择下一个节点进行连接
AUTO_RECONNECT 0 连接异常后的自动重连/回切策略,0:关闭连接;1:当连接发生异常时自动切换到其他库,无论切换成功还是失败都会抛一个SQLEXCEPTION,用于通知上层应用进行事务执行失败时的相关处理;2:配合EP_SELECTOR=1使用,如果服务名列表前面的
节点恢复了,将当前连接切换到前面的节点上
SQL 日志记录数据库各会话上用户执行的 SQL 语句、参数信息、错误信息等,主要用于分析错误、分析性能问题,例如筛出执行慢的 SQL 做优化,默认是关闭状态
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='SVR_LOG';
开关参数:dm.ini 中的 SVR_LOG
取值 含义
0 关闭 SQL 日志(默认)
1 打开,并按照 sqllog.ini 中的配置来记录 SQL 日志
2 打开,按文件中记录数量切换日志文件,日志记录为详细模式
3 打开,不切换日志文件,日志记录为简单模式,只记录时间和原始语句
sqllog.ini,它由两部分组成:前七行是全局缓存配置,后面是各模式配置区
所在位置:/dmdata/data/DMOA/sqllog.ini
全局缓存配置
BUF_TOTAL_SIZE = 10240 # SQL 日志 缓冲区大小,单位 KB
BUF_SIZE = 1024 # 单个SQL 日志缓冲区大小,单位 KB
BUF_KEEP_CNT = 6 # 系统保留的 SQL 日志缓存块个数,范围 1~100
PARAMS_DELAY = 0 #SQL 日志参数数据是否延迟上报
PARAMS_BUF_MAX = 512 #SQL 日志参数数据缓冲区最大大小,单位 KB
CLOSE_IF_WRITE_ERROR = 1 #写日志出错时是否关闭 SQL 日志功能,1关闭,0继续尝试
FILE_NAME_FLAG = 1 #日志文件命名模式
[SLOG_ALL] # 模式配置区,模式名为 SLOG_ALL所有 SQL 的通用记录规则
FILE_PATH = ../log # 日志文件存放目录
PART_STOR = 0 # 是否按条件分区存储:0 否;1 按用户分文件
SWITCH_MODE = 2 # 文件切换模式:0 不切换 / 1 按数量 / 2 按大小 / 3 按间隔
SWITCH_LIMIT = 128 # 切换阈值,含义随 SWITCH_MODE 变化
ASYNC_FLUSH = 1 # 是否异步刷盘:0 同步(影响性能);1 异步
FILE_NUM = 5 # 一共保留几个日志文件,超出后轮换覆盖
ITEMS = 0 # 一条日志记录哪些内容,0 表示记录全部信息
SQL_TRACE_MASK = 1 # 记录哪些类型的语句(冒号分隔)
MIN_EXEC_TIME = 0 # 只记录执行时间超过多少毫秒的语句
USER_MODE = 0 # 是否按用户过滤:0 否;1 是
USERS = # 按用户过滤时指定的用户列表
EXECTIME_PREC_FLAG = 0 # 执行时间单位:0 毫秒
[SLOG_ERROR] 出错的 SQL
[SLOG_DDL] DDL 语句
[SLOG_LONG_SQL] 超长耗时的慢 SQL
#开启日志
SP_SET_PARA_VALUE(1, 'SVR_LOG', 1);
确认开关状态
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME = 'SVR_LOG';
进入日志目录,按时间倒序列出
cd /home/dmdba/dmdbms/log
tail -f dmsql_DMOA_20260921_144451.log
只看包含某条 SQL 的记录
grep -n 'select' dmsql_DMOA_20260921_144451.log | head -20
统计日志里一共有多少条记录
wc -l dmsql_DMOA_20260921_144451.log
#关闭日志
SP_SET_PARA_VALUE(1, 'SVR_LOG', 0);
SELECT PARA_VALUE FROM V$DM_INI WHERE PARA_NAME = 'SVR_LOG';
通过归档把 Redo 日志完整地保留下来,实现联机备份、增量备份,能把数据库恢复到任意时间点。实时主备、读写分离、DSC 集群的数据同步,全都建立在归档之上
ARCH_TYPE 名称 说明
LOCAL 本地归档 把 Redo 日志写到本地磁盘上的归档文件里
REALTIME 实时归档 在 Redo 日志写入联机日志前,通过MAL系统发送REDO日志到远程服务器
SYNC 同步归档 同步方式归档,主库在归档日志刷盘后,主库等待备库确认
ASYNC 异步归档 异步发送,可配合定时器按策略发送,对主库影响小
TIMELY 即时归档 在REDO日志写入联机日志文件后,再通过MAL系统将REDO日志发送到备库
REMOTE 远程归档 主要用于 DMDSC 集群内部实例之间互备,归档目标是单个实例
RAFT RAFT 归档 通过 RAFT 归档方式向备库同步数据
#查看配置文件
cat /dmdata/data/DMOA/dmarch.ini
[ARCHIVE_LOCAL1] # 归档名
ARCH_TYPE = LOCAL # 归档类型:本地归档
ARCH_DEST = /dmdata/arch # 归档文件存放路径
ARCH_FILE_SIZE = 1024 # 单个归档文件大小,单位 MB,范围 64~2048,默认 1024
ARCH_SPACE_LIMIT = 10240 # 归档空间上限,单位 MB,0 表示不限制
ARCH_FLUSH_BUF_SIZE = 2 # 归档刷盘缓存大小,单位 MB,范围 0~128
ARCH_HANG_FLAG = 1 # 本地归档写入失败时是否挂起服务器:0 不挂起 / 1 挂起
归档状查看与修改
2.通过 dm.ini查看修改ARCH_INI状态
查看归档状态
grep -n "ARCH_INI" /dmdata/data/DMOA/dm.ini
目前是已开启的状态
vim /dmdata/data/DMOA/dm.ini # 1改为0
重启实例
systemctl restart DmServiceDMOA
#再次查看验证已经关闭
文章
阅读量
获赞
