发布网友 发布时间:2022-04-19 18:23
共1个回答
热心网友 时间:2022-05-02 22:12
shutdown-mode有如下几种模式:
1. smart: 等所有的连接中止后,关闭数据库。如果客户端连接不终止,则无法关闭数据库。
2. fast: 快速关闭数据库, 断开客户端的连接,让已有的事务回滚,然后正常关闭数据库。
3. immediate: 立即关闭数据库,立即停止数据库进程,直接退出,下次启动时会进行实例恢复。
本实验采用immediate方式模拟数据库异常关闭:
(1)创建测试表并插入测试数据
highgo=# select * from t;
id |name
----+------
1 |a
(1 row)
highgo=# insert into t values(2,'a');
INSERT 0 1
highgo=# \q
(2)模拟数据库强制关闭
[highgo@sourcedb ~]$ pg_ctl stop -mimmediate
日志: 接收到立即 (immediate) 停止请求
警告: 中断联接, 因为其它服务器进程崩溃
详细信息: Postmaster 命令此服务器进程回滚当前事物并退出, 因为其它服务器进程不正常的退出可能毁坏了共享内存.
提示: 一会儿你将可以重联接数据库并且重复你的命令.
waiting for server to shut down.... done
server stopped
(3)再次启动后,数据库会进行实例恢复
[highgo@sourcedb ~]$ pg_ctl start
server starting
[highgo@sourcedb ~]$ 日志: 数据库系统中断;上一次的启动时间是在2017-04-04 07:58:13 CST
日志: 数据库系统没有正确的关闭; 处于自动恢复状态中
日志: redo 在 0/1929070 开始
日志: record with zero length at0/19291F0
日志: redo 在 0/19291C0 完成
日志: 上一次完成事务是在日志时间2017-04-04 07:58:22.691571+08完成的.
日志: MultiXact member wraparoundprotections are now enabled
日志: 数据库系统准备接受连接
日志: 已启动autovacuum
(4)验证数据一致性
[highgo@sourcedb ~]$ psql
Password:
psql (3.0.2)
Type "help" for help.
highgo=# select * from t;
id |name
----+------
1 |a
2 |a
(2rows)