<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>杂项 on 最后的DBA</title><link>https://lastdba.com/categories/%E6%9D%82%E9%A1%B9/</link><description>Recent content in 杂项 on 最后的DBA</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><copyright>© 2026 liuzhilong62</copyright><lastBuildDate>Fri, 29 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://lastdba.com/categories/%E6%9D%82%E9%A1%B9/index.xml" rel="self" type="application/rss+xml"/><item><title>一个 DBA 视角看 0526 安可数据库名单</title><link>https://lastdba.com/2026/05/29/%E4%B8%80%E4%B8%AA-dba-%E8%A7%86%E8%A7%92%E7%9C%8B-0526-%E5%AE%89%E5%8F%AF%E6%95%B0%E6%8D%AE%E5%BA%93%E5%90%8D%E5%8D%95/</link><pubDate>Fri, 29 May 2026 00:00:00 +0000</pubDate><guid>https://lastdba.com/2026/05/29/%E4%B8%80%E4%B8%AA-dba-%E8%A7%86%E8%A7%92%E7%9C%8B-0526-%E5%AE%89%E5%8F%AF%E6%95%B0%E6%8D%AE%E5%BA%93%E5%90%8D%E5%8D%95/</guid><description>&lt;blockquote&gt;&lt;p&gt;AI率 5%&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;太长不看
 &lt;div id="太长不看" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%a4%aa%e9%95%bf%e4%b8%8d%e7%9c%8b" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;5 月 26 日，信创数据库名单 2026 年第 2 号发布，23 款产品通过（8 集中式 + 15 分布式），为历次最多。最值得关注：平安、银联、移动、电信四家大甲方各自孵化的数据库首次入围。信创逻辑变了——甲方不再只是买方的角色。&lt;/p&gt;</description><content:encoded>&lt;blockquote&gt;&lt;p&gt;AI率 5%&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;太长不看
 &lt;div id="太长不看" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%a4%aa%e9%95%bf%e4%b8%8d%e7%9c%8b" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;5 月 26 日，信创数据库名单 2026 年第 2 号发布，23 款产品通过（8 集中式 + 15 分布式），为历次最多。最值得关注：平安、银联、移动、电信四家大甲方各自孵化的数据库首次入围。信创逻辑变了——甲方不再只是买方的角色。&lt;/p&gt;

&lt;h2 class="relative group"&gt;最新名单
 &lt;div id="最新名单" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%9c%80%e6%96%b0%e5%90%8d%e5%8d%95" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;信创数据库名单历次批次统计。数据来源：中国信息安全测评中心 itsec.gov.cn，共 8 批，4 批含数据库。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;按批次&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;批次&lt;/th&gt;
 &lt;th&gt;时间&lt;/th&gt;
 &lt;th&gt;数据库产品数&lt;/th&gt;
 &lt;th&gt;获Ⅱ级&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;2023#1&lt;/td&gt;
 &lt;td&gt;2023-12-26&lt;/td&gt;
 &lt;td&gt;11（集中式）&lt;/td&gt;
 &lt;td&gt;无&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2024#2&lt;/td&gt;
 &lt;td&gt;2024-09-30&lt;/td&gt;
 &lt;td&gt;17（集中式6+分布式11）&lt;/td&gt;
 &lt;td&gt;GaussDB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2025#2&lt;/td&gt;
 &lt;td&gt;2025-08-22&lt;/td&gt;
 &lt;td&gt;3（集中式）&lt;/td&gt;
 &lt;td&gt;无&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2026#2&lt;/td&gt;
 &lt;td&gt;2026-05-26&lt;/td&gt;
 &lt;td&gt;23（集中式8+分布式15）&lt;/td&gt;
 &lt;td&gt;达梦/崖山/GaussDB/GoldenDB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;按出现次数（入围≥2次）&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;厂商&lt;/th&gt;
 &lt;th&gt;次数&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;达梦&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;南大通用&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;阿里云&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;瀚高&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;腾讯云&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;东方金信&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;海量数据&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;华为云&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;中兴(GoldenDB)&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;OceanBase&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;金仓&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;神通&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;虚谷&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;崖山&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;仅1次&lt;/td&gt;
 &lt;td&gt;平凯/万里/优炫/平安/移动/银联/天翼云/天谋/星环/智臾/自然原数/中移苏州&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;按大厂 / 独角兽 / 大甲方&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;分类&lt;/th&gt;
 &lt;th&gt;厂商&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;大厂&lt;/td&gt;
 &lt;td&gt;华为云(GaussDB/TaurusDB/DWS)、阿里云(PolarDB/AnalyticDB)、腾讯云(TDSQL)、中兴(GoldenDB)、OceanBase(蚂蚁)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;独角兽&lt;/td&gt;
 &lt;td&gt;平凯(TiDB)、崖山(深算院)、星环(ArgoDB)、天谋(TimechoDB)、智臾(DolphinDB)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;大甲方&lt;/td&gt;
 &lt;td&gt;平安科技(RASESQL)、中国银联(UPDRDB)、中国移动(磐维+He3DB)、天翼云(TeleDB)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;老牌信创&lt;/td&gt;
 &lt;td&gt;达梦、金仓、南大通用、神通、瀚高、虚谷、海量、东方金信、万里、优炫&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 class="relative group"&gt;开闸放水
 &lt;div id="开闸放水" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%bc%80%e9%97%b8%e6%94%be%e6%b0%b4" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;这次名单一出，我的感受就四个字：&lt;strong&gt;开闸放水&lt;/strong&gt;。23 款产品，历次最多。几个看点：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;平安 RASESQL。&lt;/strong&gt; 最没有想到的一家。平安集团的金融科技能力一直很强，但他们做数据库这事此前几乎没有公开信息。看到榜单上出现 RASESQL 三个字的时候我愣了好几秒。平安这种体量的金融甲方，自研数据库一旦过了国测，内部信创替代路线就多了一条。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;银联 UPDRDB。&lt;/strong&gt; 同样神秘。之前完全不知道银联在做分布式数据库。银联的交易量摆在那，能扛住自己业务的分布式数据库，技术上不会差。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;阿里云 PolarDB for MySQL。&lt;/strong&gt; PolarDB 的 MySQL 兼容版没过是记在许多人心里的。这次过后，PolarDB 三大主线——PG 版、分布式版、MySQL 版——全过了。加上 AnalyticDB，阿里云数据库全家桶基本凑齐。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;移动磐维 + 电信 TeleDB。&lt;/strong&gt; 移动去年已经有 He3DB（中移苏州）通过国测，今年磐维是第二个产品。电信 TeleDB 首次入围。两家运营商都有自家孵化的信创数据库，各自的信创替换压力应该小不少。反倒是联通一直没有动静——可以想见联通的信创战略跟移动电信肯定不一样。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;星环 ArgoDB。&lt;/strong&gt; 星环是大数据/Hadoop 生态起家的，现在分布式数据库也过了国测。曾经顶着&amp;quot;国产大数据基础软件第一股&amp;quot;的光环，市值一度冲到 300 亿+，从数据湖到信创数据库，路线走通了。&lt;/p&gt;

&lt;h2 class="relative group"&gt;影响
 &lt;div id="影响" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%bd%b1%e5%93%8d" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;这次开闸放水，透露出的最重要的信号是——&lt;strong&gt;甲方可以自研数据库&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;有什么影响？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自研成功的大甲方可以不用当待宰的肥羊&lt;/li&gt;
&lt;li&gt;那些还没做出来的大甲方，可能会再次启动自研&lt;/li&gt;
&lt;li&gt;大厂和独角兽在国内数据库市场上能争夺的蛋糕，少了一块&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;金融行业的银联、平安，电信行业的移动、电信，都成功通过了国测，等于是&amp;quot;研发成功&amp;quot;的金徽章，各单位内部应该都是喜大普奔的状态。而对于外部厂商来说，他们丢失的不只是大客户，准确一点说，&lt;strong&gt;丢失了绝对话语权&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&amp;ldquo;我知道你困难，也知道你不买不行，所以杀猪刀不磨了，直接换屠龙刀往死里宰&amp;rdquo;——对于成功孵化自研数据库的甲方来说，这种处境就释缓了许多，意义重大。&lt;/p&gt;
&lt;p&gt;至于未来信创方向会怎么变动，谁都说不好。从以前的名单看应该是越来越严（上次数据库名单只过了 3 个），这次反倒意外地开闸放水。下次急剧收拢也不是不可能。不仅是联通，保险行业的太保、人保，甚至金融行业有能力的都可以考虑下场自己手搓一个数据库。&lt;/p&gt;

&lt;h2 class="relative group"&gt;令人唏嘘
 &lt;div id="令人唏嘘" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%bb%a4%e4%ba%ba%e5%94%8f%e5%98%98" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;因为我们内核组就坐在我背后，我还算了解一些信创研发的经过。在连续送测均未通过的情况下，整个团队氛围是极其低落的，我相信不止我们是这样，许多送测通不过的团队也是这样。对于金融、电信等行业来说就是有信创要求，但是自研的产品没有过安可，在公司战略层面就没有选择，在团队层面也当然没有了存在价值。所以“过国测”这三个字含金量、影响力都非常大。还好他们过了，真心祝贺他们！RaseSQL No1！&lt;/p&gt;
&lt;p&gt;同时可以看出，信创结果和风向不稳定，变化大，影响大。它决定了一些公司的战略，也决定了许多人的命运。我自己甚至都是这命运轮盘中的一员。&lt;/p&gt;
&lt;p&gt;除了信创名单上的，还有许多不在名单又付出了巨大努力的单位。他们的产品可能很拉，也可能非常好。但国测就是这样严峻的分水岭，一张神秘的入场券——&lt;strong&gt;过与不过，在国内市场，就是两个概念&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;OK，有感而发，可能会删。&lt;/p&gt;

&lt;h2 class="relative group"&gt;参考
 &lt;div id="参考" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%8f%82%e8%80%83" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.itsec.gov.cn/aqkkcp/cpgg/" target="_blank" rel="noreferrer"&gt;https://www.itsec.gov.cn/aqkkcp/cpgg/&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>个人博客上线</title><link>https://lastdba.com/2026/05/16/%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2%E4%B8%8A%E7%BA%BF/</link><pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate><guid>https://lastdba.com/2026/05/16/%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2%E4%B8%8A%E7%BA%BF/</guid><description>&lt;h3 class="relative group"&gt;上线啦！
 &lt;div id="上线啦" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%b8%8a%e7%ba%bf%e5%95%a6" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;博客终于上线了。&lt;/p&gt;
&lt;p&gt;地址：&lt;a href="https://lastdba.com" target="_blank" rel="noreferrer"&gt;https://lastdba.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;国内可以访问，手机访问也友好&lt;/p&gt;
&lt;p&gt;76 篇文章，都是这几年写 PostgreSQL 的东西——案例、内功、源码、论文精读。&lt;/p&gt;</description><content:encoded>
&lt;h3 class="relative group"&gt;上线啦！
 &lt;div id="上线啦" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%b8%8a%e7%ba%bf%e5%95%a6" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;博客终于上线了。&lt;/p&gt;
&lt;p&gt;地址：&lt;a href="https://lastdba.com" target="_blank" rel="noreferrer"&gt;https://lastdba.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;国内可以访问，手机访问也友好&lt;/p&gt;
&lt;p&gt;76 篇文章，都是这几年写 PostgreSQL 的东西——案例、内功、源码、论文精读。&lt;/p&gt;
&lt;p&gt;这次算是正式上线：换框架、换域名、换主题，从头到尾搞了一遍。&lt;/p&gt;

&lt;h3 class="relative group"&gt;亮点
 &lt;div id="亮点" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%ba%ae%e7%82%b9" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;界面漂亮&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;界面简约，阅读友好，搜索功能也比较有用&lt;/p&gt;
&lt;p&gt;

 


&lt;img src="https://lastdba.com/img/image-20260517000626083.png" alt="image-20260517000626083" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;框架：Jekyll → Hugo&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;第一版：Jekyll + minima 主题 + 2000 行 CSS&lt;/p&gt;
&lt;p&gt;第二版：Hugo + Blowfish 主题 + 0 行 CSS&lt;/p&gt;
&lt;p&gt;第一版其实也不错，就是自己搞UI很费劲，想到老冯之前写过一个文章关于网站架构选择的，我直接就上去白嫖了。把架构跟AI说明，让它偷学vonng.com，页面质感提升了一个档次，后面再调整调整细节就收工了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;域名：github.io → lastdba.com&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;买了 &lt;code&gt;lastdba.com&lt;/code&gt;，配了 Cloudflare。GitHub Pages 绑自定义域名，免费 HTTPS 证书，全自动续。不用科学上网也可以访问了！&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;图片本地化&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;原来文章里的图片散落在各个地方——CSDN 的 CDN、GitHub PicBed、墨天轮 OSS。CSDN 有防盗链，不给看。GitHub PicBed又是外网的，国内经常加载不出来。这次让AI搞到本地路径，以后再也不怕图床跑路。跨网访问也不会有图片加载不出来的问题，very good。&lt;/p&gt;

&lt;h3 class="relative group"&gt;上线感悟
 &lt;div id="上线感悟" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%b8%8a%e7%ba%bf%e6%84%9f%e6%82%9f" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;其实博客网址以前也搞过，白嫖一个博客网站项目然后用GitHub Pages就可以搭建出来，域名是 &lt;code&gt;liuzhilong62.github.io/blogs&lt;/code&gt;。但是由于个人有些质感癖（不是），效果一般般我就下线了，后面直接把github仓库当博客网址用，pages都没有搞。最近由于各种原因时间比较多，再次想起这个事情，就用hermes从头开始弄博客网站。&lt;/p&gt;
&lt;p&gt;作为一个DBA，后端工程师，什么Jekyll，Hugo，Blowfish，css这些前端的东西我完全不懂，我只需要给Hermes目标，然后它做，它跟我说啥我也听不懂（当然也不好意思跟它说我搞不懂），基本就是&amp;quot;你继续&amp;quot;，我网页端看下效果满意就行，偶尔会&amp;quot;回退这个&amp;quot;。&lt;/p&gt;
&lt;p&gt;说实话，换 Hugo 最大的感受不是技术上的，而是「不要重新发明轮子」。之前花了很多时间手写暗色模式、TOC、搜索，结果发现换个主题全自带，写得还不如人家好看。&lt;/p&gt;
&lt;p&gt;另外，&lt;code&gt;lastdba.com&lt;/code&gt; 这个域名挂上去之后，博客突然有了一种「正式感」。以前 &lt;code&gt;liuzhilong62.github.io/blogs&lt;/code&gt; 像是个人的实验项目，现在像一个真正的网站。虽然内容没变，但感觉不一样了。&lt;/p&gt;

&lt;h3 class="relative group"&gt;花了多少钱
 &lt;div id="花了多少钱" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%8a%b1%e4%ba%86%e5%a4%9a%e5%b0%91%e9%92%b1" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;全部费用：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;项目&lt;/th&gt;
 &lt;th&gt;费用&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;lastdba.com&lt;/code&gt; 域名（Cloudflare，1年）&lt;/td&gt;
 &lt;td&gt;¥70&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;GitHub Pages 托管&lt;/td&gt;
 &lt;td&gt;¥0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Hugo 框架&lt;/td&gt;
 &lt;td&gt;¥0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Blowfish 主题&lt;/td&gt;
 &lt;td&gt;¥0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Cloudflare DNS + CDN&lt;/td&gt;
 &lt;td&gt;¥0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;token&lt;/td&gt;
 &lt;td&gt;¥60&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;合计&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;¥130&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这可能是性价比最高的个人网站方案了。&lt;/p&gt;
&lt;hr&gt;

&lt;h3 class="relative group"&gt;最后
 &lt;div id="最后" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%9c%80%e5%90%8e" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;有些细节可能没有打磨好，欢迎反馈bug，优化建议&lt;/p&gt;
&lt;p&gt;后面应该会持续更新&lt;/p&gt;

&lt;h3 class="relative group"&gt;参考
 &lt;div id="参考" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%8f%82%e8%80%83" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://vonng.com/" target="_blank" rel="noreferrer"&gt;https://vonng.com/&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>我的年终总结2025</title><link>https://lastdba.com/2025/12/21/%E6%88%91%E7%9A%84%E5%B9%B4%E7%BB%88%E6%80%BB%E7%BB%932025/</link><pubDate>Sun, 21 Dec 2025 00:00:00 +0000</pubDate><guid>https://lastdba.com/2025/12/21/%E6%88%91%E7%9A%84%E5%B9%B4%E7%BB%88%E6%80%BB%E7%BB%932025/</guid><description>&lt;h2 class="relative group"&gt;As a DBA
 &lt;div id="as-a-dba" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#as-a-dba" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;作为一个DBA，在问题分析方面我非常相信第一性原理与信息论。DBA需要非常了解这套系统，了解postgres，才能从原理上解释异象。比如上半年花了很多精力去了解linux内存，去探索内存问题的本质和解决方案。同时，今年在系统运维层面更进了一步，不再仅关注技术层面的问题和处理，而更关注提供解决方案，它应该包含postgres数据库技术维度、系统维度和管理维度的思考。&lt;/p&gt;</description><content:encoded>
&lt;h2 class="relative group"&gt;As a DBA
 &lt;div id="as-a-dba" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#as-a-dba" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;作为一个DBA，在问题分析方面我非常相信第一性原理与信息论。DBA需要非常了解这套系统，了解postgres，才能从原理上解释异象。比如上半年花了很多精力去了解linux内存，去探索内存问题的本质和解决方案。同时，今年在系统运维层面更进了一步，不再仅关注技术层面的问题和处理，而更关注提供解决方案，它应该包含postgres数据库技术维度、系统维度和管理维度的思考。&lt;/p&gt;
&lt;p&gt;简单分类了一下云DBA的工作：&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://lastdba.com/img/csdn/2e7e4042bd88.png" alt="image-20251221120908749" /&gt;&lt;/p&gt;
&lt;p&gt;很多Ops论文都只是说故障处理，实际上故障处理应该不到运维实际工作量的5%，而且无论是学术还是实际，anamaly ops本身效果也不好，所以我不是很看好AIOps能帮DBA大忙这件事。请注意DBA运用AIOps和DBA运用AI是两码事。&lt;/p&gt;
&lt;p&gt;其实这个图一般般，因为没有包含领导任务，领导任务肯定是大头&lt;/p&gt;
&lt;p&gt;然后看了下23、24年的年记，可以简单给出我这个dba的工作年度总结：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2023年全面学习postgres&lt;/li&gt;
&lt;li&gt;2024年全面运维postgres&lt;/li&gt;
&lt;li&gt;2025年负责1510情绪价值&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;非常讽刺的是，去年有一个结论“dba在给领导们提供1510情绪价值”，今年就陷进这个结论实践了。多的也不想说，总之是很累，心力交瘁。希望明年会有改善。&lt;/p&gt;

&lt;h2 class="relative group"&gt;READING
 &lt;div id="reading" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#reading" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;


&lt;img src="https://lastdba.com/img/csdn/710a408c1e3a.png" alt="image-20251220160932315" /&gt;&lt;/p&gt;
&lt;p&gt;今年比去年看的书更多了（从20+到30+本），反倒是写的什么读书笔记之类的更少了。写东西确实麻烦，很费精力，而我也更喜欢看书的感觉。今年看的书相比于去年，明显pg技术类的减少，技术综合类的增多，甚至开始看心理学、经济学和哲学。总之是狩猎更广，不是仅限于数据库本身了。同时小说也更少了，小说像零食一样，越发对此类没有营养的内容没兴趣。&lt;/p&gt;
&lt;p&gt;今年的书单总体分为IT系统类、经济学、科普类、心灵类、小说类，还是像去年一样&lt;strong&gt;凭个人喜好&lt;/strong&gt;排个先后顺序。&lt;/p&gt;
&lt;p&gt;IT系统类书单：&lt;/p&gt;
&lt;p&gt;1.《SRE Google运维解密》：DBA并不是SRE，不过其工作含有对系统稳定性的目标，这跟DBA是有类似之处的。本书中有些云环境或者管理方面的内容，确实获益匪浅，例如对SLA、系统工程、运维压力、工作琐事、角色轮换、“相信团队而不是相信某一个技术专家”等等内容，非常精彩。前段时间还听到DBRE&amp;ndash;Database Reliability Engineer这个概念，比DBA都符合我现在的工作定位。总之是一本好书，现代运维必读之书。&lt;/p&gt;
&lt;p&gt;.《奔跑吧 Linux内核 入门篇》：运维开源数据库，必须了解操作系统。我研究linux内存的书之一&lt;/p&gt;
&lt;p&gt;2.《深入理解Linux进程与内存》：我研究linux内存的书之一&lt;/p&gt;
&lt;p&gt;2.《深入理解Linux内核》：我研究linux内存的书之一&lt;/p&gt;
&lt;p&gt;5.《可观测性工程》：传统监控和传统运维的模式和缺陷，可观测性本质又是什么，还是比较有帮助的。&lt;/p&gt;
&lt;p&gt;经济学书单：&lt;/p&gt;
&lt;p&gt;《微观经济学》：神作，作者德隆·阿西莫格鲁。我理解为人生必读读物，这本书是我笔记做的最好的一本书。不仅了解经济，也进一步了解这个社会。里面有些观点我印象深刻，比如&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;证明为什么市场是一个无形的手，使社会剩余价值最大化，任何调整都会减少社会剩余价值。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;什么情况下市场是无效的，无效的有：外部性、公共资源、公共池塘。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;女性的职场收入比男性低，其中一个原因是女性要生育，生育期间不能参与生产。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;学历的作用是信息传递。也就是一定程度上保真这个人的生产价值&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;企业的进入和退出是市场正常的信号，不代表紊乱&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;公平与效益的权衡是一个课题&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;2.《国家为什么会失败》：神作，作者德隆·阿西莫格鲁。一句话可以总结这本书：国家为什么成功？因为有破坏性创新。德隆·阿西莫格鲁是24年诺贝尔经济学得主，获奖理由是 &amp;ldquo;对制度如何形成以及如何影响繁荣的研究&amp;rdquo;。更难得的是，这本书相比于其他经济学著作更容易让人理解。经济学首推神作。&lt;/p&gt;
&lt;p&gt;3.《理性乐观派》：说是比肩《人类简史》，那肯定是差一截了。但是内容性不差，也更偏经济学。里面有些观点非常新颖，比如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;现代经济使富人更富，但贫者并未愈穷&lt;/li&gt;
&lt;li&gt;自给自足就是贫穷&lt;/li&gt;
&lt;li&gt;人类与动物的区别是物物交换（在人类简史里面是认知革命）&lt;/li&gt;
&lt;li&gt;收入越多会越幸福，这是事实&lt;/li&gt;
&lt;li&gt;贸易在社会地位中的提升，是因为海洋贸易的兴起。因为陆地贸易不稳定，非常容易被掠夺。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;4.《股票大作手回忆录》：好像学到了什么好像又啥也没学到。好看还算是好看。&lt;/p&gt;
&lt;p&gt;.《博弈论》：说实话，我觉得一般。内容是不多的，也很浅显，主要是经济学老提到博弈论，所以就翻开评鉴一下。&lt;/p&gt;
&lt;p&gt;6.《国富论》：非常晦涩，不是给正常人看的，内容性非常强。亚当·斯密一定是个天才，难以想象是什么脑子写出来的。对我来说难度太高，没看完放弃了。&lt;/p&gt;
&lt;p&gt;科普类书单：&lt;/p&gt;
&lt;p&gt;1.《A BREIF HISTORY OF INTELLIGENCE》：神作，AI时代必读物，这本书被我翻到陈旧，到处都是笔记。解构人类的大脑，理解什么是智力，理解AI是怎么来的。我给满分！我现在只要看到一个动物，首先会想它是什么智力级别···&lt;/p&gt;
&lt;p&gt;2.《浪潮之巅》：作者吴军。每个IT工作者都应该看的一本书。讲述IT大公司的沉浮，你可以了解到ORACLE、GOOGLE、仙童、贝尔实验室、甚至融资方面的基础知识。每个公司都有自己的基因，这个基因几乎是不可改变的，也决定了公司的文化和特点。程序员必读。&lt;/p&gt;
&lt;p&gt;3.《纳瓦尔宝典》：有很多有用的观点，比如对边际效益的看法。还有更重要的是，里面推荐了我今年最喜欢的书之一——《微观经济学》。以及推荐了改变我习惯的冥想。&lt;/p&gt;
&lt;p&gt;4.《如何管理一家软件公司》：作者是弗兰克・斯洛特曼 (Frank Slootman)，一位带领三家软件公司 (ServiceNow、Data Domain、Snowflake) 成功实现 IPO 的硅谷传奇 CEO。很不错的书，从IT公司管理者的角度看待公司发展、员工管理、执行力、决策以及决策失误等等。非常推荐。&lt;/p&gt;
&lt;p&gt;5.《银发经济学》：作者大前研一。从日本老龄化问题窥探中国老龄化问题和机遇。天朝的人口结构隐患严重，差不多要到暴雷的时候了，在这个时代下，非常推荐一读。&lt;/p&gt;
&lt;p&gt;6.《第四次浪潮》：作者大前研一。主要是讲日本没有赶上IT科技浪潮，仍然是老工业在支撑国民经济，看上去有些嫉妒韩国和中国。我个人很喜欢作者直接喷首相的态度，哈哈。&lt;/p&gt;
&lt;p&gt;7.《清单革命》：讲解西医手术前的清单检查的必要性，看似简单的步骤可以极大的提升手术成功率。这本书对我的工作有很大的影响，我确实把清单这个概念带入了工作，我也把数据库运维当成一次外科手术，清单是提高手术成功率的简单又必要的手段。&lt;/p&gt;
&lt;p&gt;《人月神话》：“加人”不能使系统工程项目时间线性减少，但也不能通过这个简单的排斥“加人”，因为大型系统工程确实需要很多人协作完成。是不错的书，但是说程序员必读，感觉有点过了。&lt;/p&gt;
&lt;p&gt;9.《数学之美》：作者吴军。也挺不错的书，技术总有他的数学基础，这本书通俗易懂地讲述数学之美。&lt;/p&gt;
&lt;p&gt;10.《麦肯锡结构化思维》：任何问题都应该结构化拆解，我遇到新的问题我会这么思考。有用的书。&lt;/p&gt;
&lt;p&gt;11.《菊与刀》：几年前的囤货没有看所以掏出来看的。写一个二战后的老美对日本的看法，可以窥探一些日本的文化，比如改良的儒家文化，无“仁”，亏欠心理等等。有个缺点是有点太久远了，现在的日本很大程度上不是以前那个样子。&lt;/p&gt;
&lt;p&gt;12.《黑天鹅》：黑天鹅指没有预测到的奇异事件。黑天鹅事件总是会发生的，没有100%预测准确这种事情。同时里面还说到分类，我自己联想了一下《结构化思维》《the world I see》的内容，“人类理解事物的本质是对事务分类”，但是分类总会将一些东西分得尴尬甚至分不下去，黑天鹅事件从分类那一刻起就存在了。是一个值得注意的思考，比较有意思。&lt;/p&gt;
&lt;p&gt;13.《专业主义》：作者大前研一。非常一般，不推荐&lt;/p&gt;
&lt;p&gt;心灵类书单：&lt;/p&gt;
&lt;p&gt;1.《欲望的演化》：进化心理学，神作&lt;/p&gt;
&lt;p&gt;2.《最优解人生》：在不同的人生阶段，体验正确的事、物，即便是错过后的再体验，也不会有那个时候体验的感受了。人生读物，非常推荐。&lt;/p&gt;
&lt;p&gt;3.《十分钟冥想》：主要是讲冥想的重要性，以及怎么去冥想。我就是通过这本书学会的冥想。当我第一次完成冥想时我就爱上了冥想，它给我一种把我带到外太空，然后又回到地球上的感觉。更重要的是，它确实可以减压。冥想已经成为了我生活的一部分。&lt;/p&gt;
&lt;p&gt;4.《操纵心理学》：还可以&lt;/p&gt;
&lt;p&gt;5.《悉达多》：不明所以，rubbish&lt;/p&gt;
&lt;p&gt;6.《生命之书》：纯心灵鸡汤，rubbish&lt;/p&gt;
&lt;p&gt;小说类书单：&lt;/p&gt;
&lt;p&gt;1.《局外人》：神作。难以描述的真实感，感觉自己就像个局外人。&lt;/p&gt;
&lt;p&gt;《yellow face》：很有趣的书，讲的是一个美国白人剽窃一个已故黄种人作家的未发布的作品去发布，甚至笔名都很chinese，当粉丝知道她是白人时，可以感受到有多尴尬。趣味性地探讨种族偏见，像看美剧一样神奇，高潮迭起引人入胜。非常推荐。&lt;/p&gt;
&lt;p&gt;3.《昨日的世界》：作者茨威格。一个作家眼中的奥地利、欧洲、一战二战。以另一个角度回到那个动乱的欧洲，很不错的书。&lt;/p&gt;
&lt;p&gt;4.《挽救计划》：科幻小说，越发不喜欢看科幻小说了。这本还可以，假如你在外星探索时船员死光光了，你刚好又遇到了一个友好的外星人，你该如何跟他交流···&lt;/p&gt;
&lt;p&gt;5.《一个陌生女人的来信》：作者茨威格。不好看，就第一篇新奇一点，其余两篇没有兴趣好好读&lt;/p&gt;
&lt;p&gt;6.《撒旦探戈》：不明所以，诺贝尔文学奖亦有差距&lt;/p&gt;

&lt;h2 class="relative group"&gt;博客和公众号
 &lt;div id="博客和公众号" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%8d%9a%e5%ae%a2%e5%92%8c%e5%85%ac%e4%bc%97%e5%8f%b7" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;公众号的名字一直都很纠结，本来也没什么心思维护，就随便用了几个名字。今年看了个纪录片-最后的棒棒，感触颇多。其实DBA这个行业跟棒棒一样在发生巨变，所以干脆就改成“最后的DBA”了。这个名字还算朗朗上口，也能代表一些时代背景和哲思，看起来是个不错的名字。&lt;/p&gt;
&lt;p&gt;由于投入工作的时间很多，本来写东西的时间就不多，再加上今年的运维方式也在不断变化，我的作息怎么调整都调不出一个好的时间段安排，甚至最后投入了一些资金，自己的时间也没见增加，为此恼火了好一阵。现在回过头一看，今年才发了12篇文章，甚至上半年一篇都没有。&lt;/p&gt;
&lt;p&gt;很不满意。&amp;#x1f620;&lt;/p&gt;
&lt;p&gt;也不知道是水平高了还是系统真的稳定了，能深入研究的案例似乎变少了。不过这也不算什么大问题，今年还把解读论文当成一种文章类型，我自己感觉效果还可以，能学到不少东西，没有那么故步自封闭门造车。AI去解读论文肯定是快的，但是我自己感觉有2个问题&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;是否真的理解了。我感觉没有，跟自己去读一遍不是一个概念。自己去读不仅可以了解的更深入，还可以发现一些奇奇怪怪的细节&lt;/li&gt;
&lt;li&gt;水不了文章。如果我一个prompt就可以解读论文，那我感觉传播意义不大，现在不用AI的人应该没有了吧&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;当然不是所有的论文都去一字一句的读，毕竟效率太低了，我只会选一些我感觉还不错有必要逐帧解读的，拿出来细品。&lt;/p&gt;
&lt;p&gt;简单总结今年的文章：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;数量过少&lt;/li&gt;
&lt;li&gt;质量稍有提升，并且是有用的东西(有几篇我个人非常满意)&lt;/li&gt;
&lt;li&gt;探索了新的方式&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;最后
 &lt;div id="最后" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%9c%80%e5%90%8e" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;今年是忙碌的一年，有不好也有好的回忆，有很多重要的事情没有完成，明年应该做出较大的改变。写这个年记还是挺有意思的，回头看看前几年的自己在干嘛，也是有趣的事情。&lt;/p&gt;
&lt;p&gt;去年定的2025年OKR：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一些东西继续&amp;ndash;失败&lt;/li&gt;
&lt;li&gt;想想怎么做产出&amp;ndash;失败&lt;/li&gt;
&lt;li&gt;掌握一个其他赛道&amp;ndash;半成功&lt;/li&gt;
&lt;li&gt;PG···没想好还要怎么做&amp;ndash;失败&lt;/li&gt;
&lt;li&gt;想办法重拾健身&amp;ndash;失败&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;2025年计划：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一些东西继续&lt;/li&gt;
&lt;li&gt;关注自己的心理和身体健康，明年年度巡检告警低于今年&lt;/li&gt;
&lt;li&gt;关注文章的阅读量，维护公众号&lt;/li&gt;
&lt;li&gt;探索DB AI OPS，明年向自己汇报&lt;/li&gt;
&lt;li&gt;向上管理，不可以投入过多时间到工作上&lt;/li&gt;
&lt;li&gt;假期旅游而不是卷&lt;/li&gt;
&lt;li&gt;读书不低于30本，不可仅关注数量&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>我的年终总结2024</title><link>https://lastdba.com/2025/01/11/%E6%88%91%E7%9A%84%E5%B9%B4%E7%BB%88%E6%80%BB%E7%BB%932024/</link><pubDate>Sat, 11 Jan 2025 00:00:00 +0000</pubDate><guid>https://lastdba.com/2025/01/11/%E6%88%91%E7%9A%84%E5%B9%B4%E7%BB%88%E6%80%BB%E7%BB%932024/</guid><description>&lt;h2 class="relative group"&gt;As a DBA
 &lt;div id="as-a-dba" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#as-a-dba" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;2023对我来说是全面学习pg的一年，而2024就是全面运维pg的一年。其实还有一些资料我很想dive in但是一直没有时间搞，今年主要是案例分析，基础知识学习只有靠时不时的补补了。&lt;/p&gt;</description><content:encoded>
&lt;h2 class="relative group"&gt;As a DBA
 &lt;div id="as-a-dba" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#as-a-dba" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;2023对我来说是全面学习pg的一年，而2024就是全面运维pg的一年。其实还有一些资料我很想dive in但是一直没有时间搞，今年主要是案例分析，基础知识学习只有靠时不时的补补了。&lt;/p&gt;
&lt;p&gt;年中的时候有一个关于“dba会不会被云时代淘汰的”的讨论，这次讨论我印象很深，我后面也想了很多东西，想了很多为什么别人事情很少，但是我的dba事情这么多之类的，甚至最后还去云计算群里面battle了一圈，确实有收获，不同的立场会有意想不到的结果。battle的结论可能只有一个：dba在给领导们提供1510情绪价值。&lt;/p&gt;
&lt;p&gt;无论对还是错吧，今年可以在很多文章中看到对dba职业的思考。dba再继续走传统dba模式肯定是死路一条了，现在的dba会更倾向业务数据层运维，或者上升到架构设计，专注数据库的专家型dba的职位其实是很少的。&lt;/p&gt;

&lt;h2 class="relative group"&gt;READING
 &lt;div id="reading" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#reading" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;


&lt;img src="https://lastdba.com/img/csdn/4961d50ee1c3.jpg" alt="image" /&gt;&lt;/p&gt;
&lt;p&gt;再说下为何执着看书（23年也说过···）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;阅读带来的价值短期无法估量&lt;/li&gt;
&lt;li&gt;阅读带来的知识充值愉悦感&lt;/li&gt;
&lt;li&gt;学习是一种信仰。尤瓦尔有个观点是：相信科学实际上也是一种信仰。我选择相信这个信仰，至少24年以及短期可见的未来是这样&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我的书单大概分成3类：pg类、大技术范围类、课外书。有中文也有英文，有纸质有电子。&lt;/p&gt;
&lt;p&gt;今年继续来个书单排名，类别不同横向对比有点扯，就分类对比吧。再次备注，这些书单是“从头到尾”式的冲着finish去的，当reference的看的书不在此列。&lt;/p&gt;
&lt;p&gt;2024年pg书单（按喜好排名）：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;《PostgreSQL数据库内核分析》，思路框架清晰，就是版本有点老&lt;/li&gt;
&lt;li&gt;《快速掌握PostgreSQL版本新特性》，这应该是我今年最喜欢的pg书，因为它全程&lt;strong&gt;无废话&lt;/strong&gt;，看着舒服&lt;/li&gt;
&lt;li&gt;《PostgreSQL指南 内幕探索》，这本书我本来想放到第一位，但是因为有interdb在线免费文档，我甚至都不推荐这本书，排在这里是因为interdb太棒了，替身在这里当神供着&lt;/li&gt;
&lt;li&gt;《PostgreSQL修炼之道 从小工到专家 第二版》，很细但也很多，建议快速翻完找到里面的重点，不要逗留太久&lt;/li&gt;
&lt;li&gt;《PostgreSQL技术内幕 事务处理深度探索》，事务是pg的基础，也是我的源码入门基础&lt;/li&gt;
&lt;li&gt;《PostgreSQL实战》，里面的实战还是很值得借鉴&lt;/li&gt;
&lt;li&gt;《PostgreSQL 16 Administration Cookbook》，不推荐，目录框架看着不错，内容很空，不推荐在这本书上浪费时间&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;2024年大技术范围类书单（按喜好排名）：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;《DDIA-v2 设计数据密集型应用（第二版）》，好到不知道从何说起，棒到我专门写了&lt;a href="https://github.com/liuzhilong62/blogs/blob/main/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0%E2%80%94%E2%80%94DDIA-v2%20%E8%AE%BE%E8%AE%A1%E6%95%B0%E6%8D%AE%E5%AF%86%E9%9B%86%E5%9E%8B%E5%BA%94%E7%94%A8%EF%BC%88%E7%AC%AC%E4%BA%8C%E7%89%88%EF%BC%89.md" target="_blank" rel="noreferrer"&gt;读书笔记&lt;/a&gt;（我今年唯一的读书笔记文章），相见恨晚&lt;/li&gt;
&lt;li&gt;《数据库简史》，读史真的可以明鉴，数据库的故事从这里开始，有些技术的东西都想得更明白了。&lt;/li&gt;
&lt;li&gt;《ITIL 4 与devops 服务管理认证指南（第二版）》，IT服务管理的经典，提升一下对运维这个角色的理解，和我工作息息相关的这些东西又是怎么来的，哪些又是不符合实际以及为什么没有应用上？可以领悟到很多东西。&lt;/li&gt;
&lt;li&gt;《云原生Kubernetes》，硬核，另一个赛道&lt;/li&gt;
&lt;li&gt;《深入浅出Docker》，理解容器和容器历史还不错，容器本身的知识其实不多&lt;/li&gt;
&lt;li&gt;《鸟哥的linux私房菜》，sorry我确实没有读过这本经典，补番来的。里面的写做思路很值得借鉴，缺点在于很多东西对于我的职能来说无法受益&lt;/li&gt;
&lt;li&gt;《机器学习》，排在这里不是这本书不好，是很难看懂，大概到1/4的时候就放弃了，这本书让我了解了我的智力上限，我很难过&lt;/li&gt;
&lt;li&gt;《从零搭建向量数据库》，看源码应该去github&lt;/li&gt;
&lt;li&gt;《深入理解go语言》，理解了个寂寞&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;2024年课外书单（按喜好排名）：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;《癌症楼》，这本书上半年早期就看完了，看的时候就觉得，不出意外这本书今年能排第一。诺贝尔文学奖，实至名归&lt;/li&gt;
&lt;li&gt;《亲密关系》，理解和恋人、和朋友、和老板的关系，论文风格，扎实，我喜欢&lt;/li&gt;
&lt;li&gt;《上帝掷骰子吗？量子物理史话》，别的不说，写作风格极其提供情绪价值，让我想一直看下去，没几天就把他看完了&lt;/li&gt;
&lt;li&gt;《The Worlds I see》，AI 李飞飞的自传，一个成都长大的姑娘到水生活热美利坚冒险，最后执掌谷歌AI的故事，顺便讲述了一下AI的发展历史&lt;/li&gt;
&lt;li&gt;《今日简史》，尤瓦尔三部曲最后一部，前两本都看完甚是喜欢，但是这一本感觉一般般，算是有始有终吧&lt;/li&gt;
&lt;li&gt;《the old man and the sea》，不好评价，我喜欢它的气质，但不喜欢它的内容&lt;/li&gt;
&lt;li&gt;《朝问道》，这是一本刘慈欣的短篇小说集，某天在图书馆因为第一篇短篇把它买下了，买回来发现其他短篇都很boring很幼稚，感觉被骗了&lt;/li&gt;
&lt;li&gt;《西游记》，暴论：唐僧的身世都讲不明白，乱起八遭、稀里糊涂。看了点就放弃了（我去年对《三国演义》的评价是很高的）&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 class="relative group"&gt;博客和公众号
 &lt;div id="博客和公众号" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%8d%9a%e5%ae%a2%e5%92%8c%e5%85%ac%e4%bc%97%e5%8f%b7" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;2024年的创作文章：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;pg技术 21篇&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;其他技术 2篇&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;读书笔记 1篇&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;无用文章 1篇&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;今年只写了25篇文章，写作数量较去年明显下降了。&lt;/p&gt;
