ASM磁盘管理:从初始化参数到自动化管理的全面解析

文章目录

      • 一、引言
      • 二、ASM初始化参数
      • 三、ASM三大系统权限
      • 四、ASM实例的启停
        • 1.Oracle ASM的启停可以通过两种方式进行
        • 2.查看集群中的资源状态
        • 3.配置 ASM资源随着系统启动而启动
        • 4.配置数据库实例随着ASM启动而启动
      • 五、数据库实例与ASM的交互
      • 六、 启动策略详解
      • 七、 ASM后台进程
      • 八、ASMCMD命令使用
      • 九、图形化界面和手工创建磁盘组
        • 图像化创建磁盘组
        • 手工创建磁盘组
      • 十、ASM相关常用命令
      • 十一、向ASM磁盘组中添加磁盘

一、引言

ASM作为Oracle数据库的关键组件,提供了高性能、可靠性和便捷性的存储管理服务,解决了存储管理上的许多难题。它可以在不同的数据库环境中使用,并提供丰富的功能和选项来满足各种需求。

  1. 便于管理和高性能的集群文件系统:ASM提供了一个方便管理的文件系统,可以有效地管理大量的Oracle数据文件、日志文件和控制文件。它可以在集群环境中提供高性能的存储管理服务。

  2. 自动管理Oracle数据文件、日志文件、控制文件等:ASM可以自动管理数据库的各种文件,包括数据文件、日志文件和控制文件。它会自动将这些文件分散在不同的磁盘上,以提供更好的性能和可靠性。

  3. 自动将数据在不同的磁盘间负载均衡:ASM可以自动将数据在存储设备之间平衡分布,从而实现负载均衡。它会根据容量、性能等因素自动调整数据的分布,以提高存储效率。

  4. 提供完整的磁盘镜像(故障组 数据冗余):ASM通过使用故障组来提供数据冗余和高可用性。它会将数据文件复制到不同的磁盘上,以提供完整的磁盘镜像。如果一个磁盘出现故障,ASM可以自动将数据从镜像磁盘中恢复。

  5. 解决存储管理上的难题(共享存储、负载均衡):ASM解决了存储管理中的一些难题,比如共享存储和负载均衡。它可以在集群环境中实现共享存储,并根据负载情况自动调整数据的分布,提高系统的性能和可用性。

  6. 可用于单实例或RAC数据库:ASM可以用于单实例数据库或Real Application Cluster (RAC) 数据库。它能够适应不同的数据库环境,并提供相应的存储管理服务。

  7. 使用OMF模式:ASM支持使用Oracle Managed Files (OMF) 模式。OMF可以简化数据库管理操作,自动为数据库对象生成适当的文件名,并自动管理文件的位置和大小。

在这里插入图片描述

二、ASM初始化参数

Oracle Automatic Storage Management (ASM) 是 Oracle数据库的一个特性,它提供了一个统一、高性能的存储解决方案。在使用 ASM 进行磁盘管理之前,理解其初始化参数至关重要。这些参数决定了 ASM 的行为和性能。

1.INSTANCE_TYPE参数:当该参数设置为 ASM 时,表示这是一个 ASM 实例。当该参数设置为 RDBMS 时,则表示这是一个数据库实例。

如:
在这里插入图片描述
2.asm_power_limit参数:该参数控制 ASM 重新平衡操作速度。它的值范围为 1 到 11,其中 1 表示速度最慢,11 表示速度最快。默认值为 1。

3.asm_diskstring参数:该参数是一个与操作系统相关的值,在启动 ASM 实例时使用。它限制了 ASM 搜索磁盘时所考虑的磁盘集。磁盘集主要用于创建 ASM 磁盘组。在使用磁盘集里的磁盘创建 ASM DISK GROUP 时,需要满足一些条件,如属组、权限和磁盘映射是否正确等。
4.asm_diskgroups参数:该参数指定了 ASM 实例要装载的磁盘组的名称列表。当 ASM 实例启动时或使用 ALTER DISKGROUP ALL MOUNT 命令时,ASM 实例将装载这些磁盘组。该参数没有默认值,通常由 ASM 自动维护。
5.asm_preferred_read_failure_groups: 指定包含首选读取磁盘的故障组

