维护在线重做日志

学习目标

  • 解释在线重做日志文件的目的概述
  • 在线重做日志文件的结构
  • 控制日志开关和检查点
  • 多路复用和维护在线重做日志文件
  • 使用OMF管理在线重做日志文件
  • 获取在线重做日志文件信息

在线重做日志文件提供了在数据库发生故障时重做事务的方法。
每个事务都同步写入重做日志缓冲区,然后刷新到在线重做日志文件,以便在媒体失败时提供恢复机制。
(除了在启用了NOLOGGING子句的对象中直接加载插入等例外情况。)
这包括尚未提交的事务、撤消段信息以及模式和对象管理语句。
在线重做日志文件用于实例失败时恢复未写入数据文件的已提交数据的情况。
在线重做日志文件仅用于恢复。

在线重做日志文件具有以下特点
  • 记录对数据所作的所有更改
  • 提供恢复机制
  • 可以组织成小组
  • 至少需要两组

重做日志文件结构

重做日志文件结构

重做日志文件组的工作原理
  1. 多个重做日志组:Oracle数据库可以配置多个在线重做日志组,每个重做日志组包含一个或多个在线重做日志文件。这样可以提高数据库的并发性和容错性。

  2. 轮流写入:当数据库进行修改操作时,这些操作会首先写入当前活跃的在线重做日志组中的重做日志文件。如果当前的重做日志文件写满了,数据库会自动切换到下一个在线重做日志组中的重做日志文件继续记录修改操作。

  3. 循环使用:在线重做日志组是循环使用的,当一个重做日志文件写满后,数据库会自动切换到下一个重做日志文件继续记录修改操作。这样可以确保数据库的重做日志不会无限增长,同时保证了数据库的持久性和一致性。

  4. 保证数据完整性:通过多个在线重做日志组的轮流写入,Oracle数据库可以确保即使在一个重做日志组发生故障或损坏时,仍然可以继续记录修改操作,保证数据库的数据完整性和可靠性。

  5. 性能优化:合理配置和管理多个在线重做日志组可以提高数据库的性能和并发能力,确保数据库的稳定性和可靠性。

联机重做日志文件的结构
  • 数据库管理员可以设置Oracle数据库维护在线重做日志文件的副本,以避免由于单点故障而丢失数据库信息。

  • 联机重做日志文件组
    在线重做日志文件的一组相同的副本称为在线重做日志文件组。LGWR后台进程并发地将相同的信息写入组中的所有在线重做日志文件。
    Oracle服务器至少需要两个在线重做日志文件组来保证数据库的正常运行。

  • 联机重做日志文件成员
    组中的每个在线重做日志文件称为一个成员。
    组中的每个成员具有相同的日志序列号和相同的大小。
    每次Oracle服务器写入日志组时,都会分配日志序列号,以唯一标识每个在线重做日志文件。当前日志序列号存储在控制文件和所有数据文件的头文件中。

  • 联机重做日志文件的结构
    创建初始在线重做日志文件
    在线重做日志文件组和成员的初始集是在创建数据库时创建的。
    以下参数限制在线重做日志文件的数量:

  • CREATE DATABASE命令中的MAXLOGFILES参数指定在线重做日志文件组的绝对最大值。

  • MAXLOGFILES的最大值和默认值取决于您的操作系统。

  • 在CREATE DATABASE命令中使用的MAXLOGMEMBERS参数决定每个组的最大成员数。
    MAXLOGMEMBERS的最大值和默认值取决于您的操作系统。

多路复用重做日志文件

为了防止涉及重做日志本身的故障,Oracle数据库允许多路重做日志,这意味着可以在不同的位置自动维护两个或多个相同的重做日志副本。为了获得最大的好处,这些位置应该位于单独的磁盘上。但是,即使重做日志的所有副本都在同一个磁盘上,冗余也可以帮助防止I/O错误、文件损坏等。当重做日志文件多路复用时,LGWR并发地将相同的重做日志信息写入多个相同的重做日志文件,从而消除了重做日志的单点故障。
多路复用是通过创建重做日志文件组来实现的。组由重做日志文件及其多路副本组成。每一个相同的副本都被认为是这个群体的一个成员。每个重做日志组由一个数字定义,例如组1、组2,等这等。

