当前位置: 首页 > news >正文

​Oracle RAC灾备环境UNDO表空间管理终极指南:解决备库修改难题与性能优化实战​

问题1:ORACLE RAC的DG备库也是RAC,如何修改备库的UNDO默认表空间,直接alter 提示ORA-02097和ORA-01682

备库处于 MOUNT(或 READ ONLY WITH APPLY)状态,数据文件尚未写开,Oracle 怕你把 UNDO 指向一个“目前还不存在或没在线”的表空间,于是抛出

ORA-02097: parameter cannot be modified because specified value is invalid
ORA-01682: unable to extend/allocate the undo segment in the specified undo tablespace

这两个错误说“现在不能改”,并非表空间本身有问题。
RAC 环境下每个实例本来就应该使用自己独占的 UNDO 表空间,主库通常已经给每个 THREAD 配好,备库端只要数据文件存在、线程参数正确,不需要也不允许手动去改。

问题2:主库节点1将默认UNDO表空间改为了undotbs3,是不是主库已经同步给备库,备库重启就生效了?

是的,只要主库的修改已经同步到备库的控制文件和 SPFILE,备库重启后就会直接生效,不需要再手动做任何“ALTER SYSTEM”。

或者你也可以在备库修改

alter system set undo_tablespace='UNDOTBS3' sid='abc1' scope=spfile;

具体分两种情况:
主库用 SCOPE=BOTH SID='xxx' 修改了本节点的 UNDO_TABLESPACE
修改会写进 redo,DG 恢复进程会把这条 ALTER SYSTEM 记录一起应用到备库的控制文件和 SPFILE。

备库此时处于 MOUNT 状态,参数虽然已写进 SPFILE,但 内存值并未生效(实例未打开)。
重启备库实例(或整个 RAC 节点)后,实例按 SPFILE 里的新值打开,新的 UNDO 表空间就被启用。

在备库节点只执行了 ALTER SYSTEM SET … SCOPE=SPFILE SID=‘xxx’
同样只是把值写进 SPFILE,内存不变;必须重启该实例才能看到新值生效

参考文档

How to set the Undo_tablespace in PDB in Physical Standby RAC Database. (Doc ID 2726173.1)

问题3:如何手动释放UNDOTBS1表空间中的数据?

undo 表空间里的段(undo segment)完全由系统自管;
DBA 不能手工 drop/extent/释放其中的数据。

唯一能把 UNDOTBS1 真正“清空”或“释放”的方法只有:
新建一个 undo 表空间(例如 UNDOTBS3);
把实例切换到新表空间;

– 在主库节点 1 上:

CREATE UNDO TABLESPACE undotbs3DATAFILE '+DATA'SIZE 10G AUTOEXTEND ON NEXT 1G MAXSIZE 31G;ALTER SYSTEM SET undo_tablespace='UNDOTBS3' SCOPE=BOTH SID='abc1';

表空间UNDOTBS3显示为空;

SELECT
seg.tablespace_name "Tablespace Name",
ts.bytes/1024/1024 "TS Size(MB)",
ue.status "UNDO Status",
count(*) "Used Extents",
round(sum(ue.bytes)/1024/1024, 2) "Used Size(MB)",
round(sum(ue.bytes)/ts.bytes*100, 2) "Used Rate(%)"
FROM dba_segments seg, DBA_UNDO_EXTENTS ue,
(SELECT tablespace_name, sum(bytes) bytesFROM dba_data_files GROUP BY tablespace_name) tsWHERE ue.segment_NAME=seg.segment_NAME and seg.tablespace_name=ts.tablespace_nameGROUP BY seg.tablespace_name, ts.bytes, ue.status ORDER BY seg.tablespace_name;

这种就不能删表空间UNDOTBS3

备库再用UNDOTBS1的时候千万别删除主库的UNDOTB1,否则DG备库会报错的,导致备库不能同步。
备库生效
若主库用了 SCOPE=BOTH,备库 SPFILE 已更新,只需

在备库节点 1

srvctl stop instance -db orcldg -node orcldg1
srvctl start instance -db orcldg -node orcldg1

最后 drop 旧表空间(让 Oracle 自动回收数据文件)

DROP TABLESPACE undotbs1 INCLUDING CONTENTS AND DATAFILES;

Oracle的gv$undostat字段解释

在Oracle数据库中,GV$UNDOSTAT 视图非常重要,它提供了整个数据库集群(RAC环境)中所有实例的UNDO表空间使用情况和事务活动的统计信息,主要服务于自动Undo管理(AUM)。

下面是 GV$UNDOSTAT 核心字段的详细解释,为了帮助你快速了解,我将它们分成了几个类别:

📊 核心字段详解

