【Oracle】Oracle系列十九--Oracle的体系结构

文章目录

  • 往期回顾
  • 前言
  • 1. 物理结构
  • 2. 内存结构
    • 2.1 SGA
    • 2.2 后台进程
  • 3. 逻辑结构

往期回顾

  • 【Oracle】Oracle系列之一–Oracle数据类型

  • 【Oracle】Oracle系列之二–Oracle数据字典

  • 【Oracle】Oracle系列之三–Oracle字符集

  • 【Oracle】Oracle系列之四–用户管理

  • 【Oracle】Oracle系列之五–Oracle表空间

  • 【Oracle】Oracle系列之六–Oracle表分区

  • 【Oracle】Oracle系列之七–表的创建与管理

  • 【Oracle】Oracle系列之八–SQL查询

  • 【Oracle】Oracle系列之九–Oracle常用函数

  • 【Oracle】Oracle系列之十–Oracle正则表达式

  • 【Oracle】Oracle系列之十一–PL/SQL

  • 【Oracle】Oracle系列之十二–视图、记录、同义词、序列

  • 【Oracle】Oracle系列之十三–游标

  • 【Oracle】Oracle系列之十四–触发器

  • 【Oracle】Oracle系列之十五–存储过程

  • 【Oracle】Oracle系列之十六–数据库备份

  • 【Oracle】Oracle系列之十七–Sqluldr2与Sqlldr

  • 【Oracle】Oracle系列十八–Oracle RAC

前言

1. 物理结构

Oracle数据库的物理结构由参数文件、控制文件、数据文件和日志文件组成,用于存储和管理数据库的数据和元数据,每个文件都扮演着不可或缺的角色。

  • 参数文件用于配置数据库的初始化参数
  • 控制文件记录数据库的结构和状态信息
  • 数据文件存储了实际的数据
  • 日志文件记录了数据库的变更操作

在这里插入图片描述

数据库启动过程中,Oracle首先加载参数文件,然后读取控制文件,接着加载数据文件和日志文件。

参数文件中的配置信息会影响到数据库实例的初始化过程,决定了数据库的初始参数值。控制文件记录了数据库的结构和状态信息,包括数据文件和日志文件的列表。数据文件存储了数据库中的实际数据,而日志文件记录了数据库的变更操作。

在数据库运行时,如果需要修改参数值,可以通过修改参数文件(PFILE或SPFILE)或使用ALTER SYSTEM语句来实现。对于控制文件、数据文件和日志文件的管理,可以使用Oracle提供的工具和命令进行备份、恢复、重建等操作。

(1)参数文件(Parameter File)

  • 参数文件是Oracle数据库实例的配置文件,它包含了一系列的参数和对应的取值,用于控制数据库系统的行为。

  • 根据其使用方式和位置,Oracle参数文件分为两种类型:SPFILE(Server Parameter File)和PFILE(Parameter File)。

SPFILE以二进制格式存储,可以在数据库运行时动态修改参数值。它通常存储在服务器的文件系统中,如 O R A C L E H O M E / d b s 目录下的 s p f i l e S I D . o r a 文件。 S P F I L E 的主要优点是可以使用 A L T E R S Y S T E M 语句在运行时修改参数值,无需重新启动数据库。同时, S P F I L E 还提供了参数值的持久化功能,可以保证数据库在下次启动时使用最新的参数值。 P F I L E 是传统的文本格式参数文件,以 A S C I I 格式存储。它需要手动编辑或使用工具进行修改。 P F I L E 通常存储在服务器的文件系统中,如 ORACLE_HOME/dbs目录下的spfileSID.ora文件。SPFILE的主要优点是可以使用ALTER SYSTEM语句在运行时修改参数值,无需重新启动数据库。同时,SPFILE还提供了参数值的持久化功能,可以保证数据库在下次启动时使用最新的参数值。 PFILE是传统的文本格式参数文件,以ASCII格式存储。它需要手动编辑或使用工具进行修改。PFILE通常存储在服务器的文件系统中,如 ORACLEHOME/dbs目录下的spfileSID.ora文件。SPFILE的主要优点是可以使用ALTERSYSTEM语句在运行时修改参数值,无需重新启动数据库。同时,SPFILE还提供了参数值的持久化功能,可以保证数据库在下次启动时使用最新的参数值。PFILE是传统的文本格式参数文件,以ASCII格式存储。它需要手动编辑或使用工具进行修改。PFILE通常存储在服务器的文件系统中,如ORACLE_HOME/dbs目录下的initSID.ora文件。与SPFILE相比,PFILE的主要不足之处是不能在数据库运行时动态修改参数值,需要重新启动数据库才能生效。
参数文件由一系列的参数和对应的取值组成,每个参数占据一行,以参数名和参数值的形式表示。

