分享一个自动化进行Oracle 重做日志组管理的脚本

news/2025/11/4 17:05:20/文章来源:https://www.cnblogs.com/liuziyi1/p/19190806

分享一个自动化进行Oracle 重做日志组管理的脚本

/* Formatted on 2025/11/04 15:00:00 (QP5 v5.300) */
-- File Name : db_add_logfile_optimized.sql
-- Purpose : 优化版Oracle重做日志组管理脚本
-- 支持功能:
-- 1. 支持日志大小单位(G/M/K),参数自动校验
-- 2. 自动补全路径分隔符,校验ASM磁盘组/FS路径存在性
-- 3. 减少视图访问,提升性能
-- 4. 细化错误处理,支持CDB/PDB环境
-- Usage : 
-- 1. 默认执行(2G/每线程6组/默认路径):@db_add_logfile_optimized.sql
-- 2. 自定义执行:@db_add_logfile_optimized.sql 500M 8 +DATA_01/
-- Date : 2025/11/04
SET LINES 300 PAGES 1000 HEADING ON VERIFY OFF SERVEROUTPUT ON SIZE UNLIMITED
PRO ==============================================
PRO Oracle重做日志组管理脚本
PRO 参数说明:
PRO 1. 日志大小(支持G/M/K,如2G、500M,默认2G)
PRO 2. 每线程日志组总数(默认6)
PRO 3. 日志路径(ASM:+DG/,FS:/u01/oradata/,默认取现有日志路径)
PRO ==============================================
/DECLARE-- 1. 输入参数与解析变量p_size_str    VARCHAR2(20) := NVL('&1', '2G');p_group_cnt   VARCHAR2(10) := NVL('&2', '6');p_input_path  VARCHAR2(200) := NVL('&3', 'DEFAULT');v_log_size    NUMBER;          -- 日志大小(字节)v_group_total NUMBER;          -- 每线程日志组总数v_path_type   VARCHAR2(20);    -- 路径类型:ASM/FS/dev/ERRORv_full_path   VARCHAR2(200);   -- 完整路径(补全分隔符后)v_log_mode    VARCHAR2(20);    -- 数据库归档模式v_instance_id NUMBER;          -- 当前实例IDv_is_cdb      BOOLEAN;         -- 是否为CDB环境v_valid       BOOLEAN := TRUE; -- 参数是否有效-- 集合类型:存储日志成员与线程列表(减少视图访问)TYPE t_log_member IS TABLE OF VARCHAR2(200);v_log_members t_log_member;TYPE t_thread IS TABLE OF NUMBER;v_threads     t_thread;-- 2. 工具函数:参数解析与校验FUNCTION parse_size(p_size_str IN VARCHAR2) RETURN NUMBER ISv_num   NUMBER;v_unit  VARCHAR2(2);BEGINIF NOT REGEXP_LIKE(p_size_str, '^[0-9]+\s*[GMKgmk]$') THENDBMS_OUTPUT.PUT_LINE('【参数错误】日志大小格式非法!支持:数字+单位(如2G、500M、1024K)');RETURN NULL;END IF;v_num := TO_NUMBER(REGEXP_SUBSTR(p_size_str, '^[0-9]+'));v_unit := UPPER(REGEXP_SUBSTR(p_size_str, '[GMK]$'));CASE v_unitWHEN 'G' THEN RETURN v_num * 1024 * 1024 * 1024;WHEN 'M' THEN RETURN v_num * 1024 * 1024;WHEN 'K' THEN RETURN v_num * 1024;ELSE RETURN NULL;END CASE;END;-- 3. 工具函数:路径处理FUNCTION get_path_type(p_path IN VARCHAR2) RETURN VARCHAR2 ISBEGINIF p_path = 'DEFAULT' THENRETURN 'DEFAULT';ELSIF REGEXP_LIKE(p_path, '^\+[A-Za-z0-9_]+') THENRETURN 'ASM';ELSIF REGEXP_LIKE(p_path, '^/dev/') THENRETURN 'dev';ELSIF REGEXP_LIKE(p_path, '^[A-Za-z]:\\|^/') THENRETURN 'FS';ELSERETURN 'ERROR';END IF;END;FUNCTION complete_path_sep(p_path IN VARCHAR2, p_type IN VARCHAR2) RETURN VARCHAR2 ISBEGINIF p_type = 'ASM' THENRETURN CASE WHEN SUBSTR(p_path, LENGTH(p_path)) != '/' THEN p_path || '/' ELSE p_path END;ELSIF p_type = 'FS' THENIF REGEXP_LIKE(p_path, '^[A-Za-z]:\\') THENRETURN CASE WHEN SUBSTR(p_path, LENGTH(p_path)) != '\' THEN p_path || '\' ELSE p_path END;ELSERETURN CASE WHEN SUBSTR(p_path, LENGTH(p_path)) != '/' THEN p_path || '/' ELSE p_path END;END IF;ELSERETURN p_path;END IF;END;FUNCTION check_asm_dg(p_path IN VARCHAR2) RETURN BOOLEAN ISv_dg_name VARCHAR2(30) := REGEXP_SUBSTR(p_path, '^\+([A-Za-z0-9_]+)', 1, 1, NULL, 1);v_dg_cnt  NUMBER;BEGINSELECT COUNT(*) INTO v_dg_cnt FROM v$asm_diskgroup WHERE name = v_dg_name;IF v_dg_cnt = 0 THENDBMS_OUTPUT.PUT_LINE('【路径错误】ASM磁盘组不存在:'||v_dg_name);RETURN FALSE;END IF;RETURN TRUE;END;FUNCTION check_fs_path(p_path IN VARCHAR2) RETURN BOOLEAN ISv_file UTL_FILE.FILE_TYPE;v_loc  VARCHAR2(200) := SUBSTR(p_path, 1, LENGTH(p_path)-1);BEGINv_file := UTL_FILE.FOPEN(v_loc, 'tmp_dg_check.tmp', 'w', 1024);UTL_FILE.FCLOSE(v_file);UTL_FILE.FREMOVE(v_loc, 'tmp_dg_check.tmp');RETURN TRUE;EXCEPTIONWHEN UTL_FILE.INVALID_PATH THENDBMS_OUTPUT.PUT_LINE('【路径错误】文件系统路径不存在:'||p_path);RETURN FALSE;WHEN UTL_FILE.ACCESS_DENIED THENDBMS_OUTPUT.PUT_LINE('【权限错误】无权限访问FS路径:'||p_path);RETURN FALSE;WHEN OTHERS THENDBMS_OUTPUT.PUT_LINE('【路径错误】校验FS路径异常:'||SQLERRM);RETURN FALSE;END;-- 4. 工具函数:性能优化与等待PROCEDURE load_log_members ISBEGINSELECT MEMBER BULK COLLECT INTO v_log_members FROM v$logfile;END;FUNCTION is_member_exists(p_member IN VARCHAR2) RETURN BOOLEAN ISBEGINFOR i IN 1..v_log_members.COUNT LOOPIF v_log_members(i) = p_member THEN RETURN TRUE; END IF;END LOOP;RETURN FALSE;END;PROCEDURE wait_seconds(p_sec IN NUMBER) ISv_start NUMBER := DBMS_UTILITY.GET_TIME;BEGINWHILE (DBMS_UTILITY.GET_TIME - v_start) / 100 < p_sec LOOP NULL; END LOOP;END;-- 5. 核心过程:添加日志组PROCEDURE add_logfile(p_thread IN NUMBER, p_group_num IN NUMBER) ISv_sql     VARCHAR2(500);v_member  VARCHAR2(300);BEGINIF v_path_type = 'ASM' THENv_member := v_full_path || 'redo_t'||p_thread||'_g'||p_group_num||'.log';ELSEv_member := v_full_path || 'redo_t'||p_thread||'_g'||p_group_num||'.log';END IF;-- 检查文件名是否存在IF is_member_exists(v_member) THENDBMS_OUTPUT.PUT_LINE('【提示】日志文件已存在:'||v_member,跳过创建');RETURN;END IF;v_sql := 'ALTER DATABASE ADD LOGFILE THREAD '||p_thread||' '''||v_member||''' SIZE '||v_log_size;DBMS_OUTPUT.PUT_LINE('【执行】添加日志组:'||v_sql);EXECUTE IMMEDIATE v_sql;DBMS_OUTPUT.PUT_LINE('【成功】线程'||p_thread||'日志组'||p_group_num||'创建完成');EXCEPTIONWHEN OTHERS THENCASE SQLCODEWHEN -01658 THENDBMS_OUTPUT.PUT_LINE('【错误】线程'||p_thread||'组'||p_group_num||'创建失败('||SQLCODE||'):磁盘空间不足');DBMS_OUTPUT.PUT_LINE('【建议】需至少'||ROUND(v_log_size/1024/1024,2)||'MB,检查路径'||v_full_path||'磁盘空间');WHEN -01031 THENDBMS_OUTPUT.PUT_LINE('【错误】线程'||p_thread||'组'||p_group_num||'创建失败('||SQLCODE||'):权限不足');DBMS_OUTPUT.PUT_LINE('【建议】授予ALTER DATABASE权限:GRANT ALTER DATABASE TO 当前用户');ELSEDBMS_OUTPUT.PUT_LINE('【错误】线程'||p_thread||'组'||p_group_num||'创建失败('||SQLCODE||'):'||SQLERRM);END CASE;RAISE;END;-- 6. 核心过程:删除小日志组PROCEDURE drop_small_logfile(p_thread IN NUMBER) ISCURSOR c_small_log ISSELECT group# FROM v$log WHERE thread# = p_thread AND bytes < v_log_size;v_group_num NUMBER;v_status    VARCHAR2(20);v_sql       VARCHAR2(200);BEGINOPEN c_small_log;FETCH c_small_log INTO v_group_num;WHILE c_small_log%FOUND LOOPSELECT status INTO v_status FROM v$log WHERE group# = v_group_num;DBMS_OUTPUT.PUT_LINE('【处理】线程'||p_thread

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/955868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

强化学习值函数与策略搜索两种方法对比和疑问解读

下面通过一个简单的“迷宫寻宝”例子,用伪代码和Python代码对比直接策略搜索(以PPO为例)和基于值函数的方法(以Q-Learning为例)的核心区别。 问题场景:迷宫寻宝环境:3x3网格迷宫,起点(0,0),宝藏在(2,2),障碍…

把 1 GHz 做成一粒米”——成都恒利泰科技 HT-LFCG-1000+

把 1 GHz 做成一粒米”——成都恒利泰科技 HT-LFCG-1000+LTCC 低通滤波器,DC-1000 MHz 全段驻波≤1.2,插损≤0.9 dB,4Pad 贴片只有 2 mm1.25 mm,比回形针的弯钩还小;5G 小基站、Wi-Fi 7、车载数传直接“贴脸”安放…

中文分词手艺全解析

中文分词手艺全解析pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "C…

2025qwb 线上赛wp

2025qwb 线上赛wp好长时间不碰ctf了有快两年了吧。谍影重重 6.0 是一个流量文件看一下data包头80007651995957c3884819ee 这段数据(因为之前基本没接触过流量,我直接问ai,ai也没有分析出是什么协议最后看了一下别人…

2025年钢带波纹管批发厂家权威推荐榜单:hdpe钢带波纹管/钢带管/钢带增强聚乙烯螺旋波纹管源头厂家精选

随着城镇化建设加速和市政工程标准提升,钢带波纹管市场需求持续增长。行业数据显示,2024年我国塑料管道年产量突破1800万吨,其中钢带增强HDPE螺旋波纹管在市政排水领域占比达35%,年均增长率稳定在12%。本文将基于企…

11.4每日总结

今天主要的课程有软件构造,软件企业文化,软件案例分析,完成了软件设计实验五和实验六。借助ai做好了企业文化的ppt,同时软考在即,网课已经全部看完了,难度很大压力也不小,加油!

深入解析:探索大语言模型(LLM):一文读懂通用大模型的定义、特点与分类

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年聚氨酯预聚体公司新排行榜,浇注聚氨酯原材料企业推荐

2025年聚氨酯工业持续向高性能、定制化、绿色化方向升级,聚氨酯预聚体、浇注型聚氨酯及浇注聚氨酯原材料作为下游制造的核心基础,其性能稳定性、工艺适配性与定制化能力,直接决定矿用筛板、胶辊、密封件、新能源配件…

2025年乐博智家保鲜盒直销厂家权威推荐榜单:乐博智家冰沙杯/乐博智家炒冰机/乐博智家刨冰机源头厂家精选

随着家居生活品质升级与健康意识提升,保鲜盒市场呈现高速增长态势。行业数据显示,2024年中国保鲜盒市场规模已突破180亿元,其中智能密封与环保材质产品增速达25%,厨房收纳系统化解决方案需求提升30%。本文将基于企…

2025 年打标机厂家最新推荐排行榜:结合协会测评权威数据,聚焦技术创新与行业适配的优质品牌全解析手持/点阵/金属/铭牌打标机公司推荐

引言 随着智能制造产业持续升级,打标机作为产品标识与追溯管理的核心设备,市场需求呈稳步增长态势,但行业内产品质量差异显著、技术水平参差不齐的问题仍较为突出。为给企业选购提供权威参考,本次榜单由专业机械制…

2025年注射成型烧结炉生产厂商新排行榜,碳化硅反应烧结炉厂家推荐

2025年新材料加工行业加速升级,注射成型烧结炉、碳化硅反应烧结炉及高温真空烧结炉等专用设备,已成为新型导热材料、特种陶瓷、碳材料、电池负极材料等领域的核心生产支撑,其温度控制精度、气氛稳定性、自动化程度直…

多项式学习小记

多项式 FFT 和 NTT 以后再补。 FFT 单位根,复数,乱推 NTT 将单位根变成原根,但模数要满足对于 \(\log_2(\text{序列长度})<n\) ,\(p=2^nx+1\) MTT 即任意模数。 这时 NTT 使用不了,FFT 会被卡精度。 方法1 使用…

Oracle Exadata存储节点主动替换磁盘最佳实践

Oracle Exadata存储节点主动替换磁盘最佳实践我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大…

2025年度口碑好值得选的阀门涂装供应商,推荐一下阀门涂装供应商

2024年,石油、化工等行业稳健发展,对阀门涂装的需求持续增长。阀门涂装质量直接关乎设备在极端工况下的稳定性与使用寿命。然而,当前阀门涂装市场供应商众多,质量参差不齐,企业常面临诸多困扰。如在严苛工况下,涂…

2025 年清洗机源头厂家最新推荐排行榜:聚焦激光与超声波等类型设备,解析七大优质企业实力

引言 在工业制造快速发展的当下,清洗环节对产品质量与生产效率的影响愈发关键,然而清洗机市场却存在诸多问题。部分厂家缺乏核心技术,产品清洗精度不足、能耗高,难以满足精密加工需求;售后服务不完善,设备故障响…

2025年东北三省五大靠谱围挡提供商推荐,诚信的围挡品牌厂家全解析

在工程施工与活动筹备中,围挡是保障安全、规范现场的关键设施,而选择可靠的围挡提供商直接影响项目效率与成本控制。面对市场上良莠不齐的围挡供应企业,如何找到诚信的围挡品牌厂家?以下聚焦东北三省及内蒙古地区,…

2025年磁沉淀污水处理设备制造企业权威推荐榜单:磁沉淀水处理设备/磁沉淀技术/磁沉淀污水处理一体化设备源头厂家精选

在环保政策趋严与水资源循环利用需求提升的双重驱动下,磁沉淀污水处理技术市场迎来快速增长。据2025年行业统计数据显示,中国磁沉淀水处理设备市场规模已达154亿元,年均增长率保持在22%以上。 随着污水处理厂提标改…

计算机视觉的数据收集与标注 - 实践

计算机视觉的数据收集与标注 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

2025年东北围挡租售公司口碑排名:八达围挡租售基地

在城市建设与活动筹备的进程中,围挡作为安全防护与区域隔离的核心工具,其选择直接影响项目成本、施工效率与安全保障。面对东北市场众多围挡租售服务商,如何辨别八达围挡租售基地好不好、专业不专业、价格实惠吗?以…

训练现象

1.loos_spike(损失尖刺) 解决办法:  1.梯度裁剪:对L2范数设置上限,防止爆炸2.学习率调度,采用warm-up或动态调整学习率3.辅助损失、正则化4.混合精度训练5.数据清洗,批次归一化