暂无图片
暂无图片
6
暂无图片
暂无图片
暂无图片

Oracle 19c RAC ADG 备库每 4 小时归档备份该如何做才完美?

369

大家好,我是JiekeXu,江湖人称“强哥”,青学会MOP技术社区主席,荣获Oracle ACE Pro称号,OpenTenBase ACE,金仓社区最具价值倡导者KVA,崖山最具价值专家YVP,IvorySQL开源社区专家顾问委员会成员,KWDB社区MVP,墨天轮MVP,墨天轮连续多年度“墨力之星”,拥有Oracle OCP/OCM认证,MySQL 5.7/8.0 OCP认证以及金仓KCA、KCP、KCM、KCSM证书,TiDB PCTA/PCTP证书、PCA、OBCA、OGCA等众多国产数据库认证证书,欢迎关注我的微信公众号“JiekeXu DBA之路”,然后点击右上方三个点“设为星标”置顶,更多干货文章才能第一时间推送,谢谢!

目 录

前 言 归档备份问题排查 备库归档备份策略 调整优化备份脚本 查看备份日志 查看备份结果 参考文章

前 言

作为 Oracle 核心库备份策略则是非常重要的一环,上面要求数据库每天都要备份,而且归档日志还需要每四个小时备份一次,频率比较高,为了缓解主库的压力,则将数据库备份和归档备份放到备库来做。数据库备份通过前一篇文章介绍的 Avamar 备份一体机来做,但归档日志却不能在其上备份,奇怪的是去年备库还是单机的时候也是可以备份的,年底换成 RAC 就不能备份归档日志了,也没有继续去排查原因不知道是不支持还是遇到其他问题了,故后面通过命令行的方式调用备份一体机存储来备份。哦,对了,突然想起前几天某数据库大“砖家”说“数据库备份是牛马关心的事情”,在网络上还火了一时,我也搞不懂是“牛马 DBA 不应该关心数据库备份”还是说 “DBA 不应该关心备份,关心备份的都是牛马”?

数据库“砖家”难道不知道备份终于一切吗?难道对数据没有敬畏之心吗?这是什么样的“砖家”呀,看到网友比较经典的评论:这是砖窑里面出来的吗,这些年太多的“砖家”了。哈哈哈,要是以后有人喊我专家,我第一个反应,这有点侮辱人了。 扯远了扯远了还是回到今天的正题吧,看看备份问题。

归档备份问题排查

上面说了通过命令行的方式调用备份一体机存储来备份归档日志,由于备份保留策略失效导致长期以来的归档日志都没有被删除,进而致使备份一体机存储空间占满无法备份,这点在上一篇中有说过。那么为什么备份删除策略会失效呢,我们来看看具体的脚本。

如下定时任务每4小时执行一次备份归档和删除归档的操作,只是删除归档时间较早保证执行完删除一天前的归档日志后再备份,这样可以保障在备份期间不会因删除归档日志而出现找不到备份的报错;还有为啥不是保留4个小时而是保留一天呢?这里主要考虑灾备环境因网络断开或者延迟超过 4 小时发生灾备不同步的情况。

-- 定时任务 [oracle@jieke-r1 tmp]$ crontab -l #oracle rman arch cli_avamar arch_backup 20 */4 * * * /bin/bash /home/oracle/db/scripts/rman_arch_cli.sh >> /home/oracle/tmp/rman_arch_avamar_cli.log ### oracle mran delete archivelog 02 */4 * * * /bin/bash /home/oracle/tmp/clear_arch.sh -- 归档清理脚本 [oracle@jieke-r1 ~]$ more /home/oracle/tmp/clear_arch.sh #!/bin/bash DATE=`date +%Y%m%d%H` source /home/oracle/.bash_profile rman target / log=/home/oracle/tmp/log/clear_rman_${DATE}.log<<EOF crosscheck archivelog all; delete noprompt force expired archivelog all; delete noprompt archivelog all completed before 'sysdate-1'; exit EOF -- 归档备份脚本示例 [oracle@jieke-r1 ~]$ more /home/oracle/db/scripts/rman_arch_cli.sh #!/bin/bash source /home/oracle/.bash_profile rman target / log /home/oracle/tmp/rman_arch_cliava.log append << EOF run { configure controlfile autobackup on; set controlfile autobackup format for device type sbt to "CONTROLFILE.%F"; ## 配置多个通道访问备份一体机存储 allocate channel c1 type sbt PARMS="SBT_LIBRARY=/usr/local/avamar/ora_rac/lib/libobk_avamar64.so" format 'JIEKE_ARCH_%d_%U'; send channel 'c1' '"--prefix=19/CLIBACKUP/" "--flagfile=/usr/local/avamar/ora_rac/var/flagfile.txt" "--bindir=/usr/local/avamar/ora_rac/bin" "--cacheprefix=JIEKEDB_c1" "-- logfile=/usr/local/avamar/ora_rac/var/clientlogs/CLI_channel1.log"'; ### 设置保留策略,30 天 CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 30 DAYS; ### 备份归档日志命令 backup as compressed backupset archivelog all; delete noprompt force expired backup; delete noprompt force expired archivelog all; backup current controlfile format "CONTROLFILE.%U"; release channel c1; release channel c2; release channel c3; release channel c4; } EOF

