当前位置: 首页 > news >正文

Oracle故障案例之-19C时区补丁DSTV38更新

📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前从事DBA及程序编程
擅长Oracle、MySQL、PG 运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

文章目录

  • 前言
    • 📣 1.故障案例
    • 📣 2.补丁下载
    • 📣 3.升级Opatch版本
    • 📣 4.检查Patch 是否冲突
    • 📣 5.应用补丁34006614
    • 📣 6.确认升级
    • 📣 7.升级TZ
      • ✨ 7.1 Upgrade mode下启动数据库
      • ✨ 7.2 升级前准备
      • ✨ 7.3 查找受影响的表
      • ✨ 7.4 开始升级TZ
      • ✨ 7.5 关闭升级模式
    • 📣 8.查看升级结果

前言

Oracle19C通过dump方式从TSTZ version 38 导入到低版本TSTZ version 32时报ORA-39405,本博客做了详细的处理过程说明。

📣 1.故障案例

ORA-39405: Oracle Data Pump does not support importing from a source database with TSTZ version 38 into a target database with TSTZ version 32.

在这里插入图片描述

--目标库
SQL> SELECT * FROM v$timezone_file;
FILENAME                VERSION     CON_ID
-------------------- ---------- ----------
timezlrg_32.dat              32          0--源库
SQL> SELECT * FROM v$timezone_file;
FILENAME                VERSION     CON_ID
-------------------- ---------- ----------
timezlrg_38.dat              38          0SELECT DBMS_DST.get_latest_timezone_version FROM dual;

综合以上报错及官方的案例,特对本次故障进行如下的处理,需要对原库进行补丁的升级

📣 2.补丁下载

下载最新的 OPatch 和 DSTV38 更新补丁

Opatch Version Patch:
https://updates.oracle.com/download/6880880.html

在这里插入图片描述

DST V38 Patch:
https://updates.oracle.com/download/34006614.html

在这里插入图片描述

📣 3.升级Opatch版本

[root@dbhost ~]# cd /opt
[root@dbhost opt]# chown oracle:oinstall -R p6880880_190000_Linux-x86-64.zip
[root@dbhost opt]# chmod 755 -R p6880880_190000_Linux-x86-64.zip

--备份原来的OPatch
[root@dbhost ~]# su - oracle
Last login: Sun Aug 20 13:09:38 CST 2023 on pts/0
[oracle@dbhost ~]$ cd $ORACLE_HOME/
[oracle@dbhost dbhome_1]$ mv OPatch OPatch_bak--应用新的补丁
unzip /opt/p6880880_190000_Linux-x86-64.zip -d $ORACLE_HOME
[oracle@dbhost ~]$ cd $ORACLE_HOME/OPatch
[oracle@dbhost OPatch]$ ./opatch version
OPatch Version: 12.2.0.1.28
OPatch succeeded.

📣 4.检查Patch 是否冲突

[root@dbhost opt]# chown oracle:oinstall -R p34006614_190000_Linux-x86-64.zip
[root@dbhost opt]# chmod 755 -R p34006614_190000_Linux-x86-64.zip

[oracle@dbhost ~]$ unzip /opt/p34006614_190000_Linux-x86-64.zip -d /opt
[oracle@dbhost ~]$ $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph /opt/34006614

在这里插入图片描述

📣 5.应用补丁34006614

[oracle@dbhost ~]$ cd /opt/34006614/
[oracle@dbhost 34006614]$ $ORACLE_HOME/OPatch/opatch apply -oh $ORACLE_HOME