&lt;p&gt;公众号followers 600，虽然人不多，但是我相信每一个都是有品位的人 &amp;#x1f638;&lt;/p&gt;
&lt;p&gt;写技术文章其实挺累的，花的时间要比想象的多的多，不过在写作过程中确实可以学到东西，完作的成就感还是有的。应为要对文章负责，不懂的事情我自己不会去乱写。至于理解有误而出现的错误，其实也是正常现象，没人能保证5年后的自己不怼现在的自己，在当前状态下写对就行了。&lt;/p&gt;
&lt;p&gt;今年写作内容上，放弃了课外书的读后感写作，去年写的挺多的，写读后感很费时间而且价值很低，低情绪价值的事情自然就放弃了。其实我每年的写作内容都有差别，目前来看就PG库技术类文章是永恒不变坚持创作的，其他类型的都没那么稳定。这也算正常吧，本来写博客就是为了写数据库，其他领域如果没有应用场景的话，短暂试探期过去就不会再接触了。&lt;/p&gt;
&lt;p&gt;还想吐槽一点，国内的博客平台只对文章数量感兴趣，跟我的写作风格十分不契合，我一篇文章都是手敲的上万字，我是宁缺毋滥型博主。所以也懒得管了，准备25年放弃CSDN，就发发github和公众号得了。&lt;/p&gt;
&lt;p&gt;CSDN我2017年就开始写了，当初写博客那会就没几个好用的博客托管平台。现在来看CSDN 社区交互为0，上面文章绝大部分都很挫，我自己都不想搜到CSDN的文章，就像虽然有7、8年感情的初恋，该分手还是得分手。&lt;/p&gt;
&lt;p&gt;24年的发文途径：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CSDN博客：&lt;a href="https://liuzhilong.blog.csdn.net/" target="_blank" rel="noreferrer"&gt;https://liuzhilong.blog.csdn.net&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;墨天轮 liuzhilong62&lt;/li&gt;
&lt;li&gt;github：https://github.com/liuzhilong62/blogs&lt;/li&gt;
&lt;li&gt;公众号：破斯特贵斯库儿&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;25年预计途径：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;github：https://github.com/liuzhilong62/blogs&lt;/li&gt;
&lt;li&gt;公众号：破斯特贵斯库儿&lt;/li&gt;
&lt;li&gt;其他平台看情况吧&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;最后
 &lt;div id="最后" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%9c%80%e5%90%8e" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;我似乎每年都在说work-learning balance···由于今年工作量剧增，有段时间甚至都没办法学习了，balance已经被击碎。没有时间学习我是无法接受的，所以后面调整了一下自己的作息时间（感谢《原子习惯》这本书，我太爱了），总算能挤出一点时间来学习。其实只要周围没人，学习效率就是高的。&lt;/p&gt;
&lt;p&gt;收集了一下今年我比较认可的话：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;不要让别人成为那你任务链上的依赖 &amp;ndash;heisenberg.liu&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;需要执行力的方案一般都是简单的方案 &amp;ndash;heisenberg.liu&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;没有落地的事情等于没有做 &amp;ndash;somebody&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;自己去想办法解决问题，而不是等别人回消息 &amp;ndash;somebody&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;重要的事情马上就做，等一会都是做不了的 &amp;ndash;somebody&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;不要做重复的低价值的事情，多想想这个需求源头的上下文 &amp;ndash;heisenberg.liu&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;不要在屎里淘金，想办法搞优质信息源 &amp;ndash;somebody&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;SRE需要配置最佳默认参数的能力，也需要批量修改这些参数的能力 &amp;ndash;《企业云计算》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;杂活做的越多，杂活就越多 &amp;ndash;heisenberg.liu&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;sre 50%的时间用来运维，50%的时间用来研发 &amp;ndash;《企业云计算》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;过早的优化是万恶之源，过早的代码抽象也是万恶之源 &amp;ndash;somebody&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;人脑接收知识的速度是有限的 &amp;ndash;somebody&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果有人不让你看书，那就离开这个人，或者离开这个环境 &amp;ndash;heisenberg.liu&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;做知识库的团队是混子 &amp;ndash;somebody&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;标准的价值是由客户来决定的 &amp;ndash;《ITIL 4 》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;英雄主义：长时间工作并独立排查故障，长时间的工作也会对工作本身感到倦怠。凡事想成为英雄的人，他们只对自己的成就感兴趣，对团队协调工作置若罔闻 &amp;ndash;《ITIL 4 》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;不是所有问题都需要定位根因，取决于问题发生频率和故障范围 &amp;ndash;《ITIL 4 》&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;回顾了一下2023年的自己定的计划，总共就2个一个都没完成，KPI达成率&lt;strong&gt;0% ​&lt;/strong&gt;&amp;#x1f604;&lt;/p&gt;
&lt;p&gt;结合敏捷运维、敏捷项目管理、OKR的思想，我在年初就给自己定下全年计划，就是不合理的。回想去年、前年，我有些计划就是半路杀出并在优先级上pk过了其他任务。并且有些任务无法完成，这是应该是一个正常状态。so，不给自己立太多flag。&lt;/p&gt;
&lt;p&gt;2025年计划：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一些东西继续&lt;/li&gt;
&lt;li&gt;想想怎么做产出&lt;/li&gt;
&lt;li&gt;掌握一个其他赛道&lt;/li&gt;
&lt;li&gt;PG···没想好还要怎么做&lt;/li&gt;
&lt;li&gt;想办法重拾健身&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>ogg搭建oracle-pg同步——实操步骤</title><link>https://lastdba.com/2024/08/13/ogg%E6%90%AD%E5%BB%BAoracle-pg%E5%90%8C%E6%AD%A5%E5%AE%9E%E6%93%8D%E6%AD%A5%E9%AA%A4/</link><pubDate>Tue, 13 Aug 2024 00:00:00 +0000</pubDate><guid>https://lastdba.com/2024/08/13/ogg%E6%90%AD%E5%BB%BAoracle-pg%E5%90%8C%E6%AD%A5%E5%AE%9E%E6%93%8D%E6%AD%A5%E9%AA%A4/</guid><description>&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;源库：  oracle(11.2.0.4) 192.168.10.141&lt;/p&gt;
&lt;p&gt;目标库：pgsql(10.12)     192.168.10.128&lt;/p&gt;
&lt;p&gt;ogg软件版本:(19.1.0.0.4)&lt;/p&gt;
&lt;p&gt;ogg软件下载：Oracle GoldenGate Downloads&lt;/p&gt;
&lt;p&gt;glibc问题处理：https://www.cnblogs.com/hxlasky/p/16779047.html&lt;/p&gt;</description><content:encoded>&lt;p&gt;​&lt;/p&gt;
&lt;p&gt;源库：  oracle(11.2.0.4) 192.168.10.141&lt;/p&gt;
&lt;p&gt;目标库：pgsql(10.12)     192.168.10.128&lt;/p&gt;
&lt;p&gt;ogg软件版本:(19.1.0.0.4)&lt;/p&gt;
&lt;p&gt;ogg软件下载：Oracle GoldenGate Downloads&lt;/p&gt;
&lt;p&gt;glibc问题处理：https://www.cnblogs.com/hxlasky/p/16779047.html&lt;/p&gt;
&lt;p&gt;1.在源端和目标端安装ogg软件&lt;/p&gt;
&lt;p&gt;源端：&lt;/p&gt;
&lt;p&gt;一、配置相应文件：oggcore.rsp&lt;/p&gt;
&lt;p&gt;oracle.install.responseFileVersion=/home/oracle/oggcore.rsp&lt;/p&gt;
&lt;p&gt;INSTALL_OPTION=ORA11g&lt;/p&gt;
&lt;p&gt;SOFTWARE_LOCATION=/oracle/ogg&lt;/p&gt;
&lt;p&gt;START_MANAGER=false&lt;/p&gt;
&lt;p&gt;MANAGER_PORT=7809&lt;/p&gt;
&lt;p&gt;DATABASE_LOCATION=/oracle/db/11.2.0.4&lt;/p&gt;
&lt;p&gt;INVENTORY_LOCATION=/oracle/oraInventory&lt;/p&gt;
&lt;p&gt;UNIX_GROUP_NAME=oinstall&lt;/p&gt;
&lt;p&gt;二、静默安装OGG&lt;/p&gt;
&lt;p&gt;./runInstaller -silent -nowait -responseFile /home/oracle/oggcore.rsp&lt;/p&gt;
&lt;p&gt;oracle@szgtsp431-or@ecsdb&amp;gt;./runInstaller -silent -nowait -responseFile /home/oracle/oggcore.rsp&lt;/p&gt;
&lt;p&gt;Starting Oracle Universal Installer&amp;hellip;&lt;/p&gt;
&lt;p&gt;Checking Temp space: must be greater than 120 MB.   Actual 32405 MB    Passed&lt;/p&gt;
&lt;p&gt;Checking swap space: must be greater than 150 MB.   Actual 2048 MB    Passed&lt;/p&gt;
&lt;p&gt;Preparing to launch Oracle Universal Installer from /tmp/OraInstall2020-08-14_08-57-27AM. Please wait &amp;hellip;oracle@szgtsp431-or@ecsdb&amp;gt;You can find the log of this install session at:&lt;/p&gt;
&lt;p&gt; /oracle/oraInventory/logs/installActions2020-08-14_08-57-27AM.log&lt;/p&gt;
&lt;p&gt;Successfully Setup Software.&lt;/p&gt;
&lt;p&gt;The installation of Oracle GoldenGate Core was successful.&lt;/p&gt;
&lt;p&gt;Please check &amp;lsquo;/oracle/oraInventory/logs/silentInstall2020-08-14_08-57-27AM.log&amp;rsquo; for more details.&lt;/p&gt;
&lt;p&gt;2.修改数据库为归档模式&lt;/p&gt;
&lt;p&gt;oracle@szgtsp431-or@ecsdb&amp;gt;sqlplus / as sysdba&lt;/p&gt;
&lt;p&gt;SQL*Plus: Release 11.2.0.4.0 Production on Fri Aug 14 09:06:34 2020&lt;/p&gt;
&lt;p&gt;Copyright (c) 1982, 2013, Oracle.  All rights reserved.&lt;/p&gt;
&lt;p&gt;Connected to:&lt;/p&gt;
&lt;p&gt;Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production&lt;/p&gt;
&lt;p&gt;With the Partitioning, OLAP, Data Mining and Real Application Testing options&lt;/p&gt;
&lt;p&gt;SQL&amp;gt; archive log list;&lt;/p&gt;
&lt;p&gt;Database log mode              Archive Mode&lt;/p&gt;
&lt;p&gt;Automatic archival             Enabled&lt;/p&gt;
&lt;p&gt;Archive destination            /oracle/oradata/archivelog&lt;/p&gt;
&lt;p&gt;Oldest online log sequence     19&lt;/p&gt;
&lt;p&gt;Next log sequence to archive   21&lt;/p&gt;
&lt;p&gt;Current log sequence           21&lt;/p&gt;
&lt;p&gt;3.开启数据库的强制日志和最小附加日志&lt;/p&gt;
&lt;p&gt;alter database force logging;&lt;/p&gt;
&lt;p&gt;alter database add supplemental log data;&lt;/p&gt;
&lt;p&gt;alter system switch logfile;&lt;/p&gt;
&lt;p&gt;确认是否开启了强制日志和最小附加日志&lt;/p&gt;
&lt;p&gt;select force_logging,supplemental_log_data_min from v$database;&lt;/p&gt;
&lt;p&gt;4.修改enable_goldengate_replication参数&lt;/p&gt;
&lt;p&gt;alter system set enable_goldengate_replication=true scope=both;&lt;/p&gt;
&lt;p&gt;若为集群，所有节点都要修改:&lt;/p&gt;
&lt;p&gt;alter system set enable_goldengate_replication=true scope=both sid=&amp;rsquo;*&amp;rsquo;;&lt;/p&gt;
&lt;p&gt;5.创建ogg用户和ogg用户表空间并授权&lt;/p&gt;
&lt;p&gt;create tablespace tbs_ogg datafile &amp;lsquo;/oracle/oradata/datafile/tbs_ogg01.dbf&amp;rsquo; size 100M;&lt;/p&gt;
&lt;p&gt;create user goldengate identified by 123456 default tablespace tbs_ogg temporary tablespace temp;&lt;/p&gt;
&lt;p&gt;grant create session,alter session to goldengate;&lt;/p&gt;
&lt;p&gt;grant alter system to goldengate;&lt;/p&gt;
&lt;p&gt;grant resource to goldengate;&lt;/p&gt;
&lt;p&gt;grant connect to goldengate;&lt;/p&gt;
&lt;p&gt;grant select any dictionary to goldengate;&lt;/p&gt;
&lt;p&gt;grant flashback any table to goldengate;&lt;/p&gt;
&lt;p&gt;grant select any table to goldengate;&lt;/p&gt;
&lt;p&gt;grant select any table to goldengate;&lt;/p&gt;
&lt;p&gt;grant insert any table to goldengate;&lt;/p&gt;
&lt;p&gt;grant update any table to goldengate;&lt;/p&gt;
&lt;p&gt;grant delete any table to goldengate;&lt;/p&gt;
&lt;p&gt;grant select on dba_clusters to goldengate;&lt;/p&gt;
&lt;p&gt;grant execute on dbms_flashback to goldengate;&lt;/p&gt;
&lt;p&gt;grant create table to goldengate;&lt;/p&gt;
&lt;p&gt;grant create sequence to goldengate;&lt;/p&gt;
&lt;p&gt;grant alter any table to goldengate;&lt;/p&gt;
&lt;p&gt;grant dba to goldengate;&lt;/p&gt;
&lt;p&gt;grant lock any table to goldengate;&lt;/p&gt;
&lt;p&gt;6.开启表级附件日志&lt;/p&gt;
&lt;p&gt;要同步某个schema的表数据或者多个schema的数据，需要对表开启附加日志&lt;/p&gt;
&lt;p&gt;检查附件日志：&lt;/p&gt;
&lt;p&gt;SELECT&lt;/p&gt;
&lt;p&gt;owner,&lt;/p&gt;
&lt;p&gt;table_name,&lt;/p&gt;
&lt;p&gt;log_group_name,&lt;/p&gt;
&lt;p&gt;log_group_type,&lt;/p&gt;
&lt;p&gt;decode( always, &amp;lsquo;ALWAYS&amp;rsquo;, &amp;lsquo;Unconditional&amp;rsquo;, NULL, &amp;lsquo;Conditional&amp;rsquo; ) always&lt;/p&gt;
&lt;p&gt;FROM dba_log_groups&lt;/p&gt;
&lt;p&gt;ORDER BY owner,table_name,log_group_name;&lt;/p&gt;
&lt;p&gt;选择空闲时段打开所需复制表的附加日志:&lt;/p&gt;
&lt;p&gt;oracle@szgtsp431-or@ecsdb&amp;gt;ggsci&lt;/p&gt;
&lt;p&gt;Oracle GoldenGate Command Interpreter for Oracle&lt;/p&gt;
&lt;p&gt;Version 19.1.0.0.4 OGGCORE_19.1.0.0.0_PLATFORMS_191017.1054_FBO&lt;/p&gt;
&lt;p&gt;Linux, x64, 64bit (optimized), Oracle 11g on Oct 17 2019 23:13:12&lt;/p&gt;
&lt;p&gt;Operating system character set identified as US-ASCII.&lt;/p&gt;
&lt;p&gt;Copyright (C) 1995, 2019, Oracle and/or its affiliates. All rights reserved.&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp431-or) 1&amp;gt; dblogin userid goldengate,password 123456&lt;/p&gt;
&lt;p&gt;Successfully logged into database.&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp431-or as goldengate@ecsdb) 2&amp;gt; add trandata ecs.*&lt;/p&gt;
&lt;p&gt;2020-08-14 09:13:54  INFO    OGG-15132  Logging of supplemental redo data enabled for table ECS.DEPT.&lt;/p&gt;
&lt;p&gt;2020-08-14 09:13:54  INFO    OGG-15133  TRANDATA for scheduling columns has been added on table ECS.DEPT.&lt;/p&gt;
&lt;p&gt;2020-08-14 09:13:54  INFO    OGG-15135  TRANDATA for instantiation CSN has been added on table ECS.DEPT.&lt;/p&gt;
&lt;p&gt;2020-08-14 09:13:54  INFO    OGG-15132  Logging of supplemental redo data enabled for table ECS.INFO.&lt;/p&gt;
&lt;p&gt;2020-08-14 09:13:54  INFO    OGG-15133  TRANDATA for scheduling columns has been added on table ECS.INFO.&lt;/p&gt;
&lt;p&gt;2020-08-14 09:13:54  INFO    OGG-15135  TRANDATA for instantiation CSN has been added on table ECS.INFO.&lt;/p&gt;
&lt;p&gt;2020-08-14 09:13:54  INFO    OGG-15132  Logging of supplemental redo data enabled for table ECS.STUDENT_INFO.&lt;/p&gt;
&lt;p&gt;2020-08-14 09:13:54  INFO    OGG-15133  TRANDATA for scheduling columns has been added on table ECS.STUDENT_INFO.&lt;/p&gt;
&lt;p&gt;2020-08-14 09:13:54  INFO    OGG-15135  TRANDATA for instantiation CSN has been added on table ECS.STUDENT_INFO.&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp431-or as goldengate@ecsdb) 3&amp;gt;&lt;/p&gt;
&lt;p&gt;查看日志是否添加成功:&lt;/p&gt;
&lt;p&gt;SQL&amp;gt; select *from (&lt;/p&gt;
&lt;p&gt;  2  select owner,table_name from dba_tables where owner in (&amp;lsquo;BGLWT&amp;rsquo;)&lt;/p&gt;
&lt;p&gt;  3  minus&lt;/p&gt;
&lt;p&gt;  4  select owner,table_name from dba_log_groups)&lt;/p&gt;
&lt;p&gt;  5  order by owner,table_name;&lt;/p&gt;
&lt;p&gt;no rows selected&lt;/p&gt;
&lt;p&gt;返回0行，表示所有的表级附加日志添加成功。&lt;/p&gt;
&lt;p&gt;7.配置管理进程&lt;/p&gt;
&lt;p&gt;oracle@szgtsp431-or@ecsdb&amp;gt;ggsci&lt;/p&gt;
&lt;p&gt;Oracle GoldenGate Command Interpreter for Oracle&lt;/p&gt;
&lt;p&gt;Version 19.1.0.0.4 OGGCORE_19.1.0.0.0_PLATFORMS_191017.1054_FBO&lt;/p&gt;
&lt;p&gt;Linux, x64, 64bit (optimized), Oracle 11g on Oct 17 2019 23:13:12&lt;/p&gt;
&lt;p&gt;Operating system character set identified as US-ASCII.&lt;/p&gt;
&lt;p&gt;Copyright (C) 1995, 2019, Oracle and/or its affiliates. All rights reserved.&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp431-or) 1&amp;gt; dblogin userid goldengate,password 123456&lt;/p&gt;
&lt;p&gt;Successfully logged into database.&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp431-or as goldengate@ecsdb) 2&amp;gt; create subdirs&lt;/p&gt;
&lt;p&gt;Creating subdirectories under current directory /home/oracle&lt;/p&gt;
&lt;p&gt;Parameter file                 /oracle/ogg/dirprm: created.&lt;/p&gt;
&lt;p&gt;Report file                    /oracle/ogg/dirrpt: created.&lt;/p&gt;
&lt;p&gt;Checkpoint file                /oracle/ogg/dirchk: created.&lt;/p&gt;
&lt;p&gt;Process status files           /oracle/ogg/dirpcs: created.&lt;/p&gt;
&lt;p&gt;SQL script files               /oracle/ogg/dirsql: created.&lt;/p&gt;
&lt;p&gt;Database definitions files     /oracle/ogg/dirdef: created.&lt;/p&gt;
&lt;p&gt;Extract data files             /oracle/ogg/dirdat: created.&lt;/p&gt;
&lt;p&gt;Temporary files                /oracle/ogg/dirtmp: created.&lt;/p&gt;
&lt;p&gt;Credential store files         /oracle/ogg/dircrd: created.&lt;/p&gt;
&lt;p&gt;Masterkey wallet files         /oracle/ogg/dirwlt: created.&lt;/p&gt;
&lt;p&gt;Dump files                     /oracle/ogg/dirdmp: created.&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp431-or as goldengate@ecsdb) 3&amp;gt; edit param mgr&lt;/p&gt;
&lt;p&gt;PORT 7809&lt;/p&gt;
&lt;p&gt;DYNAMICPORTLIST 7810-7980&lt;/p&gt;
&lt;p&gt;PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 3&lt;/p&gt;
&lt;p&gt;PURGEDDLHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 10&lt;/p&gt;
&lt;p&gt;LAGREPORTHOURS 1&lt;/p&gt;
&lt;p&gt;LAGINFOMINUTES 30&lt;/p&gt;
&lt;p&gt;LAGCRITICALMINUTES 45&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp431-or as goldengate@ecsdb) 6&amp;gt;&lt;/p&gt;
&lt;p&gt;8.配置抽取进程&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp431-or as goldengate@ecsdb) 7&amp;gt; add extract extecs, tranlog, threads 1,begin now&lt;/p&gt;
&lt;p&gt;EXTRACT added.&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp431-or as goldengate@ecsdb) 8&amp;gt; add exttrail ./dirdat/lt, extract extecs&lt;/p&gt;
&lt;p&gt;EXTTRAIL added.&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp431-or as goldengate@ecsdb) 9&amp;gt; info all&lt;/p&gt;
&lt;p&gt;Program     Status      Group       Lag at Chkpt  Time Since Chkpt&lt;/p&gt;
&lt;p&gt;MANAGER     RUNNING                                           &lt;/p&gt;
&lt;p&gt;EXTRACT     STOPPED     EXTECS      00:00:00      00:00:38    &lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp431-or as goldengate@ecsdb) 10&amp;gt; edit param  extecs&lt;/p&gt;
&lt;p&gt;EXTRACT extecs&lt;/p&gt;
&lt;p&gt;SETENV (ORACLE_HOME = &amp;ldquo;/oracle/db/11.2.0.4&amp;rdquo;)&lt;/p&gt;
&lt;p&gt;SETENV (ORACLE_SID = &amp;ldquo;ecsdb&amp;rdquo;)&lt;/p&gt;
&lt;p&gt;USERID goldengate, PASSWORD 123456&lt;/p&gt;
&lt;p&gt;EXTTRAIL ./dirdat/lt&lt;/p&gt;
&lt;p&gt;TRANLOGOPTIONS EXCLUDEUSER goldengate&lt;/p&gt;
&lt;p&gt;TRANLOGOPTIONS DBLOGREADER&lt;/p&gt;
&lt;p&gt;DBOPTIONS ALLOWUNUSEDCOLUMN&lt;/p&gt;
&lt;p&gt;FETCHOPTIONS USESNAPSHOT, USELATESTVERSION, MISSINGROW REPORT&lt;/p&gt;
&lt;p&gt;STATOPTIONS REPORTFETCH&lt;/p&gt;
&lt;p&gt;WARNLONGTRANS 1h, CHECKINTERVAL 10m&lt;/p&gt;
&lt;p&gt;DYNAMICRESOLUTION&lt;/p&gt;
&lt;p&gt;DISCARDFILE ./dirrpt/extecs.dsc, APPEND, MEGABYTES 1024&lt;/p&gt;
&lt;p&gt;DISCARDROLLOVER AT 6:00&lt;/p&gt;
&lt;p&gt;REPORTROLLOVER AT 6:00&lt;/p&gt;
&lt;p&gt;REPORTCOUNT EVERY 1 MINUTES, RATE&lt;/p&gt;
&lt;p&gt;DDL INCLUDE MAPPED&lt;/p&gt;
&lt;p&gt;DDLOPTIONS ADDTRANDATA, REPORT&lt;/p&gt;
&lt;p&gt;DDLOPTIONS NOCROSSRENAME, REPORT&lt;/p&gt;
&lt;p&gt;TABLE ECS.*;&lt;/p&gt;
&lt;p&gt;9.配置投递进程&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp431-or as goldengate@ecsdb) 11&amp;gt; add extract deliecs, exttrailsource ./dirdat/lt&lt;/p&gt;
&lt;p&gt;EXTRACT added.&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp431-or as goldengate@ecsdb) 12&amp;gt; add rmttrail ./dirdat/rt, extract deliecs, megabytes 500&lt;/p&gt;
&lt;p&gt;RMTTRAIL added.&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp431-or as goldengate@ecsdb) 13&amp;gt; edit param deliecs&lt;/p&gt;
&lt;p&gt;EXTRACT deliecs&lt;/p&gt;
&lt;p&gt;PASSTHRU&lt;/p&gt;
&lt;p&gt;DYNAMICRESOLUTION&lt;/p&gt;
&lt;p&gt;RMTHOST 192.168.10.100, MGRPORT 7809&lt;/p&gt;
&lt;p&gt;RMTTRAIL ./dirdat/rt&lt;/p&gt;
&lt;p&gt;DISCARDFILE ./dirrpt/deliecs.dsc, APPEND, MEGABYTES 1024&lt;/p&gt;
&lt;p&gt;DISCARDROLLOVER AT 6:00&lt;/p&gt;
&lt;p&gt;REPORTCOUNT EVERY 1 MINUTES, RATE&lt;/p&gt;
&lt;p&gt;REPORT AT  0:00&lt;/p&gt;
&lt;p&gt;REPORT AT  1:00&lt;/p&gt;
&lt;p&gt;REPORT AT  2:00&lt;/p&gt;
&lt;p&gt;REPORT AT  3:00&lt;/p&gt;
&lt;p&gt;&amp;hellip;&lt;/p&gt;
&lt;p&gt;REPORT AT 22:00&lt;/p&gt;
&lt;p&gt;REPORT AT 23:00&lt;/p&gt;
&lt;p&gt;REPORTROLLOVER AT 00:00&lt;/p&gt;
&lt;p&gt;STATOPTIONS RESETREPORTSTATS&lt;/p&gt;
&lt;p&gt;TABLE ECS.*;     &lt;/p&gt;
&lt;p&gt;10.启动抽取进程&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp431-or as goldengate@ecsdb) 20&amp;gt; start extecs&lt;/p&gt;
&lt;p&gt;Sending START request to MANAGER &amp;hellip;&lt;/p&gt;
&lt;p&gt;EXTRACT EXTECS starting&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp431-or as goldengate@ecsdb) 21&amp;gt; info all&lt;/p&gt;
&lt;p&gt;Program     Status      Group       Lag at Chkpt  Time Since Chkpt&lt;/p&gt;
&lt;p&gt;MANAGER     RUNNING                                           &lt;/p&gt;
&lt;p&gt;EXTRACT     STOPPED     DELIECS     00:00:00      00:06:06    &lt;/p&gt;
&lt;p&gt;EXTRACT     RUNNING     EXTECS      00:00:00      00:00:01    &lt;/p&gt;
&lt;p&gt;11.配置目标端ogg软件&lt;/p&gt;
&lt;p&gt;一、上传ogg软件并解压&lt;/p&gt;
&lt;p&gt;二、配置ogg软件的环境变量&lt;/p&gt;
&lt;p&gt;[pgsql@szgtsp428-or ~]$ vi .bash_profile&lt;/p&gt;

&lt;h2 class="relative group"&gt;.bash_profile
 &lt;div id="bash_profile" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#bash_profile" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h2 class="relative group"&gt;Get the aliases and functions
 &lt;div id="get-the-aliases-and-functions" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#get-the-aliases-and-functions" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;if [ -f ~/.bashrc ]; then&lt;/p&gt;
&lt;p&gt;        . ~/.bashrc&lt;/p&gt;
&lt;p&gt;fi&lt;/p&gt;

&lt;h2 class="relative group"&gt;User specific environment and startup programs
 &lt;div id="user-specific-environment-and-startup-programs" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#user-specific-environment-and-startup-programs" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;PATH=$PATH:$HOME/bin&lt;/p&gt;
