
KingbaseES介绍和安装
最近先来无事,所以就想看看国内的数据库,因为以前多多少少接触过一点,没有系统的学习过,所以就想学学,而且也想针对这个数据库写个专题,后面方便自己复习和如果有可能的话自己也想考一个证
如果你在网上搜过人大金仓的停止方式,大概率会看到两种互相矛盾的说法:有人说三种,有人说四种。我最初也在这个问题上绕了一圈,后来翻了官方文档才确认:sys_ctl stop 的 -m 参数,官方只定义了三种模式。那“第四种”是怎么来的?它其实是考试题库里的一道选择题选项,把 fast 模式对 Oracle 的类比单独拆了出来。这篇文章就把三种官方模式讲透,顺带把“第四种”的来龙去脉说清楚。
人大金仓官方文档(V9 多个版本一致)在 sys_ctl 命令说明中明确写道:“设置 -m 选项可以选择三种不同的关闭方法”。命令语法如下:
sys_ctl stop [-D datadir] [-m s[mart] | f[ast] | i[mmediate]]
参数可以写全称,也可以只写首字母。如果省略 -m,默认值就是 fast。
三种模式的核心区别可以用一句话记住:smart 等,fast 滚,immediate 崩。
官方行为:等待所有客户端主动断开连接、所有在线备份结束后,才完成关闭。如果服务器处于热备状态,等所有客户端断开后,恢复和流复制才会终止。
运维视角:这是最“礼貌”的方式,但它有一个致命问题——如果有一个忘了关的连接,数据库就会一直挂着。官方 troubleshooting 文档也提到,如果关闭过程中一直提示 wait for server to shutdown... 且长时间不结束,通常是有异常事务或连接未释放。
适用场景:极少数计划内维护,且你能确认应用侧已经全部释放连接。日常运维中不建议作为首选。
官方行为:不等待客户端断开,回滚所有活动事务,强制断开客户端连接,终止进行中的在线备份,最后关闭服务器。
为什么它是默认值:它在数据一致性和关闭速度之间取得了最佳平衡。回滚事务保证了未提交的数据不会造成脏状态,强制断开则避免了 smart 模式可能无限等待的问题。已提交的数据是安全的,不会因为 fast 关闭而丢失。
与 Oracle 的类比:Oracle 的 shutdown immediate 同样是“回滚事务、断开连接、正常关闭”,所以金仓的 fast 在效果上最接近 Oracle 的 shutdown immediate。这也是题库中“D 选项”说法的来源。
官方行为:立刻中止所有服务器进程,不进行干净关闭。下次启动时,数据库必须执行崩溃恢复。
类比 Oracle:相当于 shutdown abort。
明确警告:这是迫不得已时才用的方式。只在数据库完全无响应、fast 模式也杀不掉的情况下使用。正常运维中应尽量避免。
你在 KCA 题库里看到的四选项题目,大致是这样的结构:
这道题的四个选项都是正确描述,但 D 并不是一种独立的停止命令,它只是对 B 选项(fast)的补充类比。从数据库引擎接受的实际指令来看,只有 smart、fast、immediate 三个词会被识别。所以写这篇文章的目的不是去“凑四种”,而是把三种讲清楚,同时让被题库困惑的人知道 D 选项到底在说什么。
# 默认方式(即 fast),最常用
sys_ctl stop -D /data/kingbase
# 显式指定 smart(慎用,要有超时预案)
sys_ctl stop -D /data/kingbase -m smart
# 迫不得已时使用
sys_ctl stop -D /data/kingbase -m immediate
两个容易踩的坑:
路径用绝对路径。在集群或脚本中,-D 后使用相对路径可能在后续操作中引发问题,官方建议手工启停时始终使用绝对路径。
smart 卡住不要干等。执行 smart 后如果终端长时间停在 wait for server to shutdown...,说明有连接未释放。此时应该排查会话或改用 fast,而不是一直等下去。
| 模式 | 命令参数 | 核心动作 | 下次启动恢复? | 推荐场景 |
| --------- | ----------------- | ------------------ | -------------- | ------------------------ |
| smart | -m smart | 等待连接自然断开 | 否 | 极少数计划内维护 |
| fast | -m fast(默认) | 回滚事务、强制断开 | 否 | 日常停止的首选 |
| immediate | -m immediate | 立即杀进程 | 是 | 数据库无响应时的最后手段 |
日常停止直接用默认的 fast,不需要加参数。维护窗口想优雅一点可以用 smart,但一定要有超时预案。只有进程杀不掉、fast 命令也挂死时,才轮到 immediate 出场。
至于“四种”的说法——它是一道考试题的选项结构,不是数据库的真实指令。把这一点讲清楚,既不会在考试里选错,也不会在运维中敲错命令。
评论 0