注意看,就是上面设置的保留策略,咋看没有问题,因为在主库备份这样设置是没有任何错误的,但是在备库配置保留策略则不生效会报错 RMAN-05021,如下示例。另外,backup as compressed backupset archivelog all 归档日志备份压缩是没有问题的,但前面说了本地归档保留策略是一天,那么每天每隔4小时备份,总共备份6次有五次是重复的备份;保留策略失效外加多次重复备份,这就导致了占用大量的备份存储空间,进而导致备份一体机存储空间被占满。

图片.png

RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 30 DAYS; RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of configure command at 04/17/2026 19:19:36 RMAN-05021: this configuration cannot be changed for a BACKUP or STANDBY control file

备库归档备份策略

既然上面这样的配置不生效,那就得尝试其他办法了,不过尝试了好几个办法都是不能实现备份保留 30 天后再删除,最后只能放弃,然后优化备份,最终通过上一篇讲的 modify-snapups --mode=delete 命令行的方式来删除。

## 方案一 ## 直接删除 30 天前的备份 RUN { ALLOCATE CHANNEL c1 TYPE sbt PARMS= '...'; BACKUP ARCHIVELOG ALL format "JIEKE_ARCH.%U_%T_%t"; # 备份后删除原日志 DELETE NOPROMPT OBSOLETE RECOVERY WINDOW OF 30 DAYS; # 删除过期备份 } ## 方案二 ## 使用 rman 备份命令“keep until time” RUN { ALLOCATE CHANNEL c1 TYPE sbt PARMS= '...'; backup archivelog all format "JIEKE_ARCH.%U_%T_%t" keep until time 'sysdate+30'; delete noprompt obsolete; delete noprompt expired backup; delete noprompt expired archivelog all; } ## 方案三 ## 使用备份一体机命令参数 "--retention=30D" run { configure controlfile autobackup on; set controlfile autobackup format for device type sbt to "CONTROLFILE.%F"; allocate channel c1 type sbt PARMS="SBT_LIBRARY=/usr/local/avamar/ora_rac/lib/libobk_avamar64.so" format 'JIEKE_ARCH_%d_%U'; send channel 'c1' '"--prefix=19/CLIBACKUP/" "--flagfile=/usr/local/avamar/ora_rac/var/flagfile.txt" "--bindir=/usr/local/avamar/ora_rac/bin" "--retention=30D" "--cacheprefix=JIEKEDB_c1" "-- logfile=/usr/local/avamar/ora_rac/var/clientlogs/CLI_channel1.log"'; backup archivelog all format "JIEKE_ARCH.%U_%T_%t"; } ## 方案四 ## 使用时间条件删除旧备份 run { ## 在 delete obsolete 命令中添加基于时间的条件 delete noprompt backup completed before 'sysdate-30'; delete noprompt archivelog all completed before 'sysdate-30'; }

上面四种方案在主库 rman 中配置是没有问题的,但在备库就不灵了,多多少少都有问题,或者备份重复,或者备份无压缩,下面进一步调整优化脚本。

调整优化备份脚本