6.large_pool_size: 该参数指定 ASM 实例用于大内存请求的内存池的大小,单位为字节。默认情况下,该参数的值为 12 MB,但是可以更改为一个较大的值以适应 ASM 实例的实际需求。
如:
ALTER SYSTEM SET asm_large_pool_size= SCOPE=SPFILE;
7.remote_login_passwordfile:指定ORACLE软件是否检查密码文件。默认值是’EXCLUSIVE’

8.ASM memory_max_target:该参数定义了 ASM 实例可以使用的最大内存量,单位为字节。这个参数可以控制 ASM 实例的整体内存使用,包括 SGA 和 PGA。ASM 实例将根据需要自动调整 SGA 和 PGA 的大小,以提供合适的内存资源。

9.memory_target:该参数定义了 ASM 实例对于所有 SGA 和 PGA 内存的总体分配目标,单位为字节。与 ASM memory_max_target 类似,memory_target 也可以自动调整 SGA 和 PGA 的大小,以适应实际的内存需求。

这两个参数可以在 ASM 实例启动时或者动态地进行修改。需要注意的是,修改这些参数可能需要对 ASM 实例进行重启或者重新启动相关的内存组件。

可以使用以下 SQL 命令来修改这些参数:

ALTER SYSTEM SET ASM_MEMORY_MAX_TARGET=<value> SCOPE=SPFILE; 静态参数
ALTER SYSTEM SET MEMORY_TARGET=<value> SCOPE=both;

三、ASM三大系统权限

在 Oracle ASM 中,有三个重要的系统权限,也被称为 ASM 三大系统权限,它们是:

SYSASM:SYSASM 是用于管理 ASM 实例和磁盘组的最高权限角色。持有 SYSASM 权限的用户可以创建、配置、启动和停止 ASM 实例,创建和管理磁盘组,以及执行涉及 ASM 实例和磁盘组的管理任务。

SYSDBA:SYSDBA 是数据库的最高权限角色,也拥有对 ASM 实例的管理权限。SYSDBA 用户具有与 SYSASM 相似的权限,可以执行对 ASM 实例和磁盘组的管理操作。

SYSOPER:SYSOPER 是一种较低级别的权限角色,用于执行一些常见的操作,如启动和关闭数据库、备份和恢复数据库等。SYSOPER 角色也可以访问 ASM 实例,并执行一些限制的 ASM 管理操作,如启动和关闭 ASM 实例,创建和删除磁盘组。

四、ASM实例的启停

1.Oracle ASM的启停可以通过两种方式进行

srvctl启动ASM实例
使用srvctl实用程序。这是Oracle Grid Infrastructure (GI) 提供的一个命令行工具,可以用来管理包括ASM在内的多个Oracle组件。
启动ASM实例的命令

srvctl start asm

srvctl停止ASM实例

srvctl stiop  asm

命令行来启停Oracle ASM
grid用户
sqlplus / as sysasm

ASM实例关闭:

shutdown immediate/transcational:ASM在关闭之前会nomount掉所有磁盘组并关闭实例。这种关闭模式将等待任何正在进行的SQL执行完成。ASM不等待当前与实例连接的用户断开连接。如果任何数据库实例与ASM实例连接。则SHUTDOWN将会关闭数据库。

shutdown normal(shutdown):ASM在关闭之前会nomount掉所有磁盘组并关闭实例。这种关闭模式将等待任何正在进行的SQL执行完成。ASM将等待所有当前连接的用户与该实例上断开。如果任何数据库实例与ASM实例连接。则SHUTDOWN将会关闭数据库。NOMAL是默认的关闭模式。

abort:ASM实例立即关闭。不按照顺序卸载(nomount)磁盘组。如果有任何数据库实例与ASM实例连接的话,则该数据库实例也将中止。

ASM实例启动:

startup nomount:启动ASM实例而不挂载任何磁盘组。只是读取初始化参数
startup mount:挂载ASM_DISKGOURPS下指定的磁盘组。
startup 正式开启实例