# This is a comment
processes = 200
db_block_size = 8192
sga_target = 4G
  • Oracle数据库有大量的参数,每个参数都有不同的作用和取值范围。以下是一些常见的Oracle参数及其作用:

  • processes:控制数据库实例能够同时处理的并发连接数。
    db_block_size:定义数据块的大小,影响数据库存储和I/O性能。

  • sga_target:指定SGA(System Global Area)的目标大小,包括缓冲区高速缓存和共享池。

  • undo_tablespace:指定回滚段表空间的名称,用于管理事务的回滚和并发控制。

  • log_archive_dest:定义归档日志文件的位置和传输方式,用于实现数据备份和恢复。

  • optimizer_mode:确定SQL查询优化器的工作模式,影响SQL查询的执行计划和性能。

(2)控制文件(Control File)

控制文件是Oracle数据库的关键元数据之一,用于记录数据库的结构信息和运行状态。它包含了数据库的名称、创建时间、数据文件列表、日志文件列表以及重要的数据库参数值等信息。控制文件还记录了数据库的日志序列号,用于实现数据恢复和故障恢复。

每个Oracle数据库实例通常有一个或多个控制文件,其中至少有一个是当前的控制文件。控制文件通常存储在操作系统的文件系统中,如$ORACLE_HOME/dbs目录下的control01.ctl文件。为了提高可靠性和冗余性,可以配置多个控制文件,并在参数文件中进行相应的设置。

在数据库启动过程中,Oracle首先会读取控制文件,然后加载数据文件和日志文件,进而恢复数据库的一致性。因此,控制文件对于数据库的正常运行非常重要。如果控制文件损坏或丢失,可以使用备份的控制文件进行恢复。

(3)数据文件(Data File)

数据文件是Oracle数据库中存储实际数据的文件。每个表空间(Tablespace)都由一个或多个数据文件组成,用于存储表、索引、视图和其他数据库对象的数据。数据文件使用多个数据块(Data Block)来组织和管理数据,每个数据块有固定的大小,由数据库参数db_block_size定义。

Oracle数据库支持多种类型的数据文件,包括数据文件、索引文件、临时文件和控制文件备份等。数据文件通常存储在操作系统的文件系统中,如$ORACLE_HOME/dbs目录下的system01.dbf文件。为了提高性能和可靠性,可以将数据文件分散在不同的物理磁盘上。

数据文件可以根据需要进行扩展和收缩,以适应数据库的存储需求。此外,还可以对数据文件进行备份和恢复,以保证数据的可靠性和完整性。

(4)日志文件(Redo Log File)

日志文件是Oracle数据库的事务日志,用于记录数据库的变更操作。它包含了所有已提交的事务的更改信息,包括INSERT、UPDATE、DELETE等操作。日志文件的主要作用是支持数据库的恢复和故障恢复。

Oracle数据库有两种类型的日志文件:在线重做日志文件(Online Redo Log File)和归档日志文件(Archive Redo Log File)。

  • 在线重做日志文件是当前正在使用的日志文件,它记录了正在进行中的事务的更改操作。
  • 归档日志文件是已经被归档的日志文件,用于实现数据备份和恢复。

在线重做日志文件通常存储在操作系统的文件系统中,如$ORACLE_HOME/dbs目录下的redo01.log文件。归档日志文件可以存储在与数据文件不同的磁盘上,以提高可靠性和冗余性。

需要注意的是,日志文件的大小和数量都是可配置的,以适应数据库的需求。Oracle数据库会自动轮换使用在线重做日志文件,并将已满的在线重做日志文件写入归档日志文件以进行数据备份和恢复。

2. 内存结构