&lt;p&gt;export PATH&lt;/p&gt;
&lt;p&gt;export PGHOME=/usr/local/pgsql&lt;/p&gt;
&lt;p&gt;export PGDATA=/data/pgsql&lt;/p&gt;
&lt;p&gt;export OGG_HOME=/data/ogg&lt;/p&gt;
&lt;p&gt;export PATH=$PATH:$PGHOME/bin:$OGG_HOME&lt;/p&gt;
&lt;p&gt;LD_LIBRARY_PATH=$PGHOME/lib&lt;/p&gt;
&lt;p&gt;LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib:$OGG_HOME/lib&lt;/p&gt;
&lt;p&gt;export LD_LIBRARY_PATH&lt;/p&gt;
&lt;p&gt;export ODBCINI=/home/pgsql/odbc.ini&lt;/p&gt;
&lt;p&gt;export DD_ODBC_HOME=/data/ogg&lt;/p&gt;
&lt;p&gt;[pgsql@szgtsp428-or ~]$ ggsci&lt;/p&gt;
&lt;p&gt;Oracle GoldenGate Command Interpreter for PostgreSQL&lt;/p&gt;
&lt;p&gt;Version 19.1.0.0.200714 OGGCORE_19.1.0.0.0OGGBP_PLATFORMS_200628.2141&lt;/p&gt;
&lt;p&gt;Linux, x64, 64bit (optimized), PostgreSQL on Jun 29 2020 03:59:15&lt;/p&gt;
&lt;p&gt;Operating system character set identified as UTF-8.&lt;/p&gt;
&lt;p&gt;Copyright (C) 1995, 2019, Oracle and/or its affiliates. All rights reserved.&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp428-or) 1&amp;gt;&lt;/p&gt;
&lt;p&gt;12.目标端创建库及表&lt;/p&gt;
&lt;p&gt;ecsdb=# \l&lt;/p&gt;
&lt;p&gt;                                List of databases&lt;/p&gt;
&lt;p&gt;   Name    |  Owner   | Encoding |   Collate   |    Ctype    | Access privileges &lt;/p&gt;
&lt;p&gt;&amp;mdash;&amp;mdash;&amp;mdash;&amp;ndash;+&amp;mdash;&amp;mdash;&amp;mdash;-+&amp;mdash;&amp;mdash;&amp;mdash;-+&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;-+&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;-+&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;-&lt;/p&gt;
&lt;p&gt; ecsdb     | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | &lt;/p&gt;
&lt;p&gt; postgres  | pgsql    | UTF8     | en_US.UTF-8 | en_US.UTF-8 | &lt;/p&gt;
&lt;p&gt; template0 | pgsql    | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/pgsql         +&lt;/p&gt;
&lt;p&gt;           |          |          |             |             | pgsql=CTc/pgsql&lt;/p&gt;
&lt;p&gt; template1 | pgsql    | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/pgsql         +&lt;/p&gt;
&lt;p&gt;           |          |          |             |             | pgsql=CTc/pgsql&lt;/p&gt;
&lt;p&gt;(4 rows)&lt;/p&gt;
&lt;p&gt;ecsdb=# \d&lt;/p&gt;
&lt;p&gt;            List of relations&lt;/p&gt;
&lt;p&gt; Schema |     Name     | Type  |  Owner   &lt;/p&gt;
&lt;p&gt;&amp;mdash;&amp;mdash;&amp;ndash;+&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;ndash;+&amp;mdash;&amp;mdash;-+&amp;mdash;&amp;mdash;&amp;mdash;-&lt;/p&gt;
&lt;p&gt; public | student_info | table | postgres&lt;/p&gt;
&lt;p&gt;(1 row)&lt;/p&gt;
&lt;p&gt;ecsdb=# select * from student_info;&lt;/p&gt;
&lt;p&gt; id | name | address &lt;/p&gt;
&lt;p&gt;&amp;mdash;-+&amp;mdash;&amp;mdash;+&amp;mdash;&amp;mdash;&amp;mdash;&lt;/p&gt;
&lt;p&gt;  1 | 张三 | 广州&lt;/p&gt;
&lt;p&gt;  2 | 李四 | 深圳&lt;/p&gt;
&lt;p&gt;  3 | 王五 | 上海&lt;/p&gt;
&lt;p&gt;  4 | 赵六 | 北京&lt;/p&gt;
&lt;p&gt;  5 | 孙七 | 武汉&lt;/p&gt;
&lt;p&gt;  6 | 阿大 | 成都&lt;/p&gt;
&lt;p&gt;  7 | 阿二 | 南京&lt;/p&gt;
&lt;p&gt;(7 rows)&lt;/p&gt;
&lt;p&gt;13.配置目标端管理进程并启动mgr&lt;/p&gt;
&lt;p&gt;[pgsql@szgtsp428-or ogg]$ ggsci&lt;/p&gt;
&lt;p&gt;Oracle GoldenGate Command Interpreter for PostgreSQL&lt;/p&gt;
&lt;p&gt;Version 19.1.0.0.200714 OGGCORE_19.1.0.0.0OGGBP_PLATFORMS_200628.2141&lt;/p&gt;
&lt;p&gt;Linux, x64, 64bit (optimized), PostgreSQL on Jun 29 2020 03:59:15&lt;/p&gt;
&lt;p&gt;Operating system character set identified as UTF-8.&lt;/p&gt;
&lt;p&gt;Copyright (C) 1995, 2019, Oracle and/or its affiliates. All rights reserved.&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp428-or) 1&amp;gt; info all&lt;/p&gt;
&lt;p&gt;Program     Status      Group       Lag at Chkpt  Time Since Chkpt&lt;/p&gt;
&lt;p&gt;MANAGER     STOPPED                                           &lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp428-or) 2&amp;gt; create subdirs&lt;/p&gt;
&lt;p&gt;Creating subdirectories under current directory /data/ogg&lt;/p&gt;
&lt;p&gt;Parameter file                 /data/ogg/dirprm: created.&lt;/p&gt;
&lt;p&gt;Report file                    /data/ogg/dirrpt: created.&lt;/p&gt;
&lt;p&gt;Checkpoint file                /data/ogg/dirchk: created.&lt;/p&gt;
&lt;p&gt;Process status files           /data/ogg/dirpcs: created.&lt;/p&gt;
&lt;p&gt;SQL script files               /data/ogg/dirsql: created.&lt;/p&gt;
&lt;p&gt;Database definitions files     /data/ogg/dirdef: created.&lt;/p&gt;
&lt;p&gt;Extract data files             /data/ogg/dirdat: created.&lt;/p&gt;
&lt;p&gt;Temporary files                /data/ogg/dirtmp: created.&lt;/p&gt;
&lt;p&gt;Credential store files         /data/ogg/dircrd: created.&lt;/p&gt;
&lt;p&gt;Masterkey wallet files         /data/ogg/dirwlt: created.&lt;/p&gt;
&lt;p&gt;Dump files                     /data/ogg/dirdmp: created.&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp428-or) 3&amp;gt; edit param mgr&lt;/p&gt;
&lt;p&gt;port 7809&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp428-or) 4&amp;gt; info all&lt;/p&gt;
&lt;p&gt;Program     Status      Group       Lag at Chkpt  Time Since Chkpt&lt;/p&gt;
&lt;p&gt;MANAGER     STOPPED                                           &lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp428-or) 5&amp;gt; start mgr&lt;/p&gt;
&lt;p&gt;Manager started.&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp428-or) 7&amp;gt; info all&lt;/p&gt;
&lt;p&gt;Program     Status      Group       Lag at Chkpt  Time Since Chkpt&lt;/p&gt;
&lt;p&gt;MANAGER     RUNNING                                           &lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp428-or) 8&amp;gt;&lt;/p&gt;
&lt;p&gt;这个时候在源端启动投递进程  deliecs&lt;/p&gt;
&lt;p&gt;oracle@szgtsp431-or@ecsdb&amp;gt;ggsci&lt;/p&gt;
&lt;p&gt;Oracle GoldenGate Command Interpreter for Oracle&lt;/p&gt;
&lt;p&gt;Version 19.1.0.0.4 OGGCORE_19.1.0.0.0_PLATFORMS_191017.1054_FBO&lt;/p&gt;
&lt;p&gt;Linux, x64, 64bit (optimized), Oracle 11g on Oct 17 2019 23:13:12&lt;/p&gt;
&lt;p&gt;Operating system character set identified as US-ASCII.&lt;/p&gt;
&lt;p&gt;Copyright (C) 1995, 2019, Oracle and/or its affiliates. All rights reserved.&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp431-or) 1&amp;gt; info all&lt;/p&gt;
&lt;p&gt;Program     Status      Group       Lag at Chkpt  Time Since Chkpt&lt;/p&gt;
&lt;p&gt;MANAGER     RUNNING                                           &lt;/p&gt;
&lt;p&gt;EXTRACT     ABENDED     DELIECS     00:00:00      01:06:41    &lt;/p&gt;
&lt;p&gt;EXTRACT     RUNNING     EXTECS      00:00:00      00:00:07    &lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp431-or) 2&amp;gt; start deliecs&lt;/p&gt;
&lt;p&gt;Sending START request to MANAGER &amp;hellip;&lt;/p&gt;
&lt;p&gt;EXTRACT DELIECS starting&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp431-or) 3&amp;gt; info all&lt;/p&gt;
&lt;p&gt;Program     Status      Group       Lag at Chkpt  Time Since Chkpt&lt;/p&gt;
&lt;p&gt;MANAGER     RUNNING                                           &lt;/p&gt;
&lt;p&gt;EXTRACT     RUNNING     DELIECS     00:00:00      01:06:55    &lt;/p&gt;
&lt;p&gt;EXTRACT     RUNNING     EXTECS      00:00:00      00:00:01      &lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp431-or) 4&amp;gt; info all&lt;/p&gt;
&lt;p&gt;Program     Status      Group       Lag at Chkpt  Time Since Chkpt&lt;/p&gt;
&lt;p&gt;MANAGER     RUNNING                                           &lt;/p&gt;
&lt;p&gt;EXTRACT     RUNNING     DELIECS     00:00:00      00:00:00    &lt;/p&gt;
&lt;p&gt;EXTRACT     RUNNING     EXTECS      00:00:00      00:00:05    &lt;/p&gt;
&lt;p&gt;14.目标端pgsql的参数调整&lt;/p&gt;
&lt;p&gt;[pgsql@szgtsp428-or pgsql]$ vi /data/pgsql/postgresql.conf&lt;/p&gt;
&lt;p&gt;wal_level = logical           #minimal, replica, or logical&lt;/p&gt;
&lt;p&gt;max_replication_slots = 10    #max number of replication slots&lt;/p&gt;
&lt;p&gt;max_wal_sender = 10           #maximum number of wal sender processes&lt;/p&gt;
&lt;p&gt;wal_receiver_status_interval=10s  #optional, keep the system default&lt;/p&gt;
&lt;p&gt;wal_sender_timeout  = 60s          #optional, keep the system default&lt;/p&gt;
&lt;p&gt;track_commit_timestamp=off        #optional, keep the system default&lt;/p&gt;
&lt;p&gt;调整参数后重启pgsql&lt;/p&gt;
&lt;p&gt;[pgsql@szgtsp428-or pgsql]$ pg_ctl status -D /data/pgsql/ -l /data/pgsql/logfile&lt;/p&gt;
&lt;p&gt;pg_ctl: server is running (PID: 2370)&lt;/p&gt;
&lt;p&gt;/usr/local/pgsql/bin/postgres &amp;ldquo;-D&amp;rdquo; &amp;ldquo;/data/pgsql&amp;rdquo;&lt;/p&gt;
&lt;p&gt;[pgsql@szgtsp428-or pgsql]$ pg_ctl stop -D /data/pgsql/ -l /data/pgsql/logfile&lt;/p&gt;
&lt;p&gt;waiting for server to shut down&amp;hellip;. done&lt;/p&gt;
&lt;p&gt;server stopped&lt;/p&gt;
&lt;p&gt;[pgsql@szgtsp428-or pgsql]$ pg_ctl start -D /data/pgsql/&lt;/p&gt;
&lt;p&gt;waiting for server to start&amp;hellip;.2020-08-14 11:00:45.360 CST [2817] LOG:  listening on IPv4 address &amp;ldquo;0.0.0.0&amp;rdquo;, port 5432&lt;/p&gt;
&lt;p&gt;2020-08-14 11:00:45.361 CST [2817] LOG:  listening on IPv6 address &amp;ldquo;::&amp;rdquo;, port 5432&lt;/p&gt;
&lt;p&gt;2020-08-14 11:00:45.364 CST [2817] LOG:  listening on Unix socket &amp;ldquo;/tmp/.s.PGSQL.5432&amp;rdquo;&lt;/p&gt;
&lt;p&gt;2020-08-14 11:00:45.375 CST [2818] LOG:  database system was shut down at 2020-08-14 10:50:10 CST&lt;/p&gt;
&lt;p&gt;2020-08-14 11:00:45.378 CST [2817] LOG:  database system is ready to accept connections&lt;/p&gt;
&lt;p&gt; done&lt;/p&gt;
&lt;p&gt;server started&lt;/p&gt;
&lt;p&gt;15.数据源配置&lt;/p&gt;
&lt;p&gt;vi odbc.ini&lt;/p&gt;
&lt;p&gt;[pgsql@szgtsp428-or ~]$ vi /home/pgsql/odbc.ini&lt;/p&gt;
&lt;p&gt;[ODBC Data Sources]&lt;/p&gt;
&lt;p&gt;PGDSN=DataDirect 10.12 PostgreSQL Wire Protocol&lt;/p&gt;
&lt;p&gt;postgres=DataDirect 10.12 PostgreSQL Wire Protocol&lt;/p&gt;
&lt;p&gt;scott=DataDirect 10.12 PostgreSQL Wire Protocol&lt;/p&gt;
&lt;p&gt;[ODBC]&lt;/p&gt;
&lt;p&gt;IANAAppCodePage=4&lt;/p&gt;
&lt;p&gt;InstallDir=/data/ogg&lt;/p&gt;
&lt;p&gt;[PGDSN]&lt;/p&gt;
&lt;p&gt;Driver=/data/ogg/lib/GGpsql25.so&lt;/p&gt;
&lt;p&gt;Description=DataDirect 10.12 PostgreSQL Wire Protocol&lt;/p&gt;
&lt;p&gt;Database=ecsdb&lt;/p&gt;
&lt;p&gt;HostName=127.0.0.1&lt;/p&gt;
&lt;p&gt;PortNumber=5432&lt;/p&gt;
&lt;p&gt;LogonID=postgres&lt;/p&gt;
&lt;p&gt;Password=123456&lt;/p&gt;
&lt;p&gt;16.连接测试&lt;/p&gt;
&lt;p&gt;[pgsql@szgtsp428-or ~]$ cd /data/ogg&lt;/p&gt;
&lt;p&gt;[pgsql@szgtsp428-or ogg]$ ggsci&lt;/p&gt;
&lt;p&gt;Oracle GoldenGate Command Interpreter for PostgreSQL&lt;/p&gt;
&lt;p&gt;Version 19.1.0.0.200714 OGGCORE_19.1.0.0.0OGGBP_PLATFORMS_200628.2141&lt;/p&gt;
&lt;p&gt;Linux, x64, 64bit (optimized), PostgreSQL on Jun 29 2020 03:59:15&lt;/p&gt;
&lt;p&gt;Operating system character set identified as UTF-8.&lt;/p&gt;
&lt;p&gt;Copyright (C) 1995, 2019, Oracle and/or its affiliates. All rights reserved.&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp428-or) 1&amp;gt; info all&lt;/p&gt;
&lt;p&gt;Program     Status      Group       Lag at Chkpt  Time Since Chkpt&lt;/p&gt;
&lt;p&gt;MANAGER     RUNNING                                           &lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp428-or) 2&amp;gt; dblogin sourcedb pgdsn userid postgres, password postgres&lt;/p&gt;
&lt;p&gt;2020-08-14 11:35:01  INFO    OGG-03036  Database character set identified as UTF-8. Locale: en_US.UTF-8.&lt;/p&gt;
&lt;p&gt;2020-08-14 11:35:01  INFO    OGG-03037  Session character set identified as UTF-8.&lt;/p&gt;
&lt;p&gt;Successfully logged into database.&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp428-or as postgres@pgdsn) 3&amp;gt;&lt;/p&gt;
&lt;p&gt;17.目标端配置复制进程并启动&lt;/p&gt;
&lt;p&gt;添加checkpoint table&lt;/p&gt;
&lt;p&gt;[pgsql@szgtsp428-or ogg]$ ggsci&lt;/p&gt;
&lt;p&gt;Oracle GoldenGate Command Interpreter for PostgreSQL&lt;/p&gt;
&lt;p&gt;Version 19.1.0.0.200714 OGGCORE_19.1.0.0.0OGGBP_PLATFORMS_200628.2141&lt;/p&gt;
&lt;p&gt;Linux, x64, 64bit (optimized), PostgreSQL on Jun 29 2020 03:59:15&lt;/p&gt;
&lt;p&gt;Operating system character set identified as UTF-8.&lt;/p&gt;
&lt;p&gt;Copyright (C) 1995, 2019, Oracle and/or its affiliates. All rights reserved.&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp428-or) 1&amp;gt; dblogin sourcedb pgdsn userid postgres, password 123456&lt;/p&gt;
&lt;p&gt;2020-08-14 15:22:52  INFO    OGG-03036  Database character set identified as UTF-8. Locale: en_US.UTF-8.&lt;/p&gt;
&lt;p&gt;2020-08-14 15:22:52  INFO    OGG-03037  Session character set identified as UTF-8.&lt;/p&gt;
&lt;p&gt;Successfully logged into database.&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp428-or as postgres@pgdsn) 2&amp;gt; add checkpointtable public.chkt&lt;/p&gt;
&lt;p&gt;Successfully created checkpoint table public.chkt.&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp428-or as postgres@pgdsn) 4&amp;gt; list table public.*&lt;/p&gt;
&lt;p&gt;public.chkt&lt;/p&gt;
&lt;p&gt;public.chkt_lox&lt;/p&gt;
&lt;p&gt;public.student_info&lt;/p&gt;
&lt;p&gt;public.test&lt;/p&gt;
&lt;p&gt;Found 4 tables matching list criteria.&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp428-or as postgres@pgdsn) 34&amp;gt; edit param repl&lt;/p&gt;
&lt;p&gt;REPLICAT repl&lt;/p&gt;
&lt;p&gt;SOURCEDEFS ./dirdef/student_info.def&lt;/p&gt;
&lt;p&gt;SETENV (PGCLIENTENCODING = &amp;ldquo;UTF8&amp;rdquo;)&lt;/p&gt;
&lt;p&gt;SETENV (ODBCINI=&amp;quot;/home/pgsql/odbc.ini&amp;quot;)&lt;/p&gt;
&lt;p&gt;SETENV (NLS_LANG=&amp;ldquo;AMERICAN_AMERICA.AL32UTF8&amp;rdquo;)&lt;/p&gt;
&lt;p&gt;targetdb pgdsn userid postgres, password 123456&lt;/p&gt;
&lt;p&gt;DISCARDFILE ./dirrpt/repl.dsc, purge&lt;/p&gt;
&lt;p&gt;MAP ecs.student_info, TARGET public.student_info;&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp428-or as postgres@pgdsn) 36&amp;gt; add replicat repl,exttrail ./dirdat/rt,checkpointtable public.chkt&lt;/p&gt;
&lt;p&gt;REPLICAT added.&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp428-or as postgres@pgdsn) 38&amp;gt; start repl&lt;/p&gt;
&lt;p&gt;Sending START request to MANAGER &amp;hellip;&lt;/p&gt;
&lt;p&gt;REPLICAT REPL starting&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp428-or as postgres@pgdsn) 55&amp;gt; info all&lt;/p&gt;
&lt;p&gt;Program     Status      Group       Lag at Chkpt  Time Since Chkpt&lt;/p&gt;
&lt;p&gt;MANAGER     RUNNING                                           &lt;/p&gt;
&lt;p&gt;REPLICAT    RUNNING     REPL        00:00:00      00:00:08&lt;/p&gt;
&lt;p&gt;18.测试验证&lt;/p&gt;
&lt;p&gt;首先在目标端创建跟源端student_info一致的表结构&lt;/p&gt;
&lt;p&gt;ecsdb=# create table student_info (id int primary key,name varchar(100),address varchar(100));&lt;/p&gt;
&lt;p&gt;CREATE TABLE&lt;/p&gt;
&lt;p&gt;然后进行数据初始化:&lt;/p&gt;
&lt;p&gt;在源库配置extinit进程&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp431-or as goldengate@ecsdb) 17&amp;gt; edit param extinit&lt;/p&gt;
&lt;p&gt;EXTRACT extinit&lt;/p&gt;
&lt;p&gt;userid goldengate, PASSWORD 123456&lt;/p&gt;
&lt;p&gt;REPORTCOUNT EVERY 30 MINUTES, RATE&lt;/p&gt;
&lt;p&gt;DISCARDFILE ./dirrpt/extinit.dsc, APPEND, MEGABYTES 1024&lt;/p&gt;
&lt;p&gt;RMTHOST 192.168.10.100,MGRPORT 7809, compress&lt;/p&gt;
&lt;p&gt;RMTTASK replicat,GROUP replinit&lt;/p&gt;
&lt;p&gt;TABLE ecs.student_info;&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp431-or as goldengate@ecsdb) 18&amp;gt; ADD EXTRACT extinit, SOURCEISTABLE&lt;/p&gt;
&lt;p&gt;EXTRACT added.&lt;/p&gt;
&lt;p&gt;在目标端配置replinit进程&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp428-or as postgres@pgdsn) 28&amp;gt; edit param replinit&lt;/p&gt;
&lt;p&gt;REPLICAT replinit&lt;/p&gt;
&lt;p&gt;targetDB pgdsn, USERID postgres, PASSWORD 123456&lt;/p&gt;
&lt;p&gt;discardfile ./dirrpt/replinit.dsc, PURGE&lt;/p&gt;
&lt;p&gt;SOURCEDEFS ./dirdef/student_info.def&lt;/p&gt;
&lt;p&gt;Map ecs.student_info,target public.student_info;&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp428-or as postgres@pgdsn) 29&amp;gt;add replicat repinit, SPECIALRUN&lt;/p&gt;
&lt;p&gt;REPLICAT added.&lt;/p&gt;
&lt;p&gt;开启oracle到pg的数据初始化:&lt;/p&gt;
&lt;p&gt;GGSCI (szgtsp431-or as goldengate@ecsdb) 9&amp;gt; start extinit&lt;/p&gt;
&lt;p&gt;Sending START request to MANAGER &amp;hellip;&lt;/p&gt;
&lt;p&gt;EXTRACT EXTINIT starting&lt;/p&gt;
&lt;p&gt;目标端：(查看初始化行数)&lt;/p&gt;
&lt;p&gt;View report replicat&lt;/p&gt;
&lt;p&gt;查看两边的数据:&lt;/p&gt;
&lt;p&gt;源：&lt;/p&gt;
&lt;p&gt;SQL&amp;gt; set lines 200 pages 200;&lt;/p&gt;
&lt;p&gt;SQL&amp;gt; col name for a10;&lt;/p&gt;
&lt;p&gt;SQL&amp;gt; col address for a10;&lt;/p&gt;
&lt;p&gt;SQL&amp;gt; select * from student_info;&lt;/p&gt;
&lt;p&gt;        ID NAME       ADDRESS&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;         1 张三       广州&lt;/p&gt;
&lt;p&gt;         2 李四       深圳&lt;/p&gt;
&lt;p&gt;         3 王五       上海&lt;/p&gt;
&lt;p&gt;         4 赵六       北京&lt;/p&gt;
&lt;p&gt;         5 孙七       武汉&lt;/p&gt;
&lt;p&gt;         6 阿大       成都&lt;/p&gt;
&lt;p&gt;         7 阿二       南京&lt;/p&gt;
&lt;p&gt;         8 阿三       北京&lt;/p&gt;
&lt;p&gt;8 rows selected.&lt;/p&gt;
&lt;p&gt;目标:&lt;/p&gt;
&lt;p&gt;ecsdb=# select * from student_info;&lt;/p&gt;
&lt;p&gt; id | name | address &lt;/p&gt;
&lt;p&gt;&amp;mdash;-+&amp;mdash;&amp;mdash;+&amp;mdash;&amp;mdash;&amp;mdash;&lt;/p&gt;
&lt;p&gt;  1 | 张三 | 广州&lt;/p&gt;
&lt;p&gt;  2 | 李四 | 深圳&lt;/p&gt;
&lt;p&gt;  3 | 王五 | 上海&lt;/p&gt;
&lt;p&gt;  4 | 赵六 | 北京&lt;/p&gt;
&lt;p&gt;  5 | 孙七 | 武汉&lt;/p&gt;
&lt;p&gt;  6 | 阿大 | 成都&lt;/p&gt;
&lt;p&gt;  7 | 阿二 | 南京&lt;/p&gt;
&lt;p&gt;  8 | 阿三 | 北京&lt;/p&gt;
&lt;p&gt;(8 rows)&lt;/p&gt;
&lt;p&gt;往源端插入数据:&lt;/p&gt;
&lt;p&gt;SQL&amp;gt; insert into ecs.student_info values (10,&amp;lsquo;aa&amp;rsquo;,&amp;lsquo;bb&amp;rsquo;);&lt;/p&gt;
&lt;p&gt;1 row created.&lt;/p&gt;
&lt;p&gt;SQL&amp;gt; commit;&lt;/p&gt;
&lt;p&gt;Commit complete.&lt;/p&gt;
&lt;p&gt;SQL&amp;gt; select * from student_info;&lt;/p&gt;
&lt;p&gt;        ID NAME       ADDRESS&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;         1 张三       广州&lt;/p&gt;
&lt;p&gt;         2 李四       深圳&lt;/p&gt;
&lt;p&gt;         3 王五       上海&lt;/p&gt;
&lt;p&gt;         4 赵六       北京&lt;/p&gt;
&lt;p&gt;         5 孙七       武汉&lt;/p&gt;
&lt;p&gt;         6 阿大       成都&lt;/p&gt;
&lt;p&gt;         7 阿二       南京&lt;/p&gt;
&lt;p&gt;         8 阿三       北京&lt;/p&gt;
&lt;p&gt;        10 aa         bb&lt;/p&gt;
&lt;p&gt;9 rows selected.&lt;/p&gt;
&lt;p&gt;查看目标端:&lt;/p&gt;
&lt;p&gt;ecsdb=# select * from student_info;&lt;/p&gt;
&lt;p&gt; id | name | address &lt;/p&gt;
&lt;p&gt;&amp;mdash;-+&amp;mdash;&amp;mdash;+&amp;mdash;&amp;mdash;&amp;mdash;&lt;/p&gt;
&lt;p&gt;  1 | 张三 | 广州&lt;/p&gt;
&lt;p&gt;  2 | 李四 | 深圳&lt;/p&gt;
&lt;p&gt;  3 | 王五 | 上海&lt;/p&gt;
&lt;p&gt;  4 | 赵六 | 北京&lt;/p&gt;
&lt;p&gt;  5 | 孙七 | 武汉&lt;/p&gt;
&lt;p&gt;  6 | 阿大 | 成都&lt;/p&gt;
&lt;p&gt;  7 | 阿二 | 南京&lt;/p&gt;
&lt;p&gt;  8 | 阿三 | 北京&lt;/p&gt;
&lt;p&gt; 10 | aa   | bb&lt;/p&gt;
&lt;p&gt;(9 rows)&lt;/p&gt;
&lt;p&gt;数据已经同步OK了。&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;</content:encoded></item><item><title>ogg搭建pg-oracle同步——实操步骤</title><link>https://lastdba.com/2024/08/13/ogg%E6%90%AD%E5%BB%BApg-oracle%E5%90%8C%E6%AD%A5%E5%AE%9E%E6%93%8D%E6%AD%A5%E9%AA%A4/</link><pubDate>Tue, 13 Aug 2024 00:00:00 +0000</pubDate><guid>https://lastdba.com/2024/08/13/ogg%E6%90%AD%E5%BB%BApg-oracle%E5%90%8C%E6%AD%A5%E5%AE%9E%E6%93%8D%E6%AD%A5%E9%AA%A4/</guid><description>&lt;p&gt;ogg软件版本:(19.1.0.0.4)
oracle版本：11.2.0.4
pg版本：pg10
ogg下载地址：&lt;a href="https://www.oracle.com/technetwork/middleware/goldengate/downloads/index.html" target="_blank" rel="noreferrer"&gt;https://www.oracle.com/technetwork/middleware/goldengate/downloads/index.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;glibc问题处理：&lt;a href="https://www.cnblogs.com/hxlasky/p/16779047.html" target="_blank" rel="noreferrer"&gt;https://www.cnblogs.com/hxlasky/p/16779047.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://lastdba.com/img/csdn/6d5467d7acac.png" alt="img" /&gt;&lt;/p&gt;