restrict:在受限模式下启动实例可以与startup (nomount/mount)相关语句连用
在受限模式下。数据库实例不能使用磁盘组。即数据库无法打开磁盘组中的文件
受限模式的主要作用就是去做一些相关检查工作

两种启动方式的区别
srvctl start asm 会带着数据库一起启动
sqlplus / as sysasm
startup 不会启动数据库

2.查看集群中的资源状态

crsctl stat res -t是 CRS (Cluster Ready Services) 控制命令,用于检查和显示整个集群中的资源状态。
该命令列出了当前集群中所有 CRS 资源的摘要信息,包括资源名称、资源类型、当前状态、目标状态和节点名称,以及其他关键信息。

命令输出的字段含义:

NAME:资源名称

TARGET:资源的目标状态

STATE:资源的当前状态

SERVER:资源所在的节点名称

STATE_DETAILS:描述当前资源状态的详细信息
在这里插入图片描述

3.配置 ASM资源随着系统启动而启动

crsctl enable has 是一个命令,用于启用 Oracle Clusterware 的高可用服务(High Availability Services,简称 HAS)。

在 Oracle Grid Infrastructure(先前称为 Oracle Clusterware)中,HAS 是负责管理和监控集群资源和服务的组件。当启用 HAS 后,它将负责监视和自动重新启动集群中的组件和服务,确保它们在发生故障或节点重启时保持可用。

要使用crsctl enable has 命令启用 HAS,请遵循以下步骤:

使用 root/grid户登录到集群中的任一节点。

打开终端窗口或命令行界面,并执行以下命令来启用 HAS:

crsctl enable has

运行此命令后,服务器在操作系统启动时自动启动HAS服务

您可以使用以下命令来检查 HAS 的状态:

crsctl check has

这将验证 HAS 的配置和启用状态,并显示相关信息。

禁用 Oracle 高可用性服务(HAS),使其不会在系统启动时自动启动。

crsctl disable has
4.配置数据库实例随着ASM启动而启动

下面是有关在ASM下配置数据库实例随着ASM启动而启动的步骤:

用以下命令查看资源或服务的当前状态:

crsctl stat res (资源或服务名称) -p

例如,要查看数据库资源的状态,可以运行:

crsctl stat res ora.orcl.db -p

在输出结果中查找参数 AUTO_START,该参数指示资源的启动策略。
可以运行以下命令过滤出 AUTO_START 参数的值:

crsctl stat res ora.orcl.db -p | grep AUTO_START

AUTO_START参数有三个可选值:

  • always:在HAS(集群管理服务)重启时启动资源,但不检查资源在停止时的状态。
  • restore:在HAS重启时启动资源,并检查资源在停止时的状态,并恢复到该状态。
  • never:资源不随HAS启动而启动。

如果要修改数据库的启动策略,具体步骤如下:

对于 Oracle 11g:
使用以下命令修改资源的 AUTO_START 属性:
crsctl modify resource ora.orcl.db -attr AUTO_START=never

请注意,在Oracle 19c中,执行以上命令会报错 CRS-4995: The command 'Modify resource' is invalid in crsctl. Use srvctl for this command.。下面是在Oracle 19c下修改数据库启动策略的步骤:

使用以下命令关闭数据库的自动启动,并修改相关启动策略:

 srvctl modify database -d orcl -policy MANUAL

如果要将数据库恢复为自动启停模式,可以运行以下命令:

 srvctl modify database -d orcl -policy AUTOMATIC

若要查询当前数据库资源的配置,可以使用以下命令:

srvctl config database -d orcl

五、数据库实例与ASM的交互

1 数据库实例通过o0nn进程向ASM实例发送文件创建请求,请求中包含以下信息:diskgroup(磁盘组) 名称,文件类型,文件块大小,文件大小,文件标签,还可以包含template(模板),文件别名。

注意:这一步主要是我的数据库实例向ASM实例发起创建表空间(创建表空间时也要指定对应的数据文件)或文件(数据文件 REDO文件 控制文件等)的请求。那么向ASM实例发送请求的过程相当于向由ASM实例下挂载的磁盘组请求创建的对应的文件的过程。