Oracle 实例是后台进程和内存结构的组合。必须启动实例才能访问数据库中的数据。每次启动实例都会分配一个系统全局区(SGA,System Global Area)并启动Oracle 后台进程。

2.1 SGA

SGA是一个内存区域,用于存储由数据库进程共享的数据库信息,包含Oracle服务器的数据和控制信息。
在这里插入图片描述

(1)DB buffer(数据高速缓存区)

内存中用来频繁访问的区域,包括默认缓存池、保存缓存池、再生缓存池。

处理查询时,服务器进程在数据库缓冲区高速缓存中查找任何所需的块。如果未在数据库缓冲区高速缓存中找到这个块,服务器进程就从数据文件读取这个块,并且在缓冲区高速缓存中放置一个副本。由于对同一个块的后续请求可以在内存中找到这个块,因此这些请求可能不需要物理读取。Oracle 服务器使用最近最少使用算法来释放近期未被访问的缓冲区,以便在缓冲区高速缓存中为新块腾出空间。

DML语句处理

在这里插入图片描述

  • 如果缓冲区高速缓存中尚不存在数据和回退块,那么服务器进程就会从数据文件中将它们读入缓冲区高速缓存。
  • 服务器进程在将要修改的行上放置锁。
  • 在重做日志缓冲区中服务器进程记录将要对回退和数据进行的更改。
    • 回退块更改记录数据修改以前的值。回退块用于存储成映像前的数据,以便必要的情况下DML 语句能够回退。
    • 数据块更改记录数据的新值。
  • 服务器进程将成映像前的数据记录到回退块中,并且更新数据块。这两种更改都是在数据库缓冲区高速缓存中进行的。缓冲区高速缓存中的任何已更改块都标记为灰数据缓冲区- 即与磁盘中相应的块不同的缓冲区。

缓冲区高速缓存中每个缓冲区的大小都与Oracle 块的大小相等,而且它由DB_BLOCK_SIZE 参数指定。缓冲区的数目等于DB_BLOCK_BUFFERS 参数值。

(2)共享池

共享池的大小由SHARE_POOL_SIZE决定,包括库缓存区(共享SQL区,PL/SQL区)、字典缓存区。库高速缓存包含SQL语句文本,分析代码和执行计划;字典缓存区包含表,列和其他对象定义和权限。

(3)Redo buffer(重做日志缓冲区)
跟踪服务器和后台进程对数据库所做的更改,它的字节大小由LOG_BUFFER 参数定义。记录被更改的块、更改位置以及重做条目中的新值;重做条目不区分被更改块的类型,它只记录块中哪些字节发生了更改。重做日志缓冲区连续使用,而且一个事务处理所做的更改可能会与其它事务处理的更改交叉存取;它是在已满后可以重新使用的循环缓冲区,但是只有在所有旧的重做条目都记录在重做日志文件之后才能使用。
COMMIT提交处理:

  • 服务器进程随同系统更改号(SCN)一起在重做日志缓冲区中放置一个提交记录。
  • LGWR 向重做日志文件中连续写入直到提交记录含提交记录的所有重做日志缓冲区条目。这之后,Oracle 服务器就能够保证即使存在实例失败也不会丢失更改。
  • 通知用户COMMIT 命令已完成。
  • 服务器进程记录信息以指出事务处理已完成并且可以释放资源锁。

每当事务处理提交时,Oracle 服务器就把一个提交系统更改号(SCN) 分配给该事务处理。SCN 是简单递增的,而且在数据库中是唯一的。Oracle 服务器使用它作为内部时间戳以使数据同步。并且在从数据文件检索数据时提供读一致性。使用SCN 使 Oracle 服务器能够执行一致性检查,而不用依赖操作系统的日期和时间。

(4)大共享区
存储不与SQL语句处理直接相关的大型内存结构,如在备份和还原操作中复制的数据块。

(5)固定SGA
存储Java代码。

2.2 后台进程

每个Oracle实例都包括以下五个必须的后台进程:

(1)数据库写入程序(DBW0)

