达梦数据库的配置管理、归档设置、SQL日志、数据字典、作业调度和备份还原等多个高级功能。对于dm.ini配置部分,从内存管理(MAX_OS_MEMORY/BUFFER)、查询优化(SORT_BUF_SIZE/HAGR_HASH_SIZE)等维度组织参数表。考虑补充动态修改示例SP_SET_PARA_VALUE(1,'BUFFER',10000)。关于dmarch.ini归档配置,发现达梦支持5种归档类型:本地/实时/即时/异步/远程。准备用对比表格说明LOCAL和REALTIME的关键区别,并给出实时归档的MAL配置示例。考虑设计一个包含多个备用节点的配置示例,演示故障转移场景。SQL日志开启需要分两步:先用SP_SET_PARA_VALUE(1,'SVR_LOG',1)启用日志,再设SQL_TRACE_MASK定义记录范围。考虑补充记录慢查询的典型参数SVR_LOG_MIN_EXEC_TIME=100。数据字典部分,区分达梦原生视图(V开头的动态视图)和Oracle兼容视图(DBATABLES等)。用VDM_INI和DBA_USERS的查询示例展示差异。作业调度模块考虑设计完整案例:创建每分钟全备作业→验证备份文件→监控作业状态。备份还原部分考虑突出表空间备份和归档备份等特殊场景。表空间备份需要先ALTER TABLESPACE MAIN BEGIN BACKUP,而归档备份用BACKUP ARCHIVELOG ALL命令。最后考虑补充逻辑导出的进阶参数,如EXCLUDE/QUERY条件过滤。
dm.ini 是数据库启动必需文件,参数分为静态(重启生效)、动态(立即生效)和手动(只读)三类:
-- 查看参数类型及值
SELECT para_name, para_value, type FROM VDM_INI;
关键参数分类表
⚠️ 修改静态参数后必须重启数据库:
DmServiceDMSERVER restart
-- 1. 修改静态参数配置文件 scope=2 或直接编辑 dm.ini
SP_SET_PARA_VALUE(2, 'MAX_OS_MEMORY', 80);
-- 2. 重启数据库服务(Linux)
systemctl restart DmServiceDMSERVER;
-- 3. 验证参数 如下图
SELECT SF_GET_PARA_VALUE(2, 'MAX_OS_MEMORY'); -- 应返回 90
客户端验证
支持5种归档类型,需先启用dm.ini中的ARCH_INI=1:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmarch # 归档路径
ARCH_FILE_SIZE = 2048 # 单文件大小(MB)
ARCH_SPACE_LIMIT = 102400 # 总空间限制(MB)
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = MAL_INST1 # 目标实例名(需配置dmmal.ini)
[ARCHIVE_ASYNC1]
ARCH_TYPE = ASYNC
ARCH_DEST = MAL_INST2
ARCH_TIMER_NAME = ARCH_TIMER1 # 需在dmtimer.ini定义定时器
归档切换命令:
ALTER SYSTEM SWITCH LOGFILE; -- 强制切换Redo日志
监控归档状态:
SELECT * FROM V$ARCHIVED_LOG; -- 归档日志记录
SELECT * FROM VDM_ARCH_INI; -- 归档配置
文件位置:/etc/dm_svc.conf (Linux) 或 C:\Windows\System32\dm_svc.conf (Windows)
##以#开头的行表示是注释
##全局配置区
TIME_ZONE=(480)
LANGUAGE=(cn)
DM=(192.168.80.130:5236)
disql的连接方式:
/dmsoft/dmdbms/disql SYSDBA/Lch99903@DM
jdbc连接字符串写法:
jdbc:dm://DM/dbname #用DM替换了ip,端口。
生效条件:客户端工具(如disql)连接时指定服务名:
disql SYSDBA/SYSDBA@DM
虚拟机实操
SP_SET_PARA_VALUE(1, 'SVR_LOG', 1); -- 开启SQL日志
SF_SET_SYSTEM_PARA_VALUE('SQL_TRACE_MASK', '2:3:22:25:28', 0, 1); -- 记录DML/DDL
SF_SET_SYSTEM_PARA_VALUE('SVR_LOG_MIN_EXEC_TIME', 100, 0, 1); -- 记录>100ms的SQL
日志文件
日志路径:$DM_HOME/log/DMSQL_<实例名>_<日期>.log
SELECT para_value FROM V$DM_INI WHERE para_name = 'SVR_LOG_PATH';
示例:
SELECT * FROM DBA_TABLES WHERE OWNER = 'SYSDBA';
BEGIN
DBMS_JOB.CREATE(
JOB_NAME => 'MINUTE_BACKUP',
ENABLED => 1,
START_TIME => SYSDATE,
REPEAT_INTERVAL => 'FREQ=MINUTELY;INTERVAL=1',
JOB_ACTION => 'BACKUP DATABASE FULL BACKUPSET ''/dmbak/full_backup'';'
);
END;
SELECT * FROM SYSJOB.SYSJOBS WHERE NAME = 'JOB1';
SELECT * FROM V$BACKUPSET; -- 验证备份集
-- 表空间备份(需脱机)
ALTER TABLESPACE MAIN OFFLINE;
BACKUP TABLESPACE MAIN BACKUPSET '/dmbak/ts_main';
-- 表级备份(联机)
BACKUP TABLE SYSDBA.EMPLOYEE BACKUPSET '/dmbak/tab_employee';
-- 归档备份(自动清理)
BACKUP ARCHIVELOG ALL BACKUPSET '/dmbak/arch_backup' DELETE INPUT;
--导出表中符合personid>13的数据
EXPORT TABLE SALES.CUSTOMER
QUERY 'WHERE personid>13'
FILE '/dm8/backup/sales_2025.dmp';
注意:
还原要注意数据文件的权限、若之前用 root 执行恢复,需重新以 dmdba 用户执行 dmrman 恢复命令
#进入数据库数据目录
cd /dm8/data/DAMENG
#查看文件属主(重点检查 SYSTEM.DBF、MAIN.DBF 等)
ls -l *.DBF
#修正属主和权限(关键步骤)
chown -R dmdba:dinstall /dm8/data/DAMENG
chmod -R 775 /dm8/data/DAMENG
场景1:增量导出某表最近7天数据(并行+压缩)
#导出命令(Linux终端执行)
dexp USERID=SYSDBA/Dameng123@127.0.0.1:5236
FILE=sales_incr.dmp
DIRECTORY=/dmbak
TABLES=PROD.SALES
QUERY="WHERE SALE_DATE > SYSDATE-7"
PARALLEL=4
BUFFER=10240
COMPRESS=Y
场景2:仅导出表结构(排除数据与索引)
dexp USERID=USER1/User123@localhost:5236
SCHEMAS=HR
ROWS=N
INCLUDE=TABLE,VIEW,SEQUENCE
EXCLUDE=INDEXES,CONSTRAINTS
导入时报“表已存在”错误?
添加 TABLE_EXISTS_ACTION=REPLACE 或 TRUNCATE。
大表导出时“快照过旧”?
增加UNDO保留时间:ALTER SYSTEM SET 'UNDO_RETENTION'=36000;。
Windows/Linux密码转义失败?
Linux用三层转义:disql 'USER01/"Pass#@?%"@dmhost'。
文章
阅读量
获赞