2 ASM实例将接收到的数据库实例的创建请求转换成区映射(extent map),随后ASM实例创建持续操作目录-COD(Continuing Operation Directory),用以记录和跟踪文件的创建,并在磁盘组中为新的文件分配空间。

3 ASMB进程通知数据库前台进程(serverprcess)接收新文件的区映射(extent map)信息。

4 数据库实例接到区映射后开始初始化文件,并选择合适的I/O去进行初始化。初始化完成后,数据库实例会向ASM实例发送并提交创建完成信息。此时文件处于OPEN状态

5 数据库实例向ASM实例提交创建完成信息。ASM实例收到信息后,其LGWR进程(ASM实例的)将更新动态改变目录-ACD(Active Change Directory)中的记录,DBWn(ASM实例的)进程将相关的分配表,文件目录,文件别名以异步的方式写回到磁盘进行持久化保存(数据写回到ASM实例所管理的磁盘组的元数据表上)。并将文件标记成已经创建且进入到待确认提交态。

6 文件提交确认后会隐式关闭该文件。将来发生 I/O 时,数据库实例需要重新打开该文件。

备注:如果文件创建过程中异常中断,ASM实例利用COD回滚文件的创建,并且回滚过程中相应的删除ACD中相关记录。

六、 启动策略详解

UTO_START 是 Oracle ASM 中用于设置资源的启动策略的一个属性。它用于定义 ASM 实例或磁盘组在集群启动时的自动启动行为。

在 Oracle ASM 中,AUTO_START 属性有以下三个可选值:

ALWAYS:表示资源将始终在集群启动时自动启动,无论其当前的状态如何。
RESTORE:表示资源将在集群启动时自动启动,并检查资源在停止时的状态,并恢复到该状态。这主要适用于 ASM 实例或磁盘组在故障后的恢复。
NEVER:表示资源不会在集群启动时自动启动。
通过设置 AUTO_START 属性,可以控制资源在集群启动时的自动行为。这样可以确保在启动集群时,所需要的 ASM 实例或磁盘组能够自动启动并处于正确的状态。

例如,如果将 AUTO_START 属性设置为 ALWAYS,那么 ASM 实例或磁盘组将始终在集群启动时自动启动。而如果将 AUTO_START 属性设置为 NEVER,那么 ASM 实例或磁盘组将不会在集群启动时自动启动,需要手动启动它们。

下面是有关在ASM下配置数据库实例随着ASM启动而启动的步骤:

1)使用以下命令查看资源或服务的当前状态:
crsctl stat res (资源或服务名称) -p

例如,要查看数据库资源的状态,可以运行:
crsctl stat res ora.orcl.db -p

2)在输出结果中查找参数 AUTO_START,该参数指示资源的启动策略。
可以运行以下命令过滤出 AUTO_START 参数的值:

crsctl stat res ora.orcl.db -p | grep AUTO_START

AUTO_START 参数有三个可选值:

  • always:在HAS(集群管理服务)重启时启动资源,但不检查资源在停止时的状态。
  • restore:在HAS重启时启动资源,并检查资源在停止时的状态,并恢复到该状态。
  • never:资源不随HAS启动而启动。

3) 如果要修改数据库的启动策略,具体步骤如下:

对于 Oracle 11g:

使用以下命令修改资源的 AUTO_START 属性:

crsctl modify resource ora.orcl.db -attr AUTO_START=never

请注意,在Oracle 19c中,执行以上命令会报错 CRS-4995: The command 'Modify resource' is invalid in crsctl. Use srvctl for this command.。下面是在Oracle 19c下修改数据库启动策略的步骤:

使用以下命令关闭数据库的自动启动,并修改相关启动策略:

srvctl modify database -d orcl -policy MANUAL

如果要将数据库恢复为自动启停模式,可以运行以下命令:

srvctl modify database -d orcl -policy AUTOMATIC

若要查询当前数据库资源的配置,可以使用以下命令:

srvctl config database -d orcl