如果非要在 rman 中删除删除备份片,可以指定 tag 保留时间,但是每次备份生成的 tag 都不是固定的,没法统一设置保留时间,下面方案还是有问题,无法实现诉求。另外,备份归档日志也可以压缩备份,并且备份自上次备份以后的归档日志,实现增量备份,这样就可以大大减少备份量,节省资源。

RMAN> LIST BACKUP SUMMARY; RMAN> LIST BACKUPSET; RMAN> change backupset TAG 'TAG20260417T162712' keep until time 'SYSDATE+14'; allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=300 instance=jxrt4db1 device type=DISK keep attributes for the backup are changed backup will be obsolete on date 2026-05-05 16:08:30 backup set key=3055 RECID=3055 STAMP=1230827383 keep attributes for the backup are changed backup will be obsolete on date 2026-05-05 16:08:30 backup set key=3056 RECID=3056 STAMP=1230827388 keep attributes for the backup are changed backup will be obsolete on date 2026-05-05 16:08:30 backup set key=3057 RECID=3057 STAMP=1230827389 keep attributes for the backup are changed backup will be obsolete on date 2026-05-05 16:08:30 backup set key=3058 RECID=3058 STAMP=1230827392 keep attributes for the backup are changed backup will be obsolete on date 2026-05-05 16:08:30 backup set key=3059 RECID=3059 STAMP=1230827540 keep attributes for the backup are changed backup will be obsolete on date 2026-05-05 16:08:30 backup set key=3060 RECID=3060 STAMP=1230827551 keep attributes for the backup are changed backup will be obsolete on date 2026-05-05 16:08:30 backup set key=3061 RECID=3061 STAMP=1230827555 keep attributes for the backup are changed backup will be obsolete on date 2026-05-05 16:08:30 backup set key=3062 RECID=3062 STAMP=1230827560 keep attributes for the backup are changed backup will be obsolete on date 2026-05-05 16:08:30 backup set key=3063 RECID=3063 STAMP=1230827567

要备份自上一次备份以来的新增归档日志,需要使用 RMAN 的特定语法,下面列出了三种方案仅供参考。

## 方法1:使用 BACKUP ARCHIVELOG FROM ...命令(最常用) # 备份自上一次备份以来的所有归档日志 # 方法1A:从指定序列号开始(需要先查询上次备份的最大序列号,脚本不太好实现) # 方法1B:从指定SCN开始(需要先查询 SCN,脚本也不太好实现) # 方法1C:从指定时间开始(推荐) BACKUP ARCHIVELOG FROM TIME 'SYSDATE-1' # 备份最近1天内的归档日志 FORMAT "JIEKE_ARCH.%U_%T_%t"; ## 方法2:使用 NOT BACKED UP 子句 -- 备份所有从未备份过的归档日志 BACKUP ARCHIVELOG ALL NOT BACKED UP FORMAT "JIEKE_ARCH.%U_%T_%t"; -- 或指定至少备份N次(N=1表示至少备份1次) BACKUP ARCHIVELOG ALL NOT BACKED UP 1 TIMES FORMAT "JIEKE_ARCH.%U_%T_%t"; ## 方法3:从指定序列号开始备份 -- 假设上次备份到了序列号 100,从 101 开始备份 BACKUP ARCHIVELOG FROM SEQUENCE 101 FORMAT "JIEKE_ARCH.%U_%T_%t";

生产环境完整的备份脚本示例

backup as compressed backupset archivelog all not backed up 1 times 备份自上次备份以来的归档日志并且使用压缩备份。或备份最近 4 小时内的归档日志 backup as compressed backupset archivelog from time 'sysdate-4/24' format "JIEKE_ARCH.%U_%T_%t"