注意:Oracle建议您将重做日志文件多路复用。如果需要恢复,日志文件数据的丢失可能是灾难性的。注意,当您复用重做日志时,数据库必须增加它执行的1/0量。根据您的配置,这可能会影响整体数据库性能。

在这里插入图片描述

在线重做日志文件是如何工作的

在线重做日志文件以循环的方式使用。
转到下一个日志组。
当在线重做日志文件已满时,LGWR将移动

  • 称为日志开关
  • 检查点操作也会发生
  • 写入控制文件的信息

从一个日志文件组切换到另一个日志文件组的行为称为日志切换。
检查点是将脏(修改)块从缓冲缓存写到磁盘的过程。

LGWR(Log Writer)是Oracle数据库中的一个重要后台进程,负责将数据库缓冲区中的修改操作写入在线重做日志文件中。

  1. 写入重做日志:LGWR负责将数据库缓冲区中的修改操作(如插入、更新、删除)写入在线重做日志文件中,确保数据库的修改操作被持久化到磁盘,以保证数据库的一致性和持久性。
  2. 控制提交:LGWR在事务提交时负责将事务的修改操作写入重做日志文件,并生成提交记录,以确保事务的提交状态能够被恢复。
  3. 性能优化:LGWR通过批量写入和异步写入的方式优化性能,减少磁盘I/O的开销,提高数据库的性能和并发能力。
  4. 故障恢复:LGWR在数据库发生故障或崩溃时起着重要作用,通过重放在线重做日志中的操作,可以帮助数据库恢复到一致的状态。
  5. 保证数据完整性:LGWR的工作确保了数据库的数据完整性,即使在异常情况下,也可以通过重做日志文件中的记录来恢复数据库到一致的状态。
Oracle服务器将对数据库的所有更改顺序记录在Redo Log Buffer中。重做条目由LGWR进程从重做日志缓冲区写入当前在线垂做日志文件组。LGWR在以下情况下写入
  • 当事务提交时
  • 当重做日志缓冲区满三分之一时
  • 当重做日志缓冲区中有超过1兆字节的更改记录时
  • 在DBWn将数据库Buffer Cache中的修改块写入数据文件之前在线重做日志文件以循环方式使用。每个在线重做日志文件组由日志序列号标识,该序列号在日志每次被重用时被覆盖。
日志切换

LGWR按顺序写入在线重做日志文件。当当前在线重做日志文件组被填满时,LGWR开始向下一个组写入。这被称为日志开关。
当最后一个可用的在线重做日志文件被填满时,LGWR返回到第一个在线重做日志文件组并开始再次写入。

日志交换机和日志序列号
  • 日志切换是数据库停止写入一个重做日志文件并开始写入另一个重做日志文件的点。通常,当当前重做日志文件被完全填满,并且必须继续写入下一个重做日志文件时,会发生日志切换。但是,您可以将日志开关配置为定期发生,而不管当前的重做日志文件是否被完全填充。您也可以手动强制记录交换机日志。
  • Oracle数据库在每次发生日志切换和LGWR开始写入时,为每个重做日志文件分配一个新的日志序列号。当数据库归档重做日志文件时,归档日志保留其日志序列号。当重做日志文件被循环使用时,将给出下一个可用的日志序列号。
  • 每个在线或归档的重做日志文件由其日志序列号唯一标识。在崩溃、实例或介质恢复期间,数据库通过使用必要的归档和重做日志文件的日志序列号,以升序正确地应用重做日志文件。
检查点

在检查点期间:

  • DBWn将许多脏数据库缓冲区写入数据文件,这些缓冲区由正在被检查点的日志所覆盖。
    检查点后台进程CKPT更新控制文件,以反映它已成功完成检查点。如果检查点是由日志切换引起的,CKPT还会更新数据文件的头。
  • 检查点可以发生在数据库中的所有数据文件上,也可以只发生在特定的数据文件上。
    例如,在以下情况下会出现检查点:
  • 在每个日志开关处
  • 当使用正常、事务或立即选项关闭实例时
  • 当通过设置FAST_START_MTTR_TARGET初始化参数强制时当数据库管理员手动请求时
  • 当ALTER TABLESPACE [OFFLINE | NORMALIREAD ONLY|BEGIN BACKUP]命令对特定的数据文件进行校验时
    每个检查点的信息记录在alert_SID.log中。如果初始化参数LOG_CHECKPOINTS_TO_ALERT设置为TRUE,则日志文件将被删除。该参数的默认值FALSE不记录检查点。