需要注意的是,即使你将数据库配置为随HAS服务重启而自动启动(管理策略为AUTOMATIC),你也不能在数据库关闭的情况下重启HAS服务。否则,数据库仍不会随HAS的重启而启动。这是因为HAS会检测到数据库在其关闭时的状态是关闭的,因此HAS会假设数据库不会随其启动而启动(TARGET-OFFLINE)。

如果你想要数据库不随HAS服务重启而重新启动,一种简单的方法是在关闭HAS服务之前先关闭数据库。无论是使用grid用户通过srvctl命令关闭数据库,还是使用oracle用户通过shutdown immediate命令关闭数据库,效果都是一样的。

七、 ASM后台进程

在 Oracle ASM(Automatic Storage Management)中,有多个后台进程负责执行不同的功能。以下是几个常见的 ASM 后台进程:

  1. ASM Instance:

    • ASM Init Process(进程ID为0):ASM 实例的初始化进程,负责启动其他 ASM 后台进程。
    • ASM RBAL(Repair Balanced):负责监视磁盘故障,并在需要时执行磁盘恢复操作。
    • ASM GMON(Global Monitor):负责监视 ASM 实例和磁盘组的状态,并处理事件通知。
    • ASM WS*:负责处理后续 ASM Instance 的工作进程。
  2. ASM Disk Processes(ASM进程对应磁盘):

    • ASM Rebalance:负责在磁盘组中重平衡数据,以实现磁盘空间的均衡分布。
    • ASM Power Master:负责监视磁盘状态,并处理磁盘上的电源事件。
    • ASM File Metadata:负责处理与文件元数据相关的操作,例如读取和写入 ASM 文件的相关信息。
  3. Oracle Database Instance 和 ASM Instance 进程通信相关进程:

    • LMSn(Lock Manager Server):负责在数据库实例和 ASM 实例之间进行锁管理,并处理并发数据访问。
    • LGWR(Log Writer):负责将数据库日志写入 ASM 磁盘组。
    • DBWR(Database Writer):负责将数据库的数据块写入 ASM 磁盘组。
    • ARCn(Archiver Process):负责将数据库的归档日志写入 ASM 磁盘组。

通过这些后台进程的协作,ASM 能够提供高可用、可伸缩、自动管理的存储解决方案,并有效地管理数据库中的数据文件。

八、ASMCMD命令使用

ASMCMD(ASM Command)是一个用于管理 Oracle ASM(Automatic Storage Management)的命令行工具。它提供了一些有用的命令,用于执行各种 ASM 磁盘组和文件的管理操作。以下是一些常用的 ASMCMD 命令及其用法:

  1. ascmd:启动 ASMCMD 命令行界面。

  2. ls:列出指定路径下的文件和目录。

    • 示例:ASMCMD> ls DATA/
  3. pwd:显示当前所在的 ASM 路径。

    • 示例:ASMCMD> pwd
  4. cd:切换到指定的 ASM 路径。

    • 示例:ASMCMD> cd DATA/
  5. cp:将文件从本地系统复制到 ASM 磁盘组。

    • 示例:ASMCMD> cp /home/oracle/datafile.dbf +DATA/
  6. rm:删除指定的 ASM 文件。

    • 示例:ASMCMD> rm +DATA/DATAFILE.dbf
  7. du:显示指定路径或文件的磁盘使用情况。

    • 示例:ASMCMD> du +DATA
  8. lsct:列出当前ASM客户端的信息

    • 示例:ASMCMD> lsct
  9. lsdg:列出所有磁盘组及其详细信息。

    • 示例:ASMCMD> lsdg
  10. lsof:列出数据文件,控制文件等文件的信息

    • 示例:ASMCMD> lsof
  11. mkdg:创建一个新的磁盘组。

    • 示例:ASMCMD> mkdg DG_NAME DISK1, DISK2
  12. mkalias:创建一个路径别名。

    • 示例:ASMCMD> mkalias myalias +DATA/DATAFILE.dbf
  13. lsdsk:列出盘的信息(ASM DISK)

    • 示例:ASMCMD> lsdsk
  14. help:显示帮助信息。

    • 示例:ASMCMD> help cp
  15. ls -ls: 查看ASM磁盘占用情况