&lt;h4 class="relative group"&gt;1.源端创建库及表
 &lt;div id="1源端创建库及表" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1%e6%ba%90%e7%ab%af%e5%88%9b%e5%bb%ba%e5%ba%93%e5%8f%8a%e8%a1%a8" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[root&lt;span style="color:#f92672"&gt;@&lt;/span&gt;node2 &lt;span style="color:#f92672"&gt;~&lt;/span&gt;]&lt;span style="color:#f92672"&gt;#&lt;/span&gt; su &lt;span style="color:#f92672"&gt;-&lt;/span&gt; postgres
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;Last&lt;/span&gt; login: Tue Jul &lt;span style="color:#ae81ff"&gt;21&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;21&lt;/span&gt;:&lt;span style="color:#ae81ff"&gt;08&lt;/span&gt;:&lt;span style="color:#ae81ff"&gt;52&lt;/span&gt; CST &lt;span style="color:#ae81ff"&gt;2020&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;on&lt;/span&gt; pts&lt;span style="color:#f92672"&gt;/&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[postgres&lt;span style="color:#f92672"&gt;@&lt;/span&gt;node2 &lt;span style="color:#f92672"&gt;~&lt;/span&gt;]&lt;span style="color:#960050;background-color:#1e0010"&gt;$&lt;/span&gt; pg_ctl &lt;span style="color:#f92672"&gt;-&lt;/span&gt;D &lt;span style="color:#f92672"&gt;/&lt;/span&gt;opt&lt;span style="color:#f92672"&gt;/&lt;/span&gt;pgsql_data &lt;span style="color:#f92672"&gt;-&lt;/span&gt;l logfile &lt;span style="color:#66d9ef"&gt;start&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;waiting &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; server &lt;span style="color:#66d9ef"&gt;to&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;start&lt;/span&gt;.... done
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;server started
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;postgres&lt;span style="color:#f92672"&gt;=#&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;create&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;database&lt;/span&gt; test
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;postgres&lt;span style="color:#f92672"&gt;=#&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;\&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;c&lt;/span&gt; lzldb
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;postgres&lt;span style="color:#f92672"&gt;=#&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;create&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;table&lt;/span&gt; tab1(id int &lt;span style="color:#66d9ef"&gt;primary&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;key&lt;/span&gt;,name varchar(&lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;2.目标端创建库及表
 &lt;div id="2目标端创建库及表" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#2%e7%9b%ae%e6%a0%87%e7%ab%af%e5%88%9b%e5%bb%ba%e5%ba%93%e5%8f%8a%e8%a1%a8" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sqlplus &lt;span style="color:#f92672"&gt;/&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; sysdba
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;SQL&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;create&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;table&lt;/span&gt; ORALZL.tab1(id number &lt;span style="color:#66d9ef"&gt;primary&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;key&lt;/span&gt;,name varchar2(&lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;3.解压安装ogg for postgresql
 &lt;div id="3解压安装ogg-for-postgresql" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#3%e8%a7%a3%e5%8e%8b%e5%ae%89%e8%a3%85ogg-for-postgresql" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--跟ogg for oracle不同，ogg for pg只需要解压。for o需要跑runinstaller
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[postgres@node1 ~]$ id postgres
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;uid=54323(postgres) gid=54330(postgres) groups=54330(postgres)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[postgres@node1 ~]$ exit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;logout
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[root@node1 ~]# mkdir /ogg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[root@node1 ~]# chown -R postgres /ogg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[root@node1 ~]# chmod -R 755 /ogg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[root@node1 ~]#
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[root@node1 soft]# ls -l
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;total 240744
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;-rw-r--r--. 1 root root 87028695 Jul 22 02:51 19100200714_ggs_Linux_x64_PostgreSQL_64bit.zip
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[root@node1 soft]# chmod 777 19100200714_ggs_Linux_x64_PostgreSQL_64bit.zip
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[root@node1 soft]# unzip 19100200714_ggs_Linux_x64_PostgreSQL_64bit.zip
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Archive: 19100200714_ggs_Linux_x64_PostgreSQL_64bit.zip
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; inflating: ggs_Linux_x64_PostgreSQL_64bit.tar 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; inflating: OGG-19.1.0.0-README.txt 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; inflating: release-notes-oracle-goldengate_19.1.0.200714.pdf 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[root@node1 soft]# chmod 777 ggs_Linux_x64_PostgreSQL_64bit.tar
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[root@node1 soft]# su - postgres
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[postgres@node1 ~]$ cd /soft
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[postgres@node1 soft]$ tar -xf ggs_Linux_x64_PostgreSQL_64bit.tar -C /ogg&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;4.pg用户环境变量配置
 &lt;div id="4pg用户环境变量配置" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#4pg%e7%94%a8%e6%88%b7%e7%8e%af%e5%a2%83%e5%8f%98%e9%87%8f%e9%85%8d%e7%bd%ae" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;pg源端&lt;/p&gt;</description><content:encoded>&lt;p&gt;ogg软件版本:(19.1.0.0.4)
oracle版本：11.2.0.4
pg版本：pg10
ogg下载地址：&lt;a href="https://www.oracle.com/technetwork/middleware/goldengate/downloads/index.html" target="_blank" rel="noreferrer"&gt;https://www.oracle.com/technetwork/middleware/goldengate/downloads/index.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;glibc问题处理：&lt;a href="https://www.cnblogs.com/hxlasky/p/16779047.html" target="_blank" rel="noreferrer"&gt;https://www.cnblogs.com/hxlasky/p/16779047.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://lastdba.com/img/csdn/6d5467d7acac.png" alt="img" /&gt;&lt;/p&gt;

&lt;h4 class="relative group"&gt;1.源端创建库及表
 &lt;div id="1源端创建库及表" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1%e6%ba%90%e7%ab%af%e5%88%9b%e5%bb%ba%e5%ba%93%e5%8f%8a%e8%a1%a8" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[root&lt;span style="color:#f92672"&gt;@&lt;/span&gt;node2 &lt;span style="color:#f92672"&gt;~&lt;/span&gt;]&lt;span style="color:#f92672"&gt;#&lt;/span&gt; su &lt;span style="color:#f92672"&gt;-&lt;/span&gt; postgres
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;Last&lt;/span&gt; login: Tue Jul &lt;span style="color:#ae81ff"&gt;21&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;21&lt;/span&gt;:&lt;span style="color:#ae81ff"&gt;08&lt;/span&gt;:&lt;span style="color:#ae81ff"&gt;52&lt;/span&gt; CST &lt;span style="color:#ae81ff"&gt;2020&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;on&lt;/span&gt; pts&lt;span style="color:#f92672"&gt;/&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[postgres&lt;span style="color:#f92672"&gt;@&lt;/span&gt;node2 &lt;span style="color:#f92672"&gt;~&lt;/span&gt;]&lt;span style="color:#960050;background-color:#1e0010"&gt;$&lt;/span&gt; pg_ctl &lt;span style="color:#f92672"&gt;-&lt;/span&gt;D &lt;span style="color:#f92672"&gt;/&lt;/span&gt;opt&lt;span style="color:#f92672"&gt;/&lt;/span&gt;pgsql_data &lt;span style="color:#f92672"&gt;-&lt;/span&gt;l logfile &lt;span style="color:#66d9ef"&gt;start&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;waiting &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; server &lt;span style="color:#66d9ef"&gt;to&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;start&lt;/span&gt;.... done
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;server started
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;postgres&lt;span style="color:#f92672"&gt;=#&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;create&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;database&lt;/span&gt; test
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;postgres&lt;span style="color:#f92672"&gt;=#&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;\&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;c&lt;/span&gt; lzldb
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;postgres&lt;span style="color:#f92672"&gt;=#&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;create&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;table&lt;/span&gt; tab1(id int &lt;span style="color:#66d9ef"&gt;primary&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;key&lt;/span&gt;,name varchar(&lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;2.目标端创建库及表
 &lt;div id="2目标端创建库及表" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#2%e7%9b%ae%e6%a0%87%e7%ab%af%e5%88%9b%e5%bb%ba%e5%ba%93%e5%8f%8a%e8%a1%a8" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sqlplus &lt;span style="color:#f92672"&gt;/&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; sysdba
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;SQL&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;create&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;table&lt;/span&gt; ORALZL.tab1(id number &lt;span style="color:#66d9ef"&gt;primary&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;key&lt;/span&gt;,name varchar2(&lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;3.解压安装ogg for postgresql
 &lt;div id="3解压安装ogg-for-postgresql" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#3%e8%a7%a3%e5%8e%8b%e5%ae%89%e8%a3%85ogg-for-postgresql" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--跟ogg for oracle不同，ogg for pg只需要解压。for o需要跑runinstaller
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[postgres@node1 ~]$ id postgres
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;uid=54323(postgres) gid=54330(postgres) groups=54330(postgres)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[postgres@node1 ~]$ exit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;logout
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[root@node1 ~]# mkdir /ogg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[root@node1 ~]# chown -R postgres /ogg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[root@node1 ~]# chmod -R 755 /ogg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[root@node1 ~]#
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[root@node1 soft]# ls -l
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;total 240744
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;-rw-r--r--. 1 root root 87028695 Jul 22 02:51 19100200714_ggs_Linux_x64_PostgreSQL_64bit.zip
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[root@node1 soft]# chmod 777 19100200714_ggs_Linux_x64_PostgreSQL_64bit.zip
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[root@node1 soft]# unzip 19100200714_ggs_Linux_x64_PostgreSQL_64bit.zip
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Archive: 19100200714_ggs_Linux_x64_PostgreSQL_64bit.zip
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; inflating: ggs_Linux_x64_PostgreSQL_64bit.tar 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; inflating: OGG-19.1.0.0-README.txt 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; inflating: release-notes-oracle-goldengate_19.1.0.200714.pdf 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[root@node1 soft]# chmod 777 ggs_Linux_x64_PostgreSQL_64bit.tar
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[root@node1 soft]# su - postgres
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[postgres@node1 ~]$ cd /soft
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[postgres@node1 soft]$ tar -xf ggs_Linux_x64_PostgreSQL_64bit.tar -C /ogg&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;4.pg用户环境变量配置
 &lt;div id="4pg用户环境变量配置" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#4pg%e7%94%a8%e6%88%b7%e7%8e%af%e5%a2%83%e5%8f%98%e9%87%8f%e9%85%8d%e7%bd%ae" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;pg源端&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;postgres@node1 ~&lt;span style="color:#f92672"&gt;]&lt;/span&gt;$ cat .bash_profile
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;## .bash_profile&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;## Get the aliases and functions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt; -f ~/.bashrc &lt;span style="color:#f92672"&gt;]&lt;/span&gt;; &lt;span style="color:#66d9ef"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;. ~/.bashrc
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;## User specific environment and startup programs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;PATH&lt;span style="color:#f92672"&gt;=&lt;/span&gt;$PATH:$HOME/.local/bin:$HOME/bin
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export GGHOME&lt;span style="color:#f92672"&gt;=&lt;/span&gt;/ogg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export PG_DATA&lt;span style="color:#f92672"&gt;=&lt;/span&gt;/opt/pgsql/pgsql/bin
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export PATH&lt;span style="color:#f92672"&gt;=&lt;/span&gt;$PG_DATA:$PATH
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export PG_HOME&lt;span style="color:#f92672"&gt;=&lt;/span&gt;/opt/pgsql/pgsql
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export LD_LIBRARY_PATH&lt;span style="color:#f92672"&gt;=&lt;/span&gt;$PG_HOME/lib:$LD_LIBRARY_PATH:$GGHOME/lib
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export ODBCINI&lt;span style="color:#f92672"&gt;=&lt;/span&gt;/home/postgres/odbc.ini
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export DD_ODBC_HOME&lt;span style="color:#f92672"&gt;=&lt;/span&gt;/ogg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export PATH
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;postgres@node1 ~&lt;span style="color:#f92672"&gt;]&lt;/span&gt;$ source .bash_profile&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;5.配置管理进程
 &lt;div id="5配置管理进程" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#5%e9%85%8d%e7%bd%ae%e7%ae%a1%e7%90%86%e8%bf%9b%e7%a8%8b" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;postgres@node1 ~&lt;span style="color:#f92672"&gt;]&lt;/span&gt;$ cd /ogg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;postgres@node1 ogg&lt;span style="color:#f92672"&gt;]&lt;/span&gt;$ ./ggsci
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Oracle GoldenGate Command Interpreter &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; PostgreSQL
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Version 19.1.0.0.200714 OGGCORE_19.1.0.0.0OGGBP_PLATFORMS_200628.2141
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Linux, x64, 64bit &lt;span style="color:#f92672"&gt;(&lt;/span&gt;optimized&lt;span style="color:#f92672"&gt;)&lt;/span&gt;, PostgreSQL on Jun &lt;span style="color:#ae81ff"&gt;29&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2020&lt;/span&gt; 03:59:15
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Operating system character set identified as UTF-8.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Copyright &lt;span style="color:#f92672"&gt;(&lt;/span&gt;C&lt;span style="color:#f92672"&gt;)&lt;/span&gt; 1995, 2019, Oracle and/or its affiliates. All rights reserved.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;GGSCI &lt;span style="color:#f92672"&gt;(&lt;/span&gt;node1&lt;span style="color:#f92672"&gt;)&lt;/span&gt; 2&amp;gt; info all
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Program Status Group Lag at Chkpt Time Since Chkpt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MANAGER STOPPED 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;GGSCI &lt;span style="color:#f92672"&gt;(&lt;/span&gt;node1&lt;span style="color:#f92672"&gt;)&lt;/span&gt; 3&amp;gt; create subdirs
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Creating subdirectories under current directory /ogg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Parameter file /ogg/dirprm: created.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Report file /ogg/dirrpt: created.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Checkpoint file /ogg/dirchk: created.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Process status files /ogg/dirpcs: created.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;SQL script files /ogg/dirsql: created.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Database definitions files /ogg/dirdef: created.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Extract data files /ogg/dirdat: created.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Temporary files /ogg/dirtmp: created.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Credential store files /ogg/dircrd: created.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Masterkey wallet files /ogg/dirwlt: created.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Dump files /ogg/dirdmp: created.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;GGSCI &lt;span style="color:#f92672"&gt;(&lt;/span&gt;node1&lt;span style="color:#f92672"&gt;)&lt;/span&gt; 4&amp;gt; edit params mgr
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;GGSCI &lt;span style="color:#f92672"&gt;(&lt;/span&gt;node1&lt;span style="color:#f92672"&gt;)&lt;/span&gt; 5&amp;gt; view params mgr
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;port &lt;span style="color:#ae81ff"&gt;7809&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;GGSCI &lt;span style="color:#f92672"&gt;(&lt;/span&gt;node1&lt;span style="color:#f92672"&gt;)&lt;/span&gt; 6&amp;gt; start mgr
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Manager started.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;GGSCI &lt;span style="color:#f92672"&gt;(&lt;/span&gt;node1&lt;span style="color:#f92672"&gt;)&lt;/span&gt; 7&amp;gt; info all
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Program Status Group Lag at Chkpt Time Since Chkpt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MANAGER RUNNING &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;6.源端postgresql参数调整
 &lt;div id="6源端postgresql参数调整" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#6%e6%ba%90%e7%ab%afpostgresql%e5%8f%82%e6%95%b0%e8%b0%83%e6%95%b4" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;postgres@node1 ogg&lt;span style="color:#f92672"&gt;]&lt;/span&gt;$ vi /opt/pgsql_data/postgresql.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wal_level &lt;span style="color:#f92672"&gt;=&lt;/span&gt; logical &lt;span style="color:#75715e"&gt;#minimal, replica, or logical&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;max_replication_slots &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;10&lt;/span&gt; &lt;span style="color:#75715e"&gt;#max number of replication slots&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;max_wal_sender &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;10&lt;/span&gt; &lt;span style="color:#75715e"&gt;#maximum number of wal sender processes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wal_receiver_status_interval&lt;span style="color:#f92672"&gt;=&lt;/span&gt;10s &lt;span style="color:#75715e"&gt;#optional, keep the system default&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wal_sender_timeout &lt;span style="color:#75715e"&gt;#optional, keep the system default&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;track_commit_timestamp &lt;span style="color:#75715e"&gt;#optional, keep the system default&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wal_receiver_status_interval&lt;span style="color:#f92672"&gt;=&lt;/span&gt;10s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wal_sender_timeout &lt;span style="color:#f92672"&gt;=&lt;/span&gt; 60s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;track_commit_timestamp&lt;span style="color:#f92672"&gt;=&lt;/span&gt;off&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;调整后重启源端postgresql&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;postgres@node1 ogg&lt;span style="color:#f92672"&gt;]&lt;/span&gt;$ pg_ctl -D /opt/pgsql_data -l logfile stop
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;postgres@node1 ogg&lt;span style="color:#f92672"&gt;]&lt;/span&gt;$ pg_ctl -D /opt/pgsql_data -l logfile start&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;7.ogg for pg数据源配置
 &lt;div id="7ogg-for-pg数据源配置" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#7ogg-for-pg%e6%95%b0%e6%8d%ae%e6%ba%90%e9%85%8d%e7%bd%ae" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd /home/postgres/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vi odbc.ini
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;ODBC Data Sources&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;PGDSN&lt;span style="color:#f92672"&gt;=&lt;/span&gt;DataDirect 7.1 PostgreSQL Wire Protocol
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;postgres&lt;span style="color:#f92672"&gt;=&lt;/span&gt;DataDirect 7.1 PostgreSQL Wire Protocol
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;scott&lt;span style="color:#f92672"&gt;=&lt;/span&gt;DataDirect 7.1 PostgreSQL Wire Protocol
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;ODBC&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;IANAAppCodePage&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;InstallDir&lt;span style="color:#f92672"&gt;=&lt;/span&gt;/ogg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;PGDSN&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Driver&lt;span style="color:#f92672"&gt;=&lt;/span&gt;/ogg/lib/GGpsql25.so
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Description&lt;span style="color:#f92672"&gt;=&lt;/span&gt;DataDirect 7.1 PostgreSQL Wire Protocol
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Database&lt;span style="color:#f92672"&gt;=&lt;/span&gt;test
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;HostName&lt;span style="color:#f92672"&gt;=&lt;/span&gt;192.168.1.112
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;PortNumber&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;5432&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;LogonID&lt;span style="color:#f92672"&gt;=&lt;/span&gt;postgres
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Password&lt;span style="color:#f92672"&gt;=&lt;/span&gt;postgres&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;8. 连接测试
 &lt;div id="8-连接测试" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#8-%e8%bf%9e%e6%8e%a5%e6%b5%8b%e8%af%95" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;postgres@node1 ~&lt;span style="color:#f92672"&gt;]&lt;/span&gt;$ cd /ogg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;postgres@node1 ogg&lt;span style="color:#f92672"&gt;]&lt;/span&gt;$ ./ggsci
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--dblogin sourcedb pgdsn userid pg, password &lt;span style="color:#ae81ff"&gt;123456&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;GGSCI &lt;span style="color:#f92672"&gt;(&lt;/span&gt;node1&lt;span style="color:#f92672"&gt;)&lt;/span&gt; 1&amp;gt; dblogin sourcedb pgdsn userid postgres, password postgres
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;2020-07-22 03:10:44 INFO OGG-03036 Database character set identified as UTF-8. Locale: en_US.UTF-8.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;2020-07-22 03:10:44 INFO OGG-03037 Session character set identified as UTF-8.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Successfully logged into database.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;GGSCI &lt;span style="color:#f92672"&gt;(&lt;/span&gt;node1 as postgres@pgdsn&lt;span style="color:#f92672"&gt;)&lt;/span&gt; 2&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;9.开启表级别附加日志
 &lt;div id="9开启表级别附加日志" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#9%e5%bc%80%e5%90%af%e8%a1%a8%e7%ba%a7%e5%88%ab%e9%99%84%e5%8a%a0%e6%97%a5%e5%bf%97" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;源端：&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;GGSCI &lt;span style="color:#f92672"&gt;(&lt;/span&gt;node1&lt;span style="color:#f92672"&gt;)&lt;/span&gt; 3&amp;gt; dblogin sourcedb pgdsn userid postgres, password postgres
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;2020-07-22 03:21:01 INFO OGG-03036 Database character set identified as UTF-8. Locale: en_US.UTF-8.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;2020-07-22 03:21:01 INFO OGG-03037 Session character set identified as UTF-8.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Successfully logged into database.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;GGSCI &lt;span style="color:#f92672"&gt;(&lt;/span&gt;node1 as postgres@pgdsn&lt;span style="color:#f92672"&gt;)&lt;/span&gt; 4&amp;gt; add trandata public.tab1 --如果表有主键这步可以忽略
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Logging of supplemental log data is enabled &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; table public.tab1. REPLICA IDENTITY was DEFAULT and is changed to FULL
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;GGSCI &lt;span style="color:#f92672"&gt;(&lt;/span&gt;node1 as postgres@pgdsn&lt;span style="color:#f92672"&gt;)&lt;/span&gt; 5&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;GGSCI &lt;span style="color:#f92672"&gt;(&lt;/span&gt;node1 as postgres@pgdsn&lt;span style="color:#f92672"&gt;)&lt;/span&gt; 5&amp;gt; info trandata public.tab1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Logging of supplemental log data is enabled &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; table public.t1 with REPLICA IDENTITY set to FULL&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;10 在pg上注册抽取进程
 &lt;div id="10-在pg上注册抽取进程" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#10-%e5%9c%a8pg%e4%b8%8a%e6%b3%a8%e5%86%8c%e6%8a%bd%e5%8f%96%e8%bf%9b%e7%a8%8b" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;在pg库上注册抽取进程，实际上就是创建了一个复制槽,output plugin 默认使用test_decoding&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; GGSCI &lt;span style="color:#f92672"&gt;(&lt;/span&gt;node1 as postgres@pgdsn&lt;span style="color:#f92672"&gt;)&lt;/span&gt; 6&amp;gt; Register Extract ext_pg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 2020-07-22 03:25:27 INFO OGG-25355 Successfully created replication slot &lt;span style="color:#e6db74"&gt;&amp;#39;ext_pg_2947c06e0ea2ec74&amp;#39;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; EXTRACT group &lt;span style="color:#e6db74"&gt;&amp;#39;EXT_PG&amp;#39;&lt;/span&gt; in database &lt;span style="color:#e6db74"&gt;&amp;#39;test&amp;#39;&lt;/span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;11.配置抽取进程和投递进程
 &lt;div id="11配置抽取进程和投递进程" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#11%e9%85%8d%e7%bd%ae%e6%8a%bd%e5%8f%96%e8%bf%9b%e7%a8%8b%e5%92%8c%e6%8a%95%e9%80%92%e8%bf%9b%e7%a8%8b" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;配置抽取进程&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; edit param ext_pg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;SETENV &lt;span style="color:#f92672"&gt;(&lt;/span&gt; PGCLIENTENCODING &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;UTF8&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SETENV &lt;span style="color:#f92672"&gt;(&lt;/span&gt;NLS_LANG&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;AMERICAN_AMERICA.AL32UTF8&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; extract ext_pg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SETENV &lt;span style="color:#f92672"&gt;(&lt;/span&gt;ODBCINI&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;/home/pg/odbc.ini&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SOURCEDB pgdsn, USERID pg, PASSWORD &lt;span style="color:#ae81ff"&gt;123456&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; exttrail ./dirdat/st
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; TABLE PUBLIC.TAB1;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ----GETTRUNCATES &lt;span style="color:#75715e"&gt;###此特性postgresql 2020-07-22 03:33:37 ERROR OGG-25541 GETTRUNCATES is not valid with OGG EXTRACT on PostgreSQL database version 10.12. PostgreSQL database supports capture of TRUNCATE operations starting from version 11.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;说明pg到oracle无法同步truncate命令&lt;/p&gt;
&lt;p&gt;配置投递进程&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; extract pump_pg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SETENV &lt;span style="color:#f92672"&gt;(&lt;/span&gt;ODBCINI&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;/home/pg/odbc.ini&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; RMTHOST 172.17.100.150, MGRPORT 7809, compress
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; numfiles &lt;span style="color:#ae81ff"&gt;10000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; RMTTRAIL ./dirdat/rt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; TABLE PUBLIC.TAB1;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;12.添加trail和启动抽取和投递
 &lt;div id="12添加trail和启动抽取和投递" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#12%e6%b7%bb%e5%8a%a0trail%e5%92%8c%e5%90%af%e5%8a%a8%e6%8a%bd%e5%8f%96%e5%92%8c%e6%8a%95%e9%80%92" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ADD extract ext_pg, TRANLOG,BEGIN now
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; add exttrail ./dirdat/st,extract ext_pg,megabytes &lt;span style="color:#ae81ff"&gt;500&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; add extract pump_pg,exttrailsource ./dirdat/st
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; add rmttrail ./dirdat/rt,extract pump_pg,megabytes &lt;span style="color:#ae81ff"&gt;500&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; start ext_pg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; start pump_pg&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;13 配置defgen
 &lt;div id="13-配置defgen" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#13-%e9%85%8d%e7%bd%aedefgen" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;如果表结构一直可以配置参数ASSUMETARGETDEFS&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;edit param defgen
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;DEFSFILE ./dirdef/tab1.def, PURGE
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SOURCEDB pgdsn, USERID pg, PASSWORD &lt;span style="color:#ae81ff"&gt;123456&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; TABLE PUBLIC.tab1;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;生成表定义文件&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;defgen paramfile /oggpg/dirdef/tab1.prm&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;拷贝defgen文件到目标端的dirdef目录下&lt;/p&gt;

&lt;h4 class="relative group"&gt;14.目标端验证trail投递正常
 &lt;div id="14目标端验证trail投递正常" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#14%e7%9b%ae%e6%a0%87%e7%ab%af%e9%aa%8c%e8%af%81trail%e6%8a%95%e9%80%92%e6%ad%a3%e5%b8%b8" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;oracle@lzl dirdat&lt;span style="color:#f92672"&gt;]&lt;/span&gt;$ cd dirdat
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;oracle@lzl dirdat&lt;span style="color:#f92672"&gt;]&lt;/span&gt;$ ll
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -rw-r----- &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; pg pg &lt;span style="color:#ae81ff"&gt;1439&lt;/span&gt; Feb &lt;span style="color:#ae81ff"&gt;28&lt;/span&gt; 11:02 rt000000000&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;15.在pg上注册抽取进程
 &lt;div id="15在pg上注册抽取进程" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#15%e5%9c%a8pg%e4%b8%8a%e6%b3%a8%e5%86%8c%e6%8a%bd%e5%8f%96%e8%bf%9b%e7%a8%8b" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;在pg库上注册抽取进程，实际上就是创建了一个复制槽&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;GGSCI &lt;span style="color:#f92672"&gt;(&lt;/span&gt;node1 as postgres@pgdsn&lt;span style="color:#f92672"&gt;)&lt;/span&gt; 6&amp;gt; Register Extract ext_pg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;2020-07-22 03:25:27 INFO OGG-25355 Successfully created replication slot &lt;span style="color:#e6db74"&gt;&amp;#39;ext_pg_2947c06e0ea2ec74&amp;#39;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; EXTRACT group &lt;span style="color:#e6db74"&gt;&amp;#39;EXT_PG&amp;#39;&lt;/span&gt; in database &lt;span style="color:#e6db74"&gt;&amp;#39;test&amp;#39;&lt;/span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;16.配置oracle用户环境变量
 &lt;div id="16配置oracle用户环境变量" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#16%e9%85%8d%e7%bd%aeoracle%e7%94%a8%e6%88%b7%e7%8e%af%e5%a2%83%e5%8f%98%e9%87%8f" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export ORACLE_BASE&lt;span style="color:#f92672"&gt;=&lt;/span&gt;/oracle/app/oracle
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; export ORACLE_HOME&lt;span style="color:#f92672"&gt;=&lt;/span&gt;$ORACLE_BASE/product/11.2.0/dbhome_1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; export ORACLE_SID&lt;span style="color:#f92672"&gt;=&lt;/span&gt;oralzl
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; export OGG_HOME&lt;span style="color:#f92672"&gt;=&lt;/span&gt;/oggfororacle
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; export PATH&lt;span style="color:#f92672"&gt;=&lt;/span&gt;$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; export TNS_ADMIN&lt;span style="color:#f92672"&gt;=&lt;/span&gt;$ORACLE_HOME/network/admin
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; export LD_LIBRARY_PATH&lt;span style="color:#f92672"&gt;=&lt;/span&gt;$ORACLE_HOME/lib:$OGG_HOME:$ORACLE_HOME/lib32:/lib/usr/lib:/usr/local/lib&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;17.配置oracle侧的监听和tns
 &lt;div id="17配置oracle侧的监听和tns" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#17%e9%85%8d%e7%bd%aeoracle%e4%be%a7%e7%9a%84%e7%9b%91%e5%90%ac%e5%92%8ctns" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;ogg for oracle会默认使用TNS_ADMIN下的tns
也可以在配置抽取的时候手动配置
如：&lt;code&gt;USERID goldengate@127.0.0.1:1521/oralzl, PASSWORD 123456&lt;/code&gt;&lt;/p&gt;

&lt;h4 class="relative group"&gt;18.目标端安装ogg for oracle
 &lt;div id="18目标端安装ogg-for-oracle" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#18%e7%9b%ae%e6%a0%87%e7%ab%af%e5%ae%89%e8%a3%85ogg-for-oracle" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;下载ogg软件
配置oggcore.rsp文件&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;oracle.install.responseFileVersion&lt;span style="color:#f92672"&gt;=&lt;/span&gt;/home/oracle/oggcore.rsp
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;INSTALL_OPTION&lt;span style="color:#f92672"&gt;=&lt;/span&gt;ORA11g
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;SOFTWARE_LOCATION&lt;span style="color:#f92672"&gt;=&lt;/span&gt;/ogg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;START_MANAGER&lt;span style="color:#f92672"&gt;=&lt;/span&gt;false
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MANAGER_PORT&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;7809&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;DATABASE_LOCATION&lt;span style="color:#f92672"&gt;=&lt;/span&gt;/oracle/db/11.2.0.4
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;INVENTORY_LOCATION&lt;span style="color:#f92672"&gt;=&lt;/span&gt;/oracle/oraInventory
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;UNIX_GROUP_NAME&lt;span style="color:#f92672"&gt;=&lt;/span&gt;oinstall&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;静默安装OGG&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;./runInstaller -silent -nowait -responseFile /home/oracle/oggcore.rsp&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;19 oracle库的用户和权限
 &lt;div id="19-oracle库的用户和权限" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#19-oracle%e5%ba%93%e7%9a%84%e7%94%a8%e6%88%b7%e5%92%8c%e6%9d%83%e9%99%90" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;create user goldengate identified by &lt;span style="color:#e6db74"&gt;&amp;#34;123456&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; grant create session,alter session to goldengate;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; grant alter system to goldengate;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; grant resource to goldengate;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; grant connect to goldengate;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; grant &lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; any dictionary to goldengate;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; grant flashback any table to goldengate;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; grant &lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; any table to goldengate;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; grant &lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; any table to goldengate;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; grant insert any table to goldengate;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; grant update any table to goldengate;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; grant delete any table to goldengate;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; grant &lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; on dba_clusters to goldengate;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; grant execute on dbms_flashback to goldengate;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; grant create table to goldengate;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; grant create sequence to goldengate;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; grant alter any table to goldengate;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; grant dba to goldengate;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; grant lock any table to goldengate;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;20 目标端mgr进程
 &lt;div id="20-目标端mgr进程" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#20-%e7%9b%ae%e6%a0%87%e7%ab%afmgr%e8%bf%9b%e7%a8%8b" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;edit param mgr
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;PORT &lt;span style="color:#ae81ff"&gt;7809&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; DYNAMICPORTLIST 7810-7980
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPDAYS &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; PURGEDDLHISTORY MINKEEPDAYS 7, MAXKEEPDAYS &lt;span style="color:#ae81ff"&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LAGREPORTHOURS &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LAGINFOMINUTES &lt;span style="color:#ae81ff"&gt;30&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LAGCRITICALMINUTES &lt;span style="color:#ae81ff"&gt;45&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;start mgr&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;21 目标端配置复制进程
 &lt;div id="21-目标端配置复制进程" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#21-%e7%9b%ae%e6%a0%87%e7%ab%af%e9%85%8d%e7%bd%ae%e5%a4%8d%e5%88%b6%e8%bf%9b%e7%a8%8b" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;GGSCI &lt;span style="color:#f92672"&gt;(&lt;/span&gt;node2&lt;span style="color:#f92672"&gt;)&lt;/span&gt; 8&amp;gt; dblogin userid goldengate@127.0.0.1:1521/oralzl,password &lt;span style="color:#ae81ff"&gt;123456&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;GGSCI &lt;span style="color:#f92672"&gt;(&lt;/span&gt;node2 as postgres@pgdsn&lt;span style="color:#f92672"&gt;)&lt;/span&gt; 9&amp;gt; add checkpointtable goldengate.chkt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Successfully created checkpoint table public.chkt.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;复制进程：&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; edit param rep_pg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;REPLICAT rep_pg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; USERID goldengate@127.0.0.1:1521/oralzl, PASSWORD &lt;span style="color:#ae81ff"&gt;123456&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SOURCEDEFS ./dirdef/tab1.def
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; MAP public.tab1, TARGET oralzl.tab1; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;add replicat rep_pg,exttrail ./dirdat/rt,checkpointtable goldengate.chkt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; start rep_pg&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 class="relative group"&gt;22 测试同步
 &lt;div id="22-测试同步" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#22-%e6%b5%8b%e8%af%95%e5%90%8c%e6%ad%a5" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[postgres&lt;span style="color:#f92672"&gt;@&lt;/span&gt;node1 &lt;span style="color:#f92672"&gt;~&lt;/span&gt;]&lt;span style="color:#960050;background-color:#1e0010"&gt;$&lt;/span&gt; psql
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;postgres&lt;span style="color:#f92672"&gt;=#&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;\&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;c&lt;/span&gt; lzldb
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;test&lt;span style="color:#f92672"&gt;=#&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;\&lt;/span&gt;d tab1;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;​&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;Table&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;public.tab1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;Column&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;Type&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;Collation&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;Nullable&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;Default&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;--------+-----------------------+-----------+----------+---------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; id &lt;span style="color:#f92672"&gt;|&lt;/span&gt; integer &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;not&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;null&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; name &lt;span style="color:#f92672"&gt;|&lt;/span&gt; character varying(&lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;) &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Indexes:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;t1_pkey&amp;#34;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;PRIMARY&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;KEY&lt;/span&gt;, btree (id)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;lzldb&lt;span style="color:#f92672"&gt;=#&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;insert&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;into&lt;/span&gt; t2 &lt;span style="color:#66d9ef"&gt;values&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#39;lzl1&amp;#39;&lt;/span&gt;) ;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;INSERT&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;lzldb&lt;span style="color:#f92672"&gt;=#&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; t2;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; id &lt;span style="color:#f92672"&gt;|&lt;/span&gt; name 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;----+------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; lzl1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[postgres&lt;span style="color:#f92672"&gt;@&lt;/span&gt;node2 &lt;span style="color:#f92672"&gt;~&lt;/span&gt;]&lt;span style="color:#960050;background-color:#1e0010"&gt;$&lt;/span&gt;sqlplus &lt;span style="color:#f92672"&gt;/&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; sysdba
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;SQL&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; oralzl.tab1; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;​&lt;/span&gt; id name 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;---------- ----------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;​&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; lzl1 &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</content:encoded></item><item><title>pg_rewind初识</title><link>https://lastdba.com/2024/08/13/pg_rewind%E5%88%9D%E8%AF%86/</link><pubDate>Tue, 13 Aug 2024 00:00:00 +0000</pubDate><guid>https://lastdba.com/2024/08/13/pg_rewind%E5%88%9D%E8%AF%86/</guid><description>&lt;p&gt;​&lt;/p&gt;

&lt;h2 class="relative group"&gt;什么是pg_rewind?
 &lt;div id="什么是pg_rewind" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%afpg_rewind" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;pg_rewind是pg提供的工具，当2个pg实例时间线（timeline）出现分叉时，pg_rewind可以做实例间的同步。（比如主库运行的情况下，备库failover后运行了一段时间，此时主备的时间线就出现了分叉）
pg_rewind会对比两者的大小，然后把大小不一样的文件从源拷贝到目标，包括配置文件。但是它不会对比没有发生改变的文件，所以pg_rewind在比较大的库，更改少量数据时，运行效率较高。
pg_rewind可以运用在备库failover后，备库即时运行一段时间，也可以把备库拉到和主库一样的状态，重新成为standby。
pg_rewind运行过程中，会对比主（源）备（目标）的差异点，并把主库的差异点后的WAL日志传递给备库。所以，如果主库在差异点之后的WAL也丢失了，那么rewind是不会拷贝不存在的WAL日志的，所以此时备库仍然不会被成功做成standby。解决该问题需要用restore。&lt;/p&gt;</description><content:encoded>&lt;p&gt;​&lt;/p&gt;

&lt;h2 class="relative group"&gt;什么是pg_rewind?
 &lt;div id="什么是pg_rewind" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%afpg_rewind" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;pg_rewind是pg提供的工具，当2个pg实例时间线（timeline）出现分叉时，pg_rewind可以做实例间的同步。（比如主库运行的情况下，备库failover后运行了一段时间，此时主备的时间线就出现了分叉）
pg_rewind会对比两者的大小，然后把大小不一样的文件从源拷贝到目标，包括配置文件。但是它不会对比没有发生改变的文件，所以pg_rewind在比较大的库，更改少量数据时，运行效率较高。
pg_rewind可以运用在备库failover后，备库即时运行一段时间，也可以把备库拉到和主库一样的状态，重新成为standby。
pg_rewind运行过程中，会对比主（源）备（目标）的差异点，并把主库的差异点后的WAL日志传递给备库。所以，如果主库在差异点之后的WAL也丢失了，那么rewind是不会拷贝不存在的WAL日志的，所以此时备库仍然不会被成功做成standby。解决该问题需要用restore。&lt;/p&gt;
&lt;p&gt;！！！在使用pg_rewind时，应备份目标实例。pg_rewind会直接覆盖目标库的文件，如果rewind失败，那么可能目标库无法启动。&lt;/p&gt;

&lt;h2 class="relative group"&gt;pg_rewind的使用
 &lt;div id="pg_rewind的使用" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#pg_rewind%e7%9a%84%e4%bd%bf%e7%94%a8" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;主备切换后，老主库仍然运行，导致主备时间线不一致，老主库无法当做新主库的备库启动&lt;/p&gt;
&lt;p&gt;拉起备库时，报时间线错误如下&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;LOG:  entering standby mode
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;FATAL:  requested timeline &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; is not a child of this server&lt;span style="color:#960050;background-color:#1e0010"&gt;&amp;#39;&lt;/span&gt;s history
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;DETAIL:  Latest checkpoint is at 0/6000028 on timeline 1, but in the history of the requested timeline, the server forked off from that timeline at 0/4000098.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;LOG:  startup process &lt;span style="color:#f92672"&gt;(&lt;/span&gt;PID 22321&lt;span style="color:#f92672"&gt;)&lt;/span&gt; exited with exit code &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;LOG:  aborting startup due to startup process failure
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;LOG:  database system is shut down&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;此时需要用rewind重新拉齐一次主备&lt;/p&gt;
&lt;p&gt;1.配置当前主库的pg_hba
配置pg_rewind的登陆用户登陆源库许可，hba生效需要重启数据库&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vi $source/pg_hba.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;host    all       pg         172.17.100.150/32          trust&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;pg_rewind需要使用高权限用户，pg新版本可以授权，pg老版本最好用超级用户。
我当前环境的版本为pg9.6，直接使用OS超级用户&lt;/p&gt;
&lt;p&gt;2.wal_log_hints = on参数配置
将wal_log_hints = on追加到目标库postgres.conf，重新启动并关闭一次目标库（此时主库是启动状态，备库是关闭状态）&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vi $dest/postgres.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wal_log_hints &lt;span style="color:#f92672"&gt;=&lt;/span&gt; on&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;3.pg_rewind命令执行&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;pg@lzl pg96data_sla&lt;span style="color:#f92672"&gt;]&lt;/span&gt;$ /pg/pg96/bin/pg_rewind --target-pgdata /pg/pg96data_pri --source-server&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;host=172.17.100.150 port=5433 user=pg password=oracle  dbname=postgres&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;servers diverged at WAL position 0/4000098 on timeline &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;rewinding from last common checkpoint at 0/4000028 on timeline &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Done!&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;4.配置备库参数
更改postgres.conf和recovery.conf中的IP、端口、目录等配置，pg_rewind会把配置文件也cp过来&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;pg@lzl pg96data_pri&lt;span style="color:#f92672"&gt;]&lt;/span&gt;$ mv recovery.done recovery.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;pg@lzl pg96data_pri&lt;span style="color:#f92672"&gt;]&lt;/span&gt;$ vi recovery.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;pg@lzl pg96data_pri&lt;span style="color:#f92672"&gt;]&lt;/span&gt;$ vi postgres.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;5.启动备库&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;pg@lzl pg96data_pri&lt;span style="color:#f92672"&gt;]&lt;/span&gt;$ /pg/pg96/bin/pg_ctl -D /pg/pg96data_sla -l /pg/pg96data_sla/server.log start 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;server starting
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;pg@lzl pg96data_sla&lt;span style="color:#f92672"&gt;]&lt;/span&gt;$ psql -p5433 postgres
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;psql &lt;span style="color:#f92672"&gt;(&lt;/span&gt;9.6.17&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;postgres&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#75715e"&gt;# \x&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Expanded display is on.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;postgres&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#75715e"&gt;# select * from pg_stat_replication ;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;-&lt;span style="color:#f92672"&gt;[&lt;/span&gt; RECORD &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#f92672"&gt;]&lt;/span&gt;----+------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pid | &lt;span style="color:#ae81ff"&gt;24766&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;usesysid | &lt;span style="color:#ae81ff"&gt;16384&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;usename | lzl
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;application_name | walreceiver
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client_addr | 172.17.100.150
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client_hostname | 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;client_port | &lt;span style="color:#ae81ff"&gt;47345&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;backend_start | 2021-07-30 07:44:05.582546+00
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;backend_xmin | 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;state | streaming
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sent_location | 0/4033790
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;write_location | 0/4033790
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flush_location | 0/4033790
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;replay_location | 0/4033790
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sync_priority | &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sync_state | async&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 class="relative group"&gt;常见问题
 &lt;div id="常见问题" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%b8%b8%e8%a7%81%e9%97%ae%e9%a2%98" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;pg_rewind命令报错一
 &lt;div id="pg_rewind命令报错一" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#pg_rewind%e5%91%bd%e4%bb%a4%e6%8a%a5%e9%94%99%e4%b8%80" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;could not fetch remote file &lt;span style="color:#e6db74"&gt;&amp;#34;global/pg_control&amp;#34;&lt;/span&gt;: ERROR:  must be superuser to read files
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Failure, exiting&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;解决办法：
使用高权限用户&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;postgres&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#75715e"&gt;# \du&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;                                    List of roles
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;  Role name  |                         Attributes                         | Member of 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;-------------+------------------------------------------------------------+-----------
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; lzl         | Replication                                                | &lt;span style="color:#f92672"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pg          | Superuser, Create role, Create DB, Replication, Bypass RLS | &lt;span style="color:#f92672"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; rewind_user |                                                            | &lt;span style="color:#f92672"&gt;{}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;pg用户是pg server自带的超级用户，跟pg安装用户相同。os的安装用户肯定有修改pg_control的权限&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/pg/pg96/bin/pg_rewind --target-pgdata /pg/pg96data_pri --source-server&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;host=172.17.100.150 port=5433 user=pg password=oracle  dbname=postgres&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 class="relative group"&gt;pg_rewind命令报错二
 &lt;div id="pg_rewind命令报错二" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#pg_rewind%e5%91%bd%e4%bb%a4%e6%8a%a5%e9%94%99%e4%ba%8c" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;could not connect to server: FATAL:  no pg_hba.conf entry &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; host &lt;span style="color:#e6db74"&gt;&amp;#34;172.17.100.150&amp;#34;&lt;/span&gt;, user &lt;span style="color:#e6db74"&gt;&amp;#34;rewind_user&amp;#34;&lt;/span&gt;, database &lt;span style="color:#e6db74"&gt;&amp;#34;postgres&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Failure, exiting&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;没有配置pg_hba.conf连接
解决办法：配置用户的pg_hba，例如&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;host    all       pg         172.17.100.150/32          trust&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 class="relative group"&gt;pg_rewind命令报错三
 &lt;div id="pg_rewind命令报错三" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#pg_rewind%e5%91%bd%e4%bb%a4%e6%8a%a5%e9%94%99%e4%b8%89" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;pg@lzl pg96data_sla&lt;span style="color:#f92672"&gt;]&lt;/span&gt;$   /pg/pg96/bin/pg_rewind --target-pgdata /pg/pg96data_pri --source-server&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;host=172.17.100.150 port=5433 user=pg password=oracle  dbname=postgres&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;target server needs to use either data checksums or &lt;span style="color:#e6db74"&gt;&amp;#34;wal_log_hints = on&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;问题原因：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;full_page_writes （默认开启）&lt;/li&gt;
&lt;li&gt;wal_log_hints 设置成 on 或者 PG 在初始化时开启 checksums 功能 
解决办法：将wal_log_hints = on配置到目标库postgres.conf，启动再关闭一次目标库（目标库本来就是关闭的，必须启动再关闭一次，不然参数不会生效）&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vi postgres.conf 加入目标库配置
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wal_log_hints &lt;span style="color:#f92672"&gt;=&lt;/span&gt; on&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;重启目标库以生效&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;pg@lzl pg96data_sla&lt;span style="color:#f92672"&gt;]&lt;/span&gt;$  /pg/pg96/bin/pg_ctl -D /pg/pg96data_pri -l /pg/pg96data_pri/server.log start      
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;server starting
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;pg@lzl pg96data_sla&lt;span style="color:#f92672"&gt;]&lt;/span&gt;$  /pg/pg96/bin/pg_ctl -D /pg/pg96data_pri -l /pg/pg96data_pri/server.log stop
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;waiting &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; server to shut down.... &lt;span style="color:#66d9ef"&gt;done&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 class="relative group"&gt;参考文档：
 &lt;div id="参考文档" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%8f%82%e8%80%83%e6%96%87%e6%a1%a3" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.postgresql.org/docs/9.6/app-pgrewind.html" target="_blank" rel="noreferrer"&gt;https://www.postgresql.org/docs/9.6/app-pgrewind.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;</content:encoded></item><item><title>我是如何考上武汉大学在职研究生的</title><link>https://lastdba.com/2024/08/13/%E6%88%91%E6%98%AF%E5%A6%82%E4%BD%95%E8%80%83%E4%B8%8A%E6%AD%A6%E6%B1%89%E5%A4%A7%E5%AD%A6%E5%9C%A8%E8%81%8C%E7%A0%94%E7%A9%B6%E7%94%9F%E7%9A%84/</link><pubDate>Tue, 13 Aug 2024 00:00:00 +0000</pubDate><guid>https://lastdba.com/2024/08/13/%E6%88%91%E6%98%AF%E5%A6%82%E4%BD%95%E8%80%83%E4%B8%8A%E6%AD%A6%E6%B1%89%E5%A4%A7%E5%AD%A6%E5%9C%A8%E8%81%8C%E7%A0%94%E7%A9%B6%E7%94%9F%E7%9A%84/</guid><description>&lt;h2 class="relative group"&gt;我为什么要考在职研究生？
 &lt;div id="我为什么要考在职研究生" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%88%91%e4%b8%ba%e4%bb%80%e4%b9%88%e8%a6%81%e8%80%83%e5%9c%a8%e8%81%8c%e7%a0%94%e7%a9%b6%e7%94%9f" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;提升学历。我的学历是一个普通的本科学校。学历高一点的话在以后的职业生涯会稍微增加一点竞争力&lt;/li&gt;
&lt;li&gt;之前投递过一家国企，简历石沉大海。但是同办公室的一个学历较高的同事就通过了，所以如果是国企单位，高学历就是敲门砖&lt;/li&gt;
&lt;li&gt;弥补大四考研失败的遗憾，重拾研究生的梦想&lt;/li&gt;
&lt;li&gt;学习总不会有错，这是我的信仰&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 class="relative group"&gt;全日制研究生和在职研究生的区别
 &lt;div id="全日制研究生和在职研究生的区别" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%85%a8%e6%97%a5%e5%88%b6%e7%a0%94%e7%a9%b6%e7%94%9f%e5%92%8c%e5%9c%a8%e8%81%8c%e7%a0%94%e7%a9%b6%e7%94%9f%e7%9a%84%e5%8c%ba%e5%88%ab" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;学习状态
 &lt;div id="学习状态" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%ad%a6%e4%b9%a0%e7%8a%b6%e6%80%81" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;全日制是脱产的，在职是可以工作的。这条基本定死了大部分打工人只能考非全&lt;/p&gt;</description><content:encoded>
&lt;h2 class="relative group"&gt;我为什么要考在职研究生？
 &lt;div id="我为什么要考在职研究生" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%88%91%e4%b8%ba%e4%bb%80%e4%b9%88%e8%a6%81%e8%80%83%e5%9c%a8%e8%81%8c%e7%a0%94%e7%a9%b6%e7%94%9f" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;提升学历。我的学历是一个普通的本科学校。学历高一点的话在以后的职业生涯会稍微增加一点竞争力&lt;/li&gt;
&lt;li&gt;之前投递过一家国企，简历石沉大海。但是同办公室的一个学历较高的同事就通过了，所以如果是国企单位，高学历就是敲门砖&lt;/li&gt;
&lt;li&gt;弥补大四考研失败的遗憾，重拾研究生的梦想&lt;/li&gt;
&lt;li&gt;学习总不会有错，这是我的信仰&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 class="relative group"&gt;全日制研究生和在职研究生的区别
 &lt;div id="全日制研究生和在职研究生的区别" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%85%a8%e6%97%a5%e5%88%b6%e7%a0%94%e7%a9%b6%e7%94%9f%e5%92%8c%e5%9c%a8%e8%81%8c%e7%a0%94%e7%a9%b6%e7%94%9f%e7%9a%84%e5%8c%ba%e5%88%ab" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;学习状态
 &lt;div id="学习状态" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%ad%a6%e4%b9%a0%e7%8a%b6%e6%80%81" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;全日制是脱产的，在职是可以工作的。这条基本定死了大部分打工人只能考非全&lt;/p&gt;

&lt;h3 class="relative group"&gt;考试范围
 &lt;div id="考试范围" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%80%83%e8%af%95%e8%8c%83%e5%9b%b4" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;全日制考试压力更大，考试范围基本都是4门：高数，考研英语，政治，专业课.
非全考试压力较小，考试范围是2门：管综（初中数学，逻辑，写作），考研英语.
非全除了英语跟全日制差不多外，管综考试内容比全日制简单很多（后面细说管理类综合联考）&lt;/p&gt;

&lt;h3 class="relative group"&gt;研究方向
 &lt;div id="研究方向" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%a0%94%e7%a9%b6%e6%96%b9%e5%90%91" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;全日制研究生偏向研究性质，重学习和科研成果，培养学生的学习能力和研究能力。&lt;/p&gt;
&lt;p&gt;非全研究生偏向提升学生的管理才能，向社会输送管理类人才。&lt;/p&gt;
&lt;p&gt;两个方向有很大的不同.&lt;/p&gt;

&lt;h3 class="relative group"&gt;社会认可度
 &lt;div id="社会认可度" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%a4%be%e4%bc%9a%e8%ae%a4%e5%8f%af%e5%ba%a6" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;全日制研究生肯定比非全的认可度高，毕竟门槛高，学习压力更大，主流学历，社会认可要更高。但是非全认可度也是有的，很多学校已明确方针是一视同仁的（明面上）。最重要的一点是，非全日制研究生持有双证（学位证书和学历证书）。&lt;/p&gt;
&lt;p&gt;对于工作方面，就看单位情况了，有些单位招聘要求只要是研究生学历即可，有些可能真写明必须是全日制研究生。但是对于无法脱产提升学历的人来说，非全几乎是唯一途径.
总之，&lt;strong&gt;非全同样是双证，非全认可度 &amp;lt; 全日制认可度&lt;/strong&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;如何选专业
 &lt;div id="如何选专业" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%a6%82%e4%bd%95%e9%80%89%e4%b8%93%e4%b8%9a" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;结合工作性质、发展意向、人民币余额综合考虑..&lt;/p&gt;
&lt;p&gt;人力资源或金融方向或公司高管：MBA&lt;/p&gt;
&lt;p&gt;技术工种或工程管理：MEM&lt;/p&gt;
&lt;p&gt;公务员或公共管理：MPA&lt;/p&gt;
&lt;p&gt;会计：MPAcc。其他还有几个比较冷门自行百度&lt;/p&gt;
&lt;p&gt;从人民币余额角度考虑，每所学校收费不同，但一般不会差别过大。以四川大学为例，MEM一年学费1.5w，MBA一年15w，MPA好像跟MEM差不多。&lt;/p&gt;
&lt;p&gt;像我这样的it人士，囊中羞涩，自我感觉也做不到高管，比较适合MEM。&lt;/p&gt;

&lt;h2 class="relative group"&gt;如何选择学校
 &lt;div id="如何选择学校" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%a6%82%e4%bd%95%e9%80%89%e6%8b%a9%e5%ad%a6%e6%a0%a1" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;因为学习难度相对比较简单，社会认可度也没有全日制高，所以建议选择当地名校。211、985是极其推荐的，找一个自己心仪的学校即可。很多985院校的录取分数线就是国家线，所以个人感觉非211、985的院校报考意义不大，既然分数都一样为什么不选择好一点的学习呢？&lt;/p&gt;
&lt;p&gt;当然有些985有自己的自划线，这个需要自己到学院官网找历年的录取分数线，例如四川大学每年都是自划线，一般超国家线20-30分。&lt;/p&gt;

&lt;h2 class="relative group"&gt;怎么考试？
 &lt;div id="怎么考试" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%80%8e%e4%b9%88%e8%80%83%e8%af%95" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;考试内容
 &lt;div id="考试内容" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%80%83%e8%af%95%e5%86%85%e5%ae%b9" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;考试分为初试和复试，初试在12月底，复试在3月份。&lt;/p&gt;
&lt;p&gt;初试既笔试。在报名考试和考点后，在12月底进行考试，一天考完，每场考试3小时。&lt;/p&gt;
&lt;p&gt;复试既面试。少部分学校会加笔试，但是从疫情以后，都是网络面试，很少有面试的时候用笔写什么东西。&lt;/p&gt;
&lt;p&gt;初试内容：（管理类综合联考）



&lt;img src="https://lastdba.com/img/csdn/c920095c8db9.png" alt="在这里插入图片描述" /&gt;&lt;/p&gt;
&lt;p&gt;复试内容：



&lt;img src="https://lastdba.com/img/csdn/743ea585843c.png" alt="在这里插入图片描述" /&gt;&lt;/p&gt;

&lt;h3 class="relative group"&gt;提前面试
 &lt;div id="提前面试" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%8f%90%e5%89%8d%e9%9d%a2%e8%af%95" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;提前面试指初试之前，学院安排面试，相当于把复试提前。提前面试通过以后，初试只需要过国家线即可。而一般考试流程下，需要过学院自划线。&lt;/p&gt;
&lt;p&gt;提前面试也是只有部分院校才有，比如清华有提前批面试，四川大学没有提前批面试。这个就要看报考院校的官网信息了。&lt;/p&gt;
&lt;p&gt;加入通过了提前面试的话，初试压力确实要小一些。&lt;/p&gt;

&lt;h2 class="relative group"&gt;如何报名
 &lt;div id="如何报名" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%a6%82%e4%bd%95%e6%8a%a5%e5%90%8d" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;考研过程中，最重要的2个网址，一个是你要报名的学校官网，另一个就是研招网：中国研究生招生信息网



&lt;img src="https://lastdba.com/img/csdn/85579cc5cd7e.png" alt="在这里插入图片描述" /&gt;&lt;/p&gt;
&lt;p&gt;报考前在硕士目录中查看报考的学校和专业，例如 非全工程管理应如下选择 



&lt;img src="https://lastdba.com/img/csdn/3a5abec906cf.png" alt="在这里插入图片描述" /&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;要不要报培训班？
 &lt;div id="要不要报培训班" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%a6%81%e4%b8%8d%e8%a6%81%e6%8a%a5%e5%9f%b9%e8%ae%ad%e7%8f%ad" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;很多同学都比较关心要不要报培训班的问题。报呢感觉太贵，万一考不上呢？不报嘛不知道咋学或者学的太累。&lt;/p&gt;
&lt;p&gt;这个问题我还是比较有发言权，因为我报了培训班。&lt;/p&gt;
&lt;p&gt;我也是网上看到有培训班，问了一下价格8k，再加上当时存在信息差，不知道考什么，不知道怎么学，不知道怎么报名，不知道报考什么学校，不知道在哪去搜这些信息（马上百度在职研究生，基本全是广告），再加上当时真的很有决心要学习，所以就入了这个坑..&lt;/p&gt;

&lt;h3 class="relative group"&gt;培训班给了我什么？
 &lt;div id="培训班给了我什么" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%9f%b9%e8%ae%ad%e7%8f%ad%e7%bb%99%e4%ba%86%e6%88%91%e4%bb%80%e4%b9%88" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;首先给我一堆学习资料，学习方法、真题等等。除了英语词汇我立马拿出背以外，其他东西我基本没动过。真题我也立马打印了 ，那堆真题到考完我也没看过。看上去很有用，实际上淘宝搜索真题一大把正式发版带详细解析的真题，非常好用，也没那么费眼睛。而那个词汇，很奇怪，培训班给我的词汇跟张剑黄皮书词汇对不上，我把培训班词汇背了很久，发现有些真题常见词汇不在词汇本里，后面换了张剑黄皮书词汇本背，感觉好多了。&lt;/p&gt;