Oracle Interim Patch Installer version 12.2.0.1.28
Copyright (c) 2023, Oracle Corporation.  All rights reserved.Oracle Home       : /u01/app/oracle/product/19.3.0/dbhome_1
Central Inventory : /u01/app/oraInventoryfrom           : /u01/app/oracle/product/19.3.0/dbhome_1/oraInst.loc
OPatch version    : 12.2.0.1.28
OUI version       : 12.2.0.7.0
Log file location : /u01/app/oracle/product/19.3.0/dbhome_1/cfgtoollogs/opatch/opatch2023-08-20_14-02-53PM_1.logVerifying environment and performing prerequisite checks...
OPatch continues with these patches:   34006614  Do you want to proceed? [y|n]
y
User Responded with: Y
All checks passed.
Backing up files...
Applying interim patch '34006614' to OH '/u01/app/oracle/product/19.3.0/dbhome_1'Patching component oracle.oracore.rsf, 19.0.0.0.0...
Patch 34006614 successfully applied.
Log file location: /u01/app/oracle/product/19.3.0/dbhome_1/cfgtoollogs/opatch/opatch2023-08-20_14-02-53PM_1.logOPatch succeeded.

📣 6.确认升级

[oracle@dbhost ~]$ $ORACLE_HOME/OPatch/opatch lsinv | grep -i “DSTV38 UPDATE”
Patch description: “RDBMS - DSTV38 UPDATE - TZDATA2022A”

--查看当前 TZ 版本
SQL> SELECT * FROM v$timezone_file;FILENAME                VERSION     CON_ID
-------------------- ---------- ----------
timezlrg_32.dat              32          0SQL> col PROPERTY_NAME for a30
SQL> set line 200           
SQL> SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value 
FROM DATABASE_PROPERTIES 
WHERE PROPERTY_NAME LIKE 'DST_%' ORDER BY PROPERTY_NAME;PROPERTY_NAME                  VALUE
------------------------------ ----------------------------
DST_PRIMARY_TT_VERSION         32
DST_SECONDARY_TT_VERSION       0
DST_UPGRADE_STATE              NONE--查看下载的TZ版本
SQL> SELECT DBMS_DST.get_latest_timezone_version FROM dual;GET_LATEST_TIMEZONE_VERSION
---------------------------38[oracle@dbhost ~]$ cd $ORACLE_HOME/oracore/zoneinfo
[oracle@dbhost zoneinfo]$ ls
big              timezlrg_17.dat  timezlrg_28.dat  timezlrg_8.dat   timezone_1.dat   timezone_30.dat
little           timezlrg_18.dat  timezlrg_29.dat  timezlrg_9.dat   timezone_20.dat  timezone_31.dat
readme_38.txt    timezlrg_19.dat  timezlrg_2.dat   timezone_10.dat  timezone_21.dat  timezone_32.dat
readme.txt       timezlrg_1.dat   timezlrg_30.dat  timezone_11.dat  timezone_22.dat  timezone_38.dat
timezdif.csv     timezlrg_20.dat  timezlrg_31.dat  timezone_12.dat  timezone_23.dat  timezone_3.dat
timezlrg_10.dat  timezlrg_21.dat  timezlrg_32.dat  timezone_13.dat  timezone_24.dat  timezone_4.dat
timezlrg_11.dat  timezlrg_22.dat  timezlrg_38.dat  timezone_14.dat  timezone_25.dat  timezone_5.dat
timezlrg_12.dat  timezlrg_23.dat  timezlrg_3.dat   timezone_15.dat  timezone_26.dat  timezone_6.dat
timezlrg_13.dat  timezlrg_24.dat  timezlrg_4.dat   timezone_16.dat  timezone_27.dat  timezone_7.dat
timezlrg_14.dat  timezlrg_25.dat  timezlrg_5.dat   timezone_17.dat  timezone_28.dat  timezone_8.dat
timezlrg_15.dat  timezlrg_26.dat  timezlrg_6.dat   timezone_18.dat  timezone_29.dat  timezone_9.dat
timezlrg_16.dat  timezlrg_27.dat  timezlrg_7.dat   timezone_19.dat  timezone_2.dat

📣 7.升级TZ

注意:先关闭数据库和监听哈
[oracle@dbhost ~]$ lsnrctl stop
[oracle@dbhost ~]$ sqlplus / as sysdba
SQL> shutdown immediate

✨ 7.1 Upgrade mode下启动数据库

SQL> STARTUP UPGRADE;

SQL> select name, open_mode from v$database;
NAME      OPEN_MODE
--------- --------------------
ORCL      READ WRITE
SQL> select instance_name, status from v$instance;
INSTANCE_NAME    STATUS
---------------- ------------
orcl             OPEN MIGRATE