这些只是 ASMCMD 命令中的一部分,还有其他的命令可以用于执行更多操作,如查看磁盘组信息、移动文件、查询文件状态等。您可以在使用 ASMCMD> help 命令获取完整的命令列表和帮助信息。

九、图形化界面和手工创建磁盘组

ASM(Automatic Storage Management)有一个图形化界面工具称为 ASM Configuration Assistant(ASMCA),它提供了一个直观的界面,可用于管理和配置 ASM 实例和磁盘组

图像化创建磁盘组

1.添加磁盘
fdisk -l 检查所有磁盘

查到磁盘后修改文件

vi /etc/udev/rules.d/99-oracle-asmdevices.rules

KERNEL==“sdb”,NAME=“asmdisk1”,OWNER=“grid”,GROUP=“asmadmin”,MODE=“0660”
KERNEL==“sdc”,NAME=“asmdisk2”,OWNER=“grid”,GROUP=“asmadmin”,MODE=“0660”
KERNEL==“sdd”,NAME=“asmdisk3”,OWNER=“grid”,GROUP=“asmadmin”,MODE=“0660” --新加盘配置

重启服务让配置生效
udevadm control --reload-rules
udevadm trigger

2.asmca创建磁盘组

asmca调出图形界面
su - grid
export DISPLAY=:0
asmca

在 ASMCA 工具中,选择 “创建” 选项,然后选择 “磁盘组”。
在这里插入图片描述

在 “创建磁盘组” 对话框中,输入磁盘组的名称,并选择所需的存储类型(如外部冗余、高冗余等)。
在 “选取磁盘” 部分,选择要包含在磁盘组中的物理磁盘。您可以选择从列表中选择物理磁盘,也可以手动输入设备路径
确认创建磁盘组的设置,并单击 “创建” 按钮以开始创建。

在这里插入图片描述

查看ASM资源状态信息 ora.FRADG.dg 本地资源出些,并且状态是ONLINE 和状态可用即代表创建磁盘组FRADG成功
crsctl stat res -t
在这里插入图片描述

进入asmcmd查看磁盘组信息

在这里插入图片描述

手工创建磁盘组

步骤如下:

1.首先检查磁盘状态:看看哪些磁盘可以创建磁盘组用
set lines 200
col name for a20
col path for a30

select GROUP_NUMBER,free_mb,total_mb,HEADER_STATUS,name,PATH from v$asm_disk order by 1 desc;

如果HEADER_STATUS 出现MEMBER 代表已经被使用,不能够用于创建磁盘组
只有状态未HEADER_STATUS CANDIDATE(候选)才可用于创建磁盘组

案例如下:在这里插入图片描述
2.创建磁盘组的语法如下:
create diskgroup <磁盘组名称> external redundancy disk ‘<磁盘路径>’;

如:
create diskgroup fradg external redundancy disk ‘/dev/sdc’ ;
create diskgroup fradg external redundancy disk ‘/dev/sdc’ ATTRIBUTE ‘au_size’=‘4M’; 指定了 au_size 属性为 4M,即将每个分配单元的大小设置为 4MB

3.再次查看磁盘组状态:
set lines 200
col name for a20
select name,state,free_mb,total_mb,usable_file_mb from v$asm_diskgroup;

4.卸载磁盘组,从ASM实例上卸载
alter diskgroup fradg dismount force;

5.让磁盘组重新挂载
alter diskgroup fradg mount;

6.删除磁盘组
drop diskgroup fradg including contents;

注意:如果删除的磁盘组想要重新使用,需要格式化磁盘头
dd if=/dev/zero of=/dev/sdc bs=1M count=1024

十、ASM相关常用命令

1.显示集群节点列表
olsnodes

2.显示集群中每个节点的节点编号和节点名
olsnodes -n

3.查看监听状态
srvctl status listener

4.查看集群vip信息
srvctl config nodeapps -a

5.查看集群scan_ip
srvctl config scan

6.停掉集群(包含数据库)
crsctl stop crs