类别字段名说明
基本信息INST_ID实例编号。在RAC环境中,标识数据来源于哪个实例。
BEGIN_TIME统计时间段的开始时间
END_TIME统计时间段的结束时间。默认每10分钟为一个统计间隔。
UNDOTSN在此时间段内活动的UNDO表空间的时间戳编号
空间使用UNDOBLKS在此时间间隔内,事务消耗的UNDO块总数。这是衡量UNDO空间生成速率的核心指标。
ACTIVEBLKS当前活动事务所占用的UNDO块数(这些事务尚未提交或回滚)。
EXPIREDBLKS在此时间间隔内,已过期的UNDO块数(事务已提交,且保留时间超过UNDO_RETENTION设置)。这些空间可被新事务重用。
UNEXPIREDBLKS在此时间间隔内,未过期的UNDO块数(事务已提交,但保留时间未超过UNDO_RETENTION)。这些空间应被保留用于一致性读。
事务与查询TXNCOUNT在时间间隔内执行的事务总数
MAXCONCURRENCY在时间间隔内,同时执行的最大并发事务数
MAXQUERYLEN在此时间间隔内,出现的最长查询的执行时间(秒)。这是诊断ORA-01555错误的关键字段。
空间压力指标EXPSTEALCNT为了满足新事务,系统窃取已过期(Expired)的UNDO扩展段的次数。这是正常且期望的行为。
UNXPSTEALCNT为了满足新事务,系统窃取未过期(Unexpired)的UNDO扩展段的次数非零值是一个警告信号,表明UNDO空间可能不足,Oracle正在强制重用本应保留的空间。
SSOLDERRCNT在此时间间隔内,发生的 ORA-01555: snapshot too old(快照过旧)错误的数量。任何非零值都意味着需要调整UNDO配置。
NOSPACEERRCNT在此时间间隔内,因无法在UNDO表空间中分配空间而发生的错误数量非零值是一个严重警报,表明UNDO表空间严重不足,必须立即处理。
优化信息TUNED_UNDORETENTIONOracle系统自动为您调整的UNDO保留时间(秒)。在AUM模式下,Oracle可能根据负载和最长查询自动调整实际保留时间。

💡 主要应用场景

了解这些字段后,你可以利用 GV$UNDOSTAT 视图完成以下几项重要工作:

  1. 诊断和预防 ORA-01555 错误
    这是 GV$UNDOSTAT 最经典的应用。你可以通过检查 SSOLDERRCNT 字段来判断是否发生过此错误,并通过比较 MAXQUERYLENTUNED_UNDORETENTION 来分析错误原因。

  2. 评估和规划 UNDO 表空间大小
    通过观察 UNDOBLKS 的历史峰值,并结合 UNDO_RETENTION 参数,可以估算UNDO表空间的合理大小,避免空间不足或浪费。

  3. 监控 UNDO 表空间压力
    关注 UNXPSTEALCNT(窃取未过期块次数)和 NOSPACEERRCNT(空间不足错误计数)等指标。如果这些值非零或持续增长,通常意味着UNDO表空间面临压力,需要及时干预。

一个简单的查询示例

如果你想查看过去一段时间内每个实例是否发生过 ORA-01555 错误,可以执行如下SQL:

SELECTinst_id,TO_CHAR(begin_time, 'YYYY-MM-DD HH24:MI') AS begin_time,TO_CHAR(end_time, 'YYYY-MM-DD HH24:MI') AS end_time,maxquerylen,tuned_undoretention,ssolderrcnt
FROMgv$undostat
WHEREssolderrcnt > 0
ORDER BYinst_id, begin_time DESC;
http://www.dtcms.com/a/568526.html

相关文章:

  • 《uni-app跨平台开发完全指南》- 02 - 项目结构与配置文件详解
  • 【数据分析】基于R语言的废水微生物抗性分析与负二项回归模型建模
  • 深圳专业网站公司注册查询网站
  • k8s --- resource 资源
  • 神经网络之反射变换
  • k8s——pod详解2
  • 四层神经网络案例(含反向传播)
  • MySQL初阶学习日记(1)--- 数据库的基本操作
  • 【k8s】k8s的网络底层原理
  • 一种创新的集成学习模型:结合双通路神经网络与逻辑回归的糖尿病患病概率预测
  • 神经网络之线性变换
  • Fastlane 结合 开心上架(Appuploader)命令行版本实现跨平台上传发布 iOS App 免 Mac 自动化上架实战全解析
  • 大连网站建设平台宁夏考试教育网站
  • 微信网站对接室内设计师报考官网
  • Ceph常用的三种存储操作
  • 【前端】从零开始搭建现代前端框架:React 19、Vite、Tailwind CSS、ShadCN UI 完整实战教程-第1章:项目概述与技术栈介绍
  • react使用ag-grid及常用api笔记
  • MiniEngine学习笔记 : CommandListManager
  • 人工智能讲师数据治理讲师叶梓《数字化转型与大模型技术应用培训提纲》
  • 1.7.课设实验-数据结构-二叉树-文件夹创建系统
  • 互联网大学生创新创业项目计划书seo网址查询
  • 同时打开两个浏览器页面,关闭 A 页面的时候,要求 B 页面同时关闭,怎么实现?
  • 什么是react?
  • Arbess零基础学习 - 使用Arbess+GitLab实现 React.js 项目自动化构建/主机部署
  • 从事网站开发需要的证书网页设计免费网站推荐
  • 任何数据结构的构造或初始化,都应指定大小,避免数据结构无限增长吃光内存【示例】
  • 【开题答辩实录分享】以《基于java的宿舍楼洗衣机预约管理系统》为例进行答辩实录分享
  • 如何在iPhone 17/16/15上显示电池百分比
  • 网站换主机引擎网站推广法
  • 【普中STM32F1xx开发攻略--标准库版】-- 第 13 章 STM32 位带操作