DBA必备神器:让Oracle关库不再心惊胆战!
我们的文章会在微信公众号"Oracle恢复实录"和博客网站同步更新,欢迎关注收藏。也欢迎大家转载,但请在文章开始处标注文章出处,谢谢!
由于博客中包含大量代码,建议通过网页浏览以获得更好的阅读体验。
脚本的诞生背景
"关闭数据库不就是一条shutdown immediate命令的事吗?"——相信这是很多DBA的第一反应。实在不行,再来个shutdown abort,那不是手到擒来?没错,理论上确实如此。但现实往往比理论更有"戏剧性"...
还记得我的"第一次"吗?不,不是你们想的那个第一次!我说的是第一次在生产环境关闭数据库。那是在2010年,作为一名刚毕业3个月的菜鸟DBA,在某省移动担任Oracle驻场工程师。某个深夜,我需要重启一个我一直在优化的营业厅数据库。
那时的我,年少不知操作险,信心满满地向厂商和甲方承诺:"重启?小事一桩!给我10分钟就够了!"
然而,现实给了我一记响亮的耳光。午夜12点,我信心满满地敲下shutdown immediate,然后...然后就傻眼了。数据库纹丝不动,alert日志安静如鸡,仿佛在说:"年轻人,你太天真了!"
几分钟过去了,数据库依然稳如泰山。这时候,我的"危机感雷达"开始疯狂报警:心跳加速✓,手心冒汗✓,脑门冒汗✓。打电话求助领导?糟糕,现场值班模式,VPN还没开!
更要命的是,应用厂商在群里开始轮番轰炸:"还要多久?""出什么问题了?""能不能快点?"。很快,他们放弃了线上交流,直接杀到我工位旁"围观"。想象一下,一群人站在你身后,盯着你的屏幕,而你的键盘手还在微微发抖,衣服已经被汗水浸透...这场景,简直比恐怖片还刺激!
最终,这场"战役"在20分钟后才结束。说实话,非常感谢当晚的应用厂商和甲方同事。虽然他们的"围观"给了我不小的压力,但他们始终在安慰我:"别紧张,慢慢来"。(虽然他们心里可能在想:这小子靠谱吗?)
在之后的职业生涯中,随着对数据库和操作系统的理解越来越,我发现这种情况并不罕见。很多同事朋友也遇到过类似的"惊魂时刻",有时甚至导致变更计划被迫取消。于是在2014年,我把自己的经验教训和向各路大神学习到的智慧,整合成了一个shell版本的一键关库脚本。后来,在2016年学习Perl时,我把它改写成了Perl版本。到了2024年,在学习Go语言时,我又顺手把它改成了Go版本。(没错,这个脚本经历了三次重生,比凤凰还能涅槃)
脚本的功能
这个脚本就像是一个"数据库关闭管家",它考虑了以下场景:
- 既能关单库,也能关全库(就像一键关灯和一键关所有灯的区别)
- 多库关闭时可以并行处理(就是传说中的"分身术")
- 通过ckpt进程智能识别ORACLE_HOME环境(不用手动设置环境变量,懒人福音!)
- 根据输入的实例名精准关闭(不会误伤其他数据库,很有礼貌的脚本)
- 多实例关闭时互不影响(一个实例出问题,其他实例表示:关我啥事?)
- 所有操作都会生成SQL脚本后再执行(方便debug,就像留下作案现场一样)
关闭过程主要包含三个步骤:
- 日志切换(如果是备库就跳过,毕竟备库也要面子)
- 杀进程(温柔或暴力,由你选择)
- 关闭数据库(最后的最后)
关闭模式有两种:
- shutdown abort模式:简单粗暴,不切换日志,不杀进程,直接关!(就像拔电源一样干脆)
- shutdown immediate模式:温柔优雅,该切换切换,该清理清理(讲究人用的模式)
默认采用shutdown immediate模式,并使用操作系统kill命令(保持优雅的同时又不失效率)
脚本的参数说明
脚本的使用方法简单得像点外卖一样,来看看这个"数据库外卖菜单":
yihan:shutdown yihan$ ./shutdown --h
Usage: shutdown [-s htz1] [-h help] [-d] [-ec ORA-12345] [-ic ORA-00060] [-f mode]
Options:
the script encounters an error, please contact: 18081072613 (same number for phone and WeChat).
Shutdown modes (-f):
a: Abort mode - Uses shutdown abort without session termination
k: Kill mode - Uses OS kill for LOCAL=NO sessions before shutdown immediate
n: Normal mode - Uses alter system kill session before shutdown immediate
-d Enable script debugging
-ec string
Manual input error code,Comma-spaced multiple values
-f string
Shutdown mode: a (abort), k (os kill), n (normal kill) (default "k")
-h display help information
-ic string
Manual input ignore code,Comma-spaced multiple values
-s string
instance name you will shutdown,0 will shutdown all instance (default "htz")
参数说明(通俗版):
-d 开启调试模式,就像打开显微镜一样,让你看清每一步操作(所有命令都会乖乖记录在log文件里)
-ec 遇到这些ORA错误就立刻停止(就像遇到红灯要停车一样)
-ic 遇到这些ORA错误就装作没看见(就像对某些bug睁一只眼闭一只眼 )
-s 要关闭哪个数据库?输入0就是包场,全部关掉!(默认只关名叫htz的库)
-f 选择关闭模式:
a - 暴力模式(就像拔电源)
k - 温柔模式,用操作系统方式请走用户
n - 绅士模式,用数据库命令优雅地请走用户
温馨提示:ec和ic这两个参数目前处于"休假状态",是历史版本的遗产。(就像你爸妈给你留的古董电话,虽然不用了但还是舍不得扔)
下载方式
本脚本是用Go语言写的(没错,就是那个带着萌萌哒吉祥物的语言),目前只编译了Linux版本。至于AIX和HP_UX平台...emmm,等我有测试环境了再说!(不是我不想,实在是巧妇难为无米之炊啊!)
获取脚本有两种方式(任选其一即可):
- 关注公众号并回复"shutdown"(最简单的方式)
- 加我微信18081072613(想顺便聊聊天的可以选这个)
问题反馈
脚本用着不爽?有bug想吐槽?想要新功能?随时联系我!我的态度是:您说得对,我马上改!(除非您说得不对...)
特别声明:这个脚本是我的一片心意,专门用来帮助大家提高工作效率、减少故障率的。请不要用它来赚钱或者参加招投标哦!(不然我会很伤心的)
------------------作者介绍-----------------------
姓名:黄廷忠
现就职:Oracle中国高级服务团队
曾就职:OceanBase、云和恩墨、东方龙马等
电话、微信、QQ:18081072613
DBA必备神器:让Oracle关库不再心惊胆战!的更多相关文章
- Oracle DBA的神器: PRM恢复工具,可脱离Oracle软件运行,直接读取Oracle数据文件中的数据
Oracle DBA的神器: PRM恢复工具,可脱离Oracle软件运行,直接读取Oracle数据文件中的数据 PRM 全称为ParnassusData Recovery Manager ,由 诗檀软 ...
- (转)Oracle数据库DBA必备基本技能
[Oracle数据库DBA必备基本技能] shutdown Normal 需要等待所有的用户断开连接 Immediate 等待用户完成当前的语句 Transactional 等待用户完成当前的事 ...
- 工欲善其事,必先利其器 软件工具开发关键词 protractor自动化测试工具 RegexBuddy正则 CodeSmith,LightSwitch:代码生成 CheatEngine:玩游戏修改内存值必备神器 ApkIDE:Android反编译工具 Reflector:反编译dll动态链接库
工欲善其事,必先利其器 本文版权归翟士丹(Stan Zhai)和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利. 原文地址:http ...
- DBA必备:MySQL数据库常用操作和技巧
DBA必备:MySQL数据库常用操作和技巧 2011-02-25 15:31 kaduo it168 字号:T | T MySQL数据库可以说是DBA们最常见和常用的数据库之一,为了方便大家使用,老M ...
- sublime text3 --前端工程师必备神器
sublime text3 --前端工程师必备神器 导读目录: 下载与Emmet插件安装 sublime text3 中cssrem安装与使用 sublime Text 3的中文文件名显示为方框的问题 ...
- OGG 从Oracle备库同步数据至kafka
OGG 从Oracle备库同步数据至kafka Table of Contents 1. 目的 2. 环境及规划 3. 安装配置JDK 3.1. 安装jdk 3.2. 配置环境变量 4. 安装Data ...
- Oracle 建库
Oracle得安装就不多说了 不过还是建议直接去官网下 其他渠道可能会导致安装问题 具体自己慢慢体会吧 ! 下面主要说下怎么用Oracle建库并且建用户角色 Database configur ...
- DG修复:异常关库导致的数据库启动失败ORA-01110及GAP修复
问题描述:正在应用的备库是一套11.2.0.4的rac环境,但是被直接crsctl stop cluster集群强制关库,重新启动之后导致数据库启动失败,报错 Errors in file /u01/ ...
- 尝试加载 Oracle 客户端库时引发 BadImageFormatException
尝试加载 Oracle 客户端库时引发 BadImageFormatException 工程师给计算机诊断,就像医生给病人诊断一样,很多同样的症状,可能是由多种截然不同的原因导致的. 最近进行C# ...
- HubSpot – 网站开发必备的 jQuery 信息提示库
HubSpot 一款功能丰富的 jQuery 消息提示插件.它可以帮助你个性化显示您的应用程序的事务性消息.您可以轻松地包裹 Ajax 请求进度,成功和错误消息,还可以添加操作链接到您的消息中. Hu ...
随机推荐
- SuiGo智能博客系统
一款由Golang+Vue开发的博客类网站,支持大模型对话编写智能博客,同时适配PC和移动端. 功能点说明 系统主要包括 1.博客功能:博客编写也可对话AI模型协助编写.查询.编辑页面.详情页面.分享 ...
- Ollama——大语言模型本地部署的极速利器
1.概述 Ollama 是一款开源跨平台大模型工具,主要用于在本地便捷部署和运行大型语言模型(LLM),核心目标是降低用户使用大模型的门槛,同时保障数据隐私.核心功能与特点如下: (1)本地部署,隐私 ...
- Joker 智能开发平台再推重磅新品,引领开发新潮流
自 Joker 智能开发平台的前端可视化版本惊艳亮相后,便迅速在行业内掀起热潮,其创新的理念与出色的性能,为开发者和企业打造了高效.便捷的开发新路径,备受瞩目与好评.如今,Joker 智能开发平台即将 ...
- ShardingSphere分组聚合,数据异常问题
在使用ShardingSphere分组聚合时是,出现了数据汇总不正确问题.我这里只进行了分表,未进行分库.使用的是广播查询,因为是定时任务统计,无法使用到分片键.进行分组的字段是两个 1. SQL查询 ...
- 【网络协议】深入理解HTTP协议
# 协议 协议就是一种双方提前约定好采用某种形式,以某种规格,利用某种物体把数据传输出去:而另一方再以同样的规则和流程去接收数据的约定制度或者规章. 现代网络是由多种运行在不同平台上的异构系统组成的. ...
- study Rust-2【环境与配置,随机数】
Rust教程资料很多.但是,这是教程学习资料感觉挺好!推荐给你https://doc.rust-lang.org/stable/book/ (简体中文译本)在线阅读 学习rust开始有点感觉了.美好的 ...
- Linux内存管理神器:smem工具
大家好,我是良许. 今天给大家分享一款 Linux 系统里的内存管理神器:smem . smem 是Linux系统上的一款可以生成多种内存耗用报告的命令行工具.与现有工具不一样的是 smem 可以报告 ...
- 卸载重装vscode
最近工作需要长期用到python,但我的老电脑又实在拉不起pycharm那配置,干脆就用vscode了,但本来我的vscode是用来写c/c++的,安装配置一通乱搞,现在也不知道怎么配置回来了. 干脆 ...
- python,去掉“xa0”和“\r\n”
爬小说网站,输出内容有时候会出现下图字符 首先,去掉"xa0" s = 'T-shirt\xa0\xa0短袖圆领衫,体恤衫\xa0' out = "".join ...
- strftime()函数的用法
strftime()函数的用法 strftime()函数可以把YYYY-MM-DD HH:MM:SS格式的日期字符串转换成其它形式的字符串.strftime()的语法是strftime(格式, 日期/ ...