7.启动集群(包含数据库)
crsctl start crs

8.查看集群状态
crsctl status res -t

9.显示OCR中注册的所有数据库
srvctl config database

10.查看某个数据库配置
srvctl config database -d raw

十一、向ASM磁盘组中添加磁盘

可参考我的其它文章:Oracl ASM磁盘扩容
https://blog.csdn.net/m0_49929446/article/details/124084310

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

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

相关文章

MySQL决战:MySQL数据导入导出

目录 前言 一.navact数据导入导出&#xff08;第三方工具&#xff09; 1.导入数据 2.数据导出 二. mysqldump命令导入导出数据 1.mysqldump介绍 2.数据导出 3.数据导入 三.load data file进行数据导入导出&#xff08;只限于单表&#xff09; 1.数据导出 增加导出权…

linux系统基础知识-基础IO

IO 概念引入位图的概念IO的系统调用函数openwriteread()close简单使用样例&#xff1a; 文件描述符fd默认文件流stdin/stdout/stderr文件描述符的分配规则 重定向的概念输出重定向输入重定向追加重定向dup2()系统调用总结 文件缓冲区深入理解缓冲区的概念输出缓冲区部分代码解释…

WEB 3D技术 three.js 线框几何体

本文 我们说一下 线框几何体 想将一个几何体 以线框形式展现 threeJS中 有两种类可以实现 第一种 WireframeGeometry 这种几何体 其实就类似于 将材质中的 wireframe 开启 这种方法 之前我们也用过 还有一种 就是 EdgesGeometry 边缘几何体 我们先将代码写成这样 import .…

【深度学习每日小知识】Data Augmentation 数据增强

数据增强是通过对原始数据进行各种转换和修改来人工生成附加数据的过程&#xff0c;旨在增加机器学习模型中训练数据的大小和多样性。这对于计算机视觉领域尤为重要&#xff0c;因为图像经常被用作输入数据。 计算机视觉中的数据增强 数据增强的主要目标是解决过拟合问题&…

使用迭代优化递归程

王有志&#xff0c;一个分享硬核Java技术的互金摸鱼侠加入Java人的提桶跑路群&#xff1a;共同富裕的Java人 今天我们将会分析上篇文章中递归算法存在的问题&#xff0c;并通过迭代去优化。 递归存在的问题 上一篇中&#xff0c;我们计算了序号10以内的斐波那契数。今天为了清…

【Leetcode】236.二叉树的最近公共祖先

一、题目 1、题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 示例1…

关于“Python”的核心知识点整理大全63

目录 20.2.11 使用 Git 跟踪项目文件 1. 安装Git 2. 配置Git 3. 忽略文件 .gitignore 注意 4. 提交项目 20.2.12 推送到 Heroku 注意 20.2.13 在 Heroku 上建立数据库 20.2.14 改进 Heroku 部署 1. 在Heroku上创建超级用户 注意 注意 20.2.11 使用 Git 跟踪项目文件…

Vue3-37-路由-组件内的路由守卫 onBeforeRouteLeave 和 onBeforeRouteUpdate

简介 组件内的路由守卫&#xff0c;实际上就是两个 API 方法。 他们与普通的守卫不同的是 &#xff1a; 他们是写在组件内的&#xff0c;在组件中监听路由的变化&#xff0c;不是全局的&#xff0c;比较灵活。 以下是两个 API 的功能说明&#xff1a;onBeforeRouteLeave() : 守…

Java中的序列化方法探索

.为什么要序列化 对象不序列化&#xff0c;能直接存储吗&#xff1f; 在 Java 中&#xff0c;序列化是将对象的状态信息转换为可以存储或传输的形式&#xff08;例如&#xff0c;转换为字节流&#xff09;的过程。在对象数据需要在网络上传输或需要在磁盘上持久化存储时&#…

指针的含义、表示、规范、存储、运用

指针的含义、表示、规范、存储、运用 指针的含义指针的表示指针的规范先声明再定义声明和定义一起表示错误表示 指针的存储理解一个变量的存储过程和原理理解一个指针的存储过程和原理理解多个指针的存储过程和原理 指针的运用 指针的含义 表示某个变量或数据所在的内存地址 注…

