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

news2024/11/19 23:27:03

文章目录

      • 一、引言
      • 二、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.coloradmin.cn/o/1371151.html

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

相关文章

汇聚数据库创新力量,打造千行万业数据基石

12月28日&#xff0c;以“汇聚数据库创新力量&#xff0c;打造千行万业数据基石”为主题的openGauss Summit 2023在北京举行。会上&#xff0c;openGauss社区理事会理事长胡正策发表《汇聚数据库创新力量&#xff0c;打造千行万业数据基石》主题演讲&#xff0c;他表示&#xf…

面相圆润是有福气的象征

在中国传统文化中&#xff0c;面相是一个非常重要的概念。相信大家肯定听说过“相由心生”这个成语吧&#xff0c;这就是告诉我们&#xff0c;一个人的面貌其实是可以反映出他内心的状态和气质&#xff0c;也可以反映其性格、健康状况和运势等。而一个圆润的面相&#xff0c;则…

代码混淆:保护您的应用程序

目录 引言 什么是代码混淆&#xff1f; 代码混淆常见手段 代码混淆的作用 代码混淆可能带来的问题 常用的混淆工具 如何使用ipaguard进行混淆 总结 引言 在当今数字化时代&#xff0c;移动应用程序已经成为人们生活和工作中不可或缺的一部分。但是&#xff0c;随着应用…

网络之路28:二层链路聚合

正文共&#xff1a;1666 字 14 图&#xff0c;预估阅读时间&#xff1a;2 分钟 目录 网络之路第一章&#xff1a;Windows系统中的网络 0、序言 1、Windows系统中的网络1.1、桌面中的网卡1.2、命令行中的网卡1.3、路由表1.4、家用路由器 网络之路第二章&#xff1a;认识企业设备…

Multimodal Segmentation of Medical Images with Heavily Missing Data

F是mapping function 吐槽 图3太简单了吧。作者未提供代码

C++实现简单贪吃蛇游戏

文章目录 1 开发历程2 开发思路3 使用介绍4 源文件代码5 游戏截图6 小结 1 开发历程 游戏使用C语言开发&#xff0c;是博主某个下午心血来潮的结果&#xff0c;后面又花了点时间加了计分&#xff0c;记录历史得分的功能。 2 开发思路 其实贪吃蛇主要难在蛇身的移动上&#x…

0-1背包问题-例题

题目摘自《卡码网》46题 题意理解 m种材料——对应m物品 大小问n的行李箱——对应大小为n的背包 所以该问题是一个0-1背包问题&#xff0c;采用动态规划的一般思路来解题。 解题思路&#xff1a; 动规五部曲&#xff1a; &#xff08;1&#xff09;定义二维dp数组&#xff0c;明…

把图表题注编号由“一.1”改为“1.1“ (方法一)

前置设置&#xff1a; 手打章节标题&#xff0c;“绪论”&#xff0c;“ 相关理论和技术方法”。给章节标题设置样式 “标题一”&#xff0c;设置为一级标题。打开导航窗格&#xff0c;可以不开&#xff0c;我纯粹是为了操作方便。 1、选中第一章的标题--“绪论”&#xff0c;…

WhatsApp营销是什么?

WhatsApp营销是什么&#xff1f; WhatsApp营销是一种信息和服务营销&#xff0c;是外贸企业的营销利器。WhatsApp可用于售前咨询、售后服务以及品牌宣传等多种场景&#xff0c;跨境企业可通过WhatsApp快速链接目标客户&#xff0c;提供7x24h全天候客户支持,以建立良好的客户关…

UltraScale 和 UltraScale+ 生成已加密文件和已经过身份验证的文件

注释 &#xff1a;如需了解更多信息&#xff0c;请参阅《使用加密和身份验证确保 UltraScale/UltraScale FPGA 比特流的安全》 (XAPP1267)。 要生成加密比特流&#xff0c;请在 Vivado IDE 中打开已实现的设计。在主工具栏中&#xff0c;依次选择“Flow” → “Bitstream Setti…