&lt;p&gt;处理学习资料外，最重要的就是直播授课，直播课基本都是晚上8-10点，2小时讲课，10分钟答疑。&lt;/p&gt;
&lt;p&gt;直播课还是有用的，特别是逻辑课和数学课，听这2个课基本不需要额外买书全面地学习数学和逻辑基础知识，只需要做课后练习和练题。英语课我基本没听过，基本都是自学的，个人感觉听英语课效率很低，浪费时间，不如多背背单词，多做些阅读题。英语写作课也只听了最后2节，非常有用，后面细讲英语写作（有干货）。最后，不要妄想有问题问老师，这种网课很多人，老师答疑时间就10分钟左右，我提的问题从来没被选中过。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;培训班的好处：&lt;/strong&gt;
学习的方便性。从打工人的角度出发，本身加班就多，回到家累的要死，要我回去把资料铺开像高考一样去学习，太难了。但是如果是授课，我只需要坐在沙发上把直播看完，这eazy很多
节省时间。不需要费周折地制定计划并在期间不断调整学习计划，听课的效率也比把厚厚的一本书自己看完要来的更容易。从本质上讲，培训班就是拿钱买时间。&lt;/p&gt;
&lt;p&gt;同学的学习状态良好会激励你学习，你不会是孤单一个人学习，完全不知道别人学的怎么样。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;培训班的坑：&lt;/strong&gt;
培训班参差不齐。我当时报考的shangdejigou，报的时候没有调查过这家机构，确实很一般。他们有的班是协议形的，没考上的话会退费，但是协议里有坑，都没退成。我们群里有很多闹退费的。还有个人信息泄露的问题，基本所有学员都接到过退费诈骗电话，连我这种考上的都接了5、6个诈骗电话了。&lt;/p&gt;
&lt;p&gt;老师素质参数不齐。有的老师讲的好，有的老师感觉像是摸鱼的，甚至有些讲解完全就是误人子弟。我那个班就是数学和逻辑老师讲的特好，英语垃圾，写作误人子弟&amp;hellip;&lt;/p&gt;
&lt;p&gt;不要妄想培训班会把你培训的很好，培训班只是辅助，主要还是靠自己。我从计划开始考研，到初试完成，基本没有一天周末时间，都是泡在图书馆或者咖啡厅里，所有聚会都拒绝。&lt;/p&gt;
&lt;p&gt;所以，到底要不要报考培训班？&lt;/p&gt;
&lt;p&gt;个人认为如果你同时具备以下条件，可以报名：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;足够的决心。既然已经交钱了，就不要打水漂，也不建议报退费的班给自己留后路&lt;/li&gt;
&lt;li&gt;足够的资金。线上培训班几大千起步，我这个8k可以参考。线下会更贵，但是有老师线下辅导&lt;/li&gt;
&lt;li&gt;无法填补信息差。信息差可能会导致无法自我规划学习计划。如果是信息差导致报班，我建议多看看别人的学习计划，b站成功的up案例。最大的信息来源一定是学校官网&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你具有时间和精力，或者资金不足，或者具有一定的学习力，大可不必报班。这个时候制定适合自己的学习计划尤为重要。&lt;/p&gt;

&lt;h2 class="relative group"&gt;初试
 &lt;div id="初试" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%88%9d%e8%af%95" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;在初试结束之前，只需要准备初试即可&lt;/strong&gt;。一般来说复试内容在初试完后再准备即可。&lt;br&gt;
准备初试既学习的核心，也是最消耗精力最卷的环节，成败在此。&lt;/p&gt;

&lt;h3 class="relative group"&gt;如何准备初试——学习计划
 &lt;div id="如何准备初试学习计划" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%a6%82%e4%bd%95%e5%87%86%e5%a4%87%e5%88%9d%e8%af%95%e5%ad%a6%e4%b9%a0%e8%ae%a1%e5%88%92" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;准备初试，你需要一个适合自己的学习计划，并全身心的投入其中。&lt;/p&gt;
&lt;p&gt;学习计划是非常非常非常重要的，你需要确定先审视自己，自己的在优缺点是什么，环境是什么，哪门科不了解，哪门科又需要长时间的学习。&lt;/p&gt;
&lt;p&gt;每个人情况情况是不一样的，先讲讲我的学习计划，可以参考我的定制计划的方式，和学习方式。因为学习压力没有那么大（相比全日制），非常建议从7、8月份开始准备学习，过晚时间不够，过早容易懈怠，整个学习时间为5-6个月。但是如果你的英语确实有够烂，再多提前几个月去背单词。&lt;/p&gt;
&lt;p&gt;我的个人条件如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;时间不够充足，经常加班到晚上9点，周末一般都是双休。上下班地铁，双向共2小时。&lt;/li&gt;
&lt;li&gt;数学基本忘精光，逻辑从来没碰过，语文写作从小稀烂，英语词汇量还行，阅读没问题，英语写作完全不会。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;结合学习压力和个人条件，我需要这样制定计划：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;背单词。英语肯定是最花时间的，需要长时间持续性地背单词，在所有学习开始之前，背英二单词。因为早上记忆力最好，我每天在上班的地铁上背单词，周末早上也背单词。时间从8月份开始，一直到初试。&lt;/li&gt;
&lt;li&gt;英语阅读。其实只要把单词背下来，阅读很容易理解。英二的长难句并不多，能认识所有单词，阅读肯定没问题。但是个人比较爱好英语阅读，我计划了每天的英语原著阅读。不能说用处大，也不是完全没用，就当是辅助考试。重要的是，爱好更容易培养习惯。&lt;/li&gt;
&lt;li&gt;数学和逻辑，其实学习难度差不多，我虽然完全不会，但是学起来较为简单（知识点是简单的，考试是另一个样子这里先不谈）。我会在下班晚上20:00 -22:00点学习数学或逻辑（主要是听课，没有课的可以自己买资料学习），这个也是长时间学习，前期学习知识点，后期练题。因为不是每天都能正常下班，所以有时候需要利用下班地铁时间和中午1小时午休时间，把数学和逻辑的每日学习任务完成。（千万不能拖，拖一次就会累积很多）&lt;/li&gt;
&lt;li&gt;中文写作。在考前一个月，也就是11月底12月初准备即可。看下作文资料，自己试着写，不用想的要多完美，主要是把主题含义表达清楚。相信我，考试的时候你绝对是用的狂草在写作。&lt;/li&gt;
&lt;li&gt;英语写作。在考前一个月，准备即可。切记，千万千万不要背范文，不仅非常难背，而且根本无法套用。考前背2-3个模板即可，用模板联系历年真题，只需要替换单词即可，不会发生提笔一个单词写不出的情况。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以，我的周计划如下：



&lt;img src="https://lastdba.com/img/csdn/8b233995a8b3.png" alt="在这里插入图片描述" /&gt;&lt;/p&gt;
&lt;p&gt;这样安排感觉比较合适自己，既充分利用了碎片化时间，也充分利用了周末。前3-4个月打基础，英语的基础是单词，逻辑和数据的基础是知识点，每周工作日的学习，可以在周末汇聚复习和练习。后1-1.5个月主要就是写作和找做真题的感觉。&lt;/p&gt;

&lt;h3 class="relative group"&gt;推荐的学习资料
 &lt;div id="推荐的学习资料" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%8e%a8%e8%8d%90%e7%9a%84%e5%ad%a6%e4%b9%a0%e8%b5%84%e6%96%99" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;英语：张剑黄皮书。买单词本和真题本即可。百词斩，爱阅读，公众号：考研英语外刊。&lt;/li&gt;
&lt;li&gt;英语写作：不推荐任何可以购买的写作资料书。用通用模板，不要背范文。&lt;/li&gt;
&lt;li&gt;数学：《陈剑数学高分指南》，历年真题解析&lt;/li&gt;
&lt;li&gt;逻辑：中公《逻辑轻松通关》，历年真题解析&lt;/li&gt;
&lt;li&gt;管综写作：找个销量高的吧，都不是很好用。写作不用学太精&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;不要买练习题，直接买真题做&lt;/strong&gt;，现有的练习题质量跟真题完全比不了。英语不需要买练习题，直接买真题即可。数学和逻辑除了基础学习的一些自带练习题外，也不要买额外的练习题。我也做过一小段时间的数学练习题，很花时间，效果并不好。数学和逻辑主要还是要把基础打好，把知识点学齐，然后做真题看解析即可。总之，沉浸式学习时间（比如周末）只需要做真题，真题做近20年的即可，做完然后重新做一遍（20份真题，周末2天也就做2套，要2个多月才能做完一轮，重新做的时候前面的题已经忘的差不多了）。&lt;strong&gt;最近两年的2套真题一直都不要做，留着考前2周掐表自我模拟&lt;/strong&gt;。&lt;/p&gt;

&lt;h3 class="relative group"&gt;英语学习
 &lt;div id="英语学习" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%8b%b1%e8%af%ad%e5%ad%a6%e4%b9%a0" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;

&lt;h4 class="relative group"&gt;单词
 &lt;div id="单词" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%8d%95%e8%af%8d" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;早上雷打不动地背单词（在地铁上效果非常好···）。
百词斩——有些小伙伴喜欢用百词斩，我前期也在使用百词斩，但是我感觉效果不好，它是全量单词，背一年可能都循环不了一遍，前面背的早忘了，所以后期我没有用这个软件。
我个人强烈推荐我背单词的办法。&lt;/p&gt;
&lt;p&gt;每个人的单词量是不一样的，刚开始的时候，必须把所有单词全部过一遍（考研词汇大概5000个左右），把不认识的拎出来写在单词本上。由于拿着单词本在地铁上背会略显尴尬，所以我放在手机里。&lt;/p&gt;
&lt;p&gt;我专门有一个单词本相册：&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://lastdba.com/img/csdn/63e6fcbbd3e9.png" alt="在这里插入图片描述" /&gt;&lt;/p&gt;
&lt;p&gt;每次背的时候，点开，放大，相当于蒙住注释背单词。



&lt;img src="https://lastdba.com/img/csdn/63e6b5373162.png" alt="在这里插入图片描述" /&gt;&lt;/p&gt;
&lt;p&gt;这样循环背诵，刚开始我每天背2页，每天前进1页，后面每天背4页，每天前进4页。无论如何，循环背，背到蒙住注释就知道单词的含义。有些单词容易混淆的可以加在单词本里再拍照更新相册。&lt;/p&gt;
&lt;p&gt;在我初试前，这些单词我已经背了6、7遍了，基本上除了超纲单词，我没有不认识的。&lt;/p&gt;

&lt;h4 class="relative group"&gt;阅读
 &lt;div id="阅读" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e9%98%85%e8%af%bb" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;英语总分100分，阅读能力分数占比=完型填空10分+阅读理解40分+新题型阅读10分=60分。英语能力再烂不能烂阅读理解能力。我的阅读能力基本上都是靠每日的外刊阅读，比如 爱阅读、考研英语外刊 。每天花20分钟左右，学习压力也不大（其实主要是单词，单词认识，句子就好理解）。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;爱阅读：《爱看世界》外刊，每日一篇。在阅读计划-更多专辑-外刊-爱看世界，订阅每月的期刊，每日一篇。难度较低，适合初期阅读能力提升。&lt;/li&gt;
&lt;li&gt;微信公众号：考研英语外刊，每日一篇。每天都会更新，这个公众号做的很不错，非常推荐。只是这个难度比较高，适合后期挑战难度，如果看不太懂也没有关系，我有些也看不太明白，毕竟难度超了点。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;阅读就随着早上背单词看了就行，时间不够下班路上也可以看。&lt;/p&gt;
&lt;p&gt;长难句：英二的长难句并不多，有些小伙伴会专门花时间去学习长难句。如果你要专门学习长难句的话，特别推荐 刘晓燕长难句 的视频（视频网站搜一下就行，都是免费的），非常有趣，条理也很清晰，比较容易能坚持看完。而我，只看了刘晓燕长难句里的简单句，就没有继续看。因为，第一，我发现只要单词认识，句子基本都懂，第二，视频太长太多了，比较占用学习时间。&lt;/p&gt;

&lt;h4 class="relative group"&gt;写作
 &lt;div id="写作" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%86%99%e4%bd%9c" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;写作分为小作文（书信或通知，10分），大作文（材料分析文——柱状图饼状图分析，15分）&lt;/p&gt;
&lt;p&gt;再次提醒，不要背范文。考前我专门买了一本写作的书，背了10篇范文，真的很难很难很难背，而且难套用，范文背完，我第一次做英语写作题，毫不夸张我一个字都写不出来。&lt;/p&gt;
&lt;p&gt;我学习的培训课程里，对我来说最最有价值的，就是英语模板，我按照模板把历年的英语写作全部做了一遍，全部都能套用。要替换的单词不超过20个，会写简单句即可。模板如下：&lt;/p&gt;
&lt;p&gt;小作文模板——书信模板：&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Dear  Sir or Madam,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    I am an undergraduate who majos in Applied English in this/a university.I am writing this letter &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; the purpose of doing sth.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    1.It,first an formost,is my idea that not only ... but also
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    2.Then more importantly,so ... that...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    3.The last on I must point out is that 简单句,which could be accepted by the majority of 人/.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    So It is the very moment &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; me to &lt;span style="color:#66d9ef"&gt;do&lt;/span&gt; ...,And I am looking forward to your reply.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;                                                                                          yours truly,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;                                                                                            xxx.                                                                        &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;其中 doing sth包含：&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;1.感谢信:expressing my genuine gratitude &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; your kind help
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;2.建议信:making some suggestions concerning sth.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;3.投诉信:making my complaints concerning sth.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;4.祝贺信:show my sincere congratulations to you because 句子
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;5.道歉信:offer my sincere apology to you because 句子
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;6.邀请信:invite you to participate in 活动 on behalf of 某人/组织
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;7.通知信:have 某人 informed that 句子&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;书信模板各类信都可以套用。&lt;/p&gt;
&lt;p&gt;小作文除了书信，小概率可能考通知，通知的格式与书信不同       &lt;/p&gt;
&lt;p&gt;小作文模板——通知模板:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;                                               Notice
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    In an effort to &lt;span style="color:#66d9ef"&gt;do&lt;/span&gt; sth,I woud like to offer you some detailed information about it.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    The 活动 will be held in the school auditorium at &lt;span style="color:#ae81ff"&gt;7&lt;/span&gt; p.m.,next Saturday,December 28th and the requirements &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; sth. are listed as follows.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    主段内容同书信...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    If you have any questions,please feel free to send on email to 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;studentsunion@123.com or call 1234567.We are looking forward to your participation.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;大作文基本只有柱状图和饼状图的分析，图例只分为 比大小和比趋势 。比大小和比趋势只有首段不一样，后面2段是一样的。&lt;/p&gt;
&lt;p&gt; 大作文模板：&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    &lt;span style="color:#f92672"&gt;(&lt;/span&gt;比大小首段&lt;span style="color:#f92672"&gt;)&lt;/span&gt;The diagram clearly shows/illustrates/d that 句子/词组&lt;span style="color:#f92672"&gt;(&lt;/span&gt;the purposes of/attitudes toward/the proportions of&lt;span style="color:#f92672"&gt;)&lt;/span&gt; among participants/respondents in a certain college.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Based on the data offered,one can distinctly see that 对象1 ranks the first/highest among all the categories,accounting &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; 数据1.Next are 对象2 and 对象3 with 数据2 and
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;数据3 respectively ,while 对象4 only constitutes 数据4.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    &lt;span style="color:#f92672"&gt;(&lt;/span&gt;比趋势首段&lt;span style="color:#f92672"&gt;)&lt;/span&gt;The diagram clearly illustrates how 话题 changed during the past several years.Based on the data provided,one can distinctly see that the number of 对象1 rose/fell significantly/slightly/gradually from 数据 in 年 to 数据 in 年,while that the number of 对象2 experienced a gradual/significant increase/decrease during the same period,reaching 数据 in 年.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    From my standpoint,there are two fundamental factors that are responsible &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; this scence.To begin with,the first contributing factor is that 句子.In addition,another important factor that cannot be ignored is that 句子.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    In view of the analysis above,we can conclude that it is of little surprise to see this phenomenon in the current era.Therefore,it can be predicted that 名词词组/动词ing will still take up a large share in the future.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;作文不背模板靠自己写非常难，背模板拿个超高分数比较难，但是拿70-80%的分数是没问题的，而且前提投入基本为0，后期模板背好，自己把历年写作真题全部写一遍即可。&lt;/p&gt;

&lt;h3 class="relative group"&gt;数学学习、逻辑学习
 &lt;div id="数学学习逻辑学习" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%95%b0%e5%ad%a6%e5%ad%a6%e4%b9%a0%e9%80%bb%e8%be%91%e5%ad%a6%e4%b9%a0" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;

&lt;h4 class="relative group"&gt;数学题：
 &lt;div id="数学题" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%95%b0%e5%ad%a6%e9%a2%98" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;


&lt;img src="https://lastdba.com/img/csdn/e16c5ab94d30.png" alt="在这里插入图片描述" /&gt;&lt;/p&gt;

&lt;h4 class="relative group"&gt;逻辑题：
 &lt;div id="逻辑题" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e9%80%bb%e8%be%91%e9%a2%98" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;p&gt;


&lt;img src="https://lastdba.com/img/csdn/bc084fe7654f.png" alt="在这里插入图片描述" /&gt;&lt;/p&gt;
&lt;p&gt; 数学和逻辑都是选择题，没有什么好说的，前期主要学习知识点，后期需要提升做题速度。&lt;/p&gt;
&lt;p&gt;数学和逻辑的知识点非常多的，前期学习时间需要花3-4个月，每天学习2-3个小时，把知识点全部学会。知识点学完后拿真题练习看解析。最后1个月恰表练习，提高做题速度，数学做题时间不超过70分钟，逻辑做题时间不超过60分钟。&lt;/p&gt;

&lt;h3 class="relative group"&gt;中文写作学习
 &lt;div id="中文写作学习" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%b8%ad%e6%96%87%e5%86%99%e4%bd%9c%e5%ad%a6%e4%b9%a0" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;管综作文分为 论证有效性分析和论说文。&lt;/p&gt;
&lt;p&gt;论证有效性分析就是抬杠，找本写作书看看，并不难写。论证有效性分析需要在一大段材料找找出材料推理问题所在，写的时候找4个问题点即可。没有学过的话可能找不太到，学过后找4个问题点还是比较简单的。不用把问题写的特别明确，比如这个问题是以偏概全、偷换概念、非黑即白等等，把它写成”xxx推不出xxx“即可。&lt;/p&gt;
&lt;p&gt;论说文主要是对一小段材料做出自己的理解。论说文需要注意 主题 别写歪了，刚开始找主题也挺难的，多看几个论说文材料，找找感觉，基本能找到主题在哪。论说文一般写作结构为总分总，建议以 “个人-企业-国家”为思路来写（总-个人-企业-国家-总，共5段），找几个自己拿手的材料往里面套用。一些同学觉得自己作文能力强，会以其他思路来写议论文，我个人当然是非常佩服的。因为写作时间是非常有限的，除非天赋异禀思路非常快，不然还是建议用套路来写，&lt;strong&gt;把作文写完，是第一要务&lt;/strong&gt;。&lt;/p&gt;

&lt;h3 class="relative group"&gt;考试时的做题规划
 &lt;div id="考试时的做题规划" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%80%83%e8%af%95%e6%97%b6%e7%9a%84%e5%81%9a%e9%a2%98%e8%a7%84%e5%88%92" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;是的，做题也得规划，100%相信我，管综你做不完。管综是我平生考过的，时间最仓促的考试，你知道这些题你会，但是你没有时间去运算。&lt;/p&gt;
&lt;p&gt;初试考试时，上午管综3小时，下午英语3小时。&lt;/p&gt;
&lt;p&gt;英语考试时长3小时，内容较少，也没有需要反复演练的点，做题时间是完全足够的。我当时考完时间还剩了50分钟，提前交卷走了。&lt;/p&gt;
&lt;p&gt;管综3小时，完全不够。我在考前自我模拟的时候，基本都是4小时才做完的。考试时，数学只要有做题时间超过3分钟，直接跳过，感觉运算量大，直接跳过。逻辑题，根本无法用平时做题的思路去做，快速读完题（逻辑题文字巨多）看选项，感觉对的就勾上，需要运算的逻辑题暂时放弃，后面有时间在做。写作题看完题目直接写，能写多快写多快（2篇写作总共不能超过1小时），每省2分钟，就可能拯救一道选择题。&lt;/p&gt;
&lt;p&gt;选择题可以不用做完（答题卡要涂完哈），但是写作一定要写完，所以做题顺序很重要。很多人一般上来都直接写作文，然后做选择题。我是先做数学题，然后写作文，然后逻辑题。反正总之，不要把写作放在最后做。真实考试时，两篇作文完成时间不能超过55分钟，总共1500字，还要阅读材料和构思，去做一次就知道时间是多么不够。&lt;/p&gt;
&lt;p&gt;最后20分钟，涂答题卡，涂完再继续做题。&lt;/p&gt;

&lt;h2 class="relative group"&gt;复试
 &lt;div id="复试" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%a4%8d%e8%af%95" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;复试的基本信息
 &lt;div id="复试的基本信息" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%a4%8d%e8%af%95%e7%9a%84%e5%9f%ba%e6%9c%ac%e4%bf%a1%e6%81%af" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;如果你如愿过了国家线或者学院自划线，那么你已经完成了90%的进度。剩下10%既复试。复试也是有淘汰率要求的（国家强制要求），一般在淘汰率在70-80%左右。这个淘汰率一定存在，所以每年一定有人复试被刷，如果你不准备，那么极有可能就是你。讲个笑话，我复试四川大学被刷~&lt;/p&gt;
&lt;p&gt;复试时间：每年3月中旬到3月底&lt;/p&gt;
&lt;p&gt;成绩公布时间：3月中旬&lt;/p&gt;
&lt;p&gt;考试内容：英语口语，专业课，综合面试，政治（川大政治开卷，不用准备，武大政治闭卷笔试···）&lt;/p&gt;
&lt;p&gt;疫情以后复试都是网络面试，没有笔试环境，专家提问学习回答的模式。&lt;/p&gt;
&lt;p&gt;也就是说你有3个月的时间来准备复试。而恰巧初试考完是12月底，加上成绩还没出，再加上2月份过年，其实大部分人都是成绩公布的时候开始准备。已我这个反面教材为例，我是3月21日接到复试通知，复试时间是3月27日，我就准备了6天时间，其中还要考英语口语和我从没接触过的工程管理···，所以很尴尬，考官英文我一个没答上来，专业课题目一个没答上来，复试被刷。&lt;/p&gt;

&lt;h3 class="relative group"&gt;网上调剂
 &lt;div id="网上调剂" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%bd%91%e4%b8%8a%e8%b0%83%e5%89%82" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;当我知道四川大学复试没通过后，我的情绪跌入谷底。但是，柳暗花明又一村，调剂是我的救命稻草，当我在找调剂学校时，发现了武汉大学。&lt;/p&gt;
&lt;p&gt;研招网专门有个调剂窗口，给予复试被刷的同学再3次面试的机会。调剂可以填3个志愿，也就是可以填3个学校。由于每个学校复试时间复试要求都不一样，全部准备是很难的。我主要就是准备武汉大学的调剂。调剂当然也是要复试的，其实就是没有招满学生的院校把复试再走一遍，给那些首批没有录取上的同学再一次的机会。&lt;/p&gt;
&lt;p&gt;调剂窗口：3月底到4月初&lt;/p&gt;

&lt;h3 class="relative group"&gt;如何准备复试？
 &lt;div id="如何准备复试" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%a6%82%e4%bd%95%e5%87%86%e5%a4%87%e5%a4%8d%e8%af%95" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;复试也是非常卷的，跟我一样懒的人不会在少数···但是无论如何，已经付出了大半年，不能就这么打水漂了（我是差点真打水漂了···）。像我这种非专业学生，复试最难的就是英语口语和专业课。从成绩公布到复试，大概只有1周时间来准备（还要上班！），所以从头学肯定是来不及的，以我的经验，下面的学习办法的重要性依次递减&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;找学长学姐要历年复试资料（低调，复试资料外传是违规的）和老师上课资料。找找有没有人认识的在那个院校的，或者贴吧找组织，找群&lt;/li&gt;
&lt;li&gt;B站搜 考研复试常问的问题。把问题总结总结，背一背。&lt;/li&gt;
&lt;li&gt;买学院推荐的参考书（一般是教学资料）。很厚，看不完。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最后最重要的一点，模拟复试。把可能问的英语问题，专业问题，综合面试问题总结出来，找个小伙伴当老师模拟面试。&lt;/p&gt;
&lt;p&gt;还有一些其他复试要求，关注学院动态和邮箱即可。比如分数占比，面试流程，双机位，面试时间，材料准备等等。&lt;/p&gt;

&lt;h2 class="relative group"&gt;最后
 &lt;div id="最后" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%9c%80%e5%90%8e" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;22年考研初试国家线是185，我初试成绩210（英语80，管综130）。附上我的复试通过通知^_^



&lt;img src="https://lastdba.com/img/csdn/afd22229a49a.png" alt="在这里插入图片描述" /&gt;&lt;/p&gt;
&lt;p&gt;祝被社会毒打仍不死心的 打工人学子，考研一切顺利，上岸！！！&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;</content:encoded></item><item><title>HikariCP连接池初识</title><link>https://lastdba.com/2024/08/12/hikaricp%E8%BF%9E%E6%8E%A5%E6%B1%A0%E5%88%9D%E8%AF%86/</link><pubDate>Mon, 12 Aug 2024 00:00:00 +0000</pubDate><guid>https://lastdba.com/2024/08/12/hikaricp%E8%BF%9E%E6%8E%A5%E6%B1%A0%E5%88%9D%E8%AF%86/</guid><description>&lt;h2 class="relative group"&gt;HikariCP的简单介绍
 &lt;div id="hikaricp的简单介绍" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#hikaricp%e7%9a%84%e7%ae%80%e5%8d%95%e4%bb%8b%e7%bb%8d" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;hikari-光，hikariCP取义：像光一样轻和快的Connetion Pool。这个几乎只用java写的中间件连接池，极其轻量并注重性能，HikariCP目前已是SpringBoot默认的连接池，伴随着SpringBoot和微服务的普及，HikariCP 的使用也越来越多。&lt;/p&gt;</description><content:encoded>
&lt;h2 class="relative group"&gt;HikariCP的简单介绍
 &lt;div id="hikaricp的简单介绍" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#hikaricp%e7%9a%84%e7%ae%80%e5%8d%95%e4%bb%8b%e7%bb%8d" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;hikari-光，hikariCP取义：像光一样轻和快的Connetion Pool。这个几乎只用java写的中间件连接池，极其轻量并注重性能，HikariCP目前已是SpringBoot默认的连接池，伴随着SpringBoot和微服务的普及，HikariCP 的使用也越来越多。&lt;/p&gt;
&lt;p&gt;在hikariCP github首页就放了一篇性能对比：



&lt;img src="https://lastdba.com/img/csdn/3da983db32ca.png" alt="在这里插入图片描述" /&gt;
（https://github.com/brettwooldridge/HikariCP-benchmark）&lt;/p&gt;
&lt;p&gt;看上去好像是碾压一众数据库连接池中间件。然而这个性能对比的有点老了，而且没有阿里自研的国产巅峰连接池druid的性能对比。我稍微看了下&lt;a href="https://github.com/alibaba/druid" target="_blank" rel="noreferrer"&gt;druid&lt;/a&gt;的github首页，star比hikariCP还多一点，druid在功能性上明显比hikariCP强。至于两者的性能谁更好，还引发过&lt;a href="https://github.com/brettwooldridge/hikaricp/issues/232" target="_blank" rel="noreferrer"&gt;一次大佬间的口水战&lt;/a&gt;，目前没有看到有严格的性能对比报告。不过这不是我们这篇文章的重点···这篇文章只是为了稍微了解下hikariCP。&lt;/p&gt;

&lt;h2 class="relative group"&gt;几个连接池参数
 &lt;div id="几个连接池参数" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%87%a0%e4%b8%aa%e8%bf%9e%e6%8e%a5%e6%b1%a0%e5%8f%82%e6%95%b0" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;参数其实不多，挑几个重要的：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;参数&lt;/th&gt;
 &lt;th&gt;含义&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;minimumIdle&lt;/td&gt;
 &lt;td&gt;这个属性控制着HikariCP尝试在连接池中维持的空闲连接的最小数量。如果空闲连接的数量下降至此值以下，并且连接池中的总连接数少于maximumPoolSize，HikariCP将尽最大努力快速而高效地添加额外的连接。然而，为了达到最大性能和对高峰需求的响应性，我们推荐不设置这个值，而是让HikariCP充当一个固定大小的连接池。默认值：与maximumPoolSize相同。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;maximumPoolSize&lt;/td&gt;
 &lt;td&gt;此属性控制池所能达到的最大大小，包括空闲和正在使用的连接。基本上，此值将决定到数据库后端的实际连接数的上限。合理的值最好由您的执行环境确定。当池达到此大小且没有可用的空闲连接时，调用 getConnection() 将会阻塞，直至 connectionTimeout 毫秒后超时。默认值：10&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;maxLifetime&lt;/td&gt;
 &lt;td&gt;此属性控制池中连接的最大生命周期。正在使用中的连接永远不会被弃用，只有当它被关闭时才会被移除。为了避免池中发生大规模的连接消失，该属性会对每个连接适用轻微的负衰减。我们强烈推荐设置此值，并且应该比任何数据库或基础设施强加的连接时间限制短几秒。值为0表示无最大生命周期（无限生命周期），当然，这受到idleTimeout设置的约束。允许的最小值是30000毫秒（30秒）。默认值：1800000（30分钟）。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;idleTimeout&lt;/td&gt;
 &lt;td&gt;此属性控制连接在池中允许空闲的最大时间。此设置仅在minimumIdle被定义为小于maximumPoolSize时适用。一旦池达到minimumIdle连接数，空闲连接不会被回收。连接是否被视为空闲并回收，其最大变化范围为+30秒，平均变化范围为+15秒。一个连接在此超时前永远不会被视为空闲并回收。值0表示空闲连接永远不会从池中移除。允许的最小值是10000毫秒（10秒）。默认值：600000（10分钟）。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;keepaliveTime&lt;/td&gt;
 &lt;td&gt;此属性控制 HikariCP 将多频繁地尝试保持连接active，以防止它因数据库或网络基础设施而超时。这个值必须小于 maxLifetime 的值。&amp;ldquo;keepalive&amp;quot;操作仅会发生在空闲连接上。允许的最小值是30000毫秒（30秒），但最理想的值是在几分钟的范围内。默认值：0（禁用）。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;keepaliveTime参数的设置应低于数据库空闲连接超时时间、TCP空闲连接超时时间以及一切其他设施的空闲超时时间。对于PostgreSQL来说，hikariCP的keepaliveTime参数应设置为小于PG库&lt;code&gt;idle_in_transaction_session_timeout&lt;/code&gt;的时间。&lt;/p&gt;
&lt;p&gt;很明显，maximumPoolSize代表连接到数据库中的最大连接数。当然一般来说，真实场景中数据库中的连接数不会一直保持maximumPoolSize，因为应用不可能从始至终都是最高负荷运行。即使经过一个请求高峰期，根据idleTimeout或者maxLifetime的设置，那些空闲的连接经过一段时间后应该被释放。为了保证数据库的可用性，这个值应该设置为比数据库最大连接数小一些。比如PostgreSQL数据库，maximumPoolSize参应设置为小于PG库的&lt;code&gt;max_connections&lt;/code&gt;。这个参数还有调优空间，我们下面会提及。&lt;/p&gt;
&lt;p&gt;minimumIdle是最小空闲连接数。例如，如果minimumIdle=100，数据库的active会话有10个，那么理论上数据库中的总连接数应该是100+10个。因为有可能有连接风暴的情况，真实的数据库连接应该比active+minimumIdle略多一点，但肯定小于maximumPoolSize。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;为什么数据库连接数远大于minimumIdle&lt;/em&gt;？&lt;/p&gt;
&lt;p&gt;理论上数据库总连接数只应该略大于minimumIdle，但是经过我实际观察连接池多节点的情况，哪怕数据库活跃连接只有10几个，数据库总连接数却远大于minimumIdle。观察pg_stat_activity的min(backend_start)、min(state_change)，基本保持在maxLifetime左右，说明连接回收是有作用的。看上去新请求总喜欢启用新连接，而不是直接拿已有的idle连接用。个人猜多节点部署是原因之一，每个节点minimumIdle很低，也可能存在某些组件上的节点请求要多一点，瞬时请求数超过了minimumIdle从而创建了新的连接。第二，这跟maxLifetime参数也有关系，maxLifetime的目的是为了旋转连接，释放那些一直在用的连接，这样就存在那些使用过的链接需要一段时间来释放，并且最好不要再使用了，以免延长释放周期。&lt;/p&gt;

&lt;h2 class="relative group"&gt;连接池大小设置
 &lt;div id="连接池大小设置" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%bf%9e%e6%8e%a5%e6%b1%a0%e5%a4%a7%e5%b0%8f%e8%ae%be%e7%bd%ae" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;连接数过多的影响
 &lt;div id="连接数过多的影响" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%bf%9e%e6%8e%a5%e6%95%b0%e8%bf%87%e5%a4%9a%e7%9a%84%e5%bd%b1%e5%93%8d" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;在数据库的世界中，“数据库连接数的增多，数据库性能都会一定的下降”。&lt;/p&gt;
&lt;p&gt;例如oracle的连接数对性能的影响，参考&lt;a href="https://www.youtube.com/watch?v=_C77sBcAtSQ" target="_blank" rel="noreferrer"&gt;这个视频&lt;/a&gt;。当资源配置、jdbc并发都不变的情况下，连接数从2048下降到1024个，请求响应时间下降一半；如果连接数调整到96个，响应时间下降几十倍！！&lt;/p&gt;

&lt;h3 class="relative group"&gt;连接数设置为多少才合适？
 &lt;div id="连接数设置为多少才合适" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%bf%9e%e6%8e%a5%e6%95%b0%e8%ae%be%e7%bd%ae%e4%b8%ba%e5%a4%9a%e5%b0%91%e6%89%8d%e5%90%88%e9%80%82" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;p&gt;Unless you have a database server that has 1000 cores, it is very unlikely that you really want a maximumPoolSize of 2000.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;除非你的数据库有1000C，不然你不应该有2000个连接。&lt;/p&gt;
&lt;p&gt;最初始的情况下，数据库连接数应设置为cpu数，这样就能达到cpu的最大性能模式。但是这不是真实的。因为数据库的消耗不仅在cpu，也在磁盘和网络（也有内存、但相对影响不大）。例如，磁盘的读写也需要时间，cpu需要等待磁盘返回数据才可以进行下一步动作。在IO等待的这段时间（有可能时间很长），cpu最好是不要闲着，而是给其他进程使用。所以，基于磁盘等设备的等待时间，数据库连接数最好是高于cpu个数。&lt;/p&gt;
&lt;p&gt;由于SSD等磁盘性能的提升，磁盘访问的速度是非常快的，也就是说IO等待时间下降，意味着连接数应该调整得更低。&lt;/p&gt;
&lt;p&gt;调低了不能压榨CPU，调太高数据库性能损耗，那么到底调整到多少合适呢？hikariCP给出了这么一个公式&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;connections = ((core_count * 2) + effective_spindle_count)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;其中core_count不应该计算超线程数；effective_spindle_count为主轴数，如果活动数据集完全被缓存，那么effective_spindle_count为零，随着缓存命中率的下降，它应该接近于实际的主轴数量。对应SSD还没有想过公式，不过可以肯定小于以上的最大值。当然这些都是理论值，实际情况要比这个更复杂，比如长连接问题，具体可参考&lt;a href="https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing" target="_blank" rel="noreferrer"&gt;连接池大小相关知识。&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;即使前端有10000个用户，连接池也不可能是10000个，即使是1000也太多了，需要一个更小的连接数，让其余的请求在连接池中等待，发挥数据库及其CPU的最佳性能才是最好的方式，参考连接数设置如上公式所示。&lt;/p&gt;

&lt;h2 class="relative group"&gt;fixed pool
 &lt;div id="fixed-pool" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#fixed-pool" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;fixed pool是HikariCP的作者Brett Wooldridge的一个理念，是为了解决连接风暴问题。在minimumIdle参数解释中已经提及fixed pool：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;为了达到最大性能和对高峰需求的响应性，我们推荐不设置minimumIdle，而是让HikariCP充当一个固定大小连接池（&lt;em&gt;fixed size&lt;/em&gt; connection pool）。默认值：与maximumPoolSize相同。&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;把minimumIdle=maximumPoolSize就是fixed size connection pool。minimumIdle的默认值就等于maximumPoolSize。&lt;/p&gt;
&lt;p&gt;其实早在2014年，Brett Wooldridge就提到了这个概念，参考&lt;a href="https://www.postgresql.org/message-id/DF286FBF-D1F5-4A10-88AD-EDD5D2AFAABD%40gmail.com" target="_blank" rel="noreferrer"&gt;PG社区邮件&lt;/a&gt;。这段话很重要，我将逐字翻译：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;根据我的经验，即使是维护最小空闲连接数的池，在响应突发需求时也是有问题的。如果你有一个最大30个连接的池，并且有一个最小10个空闲连接的目标，突发的需求需要20个连接意味着连接池可以立即满足10个，但随后要尝试在应用程序申请连接时间到达connectionTimeout之前建立另外10个连接。这反过来在数据库上产生了突发需求，不仅减慢了建立连接本身，也减慢了实际上可能会将连接返回给连接池的事务。&lt;/p&gt;
&lt;p&gt;现在，如果你的峰值是100个连接，你的中位数是50个，这并不重要。但我知道不少工作负载的峰值是1000，中位数是25，在这种情况下你会想要逐渐减少空闲连接。&lt;/p&gt;
&lt;p&gt;最终我们采用了一个maxPoolSize + minIdle模型，默认情况它俩相等（fixed pool）。&lt;/p&gt;
&lt;p&gt;虽然我不怀疑存在这样的工作负载（1000个活动连接），如果有人真的这么做了，我很想听听他们的理由。除非他们有超过128个CPU核和固态存储，否则基本上就是在白费功夫。&lt;/p&gt;
&lt;p&gt;这也意味着，即使连接池的大小是固定的，你也想要旋转（rotate in and out）实际的会话，这样它们就不会无限期地挂着最大虚拟内存。&lt;/p&gt;
&lt;p&gt;我们确实是这样做，有一个maxLifeTime设置来旋转这些连接。&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;在真实场景中，fixed pool对连接风暴影响的保护是可见的。fixed pool下，数据库的瞬时active连接突增，数据库的idle链接数下降，但数据库的总连接数不变，请求响应耗时影响不大。如果把maximumPoolSize设置为比minimumIdle大的一个值，连接风暴会造成瞬间产生很多新会话，而新会话的连接是非常消耗资源的，这明显增加了请求的响应时间。&lt;/p&gt;

&lt;h2 class="relative group"&gt;连接泄露案例
 &lt;div id="连接泄露案例" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%bf%9e%e6%8e%a5%e6%b3%84%e9%9c%b2%e6%a1%88%e4%be%8b" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;由于本人不是连接池的专家，这里只是把最近找到的连接泄露资料小小汇总下。&lt;/p&gt;