使用tailscale访问对端局域网上的其他设备

当tailscale客户端应用程序直接安装在组织中的每个客户端、服务器和虚拟机上时&#xff0c;Tailscale 效果最佳。这样&#xff0c;流量就会被端到端加密&#xff0c;并且无需配置即可在物理位置之间移动机器。 但是&#xff0c;在某些情况下&#xff0c;你不能或不想在每台设备…

Linux第18步_安装“Ubuntu系统下的C语言编GCC译器”

Ubuntu系统没有提供C/C的编译环境&#xff0c;因此还需要手动安装build-essential软件包&#xff0c;它包含了 GNU 编辑器&#xff0c;GNU 调试器&#xff0c;和其他编译软件所必需的开发库和工具。本节用于重点介绍安装“Ubuntu系统下的C语言编译器GCC”和使用。 1、在安装前…

图片纹理贴图

/* * 当需要给图形赋予真实颜色的时候&#xff0c;不太可能为没一个顶点指定一个颜色&#xff0c;通常会采用纹理贴图 * 每个顶点关联一个纹理坐标 (Texture Coordinate) 其它片段上进行片段插值 * */#include <iostream> #define STBI_NO_SIMD #define STB_IMAGE_IMPLE…

【嵌入式移植】1、Ubuntu系统准备

Ubuntu系统准备 虚拟机与Ubuntu安装下载Ubuntu创建虚拟机系统配置 虚拟机与Ubuntu安装 嵌入式移植通常使用Linux操作系统的环境&#xff0c;使用Linux下的交叉编译工具链对BootLoader、kernel以及应用程序进行编译&#xff0c;然后下载运行。当然也可以通过各类IDE或者Windows…

从文本(.txt)文件中读取数据时出现中文乱码

前言 当需要从记事本中读取数据时&#xff0c;发现读取的数据会出现中文乱码&#xff0c;我尝试了C和C读取文件&#xff0c;发现都是这样。 乱码原因 文本文件的保存默认使用UTF-8编码方式&#xff0c;而VS编译器的编码方式是GBK&#xff0c;所以不同的编码方式导致了乱码。…

【leetcode】力扣算法之删除链表中倒数第n个节点【中等难度】

删除链表中倒数第n个节点 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 用例 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 输入&#xff1a;head [1], n 1 输出&#xff1a;[] 输入&#xff1a;head …

各种锁的概述

乐观锁与悲观锁 悲观锁指对数据被外界修改持保守态度&#xff0c;认为数据很容易就会被其他线程修改&#xff0c;所以在数据被处理前先对数据进行加锁&#xff0c;并在整个数据处理过程中&#xff0c;使数据处于锁定状态。 悲观锁的实现往往依靠数据库提供的锁机制&#xff0…

计算机体系结构期末复习流程大纲

1.存储器和cache 存储器的容量、速度与价格之间的要求是相互矛盾的&#xff0c;速度越快&#xff0c;没bit位价格越高&#xff0c;容量越大&#xff0c;速度越慢&#xff0c;目前主存一般有DRAM构成。 处理器CPU访问存储器的指标&#xff1a; 延迟时间&#xff08;Latency&am…

【C++】—— 工厂模式详解

目录 &#xff08;一&#xff09;工厂模式的特点 &#xff08;二&#xff09;工厂模式分类 1、简单工厂模式 2、工厂方法模式 3、抽象工厂模式 &#xff08;三&#xff09;总结与回顾 &#xff08;一&#xff09;工厂模式的特点 1、优势 ⼯⼚模式是⼀种创建型设计模式&a…

快速入门Visual Studio 2022开发.Net Framework研发环境指南

IDE工具 Visual Studio 2022 Vs2022企业版 - VisualStudioSetup.exe Visual Studio Code VSCodeUserSetup-x64-1.66.2.exeVSCodeUserSetup-x64-1.67.0-insider.exe IDE环境 编程字体YaHei.Consolas YaHei.Consolas.1.12.ttf IDE插件 Visual Studio Code常用插件 Chinese…