DM8 归档日志挖掘导致 TEMP 表空间不释放的问题排查

DM8 归档日志挖掘导致 TEMP 表空间不释放的问题排查

  • [DM8 归档日志挖掘导致 TEMP 表空间不释放的问题排查](#DM8 归档日志挖掘导致 TEMP 表空间不释放的问题排查)
  • [1 环境介绍](#1 环境介绍)
  • [2 数据库准备](#2 数据库准备)
    • [2.1 配置归档](#2.1 配置归档)
    • [2.2 开启逻辑附加日志](#2.2 开启逻辑附加日志)
    • [2.3 开启DBMS_LOGMNR 系统包](#2.3 开启DBMS_LOGMNR 系统包)
    • [2.4 创建数据库用户](#2.4 创建数据库用户)
    • [2.5 创建测试表并构造数据](#2.5 创建测试表并构造数据)
    • [2.6 查询归档日志SCN](#2.6 查询归档日志SCN)
  • [3 归档日志挖掘](#3 归档日志挖掘)
    • [3.1 查询会话与TEMP临时表空间使用率](#3.1 查询会话与TEMP临时表空间使用率)
    • [3.2 模拟归档日志挖掘后TEMP表空间不释放](#3.2 模拟归档日志挖掘后TEMP表空间不释放)
  • [4 总结](#4 总结)
  • [5 更多达梦数据库全方位指南:安装 优化 与实战教程](#5 更多达梦数据库全方位指南:安装 优化 与实战教程)

DM8 归档日志挖掘导致 TEMP 表空间不释放的问题排查

1 环境介绍

CPU X86

OS Kylin v10

DM8-03134284368-20250902-290952-20149 Pack32

DM8-03134284604-20260707-335949-20228

2 数据库准备

2.1 配置归档

bash 复制代码
--配置归档
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/data/dmdba/dmdata/dmarch,TYPE=LOCAL,FILE_SIZE=128,SPACE_LIMIT=2048';
ALTER DATABASE OPEN;
CHECKPOINT(100);

2.2 开启逻辑附加日志

bash 复制代码
--开启逻辑附加日志
SP_SET_PARA_VALUE(1,'RLOG_APPEND_LOGIC',1);

2.3 开启DBMS_LOGMNR 系统包

bash 复制代码
-- 开启DBMS_LOGMNR 系统包
SP_CREATE_SYSTEM_PACKAGES (1,'DBMS_LOGMNR');

2.4 创建数据库用户

sql 复制代码
--将其中的 CESHI 替换为要创建的用户名即可
--用户默认密码: Dameng@123
--通用机创建用户 CESHI
--创建用户默认表空间
CREATE TABLESPACE "CESHI01_DATA" 
DATAFILE 'CESHI_DATA_01.DBF' SIZE 1024 AUTOEXTEND 
          ON NEXT 1024 MAXSIZE 409600 CACHE = NORMAL;
--创建用户索引表空间
CREATE TABLESPACE "CESHI02_INDEX" DATAFILE 
            'CESHI_INDEX_01.DBF' SIZE 1024 AUTOEXTEND 
          ON NEXT 1024 MAXSIZE 409600 CACHE = NORMAL;
--创建用户
CREATE USER "CESHI" IDENTIFIED BY "Dameng@123" 
--ENCRYPT BY OPENSSL_SM3 (存储加密)
DEFAULT TABLESPACE "CESHI01_DATA"
DEFAULT INDEX TABLESPACE "CESHI02_INDEX";

GRANT "PUBLIC","RESOURCE","SOI","SVI","VTI" TO "CESHI";
--根据实际需求 考虑是否授予DBA角色
 GRANT "DBA" TO "CESHI";

2.5 创建测试表并构造数据

sql 复制代码
--创建测试表 并构造数据
CREATE TABLE "CESHI"."TEST"
(
"ID" INT NOT NULL,
"NAME" VARCHAR(64),
"ADDRES" VARCHAR(512),
"E-MAIL" VARCHAR(50),
"PHONE" VARCHAR(11),
"BAK" TEXT,
NOT CLUSTER PRIMARY KEY("ID") USING INDEX TABLESPACE "CESHI02_INDEX" ) ;

BEGIN
    FOR I IN 1..10000000 LOOP 
    INSERT INTO "CESHI"."TEST" VALUES(I,'李明','中国上海','888888@qq.com','18911110000','备注记录');
    END LOOP;
END;

2.6 查询归档日志SCN

sql 复制代码
--查询归档日志SCN
SELECT NAME, FIRST_CHANGE#, FIRST_TIME, NEXT_CHANGE#, NEXT_TIME FROM V$ARCHIVED_LOG;

3 归档日志挖掘

3.1 查询会话与TEMP临时表空间使用率

sql 复制代码
--占用临时表空间的会话
SELECT 
    "TMP_USED_TYPE", 
    "TMP_USED_EXTENT_NUM" * (SF_GET_EXTENT_SIZE()) * (PAGE() / 1024) / 1024 AS TEMP_MB,
    *
FROM "SYS"."V$SESSIONS" 
ORDER BY TEMP_MB DESC;

--查询表空间使用率
DECLARE
K INT:=(SELECT cast(PAGE()/1024 as varchar));

BEGIN
SELECT
        F.CLIENT_PATH,
        G.NAME 所属表空间,
        F.MAX_SIZE||'M' 文件扩展限制,
        (CASE F.AUTO_EXTEND WHEN '1' THEN '是'  ELSE '否' END) 文件自动扩容,
        (CASE F.NEXT_SIZE WHEN '0' THEN '默认值' ELSE F.NEXT_SIZE||'M' END) 文件下次扩容值,
        F.TOTAL_SIZE*K/1024 ||'M' 文件当前大小 ,
        ROUND((F.FREE_SIZE * K/1024 /(F.TOTAL_SIZE * K/1024.0)),2)*100 ||'%' AS 空闲率,
        (1-ROUND((F.FREE_SIZE * K/1024 /(F.TOTAL_SIZE * K/1024.0)),2))*100 ||'%' AS 使用率   
FROM    SYS."V$DATAFILE" F LEFT JOIN SYS.V$TABLESPACE G ON F.GROUP_ID=G.ID 
WHERE G.NAME='TEMP' ORDER BY 1;
END;

3.2 模拟归档日志挖掘后TEMP表空间不释放

sql 复制代码
--添加归档日志
  CALL DBMS_LOGMNR.ADD_LOGFILE('/data/dmdba/dmdata5241/dmarch/ARCHIVE_LOCAL1_0x35D10A12_EP0_2026-08-20_14-53-57.log');
  CALL DBMS_LOGMNR.ADD_LOGFILE('/data/dmdba/dmdata5241/dmarch/ARCHIVE_LOCAL1_0x35D10A12_EP0_2026-08-20_14-58-17.log');
  CALL DBMS_LOGMNR.ADD_LOGFILE('/data/dmdba/dmdata5241/dmarch/ARCHIVE_LOCAL1_0x35D10A12_EP0_2026-08-20_14-58-25.log');
  CALL DBMS_LOGMNR.ADD_LOGFILE('/data/dmdba/dmdata5241/dmarch/ARCHIVE_LOCAL1_0x35D10A12_EP0_2026-08-20_14-58-33.log');
--启动归档日志挖掘 根据2.6 查询出的SCN 填入对应位置
  CALL DBMS_LOGMNR.START_LOGMNR(89572063, 105527164, OPTIONS => 2130);
--移除归档日志
  CALL DBMS_LOGMNR.REMOVE_LOGFILE('/data/dmdba/dmdata5241/dmarch/ARCHIVE_LOCAL1_0x35D10A12_EP0_2026-08-20_14-53-57.log');
  CALL DBMS_LOGMNR.REMOVE_LOGFILE('/data/dmdba/dmdata5241/dmarch/ARCHIVE_LOCAL1_0x35D10A12_EP0_2026-08-20_14-58-17.log');
  CALL DBMS_LOGMNR.REMOVE_LOGFILE('/data/dmdba/dmdata5241/dmarch/ARCHIVE_LOCAL1_0x35D10A12_EP0_2026-08-20_14-58-25.log');
  CALL DBMS_LOGMNR.REMOVE_LOGFILE('/data/dmdba/dmdata5241/dmarch/ARCHIVE_LOCAL1_0x35D10A12_EP0_2026-08-20_14-58-33.log');
--关闭归档挖掘
 CALL DBMS_LOGMNR.END_LOGMNR();

4 总结

  • 1 操作顺序A:在调用 END_LOGMNR 前执行 REMOVE_LOGFILE,导致临时表空间(TEMP)未正常释放。
  • 2 操作顺序B:跳过 REMOVE_LOGFILE 步骤,直接调用 END_LOGMNR,临时表空间释放正常。
  • 3 操作顺序C:先调用 END_LOGMNR 结束挖掘,再执行 REMOVE_LOGFILE,系统抛出异常 -2849(无法删除未列出的日志文件)。
  • 4 操作顺序D:在 START_LOGMNR 前调用 REMOVE_LOGFILE,验证挖掘过程中不调用 REMOVE_LOGFILE 时,临时表空间能正常释放。

5 更多达梦数据库全方位指南:安装 优化 与实战教程

相关推荐
qq_485015211 小时前
MyBatis-Plus 3.x FieldStrategy 作用
java·数据库·mybatis
lhldsg1 小时前
课程排课系统实战指南:从数据库设计到算法调优全流程解析
java·数据库·算法·小程序
丰锋ff1 小时前
数据库操作的一些相关命令
数据库
往事只能回味味道1 小时前
MySQL创建数据库并授权指导用户与IP
数据库·tcp/ip·mysql
BUG研究员_2 小时前
LangChain 向量数据库实战:Redis 与 Pinecone 的知识点总结
数据库·redis·langchain
API快乐传递者2 小时前
1688 跨境电商 API 接口实战指南:从寻源到代采的全链路技术方案
java·前端·数据库
LabVIEW开发2 小时前
LabVIEW按段拆分TDMS文件的格式边界与重构
开发语言·数据库·重构·labview·labview知识·labview功能·labview程序
程序员-Benothing2 小时前
什么是数据全量同步和增量同步?它们各有什么优缺点?
数据库
秋名山码民3 小时前
拙见AI——AI操作系统
数据库·人工智能