✨ 7.2 升级前准备

SQL> DECLARE
l_tz_version PLS_INTEGER;
BEGIN
l_tz_version := DBMS_DST.get_latest_timezone_version;
DBMS_OUTPUT.put_line(‘l_tz_version=’ || l_tz_version);
DBMS_DST.begin_prepare(l_tz_version);
END;
/

SQL> COLUMN property_name FORMAT A30SELECT property_name, property_value
FROM   database_properties
WHERE  property_name LIKE 'DST_%'
ORDER BY property_name;PROPERTY_NAME                  PROPERTY_VALUE
------------------------------ --------------------
DST_PRIMARY_TT_VERSION         32
DST_SECONDARY_TT_VERSION       38
DST_UPGRADE_STATE              PREPARE

✨ 7.3 查找受影响的表

SQL> EXEC DBMS_DST.find_affected_tables;PL/SQL procedure successfully completed.SQL> select count(*) from sys.dst$affected_tables;COUNT(*)
----------0
结束升级前准备
SQL> EXEC DBMS_DST.end_prepare;
PL/SQL procedure successfully completed.

✨ 7.4 开始升级TZ

SQL> shutdown immediate;
SQL> startup upgrade;SQL> SET SERVEROUTPUT ON
DECLAREl_tz_version PLS_INTEGER;
BEGINSELECT DBMS_DST.get_latest_timezone_versionINTO   l_tz_versionFROM   dual;DBMS_OUTPUT.put_line('l_tz_version=' || l_tz_version);DBMS_DST.begin_upgrade(l_tz_version);
END;
/

在这里插入图片描述

✨ 7.5 关闭升级模式

SQL> shut immediate;
SQL> startup;

SQL> SET SERVEROUTPUT ONDECLAREl_failures   PLS_INTEGER;
BEGINDBMS_DST.upgrade_database(l_failures);DBMS_OUTPUT.put_line('DBMS_DST.upgrade_database : l_failures=' || l_failures);DBMS_DST.end_upgrade(l_failures);DBMS_OUTPUT.put_line('DBMS_DST.end_upgrade : l_failures=' || l_failures);
END;
/

在这里插入图片描述

📣 8.查看升级结果

SQL> SELECT property_name, property_value
FROM database_properties
WHERE property_name LIKE ‘DST_%’
ORDER BY property_name;

PROPERTY_NAME                  PROPERTY_VALUE
------------------------------ --------------------
DST_PRIMARY_TT_VERSION         38
DST_SECONDARY_TT_VERSION       0
DST_UPGRADE_STATE              NONE[oracle@dbhost ~]$ cd $ORACLE_HOME/OPatch
[oracle@dbhost OPatch]$ ./opatch lspatches
34006614;RDBMS - DSTV38 UPDATE - TZDATA2022A
29585399;OCW RELEASE UPDATE 19.3.0.0.0 (29585399)
29517242;Database Release Update : 19.3.0.0.190416 (29517242)

相关文章:

Oracle故障案例之-19C时区补丁DSTV38更新

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA工作经验 一位上进心十足的【大数据领域博主】!😜&#x1f61…...

设计模式之组合模式(Composite)的C++实现

1、组合模式的提出 在软件开发过程中,使用者Client过多依赖所操作对象内部的实现结构,如果对象内部的实现结构频繁发生变化,则使用者的代码结构将要频繁地修改,不利于代码地维护和扩展性;组合模式可以解决此类问题。组…...

mongo的include方法踩坑

前言 又是不认识自己代码的一天 问题 Query query new Query(); if(StringUtils.isNotNull(reqVO.getFieldLimitList()) && reqVO.getFieldLimitList().size() > 0){for(String filedName : reqVO.getFieldLimitList()){query.fields().include(filedName);} }看到…...

阿里云无影云电脑/云桌面收费价格表_使用申请方法