&lt;p&gt;连接泄露有如下现象：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;“Connection is not available” exception。连接泄露，连接打满或者数据库因为active会话过度响应不过来了，新的请求会因为超过&lt;code&gt;connectionTimeout&lt;/code&gt;时间而报错&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Growth of active connections。数据库监控可以明显看到活动会话上涨&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Application logs。应用日志也可以看到很多连接请求，包括活跃会话信息&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Database views and logs。&lt;code&gt;pg_stat_activity&lt;/code&gt;可以看到所有的会话状态和具体的sql，以及在log中可以看到新连接认证登录信息&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;HikariCP leak detection。需要打开&lt;code&gt;leakDetectionThreshold&lt;/code&gt;，HikariCP可以检测链接泄露，这个参数默认是关闭的&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对于定位连接泄露，应该&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;检查应用日志，特别是问题刚发生的时间点&lt;/li&gt;
&lt;li&gt;合理的监控系统&lt;/li&gt;
&lt;li&gt;善于debug、trace等hikariCP设置&lt;/li&gt;
&lt;li&gt;设置&lt;code&gt;leakDetectionThreshold&lt;/code&gt;参数&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可能的原因：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Misuse of streaming responses;&lt;/li&gt;
&lt;li&gt;Misuse of raw connections;&lt;/li&gt;
&lt;li&gt;Prolonged operations within &lt;code&gt;@Transactional&lt;/code&gt; method (such as network invocation).&lt;/li&gt;
&lt;li&gt;配置错误，&lt;a href="https://mkyong.com/jdbc/hikaripool-1-connection-is-not-available-request-timed-out-after-30002ms/" target="_blank" rel="noreferrer"&gt;参考&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;vitual thread，&lt;a href="https://github.com/brettwooldridge/HikariCP/issues/2151" target="_blank" rel="noreferrer"&gt;参考&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;References
 &lt;div id="references" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#references" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/brettwooldridge/HikariCP" target="_blank" rel="noreferrer"&gt;https://github.com/brettwooldridge/HikariCP&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/brettwooldridge/HikariCP/issues/2148" target="_blank" rel="noreferrer"&gt;https://github.com/brettwooldridge/HikariCP/issues/2148&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing" target="_blank" rel="noreferrer"&gt;https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blogs.oracle.com/opal/post/always-use-connection-pools" target="_blank" rel="noreferrer"&gt;https://blogs.oracle.com/opal/post/always-use-connection-pools&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://mkyong.com/jdbc/hikaripool-1-connection-is-not-available-request-timed-out-after-30002ms/" target="_blank" rel="noreferrer"&gt;https://mkyong.com/jdbc/hikaripool-1-connection-is-not-available-request-timed-out-after-30002ms/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://medium.com/@eremeykin/how-to-deal-with-hikaricp-connection-leaks-part-1-1eddc135b464" target="_blank" rel="noreferrer"&gt;https://medium.com/@eremeykin/how-to-deal-with-hikaricp-connection-leaks-part-1-1eddc135b464&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://medium.com/@eremeykin/how-to-deal-with-hikaricp-connection-leaks-part-2-847a9629627f" target="_blank" rel="noreferrer"&gt;https://medium.com/@eremeykin/how-to-deal-with-hikaricp-connection-leaks-part-2-847a9629627f&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>pg逻辑复制的一些特性</title><link>https://lastdba.com/2024/08/12/pg%E9%80%BB%E8%BE%91%E5%A4%8D%E5%88%B6%E7%9A%84%E4%B8%80%E4%BA%9B%E7%89%B9%E6%80%A7/</link><pubDate>Mon, 12 Aug 2024 00:00:00 +0000</pubDate><guid>https://lastdba.com/2024/08/12/pg%E9%80%BB%E8%BE%91%E5%A4%8D%E5%88%B6%E7%9A%84%E4%B8%80%E4%BA%9B%E7%89%B9%E6%80%A7/</guid><description>&lt;p&gt;之前已经写过一篇比较详细的&lt;a href="https://blog.csdn.net/qq_40687433/article/details/129291207?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170082845616800211565759%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&amp;amp;request_id=170082845616800211565759&amp;amp;biz_id=0&amp;amp;utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-129291207-null-null.nonecase&amp;amp;utm_term=%E9%80%BB%E8%BE%91%E5%A4%8D%E5%88%B6&amp;amp;spm=1018.2226.3001.4450" target="_blank" rel="noreferrer"&gt;关于逻辑复制的文章&lt;/a&gt;了，这里不会再重复描述一些基础知识。不过难免有些知识点有遗漏，最近发一些有意思的逻辑复制特性。&lt;/p&gt;

&lt;h2 class="relative group"&gt;replica identity与old/new值
 &lt;div id="replica-identity与oldnew值" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#replica-identity%e4%b8%8eoldnew%e5%80%bc" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;replica identity是用来在逻辑复制期间标识一行数据的。
上面这句话当然没有问题，但是没有解释old和new数据的变化。&lt;/p&gt;</description><content:encoded>&lt;p&gt;之前已经写过一篇比较详细的&lt;a href="https://blog.csdn.net/qq_40687433/article/details/129291207?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170082845616800211565759%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&amp;amp;request_id=170082845616800211565759&amp;amp;biz_id=0&amp;amp;utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-129291207-null-null.nonecase&amp;amp;utm_term=%E9%80%BB%E8%BE%91%E5%A4%8D%E5%88%B6&amp;amp;spm=1018.2226.3001.4450" target="_blank" rel="noreferrer"&gt;关于逻辑复制的文章&lt;/a&gt;了，这里不会再重复描述一些基础知识。不过难免有些知识点有遗漏，最近发一些有意思的逻辑复制特性。&lt;/p&gt;

&lt;h2 class="relative group"&gt;replica identity与old/new值
 &lt;div id="replica-identity与oldnew值" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#replica-identity%e4%b8%8eoldnew%e5%80%bc" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;replica identity是用来在逻辑复制期间标识一行数据的。
上面这句话当然没有问题，但是没有解释old和new数据的变化。&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;DEFAULT&lt;/code&gt;
Records the old values of the columns of the primary key, if any. This is the default for non-system tables.
&lt;code&gt;USING INDEX&lt;/code&gt; index_name
Records the old values of the columns covered by the named index, that must be unique, not partial, not deferrable, and include only columns marked &lt;code&gt;NOT NULL&lt;/code&gt;. If this index is dropped, the behavior is the same as &lt;code&gt;NOTHING&lt;/code&gt;.
&lt;code&gt;FULL&lt;/code&gt;
Records the old values of all columns in the row.
&lt;code&gt;NOTHING&lt;/code&gt;
Records no information about the old row. This is the default for system tables.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;pg官方文档对于replica identity甚至只解释了old值的情况，例如nothing不复制update/delete都没解释，足见old值的重要性。&lt;/p&gt;
&lt;p&gt;创建一个复制链路：&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; pg_create_logical_replication_slot(&lt;span style="color:#e6db74"&gt;&amp;#39;pubtestlzl2&amp;#39;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#39;test_decoding&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pg_recvlogical &lt;span style="color:#f92672"&gt;-&lt;/span&gt;d lzldb &lt;span style="color:#75715e"&gt;--slot=pubtestlzl2 --start -f recv.sql &amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;test_decoding的复制链路正常模拟&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;--replica identity默认是d：有主键时用主键；没有主键时为nothing，无法复制update和delete
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;M&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;create&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;table&lt;/span&gt; lzltest(a bigint &lt;span style="color:#66d9ef"&gt;primary&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;key&lt;/span&gt;,b varchar(&lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;),&lt;span style="color:#66d9ef"&gt;c&lt;/span&gt; varchar(&lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;));
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;CREATE&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;TABLE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;M&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;insert&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;into&lt;/span&gt; lzltest &lt;span style="color:#66d9ef"&gt;values&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#39;bbbbbb&amp;#39;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#39;ccccccccc&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;INSERT&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;M&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;update&lt;/span&gt; lzltest &lt;span style="color:#66d9ef"&gt;set&lt;/span&gt; b&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;b&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;UPDATE&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;recvlogical输出&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;table&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt;.lzltest: &lt;span style="color:#66d9ef"&gt;INSERT&lt;/span&gt;: a[bigint]:&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; b[character varying]:&lt;span style="color:#e6db74"&gt;&amp;#39;bbbbbb&amp;#39;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;c&lt;/span&gt;[character varying]:&lt;span style="color:#e6db74"&gt;&amp;#39;ccccccccc&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;table&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt;.lzltest: &lt;span style="color:#66d9ef"&gt;UPDATE&lt;/span&gt;: a[bigint]:&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; b[character varying]:&lt;span style="color:#e6db74"&gt;&amp;#39;b&amp;#39;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;c&lt;/span&gt;[character varying]:&lt;span style="color:#e6db74"&gt;&amp;#39;ccccccccc&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;replica identity为default，更新非主键字段，所有字段只有new值&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;M&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;update&lt;/span&gt; lzltest &lt;span style="color:#66d9ef"&gt;set&lt;/span&gt; a&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;111&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;UPDATE&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;table&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt;.lzltest: &lt;span style="color:#66d9ef"&gt;UPDATE&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;old&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;key&lt;/span&gt;: a[bigint]:&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&lt;/span&gt;tuple: a[bigint]:&lt;span style="color:#ae81ff"&gt;111&lt;/span&gt; b[character varying]:&lt;span style="color:#e6db74"&gt;&amp;#39;bb&amp;#39;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;c&lt;/span&gt;[character varying]:&lt;span style="color:#e6db74"&gt;&amp;#39;ccccccccc&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;replica identity为default，更新主键时，解析出了主键标识的old和new值，其他字段只有new值&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;M&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;alter&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;table&lt;/span&gt; lzltest replica &lt;span style="color:#66d9ef"&gt;identity&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;full&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;ALTER&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;TABLE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;M&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;update&lt;/span&gt; lzltest &lt;span style="color:#66d9ef"&gt;set&lt;/span&gt; b&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;b&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;UPDATE&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;table&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt;.lzltest: &lt;span style="color:#66d9ef"&gt;UPDATE&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;old&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;key&lt;/span&gt;: a[bigint]:&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; b[character varying]:&lt;span style="color:#e6db74"&gt;&amp;#39;b&amp;#39;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;c&lt;/span&gt;[character varying]:&lt;span style="color:#e6db74"&gt;&amp;#39;ccccccccc&amp;#39;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&lt;/span&gt;tuple: a[bigint]:&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; b[character varying]:&lt;span style="color:#e6db74"&gt;&amp;#39;b&amp;#39;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;c&lt;/span&gt;[character varying]:&lt;span style="color:#e6db74"&gt;&amp;#39;ccccccccc&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;replica identity设置为full，保留整行数据的old和new值&lt;/p&gt;
&lt;p&gt;无论是default（主键）还是full模式，都会记录所有字段的信息，区别在于是否有old数据。default时：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;insert：本身是new数据，当然没有old值，会记录new值的所有字段&lt;/li&gt;
&lt;li&gt;update：记录所有字段的new值，&lt;strong&gt;只有标识字段才有old值（如果有更新标识字段）&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;delete：本身是old数据，不一定记录所有字段。同样适用&lt;em&gt;只有标识字段才有old值&lt;/em&gt;，只记录标识位。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;总结：当replica identity为default时，无论什么操作（INSERT,UPDATE,DELTE)，只要是old数据，只记录标识字段；只要是new数据，记录所有字段&lt;/strong&gt;。
把default修改为full时，解析出来的日志量差别不会特别大，因为new数据永远是所有字段，（不考虑&lt;em&gt;全是&lt;/em&gt;delete的场景下）full解析出的日志量小于default时的两倍。&lt;/p&gt;

&lt;h2 class="relative group"&gt;pgoutput不能peek
 &lt;div id="pgoutput不能peek" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#pgoutput%e4%b8%8d%e8%83%bdpeek" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;用pgoutput去创建一个复制槽&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; pg_create_logical_replication_slot(&lt;span style="color:#e6db74"&gt;&amp;#39;pubtestlzl&amp;#39;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#39;pgoutput&amp;#39;&lt;/span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;然后去peek或者接收，都失败&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; pg_logical_slot_peek_changes(&lt;span style="color:#e6db74"&gt;&amp;#39;pubtestlzl&amp;#39;&lt;/span&gt;,&lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;,&lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pg_recvlogical &lt;span style="color:#f92672"&gt;-&lt;/span&gt;d lzldb &lt;span style="color:#75715e"&gt;--slot=pubtestlzl --start -f recv.sql &amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pg_recvlogical: error: could not send replication command &lt;span style="color:#e6db74"&gt;&amp;#34;START_REPLICATION SLOT &amp;#34;&lt;/span&gt;pubtestlzl&lt;span style="color:#e6db74"&gt;&amp;#34; LOGICAL 0/0&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; ERROR: client sent proto_version&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; but we only support protocol &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; or higher
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;CONTEXT: slot &lt;span style="color:#e6db74"&gt;&amp;#34;pubtestlzl&amp;#34;&lt;/span&gt;, output plugin &lt;span style="color:#e6db74"&gt;&amp;#34;pgoutput&amp;#34;&lt;/span&gt;, in the startup callback
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pg_recvlogical: disconnected; waiting &lt;span style="color:#ae81ff"&gt;5&lt;/span&gt; seconds to try again&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;不能peek或pg_recvlogical去接收pgoutput的复制槽。由于pgoutput是发布订阅的output plugin，这个plugin不能人工去peek或接收···&lt;/p&gt;

&lt;h2 class="relative group"&gt;发布订阅可以不在pg-pg之间
 &lt;div id="发布订阅可以不在pg-pg之间" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%8f%91%e5%b8%83%e8%ae%a2%e9%98%85%e5%8f%af%e4%bb%a5%e4%b8%8d%e5%9c%a8pg-pg%e4%b9%8b%e9%97%b4" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;create publication&lt;/code&gt;、&lt;code&gt;create subscription&lt;/code&gt;都是pg内部的命令，也可以用他们来创建pg库之间的链路。
三方软件同样可以使用创建发布，并模拟订阅并创建复制槽。这样比直接创建复制槽要更好，因为可以通过发布管理复制表。&lt;/p&gt;

&lt;h2 class="relative group"&gt;toast和逻辑解析
 &lt;div id="toast和逻辑解析" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#toast%e5%92%8c%e9%80%bb%e8%be%91%e8%a7%a3%e6%9e%90" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;发送toast的字段不会被解析！也就是说整行数据可能只有一部分会传递出来（toast字段本身没有更新的情况下）