数据库写入程序将灰数据缓冲区从数据库缓冲区高速缓存写入数据文件。它确保有足够数量的空闲缓冲区(即当服务器进程需要读取数据文件中的块时可以覆盖的缓冲区) 在数据库缓冲区高速缓存中可用。由于服务器进程只在缓冲区高速缓存中进行更改,因此数据库性能得到改善,而且DBW0 延迟写入数据文件直到发生下列事件之一:

  • 灰数据缓冲区的数量达到阈值
  • 当进行扫描而无法找到任何空闲缓冲区时进程扫描了指定数量的块
  • 出现超时(每三秒)
  • 出现检查点(检查点是使数据库缓冲区高速缓存与数据文件同步的一种方法)
    (2)日志写入程序(LGWR)

将重做日志缓冲区中注册的更改写入重做日志文件。
LGWR 在下列情况下执行从重做日志缓冲区到重做日志文件的连续写入:

  • 当提交事务处理时
  • 当重做日志缓冲区的三分之一已满时
  • 当重做日志缓冲区中记录了超过1 MB 的更改时
  • 在 DBW0 将数据库缓冲区高速缓存中修改的块写入数据文件以前因为恢复操作需要重做,所以LGWR 只在重做写入磁盘后确认COMMIT 命令。
    (3)系统监控程序(SMON)

检查数据库的一致性.果Oracle 实例失败,那么SGA 中尚未写入磁盘的所有信息都会丢失。实例丢失后,后台进程SMON 在数据库重新打开时自动执行实例恢复。恢复实例需要进行以下步骤:

  • 前滚以恢复尚未记入数据文件但已经记入联机重做日志中的数据。由于实例失败过程中SGA 的丢失,这些数据尚未写入磁盘。在这个进程中,SMON 读取重做日志文件并将重做日志中记录的更改应用到数据块中。由于所有提交的事务处理都已被写入重做日志,因此该进程完全恢复这些事务处理。
  • 打开数据库以允许用户登录。未被未恢复事务处理锁定的任何数据都立即可用。
  • 回退未提交的事务处理。它们由SMON 回退,或在访问锁定的数据时由单个服务器进程回退。

SMON 也执行一些空间维护功能:

  • 服务联合或合并数据文件中空闲空间的邻近区域。
  • 回收临时段将它们作为数据文件中的空闲空间返回。临时段用于在SQL 语句处理过程中存储数据。

(4)过程监视器(PMON)

负责在一个Oracle 进程失败时清理资源,进程失败后,后台进程PMON 通过下面的方法进行清理:

回退用户的当前事务处理
释放当前保留的所有表锁或行锁
释放用户当前保留的其它资源
(5)检查点进程(CKPT)

负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。

3. 逻辑结构

在这里插入图片描述

(1)数据文件(Data Files)

数据文件是Oracle数据库中存储数据的基本单位。每个数据文件都对应于操作系统中的一个物理文件,可以位于磁盘、阵列或其他存储介质上。数据文件是以固定大小的块(Block)为单位进行管理的。

(2)表空间(Tablespaces)

表空间是一个逻辑存储结构,用于组织和管理数据文件。一个数据库可以包含多个表空间,每个表空间包含一个或多个数据文件。表空间可以由DBA(数据库管理员)创建和管理,它定义了数据文件的分配和增长方式。

Oracle数据库中有四种类型的表空间:系统表空间、用户表空间、临时表空间和回滚表空间。系统表空间用于存储数据库的元数据,用户表空间用于存储用户数据,临时表空间用于存储临时数据(如排序和临时表),回滚表空间用于存储事务回滚数据。

(3)段(Segments)

段是逻辑结构中更高层次的组织单位,用于存储和管理数据。一个表或索引在磁盘上对应一个或多个段。根据对象的类型不同,可以有表段、索引段、分区段等。

表段包含了表的数据行,索引段包含了索引的键值和指向表的指针。分区段是指将表或索引分割为多个部分,每个部分独立存储在不同的段中,以提高查询效率和管理灵活性。

(4)盘区(Extents)

盘区是段的存储单元,它是由一个或多个连续的数据块组成的。在Oracle数据库中,块是最小的物理读写单位,一般为8KB或16KB大小。盘区的大小取决于段的大小、空间使用情况以及数据库的配置参数。

当段需要存储更多数据时,Oracle会自动分配新的盘区。如果一个盘区不足以容纳一个逻辑块,则会分配多个相邻的盘区。当段中的数据被删除或移动时,相应的盘区会被释放出来供其他对象使用。

