本文概括出一些工作中可能会用到的Oracle 19c新特性,所有新增功能的说明请参考新特性官方文档《database-new-features-guide》
根据官方文档分为以下几个部分
1. General
1) Easy Connect Syntax Improvements
轻松连接语法改进
应用程序用于连接Oracle数据库的Easy Connect语法已得到扩展。此功能通过消除对Oracle Net连接参数文件(例如tnsnames.ora和sqlnet.ora)的需要,并且无需设置TNS_ADMIN环境变量,简化了常见连接用例的Oracle数据库应用程序部署和配置。
https://docs.oracle.com/en/database/oracle/oracle-database/19/netag/configuring-naming-methods.html#GUID-B0437826-43C1-49EC-A94D-B650B6A4A6EE
2) Oracle Network Log File Segmentation
Oracle网络日志文件分段
可以为Oracle网络组件(如Oracle Net Listener,CMAN和GSM)配置文本日志文件的最大大小和数量。此功能可防止日志文件大小不断增加的问题。
https://docs.oracle.com/en/database/oracle/oracle-database/19/netag/troubleshooting-oracle-net-services.html#GUID-6F554CD1-84EC-42F4-B968-1E6657452956
2. JSON
1) JSON-Object Mapping
JSON对象映射
此功能支持将JSON数据映射到SQL对象类型和集合类型。使得使用SQL对象和集合的程序更容易与基于JSON的应用程序进行交互。
2) JSON Update Operations
JSON更新操作
可以使用新的SQL函数json_mergepatch以声明方式更新JSON文档。可以使用单个语句将一个或多个更改应用于多个文档。此功能提高了JSON更新操作的灵活性。
3) Materialized View Support for Queries containing JSON_TABLE
物化视图支持包含JSON_TABLE的查询
物化视图查询重写已得到增强,因此具有JSON_EXISTS,JSON_VALUE和其他函数的查询可以利用包含JSON_TABLE函数的查询上创建的物化视图。
当表中的JSON文档包含数组时,此功能特别有用
3. SQL
DISTINCT option for LISTAGG aggregate
LISTAGG聚合的DISTINCT选项
使用新的DISTINCT关键字,可以在连接成单个字符串之前从指定的表达式中删除重复的值。这消除了在使用聚合LISTAGG函数之前创建复杂查询处理以查找不同值的需要。
https://docs.oracle.com/en/database/oracle/oracle-database/19/dwhsg/sql-analysis-reporting-data-warehouses.html#GUID-EDBADEC3-4DC5-4A3A-85EF-B64C45910B1D
1. General
1) Dynamically change Fast-Start Failover (FSFO) target
动态更改快速启动故障转移(FSFO)目标
目前,DBA必须禁用Fast_Start故障转移才能更改FSFO目标备用数据库。随着Oracle Database 12.2.0.1中多个FSFO目标的到来,这变得更加重要。此新命令将允许用户动态地将FSFO目标备用数据库更改为目标列表中的另一个备用数据库,而无需禁用FSFO。
2) Simplified Database Parameter Management in a Broker Configuration
简化Broker配置中的数据库参数管理
用户现在可以使用SQL * Plus ALTER SYSTEM命令管理所有与Data Guard相关的参数设置,或者使用新的EDIT DATABASE ... SET PARAMETER命令管理DGMGRL中的所有Data Guard相关参数设置。DGMGRL界面中的参数更改将立即在目标数据库上执行。此外,如果需要,此新功能将允许用户使用ALL限定符修改Data Guard配置中所有数据库的参数,从而无需到每个数据库并执行ALTER SYSTEM命令或为每个数据库设置Broker属性使用多个EDIT PROPERTY命令。SHOW命令也已更新,以显示目标数据库中参数的当前设置。
消除数据库的Data Guard参数设置与Data Guard Broker的属性设置之间的不一致,通过允许它们根据需要通过SQL * Plus接口进行所有参数管理,简化数据库管理员对数据库参数的管理。
3) Oracle Data Guard Multi-Instance Redo Apply works with the In-Memory Column Store
Oracle Data Guard多实例redo应用可与In-Memory列存储一起使用
在Oracle Data Guard环境中,备库的日志应用速度一直是一个重要挑战,如果备库不能够及时跟上主库的步调,则可能影响备库的使用。
自Oracle 12.2 版本开始,支持多实例并行应用,这极大加快了恢复进度,在 18c 中,开始支持 In-Memory 列式存储,在 19c 中,并行应用开始支持 In-Memory列式存储。
现在可以在Active Data Guard备用数据库上同时启用Oracle数据库In-Memory列存储和Data Guard多实例redo应用。多实例redo应用将使用Active Data Guard备用数据库In-Memory列存储中的信息来尽可能提高应用速度。以前这两个功能互相排斥。
https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/configuring-data-guard-standby-databases-in-oracle-RAC.html#GUID-00B72AF1-0453-4FBD-901F-A3764631BE1F
4) Propagate Restore Points from Primary to Standby site
支持从主库到备库传播还原点
此前我们可以在主库上定义正常还原点或保证还原点,以便在出现任何逻辑损坏问题时实现快速时间点恢复。但是,此还原点存储在控制文件中,并不会传播到备库。如果发生故障转移,备库将成为主库,并且还原点信息将丢失。
此功能可确保还原点从主库传播到备库,因此即使在故障转移后,还原点也可用,简化了故障转移后还原和恢复过程的复杂性。
https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/managing-oracle-data-guard-physical-standby-databases.html#GUID-45D7D60E-ED0F-4B3E-9D32-EB5394196CAF
5) Flashback Standby database when Primary database is flashed back
备库随主库闪回
闪回数据库将整个数据库移动到较旧的时间点,并使用RESETLOGS打开数据库。此前,如果主库闪回,则备库不再与主库同步,需要手动来闪回备库到与主库相同的时间。如今引入了一个新参数(哪个???文档中目前只找到需要 the standby is open and flashback database is enabled),该参数使备库能够在主库上执行闪回数据库时自动闪回。
通过在主数据库闪回时自动闪回备用数据库,减少了时间,精力和人为错误,从而加快了同步速度并降低了RTO(但通常我们闪回备库…)。
https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/managing-oracle-data-guard-physical-standby-databases.html#GUID-252097AC-3070-43B6-88D8-919AE27F97AD
https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/examples-of-using-oracle-data-guard.html#GUID-09129494-CD98-44B6-821F-A4C2CB5AEE08
6) Active Data Guard DML Redirection
Data Guard 备库DML自动重定向
在使用 ADG 作为备库进行读写分离部署时,可能因为应用的原因,会有偶然的DML操作发送到备库上,在19c 中,Oracle 支持自动重定向备库 DML,具体执行步骤为:
更新会自动重定向到主库;
主库执行更新、产生和发送Redo日志到备库;
在Redo备库应用后,ADG会话会透明的看到更新信息的落地实施;
这一特性可以通过在系统级或者会话级设置参数 ADG_REDIRECT_DML 参数启用,通过这种方式,ADG 会话的 ACID 一致性得以保持,同时透明的支持『多数读,偶尔更新』应用的自然读写分离配置。
https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/managing-oracle-data-guard-physical-standby-databases.html#GUID-8AAD002C-ED06-4349-8BB5-EC8DB30B2628
https://mp.weixin.qq.com/s?__biz=MjM5MDAxOTk2MQ==&mid=2650280718&idx=1&sn=fb42d1737262e1946adb049a1a64da35&chksm=be478b188930020ef2b1e807cc1d7b58f5e7a55ccd41336bfa48b8128e8ee71c859b936b2cb1&mpshare=1&scene=1&srcid=&pass_ticket=HUrS14HR9pRUwpwMGlnBG09mKHD5ARqLaVmVVXp6a73vv6ScMajKd27JN%2BEwPDad#rd
7) Clear Flashback logs periodically for increased FRA size predictability
定期清除闪回日志以提高FRA大小的可预测性
从19c开始,简化了FRA中的空间管理。Oracle数据库监视FRA中的闪回日志,并自动删除超出保留期的闪回日志。当保留期时,将立即删除超出保留期的闪回日志。
通过自动确保闪回日志不会过度使用保留所需的空间,可以对数据库的存储管理和运行状况产生总体积极影响。
https://docs.oracle.com/en/database/oracle/oracle-database/19/bradv/maintaining-rman-backups.html#GUID-26C1A1E8-5555-4399-9DD1-39BA90E45A0C
8) PDB Recovery catalog
PDB恢复目录
支持了在目标数据库是PDB时与恢复目录的连接。
支持PDB作为目标数据库,并且可以使用虚拟专用目录(VPC)用户更精细地控制在PDB级别执行备份和还原操作的权限。元数据视图也是有限的,因此VPC用户只能查看用户已被授予权限的数据。
9) New Parameters for tuning automatic outage resolution with Data Guard
使用Data Guard调整自动中断解决方案的新参数
Oracle Data Guard在主数据库和备用数据库上有多个进程,用于处理重做传输和归档,这些进程通过网络相互通信。在某些故障情况下,网络挂起和断开连接或磁盘I / O问题,这些进程可能会挂起,可能导致重做传输和间隙解决的延迟。Data Guard有一个内部机制来检测这些挂起的进程并终止它们,从而允许正常的中断解决方案发生。在19c中,DBA可以通过使用两个新参数DATA_GUARD_MAX_IO_TIME和DATA_GUARD_MAX_LONGIO_TIME来调整此检测周期的等待时间,从而允许根据用户网络和磁盘I / O行为针对特定Data Guard配置调整等待时间。用户现在可以调整Oracle Data Guard自动中断解决方案以满足其特定需求。
https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/release-changes.html#GUID-509A6343-5882-4260-BAD0-DC6B2BDC8301
10) Finer granularity Supplemental Logging
更精细的粒度补充记录
为逻辑备用或完整数据库复制要求设计/实现了补充日志记录。这会在仅复制表的子集的环境中增加不必要的开销。细粒度的补充日志记录将为部分数据库复制用户提供一种方法,以禁用不感兴趣的表的补充日志记录,这样即使在数据库或模式级别启用了补充日志记录,也不存在不感兴趣的表的补充日志记录开销。
在数据库中只有一些表需要补充日志记录的情况下,使用此功能可以显着减少资源使用和重做生成方面的开销。例如,GoldenGate部分复制配置。
2. Sharding
1) Propagation of Parameter Settings Across Shards
跨越Shards的参数设置的传播
在Oracle Database 19c之前,数据库管理员必须在分片数据库中的每个分片上配置ALTER SYSTEM参数设置。此功能允许管理员集中管理参数设置并将参数设置从分片目录传播到所有数据库分片,从而提供易管理性。
2) Generation of Unique Sequence Numbers Across Shards
跨越碎片生成唯一序列号
在Oracle Database 19c之前,如果您需要跨分片的唯一编号,则必须自己管理它。在19c中,Oracle Sharding允许您为具有唯一约束的非主键列的分片生成全局唯一的序列号,或者使用Sequence对象的任何其他用法,该对象在逻辑上应该是全局生成的分片数据库的所有分片中的一个对象唯一值,它由分片数据库处理。
当customer_id是分片键时,客户通常需要为非主键列生成唯一ID,例如order_id。对于这种情况,此功能允许您跨分片生成唯一的序列号,而不需要您管理应用程序中给定非主键列的全局唯一性。
3) Multiple Table Family Support for System-Managed Sharding
Oracle Sharding 特性的多表家族支持
在Oracle Sharding特性中,被分片的表称为 Sharded table,这些sharded table的集合称为表家族(Table Family),表家族之中的表具备父-子关系,一个表家族中没有任何父表的表叫做根表(root table),每个表家族中只能有一个根表。表家族中的所有Sharded table都按照相同的sharding key(主键)来分片。
在12.2,在一个SDB中只支持一个表家族,在19c 中,SDB 中允许存在多个表家族,每个通过不同的 Sharding Key进行分片,这是 Sharding 特性的一个重要增强,有了 Multiple Table Families 的支持,Sharding 才可能找到更多的应用场景
4) Support for Multiple PDB-Shards in the Same CDB
支持同一CDB中的多个PDB-Shards
18c支持CDB中的一个PDB分片。19c中,Oracle Sharding允许您在CDB中使用多个PDB用于分片或分片目录数据库,但有一些限制。
5) Support for Multi-Shard Query Coordinators on Shard Catalog Standbys
支持分片目录备用数据库上的多分片查询协调器
在19c之前,只有主分片目录数据库可以用作多分片查询协调器。在19c中,您还可以在分片目录数据库的Oracle Active Data Guard备用数据库上启用多分片查询协调器。提高了多分片查询工作负载的可伸缩性和可用性。
1. Automatic Indexing
自动化索引创建和实施
对于关系型数据库来说,索引是使得查询加速的重要手段,而如何设计和创建有效的索引,长期以来是一项复杂的任务。
在 Oracle 19c 中,自动化索引创建和实施技术被引入进来,Oracle 通过模拟人工索引的思路,建立了内置的专家系统。数据库内置的算法将会通过捕获、识别、验证、决策、在线验证、监控的全流程管控索引自动化的过程。这一特性将会自动帮助用户创建有效的索引,并通过提前验证确保其性能和有效性,并且在实施之后进行监控,这一特效将极大缓解数据库索引维护工作。
自动化还将删除由新创建的索引(逻辑合并)废弃的索引,并删除自动创建但长时间未使用的索引。
https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/managing-indexes.html#GUID-D1285CD5-95C0-4E74-8F26-A02018EA7999
2. Bitmap based count distinct SQL Function
基于位图的COUNT DISTINCT SQL函数
在 19c 中,SQL 功能获得了进一步的增强,这其中包括对于 COUNT DISTINCT的进一步优化,在12c中引入的近似 Distinct 操作已经可以为特定SQL带来极大性能提升,现在基于位图的COUNT DISTINCT 操作继续为查询加速
例如,如下案例,通过物化视图的自动改写,可以实现显著的性能提升。
https://docs.oracle.com/en/database/oracle/oracle-database/19/dwhsg/basic-materialized-views.html#GUID-03107B3C-72D3-4B6B-A922-F13FF0CF2B6D
3. High-Frequency Automatic Optimizer Statistics Collection
高频自动优化器统计收集
您可以配置轻量级,高频率的自动任务,定期收集过时对象的优化程序统计信息。在执行DBMS_STATS统计信息收集作业之间,统计信息可能会过时。通过更频繁地收集统计信息,优化程序可以生成更优化的计划。
https://docs.oracle.com/en/database/oracle/oracle-database/19/tgsql/gathering-optimizer-statistics.html#GUID-374ACB86-2512-4658-9170-8505B3EACF7D
4. Automatic Resolution of SQL Plan Regressions
自动化的SQL执行计划管理
在19c 中,数据库缺省的就会启用对于所有可重用SQL的执行计划捕获(当然SYS系统Schema的SQL除外),然后进行自动的执行计划评估,评估可以针对AWR中的TOP SQL、SGA、STS中的SQL进行。
如果被评估的执行计划优于当前执行计划(一般是要有效率 50%以上的提升),会被加入到执行计划基线库中,作为后续的执行选择,而不佳的执行计划则会被标记为不可接受。
https://docs.oracle.com/en/database/oracle/oracle-database/19/tgsql/managing-sql-plan-baselines.html#GUID-A94CFA49-910A-4237-A7BB-39BFA94E227E
5. Hybrid Partitioned Tables
Oracle的混合分区表支持
在 19c 中,Oracle 增强了分区特性,可以将外部对象存储上的文件,以外部表的方式链接到分区中,形成混合分区表,借助这个特性,Oracle 将数据库内外整合打通,冷数据可以剥离到外部存储,热数据在数据库中在线存储。
这个特性借助了外部表的特性实现,以下是一个示例:
CREATE TABLE orders ( order_idnumber,
order_dateDATE,…)
EXTERNAL PARTITION ATTRIBUTES
( TYPE oracle_loaderDEFAULTDIRECTORY data_dir
ACCESS PARAMETERS (..) REJECT LIMIT unlimited)
PARTITION BY RANGE(order_date)
( partition q1_2015 values less than(‘2014-10-01’)
EXTERNAL LOCATION (‘order_q1_2015.csv’),
partition q2_2015 values less than (‘2015-01-01’),
partition q3_2015 values less than (‘2015-04-01’),
partition q4_2015 values less than (‘2015-07-01’));
https://docs.oracle.com/en/database/oracle/oracle-database/19/vldbg/partition-concepts.html#GUID-C2B04585-BCFC-40D6-AFAB-47DF99A31C76
1. Automated install, config, and patch
1) Create a duplicate of a non-CDB or an Oracle RAC database using DBCA in silent mode
使用DBCA以静默方式创建非CDB或Oracle RAC数据库的副本
您现在可以使用DBCA 的createDuplicateDB命令以静默方式创建非CDB或Oracle RAC数据库的副本。此功能可以复制数据库,从而便于开发人员处理数据库的相同副本。
2) Relocate a PDB to another CDB using DBCA in silent mode
在静默模式下使用DBCA将PDB重定位到另一个CDB
3) Create a PDB by cloning a remote PDB using DBCA in silent mode
在静默模式下使用DBCA克隆远程PDB来创建PDB
您现在可以通过使用DBCA 的createPluggableDatabase命令的createFromRemotePDB参数以静默方式克隆远程PDB来创建PDB
4) Simplified Image Based Oracle Database Client Installation
基于简化映像的Oracle数据库客户端安装
从Oracle Database 19c开始,通过基于映像的安装简化了Oracle Database Client软件的安装和配置。
要安装Oracle数据库客户端,请创建新的Oracle主目录,将映像文件解压缩到新创建的Oracle主目录中,然后运行安装向导以启动Oracle Database Client安装和配置。
与Oracle数据库和Oracle Grid Infrastructure映像文件安装一样,Oracle数据库客户端映像安装可简化Oracle数据库客户端安装并确保最佳实践部署。Oracle Database Client安装二进制文件继续以传统格式提供为非映像zip文件。
5) Root Scripts Automation Support for Oracle Database Installation
Root脚本自动化支持Oracle数据库安装
从Oracle Database 19c开始,数据库安装程序或设置向导提供了一些选项,用于设置在数据库安装期间根据需要自动运行根配置脚本的权限。您可以继续手动运行根配置脚本。
设置root配置脚本的权限以便在无需用户干预的情况下运行可以简化数据库安装并帮助避免意外的权限错误。
隔离消耗过多系统资源的SQL语句
资源管理器会终止及自动隔离过度消耗CPU和I / O资源而终止的SQL语句,被隔离的SQL语句再次执行时会被阻止。
https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/diagnosing-and-resolving-problems.html#GUID-1CF7E2B7-1BF8-4907-889E-1107CAA83E51
2. Resource Manager Automatically Enabled for Database In-Memory
数据库In-Memory自动启用资源管理器
当INMEMORY_SIZE大于0时,将自动启用Oracle数据库资源管理器。
https://docs.oracle.com/en/database/oracle/oracle-database/19/inmem/in-memory-column-store-architecture.html#GUID-C5D44481-13B9-4C6F-BD6E-B6E75A901BA5
3. Automatic Database Diagnostic Monitor (ADDM) Support for Pluggable Databases (PDBs)
PDB中支持ADDM
您现在可以在多租户环境中对PDB使用ADDM分析。PDB级别的ADDM分析使您能够有效地调整PDB以获得更好的性能。
https://docs.oracle.com/en/database/oracle/oracle-database/19/tgdba/automatic-performance-diagnostics.html#GUID-B4B0899D-90A3-4E19-8654-1D5C34A48FD5
4. Real-Time SQL Monitoring for Developers
面向开发人员的实时SQL监控
没有SELECT_CATALOG_ROLE的数据库用户可以为自己的SQL语句生成和查看SQL Monitor报告,包括执行计划和性能指标。
数据库开发人员的主要职责是编写和调优SQL语句。访问SQL Monitor报告使开发人员无需数据库管理员权限即可执行这些任务。
https://docs.oracle.com/en/database/oracle/oracle-database/19/tgsql/monitoring-database-operations.html#GUID-4048D00E-2635-42C8-A37D-71EFAC619062
5. Workload Capture and Replay in a PDB
PDB中的工作负载捕获和重放
Oracle Real Application Testing旨在捕获和重放根容器数据库(CDB)级别的多租户数据库。从19c开始,您可以从单个可插拔数据库PDB中捕获和重放工作负载。
https://docs.oracle.com/en/database/oracle/oracle-database/19/ratug/introduction-to-database-replay.html#GUID-B47B8419-A618-4EB5-A402-54157C609AAA
6. Memoptimized Rowstore - Fast Ingest
内存优化行存储 – 快速抓取
此功能可以让IoT等应用程序快速将数据插入19c,以最少的事务开销处理大量小事务。使用快速抓取功能的插入操作会临时将数据缓冲在大池中,然后以延迟的异步方式批量写入磁盘。
https://docs.oracle.com/en/database/oracle/oracle-database/19/tgdba/tuning-system-global-area.html#GUID-CFADC9EA-2E2F-4EBB-BA2C-3663291DCC25
1. Zero-Downtime Oracle Grid Infrastructure Patching
零停机Oracle Grid Infrastructure补丁
零停机Oracle Grid Infrastructure Patching可以在不中断数据库操作的情况下修补Oracle Grid Infrastructure。修补程序以非滚动方式应用,一次修补一个节点,同时节点上的数据库实例保持运行。零停机Oracle Grid Infrastructure Patching支持具有两个或更多节点的集群上的Oracle RAC数据库。
https://docs.oracle.com/en/database/oracle/oracle-database/19/cwadd/rapid-home-provisioning.html#GUID-A40643A4-9ADA-4F35-87B6-967BC24363FF
2. Fine-Grained Single-Instance PDB Patching
细粒度单实例PDB打补丁
您可以在Multitenant环境中修补单个PDB,从而使错误修复仅在特定PDB上,而不是在整个CDB上进行。
新的ALTER SYSTEM子句FLUSH PASSWORDFILE_METADATA_CACHE
ALTER SYSTEM的FLUSH PASSWORDFILE_METADATA_CACHE子句用于刷新拥有最新详细信息的数据库密码文件元数据高速缓存。可以通过查询V$PASSWORDFILE_INFO视图来检索数据库密码文件的最新详细信息。
更改数据库密码文件名或位置时,此功能非常有用
https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/getting-started-with-database-administration.html#GUID-2031F0DC-CC00-468C-9DFA-E6299420FE21
2. Support for Additional Algorithms for Offline Tablespace Encryption
离线表空间新增加密算法支持
在以前的版本中,离线表空间加密仅支持AES128加密算法。除了AES128之外,此版本还引入了对AES192、AES256、ARIA、GOST和3DES加密算法的支持。
3. PDB_GUID as Audit Record Field Name for SYSLOG and the Windows Event Viewer
PDB_GUID作为SYSLOG和Windows事件查看器的审计记录字段名称
SYSLOG和Windows事件查看器的审计记录字段现在有一个新字段PDB_GUID,用于标识与统一审计跟踪记录关联的可插入数据库。
2. 新增数据字典
3. 新增动态性能视图
4. 过期特性(下个版本可能会不支持)
5. 不再支持的特性
l ALL_STREAMS_COLUMNS
l ALL_STREAMS_MESSAGE_RULES
l ALL_STREAMS_RULES
l ALL_STREAMS_UNSUPPORTED
l DBA_STREAMS_ADMINISTRATOR
l DBA_STREAMS_COLUMNS
l DBA_STREAMS_MESSAGE_RULES
l DBA_STREAMS_RULES
l DBA_STREAMS_SPLIT_MERGE
l DBA_STREAMS_SPLIT_MERGE_HIST
l DBA_STREAMS_STMTS
l DBA_STREAMS_STMT_HANDLERS
l DBA_STREAMS_TRANSFORMATIONS
l DBA_STREAMS_UNSUPPORTED
l V$STREAMS_CAPTURE
l V$STREAMS_MESSAGE_TRACKING
l V$STREAMS_TRANSACTION
参考
https://docs.oracle.com/en/database/oracle/oracle-database/19/newft/new-features.html
https://blog.csdn.net/u011277123/article/details/78179897
http://blog.itpub.net/35489/viewspace-1171932/
https://www.oracle.com/technetwork/cn/tutorials/smiley-fsfo-088047-zhs.html
https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/release-changes.html#GUID-509A6343-5882-4260-BAD0-DC6B2BDC8301
https://mp.weixin.qq.com/s?__biz=MjM5MDAxOTk2MQ==&mid=2650280740&idx=1&sn=482f1dee9142db40e1e501d9892a0fd2&chksm=be478b32893002248af819cad98d1babdc088c02b799f63dc90f49a56b79e7eb79335932a959&scene=0&xtrack=1#rd