正常解析会解析所有字段：&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;--创建一个test-coding的复制槽
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; pg_create_logical_replication_slot(&lt;span style="color:#e6db74"&gt;&amp;#39;logical_dest&amp;#39;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#39;test_decoding&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pg_create_logical_replication_slot 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; (logical_dest,&lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A80040E0)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;row&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;--创建一个小字段的表
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;create&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;table&lt;/span&gt; test1(a int &lt;span style="color:#66d9ef"&gt;primary&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;key&lt;/span&gt;,b varchar(&lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;),&lt;span style="color:#66d9ef"&gt;c&lt;/span&gt; varchar(&lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;));
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;CREATE&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;TABLE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;select&lt;/span&gt;&lt;span style="color:#f92672"&gt;*&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; pg_replication_slots;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; slot_name &lt;span style="color:#f92672"&gt;|&lt;/span&gt; plugin &lt;span style="color:#f92672"&gt;|&lt;/span&gt; slot_type &lt;span style="color:#f92672"&gt;|&lt;/span&gt; datoid &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;database&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;temporary&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; active &lt;span style="color:#f92672"&gt;|&lt;/span&gt; active_pid &lt;span style="color:#f92672"&gt;|&lt;/span&gt; xmin &lt;span style="color:#f92672"&gt;|&lt;/span&gt; catalog_xmin &lt;span style="color:#f92672"&gt;|&lt;/span&gt; restart_lsn &lt;span style="color:#f92672"&gt;|&lt;/span&gt; confirmed_flush_lsn &lt;span style="color:#f92672"&gt;|&lt;/span&gt; wal_status &lt;span style="color:#f92672"&gt;|&lt;/span&gt; safe_wal_size 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;--------------+---------------+-----------+--------+----------+-----------+--------+------------+--------+--------------+--------------+---------------------+------------+---------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; logical_dest &lt;span style="color:#f92672"&gt;|&lt;/span&gt; test_decoding &lt;span style="color:#f92672"&gt;|&lt;/span&gt; logical &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;418679&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; lzldb &lt;span style="color:#f92672"&gt;|&lt;/span&gt; f &lt;span style="color:#f92672"&gt;|&lt;/span&gt; f &lt;span style="color:#f92672"&gt;|&lt;/span&gt; [&lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;] &lt;span style="color:#f92672"&gt;|&lt;/span&gt; [&lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;] &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483335&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A80040A8 &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A80040E0 &lt;span style="color:#f92672"&gt;|&lt;/span&gt; reserved &lt;span style="color:#f92672"&gt;|&lt;/span&gt; [&lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;row&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;insert&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;into&lt;/span&gt; test1 &lt;span style="color:#66d9ef"&gt;values&lt;/span&gt; (&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#39;qwer&amp;#39;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#39;qwer&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;INSERT&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Time: &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;.&lt;span style="color:#ae81ff"&gt;915&lt;/span&gt; ms
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; pg_logical_slot_peek_changes(&lt;span style="color:#e6db74"&gt;&amp;#39;logical_dest&amp;#39;&lt;/span&gt;,&lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;,&lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; lsn &lt;span style="color:#f92672"&gt;|&lt;/span&gt; xid &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;data&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;--------------+-----------+--------------------------------------------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A8004C78 &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483335&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;BEGIN&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483335&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A80103E8 &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483335&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;COMMIT&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483335&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A8018B30 &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483369&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;BEGIN&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483369&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A8018B30 &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483369&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;table&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt;.test1: &lt;span style="color:#66d9ef"&gt;INSERT&lt;/span&gt;: a[integer]:&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; b[character varying]:&lt;span style="color:#e6db74"&gt;&amp;#39;qwer&amp;#39;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;c&lt;/span&gt;[character varying]:&lt;span style="color:#e6db74"&gt;&amp;#39;qwer&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A8018C50 &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483369&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;COMMIT&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483369&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;(&lt;span style="color:#ae81ff"&gt;5&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;rows&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;--insert被解析，包含所有字段
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;update&lt;/span&gt; test1 &lt;span style="color:#66d9ef"&gt;set&lt;/span&gt; b&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;zxcv&amp;#39;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;where&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;c&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;qwer&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;UPDATE&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Time: &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;.&lt;span style="color:#ae81ff"&gt;005&lt;/span&gt; ms
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; pg_logical_slot_peek_changes(&lt;span style="color:#e6db74"&gt;&amp;#39;logical_dest&amp;#39;&lt;/span&gt;,&lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;,&lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; lsn &lt;span style="color:#f92672"&gt;|&lt;/span&gt; xid &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;data&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;--------------+-----------+--------------------------------------------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A8004C78 &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483335&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;BEGIN&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483335&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A80103E8 &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483335&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;COMMIT&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483335&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A8018B30 &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483369&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;BEGIN&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483369&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A8018B30 &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483369&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;table&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt;.test1: &lt;span style="color:#66d9ef"&gt;INSERT&lt;/span&gt;: a[integer]:&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; b[character varying]:&lt;span style="color:#e6db74"&gt;&amp;#39;qwer&amp;#39;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;c&lt;/span&gt;[character varying]:&lt;span style="color:#e6db74"&gt;&amp;#39;qwer&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A8018C50 &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483369&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;COMMIT&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483369&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A801D018 &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483378&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;BEGIN&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483378&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A801D018 &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483378&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;table&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt;.test1: &lt;span style="color:#66d9ef"&gt;UPDATE&lt;/span&gt;: a[integer]:&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; b[character varying]:&lt;span style="color:#e6db74"&gt;&amp;#39;zxcv&amp;#39;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;c&lt;/span&gt;[character varying]:&lt;span style="color:#e6db74"&gt;&amp;#39;qwer&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A801D098 &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483378&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;COMMIT&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483378&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;(&lt;span style="color:#ae81ff"&gt;8&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;rows&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;--update被解析，包含所有字段&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;正常来说，没有toast时，解析出来的数据是包含该行所有字段的数据的。&lt;/p&gt;
&lt;p&gt;toast解析测试：&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;--将字段改大
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;alter&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;table&lt;/span&gt; test1 &lt;span style="color:#66d9ef"&gt;alter&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;column&lt;/span&gt; b &lt;span style="color:#66d9ef"&gt;type&lt;/span&gt; varchar(&lt;span style="color:#ae81ff"&gt;3000&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;ALTER&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;TABLE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Time: &lt;span style="color:#ae81ff"&gt;8&lt;/span&gt;.&lt;span style="color:#ae81ff"&gt;091&lt;/span&gt; ms
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;alter&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;table&lt;/span&gt; test1 &lt;span style="color:#66d9ef"&gt;alter&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;column&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;c&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;type&lt;/span&gt; varchar(&lt;span style="color:#ae81ff"&gt;3000&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;ALTER&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;TABLE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Time: &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;.&lt;span style="color:#ae81ff"&gt;937&lt;/span&gt; ms
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;--一个批量random的function
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;create&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;or&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;replace&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; f_random_str(&lt;span style="color:#66d9ef"&gt;length&lt;/span&gt; INTEGER) &lt;span style="color:#66d9ef"&gt;returns&lt;/span&gt; character varying
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;LANGUAGE&lt;/span&gt; plpgsql
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;AS&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;$$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;DECLARE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;result&lt;/span&gt; varchar(&lt;span style="color:#ae81ff"&gt;3000&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;BEGIN&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;SELECT&lt;/span&gt; array_to_string(ARRAY(&lt;span style="color:#66d9ef"&gt;SELECT&lt;/span&gt; chr((&lt;span style="color:#ae81ff"&gt;65&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; round(random() &lt;span style="color:#f92672"&gt;*&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;25&lt;/span&gt;)) :: integer)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;FROM&lt;/span&gt; generate_series(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,&lt;span style="color:#66d9ef"&gt;length&lt;/span&gt;)), &lt;span style="color:#e6db74"&gt;&amp;#39;&amp;#39;&lt;/span&gt;) &lt;span style="color:#66d9ef"&gt;INTO&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;result&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;result&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;END&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;$$&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;CREATE&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;FUNCTION&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;--插入数据
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;insert&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;into&lt;/span&gt; test1 &lt;span style="color:#66d9ef"&gt;values&lt;/span&gt; (&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;,f_random_str(&lt;span style="color:#ae81ff"&gt;2000&lt;/span&gt;),f_random_str(&lt;span style="color:#ae81ff"&gt;2000&lt;/span&gt;));
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;INSERT&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;--查看是否有toast
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;SELECT&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; n.nspname &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;schema&lt;/span&gt;, 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; s.oid::regclass &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; relname, 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; s.reltoastrelid::regclass &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; toast_name, 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; pg_relation_size(s.reltoastrelid) &lt;span style="color:#66d9ef"&gt;AS&lt;/span&gt; toast_size 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;FROM&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; pg_class s &lt;span style="color:#66d9ef"&gt;join&lt;/span&gt; pg_namespace n 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;on&lt;/span&gt; s.relnamespace &lt;span style="color:#f92672"&gt;=&lt;/span&gt; n.oid 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;WHERE&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; relkind &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;r&amp;#39;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;AND&lt;/span&gt; reltoastrelid &lt;span style="color:#f92672"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;AND&lt;/span&gt; n.nspname &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;public&amp;#39;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;ORDER&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;BY&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;DESC&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;schema&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; relname &lt;span style="color:#f92672"&gt;|&lt;/span&gt; toast_name &lt;span style="color:#f92672"&gt;|&lt;/span&gt; toast_size 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;--------+---------+--------------------------+------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; test1 &lt;span style="color:#f92672"&gt;|&lt;/span&gt; pg_toast.pg_toast_418714 &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;8192&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;row&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;--通过主键进行更新，更新toast字段
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;update&lt;/span&gt; test1 &lt;span style="color:#66d9ef"&gt;set&lt;/span&gt; b&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;zxcv&amp;#39;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;where&lt;/span&gt; a&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;UPDATE&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; pg_logical_slot_peek_changes(&lt;span style="color:#e6db74"&gt;&amp;#39;logical_dest&amp;#39;&lt;/span&gt;,&lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;,&lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; lsn &lt;span style="color:#f92672"&gt;|&lt;/span&gt; xid &lt;span style="color:#f92672"&gt;|&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;--------------+-----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A851FD90 &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483420&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;BEGIN&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483420&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A85216E0 &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483420&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;table&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt;.test1: &lt;span style="color:#66d9ef"&gt;INSERT&lt;/span&gt;: a[integer]:&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; b[character varying]:&lt;span style="color:#e6db74"&gt;&amp;#39;GIORCXQQWDBGTUNDZXAWMPYOUEGTECWTVQGDQGSPMEPJNPUQIFMESLRASBZWGONETRENDCHLDWVTDWJLTGRYUMFDOWHLEYLUTECPOVCYXFIATLKVEQTHSC&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A85218A0 &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483420&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;COMMIT&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483420&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A8525CA8 &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483429&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;BEGIN&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483429&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A8525D50 &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483429&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;table&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt;.test1: &lt;span style="color:#66d9ef"&gt;UPDATE&lt;/span&gt;: a[integer]:&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; b[character varying]:&lt;span style="color:#e6db74"&gt;&amp;#39;zxcv&amp;#39;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;c&lt;/span&gt;[character varying]:unchanged&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;toast&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&lt;/span&gt;datum
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A8525DE0 &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483429&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;COMMIT&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483429&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;有toast的字段c，不涉及更新，没有解析的数据，直接抛出toast数据未变&lt;code&gt;unchanged-toast-datum&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;用wal2json测试：&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; pg_create_logical_replication_slot(&lt;span style="color:#e6db74"&gt;&amp;#39;logical_json&amp;#39;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#39;wal2json&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pg_create_logical_replication_slot 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;(logical_json,&lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A87CAB58)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;row&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;update&lt;/span&gt; test1 &lt;span style="color:#66d9ef"&gt;set&lt;/span&gt; b&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;zxcv&amp;#39;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;where&lt;/span&gt; a&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;UPDATE&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;\&lt;/span&gt;pset format wrapped
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;Output&lt;/span&gt; format &lt;span style="color:#66d9ef"&gt;is&lt;/span&gt; wrapped.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;\&lt;/span&gt;pset columns &lt;span style="color:#ae81ff"&gt;200&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Target width &lt;span style="color:#66d9ef"&gt;is&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;200&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; pg_logical_slot_peek_changes(&lt;span style="color:#e6db74"&gt;&amp;#39;logical_json&amp;#39;&lt;/span&gt;,&lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;,&lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&lt;/span&gt;[ RECORD &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; ]&lt;span style="color:#75715e"&gt;------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;lsn &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A87CACF8
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;xid &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483495&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;data&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;{&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;change&amp;#34;&lt;/span&gt;:[&lt;span style="color:#960050;background-color:#1e0010"&gt;{&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;kind&amp;#34;&lt;/span&gt;:&lt;span style="color:#e6db74"&gt;&amp;#34;update&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;schema&amp;#34;&lt;/span&gt;:&lt;span style="color:#e6db74"&gt;&amp;#34;public&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;table&amp;#34;&lt;/span&gt;:&lt;span style="color:#e6db74"&gt;&amp;#34;test1&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;columnnames&amp;#34;&lt;/span&gt;:[&lt;span style="color:#e6db74"&gt;&amp;#34;a&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;b&amp;#34;&lt;/span&gt;],&lt;span style="color:#e6db74"&gt;&amp;#34;columntypes&amp;#34;&lt;/span&gt;:[&lt;span style="color:#e6db74"&gt;&amp;#34;integer&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;character varying(3000)&amp;#34;&lt;/span&gt;],&lt;span style="color:#e6db74"&gt;&amp;#34;columnvalues&amp;#34;&lt;/span&gt;:[&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;zxcv&amp;#34;&lt;/span&gt;],&lt;span style="color:#e6db74"&gt;&amp;#34;oldkeys&amp;#34;&lt;/span&gt;:&lt;span style="color:#960050;background-color:#1e0010"&gt;{&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;keynames&amp;#34;&lt;/span&gt;:[&lt;span style="color:#e6db74"&gt;&amp;#34;a&amp;#34;&lt;/span&gt;],.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt;.&lt;span style="color:#e6db74"&gt;&amp;#34;keytypes&amp;#34;&lt;/span&gt;:[&lt;span style="color:#e6db74"&gt;&amp;#34;integer&amp;#34;&lt;/span&gt;],&lt;span style="color:#e6db74"&gt;&amp;#34;keyvalues&amp;#34;&lt;/span&gt;:[&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;]&lt;span style="color:#960050;background-color:#1e0010"&gt;}}&lt;/span&gt;]&lt;span style="color:#960050;background-color:#1e0010"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;update&lt;/span&gt; test1 &lt;span style="color:#66d9ef"&gt;set&lt;/span&gt; b&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;zxcv&amp;#39;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;where&lt;/span&gt; a&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;UPDATE&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Time: &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;.&lt;span style="color:#ae81ff"&gt;391&lt;/span&gt; ms
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;select&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; pg_logical_slot_peek_changes(&lt;span style="color:#e6db74"&gt;&amp;#39;logical_json&amp;#39;&lt;/span&gt;,&lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;,&lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&lt;/span&gt;[ RECORD &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; ]&lt;span style="color:#75715e"&gt;------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;lsn &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A87CACF8
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;xid &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483495&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;data&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;{&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;change&amp;#34;&lt;/span&gt;:[&lt;span style="color:#960050;background-color:#1e0010"&gt;{&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;kind&amp;#34;&lt;/span&gt;:&lt;span style="color:#e6db74"&gt;&amp;#34;update&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;schema&amp;#34;&lt;/span&gt;:&lt;span style="color:#e6db74"&gt;&amp;#34;public&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;table&amp;#34;&lt;/span&gt;:&lt;span style="color:#e6db74"&gt;&amp;#34;test1&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;columnnames&amp;#34;&lt;/span&gt;:[&lt;span style="color:#e6db74"&gt;&amp;#34;a&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;b&amp;#34;&lt;/span&gt;],&lt;span style="color:#e6db74"&gt;&amp;#34;columntypes&amp;#34;&lt;/span&gt;:[&lt;span style="color:#e6db74"&gt;&amp;#34;integer&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;character varying(3000)&amp;#34;&lt;/span&gt;],&lt;span style="color:#e6db74"&gt;&amp;#34;columnvalues&amp;#34;&lt;/span&gt;:[&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;zxcv&amp;#34;&lt;/span&gt;],&lt;span style="color:#e6db74"&gt;&amp;#34;oldkeys&amp;#34;&lt;/span&gt;:&lt;span style="color:#960050;background-color:#1e0010"&gt;{&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;keynames&amp;#34;&lt;/span&gt;:[&lt;span style="color:#e6db74"&gt;&amp;#34;a&amp;#34;&lt;/span&gt;],.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt;.&lt;span style="color:#e6db74"&gt;&amp;#34;keytypes&amp;#34;&lt;/span&gt;:[&lt;span style="color:#e6db74"&gt;&amp;#34;integer&amp;#34;&lt;/span&gt;],&lt;span style="color:#e6db74"&gt;&amp;#34;keyvalues&amp;#34;&lt;/span&gt;:[&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;]&lt;span style="color:#960050;background-color:#1e0010"&gt;}}&lt;/span&gt;]&lt;span style="color:#960050;background-color:#1e0010"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&lt;/span&gt;[ RECORD &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; ]&lt;span style="color:#75715e"&gt;------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;lsn &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;349&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;A8CCA0D8
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;xid &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;872483509&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;data&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;{&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;change&amp;#34;&lt;/span&gt;:[&lt;span style="color:#960050;background-color:#1e0010"&gt;{&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;kind&amp;#34;&lt;/span&gt;:&lt;span style="color:#e6db74"&gt;&amp;#34;update&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;schema&amp;#34;&lt;/span&gt;:&lt;span style="color:#e6db74"&gt;&amp;#34;public&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;table&amp;#34;&lt;/span&gt;:&lt;span style="color:#e6db74"&gt;&amp;#34;test1&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;columnnames&amp;#34;&lt;/span&gt;:[&lt;span style="color:#e6db74"&gt;&amp;#34;a&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;b&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;c&amp;#34;&lt;/span&gt;],&lt;span style="color:#e6db74"&gt;&amp;#34;columntypes&amp;#34;&lt;/span&gt;:[&lt;span style="color:#e6db74"&gt;&amp;#34;integer&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;character varying(3000)&amp;#34;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;character varying(3000)&amp;#34;&lt;/span&gt;],&lt;span style="color:#e6db74"&gt;&amp;#34;columnvalues&amp;#34;&lt;/span&gt;:[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#34;zxcv&amp;#34;&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt;.,&lt;span style="color:#e6db74"&gt;&amp;#34;qwer&amp;#34;&lt;/span&gt;],&lt;span style="color:#e6db74"&gt;&amp;#34;oldkeys&amp;#34;&lt;/span&gt;:&lt;span style="color:#960050;background-color:#1e0010"&gt;{&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;keynames&amp;#34;&lt;/span&gt;:[&lt;span style="color:#e6db74"&gt;&amp;#34;a&amp;#34;&lt;/span&gt;],&lt;span style="color:#e6db74"&gt;&amp;#34;keytypes&amp;#34;&lt;/span&gt;:[&lt;span style="color:#e6db74"&gt;&amp;#34;integer&amp;#34;&lt;/span&gt;],&lt;span style="color:#e6db74"&gt;&amp;#34;keyvalues&amp;#34;&lt;/span&gt;:[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;]&lt;span style="color:#960050;background-color:#1e0010"&gt;}}&lt;/span&gt;]&lt;span style="color:#960050;background-color:#1e0010"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;--更新时，解析出来没有c列的数据 &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;wal2json也是一样的效果。&lt;/p&gt;
&lt;p&gt;mysql的参数&lt;a href="https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_binlog_row_image" target="_blank" rel="noreferrer"&gt;&lt;code&gt;binlog_row_image&lt;/code&gt;&lt;/a&gt;可以调整binlog是否记录大字段：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;full&lt;/code&gt; (Log all columns)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;minimal&lt;/code&gt; (Log only changed columns, and columns needed to identify rows)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;noblob&lt;/code&gt; (Log all columns, except for unneeded BLOB and TEXT columns)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;pg库完全没有这种控制，默认就是toast字段不解析，无其他选项可以设置~&lt;/p&gt;</content:encoded></item><item><title>另一个世界的人</title><link>https://lastdba.com/2024/08/12/%E5%8F%A6%E4%B8%80%E4%B8%AA%E4%B8%96%E7%95%8C%E7%9A%84%E4%BA%BA/</link><pubDate>Mon, 12 Aug 2024 00:00:00 +0000</pubDate><guid>https://lastdba.com/2024/08/12/%E5%8F%A6%E4%B8%80%E4%B8%AA%E4%B8%96%E7%95%8C%E7%9A%84%E4%BA%BA/</guid><description>&lt;p&gt;​


&lt;img src="https://lastdba.com/img/csdn/13ea4ca5d98b.png" alt="" /&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;休假
 &lt;div id="休假" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%bc%91%e5%81%87" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;        赶在假期无效前，休了个长假回了趟老家。不仅是为了逃离工作的繁忙，也为了看望老家的婆婆爷爷。回趟老家对于我们这种社会人来说确实太难了，如果只是周末回去也就休息一天就得往回赶，太累。自己的假期本来就不多，如果有假期，社会人都想着开车出去看看风景或者干脆在家里呆几天哪也不去，一般也不会想到利用稀有的假期回老家看望老人。
        比较讽刺的是，回去看望婆婆爷爷我休的是育儿假，不是什么养老假。这个世界好像没有”养老假“这个东西，只有探亲假。虽然法定是有”探亲假“这个东西的，但是先不说探亲假不是针对专门看望老年人的假，就探亲假那个极长的定语，对于绝大部分人来说，就是没有探亲假。
        育儿假不在家育儿，却去看望老人，我想一般人肯定干不出来，是不是只有我这种奇葩才能干得出来 ..至少我是这么想的：养育子女和照顾老人同样重要，不应该厚此薄彼。社会和社会人更重视前者。无论怎样，我还是想回去陪陪老人家，看看老两口每天在干嘛，以怎样的方式生活？是否生活上有困难？怎样看待困难？于是我就这样一个人回去了。&lt;/p&gt;</description><content:encoded>&lt;p&gt;​


&lt;img src="https://lastdba.com/img/csdn/13ea4ca5d98b.png" alt="" /&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;休假
 &lt;div id="休假" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%bc%91%e5%81%87" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;        赶在假期无效前，休了个长假回了趟老家。不仅是为了逃离工作的繁忙，也为了看望老家的婆婆爷爷。回趟老家对于我们这种社会人来说确实太难了，如果只是周末回去也就休息一天就得往回赶，太累。自己的假期本来就不多，如果有假期，社会人都想着开车出去看看风景或者干脆在家里呆几天哪也不去，一般也不会想到利用稀有的假期回老家看望老人。
        比较讽刺的是，回去看望婆婆爷爷我休的是育儿假，不是什么养老假。这个世界好像没有”养老假“这个东西，只有探亲假。虽然法定是有”探亲假“这个东西的，但是先不说探亲假不是针对专门看望老年人的假，就探亲假那个极长的定语，对于绝大部分人来说，就是没有探亲假。
        育儿假不在家育儿，却去看望老人，我想一般人肯定干不出来，是不是只有我这种奇葩才能干得出来 ..至少我是这么想的：养育子女和照顾老人同样重要，不应该厚此薄彼。社会和社会人更重视前者。无论怎样，我还是想回去陪陪老人家，看看老两口每天在干嘛，以怎样的方式生活？是否生活上有困难？怎样看待困难？于是我就这样一个人回去了。&lt;/p&gt;
&lt;p&gt;路的尽头.
        老两口生活的地方，是我从小长大的地方。那个地方也很隐蔽，要从大路拐进一条山路，走很久，一直走到路的尽头。像是一个与世隔绝的地方，到了那里，就感觉与外面的世界的联系好像不存在了。       &lt;/p&gt;
&lt;p&gt;         那里其实也不是我的老家，不过我更喜欢这样称呼那里。那是一片矿山，因为是依山而建，矿山很有立体感，立体到对开发矿山的前辈设计感到震惊。我至今不太清楚怎么描述这个地方的行政级别，它不是村，也不是镇，比村更现代，比镇更小。小时候我认为这个地方很大，现在发现只需要10分钟就可以把这片矿逛完。&lt;/p&gt;
&lt;p&gt;        整个地方以煤矿作为经济支柱，曾经繁荣过，不过现在已经萧条多了。现在矿区仍有会下井的矿工，不过在矿山的生活区已经看不到像我这样的年轻人了。矿山有个小学，在我读小学的时候，一个年级大概有70个人，现在只有7个人。&lt;/p&gt;
&lt;p&gt;        那里的童年回忆过于强烈，就像世外桃源，像与世无争的圣地，另一个世界。由于远离现代化社会，只需要基本的生活保障就可以生活，时间都感觉过的很慢。这样的地方，对于养老来说确实很合适，也的确有很多老人。&lt;/p&gt;

&lt;h2 class="relative group"&gt;食物
 &lt;div id="食物" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e9%a3%9f%e7%89%a9" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;        小时候菜市场还是比较热闹的。我记得卖鸡鸭的地方，小贩会用黑乎乎像沥青一样的东西浸没整只鸡，然后再拔毛，卖鸡鸭地方总是脏兮兮的。现在菜市场已经没有卖新鲜肉的了，只能买到附近农户自己种的蔬菜。如果要买新鲜肉只有到村上去赶集或者去搭班车去城里买。&lt;/p&gt;
&lt;p&gt;        因为老两口生活特别节俭，刚开始我还比较担心他们生活过于朴素，可能搞得每天都是米饭和素菜。这次我回去时，没有告诉他们我具体什么时间到，当我到家时，发现他们还买了卤鸭子，我还是很欣慰的。我回去老两口很高兴，就三个人每天都弄了5、6个菜，我甚至有点怀疑自己是不是回去陪他们，而是回去添麻烦的。&lt;/p&gt;
&lt;p&gt;        应该是我在花花世界吃东西吃飘了，刚开始他们问我“这个菜好不好吃？”的时候，我都没有说出我内心的真实想法。这时我会想起不知道哪本书里写的一句话：“人类无法直接判断一个东西的价值，只有通过比较另一个东西，才会知道它的价值”。美食也是一样的，当你第一次吃这个东西的时候，其实不知道好吃还是不好吃，如果你知道，那么肯定你把印象中的某个东西做过了比较。小时候刚开始吃火锅，大人总会问我，这个火锅好不好吃？说实话，我根本不知道好不好吃，我都不知道好吃应该是什么样子，我只知道吃。&lt;/p&gt;
&lt;p&gt;        现在我的嘴巴确实越来越刁了，但是这里，我想把一切都还原，按下那个“恢复出厂设置”的按钮。我可以用真心话说，他们做的东西是好吃的。&lt;/p&gt;
&lt;p&gt;        还有一件事，我有次说我来洗碗，他们说你放着，你不会洗，我们是用淘米水洗的碗，你洗是洗不干净的，洗洁精里面都是化学品，我们不用那个。&lt;/p&gt;

&lt;h2 class="relative group"&gt;中药
 &lt;div id="中药" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%b8%ad%e8%8d%af" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;        我这次回去，发现一个事实：老年人对药物的依赖性极强。他们的药箱里总有各式各样的药物，西药、中药、感冒药、发炎药、药膏、保健药一大堆。自己感觉身体哪有问题就拿自己认为有用的药。我这次回去鼻炎犯了（老毛病了），不停的打喷嚏流鼻涕，他们不停的劝我吃点感冒药，推荐我吃感冒灵或者头孢，我可能说了不下十次，我这个是鼻炎，不是感冒。他们当然也不知道这种鼻炎要怎么治，然后继续劝我我吃感冒药&lt;/p&gt;
&lt;p&gt;        有次我带老人家进城，除了去超市进购，更重要的就是买药。买药也分为中药和西药。&lt;/p&gt;
&lt;p&gt;        中药是在一个云南中药店里面买的，店老板一头圆寸发型，黑色T恤，银色的项链，褐色的珠子手链，看上去很壮实，他这一身社会大哥形象我都不敢他大声讲话，不过我爷爷好像并没有注意到这些。店里基本都是我说不出名字的中药，按斤卖，还挺贵，不是一般中药的那种。明显我爷爷是这里的老顾客了，老板是认识他的，不过看上去我爷爷他也不会选药，“老板，你按照我的身体状况给我称300块钱的”。于是老板这里抓了点，那里抓了点，最后全部打成粉。&lt;/p&gt;
&lt;p&gt;        可能是我读书读傻了，我对中医一直持保留态度，很简单因为我觉得没什么道理。我还蛮怕他们被骗的，这些中药贩子专骗老年人。不过我爷爷说：“之前婆婆一直头痛，吃了这个药，头就不痛了”。看来还是有效果的。西医对于老年人确认太不友好了。&lt;/p&gt;

&lt;h2 class="relative group"&gt;西药
 &lt;div id="西药" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%a5%bf%e8%8d%af" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;        中药买完，走了很远的地方，去药店买西药。那个药店可能是他们为数不多认识的药店。&lt;/p&gt;
&lt;p&gt;        那个药店绝大部分药都是无法报销的，在很里面的一个很小很简陋的房间里面，才摆着一小部分可以报销的药。我看了一圈，基本不认识，都是化学分子式命名的药，完全看不懂。只有一些感冒灵、枇杷露这类药算认识的。爷爷选药同样也陷入了选择困难的处境。他认识头孢，但是药店小妹说头孢没有，他有点生气。他对小妹说：“你要没有好点的药呢？”（好点的药？我尝试理解这句话），小妹不知道从哪拿出来一个红色盒子的精致包装保健药，爷爷他看不清盒子上面的字，他让我给他念一下，看看这是治什么的。我拿来一看，这东西啥都治，就没念，把它还给了小妹。最后也只是选了一点治感冒咳嗽常见的药。&lt;/p&gt;
&lt;p&gt;       爷爷一路上反复跟我说，他一年有170块钱的医保可以报销 ，能看出来他非常想把这170块钱花掉，给家里囤点药。这也是为什么会去买西药店买药的原因，也是为什么要走到那个可以报销的药店。   &lt;/p&gt;
&lt;p&gt;        不过结账的时候遇到一些困难。结账小妹从刚开始表情就不太好，她拿过药说了一堆东西，我都没听懂，我爷爷也明显没听懂。最后说的“这个药报不了”算是听懂了。&lt;/p&gt;
&lt;p&gt;        小妹说：“这个报销有门槛费150，你还没有缴门槛费”&lt;/p&gt;
&lt;p&gt;        爷爷说：“门槛费是不是就像以前医院收的床位费150一样？”&lt;/p&gt;
&lt;p&gt;        小妹停顿了一下，不耐烦地说：“是是是，你说的都对。”&lt;/p&gt;
&lt;p&gt;        爷爷有点生气，说：“算了，不要了！”&lt;/p&gt;
&lt;p&gt;        我赶紧问小妹这门槛费到底是什么意思，她不说话，把手指了指窗口的贴的告示，上面是一个关于门槛费的一个表格。我也没看太懂，但是我明白这个门槛费是一定要缴的了。我想了一下我自己就医是直接刷医保卡的，哪来报销的说法，于是更懵了。&lt;/p&gt;
&lt;p&gt;        我说：“你可以刷我的医保卡吗？”&lt;/p&gt;
&lt;p&gt;        小妹说：“异地的刷不了”&lt;/p&gt;
&lt;p&gt;        我说：“你直接刷我支付宝总行吧。”&lt;/p&gt;
&lt;p&gt;        爷爷看到我要刷卡，赶紧制止了我，“这肯定不能让你付钱撒”，根本不要我给钱的意思。他从包里掏出现金，付款。我明白这一百多块钱对于我来说不算什么，但是对于他们来说还是有点不想给的。&lt;/p&gt;

&lt;h2 class="relative group"&gt;科技
 &lt;div id="科技" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%a7%91%e6%8a%80" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;        我们感叹科技发展迅速，总是有新的东西改变着人类的生活方式，让生活变的更加便利。社会人追求科技，沉浸于科技。但是对于老人来说，科技完全是另一码事。&lt;/p&gt;
&lt;p&gt;        老年人生活的方方面面，设计到科技的东西真的非常非常少。最最常用的，就是手机，而且是智能手机。他们好像很适应抖音类APP所带来的快节奏娱乐信息，他们也会在睡觉前玩会手机刷刷抖音再睡觉（他们用的大概率不是抖音，而是另外一些有推荐短视频的软件）。&lt;/p&gt;
&lt;p&gt;        不过也仅限于此了，他们不太懂手机这些东西。举个例子，他们打电话，无论是婆婆还是爷爷，打完电话都不会挂电话。不是他们不想挂，而是不知道在哪里挂。如果他们打完电话，一看手机，有红色的挂断按钮，他们会按，但是如果屏幕锁定或息屏切屏，他们就不会挂了。婆婆跟我说：“你给我看下啦，为什么我的手机挂断以后，紧叫紧叫~”其实电话根本没有挂断，只是黑屏了她以为挂断了。他们要是给别人打电话都还好，要是相互打电话可能是一场灾难，因为没人挂电话。&lt;/p&gt;
&lt;p&gt;        还有微信消息，他们完全没有明白微信消息到底是怎么一回事，不知道怎么找某人的聊天窗口，不知道谁给自己发了消息，不知道消息发到哪了。后面旅游时给他们拍照，他们要求把我拍的照片放到他们手机里（其实就是他们相册里），我得一个个操作他们俩的手机从微信里面下载照片，并确保相册里能一眼看到下载的照片，不然他们肯定找不到。&lt;/p&gt;

&lt;h2 class="relative group"&gt;旅游
 &lt;div id="旅游" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%97%85%e6%b8%b8" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;        带着老俩口出去旅游是我的这次回去的重要任务。本来我是没有这个计划的，我只想回去把自己放空，呼吸两口新鲜空气，就呆在那里感受一下慢时间。不过他们挺喜欢出去玩的，我一回去爷爷就主动跟我说可以开车带他们出去耍一下。&lt;/p&gt;
&lt;p&gt;        我们先后去了朱德故里、阆中古城、南充，玩了2天一夜。跟老年人出去玩本身要考虑的东西会更多，不能坐太久的车，也不能走太多的路。这样其实也玩不到什么东西。不过他们的旅游观念跟我们不太一样，他们更倾向于打卡，更重视“来过”这个价值，所以一定要在写这地名的打卡点拍照~&lt;/p&gt;
&lt;p&gt;        他们也更倾向于人多的地方，而不是人少的风景优美的地方。在阆中的时候，他们明显更喜欢古城里面，人多嘈杂热闹的感觉，还会姑姑视频说“我们在阆中！！”（重语气），笑得合不拢嘴。而在白塔山（可以开车上去，很适合老年人）上看阆中城全景的时候，我还沉浸于what a view的场景中，婆婆看了2分钟拍了2张照就没有看了。我说你看看风景撒，多漂亮，好不容易上来，她说，我看了呀。&lt;/p&gt;

&lt;h2 class="relative group"&gt;棚子
 &lt;div id="棚子" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%a3%9a%e5%ad%90" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;        平时爷爷常去小公园看别人打牌，婆婆去打麻将，不打钱那种。
        除了打牌，最常呆的地方就是楼下的棚子。几个几家人不要的凳子椅子放在棚子下面，中间一个炉子，冬天会烧点柴火。楼上楼下都是认识的，都是爷爷奶奶辈，跟我婆婆爷爷关系很好，邻里邻居没事就会坐在一起摆龙门阵，这也是小区（其实也不是小区，就是2栋楼）最重要的社交场所。
        一天晚上，我坐在棚子里听他们聊天。有个婆婆说：“你这孙子好哦，请假回来陪老人家。我们都说你孙子好。”说的我都不好意思，不过想想还是让这个评价留在这几个老人的脑海里吧。&lt;/p&gt;
&lt;p&gt;        一个爷爷说：“我跟xx他们家里人说，你们一个月回来一次，陪陪老年人，不用给他们钱，他们拿这钱有什么用，他们可以过日子。但是你们长大了，走了，长时间没有陪伴他们会感到孤独。“我想，这老爷爷还挺明白事儿。他又说道：“一次某某死了，他家人都回来办葬礼，他们回来给他端水果端吃的，有什么用？他吃到没有嘛？说白了，这些是做给我们看的。人都走了，做这些都没用”。哟喂，这老年人是真懂。&lt;/p&gt;
&lt;p&gt;        一个月回来一次对于社会人来说非常困难，不太现实。我这个育儿假明年都没有了，下次啥时候回来呢？我好像没有想到。我们在一天又一天繁忙的工作中度过的时候，老年人又该如何在一天又一天的清闲和孤独中度过？&lt;/p&gt;

&lt;h2 class="relative group"&gt;杂想       
 &lt;div id="杂想" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%9d%82%e6%83%b3" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;        老年人该如何面对死亡？每次他们提到死亡，总是带着戏谑的语气，但是更多的还是无奈。人应该怎么面对死亡呢？当我老了，死亡线即将来临的时候，我该怎么面对它呢？&lt;/p&gt;
&lt;p&gt;        在棚子里面聊天的时候，这些婆婆爷爷辈我都叫不出名字，但是他们都记得我，知道我是怎么长大的，我的生命似乎是他们生活的一部分，是我存在的证明，哪怕这个记忆也只存在一段时间。不过这也是有意义的吧，生命的羁绊就这样存在。这个世界有几十亿人，绝绝绝大部分人都是流星过隙，不会被任何人记得，不会被任何记录提起。  &lt;/p&gt;
&lt;p&gt;        这个社会对于老人相当不友好。社会规则过于复杂，他们难以理解手机、医疗社保这些东西，只能蜷缩在自己的社交圈，逃离这个难以理解的社会。同时这些年社会发展迅猛，子女基本都外出发展有了自己的家庭和事业，对于老人来说他们欣喜于看到自己的子女有好的发展，但是与子女生活的地方相隔很远，双方也难以陪伴。社会在关注子女养育增加生育福利的同时，却没有人关注老人的赡养和陪伴问题。我也觉得以后也不会有什么养老假这种东西。&lt;/p&gt;
&lt;p&gt;        婆婆耳朵不太好，就算是带着助听器也只是稍微好了一点。很多时候跟她说话，她完全没有理解到，回答的都是另一码事。但是也不敢在她面前吼，因为感觉很不礼貌，凑近了说她还不好意思。我跟她说你们到成都来吧，她怎样都不同意。我想了一下，可能是因为耳背，导致害怕与人交流，怯于社交，只有矿山那个地方，邻里邻居对她好，有安全感。一位老婆婆说：“耳背好，给你增寿的”    &lt;/p&gt;
&lt;p&gt;写于-2023-04&lt;/p&gt;
&lt;p&gt;        “婆婆”这个称呼，在我这一代还保留着，我的下一代，已经不叫“婆婆”，而是叫“奶奶”了。也许“婆婆”是这个族系最后的一次称呼，may be the last call。就让它保存在这篇文章里吧。&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;</content:encoded></item><item><title>如何解决索引分裂问题？</title><link>https://lastdba.com/2024/08/12/%E5%A6%82%E4%BD%95%E8%A7%A3%E5%86%B3%E7%B4%A2%E5%BC%95%E5%88%86%E8%A3%82%E9%97%AE%E9%A2%98/</link><pubDate>Mon, 12 Aug 2024 00:00:00 +0000</pubDate><guid>https://lastdba.com/2024/08/12/%E5%A6%82%E4%BD%95%E8%A7%A3%E5%86%B3%E7%B4%A2%E5%BC%95%E5%88%86%E8%A3%82%E9%97%AE%E9%A2%98/</guid><description>&lt;h2 class="relative group"&gt;索引分裂
 &lt;div id="索引分裂" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%b4%a2%e5%bc%95%e5%88%86%e8%a3%82" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;索引块快写满时就会发生索引分裂，索引分裂分为两种情况，55和91：



&lt;img src="https://lastdba.com/img/csdn/cd43a5c7b484.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://lastdba.com/img/csdn/be40fcc99a6d.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;索引分裂和enq: TX - index contension等待事件的区别&lt;/strong&gt;
无论是55还是91，都是数据增多后索引的正常行为，索引分裂是业务数据量增大导致索引增大的&lt;strong&gt;正常现象&lt;/strong&gt;，索引放不下了自然要更多的索引块来存放数据，基本也没有只有表无索引的情况（在初始化数据的场景下，才会考虑先插入数据，再建索引）。索引分裂虽然有一定的资源消耗，但是在现在的oracle环境中也是可以很快完成的，索引过多的话才会影响插入效率。
而enq: TX - index contension这个等待就不是正常现象了。enq: TX - index contension等待表示SQL在等待正在发生分裂的索引块，本质上是DML并发过大且都在等待分裂的索引块。&lt;/p&gt;</description><content:encoded>
&lt;h2 class="relative group"&gt;索引分裂
 &lt;div id="索引分裂" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%b4%a2%e5%bc%95%e5%88%86%e8%a3%82" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;索引块快写满时就会发生索引分裂，索引分裂分为两种情况，55和91：



&lt;img src="https://lastdba.com/img/csdn/cd43a5c7b484.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://lastdba.com/img/csdn/be40fcc99a6d.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;索引分裂和enq: TX - index contension等待事件的区别&lt;/strong&gt;
无论是55还是91，都是数据增多后索引的正常行为，索引分裂是业务数据量增大导致索引增大的&lt;strong&gt;正常现象&lt;/strong&gt;，索引放不下了自然要更多的索引块来存放数据，基本也没有只有表无索引的情况（在初始化数据的场景下，才会考虑先插入数据，再建索引）。索引分裂虽然有一定的资源消耗，但是在现在的oracle环境中也是可以很快完成的，索引过多的话才会影响插入效率。
而enq: TX - index contension这个等待就不是正常现象了。enq: TX - index contension等待表示SQL在等待正在发生分裂的索引块，本质上是DML并发过大且都在等待分裂的索引块。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;为什么enq: TX - index contension总是发生在顺序插入的字段上？&lt;/strong&gt;
虽然55分裂和91分裂在真实场景都是由可能的，但是enq: TX - index contension等待经常发生在91分裂的情况。因为序列、时间等字段上一般会有索引，并且经常发生顺序插入，此时最后侧的块一直都是热点块，后续的插入一直等待分裂块完成才能插入进去，此时便造成了enq: TX - index contension。UUID上一般也有索引，为什么没有造成enq: TX - index contension等待？因为UUID索引存在无序性，插入导致UUID索引分裂，也很难有后续插入的UUID值刚好也在这个分裂的索引块上。所以UUID是有索引分裂但不会形成enq等待队列从而出现enq: TX - index contension的情况。&lt;/p&gt;

&lt;h2 class="relative group"&gt;解决办法
 &lt;div id="解决办法" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%a7%a3%e5%86%b3%e5%8a%9e%e6%b3%95" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;注意我们要解决的是索引分裂等待enq: TX - index contension，而不是索引分裂本身。解决办法：
&lt;strong&gt;1.反序索引&lt;/strong&gt;
索引顺序的存放键值，反序索引刚好相反。例如一个'1111 0001&amp;rsquo;一串数字，正序索引会将它排在'0000 0002&amp;rsquo;后面；如果是反序索引，它排在'0000 0002&amp;rsquo;前面。想象一下时间字段，本身是最右热点，反序后秒、分、时排序在前，一个索引块可能包含不同月的同一秒数据，这样最右热点块基本不存在了，反序索引可以将热点打散到索引各个块上。
&lt;em&gt;局限性&lt;/em&gt;：需要改造索引；可能无法使用索引范围扫描。顺序增长的字段，无法用到索引范围扫描，例如时间字段。某些场景下的反序键值有可能用到，需要具体分析。
&lt;em&gt;语法&lt;/em&gt;：&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;CREATE&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;INDEX&lt;/span&gt; reveridx &lt;span style="color:#66d9ef"&gt;ON&lt;/span&gt; tablzl (name) REVERSE;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;2.hash分区索引&lt;/strong&gt;
在普通表上创建hash分区索引，相当于表不变、把索引分区，这样最右的热点块打撒到各个分区上。比如建立一个8分区的hash分区索引，将索引分成8个segment，最右热点有8个，减缓了索引分裂问题
&lt;em&gt;局限性&lt;/em&gt;：需要改造索引；会影响索引范围查询的性能，需要抉择插入热点和查询效率问题。
等值和IN可以高效使用hash分区索引，官方文档&lt;a href="https://docs.oracle.com/cd/E11882_01/server.112/e41573/data_acc.htm#PFGRF94786" target="_blank" rel="noreferrer"&gt;原文&lt;/a&gt;：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Queries involving equality and &lt;code&gt;IN&lt;/code&gt; predicates on index partitioning key can efficiently use global hash partitioned index to answer queries quickly&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;但是范围查找的效率会下降，分区越多下降越多（分区越多热点缓解越明显），这显然是一个平衡选择性问题。经测试，分区8个，范围查找逻辑读提升也接近8倍。分区后在每个分区内索引仍然是有序的，聚簇因子差别不大，扫描索引的代价差别不大，但是回表的代价加大。如果普通索引一个块内有8条数据指向1个数据块，会造成1次逻辑读，hash后分别存放在8个分区，每个分区1个索引块，会造成8次逻辑读。这就是范围扫描索引性能下降的原因。
&lt;em&gt;语法&lt;/em&gt;：&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;CREATE&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;INDEX&lt;/span&gt; cust_last_name_ix &lt;span style="color:#66d9ef"&gt;ON&lt;/span&gt; customers (cust_last_name)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;GLOBAL&lt;/span&gt; PARTITION &lt;span style="color:#66d9ef"&gt;BY&lt;/span&gt; HASH (cust_last_name)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; PARTITIONS &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;3.利用分区将索引打散&lt;/strong&gt;
可以将表分区，创建本地索引从而达到打散最右热点的效果
&lt;strong&gt;局限性&lt;/strong&gt;：分区键不能是索引字段（如果是索引字段就没有意义了）；需要改造表；如果有SQL本身有分区字段，不会影响范围扫描的效率&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4.降低并发&lt;/strong&gt;
降低并发是终极武器。索引分裂等待本质就是并发太高了，如果没有几十个以上的并发插入一般都不会有索引分裂等待。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5.修改索引块大小&lt;/strong&gt;
将索引块存放在16、32K的表空间中。这种情况理论上确实会有用，因为索引能存放的的数据更多了，分裂的情况就更少了。不过需要测试其性能，可能还有其他参数需要调整。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6.删掉索引&lt;/strong&gt;
删除索引也是一个思路。根据业务情况，如果这个索引不重要可以把索引删掉；或者范围查询大小来做分区表，利用分区进行过滤而不是索引&lt;/p&gt;

&lt;h2 class="relative group"&gt;这些情况为什么没用？？？
 &lt;div id="这些情况为什么没用" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%bf%99%e4%ba%9b%e6%83%85%e5%86%b5%e4%b8%ba%e4%bb%80%e4%b9%88%e6%b2%a1%e7%94%a8" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;增加ITL事务槽&lt;/strong&gt;
索引块的事务槽也可能因为高并发而不够用，确实于索引分裂的情况有些相似，但是其等待为enq: TX - allocate ITL entry。如果有这个等待，能分析到是索引块的，就说明索引上有较高的并发，同样可以用反序索引、hash分区索引来缓解问题，也可考虑修改initrans来解决问题。不过这两个等待的根因还是不同的，索引分裂不一定会伴随事务槽问题。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;调整索引块PCT_FREE&lt;/strong&gt;
PCTFREE表示一个数据块可用空间小于PCTFREE时，该数据块不在被记录在FREELIST中，即不能插入新数据。考虑两种情况：增加PCTFREE和减少PCTFREE。增加PCTFREE只能加剧索引分裂；减少PCTFREE看上去有效果，原理跟调整索引块大小类似，但是真实场景中PCTFREE默认是10%，已经很难再调小了，调整的效果不会很明显。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;重建索引减少碎片率&lt;/strong&gt;
这其实没什么关系，它没有解决最右热点块的问题。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;参考
 &lt;div id="参考" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%8f%82%e8%80%83" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://blog.csdn.net/lihuarongaini/article/details/101299328" target="_blank" rel="noreferrer"&gt;https://blog.csdn.net/lihuarongaini/article/details/101299328&lt;/a&gt;
&lt;a href="https://docs.oracle.com/cd/E11882_01/server.112/e41573/data_acc.htm#PFGRF94786" target="_blank" rel="noreferrer"&gt;https://docs.oracle.com/cd/E11882_01/server.112/e41573/data_acc.htm#PFGRF94786&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;鸣谢：豪桑、用哥&lt;/p&gt;</content:encoded></item><item><title>事务的历史与SSI——PostgreSQL数据库技术峰会成都站分享</title><link>https://lastdba.com/2024/08/12/%E4%BA%8B%E5%8A%A1%E7%9A%84%E5%8E%86%E5%8F%B2%E4%B8%8Essipostgresql%E6%95%B0%E6%8D%AE%E5%BA%93%E6%8A%80%E6%9C%AF%E5%B3%B0%E4%BC%9A%E6%88%90%E9%83%BD%E7%AB%99%E5%88%86%E4%BA%AB/</link><pubDate>Mon, 12 Aug 2024 00:00:00 +0000</pubDate><guid>https://lastdba.com/2024/08/12/%E4%BA%8B%E5%8A%A1%E7%9A%84%E5%8E%86%E5%8F%B2%E4%B8%8Essipostgresql%E6%95%B0%E6%8D%AE%E5%BA%93%E6%8A%80%E6%9C%AF%E5%B3%B0%E4%BC%9A%E6%88%90%E9%83%BD%E7%AB%99%E5%88%86%E4%BA%AB/</guid><description>&lt;h2 class="relative group"&gt;前言
 &lt;div id="前言" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%89%8d%e8%a8%80" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;PostgreSQL数据库技术峰会成都站
 &lt;div id="postgresql数据库技术峰会成都站" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#postgresql%e6%95%b0%e6%8d%ae%e5%ba%93%e6%8a%80%e6%9c%af%e5%b3%b0%e4%bc%9a%e6%88%90%e9%83%bd%e7%ab%99" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;近期（2023年6月17日），由中国开源软件推进联盟PG分会发起的“PostgreSQL数据库技术峰会成都站”圆满举行。我也有幸作为演讲嘉宾参加了此次峰会，收获很多。



&lt;img src="https://lastdba.com/img/csdn/09a770e6512b.png" alt="在这里插入图片描述" /&gt;&lt;/p&gt;</description><content:encoded>
&lt;h2 class="relative group"&gt;前言
 &lt;div id="前言" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%89%8d%e8%a8%80" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;PostgreSQL数据库技术峰会成都站
 &lt;div id="postgresql数据库技术峰会成都站" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#postgresql%e6%95%b0%e6%8d%ae%e5%ba%93%e6%8a%80%e6%9c%af%e5%b3%b0%e4%bc%9a%e6%88%90%e9%83%bd%e7%ab%99" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;近期（2023年6月17日），由中国开源软件推进联盟PG分会发起的“PostgreSQL数据库技术峰会成都站”圆满举行。我也有幸作为演讲嘉宾参加了此次峰会，收获很多。



&lt;img src="https://lastdba.com/img/csdn/09a770e6512b.png" alt="在这里插入图片描述" /&gt;&lt;/p&gt;
&lt;p&gt;（分会回顾和所有ppt下载：&lt;a href="https://mp.weixin.qq.com/s/Gby7uHVV3bR-HvROZCg46Q" target="_blank" rel="noreferrer"&gt;PPT下载来了 | PostgreSQL技术峰会成都站回顾&lt;/a&gt;）&lt;/p&gt;

&lt;h3 class="relative group"&gt;我的分享
 &lt;div id="我的分享" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%88%91%e7%9a%84%e5%88%86%e4%ba%ab" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;我的技术分享主题为：&lt;strong&gt;数据库历史与SSI&lt;/strong&gt;。
我发现国内有很多技术博客对事物的描述不太准确，会对初学者造成很多疑惑，还有很多小伙伴对事物历史和pg中的SSI不是很熟悉。这次我从wiki、SQL官方标准和各种论文中收集和汇总了事务的准确含义、事务的历史和SSI的理论基础。分享内容的主要思路是从事务的历史推进到一些92标准中不存在的异象，再到消灭这些异象可以怎么做，再循序渐进到pg库的SSI是怎么做的。
全篇分享分为4个部分：事务的基础、事务的历史、SSI理论知识、PostgresSQL中的SSI。&lt;/p&gt;

&lt;h2 class="relative group"&gt;事务的基础
 &lt;div id="事务的基础" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%ba%8b%e5%8a%a1%e7%9a%84%e5%9f%ba%e7%a1%80" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;在了解事务历史和SSI之前，我们先回顾一下，复习复习一些基本的事务知识。整个章节都会围绕事务来进行讨论，事务的基本知识会引出事务历史中存在的问题。&lt;/p&gt;

&lt;h3 class="relative group"&gt;什么是事务？
 &lt;div id="什么是事务" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%bb%80%e4%b9%88%e6%98%af%e4%ba%8b%e5%8a%a1" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;事务的原本含义&lt;/strong&gt;：事务=&amp;gt;transaction=&amp;gt;交易。交易是事务原本的含义，而我们数据库中的事务就是从交易这个词汇而来。
&lt;strong&gt;数据库中的事务&lt;/strong&gt;：&lt;em&gt;事务是关系型数据库的基本工作单元&lt;/em&gt;。比如
从A表删除数据，从B表插入数据，我们可以把他们这两个动作包装成一个事务，他俩必须都完成。但是也有可能因为某些意外因素，事务执行到一半失败或者取消了，此时只能整个事务中的所有操作全部回退，回到事务前的状态，A也不执行删除，B也不执行插入&lt;/p&gt;

&lt;h3 class="relative group"&gt;ACID
 &lt;div id="acid" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#acid" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;ACID是数据库事务的重要特性。它决定了交易事务是否是可靠的、可信任的。



&lt;img src="https://lastdba.com/img/csdn/cc73d604121e.png" alt="在这里插入图片描述" /&gt;&lt;/p&gt;
&lt;p&gt;原子性**：事务中的各个操作要么全部完成，要么全部取消。
就像化学中的原子一样不可分割、不可分裂。如果一个事务执行到一半有问题执行失败了，执行不下去了，那么这个事务必须全部回退。
&lt;strong&gt;一致性&lt;/strong&gt;：事务完成时，所有数据都保持一致状态。
这个定义其实比较模糊。事务一般会操作数据，数据库中数据的状态会被更新，因为事务操作，数据会从一个状态到另一个状态，这个状态必须是合理合法的，数据逻辑必须和真实世界的逻辑一致。这里可能比较抽象，打个比方：比如说甲有100元，乙有200元，他们合起来的钱是300元，这时乙向甲转账100元，那么甲就有200元，乙有100元，他们合起来的钱仍然是300元。重点：&lt;em&gt;这个虚拟世界的数据变化应该与真实世界的逻辑保持一致&lt;/em&gt;。
&lt;strong&gt;隔离性&lt;/strong&gt;：多个事务并发执行的结果必须和分开单独执行的结果一致。
比如2个事务，一个接着一个的串行执行，必须和并行执行结果一致。（这个是wiki的官方理解，也是SQL标准中的定义，请记住这个定义，这个是本篇的重点）
&lt;strong&gt;持久性&lt;/strong&gt;：事务处理结束后，对数据的修改就是永久的。
如果更新后数据放入内存中，关机就没了，那么他理应放入磁盘里，那么放入磁盘是安全的吗？如果磁盘损坏了呢？我们可以有高可用架构写多份数据，再延伸一下还可以有地域级别的容灾，那如果我们再杠一下，多个地域都挂了呢？如果从架构上来介绍，这个问题好像没有答案。但是从&lt;em&gt;用户的角度&lt;/em&gt;来看，其实比较容易理解。比如用户在存钱的时候，他把钞票放进去了，那么账户上应该显示他存入的钱的数字，这个数字对于用户来说是永久的，用户认为即使天塌下来，他的账户里都应该有这个数字，这是持久性的含义。&lt;/p&gt;

&lt;h3 class="relative group"&gt;ANSI-SQL92标准
 &lt;div id="ansi-sql92标准" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#ansi-sql92%e6%a0%87%e5%87%86" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;


&lt;img src="https://lastdba.com/img/csdn/41ff840d82af.png" alt="在这里插入图片描述" /&gt;&lt;/p&gt;
&lt;p&gt;1992年美国国家标准ANSI SQL-92标准中定义了4种隔离级别和3种异常现象。
虽然现在的数据库行业基本都参照ISO国际标准了。



&lt;img src="https://lastdba.com/img/csdn/32fd2f2e70e0.png" alt="在这里插入图片描述" /&gt;
但这个92年的美国标准对数据库行业影响非常大，相信很多玩数据库小伙伴的都知道4种隔离级别。&lt;/p&gt;

&lt;h3 class="relative group"&gt;92标准的隔离级别
 &lt;div id="92标准的隔离级别" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#92%e6%a0%87%e5%87%86%e7%9a%84%e9%9a%94%e7%a6%bb%e7%ba%a7%e5%88%ab" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;ANSI SQL-92标准定义了4种隔离级别



&lt;img src="https://lastdba.com/img/csdn/7b6b2fd5d336.png" alt="在这里插入图片描述" /&gt;
事务的隔离级别从高到低。注意看可串行化：系统中所有的事务并行执行时和串行化执行时的结果没有差别，事务之间互不影响
。这个是不是跟ACID的隔离性定义有点像？
4种隔离级别都可以满足事务全做或全部不做，只是在隔离性上有不同的定义，所有的隔离级别都可有原子性、一致性、持久性，但不同的隔离级别有不同的隔离性，&lt;strong&gt;从定义上看，其实只有可串行化是完全满足ACID的&lt;/strong&gt;。&lt;/p&gt;

&lt;h3 class="relative group"&gt;92标准的异常现象
 &lt;div id="92标准的异常现象" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#92%e6%a0%87%e5%87%86%e7%9a%84%e5%bc%82%e5%b8%b8%e7%8e%b0%e8%b1%a1" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;92标准中定义了3种异常现象，网上有很多相关的定义，其实很多说的都不太准确，我们这里直接从&lt;em&gt;92标准文档&lt;/em&gt;中摘取出来3种异常现象的定义&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://lastdba.com/img/csdn/80b283e33a76.png" alt="在这里插入图片描述" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;脏读&lt;/strong&gt;：事务T1更新了一行，事务T2可以在事务T1提交前读到这个行。如果T1执行了回退，T2会读到一个从未提交的行。
*脏读有个明显的问题，用户可能不知道钱是不是到账了，在事务没有完成前用户就可以查到账户里有钱已经转入了，但是某些原因失败了导致事务回退，钱又没了，这对用户来说是难以理解的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;不可重复读&lt;/strong&gt;：事务T1读取了一行，事务T2更新或删除了这行并提交了。如果T1再次读取这行，它会发现行被更改或删除了。
&lt;strong&gt;幻读&lt;/strong&gt;：事务T1通过某些条件读取到了N行，事务T2执行sql生成了行并满足了这个条件，T1重复读取时发现了不一致的行结果。
*不可重复读和幻读的区别在于一是其他事务的更新或删除导致同一事务内读数不一致，一个是其他事务的插入导致同一事物内读数不一致&lt;/p&gt;

&lt;h3 class="relative group"&gt;92标准与pg
 &lt;div id="92标准与pg" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#92%e6%a0%87%e5%87%86%e4%b8%8epg" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;


&lt;img src="https://lastdba.com/img/csdn/2784c3889598.png" alt="在这里插入图片描述" /&gt;
在92标准的隔离级别和异常现象是呈阶梯式的，除了可串行化没有异常现象外，每个隔离级别都有阶梯式的增加了异常现象。然后我们看下面这个表格，这是pgsql中的隔离级别和异常现象，他跟92标准是&lt;strong&gt;不一样&lt;/strong&gt;的。&lt;/p&gt;

&lt;h3 class="relative group"&gt;为什么PostgreSQL数据库隔离级别与“92标准”不一致的情况呢？
 &lt;div id="为什么postgresql数据库隔离级别与92标准不一致的情况呢" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%b8%ba%e4%bb%80%e4%b9%88postgresql%e6%95%b0%e6%8d%ae%e5%ba%93%e9%9a%94%e7%a6%bb%e7%ba%a7%e5%88%ab%e4%b8%8e92%e6%a0%87%e5%87%86%e4%b8%8d%e4%b8%80%e8%87%b4%e7%9a%84%e6%83%85%e5%86%b5%e5%91%a2" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;为什么未提交读与“92标准”不一致？未提交读实在是太奇怪了，在关系型数据库中基本想不到使用未提交读的场景。它严重违反了事务的隔离性。PostgreSQL将“未提交读”视为“已提交读”&lt;/li&gt;
&lt;li&gt;为什么可重复读与“92标准”不一致？PostgreSQL通过快照实现MVCC多版本并发控制， PostgreSQL中的可重复读级别实际上是快照隔离级别，这个隔离级别实际上没有幻读这个异常现象&lt;/li&gt;
&lt;li&gt;虽然“92标准”影响深远，但是还是有许多数据库没有全部实现它。&lt;/li&gt;
&lt;li&gt;ANSI SQL-92标准定义模糊。“92标准”在数据库行业很有代表性，&lt;em&gt;“它很好，但不够好”&lt;/em&gt;。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;事务的历史
 &lt;div id="事务的历史" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%ba%8b%e5%8a%a1%e7%9a%84%e5%8e%86%e5%8f%b2" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;事务的历史
 &lt;div id="事务的历史-1" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%ba%8b%e5%8a%a1%e7%9a%84%e5%8e%86%e5%8f%b2-1" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;理解 &lt;em&gt;“它很好，但不够好”&lt;/em&gt;，需要把回顾一下事务的历史，时间往回推40年。



&lt;img src="https://lastdba.com/img/csdn/9510b3d76415.png" alt="在这里插入图片描述" /&gt;
注意92标准提出的时间和“92批判”的时间。虽然92标准很“烂”，但是仍然对数据库行业影响深远。随后在很多串行化理论得到证实后，PostgresSQL数据库第一个在商业数据库中实现了SSI。&lt;/p&gt;

&lt;h3 class="relative group"&gt;对92标准的批判
 &lt;div id="对92标准的批判" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%af%b992%e6%a0%87%e5%87%86%e7%9a%84%e6%89%b9%e5%88%a4" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;在92标准出来不久，一些微软工程师和学者对92标准做了批评，并在提出了更多的隔离级别和异常现象。
之前92标准中定义了4个隔离级别和3个异常现象，在“对92的批评”中有6种隔离级别和8种异常现象。



&lt;img src="https://lastdba.com/img/csdn/9e1cc8e57c9e.png" alt="在这里插入图片描述" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;更多的隔离级别和异常现象出现， 它们没有在ANSI SQL-92中定义&lt;/li&gt;
&lt;li&gt;快照隔离在可重复读和可串行化间。这也是为什么pgsql的可重复读跟可串行化这么像的原因之一&lt;/li&gt;
&lt;li&gt;写偏序异常提出。它会在快照隔离级别发生。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;热门数据库的隔离级别


&lt;img src="https://lastdba.com/img/csdn/de1258812b3c.png" alt="在这里插入图片描述" /&gt;
 &lt;div id="热门数据库的隔离级别在这里插入图片描述" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%83%ad%e9%97%a8%e6%95%b0%e6%8d%ae%e5%ba%93%e7%9a%84%e9%9a%94%e7%a6%bb%e7%ba%a7%e5%88%ab%e5%9c%a8%e8%bf%99%e9%87%8c%e6%8f%92%e5%85%a5%e5%9b%be%e7%89%87%e6%8f%8f%e8%bf%b0" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;mysql在serializability隔离级别下，读对数据加读共享锁，读会阻塞写&lt;/li&gt;
&lt;li&gt;oracle其实也可以设置serializability隔离级别，并号称是支持可串行化的，但是它不是真正的可串行化，只是snapshot isolation&lt;/li&gt;
&lt;li&gt;PostgreSQL支持serializability，它在snapshot isolation基础上实现可串行化，全称为可串行化快照隔离Serializable Snapshot Isolation (SSI) ，读写不会相互阻塞&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;能看出来3者的差别，只有pgsql的可串行化是有干货的。&lt;/p&gt;

&lt;h3 class="relative group"&gt;为什么oracle欺骗了我们？
 &lt;div id="为什么oracle欺骗了我们" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%b8%ba%e4%bb%80%e4%b9%88oracle%e6%ac%ba%e9%aa%97%e4%ba%86%e6%88%91%e4%bb%ac" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;oracle欺骗了我们什么呢？他把&lt;em&gt;快照隔离&lt;/em&gt;这个隔离级别当成&lt;em&gt;可串行化&lt;/em&gt;隔离级别糊弄我们。
为什么会发生这种情况呢？
如果我们把snapshot isolation加到ANSI SQL-92标准中



&lt;img src="https://lastdba.com/img/csdn/88c0c04ad181.png" alt="在这里插入图片描述" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“92标准”的异象定义较少，也没有定义快照隔离，以92标准来看，snapshot isolation看上去跟serializable差不多&lt;/li&gt;
&lt;li&gt;大部分关系型数据库都以“92标准”为标准，包括oracle。但是随后更好的标准出现后，他们没有做出改变&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;为什么弱隔离级别在学术上有问题，实际上没出现严重问题 ？
 &lt;div id="为什么弱隔离级别在学术上有问题实际上没出现严重问题-" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%b8%ba%e4%bb%80%e4%b9%88%e5%bc%b1%e9%9a%94%e7%a6%bb%e7%ba%a7%e5%88%ab%e5%9c%a8%e5%ad%a6%e6%9c%af%e4%b8%8a%e6%9c%89%e9%97%ae%e9%a2%98%e5%ae%9e%e9%99%85%e4%b8%8a%e6%b2%a1%e5%87%ba%e7%8e%b0%e4%b8%a5%e9%87%8d%e9%97%ae%e9%a2%98-" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;非可串行化隔离级别的异常现象，一般都需要在高并发情况下才会发生，低并发数据库不太会出现问题；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;当异常现象真的发生的时候，有些应用可能没发现异常现象或检查到异常但对他们不重要；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;有可能数据异常了，但应用只是返回报错，并进入数据异常处理程序；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;成本过高。不仅是数据库串行化隔离级别开发成本高，应用对可串行化也需要适应成本。光是理解这部分复杂的理论就不是一件容易的事；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;高级别的隔离会丢失一些性能。大量的改造工作可能是吃力不讨好的，应用需要在“高并发”和“无异常现象”间做抉择；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;业务基于机制开发，而不是规则开发。业务多少有点适应弱隔离级别的异常现象，特别是RC 。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 class="relative group"&gt;可串行化有什么意义？
 &lt;div id="可串行化有什么意义" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%8f%af%e4%b8%b2%e8%a1%8c%e5%8c%96%e6%9c%89%e4%bb%80%e4%b9%88%e6%84%8f%e4%b9%89" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;如果弱隔离在真实世界都好像没问题，那么可串行化还有什么意义呢？其实是有的&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;虽然应用适应了弱隔离级别，但是不代表他们真的理解了&lt;/li&gt;
&lt;li&gt;使用可串行化，应用可以极大的减少对数据异常的担忧&lt;/li&gt;
&lt;li&gt;除了可串行化外，其他的隔离级别都有各自的异常现象，他们也不完全满足ACID的隔离性&lt;/li&gt;
&lt;li&gt;可串行化可以消灭异常现象这个“蛀虫”，完全保证数据的安全性&lt;/li&gt;
&lt;li&gt;可串行化在理论上已经证明可以实现&lt;/li&gt;
&lt;li&gt;一些可串行的实现确实极大的降低了并发性，但是还有其他的可串行化实现，对并发性影响很小。比如说，可串行化快照隔离SSI可串行化的实现&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 class="relative group"&gt;SSI理论知识
 &lt;div id="ssi理论知识" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#ssi%e7%90%86%e8%ae%ba%e7%9f%a5%e8%af%86" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;说了那么多事务的基本知识和事务的历史，终于来到了SSI的概念。但在了解SSI之前，还得先了解2个概念：可串行化、快照隔离&lt;/p&gt;

&lt;h3 class="relative group"&gt;可串行化
 &lt;div id="可串行化" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%8f%af%e4%b8%b2%e8%a1%8c%e5%8c%96" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;


&lt;img src="https://lastdba.com/img/csdn/71f922c0363f.png" alt="在这里插入图片描述" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;可串行化的含义&lt;/strong&gt;
如果每个事务本身是正确的，即满足某些完整性条件，那么包括这些事务的任何串行执行的时间表是正确的（其事务仍然满足其条件）：“串行”意味着事务在时间上不重叠，并且不能相互干扰，即彼此之间存在完全隔离。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;可串行化的实现&lt;/strong&gt;
事务发展早期，可串行化（serializable）通过严格两阶段锁（SS2PL）实现，读写相互阻塞，直到事务结束。消除了异常现象但SS2PL丢失了高性能。
除了SS2PL实现可串行化，还有其他方式，比如可串行化快照隔离（SSI）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;可串行化的意义&lt;/strong&gt;
为了保证没有异常，可串行化会丢失一些并发性（不同实现方式有所不同），但可以真正保证数据的ACID隔离性。也就是说没有实现串行化的数据库，其实没有完全支持ACID特性。
可串行化在理论上已经证明可以实现，但是真实的数据库世界有点”不正常“。实际上，可串行化是事务隔离级别中最高级的，也是学者和业界大佬强力推荐的隔离级别，不过绝大部分数据库在RC或快照隔离级别上运行。&lt;/p&gt;

&lt;h3 class="relative group"&gt;快照隔离
 &lt;div id="快照隔离" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%bf%ab%e7%85%a7%e9%9a%94%e7%a6%bb" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;快照隔离的定义&lt;/strong&gt;
在快照隔离下执行的事务是在事务开始时拍摄的数据库快照上操作的。当事务结束时，只有当事务更新的值自快照拍摄以来没有外部更改时，它才会成功提交。
快照隔离级别顾名思义就是就是使用了快照，这广泛用于实现MVCC，使多版本并发机制支持用户并发执行事务。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;快照隔离的出现&lt;/strong&gt;
ANSI SQL92并未定义快照隔离snapshot isolation(SI)，这个隔离级别随着数据库行业发展才出现。1992年 ANSI SQL92标准基于数据库的锁而定义，所以没有快照隔离级别这个定义。直到1995年《批判》的出现才被提出。&lt;/p&gt;

&lt;h3 class="relative group"&gt;SSI
 &lt;div id="ssi" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#ssi" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;


&lt;img src="https://lastdba.com/img/csdn/8142817784c7.png" alt="在这里插入图片描述" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;可串行化快照隔离SSI&lt;/strong&gt;
由于快照隔离的广泛应用，而可串行化是学术上数据库需要达到的隔离级别目标。可串行化快照隔离Serializable Snapshot Isolation (SSI) 顾名思义，在快照隔离的基础上实现可串行化。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;为什么有SSI？&lt;/strong&gt;
由于ANSI92标准的模糊性，虽然没有定义快照隔离，但许多数据库实际上就是使用的快照隔离。而快照隔离同样存在一些异常现象（包括写偏序），SSI的出现就是为了解决这些异常现象。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SSI相对于S2PL的优势&lt;/strong&gt;
传统的可串行化通过S2PL实现，在S2PL下写操作会阻塞其他事务读写，虽然可以实现可串行化，不会有写偏序异常等问题，但会产生很多锁冲突，降低并发性能。而通过快照实现的MVCC读写互不阻塞，只有写写冲突。在此基础上实现的SSI对并发性的影响相比传统S2PL要小很多。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PG实现SSI&lt;/strong&gt;
SSI在pg9.1开始实现SSI，是第一个实现SSI的商业数据库。&lt;/p&gt;

&lt;h3 class="relative group"&gt;3种依赖关系
 &lt;div id="3种依赖关系" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#3%e7%a7%8d%e4%be%9d%e8%b5%96%e5%85%b3%e7%b3%bb" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;


&lt;img src="https://lastdba.com/img/csdn/bd6547d3dd94.png" alt="在这里插入图片描述" /&gt;
**读写依赖：**事务T1写数据项的一个版本，事务T2读这个版本，意味着T1先于T2
**写写依赖：**事务T1写数据项的一个版本，事务T2使用一个新版本替换了这个版本，意味着T1先于T2
**读写反依赖：**事务T1写数据项的一个版本，事务T2读这个版本之前的版本，意味着T2先于T1&lt;/p&gt;

&lt;h3 class="relative group"&gt;写偏序的理论
 &lt;div id="写偏序的理论" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%86%99%e5%81%8f%e5%ba%8f%e7%9a%84%e7%90%86%e8%ae%ba" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;由于某些冲突构成环，会出现串行化异常。也就是说，有些并行执行的事务，从理论上就是不可串行化的。其中比较容易理解的一个就是写偏序(write skew)。
写偏序只发生在rw模型，ww、wr均不会发生写偏序，并且事务必须在并发条件下才会出现。&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://lastdba.com/img/csdn/30043eef5317.png" alt="在这里插入图片描述" /&gt;
简单写偏序：事务T1读写反依赖T2，T2又读写反依赖T1。这两个事务的并发执行是不可串行化的。&lt;/p&gt;

&lt;h3 class="relative group"&gt;写偏向的现实问题
 &lt;div id="写偏向的现实问题" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%86%99%e5%81%8f%e5%90%91%e7%9a%84%e7%8e%b0%e5%ae%9e%e9%97%ae%e9%a2%98" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;有许多现实案例可以出现写偏序异常，我们用一个经典的黑白球问题来理解写偏序



&lt;img src="https://lastdba.com/img/csdn/4dada0644aac.png" alt="在这里插入图片描述" /&gt;
袋中有4个球，2个白球和2个黑球。此时有两个事务，P和Q。P将所有黑球改成白球，Q将所有白球改成黑球。此时可以有两个串行执行，&amp;lt;P，Q&amp;gt;或&amp;lt;Q，P&amp;gt;。在这两种情况下，最终结果是袋中有4个白球或者4个黑球。
&lt;strong&gt;但是&lt;/strong&gt;，快照隔离允许另一种结果：
事务 P 拿出2个黑球
事务 Q 拿出2个白球
事务 P 将手中所有黑球改成白球，放回袋中
事务 Q 将手中所有白球改成黑球，放回袋中
此时袋中还是2个黑球和2个白球。这在任何一个串行执行中都是不可能的。
但这在快照隔离中是有效：每个事务都维护数据库的一致视图，并且其写集不与任何并发事务的写集重叠，如此白球黑球发生交换。&lt;/p&gt;
&lt;p&gt;我们还可以把问题具象化、更实际。举一个比较粗糙的例子：比如我手里有几个银行卡，一半冻结，一半解冻状态。我在一个终端上执行了所有卡冻结，然后在另一个终端上立即执行所有卡解冻。这个时候从目的上讲，我的卡应该是全部解冻的，但是出现了一个奇怪的现象，以前冻结的卡解冻了，以前解冻的卡冻结了。作为一个客户，我会感到困惑。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;黑白球问题说明&lt;/strong&gt;：快照隔离执行结果与串行化执行结果不一致，快照隔离下发生写偏序异常，数据结果与预期不一致。&lt;/p&gt;

&lt;h2 class="relative group"&gt;PostgreSQL中的SSI
 &lt;div id="postgresql中的ssi" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#postgresql%e4%b8%ad%e7%9a%84ssi" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;pg是怎么处理SSI的
 &lt;div id="pg是怎么处理ssi的" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#pg%e6%98%af%e6%80%8e%e4%b9%88%e5%a4%84%e7%90%86ssi%e7%9a%84" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;其实很简单就是把构成”危险结构“的某个支点事务取消。
我们先把隔离级别都设置为可串行化，表中有一些白球和一些黑球。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;T1&lt;/th&gt;
 &lt;th&gt;T2&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;set default_transaction_isolation = &amp;lsquo;serializable&amp;rsquo;;&lt;/td&gt;
 &lt;td&gt;set default_transaction_isolation = &amp;lsquo;serializable&amp;rsquo;;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;begin; update dots set color = &amp;lsquo;black&amp;rsquo; where color = &amp;lsquo;white&amp;rsquo;;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;begin; update dots set color = &amp;lsquo;white&amp;rsquo; where color = &amp;lsquo;black&amp;rsquo;;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;commit;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;commit;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;ERROR: could not serialize access due to read/write dependencies among transactions DETAIL: Reason code: Canceled on identification as a pivot, during commit attempt. HINT: The transaction might succeed if retried.&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;事务1把所有白色改成黑色，事务2把所有黑色改成白色，然后2个事务提交。第一个提交的事务成功了，第二个提交的事务失败了，这里是报错，说的是：&lt;em&gt;因为读写依赖不可串行化，把当前事务作为支点取消了，如果重新尝试事务，可能会成功&lt;/em&gt;。
这里当然会成功，另一个事务已经完成，一个事务不会构成依赖关系，不会构成环。在其他隔离级别，比如可重复读、已提交读，这个两个事务这样执行不会有任何报错，正常执行，但是数据执行结果跟SSI的执行结果不同。&lt;/p&gt;

&lt;h3 class="relative group"&gt;PostgreSQL对SSI实现的优化
 &lt;div id="postgresql对ssi实现的优化" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#postgresql%e5%af%b9ssi%e5%ae%9e%e7%8e%b0%e7%9a%84%e4%bc%98%e5%8c%96" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;postgresql在快照隔离级别基础上实现了可串行化SSI，并对其做了很多优化，以提高高隔离级别下的并发性，pgsql对ssi的优化主要有3点：
&lt;strong&gt;安全快照&lt;/strong&gt;：不会引起环形结构的只读事务，不必检测冲突，可减少检查负担和内存负担&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;延迟事务&lt;/strong&gt;：延迟事务可重新尝试。在检查到”危险结构“后，延迟事务会被取消，然后再次尝试执行。延迟事务需要显示声明&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;检测粒度升级&lt;/strong&gt;：多个细粒度的锁可合成粗粒度的锁减少内存开销&lt;/p&gt;
&lt;p&gt;优化结果：
优化结果-压测性能对比：



&lt;img src="https://lastdba.com/img/csdn/5bba1b13a844.png" alt="在这里插入图片描述" /&gt;
绿色线是快照隔离基准线，蓝色线pgsql的SSI性能跟快照隔离已经很接近了。而褐色的线是SSI在没有只读事务，全是数据更改事务的场景，能看出只读事务优化对性能提升也很大。实际上一般业务系统，只读事务都会比更改事务多。红色的线是严格两阶段提交实现的可串行化，性能惨不忍睹。
下面这个表格，是并发压力和事务失败率，因为有些事务需要取消才能打破环，所以可串行化肯定比弱隔离取消的事务更多，这个表格也能看出pgsql的SSI的并发度和事务成功率远高于严格两阶段提交。&lt;/p&gt;
&lt;p&gt;优化结果-请求量和失败率：



&lt;img src="https://lastdba.com/img/csdn/fe74c76c6333.png" alt="在这里插入图片描述" /&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;总结
 &lt;div id="总结" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%80%bb%e7%bb%93" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;可串行化能简化系统开发的问题，开发人员不需要管并发下事务的异常现象，特别是如今更多的高并发系统下。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;PostgreSQL的可串行化显然比严格两阶段提交模式更好。不仅性能更好，而且中止事务的概率也更低。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;PostgreSQL是第一个实现SSI的商业数据库，而很多传统关系型数据库根本不支持可串行化，pgsql数据库往前走了一大步。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;PostgreSQL不仅实现了SSI，还在此基础上做了很多优化，比如只读事务和内存优化，并且效果显著&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>我的年终总结2023</title><link>https://lastdba.com/2024/08/12/%E6%88%91%E7%9A%84%E5%B9%B4%E7%BB%88%E6%80%BB%E7%BB%932023/</link><pubDate>Mon, 12 Aug 2024 00:00:00 +0000</pubDate><guid>https://lastdba.com/2024/08/12/%E6%88%91%E7%9A%84%E5%B9%B4%E7%BB%88%E6%80%BB%E7%BB%932023/</guid><description>&lt;h2 class="relative group"&gt;As a DBA
 &lt;div id="as-a-dba" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#as-a-dba" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;从2023年初开始，我就给自己定下了23年的主要任务——&lt;strong&gt;学习PostgreSQL数据库&lt;/strong&gt;。虽然没有定下细致的计划，但总体的目标是把PG的一些基础知识学完。后来发现我想简单了，学习PG的成本比我想象的多的多，导致23年这个目标没有完成。比如PG事务章节，我以为2周可以拿下，我大概学了2个月。无论怎样，坚持学习还是学到了一些东西：&lt;/p&gt;</description><content:encoded>
&lt;h2 class="relative group"&gt;As a DBA
 &lt;div id="as-a-dba" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#as-a-dba" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;从2023年初开始，我就给自己定下了23年的主要任务——&lt;strong&gt;学习PostgreSQL数据库&lt;/strong&gt;。虽然没有定下细致的计划，但总体的目标是把PG的一些基础知识学完。后来发现我想简单了，学习PG的成本比我想象的多的多，导致23年这个目标没有完成。比如PG事务章节，我以为2周可以拿下，我大概学了2个月。无论怎样，坚持学习还是学到了一些东西：&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://lastdba.com/img/csdn/1783a492fc8a.png" alt="在这里插入图片描述" /&gt;&lt;/p&gt;
&lt;p&gt;其中优化器章节，其实是没有完成的，虽然我有罪但是我还是要解释。优化章节已经写了超过两个月了，不是我偷懒，而是根本写不完。已经写到触及typora的文字上限——8000字左右会卡，所以被动分P，已经分到第四P了：&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://lastdba.com/img/csdn/c2313549e7fe.png" alt="在这里插入图片描述" /&gt;&lt;/p&gt;
&lt;p&gt;即便是这样，优化章节应该一半都没有写到，只能厚着脸皮跨一年继续···个人感觉再来4个月，应该可以把优化章节完成···即便是这样，优先级还得往后稍稍，时间真的不够！&lt;/p&gt;

&lt;h2 class="relative group"&gt;READING
 &lt;div id="reading" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#reading" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;本身主业是数据库，理应把时间花在数据库上，课外阅读什么的应该往后稍稍。不过我还是不想放弃这部分内容，原因我想有三点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;阅读带来的价值短期无法估量&lt;/li&gt;
&lt;li&gt;阅读带来的知识充值愉悦感&lt;/li&gt;
&lt;li&gt;我利用的碎片时间来阅读，只是写读后感需要花2-3个小时，没有占用太多学习时间&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PG本身的技术书肯定是看了一些的，不过我是针对性的看内容，比如优化部分我会把《PostgreSQL指南 内幕探索》《PostgreSQL技术内幕 查询优化深度探索》《PostgreSQL查询引擎源码技术解析》《数据库查询优化器的艺术》拿到一起看某个知识点，不注重看没看完，不是一本本的顺序看完的，所以这里的阅读书目就只列课外书。&lt;/p&gt;
&lt;p&gt;2023年的课外书书单（按喜好排名）：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;《未来简史》&lt;/li&gt;
&lt;li&gt;《三国演义》&lt;/li&gt;
&lt;li&gt;《太空漫游》系列，2001、2010、2060、3001&lt;/li&gt;
&lt;li&gt;《马斯克》&lt;/li&gt;
&lt;li&gt;《黑猩猩政治》&lt;/li&gt;
&lt;li&gt;《再见，平庸时代》&lt;/li&gt;
&lt;li&gt;《走出荒野》&lt;/li&gt;
&lt;li&gt;《万智有灵》&lt;/li&gt;
&lt;li&gt;《杀死一只知更鸟》&lt;/li&gt;
&lt;li&gt;《穷爸爸富爸爸》&lt;/li&gt;
&lt;li&gt;《when breath becomes air》&lt;/li&gt;
&lt;li&gt;《变形记》《判决》《饥饿艺术家》等卡夫卡短篇小说&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;不咋滴：《超越自卑》《人性的弱点》《被讨厌的勇气》&lt;/p&gt;

&lt;h2 class="relative group"&gt;博客和公众号
 &lt;div id="博客和公众号" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%8d%9a%e5%ae%a2%e5%92%8c%e5%85%ac%e4%bc%97%e5%8f%b7" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;个人发文章有两个途径：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CSDN博客：&lt;a href="https://liuzhilong.blog.csdn.net" target="_blank" rel="noreferrer"&gt;https://liuzhilong.blog.csdn.net&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;公众号:liuzhilong62&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对于博客已经坚持写了很多年了，2023年的大变化就是主要写PostgreSQL方面的内容，并且提高技术深度。公众号是我今年才新开的坑，也是23年一大尝试。博客和公众号都可以做技术分享，但他们面向的用户还是有些区别的，博客可以作为一种技术积累，而公众号更像是技术资讯。圈内有很多大佬是每天一篇（甚至几篇）的模式，个人非常佩服。不过也有做精品文章而不在意每天要发东西的大佬。我个人还是比较喜欢后者，一次把某个领域的知识大致学完，比较有整体性和针对性。很多时候我都会把比较长的文章分P发公众号（太长了我自己都不爱看），博客上我是没有分P的，所以对某篇文章有兴趣的读者可以在CSDN上搜下我的文章，更易于阅读。&lt;/p&gt;
&lt;p&gt;为什么写东西？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自我学习价值&lt;/li&gt;
&lt;li&gt;技术研究价值&lt;/li&gt;
&lt;li&gt;传播价值&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;主动学习的效率要远远高于被动学习，就像下面这个学习金字塔（图片来自《穷爸爸和富爸爸》，课外书的价值！）：&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://lastdba.com/img/csdn/a5205d91518d.png" alt="img" /&gt;
实战、演讲这些途径可遇不可求的，将学习的东西输出文章分享，会大大提高知识点的理解能力。看完一篇文章，可能十分钟就结束了，但是要输出成文章，可能要花10倍不止的时间。&lt;/p&gt;
&lt;p&gt;今年还尝试了做纯翻译类的技术文章，虽然技术研究价值不高，但是还是有学习价值和传播价值的，看一遍和翻译一遍同样会有不一样的理解程度，就像上面说的：主动学习。不过现在有点纠结的是，以前看不懂的根据google机翻然后再自己再润色一遍，现在有gpt了，一整篇文章他翻出来我都不用动什么词句，主动学习价值严重流水，全给AI学习了···&lt;/p&gt;
&lt;p&gt;23年我的创作风格变化比较大，写的东西比较杂，什么都尝试过，当然也知道要做垂直领域的创作，不过还是忍不住搞些有的没的，甚至公众号的名字都没想好~。目前要写的东西比较明确的是：技术文章和课外书阅读感想，以技术文章为主，其他类型的文章应该不会再写了。至于后面还会不会调整也不知道，至少公众号还有调整空间，总之先这样，先发射再调整。&lt;/p&gt;
&lt;p&gt;23年的博客数据不太好统计了，只能给个2017年到2023年的博客数据，打个snapshot。&lt;/p&gt;
&lt;p&gt;CSDN blog：&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://lastdba.com/img/csdn/d6b07e98d21d.png" alt="在这里插入图片描述" /&gt;&lt;/p&gt;
&lt;p&gt;公众号followers：&lt;/p&gt;
&lt;p&gt;


&lt;img src="https://lastdba.com/img/csdn/dd005d674681.png" alt="在这里插入图片描述" /&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;最后
 &lt;div id="最后" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%9c%80%e5%90%8e" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;2023年最大的感悟——时间。时间真的不够！&lt;/p&gt;
&lt;p&gt;23年6月17日的时候参加PostgreSQL数据库技术峰会成都站的分享，把刚练成的热乎的PostgreSQL事务方面知识给大佬们分享，第一次上台相当紧张，这里还要感谢一下灿总给的机会。这次分享有个小插曲，可见23年的时间对我来说是多么局促。我另外还有个非全研究生的学习，分享当天就是我期末考试的时间，讲完我就直奔机场···最后还是缺考3门只有等重修···太难了&lt;/p&gt;
&lt;p&gt;什么work-life balance已经全面放弃了，能有个work-learning balance就不错。每天下班不是想休息而是想回家看书，最后还是有很多东西没有完成，留给了2024年的我。&lt;/p&gt;
&lt;p&gt;对2024年的期望：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;把论文完成，顺利毕业&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;把PG优化部分完成&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;再说&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</content:encoded></item><item><title>聊聊美剧202306</title><link>https://lastdba.com/2023/06/01/%E8%81%8A%E8%81%8A%E7%BE%8E%E5%89%A7202306/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><guid>https://lastdba.com/2023/06/01/%E8%81%8A%E8%81%8A%E7%BE%8E%E5%89%A7202306/</guid><description>&lt;p&gt;​
刚把《黄石》系列看完，决定写点最近看的美剧，总共十一部，小评一下，写点东西~&lt;/p&gt;
&lt;p&gt;《黄石》&lt;/p&gt;
&lt;p&gt;《黄石》已经到第五季了，看样子还得继续拍。刚开始看《黄石》的时候，确实有种陷进去的感觉，很美很宏伟的电视剧，画面很棒风景很优美。而且还可以了解真实的老美是怎么放牛的，真实的牧场主还真是一股子老地主的味儿···
第一季的剧情问题不大，Dutton家族、印第安人、州政府和开发商之间的剧情能还顶住，还能顺带看看cowboy放牛。不过后续季的剧情会出乎意料··的烂，简直看不懂，刷新编剧水平下限
聚焦到本剧的内核，为什么这么多人喜欢这部剧，就是因为《黄石》不仅讲述了真实的cowboy的生活（甚至后面还拍了点真牧场的cowboy生活），同时反映了现代社会发展背景下，老牧场难以生存的现状，而cowboy、private land又是美利坚文化的核心，不仅是Dutton家族固执地想保留这个放牧的模式，甚至有种美利坚城市发展和本地文化的冲突对抗。
我可以负责的说，剧情肯定是一季比一季烂，甚至烂到主线剧情看不了。不过如果还出续集，我看这部剧的优先级会比其他所有的都高。&lt;/p&gt;</description><content:encoded>&lt;p&gt;​
刚把《黄石》系列看完，决定写点最近看的美剧，总共十一部，小评一下，写点东西~&lt;/p&gt;
&lt;p&gt;《黄石》&lt;/p&gt;
&lt;p&gt;《黄石》已经到第五季了，看样子还得继续拍。刚开始看《黄石》的时候，确实有种陷进去的感觉，很美很宏伟的电视剧，画面很棒风景很优美。而且还可以了解真实的老美是怎么放牛的，真实的牧场主还真是一股子老地主的味儿···
第一季的剧情问题不大，Dutton家族、印第安人、州政府和开发商之间的剧情能还顶住，还能顺带看看cowboy放牛。不过后续季的剧情会出乎意料··的烂，简直看不懂，刷新编剧水平下限
聚焦到本剧的内核，为什么这么多人喜欢这部剧，就是因为《黄石》不仅讲述了真实的cowboy的生活（甚至后面还拍了点真牧场的cowboy生活），同时反映了现代社会发展背景下，老牧场难以生存的现状，而cowboy、private land又是美利坚文化的核心，不仅是Dutton家族固执地想保留这个放牧的模式，甚至有种美利坚城市发展和本地文化的冲突对抗。
我可以负责的说，剧情肯定是一季比一季烂，甚至烂到主线剧情看不了。不过如果还出续集，我看这部剧的优先级会比其他所有的都高。&lt;/p&gt;
&lt;p&gt;个人喜好：⭐️⭐️⭐️⭐️⭐️&lt;/p&gt;
&lt;p&gt;推荐指数：⭐️⭐️⭐️&lt;/p&gt;
&lt;p&gt;《1923》&lt;/p&gt;
&lt;p&gt;《黄石》系列剧，黄石的前传。《黄石》可能是因为太出名了，导致这个前传《1923》明星有点多，从一开始的印象就不好。这部剧可能是因为考虑到《黄石》剧情不好看，如果仅仅只是写牛仔的话，其实很难有好看的剧本，所以《1923》加入了两条支线剧情。但是加入支线剧情又导致另一个问题，这部剧没有那么黄石，剧情不停的剪切，没有“慢节奏”的黄石既视感。
印第安女孩的剧情看上去是完全与主线脱节的，不知道什么时候能接上。但是这条印第安女孩剧情感觉还不错。印第安人的土地被掠夺，他们的子女还要被送到福利院去强行接受白人的宗教洗脑。这条支线确实有黄石的内核在里面，印第安人也是冷血杀手设定，没有那种子弹都打中身体了还要搞点政治的违和感。剧情流畅不拖沓，这条支线比较好看。
而非洲剧情支线···虽然也能拍点风景，但是确实没有Dutton牧场好看，没有那个感觉。而他们出了非洲就有点拖剧情了，重点描写的是时代背景下的壮美爱情故事，但是这跟黄石有啥关系呢···而且这条线等了一整季都没有聚拢到主线剧情去···为了一个人物，铺垫了一整季，说是Dutton牧场的希望都在他身上，立意太高了，本身这条支线剧情也没那么好看，第二季剧情大概率是大扑街~
《1923》前面还有点牧场反抗时代洪流的剧情，后面纯拖剧情，连放牛的戏都不拍了，完全没看点，打又打不起，有点烂。一季总共才8集，剧情到一半就开始摆烂，啥黄石没学到就学到了烂尾。
其实能看出来这部剧是想继承黄石，但有想搞点新东西，比如拍那个时代的美国和欧洲（甚至非洲殖民），但是又整了个四不像。想重回那个时代的话，推荐《大西洋帝国》，时间线都是禁酒令后，比这个剧有时代感的多。&lt;/p&gt;
&lt;p&gt;个人喜好：⭐️⭐️⭐️&lt;/p&gt;
&lt;p&gt;推荐指数：⭐️⭐️&lt;/p&gt;
&lt;p&gt;《1883》&lt;/p&gt;
&lt;p&gt;《1883》，宏伟悲壮的西部牛仔片，《黄石》系列剧，《黄石》前传的前传。像在看一部史诗，意犹未尽。已经不仅仅是一部简单的电视剧，拍摄风格甚至有文学性和艺术性，同时又承载了一部分美利坚的开拓历史，那个时候美国刚结束内战没多久，百废待兴···
因为个人很喜欢《黄石》这类电视剧，《黄石》拍摄风格很合口味，但是正传剧情极度拉胯，甚至只想看他们在ranch骑马就行了，不想看主线剧情…《1883》弥补了这个缺憾，不要太多的复杂剧情——但也不要拉——就行了，看看valley，看看马，再来点宏伟的BGM，代入感很强。
《1883》整部剧其实也没有多少剧情，但是讲了一个很完整的故事。美利坚刚刚结束内战，正处在一个无主无法的时代，牛仔、劫匪、治安官、欧洲移民、印第安人···有一部分老套的西部牛仔骑马互射剧情，但更多的是关注牛仔的生活和移民对自由的向往，不过追求自由的道路上充满着艰辛：窃马贼、印第安部落、响尾蛇、龙卷风、还有这片无情的土地。很有深度的电视剧，除了女主的鼻涕扣分项外其他没有槽点，剧情是难得的完整不多不少，非常非常推荐。
摘一段喜欢的描述牛仔的台词&lt;/p&gt;
&lt;p&gt;个人喜好：⭐️⭐️⭐️⭐️⭐️&lt;/p&gt;
&lt;p&gt;推荐指数：⭐️⭐️⭐️⭐️⭐️&lt;/p&gt;
&lt;p&gt;《塔尔萨之王》&lt;/p&gt;
&lt;p&gt;爽片。70多岁的史泰龙主演，关了几十年的老黑帮重掌小城市黑道秩序，”不是我适应不了，是现在的人规矩有问题“，俺老派黑帮是讲规矩滴~剧情没什么槽点，没有拖沓，爽看。不知道后面还拍不拍了&lt;/p&gt;
&lt;p&gt;个人喜好：⭐️⭐️⭐️⭐️&lt;/p&gt;
&lt;p&gt;推荐指数：⭐️⭐️⭐️⭐️⭐️&lt;/p&gt;
&lt;p&gt;《星期三》&lt;/p&gt;
&lt;p&gt;爽片，还可以。我都没看过洛丽塔风格的美剧，看着还不错。前面还是很好看的，很新奇，后面重点讲悬疑就不行了，谁都看出来是哪个在捣鬼，就星期三（女主名）看不出来···（美剧里面很多悬疑剧都是这样，前面都很好看，后面就慢慢拉了。）没看过洛丽塔风格的可以试试&lt;/p&gt;
&lt;p&gt;个人喜好：⭐️⭐️⭐️⭐️&lt;/p&gt;
&lt;p&gt;推荐指数：⭐️⭐️⭐️&lt;/p&gt;
&lt;p&gt;《最后的生还者》&lt;/p&gt;
&lt;p&gt;由同名游戏改编，我居然没玩过~！也正因为没玩过所以才能心平气和看这部剧。由《权游》里人气很高的小熊女和红毒蛇主演，演的都很顺滑不出戏。是个末日僵尸类型的电视剧，不过僵尸不是病毒感染，而是真菌感染，僵尸脑子里全是菌。有一个印象深刻的片段：小熊女把卡在石头里的僵尸脑袋划了个口子，那里面的真菌都溢出来了，还是活的。可能就是真菌的原因看的要比一般丧尸爽一点，画面很好看，不是黑黢黢的，也没那么恶心。完整的剧集，画面非常棒，最后有段个人有点心理阴影的桥段很不适外，整体剧情绝对不拉跨，几个小故事都讲的很好，整体很好看，很推荐。&lt;/p&gt;
&lt;p&gt;个人喜好：⭐️⭐️⭐️⭐️&lt;/p&gt;
&lt;p&gt;推荐指数：⭐️⭐️⭐️⭐️⭐️&lt;/p&gt;
&lt;p&gt;《大西洋帝国》&lt;/p&gt;
&lt;p&gt;一个系列总共4季已完结。剧集发生在1920s的美国，刚刚颁布禁酒令，妇女站在酒吧门口呼吁女性权利，政客为了拉票支持女性但私下都做着贩酒生意，黑帮从车上下来穿着大衣拿着汤普森冲锋枪突突···大西洋帝国就是说的大西洋城（Atlantic City，在纽约下面一点）的黑帮帝国，靠着贩酒建造了富可敌国的帝国。相信不少人看过《美国往事》，可以把这部戏近似看成它的电视剧版。这部戏一言难尽，只有一季一季讲。
第一季神中神，有很多不可描述的画面，剧情不能说顺畅而是神乎其神，女性、黑人、走私酒、爵士乐、黑帮斗争、一战士兵···黑帮已经实际控制了这个城市，连报社都不想听市长说的什么。
第二季为第一季的续集，也很不错。
第三季槽点就来了，它不像前两季的续集（虽然有些剧情有衔接），但是完全可以独立出来看。你说他剧情不好吧，是的他很脱节，但是说他烂嘛，单领出来没毛病甚至有点好看。这一季有很多精彩桥段：半脸人一个打十个、辣妈惊为天人的剧情、长段的黑人solo blues，都超棒！
第四季槽点满满，我以为我最喜欢的角色沉寂了3季总该粉墨登场来点作用了，结果草草收场，编剧你要不就不要把他印在封面上好吗？搞得好像有什么大动作，给我期待半天···。第四季男主高度太高了感觉不好推动剧情（其实第三季就有这种感觉），第四季唯一亮点就是男主小时候的剧情，算是男主线完美收场。
有很多人物的后期剧情不太好，但是有很多人物的中期剧情又太精彩了···虽然这部剧人气不高，但是还是拿过奖的，而且能看到很多桥段被后面的一些高人气美剧借鉴。比如《绝美毒师》炸鸡叔桥段借鉴半脸男，《权力的游戏》托曼国王自杀桥段“完全”借鉴管家自杀···
个人很喜欢这部剧，身临其境的感受那个年代的繁华都市、奢靡的城市生活、地下酒吧的爵士乐、黑帮···非常放得开的剧情（指任何东西都放得开），系列整体好看，很有时代感。&lt;/p&gt;
&lt;p&gt;个人喜好：⭐️⭐️⭐️⭐️⭐️&lt;/p&gt;
&lt;p&gt;推荐指数：⭐️⭐️⭐️⭐️&lt;/p&gt;
&lt;p&gt;《兄弟连》&lt;/p&gt;
&lt;p&gt;相信很多人都听说过这部戏的大名，是的我居然没看过。我小学生的文笔有限，文化程度低，无法做出评价，只有一个“神”字可以说得出口。找个机会再看一遍~&lt;/p&gt;
&lt;p&gt;个人喜好：⭐️⭐️⭐️⭐️⭐️&lt;/p&gt;
&lt;p&gt;推荐指数：⭐️⭐️⭐️⭐️⭐️&lt;/p&gt;
&lt;p&gt;《太平洋战争》&lt;/p&gt;
&lt;p&gt;《太平洋战争》拍在《兄弟连》前面不久，其实是很好看的一部剧，但是奈何后面出了个妖怪，这部剧名气没那么高。《兄弟连》说的是二战美国的欧洲战场，这部戏说的是太平洋战场。很神奇的是，这两部剧就跟这两个战场一样，欧洲战场更为人所知，剧集也是一样的···甚至在电视剧中，同一饭桌上，欧洲战场的soldier炫耀缴获的德军万旗，而太平洋战场的soldier却什么都没拿到，略显没落。
虽然不太出名，但是非常非常推荐的一部剧。&lt;/p&gt;
&lt;p&gt;个人喜好：⭐️⭐️⭐️⭐️⭐️&lt;/p&gt;
&lt;p&gt;推荐指数：⭐️⭐️⭐️⭐️⭐️&lt;/p&gt;
&lt;p&gt;《曼达洛人》&lt;/p&gt;
&lt;p&gt;《曼达洛人》已经出到第三季了。也是红毒蛇主演的，也是爸爸带儿子的剧情···前两季挺好看的，人气也比较高。这次的第三季，不咋滴。曼达洛人应该还是类似游侠身份推动剧情好一点，一群曼达洛人创建家园感觉没那味儿，甚至主角属性都有点被抢了（跑吧哥，带着娃在银河系里冒险不好吗？）
这部戏我所说的好看，是在喜欢星战系列的前提下。国内喜欢星战的确实很少，不喜欢应该看不下去可以跳过。&lt;/p&gt;
&lt;p&gt;个人喜好：⭐️⭐️⭐️⭐️⭐️&lt;/p&gt;
&lt;p&gt;推荐指数：⭐️&lt;/p&gt;
&lt;p&gt;《白色巨塔》&lt;/p&gt;
&lt;p&gt;这部剧是一部日剧，我想以这部剧结束，因为它确实很棒，近乎完美。虽然有些年头了，但是看剧的时候不会感觉无聊，很多思想都很前卫，剧情跌宕起伏，善恶并不绝对，几个女性角色刻画的很好。能看到很老套的三角恋和剧情反转，重温一下还是相当不错的。财前教授最后的举动，也给全剧画上了完美的句号。日剧南波湾！&lt;/p&gt;
&lt;p&gt;个人喜好：⭐️⭐️⭐️⭐️⭐️&lt;/p&gt;
&lt;p&gt;推荐指数：⭐️⭐️⭐️⭐️⭐️&lt;/p&gt;
&lt;p&gt;最后
都是值得一看的剧，也有很多神剧。有些剧没有找到熟肉硬啃生的，比如黄石系列剧《1883》，因为没有很复杂的对话所以也啃过去了（旁白很有水平）···算是生肉首开。
这些剧基本都是近半年看的，所以拉起来一起说说。更早时候看的美剧其实也有很多精彩的，印象深刻，埋个坑有闲心了再聊吧~
希望下半年也能找到好剧。&lt;/p&gt;
&lt;p&gt;​&lt;/p&gt;</content:encoded></item></channel></rss>