源码|redis7.2.2|sds

文章目录 前言Type && EncodingsdsencodingcreateStringObjectcreateEmbeddedStringObject总结 createRawStringObject总结 createStringObjectFromLongDouble总结 createStringObjectFromLongLongWithOptions总结 相关操作sdscatlen总结 阈值44sds VS C字符串 前言 从…

微信这一功能全面升级,万万没想到

大家好&#xff0c;我是小悟 兄弟们&#xff0c;今天要说的是&#xff0c;复用已认证公众号资料快速注册已认证小程序的时代一去不复还了。 再从公众号快速注册小程序入口去注册小程序&#xff0c;注册后也是未认证的状态&#xff0c;需要单独付费认证。通过该方式注册的小程序…

案例:自定义下拉刷新动画(ArkTS)

文章目录 介绍相关概念完整示例代码结构解读 自定义下拉组件自定义刷新动画总结 介绍 本篇Codelab主要介绍组件动画animation属性设置。当组件的某些通用属性变化时&#xff0c;可以通过属性动画实现渐变效果&#xff0c;提升用户体验。 本Codelab使用的display接口处于mock阶…

私域新手必看:这可能是你最快速的入门指南!

一、认知层&#xff1a;为什么必须做私域&#xff1f; 了解这个问题&#xff0c;必须得观察一下中国现状。根据中国互联网络信息中心&#xff08;CNNIC&#xff09;发布第48次《中国互联网络发展状况统计报告》显示&#xff0c;截至 2021 年 6 月&#xff1a; 而典型电商平台的…

Transformers 2023年度回顾 :从BERT到GPT4

人工智能已成为近年来最受关注的话题之一&#xff0c;由于神经网络的发展&#xff0c;曾经被认为纯粹是科幻小说中的服务现在正在成为现实。从对话代理到媒体内容生成&#xff0c;人工智能正在改变我们与技术互动的方式。特别是机器学习 (ML) 模型在自然语言处理 (NLP) 领域取得…

小美的蛋糕切割(美团2024届秋招笔试第一场编程真题)

题目分析&#xff1a;切蛋糕问题切记可以横着切&#xff0c;也可以竖着切。本题目需要快速求得两个矩形的和&#xff0c;可以用二维前缀和数组解决。然后枚举一刀切的位置。 #include <iostream> #include <algorithm> using namespace std; int a[1005][1005]; l…

Unity中URP下抓屏的 开启 和 使用

文章目录 前言一、抓屏开启1、Unity下开启抓屏2、Shader中开启抓屏 二、抓屏使用1、设置为半透明渲染队列&#xff0c;关闭深度写入2、申明纹理和采样器3、在片元着色器使用请添加图片描述 三、测试代码 前言 我们在这篇文章中看一下&#xff0c;URP下怎么开启抓屏。 一、抓屏…

DAY3 -Learning English

一、积累 1.谁在乎啊&#xff08;who gives a shit&#xff09; 例句&#xff1a;who gives a shit about what he think. 谁在乎他怎么想的? 2. 往事如烟|过去的都过去了(water under the bridge) The argument we had is now water under the bridge . 我们之前的争论已…

爬取国家法律法规数据库法律条文

代码展现&#xff1a; import requests import os filename 法律条文\\ if not os.path.exists(filename):os.mkdir(filename) url https://flk.npc.gov.cn/api/? data {type: flfg,searchType: title;vague,sortTr: f_bbrq_s;desc,gbrqStart: ,gbrqEnd: ,sxrqStart: ,sx…

【案例实战】业务稳定性运行之全链路混合压测

1.全链路压测开展步骤 &#xff08;1&#xff09;什么是全链路压测 全链路压测是指基于真实业务场景&#xff0c;通过模拟海量的用户请求&#xff0c;对整个后台服务进行压力测试&#xff0c;从而评估整个系统的性能水平。 对应用程序的整个技术栈进行完整的压力和性能测试&a…