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

运维提效:用KingbaseES kdb_schedule插件自动执行数据库巡检与备份(附完整脚本)

数据库运维自动化实战KingbaseES kdb_schedule插件深度应用指南凌晨三点运维工程师的手机又一次响起——数据库表空间告警。这种场景对DBA来说再熟悉不过。传统人工巡检不仅效率低下还难以保证时效性。而KingbaseES的kdb_schedule插件正是为解决这类痛点而生。作为国产数据库的领军产品KingbaseES通过kdb_schedule插件提供了媲美Oracle DBMS_SCHEDULER的企业级任务调度能力。本文将带您深入掌握如何用这一利器实现数据库巡检、备份、清理等核心运维场景的自动化让DBA从重复劳动中解放出来。1. kdb_schedule插件核心架构解析kdb_schedule插件的设计哲学遵循职责分离原则将任务调度分解为三个核心组件Program定义做什么——封装具体的SQL脚本或存储过程Schedule定义何时做——配置执行时间与频率策略Job定义如何做——绑定program与schedule管理任务生命周期这种架构设计带来的最大优势是组件复用。一个检查表空间的program可以被多个不同频率的job复用一个凌晨执行的schedule也可以用于多种不同类型的维护任务。1.1 插件安装与启用的关键细节在kingbase.conf中配置时建议将kdb_schedule放在shared_preload_libraries的最前面shared_preload_libraries kdb_schedule,pg_stat_statements,auto_explain安装后需特别注意权限控制创建插件需要SYSTEM用户权限执行program的实际权限取决于program创建者可通过GRANT EXECUTE ON PROGRAM program_name TO role_name授权提示生产环境建议为调度任务创建专用数据库用户避免直接使用SYSTEM账户2. 数据库健康巡检自动化实战2.1 构建表空间监控体系首先创建监控用的目标表CREATE TABLE dba_monitor.tablespace_usage_history ( check_time TIMESTAMP PRIMARY KEY, tablespace_name TEXT NOT NULL, total_gb NUMERIC(10,2), used_gb NUMERIC(10,2), usage_rate NUMERIC(5,2), growth_rate NUMERIC(5,2) );接着创建监控programCALL DBMS_SCHEDULER.CREATE_PROGRAM( program_name monitor_tablespace, program_type PLSQL_BLOCK, program_action $$ DECLARE v_last_total NUMERIC; v_last_used NUMERIC; BEGIN -- 获取上次记录值 SELECT total_gb, used_gb INTO v_last_total, v_last_used FROM dba_monitor.tablespace_usage_history WHERE tablespace_name MAIN ORDER BY check_time DESC LIMIT 1; -- 插入当前状态 INSERT INTO dba_monitor.tablespace_usage_history SELECT NOW(), spcname, pg_tablespace_size(spcname)/1024/1024/1024, (pg_tablespace_size(spcname)-pg_tablespace_size(spcname)/1024/1024/1024, ROUND((pg_tablespace_size(spcname)-pg_tablespace_size(spcname))/pg_tablespace_size(spcname)*100,2), CASE WHEN v_last_total 0 THEN ROUND((pg_tablespace_size(spcname)-v_last_used)/(v_last_total)*100,2) ELSE 0 END FROM pg_tablespace WHERE spcname NOT LIKE pg_%; END; $$, enabled TRUE, comments 表空间使用率监控程序 );配置执行策略-- 工作日每2小时执行 CALL DBMS_SCHEDULER.CREATE_SCHEDULE( schedule_name workday_every_2hours, start_date NOW(), repeat_interval FREQHOURLY;INTERVAL2;BYDAYMON,TUE,WED,THU,FRI, comments 工作日每两小时执行 ); -- 创建监控任务 CALL DBMS_SCHEDULER.CREATE_JOB( job_name tablespace_monitor_job, program_name monitor_tablespace, schedule_name workday_every_2hours, enabled TRUE );2.2 智能预警机制实现在基础监控上增加预警逻辑CALL DBMS_SCHEDULER.CREATE_PROGRAM( program_name tablespace_alert, program_type SQL_SCRIPT, program_action $$ -- 表空间使用率超过90%时发送告警 INSERT INTO alert_messages SELECT tablespace_alert, tablespace_name || 空间使用率已达 || usage_rate || %, CASE WHEN usage_rate 95 THEN critical WHEN usage_rate 90 THEN warning END, NOW() FROM dba_monitor.tablespace_usage_history WHERE check_time NOW() - INTERVAL 30 minutes AND usage_rate 90; -- 增长率异常告警 INSERT INTO alert_messages SELECT growth_alert, tablespace_name || 空间增长率异常 || growth_rate || %/2h, warning, NOW() FROM dba_monitor.tablespace_usage_history WHERE check_time NOW() - INTERVAL 30 minutes AND ABS(growth_rate) 10; $$, enabled TRUE ); -- 配置每30分钟检查一次 CALL DBMS_SCHEDULER.CREATE_JOB( job_name tablespace_alert_job, program_name tablespace_alert, schedule_name every_30min, enabled TRUE );3. 数据库备份自动化方案3.1 全量增量备份策略-- 周日全量备份 CALL DBMS_SCHEDULER.CREATE_PROGRAM( program_name full_backup, program_type BACKUP_SCRIPT, program_action $$ #!/bin/bash export PGPASSWORD$KB_PASSWORD /opt/Kingbase/ES/V8/bin/sys_dump -U $KB_USER -h $KB_HOST -p $KB_PORT -F c -f /backup/full_$(date %Y%m%d).backup $KB_DATABASE find /backup -name full_*.backup -mtime 30 -delete $$, enabled TRUE ); -- 每日增量备份 CALL DBMS_SCHEDULER.CREATE_PROGRAM( program_name incremental_backup, program_type BACKUP_SCRIPT, program_action $$ #!/bin/bash export PGPASSWORD$KB_PASSWORD /opt/Kingbase/ES/V8/bin/sys_dump -U $KB_USER -h $KB_HOST -p $KB_PORT -F c -b -f /backup/incr_$(date %Y%m%d).backup $KB_DATABASE find /backup -name incr_*.backup -mtime 7 -delete $$, enabled TRUE ); -- 配置备份计划 CALL DBMS_SCHEDULER.CREATE_SCHEDULE( schedule_name sunday_2am, start_date NOW(), repeat_interval FREQWEEKLY;BYDAYSUN;BYHOUR2, comments 每周日凌晨2点 ); CALL DBMS_SCHEDULER.CREATE_SCHEDULE( schedule_name daily_2am, start_date NOW(), repeat_interval FREQDAILY;BYHOUR2, comments 每日凌晨2点 ); -- 创建备份任务 CALL DBMS_SCHEDULER.CREATE_JOB( job_name full_backup_job, program_name full_backup, schedule_name sunday_2am, enabled TRUE ); CALL DBMS_SCHEDULER.CREATE_JOB( job_name incremental_backup_job, program_name incremental_backup, schedule_name daily_2am, enabled TRUE );3.2 备份验证与报告生成CALL DBMS_SCHEDULER.CREATE_PROGRAM( program_name verify_backup, program_type SQL_SCRIPT, program_action $$ -- 验证最新备份文件 CREATE TEMP TABLE backup_verify_result AS SELECT b.filename, b.backup_time, pg_size_pretty(b.size) AS size, CASE WHEN v.verify_status IS NULL THEN pending ELSE v.verify_status END AS status FROM ( SELECT filename, backup_time, pg_stat_file(/backup/ || filename)::bigint AS size FROM ( SELECT filename, to_timestamp( regexp_replace(filename, ^.*_([0-9]{8}).backup$, \1), YYYYMMDD ) AS backup_time FROM pg_ls_dir(/backup) AS filename WHERE filename ~ .*\.backup$ ) t ORDER BY backup_time DESC LIMIT 1 ) b LEFT JOIN backup_verification v ON b.filename v.filename; -- 生成HTML报告 COPY ( SELECT format( html body h1备份验证报告/h1 p生成时间%s/p table border1 tr th文件名/th th备份时间/th th大小/th th状态/th /tr %s /table /body /html, NOW(), string_agg(format( tr td%s/td td%s/td td%s/td td%s/td /tr, filename, backup_time, size, status ), ) ) FROM backup_verify_result ) TO /var/www/html/backup_report.html; $$, enabled TRUE ); -- 每周一验证上周备份 CALL DBMS_SCHEDULER.CREATE_JOB( job_name backup_verify_job, program_name verify_backup, schedule_name monday_3am, enabled TRUE );4. 高级运维场景与优化技巧4.1 任务链与依赖调度通过job的completion_trigger实现任务链-- 先清理旧数据再执行统计 CALL DBMS_SCHEDULER.CREATE_PROGRAM( program_name clean_old_data, program_type PLSQL_BLOCK, program_action DELETE FROM log_table WHERE create_time NOW() - INTERVAL 30 days, enabled TRUE ); CALL DBMS_SCHEDULER.CREATE_PROGRAM( program_name generate_stats, program_type PLSQL_BLOCK, program_action CALL refresh_all_mv(), enabled TRUE ); -- 创建任务链 CALL DBMS_SCHEDULER.CREATE_JOB( job_name weekly_maintenance, program_name clean_old_data, schedule_name sunday_1am, enabled FALSE -- 先不激活 ); CALL DBMS_SCHEDULER.DEFINE_CHAIN_RULE( chain_name weekly_maintenance, condition TRUE, action START generate_stats_job, rule_name after_cleanup ); -- 设置generate_stats_job在clean_old_data完成后启动 CALL DBMS_SCHEDULER.SET_ATTRIBUTE( name generate_stats_job, attribute start_after, value weekly_maintenance );4.2 资源控制与优先级管理通过job_class控制资源分配-- 创建三个任务类别 CALL DBMS_SCHEDULER.CREATE_JOB_CLASS( job_class_name critical_jobs, resource_consumer_group oltp_high, logging_level LOGGING_FULL, comments 关键业务任务 ); CALL DBMS_SCHEDULER.CREATE_JOB_CLASS( job_class_name maintenance_jobs, resource_consumer_group batch_low, logging_level LOGGING_RUNS, comments 维护任务 ); CALL DBMS_SCHEDULER.CREATE_JOB_CLASS( job_class_name reports_jobs, resource_consumer_group batch_medium, logging_level LOGGING_OFF, comments 报表任务 ); -- 为不同任务指定类别 CALL DBMS_SCHEDULER.SET_ATTRIBUTE( name tablespace_monitor_job, attribute job_class, value critical_jobs ); CALL DBMS_SCHEDULER.SET_ATTRIBUTE( name full_backup_job, attribute job_class, value maintenance_jobs );4.3 错误处理与通知机制配置邮件通知模板CALL DBMS_SCHEDULER.CREATE_PROGRAM( program_name send_alert_email, program_type EXECUTABLE, program_action /usr/local/bin/send_email_alert.sh, enabled TRUE ); -- 错误处理job CALL DBMS_SCHEDULER.CREATE_JOB( job_name error_handler_job, program_name send_alert_email, schedule_name on_demand, enabled TRUE ); -- 为关键job配置错误处理 CALL DBMS_SCHEDULER.SET_ATTRIBUTE( name full_backup_job, attribute max_failures, value 3 ); CALL DBMS_SCHEDULER.SET_ATTRIBUTE( name full_backup_job, attribute failure_action, value error_handler_job );在实际生产环境中我们团队通过kdb_schedule将原本需要人工执行的37项日常运维任务全部自动化使DBA能够专注于性能优化和架构设计等高价值工作。特别是备份验证任务链的实现将备份成功率从92%提升到99.9%同时减少了80%的误报告警。

相关文章:

运维提效:用KingbaseES kdb_schedule插件自动执行数据库巡检与备份(附完整脚本)

数据库运维自动化实战:KingbaseES kdb_schedule插件深度应用指南 凌晨三点,运维工程师的手机又一次响起——数据库表空间告警。这种场景对DBA来说再熟悉不过。传统人工巡检不仅效率低下,还难以保证时效性。而KingbaseES的kdb_schedule插件&am…...

Hive数据开发避坑指南:你以为CROSS JOIN只是性能杀手?其实它是解决这类问题的‘神器’

Hive数据开发避坑指南:你以为CROSS JOIN只是性能杀手?其实它是解决这类问题的‘神器’ 在数据开发领域,Hive SQL的性能优化一直是开发者关注的焦点。当我们谈论JOIN操作时,大多数人会本能地回避CROSS JOIN,认为它会导致…...

HSTracker:macOS炉石传说玩家的免费智能助手终极指南

HSTracker:macOS炉石传说玩家的免费智能助手终极指南 【免费下载链接】HSTracker A deck tracker and deck manager for Hearthstone on macOS 项目地址: https://gitcode.com/gh_mirrors/hs/HSTracker 你是否在炉石传说对战中常常忘记对手还剩什么牌&#x…...

通过 curl 命令直接调用 Taotoken 接口完成模型对话与排错验证

通过 curl 命令直接调用 Taotoken 接口完成模型对话与排错验证 1. 准备工作 在开始通过 curl 调用 Taotoken 接口前,需要准备好以下两项信息:有效的 API Key 和目标模型 ID。API Key 可在 Taotoken 控制台的「API 密钥」页面创建,模型 ID 则…...

AI融入生活,是利大于弊,还是弊大于利呢?

以下是我的个人看法,更新不易,支持一下吧~AI融入生活:利大于弊的时代浪潮引言:AI时代的悄然降临当清晨的第一缕阳光洒向大地,智能音箱用温柔的声音播报着天气与新闻;当我们穿梭于城市的大街小巷&#xff0c…...

从零到一:用Python脚本自动化解析UDS 0x19服务响应数据(附完整代码)

从零到一:用Python脚本自动化解析UDS 0x19服务响应数据(附完整代码) 在汽车电子诊断领域,UDS(Unified Diagnostic Services)协议是ECU诊断的通用语言。0x19服务作为其中的核心功能,负责读取DTC&…...

从解方程到密码学:SageMath入门指南,5分钟上手你的第一个数学实验

从解方程到密码学:SageMath入门指南,5分钟上手你的第一个数学实验 第一次听说SageMath时,我正被一堆数学作业折磨得焦头烂额。作为一个数学爱好者,我厌倦了手动计算那些复杂的方程,直到发现了这个神奇的工具。SageMat…...

CATIA二次开发避坑实录:用Python出工程图时,这些win32com的坑我帮你踩过了

CATIA二次开发实战:Python自动化出图的7个关键陷阱与解决方案 在工业设计领域,CATIA作为高端三维设计软件的标杆,其二次开发能力一直是工程师提升效率的利器。而Python凭借简洁语法和丰富生态,成为连接CATIA COM接口的热门选择。但…...

AutoDingding钉钉自动打卡:告别迟到困扰的终极解决方案

AutoDingding钉钉自动打卡:告别迟到困扰的终极解决方案 【免费下载链接】AutoDingding 钉钉自动打卡 项目地址: https://gitcode.com/gh_mirrors/au/AutoDingding 还在为每天匆忙赶路却错过钉钉打卡而烦恼吗?AutoDingding钉钉自动打卡工具为您提供…...

HSTracker:macOS炉石传说智能套牌追踪器,免费提升胜率的终极指南

HSTracker:macOS炉石传说智能套牌追踪器,免费提升胜率的终极指南 【免费下载链接】HSTracker A deck tracker and deck manager for Hearthstone on macOS 项目地址: https://gitcode.com/gh_mirrors/hs/HSTracker 你是否在炉石传说对战中常常忘记…...

GraphRAG 实体提取的别名局限性分析

1. 问题概述 GraphRAG 在实体提取阶段,将同一实体的不同别名视为独立实体,导致知识图谱中出现实体碎片化。以"孙悟空"为例: 文本A: "孙悟空大闹天宫" → 实体: 孙悟空 文本B: "孙行者三打白骨精" …...

Resistor Scanner:用手机摄像头轻松识别电阻色环的神奇助手

Resistor Scanner:用手机摄像头轻松识别电阻色环的神奇助手 【免费下载链接】ResistorScanner Android app using OpenCV that scans resistor colour bands to determine their values 项目地址: https://gitcode.com/gh_mirrors/re/ResistorScanner 你是否…...

河南产业升级带动彩印编织袋定制需求激增

河南工农业包装需求升级 彩印袋定制成产业新趋势随着河南农产品深加工、建材化工等产业的规模化发展,传统包装在品牌展示与功能性上的短板日益凸显。以彩印编织袋为代表的升级产品,凭借其可定制图文、耐用性强等特性,正逐步成为饲料、化肥、食…...

AppleRa1n终极指南:iOS 15-16激活锁完整绕过解决方案

AppleRa1n终极指南:iOS 15-16激活锁完整绕过解决方案 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 你是否曾面对一台被激活锁锁定的iOS设备束手无策?当企业设备管理员离职、跨…...

终极窗口调整解决方案:3分钟掌握Windows窗口强制调整大小的完整指南

终极窗口调整解决方案:3分钟掌握Windows窗口强制调整大小的完整指南 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 你是否曾被那些固执的应用程序窗口所困扰&#xff…...

无需本地折腾,在快马平台快速验证claude code的智能编程能力

最近在技术圈里经常看到关于Claude Code智能编程助手的讨论,作为一个喜欢尝鲜的开发者,我也很想体验一下它的代码补全和解释能力。不过传统的本地安装方式需要配置各种环境,过程比较繁琐。好在发现了InsCode(快马)平台,可以直接在…...

手把手教你:在无外网的银河麒麟V10上,从零配置Docker服务与阿里云镜像加速

银河麒麟V10服务器离线部署Docker全栈指南:从二进制安装到生产级优化 在金融、政务等对数据隔离要求严格的领域,服务器往往运行在完全封闭的内网环境中。上周为某省级医保平台部署业务系统时,就遇到了这样的场景:200台银河麒麟V10…...

终极免费方案:让你的老旧电视秒变智能直播盒子

终极免费方案:让你的老旧电视秒变智能直播盒子 【免费下载链接】mytv-android 使用Android原生开发的视频播放软件 项目地址: https://gitcode.com/gh_mirrors/my/mytv-android MyTV-Android是一款专为老旧电视设备设计的开源电视直播应用,它让安…...

手把手教你给YOLOv8换上BiFPN:从代码修改到配置文件调整的保姆级教程

手把手教你给YOLOv8换上BiFPN:从代码修改到配置文件调整的保姆级教程 在目标检测领域,YOLOv8凭借其出色的性能和易用性赢得了广泛关注。但许多开发者可能不知道,通过引入**BiFPN(加权双向特征金字塔网络)**这一先进结构…...

深入CLIP的视觉编码器:ModifiedResNet和VisionTransformer到底怎么选?性能差多少?

CLIP视觉编码器深度对比:ModifiedResNet与VisionTransformer实战选型指南 在构建多模态AI系统时,选择正确的视觉编码器往往决定着整个项目的成败。OpenAI的CLIP模型提供了ModifiedResNet和VisionTransformer两种视觉骨干网络选项,但官方文档并…...

初创团队如何利用Taotoken统一管理多个AI模型API成本

初创团队如何利用Taotoken统一管理多个AI模型API成本 1. 多模型API管理的核心挑战 初创团队在开发AI应用时,往往需要同时调用多个大模型API以满足不同场景需求。这种模式会带来三个典型问题:密钥管理分散、成本核算困难、工程对接复杂。每个模型的API …...

当opencli遇见AI:借助快马平台智能生成具备自然语言交互能力的命令行工具

最近在折腾命令行工具的开发,发现了一个很有意思的框架叫opencli。它最大的特点就是能让命令行工具具备更自然的交互方式。正好最近在体验InsCode(快马)平台的AI辅助开发功能,就想着能不能结合两者,打造一个更智能的命令行工具。 项目构思 我…...

告别Docker?K8s v1.23 + Containerd 运行时部署实战,对比传统Docker方案有何不同

告别Docker?K8s v1.23 Containerd 运行时部署实战与深度对比 当Kubernetes社区在2022年宣布1.24版本正式弃用Docker支持时,许多开发者开始重新审视容器运行时的技术选型。作为K8s生态中更轻量、更专一的运行时方案,Containerd正逐渐成为生产…...

WinUtil终极指南:3分钟学会Windows系统一键优化与软件批量安装

WinUtil终极指南:3分钟学会Windows系统一键优化与软件批量安装 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil 还在为Windows系统…...

告别卡顿!手把手教你用UGUI GridLayoutGroup打造丝滑的无限滚动列表(Unity 2022+)

突破UGUI性能瓶颈:GridLayoutGroup无限滚动列表的工程级优化指南 在移动游戏和复杂UI应用中,滚动列表卡顿问题如同附骨之疽——当排行榜需要展示500个玩家数据,或是商城要加载300件商品时,即便是中端设备也会出现明显的帧率波动。…...

异步电动机观测反馈矢量控制模型参考自适应系统【附代码】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,查看文章底部二维码(1)基于扩张状态观测器的双磁链全阶反馈观测器设计&am…...

原神自动化助手BetterGI:5分钟快速上手指南,解放你的游戏时间

原神自动化助手BetterGI:5分钟快速上手指南,解放你的游戏时间 【免费下载链接】better-genshin-impact 📦BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条…...

Python玩转汽车UDS诊断:从安全算法破解到自定义DID读写实战

Python玩转汽车UDS诊断:从安全算法破解到自定义DID读写实战 当ECU的调试接口被锁定,当非标数据标识符阻碍了诊断流程,真正的汽车电子工程师需要的不是标准操作手册,而是一套能撕开协议防线的"手术刀"。本文将带您潜入U…...

PHP低代码表单引擎信创适配全图谱:兼容鲲鹏+昇腾+海光芯片,支持统信UOS/麒麟V10(附国产中间件兼容矩阵表)

更多请点击: https://intelliparadigm.com 第一章:PHP低代码表单引擎信创适配战略定位与总体架构 在国产化替代加速推进的背景下,PHP低代码表单引擎的信创适配已从技术可选项升级为关键基础设施战略支点。该引擎以“安全可控、平滑迁移、生…...

实战演练:通过快马ai构建企业级mysql主从配置与备份监控工具

今天在搭建MySQL生产环境时,突然想到如果能有个工具能自动生成主从配置命令、备份脚本和监控方案该多好。于是尝试用InsCode(快马)平台快速实现了一个企业级MySQL运维工具,整个过程比想象中顺利很多。 主从复制配置向导 这个模块的核心是避免手工输入命令…...