(5)块(Blocks)

块是Oracle数据库中最基本的存储单位。它是数据文件中的连续数据单元,用于存储和检索数据。每个块由一组字节组成,包括数据、元数据和用于管理块的控制信息。

在一个块中,可以存储一个或多个表或索引的数据行。块的大小在创建数据库时确定(默认大小为8K)并且在整个数据库中保持一致。较小的块大小可以提高存储效率,但也会增加管理开销。较大的块大小可以提高IO性能,但会浪费存储空间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/98109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

acwing算法基础之基础算法--前缀和算法

目录 1 知识点2 模板 1 知识点 前缀后下标尽量从1开始,当然不从1开始也是ok的。 a 1 , a 2 , a 3 , . . . , a n a_1,a_2,a_3,...,a_n a1​,a2​,a3​,...,an​ S 1 , S 2 , S 3 , . . . S n S_1,S_2,S_3,...S_n S1​,S2​,S3​,...Sn​ S i S_i Si​&#xff1…

linux基础64——abrtd总结

安装与启动 # 安装abrt图形用户界面 yum install abrt-desktop# 安装abrt客户端 yum -y install abrt-cli# 接收关于 ABRT 检测到的崩溃的电子邮件通知(默认情况下,它会在本地计算机上向 root 用户发送通知。电子邮件目标可以在 /etc/libreport/plugins/mailx.conf…

Java使用WebSocket(基础)

准备一个html页面 <!DOCTYPE HTML> <html> <head><meta charset"UTF-8"><title>WebSocket Demo</title> </head> <body><input id"text" type"text" /><button onclick"send()&…

基于springboot实现人职匹配推荐管理系统演示【项目源码+论文说明】分享

基于springboot实现人职匹配推荐管理系统演示 摘要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于人职匹配推荐系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了…

ADuM1250 ADuM1251 模块 I2C IIC总线2500V电磁隔离 接口保护

功能说明&#xff1a; 1&#xff0c;2500V电磁隔离&#xff0c;2通道双向I2C&#xff1b; 2&#xff0c;支持电压在3到5.5V&#xff0c;最大时钟频率可达1000KHz&#xff1b; 3&#xff0c;将该隔离模块接入总线&#xff0c;可以保护主MCU引脚&#xff0c;降低I2C总线上的干…

【Java 进阶篇】HTML表格标签详解

HTML&#xff08;Hypertext Markup Language&#xff09;表格标签是在网页中用于创建表格的重要工具。表格是一种在网页上以行和列的方式组织和显示数据的有效方式。在本文中&#xff0c;我们将详细介绍HTML表格标签&#xff0c;包括如何创建表格、定义表头、单元格合并等内容。…

应用案例 | dataFEED OPC Suite为化工行业中的质量控制和成本节约提供数据集成方案

一 背景 在当今化工行业中&#xff0c;质量控制对于特种塑料供应商至关重要。一家国际性的特种塑料供应商在全球拥有五个生产基地&#xff0c;每个基地都运行着2-6台塑料挤出机。为了确保塑料质量&#xff0c;他们需要每两小时分析一次挤出样品——导致这项工作占用了较大的生…

探索ClickHouse——使用MaterializedPostgreSQL同步PostgreSQL数据库

安装PostgreSQL sudo apt install postgresql修改配置 sudo vim /etc/postgresql/14/main/postgresql.conf 解开并修改wal_level 的配置项 wal_level logical 重启服务 /etc/init.d/postgresql restartRestarting postgresql (via systemctl): postgresql.service AUTHENTI…

Java代理简介

代理简介 Java中的代理是一种设计模式&#xff0c;它允许一个对象&#xff08;代理对象&#xff09;代表另一个对象&#xff08;真实对象&#xff09;来控制对真实对象的访问。代理对象通常拥有与真实对象相同的接口&#xff0c;这使得客户端可以通过代理来访问真实对象&#…

WebGoat 靶场 JWT tokens 四 五 七关通关教程