[oracle@jieke-r1 ~]$ more /home/oracle/db/scripts/rman_arch_cli.sh #!/bin/bash source /home/oracle/.bash_profile rman target / log /home/oracle/tmp/rman_arch_cliava.log append << EOF run { configure controlfile autobackup on; set controlfile autobackup format for device type sbt to "CONTROLFILE.%F"; allocate channel c1 type sbt PARMS="SBT_LIBRARY=/usr/local/avamar/ora_rac/lib/libobk_avamar64.so" format 'JIEKE_ARCH_%d_%U'; send channel 'c1' '"--prefix=19/CLIBACKUP/" "--flagfile=/usr/local/avamar/ora_rac/var/flagfile.txt" "--bindir=/usr/local/avamar/ora_rac/bin" "--cacheprefix=JIEKEDB_c1" "-- logfile=/usr/local/avamar/ora_rac/var/clientlogs/CLI_channel1.log"'; allocate channel c2 type sbt PARMS="SBT_LIBRARY=/usr/local/avamar/ora_rac/lib/libobk_avamar64.so" format 'JIEKE_ARCH_%d_%U'; send channel 'c2' '"--prefix=19/CLIBACKUP/" "--flagfile=/usr/local/avamar/ora_rac/var/flagfile.txt" "--bindir=/usr/local/avamar/ora_rac/bin" "--cacheprefix=JIEKEDB_c2" "-- logfile=/usr/local/avamar/ora_rac/var/clientlogs/CLI_channel2.log"'; allocate channel c3 type sbt PARMS="SBT_LIBRARY=/usr/local/avamar/ora_rac/lib/libobk_avamar64.so" format 'JIEKE_ARCH_%d_%U'; send channel 'c3' '"--prefix=19/CLIBACKUP/" "--flagfile=/usr/local/avamar/ora_rac/var/flagfile.txt" "--bindir=/usr/local/avamar/ora_rac/bin" "--cacheprefix=JIEKEDB_c3" "-- logfile=/usr/local/avamar/ora_rac/var/clientlogs/CLI_channel3.log"'; allocate channel c4 type sbt PARMS="SBT_LIBRARY=/usr/local/avamar/ora_rac/lib/libobk_avamar64.so" format 'JIEKE_ARCH_%d_%U'; send channel 'c4' '"--prefix=19/CLIBACKUP/" "--flagfile=/usr/local/avamar/ora_rac/var/flagfile.txt" "--bindir=/usr/local/avamar/ora_rac/bin" "--cacheprefix=JIEKEDB_c4" "-- logfile=/usr/local/avamar/ora_rac/var/clientlogs/CLI_channel4.log"'; backup as compressed backupset archivelog all not backed up 1 times; delete noprompt force expired backup; delete noprompt force expired archivelog all; backup current controlfile format "CONTROLFILE.%U"; ## list backup of archivelog all completed after 'sysdate-4/24'; release channel c1; release channel c2; release channel c3; release channel c4; } EOF

如下所示,查看生成的备份日志发现日志中显示已经跳过了上次已备份的日志。

[oracle@jieke-r1 tmp]$ tail -2000 /home/oracle/tmp/rman_arch_cliava.log | grep "skipping archived logs" skipping archived logs of thread 1 from sequence 553392 to 553752; already backed up skipping archived logs of thread 2 from sequence 557623 to 557964; already backed up skipping archived logs of thread 1 from sequence 553504 to 553906; already backed up skipping archived logs of thread 2 from sequence 557721 to 558130; already backed up skipping archived logs of thread 1 from sequence 553582 to 554082; already backed up skipping archived logs of thread 2 from sequence 557790 to 558333; already backed up skipping archived logs of thread 1 from sequence 553748 to 554084; already backed up skipping archived logs of thread 2 from sequence 557958 to 558334; already backed up

查看备份日志