强制

与在线重做日志相关的视图

desc v$log
select group# ,group#,sequence#,status from v$log;

在这里插入图片描述

FAST_START_MTTR_TARGET

FAST_START_MTTR_TARGET是Oracle数据库中一个重要的参数,用于指定数据库的自动内存调整目标,以便在数据库发生故障时快速恢复到一致的状态。在您提供的情况下,FAST_START_MTTR_TARGET = 600表示设置了数据库的自动内存调整目标为600秒。
具体来说,FAST_START_MTTR_TARGET参数的作用是控制数据库的自动内存调整过程,以确保在数据库发生故障时,数据库可以在指定的时间内(以秒为单位)快速恢复到一致的状态。通过调整这个参数的值,可以影响数据库的恢复速度和性能。
在这种情况下,设置FAST_START_MTTR_TARGET = 600表示数据库的自动内存调整目标为600秒,即数据库在发生故障时,会尽力在600秒内完成恢复操作,以确保数据库的一致性和可用性。

show parameter fast可以查询当前参数

强制日志开关和检查点
日志切换和检查点在数据库操作的某些点自动执行,如前所述。但是,DBA可以强制执行日志切换或检查点。迫使检查点
FAST START MTTR TARGET参数取代了已弃用的参数:FAST_START_IO-TARGET LOG_CHECKPOINT_TIMEOUT如果使用了参数FAST START MTTR TARGET,则不能使用这些已弃用的参数。
在上面的示例中,已经设置了FAST-START_MTTR_TARGET参数,以便实例恢复不超过600秒。数据库将根据这一目标调整其他参数。

增加在线重做日志数量

在线重做日志组数量
  1. 确定当前的在线重做日志组数量:首先,您可以查询数据库的参数设置或查看数据库的配置文件,确认当前的在线重做日志组数量。

  2. 备份数据库:在进行任何更改之前,请务必备份数据库,以防意外发生。

  3. 添加新的在线重做日志组:您可以使用ALTER DATABASE ADD LOGFILE GROUP命令来添加新的在线重做日志组。例如,您可以执行类似以下的SQL语句:

ALTER DATABASE ADD LOGFILE GROUP 4 ('/path/to/logfile_group_4a.log', '/path/to/logfile_group_4b.log') SIZE 100M;

在上面的示例中,我们添加了一个新的在线重做日志组,包含两个重做日志文件,并指定了每个文件的大小为100M。您可以根据实际需求和数据库配置进行调整。

  1. 激活新的在线重做日志组:添加新的在线重做日志组后,您需要激活这些新的重做日志组,以便数据库开始使用它们记录修改操作。您可以执行以下SQL语句来激活新的重做日志组:
ALTER DATABASE ADD LOGFILE GROUP 4 ('/path/to/logfile_group_4a.log', '/path/to/logfile_group_4b.log') SIZE 100M;
  1. 验证和监控:添加新的在线重做日志组后,您可以验证数据库是否正常工作,并监控数据库的性能和日志记录情况,以确保新的重做日志组被正确使用。
在线重做日志组内数量
  1. 确定当前的在线重做日志组文件数量:首先,您可以查询数据库的参数设置或查看数据库的配置文件,确认每个在线重做日志组中当前的文件数量。
    SELECT COUNT(*) AS "Number of Redo Log Groups" FROM V$LOG;   # 查看重做日志组数量
    SELECT * FROM V$PARAMETER WHERE NAME LIKE '%log_file%';   # 查看数据库的参数设置
    