阿里云无影云电脑配置具体收费价格表,4核8G企业办公型云电脑可以免费使用3个月,无影云电脑地域不同价格不同,无影云电脑费用是由云桌面配置、云盘、互联网访问带宽、AD Connector 、桌面组共用桌面session 等费用组成,阿里云百科分…...

jvm内存溢出排查(使用idea自带的内存泄漏分析工具)

文章目录 1.确保生成内存溢出文件2.使用idea自带的内存泄漏分析工具3.具体实验一下 1.确保生成内存溢出文件 想分析堆内存溢出,一定在运行jar包时就写上参数-XX:HeapDumpOnOutOfMemoryError,可以看我之前关于如何运行jar包的文章。若你没有写。可以写上…...

JS内存泄漏

JS内存泄漏 1.意外的全局变量 全局变量的生命周期很长,直到页面关闭,它都存活,所以全局变量上的内存一直都不会被回收 当全局变量使用不当,没有及时回收(手动赋值null),或者拼写错误等将某个变…...

线程和进程同步互斥你真的掌握了吗?(同步互斥机制保姆级讲解与应用)

目录 同步互斥的概念 互斥锁 初始化互斥锁 销毁互斥锁 申请上锁 解锁 案例1:没有互斥锁 多任务的运行情况 案例2:有互斥锁 多任务的运行情况 死锁 读写锁 初始化读写锁 销毁读写锁 申请读锁 申请写锁 释放读写锁 案例:两个任务…...

Android 9.0 Vold挂载流程解析(上)

前言 我们分2篇文章来介绍Android 9.0中存储卡的挂载流程,本篇文章先介绍总体的挂载模块、Vold进程的入口main函数的详细分析,有了这些基础知识,下一篇中我们再详细介绍收到驱动层消息是怎么挂载和卸载存储卡的,还有framework层如…...

界面组件Telerik UI for WinForms R2 2023——拥有VS2022暗黑主题

Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件。所有的UI for WinForms控件都具有完整的主题支持,可以轻松地帮助开发人员在桌面和平板电脑应用程序提供一致美观的下一代用户体验。 Telerik UI for WinForms R2 2023于今年6月份发布&…...

vue+elementui 实现文本超出长度显示省略号,鼠标移上悬浮展示全部内容

一、场景 表单内的输入框一般为固定宽度&#xff0c;当输入框内容长度超出输入框宽度时&#xff0c;需要显示省略号&#xff0c;并设置鼠标移到输入框上时悬浮展示全部内容。 <el-tooltipplacement"top-start"effect"light":content"basicData[Or…...

【STM32RT-Thread零基础入门】 5. 线程创建应用(线程创建、删除、初始化、脱离、启动、睡眠)

硬件&#xff1a;STM32F103ZET6、ST-LINK、usb转串口工具、4个LED灯、1个蜂鸣器、4个1k电阻、2个按键、面包板、杜邦线 文章目录 前言一、线程管理接口介绍二、任务&#xff1a;使用多线程的方式同时实现led闪烁和按键控制喇叭&#xff08;扫描法&#xff09;1. RT-Thread相关接…...

计算机竞赛 python+深度学习+opencv实现植物识别算法系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习的植物识别算法研究与实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;4分工作量&#xff1a;4分创新点&#xff1a;4分 &#x1f9ff; 更多…...

深度探索ChatGPT:如何进行专业提问以获取精确答案

ChatGPT&#xff0c;作为OpenAI的先锋&#xff0c;已经展示出其惊人的交流和理解能力。但如何才能充分利用其潜能&#xff0c;并与之进行更深入、更专业的交流呢? 下面&#xff0c;我们将从专业的角度探讨一些提问策略&#xff0c;并附上实际案例&#xff0c;让你更加熟练地与…...

1.vue3+vite开发中axios使用及跨域问题解决

一、跨域问题解决 1.基于vitevue3配置时&#xff0c;在vite.congig.js文件server项目中添加 proxy代理 文件名&#xff1a;vite.congig.js server: {open: true,//启动项目自动弹出浏览器port: 3000,proxy: {/api: {target: http://localhost:8000/api/,changeOrigin: true,rew…...

【LangChain】P1 LangChain 应用程序的核心构建模块 LLMChain 以及其三大部分