[oracle@jieke-r1 tmp]$ tail -406 /home/oracle/tmp/rman_arch_cliava.log Recovery Manager: Release 19.0.0.0.0 - Production on Tue Apr 14 12:20:01 2026 Version 19.23.0.0.0 Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved. connected to target database: JIEKEDB (DBID=657075540) RMAN> 2> 3> 4> 5> 6> 7> 8> 9> 10> 11> 12> 13> 14> 15> 16> 17> 18> 19> 20> using target database control file instead of recovery catalog old RMAN configuration parameters: CONFIGURE CONTROLFILE AUTOBACKUP ON; new RMAN configuration parameters: CONFIGURE CONTROLFILE AUTOBACKUP ON; new RMAN configuration parameters are successfully stored executing command: SET CONTROLFILE AUTOBACKUP FORMAT allocated channel: c1 channel c1: SID=4879 instance=JIEKEDB1 device type=SBT_TAPE channel c1: EMC|Avamar (avtar backup) sent command to channel: c1 allocated channel: c2 channel c2: SID=3507 instance=JIEKEDB1 device type=SBT_TAPE channel c2: EMC|Avamar (avtar backup) sent command to channel: c2 allocated channel: c3 channel c3: SID=1169 instance=JIEKEDB1 device type=SBT_TAPE channel c3: EMC|Avamar (avtar backup) sent command to channel: c3 allocated channel: c4 channel c4: SID=214 instance=JIEKEDB1 device type=SBT_TAPE channel c4: EMC|Avamar (avtar backup) sent command to channel: c4 Starting backup at 2026-04-14 12:20:11 RMAN-06820: warning: failed to archive current log at primary database cannot connect to remote database skipping archived logs of thread 1 from sequence 553748 to 554084; already backed up skipping archived logs of thread 2 from sequence 557958 to 558334; already backed up channel c1: starting compressed archived log backup set channel c1: specifying archived log(s) in backup set input archived log thread=2 sequence=558417 RECID=2210685 STAMP=1230546349 input archived log thread=1 sequence=554180 RECID=2210687 STAMP=1230546394 input archived log thread=2 sequence=558418 RECID=2210689 STAMP=1230546458 ----省略中间结果--- piece handle=JIEKE_ARCH_JIEKEDB_sm4lhi1o_836502_1_1 tag=TAG20260414T122019 comment=API Version 2.0,MMS Version 19.4.100.116 channel c2: backup set complete, elapsed time: 00:30:26 Finished backup at 2026-04-14 13:23:39 Starting Control File and SPFILE Autobackup at 2026-04-14 13:23:40 piece handle=CONTROLFILE.c-657075540-20260414-05 comment=API Version 2.0,MMS Version 19.4.100.116 Finished Control File and SPFILE Autobackup at 2026-04-14 13:51:56 specification does not match any backup in the repository specification does not match any archived log in the repository Starting backup at 2026-04-14 13:53:23 channel c1: starting full datafile backup set channel c1: specifying datafile(s) in backup set including current control file in backup set channel c1: starting piece 1 at 2026-04-14 13:53:27 channel c1: finished piece 1 at 2026-04-14 14:21:23 piece handle=CONTROLFILE.so4lhlik_836504_1_1 tag=TAG20260414T135324 comment=API Version 2.0,MMS Version 19.4.100.116 channel c1: backup set complete, elapsed time: 00:27:56 Finished backup at 2026-04-14 14:21:23 Starting Control File and SPFILE Autobackup at 2026-04-14 14:21:24 piece handle=CONTROLFILE.c-657075540-20260414-06 comment=API Version 2.0,MMS Version 19.4.100.116 Finished Control File and SPFILE Autobackup at 2026-04-14 14:49:10 released channel: c1 released channel: c2 released channel: c3 released channel: c4 RMAN> Recovery Manager complete.

查看完整日志发现,日志中有一个警告 RMAN-06820: warning: failed to archive current log at primary database,排查发现这个警告信息在 Oracle 11.2.0.4 中就是一个 Bug,RMAN-06820 ORA-17629 During Backup at Standby Site (新文档编号:KB766466)。根据此文章信息,该问题 Oracle 一个未发布的 bug,编号为 Bug 8740124,从 11.2.0.4 版本开始,将当前备库 standby 重做日志作为备库 RMAN 归档日志备份的一部分,这是通过在主库强制进行日志切换来实现的,然而,在尝试这样做时,与主库的连接失败了。

This is due to this bug:Bug 17580082 - ACTIVE STANDBY - RMAN-06820: WARNING: FAILED TO ARCHIVE CURRENT LOG AT PRIMARY Status: 32 - Not a Bug. To Filer

图片.png

图片.png

这个问题也可以绕过,就是 rman 登录时不使用操作系统认证,直接使用用户密码的方式登录,这样备份就不会有这个告警了。