2. **备份数据库**:在进行任何更改之前,请务必备份数据库,以防意外发生。3. **修改在线重做日志组文件数量**:您可以使用ALTER DATABASE ADD LOGFILE MEMBER或ALTER DATABASE DROP LOGFILE MEMBER命令来增加或减少每个在线重做日志组中的文件数量。以下是一些示例SQL语句:- **增加文件数量**:```sql
ALTER DATABASE ADD LOGFILE MEMBER '/path/to/new_logfile.log' TO GROUP 1;

在上面的示例中,我们向第一个重做日志组添加了一个新的重做日志文件。

  • 减少文件数量
ALTER DATABASE DROP LOGFILE MEMBER '/path/to/logfile_to_be_dropped.log';

在上面的示例中,我们从数据库中删除了一个特定的重做日志文件。

  1. 激活修改:在修改每个在线重做日志组中的文件数量后,您可能需要重新启动数据库实例或执行适当的命令来激活这些更改。

  2. 验证和监控:修改每个在线重做日志组中的文件数量后,您可以验证数据库是否正常工作,并监控数据库的性能和日志记录情况,以确保修改生效并不会影响数据库的稳定性。

查看重做日志位置

SELECT MEMBER FROM V$LOGFILE;   # 获取重做日志文件的位置
SELECT * FROM V$LOG;      # 查看所有重做日志文件的相关信息,包括位置、大小等

删除Redo文件成员

  • 允许删除重做日志文件,使多路重做日志暂时变得不对称。例如,如果您使用重做日志文件的双工组,您可以删除一个组中的一个成员,即使所有其他组每个都有两个成员。但是,您应该立即纠正这种情况,以便所有组至少有两个成员,从而消除重做日志可能出现的单点故障。

  • 一个实例总是需要至少两组有效的重做日志文件,无论组中有多少成员。(一个小组由一个或多个成员组成。)如果要删除的成员是组的最后一个有效成员,则在其他成员生效之前不能删除该成员。要查看重做日志文件的状态,请使用V$LOGFILE视图。如果数据库无法访问重做日志文件,则重做日志文件变为INVALID。如果数据库怀疑它不完整或不正确,则变为STALE。过时的日志文件在下次将其组设置为活动组时再次有效。


  • 只有当重做日志成员不属于活动组或当前组时,才能删除该成员。如果要删除活动组成员,请首先强制进行日志切换。
  • 在删除重做日志成员之前,请确保重做日志成员所属的组已存档(如果存档已启用)。要查看是否发生了这种情况,请使用V$LOG视图。

当重做日志成员从数据库中删除时,操作系统文件不会从磁盘中删除。相反,将更新关联数据库的控制文件以从数据库结构中删除成员。删除重做日志文件后,确保删除成功完成,然后使用适当的操作系统命令删除被删除的重做日志文件。

设置列格式

  COLUMN column_name FORMAT A20     # 这将设置名为column_name的列的宽度为20个字符col member format A20
具体删除
  1. 确定要删除的重做日志文件:首先,您需要确定要删除的重做日志文件的位置和名称。您可以使用以下SQL查询语句来查看当前数据库中的重做日志文件信息:
SELECT * FROM V$LOGFILE;

这将列出数据库中所有的重做日志文件及其相关信息,包括位置、大小等。

  1. 切换日志文件组:在删除重做日志文件之前,建议首先切换到其他日志文件组,以确保数据库能够继续正常运行。您可以使用以下SQL语句来切换日志文件组:
ALTER SYSTEM SWITCH LOGFILE;

这将触发数据库切换到下一个可用的重做日志文件组。

  1. 删除重做日志文件:一旦切换到其他日志文件组,您可以使用操作系统命令来删除特定的重做日志文件。例如,如果要删除名为redo_logfile_1.log的重做日志文件,您可以使用类似以下的命令:
rm /path/to/redo_logfile_1.log

请确保在删除重做日志文件之前已经备份数据库,并且谨慎操作,以避免数据丢失或数据库损坏。

  1. 清除Oracle数据库中的重做日志信息:删除重做日志文件后,您可能需要清除数据库中对应的重做日志信息。您可以使用以下SQL语句来清除已删除的重做日志文件信息:
ALTER DATABASE CLEAR LOGFILE GROUP group_number;

请将group_number替换为实际的重做日志组号。

  • 另一种顺序
    在这里插入图片描述
删除重做日志组
SELECT GROUP#, MEMBERS, ARCHIVED, STATUS FROM V$LOG;

查询Oracle数据库中的重做日志组的组号(group#)、成员数(members)、是否已归档(archived)、状态(status)
状态这一列:
CURRENT:表示该重做日志组当前正在被使用,是当前正在写入的重做日志组。
ACTIVE:表示该重做日志组包含尚未归档的重做日志,即这些重做日志还未被归档到归档日志中。
INACTIVE:表示该重做日志组中的重做日志已经被归档,不再处于活动状态。
UNUSED:表示该重做日志组尚未被使用,没有包含任何重做日志。

一个实例至少需要两组在线重做日志文件。
不能删除活动组或当前组。
删除在线重做日志文件组时,不会删除操作系统文件。

在这里插入图片描述

应该先删除组4,要保证序号是连续的

迁移和重命名

  • 可以使用操作系统命令重新定位重做日志,然后使用ALTER DATABASE语句使数据库知道它们的新名称(位置)。这个过程是必要的,例如,如果当前用于一些重做日志文件的磁盘将被删除,或者如果数据文件和许多重做日志文件存储在同一个磁盘上,并且应该分开以减少争用。
  • 要重命名重做日志成员,您必须具有ALTER DATABASE系统权限。此外,您可能还需要操作系,统特权来将文件复制到所需的位置,并需要特权来打开和备份数据库。
  • 在重新定位重做日志或对数据库进行任何其他结构更改之前,请完全备份数据库,以防在执行操作时遇到问题。作为预防措施,在重命名或重定位一组重做日志文件后,应立即备份数据库控制文件。

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

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

相关文章

分布式数据库中间件可以用在哪些场景呢

在数字化转型的浪潮中,企业面临着海量数据的存储、管理和分析挑战。华为云分布式数据库中间件(DDM)作为一款高效的数据管理解决方案,致力于帮助企业在多个场景中实现数据的高效管理和应用,提升业务效率和用户体验。九河…

shell(6)if条件判断与for循环结构

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…

vulfocus在线靶场:tomcat-pass-getshell 弱口令 速通手册

目录 一、启动环境,访问页面,并登录,账号密码都是tomcat 二、哥斯拉打war包,图解 三、上传war包,图解 四、访问我们直接url/木马文件名/木马文件.jsp,是否存在了 五、 哥斯拉测试连接结果success&…

DICOM核心概念:显式 VR(Explicit VR)与隐式 VR(Implicit VR)在DICOM中的定义与区别

在DICOM(Digital Imaging and Communications in Medicine)标准中,VR(Value Representation) 表示数据元素的值的类型和格式。理解显式 VR(Explicit VR)与隐式 VR(Implicit VR&#…

2、桥接模式

模式解释 百度: 这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的交流调用。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类,这两种类型的类可被结构化…

小程序-基于java+SpringBoot+Vue的开放实验室预约管理系统设计与实现

项目运行 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…

【JavaSE】【网络编程】UDP数据报套接字编程

目录 一、网络编程简介二、Socket套接字三、TCP/UDP简介3.1 有连接 vs 无连接3.2 可靠传输 vs 不可靠传输3.3 面向字节流 vs 面向数据报3.4 双向工 vs 单行工 四、UDP数据报套接字编程4.1 API介绍4.1.1 DatagramSocket类4.1.1.1 构造方法4.1.1.2 主要方法 4.1.2 DatagramPocket…

【K8S系列】Kubernetes Pod节点ImagePullBackOff 状态及解决方案详解【已解决】

在 Kubernetes 中,当某个 Pod 的容器无法从指定的镜像仓库拉取镜像时,Pod 的状态会变为 ImagePullBackOff。这通常是因为指定的镜像不存在、镜像标签错误、认证失败或网络问题等原因。 以下是关于 ImagePullBackOff 的详细分析及解决方案。 1. ImagePull…

VMware虚拟机(Ubuntu或centOS)共享宿主机网络资源

VMware虚拟机(Ubuntu或centOS)共享宿主机网络资源 由于需要在 Linux 环境下进行一些测试工作,于是决定使用 VMware 虚拟化软件来安装 Ubuntu 24.04 .1操作系统。考虑到测试过程中需要访问 Github ,要使用Docker拉去镜像等外部网络资源,因此产…

前列腺分割:基于边界加权(解决弱边界)、域自适应(少样本)

前列腺分割:基于边界加权(解决弱边界)、域自适应(少样本) 理解发现规律论文大纲观察1. 观察行为2. 变量分析3. 假设提出4. 验证过程 解法拆解 论文:Boundary-weighted Domain Adaptive Neural Network for …

鼠标绘制轮廓

需要对label进行提升&#xff0c;新建MyLabel类&#xff0c;并将其提升到label控件上&#xff0c;详见上篇控件提升 mylabelmouse.h #pragma once #include <QtWidgets/QMainWindow> #include "ui_mylabelmouse.h" #include <QMenu> #include "My…

C语言-详细讲解-冒泡排序与选择排序

1.冒泡排序 冒泡排序是一种比较简单的排序算法。它重复地走访要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是说该数列已经排序完成。这个名字的由来是因为越小&a…

MATLAB常见数学运算函数

MATLAB中含有许多有用的函数,可以随时调用。 a b s abs abs函数 a b s abs abs函数在MATLAB中可以求绝对值,也可以求复数的模长:c e i l ceil ceil函数 向正无穷四舍五入(如果有小数,就向正方向进一)f l o o r floor floor函数 向负无穷四舍五入(如果有小数,就向负方向…

SpringBoot 集成 Sharding-JDBC(一):数据分片

在深入探讨 Sharding-JDBC 之前&#xff0c;建议读者先了解数据库分库分表的基本概念和应用场景。如果您还没有阅读过相关的内容&#xff0c;可以先阅读我们之前的文章&#xff1a; 关系型数据库海量数据存储策略-CSDN博客 这篇文章将帮助您更好地理解分库分表的基本原理和实现…

go-zero(六) JWT鉴权

go-zero JWT鉴权 还记得我们之前登录功能&#xff0c;返回的信息是token吗&#xff1f; 这个token其实就是JSON Web Token简称JWT,它是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;用于在网络应用环境间安全地传递声明信息。 它是一种基于 JSON 的令牌&#xf…

ZYNQ程序固化——ZYNQ学习笔记7

一、ZYNQ启动过程 二、 SD卡启动实操 1、对ZYNQ进行配置添加Flash 2、添加SD卡 3、重新生成硬件信息 4、创建vitis工程文件 5、勾选板级支持包 6、对系统工程进行整体编译&#xff0c;生成两个Debug文件&#xff0c;如图所示。 7、插入SD卡&#xff0c;格式化为 8、考入BOOT.…

进程其他知识点

/* #include <stdlib.h> void exit(int status); #include <unistd.h> void _exit(int status); status 参数&#xff1a;是进程退出时的一个状态信息。父进程回收子进程资源的时候可以获取到。 */ #include <stdio.h> #include <stdlib.h> #include &…

Android ART知多少?

Android 虚拟机 ART&#xff08;Android Runtime&#xff09;是 Android 平台上的应用程序运行时环境&#xff0c;用于执行应用程序的字节码。ART 自 Android 5.0&#xff08;Lollipop&#xff09;开始取代了 Dalvik&#xff0c;成为 Android 的默认运行时环境。本文将从以下几…

C++ —— 剑斩旧我 破茧成蝶—C++11

江河入海&#xff0c;知识涌动&#xff0c;这是我参与江海计划的第2篇。 目录 1. C11的发展历史 2. 列表初始化 2.1 C98传统的{} 2.2 C11中的{} 2.3 C11中的std::initializer_list 3. 右值引用和移动语义 3.1 左值和右值 3.2 左值引用和右值引用 3.3 引用延长生命周期…

推荐15个2024最新精选wordpress模板

以下是推荐的15个2024年最新精选WordPress模板&#xff0c;轻量级且SEO优化良好&#xff0c;适合需要高性能网站的用户。中文wordpress模板适合搭建企业官网使用。英文wordpress模板&#xff0c;适合B2C网站搭建&#xff0c;功能强大且兼容性好&#xff0c;是许多专业外贸网站的…