LangChain 的核心构建模块 LLMChain LangChain 应用程序的核心构建模块语言模型 - LLMs提示模板 - Prompt templates输出解析器 - Output Parsers LLMChain 组合 LangChain 应用程序的核心构建模块 LangChain 应用程序的核心构建模块 LLMChain 由三部分组成&#xff1a; 语言…...

关于查看处理端口号和进程[linux]

查看端口号 lsof -i:端口号如果-bash: lsof: 未找到命令那我们可以执行yum install lsof 删除端口号进程 一般我们都会使用kill命令 kill -l#列出所有可用信号1 (HUP)&#xff1a;重新加载进程。9 (KILL)&#xff1a;杀死一个进程。15 (TERM)&#xff1a;正常停止一个进程。 …...

C 语言的 strcat() 函数和 strncat() 函数

文章目录 strcat() 函数strncat() 函数 strcat() 函数 原型: char *strcat(char *dest, const char *src) 参数: dest – 指向目标数组&#xff0c;该数组包含了一个 C 字符串&#xff0c;且足够容纳追加后的字符串。 src – 指向要追加的字符串&#xff0c;该字符串不会覆…...

C++ string 的用法

目录 string类string类接口函数及基本用法构造函数&#xff0c;析构函数及赋值重载函数元素访问相关函数operator[]atback和front 迭代器iterator容量操作size()和length()capacity()max_sizeclearemptyreserveresizeshrink_to_fit string类对象修改操作operatorpush_backappen…...

MyBatis-Flex学习记录1---请各位大神指教

简介&#xff08;官网介绍&#xff09; MyBatis-Flex 是一个优雅的 MyBatis 增强框架&#xff0c;它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库&#xff0c;其内置的 QueryWrapper帮助我们极大的减少了 SQL 编写的工作的同时&…...

二分查找旋转数组

已知整数数组nums&#xff0c;先按升序排序后&#xff0c;再旋转。旋转k位后&#xff0c;元素分别为nums[k],nums[k1]...nums[0]...nums[k-1]。请查找target 是否存在&#xff0c;如果存在返回所在索引&#xff1b;否则返回-1。假定nums没有重复的元素。 假定排序后的数组为{1…...

关于3D位姿旋转

一. 主动旋转和被动旋转 1. active rotation 主动旋转 站在坐标系的位置看旋转目标物&#xff1a;目标物主动发生旋转。 2. passive rotation 被动旋转 站在旋转目标物的位置看坐标系&#xff1a; 坐标系发生旋转&#xff0c;相当于目标物在坐标系内的位置被动地发生了旋转…...

解锁项目成功的关键:项目经理的结构化思维之道

1. 项目经理的核心职责 作为项目经理&#xff0c;我们的工作不仅仅是跟踪进度和管理团队。我们的角色在整个项目生命周期中都是至关重要的&#xff0c;从初始概念到最终交付。以下是项目经理的几个核心职责&#xff1a; 确保项目目标的清晰性项目的成功在很大程度上取决于其目…...

力扣974被K整除的子数组

同余定理 使用前缀和哈希表 由于可能是负数所以要进行修正&#xff1a;(sum%kk)%k class Solution { public:int subarraysDivByK(vector<int>& nums, int k) {unordered_map<int,int> hash;hash[0 % k] 1; //0 这个数的余数int sum 0, ret 0;for(auto x…...

简单认识Docker数据管理

文章目录 为何需要docker数据管理数据管理类型 一、数据卷二、数据卷容器三、容器互联 为何需要docker数据管理 因为数据写入后如果停止了容器&#xff0c;再开启数据就会消失&#xff0c;使用数据管理的数据卷挂载&#xff0c;实现了数据的持久化&#xff0c;重启数据还会存在…...

UDP数据报结构分析(面试重点)

在传输层中有UDP和TCP两个重要的协议&#xff0c;下面将针对UDP数据报的结构进行分析 UDP结构图示 UDP报头结构的分析 UDP报头有4个属性&#xff0c;分别是源端口&#xff0c;目的端口&#xff0c;UDP报文长度&#xff0c;校验和&#xff0c;它们都占16位2个字节&#xff0c;所…...