文章目录 webGoat靶场第 四 关 修改投票数第五关第七关 你购买书&#xff0c;让Tom用户付钱 webGoat靶场 越权漏洞 将webgoat-server-8.1.0.jar复制到kali虚拟机中 sudo java -jar webgoat-server-8.1.0.jar --server.port8888解释&#xff1a; java&#xff1a;这是用于执行…

Java数据库连接:JDBC介绍与简单示例

Java数据库连接&#xff1a;JDBC介绍与简单示例 在Java程序中&#xff0c;操作数据库是必不可少的。JDBC&#xff08;Java Database Connectivity&#xff09;是Java中用于连接和操作数据库的一种技术。通过JDBC&#xff0c;Java程序可以与各种关系型数据库进行交互&#xff0…

京东数据分析平台:2023年8月京东奶粉行业品牌销售排行榜

鲸参谋监测的京东平台8月份奶粉市场销售数据已出炉&#xff01; 鲸参谋数据显示&#xff0c;8月份京东平台上奶粉的销售量将近700万件&#xff0c;环比增长约15%&#xff0c;同比则下滑约19%&#xff1b;销售额将近23亿元&#xff0c;环比增长约4%&#xff0c;同比则下滑约3%。…

自定义hooks函数

体会1 1、js文件中定义useXX函数 export function usetestY() {const count ref(10);const doubleCount computed(() > count.value * 2);return {count,doubleCount,}; } 2、在vue文件中使用useXX函数 import { usetestY } from ./data;const { count, doubleCount } …

【React】深入理解React组件状态State

目录 一、何为State二、如何定义State三、如何判断是否为State四、如何正确使用State1、用setState修改State2、State的更新是异步的①、代码示例 3、State更新会被合并①、组件状态例子②、当只需要修改状态title时&#xff0c;只需要将修改后的title传给setState③、React会合…

opencv图像的直方图,二维直方图,直方图均衡化

文章目录 opencv图像的直方图&#xff0c;二维直方图&#xff0c;直方图均衡化一、图像的直方图1、什么是图像的直方图&#xff1a;2、直方图的作用&#xff1a;3、如何绘制图像的直方图&#xff1a;&#xff08;1&#xff09;cv::calcHist()函数原型&#xff1a;英文单词 calc…

协议栈——创建套接字

前面几篇文章讲解的是应用程序使用Socket间接通知协议栈进行的连接&#xff0c;通信阶段&#xff0c;那么从现在开始讲解协议栈和网卡驱动的故事 回顾上篇文章&#xff0c;我们从第一阶段创建套接字&#xff0c;协议栈返回描述符讲起~~~ 协议栈结构 首先来看下协议栈的大致结…

私域流量,解决中小企业流量瓶颈

现如今&#xff0c;许多中小型企业都面临着资金有限的问题&#xff0c;无法在公共领域投入大量资金购买流量。即便购买了流量&#xff0c;这些访问量归属于平台&#xff0c;无法与企业建立粘性联系。因此&#xff0c;如今许多企业主都在积极寻求新的解决方案&#xff0c;即私域…

HTTP的前世今生

史前时期 20 世纪 60 年代&#xff0c;美国国防部高等研究计划署&#xff08;ARPA&#xff09;建立了 ARPA 网&#xff0c;它有四个分布在各地的节点&#xff0c;被认为是如今互联网的“始祖”。 然后在 70 年代&#xff0c;基于对 ARPA 网的实践和思考&#xff0c;研究人员发…

计算机视觉: 基于隐式BRDF自编码器的文生三维技术

论文链接: MATLABER: Material-Aware Text-to-3D via LAtent BRDF auto-EncodeR 背景 得益扩散模型和大量的text - image 成对的图片&#xff0c; 现在文生2D的模型已经比较成熟的框架和模型&#xff0c;主流的技术比如说stable diffusion 和 midjourney 以及工业领域runway 等…

AMD CPU 虚拟机安装 macos 系统的各虚拟机系统对比

软硬件环境&#xff1a; CPU:AMD R7 7735HS 8核16线程 显卡&#xff1a;AMD R680M 集显 内存&#xff1a;32GB DDR5 硬盘&#xff1a;2TB SSD Windows11 1、VMware Workstation 我用的是17 的版本&#xff0c;使用方便&#xff0c;对于macos 12及以下的安装在需要修改vmx 文…