### rman target / 登录备份的 warning 警告 Starting backup at 2026-04-17 16:27:07 RMAN-06820: warning: failed to archive current log at primary database cannot connect to remote database channel ch1: starting compressed archived log backup set channel ch1: specifying archived log(s) in backup set input archived log thread=1 sequence=110092 RECID=141232 STAMP=1230760809 input archived log thread=2 sequence=109474 RECID=141233 STAMP=1230760809 ### rman target sys/oracle@stdby(备库 tns) 登录可正常备份 (oracle)$ rman nocatalog Recovery Manager: Release 19.0.0.0.0 - Production on Fri Apr 17 16:42:27 2026 Version 19.23.0.0.0 Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved. RMAN> connect target sys/Oracle@JIEKESTDBY Starting backup at 2026-04-17 16:47:23 current log archived at primary database current log archived at primary database skipping archived logs of thread 1 from sequence 109905 to 110159; already backed up skipping archived logs of thread 2 from sequence 109299 to 109536; already backed up channel ch1: starting compressed archived log backup set channel ch1: specifying archived log(s) in backup set

查看备份结果

-- 查看当前 RMAN 备份进度 SELECT SID, SERIAL#, CONTEXT, SOFAR, TOTALWORK, ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE" FROM V$SESSION_LONGOPS WHERE OPNAME LIKE 'RMAN%' AND OPNAME NOT LIKE '%aggregate%' AND TOTALWORK != 0 AND SOFAR <> TOTALWORK; 16:20:01 SYS@JIEKEDB1> col status for a25 16:20:01 SYS@JIEKEDB1> select START_TIME,END_TIME,INPUT_BYTES/1024/1024/1024 INPUT_GB,OUTPUT_BYTES/1024/1024/1024 OUTPUT_GB,STATUS,INPUT_TYPE,ELAPSED_SECONDS FROM V$RMAN_BACKUP_JOB_DETAILS where START_TIME >= sysdate-7 order by START_TIME; START_TIME END_TIME INPUT_GB OUTPUT_GB STATUS INPUT_TYPE ------------------- ------------------- ---------- ---------- ------------------------- ------------- 2026-04-13 18:20:41 2026-04-13 18:21:44 1.3258667 1.3260498 COMPLETED CONTROLFILE 2026-04-13 18:23:59 2026-04-13 20:52:52 24.2838745 9.03125 COMPLETED WITH WARNINGS ARCHIVELOG 2026-04-14 00:20:11 2026-04-14 02:45:50 14.6051636 5.50390625 COMPLETED WITH WARNINGS ARCHIVELOG 2026-04-14 05:01:59 2026-04-14 06:14:05 7540.86133 6454.04883 COMPLETED WITH WARNINGS DB INCR 2026-04-14 06:20:09 2026-04-14 08:20:32 2.23892498 2.05371094 COMPLETED WITH WARNINGS ARCHIVELOG 2026-04-14 12:20:11 2026-04-14 14:49:11 22.3629761 8.26953125 COMPLETED WITH WARNINGS ARCHIVELOG -- 按天汇总备份数据量 SELECT TRUNC(START_TIME) AS BACKUP_DATE, INPUT_TYPE, SUM(INPUT_BYTES)/1024/1024/1024 AS INPUT_GB, SUM(OUTPUT_BYTES)/1024/1024/1024 AS OUTPUT_GB, COUNT(*) AS BACKUP_COUNT FROM V$RMAN_BACKUP_JOB_DETAILS WHERE START_TIME > SYSDATE - 30 GROUP BY TRUNC(START_TIME), INPUT_TYPE ORDER BY BACKUP_DATE DESC, INPUT_TYPE; -- 监控归档日志备份情况,确保没有遗漏 SELECT THREAD#, SEQUENCE#, FIRST_TIME, NEXT_TIME, ARCHIVED, BACKUP_COUNT, STATUS FROM V$ARCHIVED_LOG WHERE FIRST_TIME > SYSDATE - 10 ORDER BY THREAD#, SEQUENCE#;

备份状态为 COMPLETED WITH WARNINGS 就是因为 RMAN-06820: warning 造成的,生产环境中暂时没有处理,不影响使用,目前也挺折腾的,就先这样吧~

参考文章

RMAN-06820 ORA-17629 During Backup at Standby Site (新文档编号:KB766466) ZLDRA Issue: RMAN-06820: Warning: Failed To Archive Current Log At Primary Database (KB245709)

全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~

欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!
——————————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
ITPUB:https://blog.itpub.net/69968215
腾讯云:https://cloud.tencent.com/developer/user/5645107
——————————————————————————

facebook_pro_light_1920 × 1080  副本.png

最后修改时间:2026-04-22 09:33:01
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论