【Java 动态数据统计图】动态数据统计思路案例(动态,排序,数组)二(113)

需求&#xff1a; 有一个List<Map<String.Object>>,存储了区域的数据&#xff0c; 数据是根据用户查询条件进行显示的&#xff1b;所以查询的数据是动态的&#xff1b;按区域维度统计每个区域出现的次数&#xff0c;并且按照次数的大小排序&#xff08;升序&#…...

C++进阶 类型转换

本文简介&#xff1a;介绍C中类型转换的方式 类型转换 C语言中的类型转换为什么C需要四种类型转换C强制类型转换static_castreinterpret_castconst_castdynamic_cast RTTI&#xff08;了解&#xff09;总结 C语言中的类型转换 在C语言中&#xff0c;如果赋值运算符左右两侧类型…...

Idea中隐藏指定文件或指定类型文件

Setting ->Editor ->Code Style->File Types → Ignored Files and Folders输入要隐藏的文件名&#xff0c;支持*号通配符回车确认添加...

第2步---MySQL卸载和图形化工具展示

第2步---MySQL卸载和图形化工具展示 1.MySQL的卸载 2.MySQL的图形化工具 2.1常见的图形化工具 SQLyog&#xff1a;简单。SQLyog首页、文档和下载 - MySQL 客户端工具 - OSCHINA - 中文开源技术交流社区 Mysql Workbench &#xff1a;MySQL :: MySQL Workbench DataGrip&…...

原型和原型链

好久没记了有点忘记了&#xff0c;来记录一下。 1、函数和对象的关系&#xff1a;对象都是通过函数创建的&#xff0c;函数也是一个对象。 2、原型和原型链 1.原型&#xff1a;原型分为两种 prototype&#xff1a;每一个函数都会有prototype属性&#xff0c;它指向函数的原型…...

网站套利怎么做/中国十大关键词

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通&#xff1a;P气瓶充装考试题考前必练&#xff01;安全生产模拟考试一点通每个月更新P气瓶充装模拟考试题目及答案&#xff01;多做几遍&#xff0c;其实通过P气瓶充装证考试很简单。 1、【多选…...

微信小程序开发实例教程/seo公司网站推广

In the given example, we are printing the messages by using different forms of the print() method in Python. 在给定的示例中&#xff0c;我们通过使用Python中不同形式的print()方法来打印消息。 Consider the program: 考虑该程序&#xff1a; # it will print new …...

网站建设维护公司地址/线上宣传渠道和宣传方式

文章目录1.禁止滚动2.tableView的高度等于内容(所有cell)的高度3.如果cell的高度会根据内容变化&#xff0c;那边就不能用tableView.estimatedRowHeight来自动行高&#xff0c;需要提前手动算出cell的高度1.禁止滚动 tableView.isScrollEnabled falseiOS UITableView 禁止滑动…...

wordpress分类目录优化/注册一个公司网站需要多少钱

嵌套函数&#xff1a;什么是嵌套函数 使用外部函数中变量 def out():x 5def inn():print("inn函数中 x {}".format(y))print("out函数中 x {}".format(x))inn()out()结果&#xff1a; inn函数中 x 5 out函数中 x 5 内部函数是可以引用外部函数的变量…...

mip 网站/关键词整站优化

本文转自&#xff1a;https://www.imooc.com/article/17290 上节回顾 上篇记录了我对MySQL 事务 隔离级别read uncommitted的理解。 这篇记录我对 MySQL 事务隔离级别 read committed & MVCC 的理解。 前言 可以很负责人的跟大家说&#xff0c;MySQL 中的此隔离级别不单单…...

个人网站怎么做cps/昆明网络营销

1.创建UserPackage.java //-- 所在的包名&#xff0c;也就是位置。包在物理上就是一个文件夹&#xff0c;逻辑上代表一个分类的概念。 package Other; //-- 引入包Company中的Manager类 import Company.Manager;//-- 入口类&#xff08;主类&#xff09;&#xff0c;必须与文件…...