Oracle(2-7)Instance and Media Recovery Structures

news2024/11/28 14:41:38

文章目录

  • 一、基础知识
    • 1、体系结构详解
    • 2、Database Files 数据库文件
    • 3、Database Other Files 其他数据文件
    • 4、Dynamic Views 动态视图
    • 5、Large Pool
    • 6、DB Buffer Cache,DBWn
    • 7、Configuring Tablespaces 配置表空间
    • 8、Redo Log Buffer, LGWR
    • 9、Database Checkpoints 数据库检查点
    • 10、Types of Checkpoints 检查点的类型
    • 11、CKPT Process CKPT进程
    • 12、Multiplexed Control Files 多路控制文件
    • 13、ARCn & Archived Log Files ARCn 和存档日志文件
    • 14、Database Synchronization 数据库同步
    • 15、Phases forInstance Recovery 实例恢复阶段
    • 16、Tuning the Duration of IR/CR 调整IR/CR的持续时间
    • 17、Backup and Recovery lssues 备份和恢复问题
    • 18、Tuning the Phases of CR/IR 调整CR/IR的相位
    • 19、Fast-Start On-Demand Rollback 快速启动按需回滚
    • 20、Fast-Start Parallel Rollback FastStart并行回滚
  • 二、基础操作
    • 1、查看数据库动态视图

在这里插入图片描述

Instance and Media Recovery Structures 实例和介质恢复结构
目标:

  • 掌握与恢复相关的Oracle进程、内存结构和文件
  • 了解检查点、重做日志文件和归档日志文件的重要性
  • 掌握优化实例恢复的方法

一、基础知识

1、体系结构详解

在这里插入图片描述

  • SGA
    • Database buffer cache:用于存储从数据文件读取的块的内存区域。数据由服务器进程读取到块中,并由DBWn异步写入。
    • Log buffer:包含要写入重做日志的更改数据的前后映像副本的内存
    • Large pool:SGA中的一个可选区域,为备份和恢复操作、I/O服务器进程以及共享服务器和 Oracle XA的会话内存提供大量内存分配。
    • Shared pool:存储SOL语句、PL/SOLprocedures和数据字典信息的解析版本
    • Java pool:在服务器内存中用于Java虚拟机(JVM)中所有特定于会话的Java代码和数据。
  • Background Processes 后台进程
    • Database writer(DBWn):将脏缓冲区从数据缓冲区缓存写入数据文件。此活动是异步的。
    • Log writer (LGWR):将数据从重做日志缓冲区写入重做日志文件
    • System monitor(SMON):执行自动实例恢复。在空间段不再使用时恢复它们。根据设置的参数合并可用空间的连续区域。
    • Process monitor(PMON):清理用于正常终止的用户进程的连接/服务器进程。执行回滚并释放失败进程所占用的资源。
    • Checkpoint(CKPT):将数据文件和控制文件的标头与当前重做日志和检查点编号同步
    • Archiver (ARCn)(optional):自动复制已标记为存档的重做日志的过程。
  • User & Server Process 用户和服务器进程
    • The User Process:用户进程是在用户启动工具(如SQL*Plus、Oracle Forms Developer、Oracle Reports Developer、Oracle Enterprise Manager等)时创建的。此进程可能位于客户端或服务器上,并为用户提供一个界面,用于输入与数据库交互的命令。
    • The Server Process:服务器进程接受来自用户进程的命令,并执行步骤来完成用户请求。如果数据库不在共享服务器配置中,则在建立有效连接时,会在包含实例的计算机上创建服务器进程。

2、Database Files 数据库文件

Oracle数据库由以下物理文件组成(这些文件的格式都是二进制的):

  • Datafiles:数据的物理存储。每个数据库至少需要一个文件。此文件存储系统表空间。
  • Redo logs:包含更改数据的前后映像副本,用于恢复目的。至少需要两组。
  • Control files:记录数据库的状态。物理结构和RMAN元数据
  • Archive logs(optional):联机重做日志文件的物理副本。当数据库设置为存档日志模式时创建。用于恢复中。

3、Database Other Files 其他数据文件

  • Initialization parameter file初始化参数文件:实例启动所需的存储参数,数据类型为TEXT
  • Server initialization parameter file服务器初始化参数文件:存储实例启动所需的持久参数,数据类型为二进制
  • Password file(optional)密码文件(可选):存储可以启动关闭并恢复数据库的用户的信息,数据类型为二进制

4、Dynamic Views 动态视图

Oracle服务器提供了许多标准视图来获取数据库和实例的信息。这些视图包括:

  • V$SGA:查询共享池、日志缓冲区、数据缓冲区的实例大小和固定的内存大小(取决于操作系统)
  • V$INSTANCE:查询实例的状态,如实例模式、实例名称、启动时间和主机名
  • V$PROCESS:查询为实例创建的后台和服务器进程
  • V$BGPROCESS:查询为实例创建的后台进程
  • V$DATABASE:列出有关数据库的状态和恢复信息。它包括关于数据库名称、唯一数据库标识符、创建日期、控制文件创建日期和时间、最后一个数据库检查点和其他信息的信息。
  • V$DATAFILE:列出数据库中包含的数据文件的位置和名称。它包括与文件编号和名称、创建日期、状态(在线或离线)、启用 (只读、读写)、最后数据文件检查点、大小和其他信息有关的信息。

5、Large Pool

  • 可配置为SGA中的单独内存区域,用于:
    • Oracle备份和恢复操作
    • I/0服务器进程
    • 共享服务器的会话内存
  • 由LARGE_POOL_SIZE参数确定大小

大池用于从共享内存中分配顺序的I/0缓冲区。对于I/0从站和甲骨文备份和恢复,RDBMS分配的缓冲区大小为几百KB。
配置大型池可以防止RMAN与其他子系统争夺相同的内存。当您将DBWR_IO_SLAWS或BACKUP_TAPE_IO_SLAWS参数设置为模拟异步10时,恢复管理器(RMAN)将使用大池进行备份和恢复。如果这两个参数都未启用,那么甲骨文将从本地进程内存而不是共享内存分配备份缓冲区。因此,不使用大池。如果设置了LARGE_POOL_SIZE,那么甲骨文将尝试从大型池中获取内存。如果这个值不够大,那么甲骨文不会尝试从共享池中获取缓冲区。如果没有设置LARGE_POOL_SIZE初始化参数,那么甲骨文服务器将尝试从SGA中的共享池中分配共享内存缓冲区。
如果甲骨文无法获得足够的内存,那么它从本地进程内存中获得1/0缓冲内存,并向alert.log文件写入一条消息,指示同步I/0用于备份。

6、DB Buffer Cache,DBWn

  • Function of the Database Buffer Cache 数据库缓冲区缓存的功能:
    • 数据库缓冲区缓存是SGA中用于存储最近使用的数据块的区域
    • 服务器进程从数据文件中读取表、索引和撤消段,并在需要时对缓冲区缓存中的数据块进行更改
    • Oracle服务器使用最近最少使用 (LRU) 算法来确定哪些缓冲区可以覆盖,以适应缓冲区缓存中的新块。
  • Function of the DBWn Background Process DBWn后台进程的功能:
    • 数据库写入程序进程(DBWn)将脏缓冲区从数据库缓冲区缓存写入数据文件。它确保数据库缓冲区缓存中有足够数量的可用缓冲区(当服务器进程需要从数据文件中读取块时,可以覆盖的缓冲区)。
    • 数据库编写器定期同步数据库缓冲区缓存和数据文件:这是在各种情况下触发的检查点事件。
    • 虽然一个数据库写入进程对于大多数系统来说已经足够了,但是如果您的系统需要大量修改数据,您可以配置其他进程(DBW1到DBW9)来提高写入性能。这些额外的数据库写入进程在单处理器系统上是没有用的。

7、Configuring Tablespaces 配置表空间

表空间包含一个或多个数据文件。重要的是要谨慎地创建表空间,以提供灵活和可管理的备份和恢复策略。以下是表空间的非典型配置,考虑到备份和恢复操作的要求:

  • System: 如果系统和用户数据包含在不同的表空间中,备份和恢复就更加灵活
  • Temporary:如果包含临时段 (用于排序等) 的表空间丢失,可以重新创建它,而不是恢复它。
  • Undo(重要):备份撤销表空间的过程与备份任何其他读/写表空间的过程完全相同。由于自动撤消表空间对于恢复和读取一致性非常重要,因此应该经常对其进行备份。
  • Read-only data: 可以减少备份时间,因为只有在将表空间设为只读时才必须备份表空间。
  • Highly volatile data高度易失性数据(重要):应该更频繁地备份该表空间,同时减少恢复时间
  • Index data: 应该创建只存储索引段的表空间。通常可以重新创建这些表空间而不是恢复它们。

8、Redo Log Buffer, LGWR

  • Function of the Redo Log Buffer 恢复日志缓冲区的功能:
    • 重做日志缓冲区是一个循环缓冲区,它保存有关对数据库所做更改的信息。这些信息存储在重做条目中。
    • 重做条目包含重建或重做INSERT、UPDATE、DELETE、CREATE、ALTER或DROPoperation对数据库所做更改所需的信息。恢复条目用于数据库恢复(如有必要)。
    • 重做条目由Oracle服务器进程从用户的内存空间复制到重做日志缓冲区。
  • Function of the LGWR Background Process LGWR后台进程的功能:
    • 日志写入器 (LGWR) 将重做条目从重做日志缓冲区写入重做日志文件,如下所示:
    • 重做日志缓冲区已满三分之一时
    • 当超时发生时(每三秒钟)
    • 当有1MB的重做
    • 在DBWn将数据库缓冲区缓存中的修改块写入数据文件之前
    • 当一个事务提交
  • Redo Log Switches
    • 在日志切换时,当前重做日志组被分配一个日志序列号,该日志序列号标识存储在该重做日志组中的信息,并且也用于同步。
    • 日志切换发生在LGWR停止写入一个重做日志组并开始写入另一个重做日志组时
    • 当LGWR填充了一个日志文件组时,将发生日志切换
    • DBA可以使用ALTER SYSTEM SWITCH LOGFILE命令强制进行日志切换
    • 在日志开关处自动发生检查点。
    • 只要组中至少有一个成员可用,处理就可以继续。如果成员损坏或不可用,消息将写入LGWR跟踪文件和警报日志。

9、Database Checkpoints 数据库检查点

  • 检查点用于确定应从何处开始恢复
  • 检查点位置-恢复开始的位置
  • 检查点队列-脏块的链接列表
  • Checkpoint Position 检查点位置
    • 重做日志中开始恢复的位置称为检查点位置。在该点之前的所有引用数据块都已被DBWn写入磁盘。它被定义为它与重做日志结束之间的“距离”。它也可以被认为是检查点队列中第一个条目的“年龄“个按块第一次被弄脏的时间顺序排列的脏块链接列表。
  • Checkpoint Queue 检查点队列
    • 检查点队列中的每个条目都包括数据块的标识符(即文件号和块号)和重做日志中第一次弄脏数据块的位置(称为重做字节地址或RBA)。它还包含重做日志中上次更改数据块的位置。检查点队列中的第一个条目标识数据库缓冲区缓存中最旧的脏块。DBWn按照检查点队列的顺序从缓冲区高速缓存写入块,并在写入块时删除每个条目。

10、Types of Checkpoints 检查点的类型

  • Full checkpoint 完全检查点
    • 写入所有脏缓冲区
    • 正常关机、立即关机或事务关机
    • 改变系统检查点
  • Incremental checkpoint (Fast-Start checkpoint) 增量检查点(快速启动检查点)
    • 周期性写入
    • 只写最老的块
  • Partial checkpoint 部分检查点
    • 属于表空间的脏缓冲区
    • 改变表空间开始备份
    • 更改表空间表空间脱机正常

11、CKPT Process CKPT进程

Checkpoint Process(CKPT)

  • 检查点进程 (CKPT) 负责在检查点向DBWn发送信号,并更新数据库的数据文件和控制文件以指示最近的检查点
  • 每隔三秒,CKPT从控制文件中检查点队列中最老的条目中记录RBA。此RBA表示重做日志中的点,在此点上,实例恢复将在实例失败后开始。它可以这样做,因为以前重做记录中表示的所有数据块都保证已被DBWn写入磁盘
  • 只有在日志切换的情况下,CKPT才会将这些信息写入数据文件的头部。为了提高性能,并不是所有的头文件都被一次写入,而是以组的形式进行更新,这被称为“懒写“日志开关不会强制将所有脏缓冲区写入磁盘

12、Multiplexed Control Files 多路控制文件

  • Control File Function 控制文件功能
    • 控制文件是描述数据库结构的二进制文件。无论何时装载或打开数据库,它都必须可由Oracle服务器进行写入。它的默认名称取决于操作系统。如果没有此文件,则无法装载数据库,并且需要恢复或重新创建控制文件。建议的配置是在不同的磁盘上至少有两个控制文件,以最大限度地减少丢失一个控制文件的影响。
  • Control File Contents 控制文件内容
    • 数据库名称
    • 数据库创建时间戳
    • 恢复所需的同步信息 (检查点和日志序列信息)
    • 数据文件和重做日志文件的名称和位置
    • 数据库的归档模式
    • 当前日志序列号
    • 恢复管理器备份元数据

13、ARCn & Archived Log Files ARCn 和存档日志文件

  • Function of the Archive Background Process 归档后台处理的功能
    • ARCn进程是一个可选进程。启用后,它会将重做日志文件归档到指定的存储区域。此过程对于设置为ARCHIVE LOG模式的数据库的备份、还原和恢复具有重要意义在这种模式下,数据库每天24小时、每周7天都在运行
    • ARCn进程在发生日志切换时启动,并将最后一个(未归档的)重做日志组的一个成员复制到由一个或多个初始化参数指定的至少一个目标。
  • Archived Log Files 归档日志文件
    • 当数据库设置为ARCHIVELOG模式时,LGWR进程会等待在线重做日志文件归档(手动或通过ARCn进程),然后才能重用它们。
    • 如果联机重做日志文件已损坏,则使用来自同一组的另一个成员。归档日志有利于备份和恢复过程,因为:
      • 数据库备份与归档重做日志文件相结合,可保证将所有提交的数据恢复到故障点
      • 可以在数据库联机时进行有效的数据库备份。
  • Archiving Considerations 归档注意事项
    • 是否启用归档的选择取决于每个数据库的可用性和可靠性要求。归档日志可以存储在多个位置(双重或多个目标),因为它们对恢复至关重要。对于生产数据库,建议将归档日志功能用于多个目的地。

14、Database Synchronization 数据库同步

  • 所有数据文件(脱机和只读除外) 必须同步才能打开数据库。
  • 同步基于当前检查点编号。
  • 应用重做日志文件中记录的更改将同步数据文件。
  • 重做日志文件是由Oracle服务器自动请求的。

15、Phases forInstance Recovery 实例恢复阶段

实例恢复的步骤:

  1. Datafiles out-of-synch 数据文件不同步(判断是否同步,是否需要恢复)
  2. Roll forward (redo) 向前回滚(redo)(利用redo进行回滚)(把redo恢复并且恢复undo)
  3. Committed and non-committed data in files 文件中已提交和未提交的数据
  4. Roll back (undo) 向后回滚(undo)(利用undo信息把没有提交的数据回滚掉)
  5. Committed data in files 文件中的提交数据 (所有数据同步,只包含已经提交的数据)
    在这里插入图片描述

16、Tuning the Duration of IR/CR 调整IR/CR的持续时间

将实例和崩溃恢复的持续时间保持在用户指定的范围内的方法:

  • 设置初始化参数以影响恢复中涉及的重做日志记录和数据块的数量。
  • 调整重做日志文件的大小以影响检查点频率
  • 发出SQL语句以启动检查点
  • 并行化实例恢复操作
  • 有几种方法可以用来将实例和崩溃恢复的持续时间保持在用户指定的范围内。
  • 快速启动故障恢复功能可用于控制实例恢复。这通过使前滚时间有界和可预测来减少前滚时间,还消除了执行回滚所需的时间。快速启动故障恢复的基础是快速启动检查点体系结构。通过初始化参数指定完成恢复的前滚阶段的目标时间。
  • 重做日志文件的大小直接影响检查点。最小日志的大小越小,Oracle越积极地将脏缓冲区写入磁盘,以确保检查点的位置已提前到当前日志在日志完全填充之前,以便可以重用。

17、Backup and Recovery lssues 备份和恢复问题

  • 保护数据库不受多种类型故障的影响
  • 增加平均故障间隔时间(MTBF)
  • 减少平均恢复时间(MTTR)
  • 以最小化数据损失
  • Initialization Parameters 初始化参数
    • FAST_START_MTTR_TARGET:以秒为单位指定的预期MTTR
  • V$INSTANCE_RECOVERY:实例恢复视图
    • 用于监视限制恢复I/0的可用机制
    • 统计从这个视图计算哪个参数对检查点的影响最大

18、Tuning the Phases of CR/IR 调整CR/IR的相位

通过调整参数进行调优

  • 调整前滚相位
  • 调整回滚阶段

Tuning the RFP:往前滚

  • 并行块恢复
  • RECOVERY_PARALLELISM指定并发恢复进程的数量

Tuning the RBP:往后滚

  • 快速启动按需回滚
  • 快速启动并行回滚

19、Fast-Start On-Demand Rollback 快速启动按需回滚

遇到要回滚的数据的服务器进程执行以下操作:

  • 回滚包含所雪行的块
  • 将进一步的恢复(可能是并行的) 移交给SMON

20、Fast-Start Parallel Rollback FastStart并行回滚

在这里插入图片描述

二、基础操作

1、查看数据库动态视图

此处对应基础知识的第4部分
连接数据库查看动态视图
在这里插入图片描述

SELECT * FROM V$SGA;

在这里插入图片描述

  • Fixed Size:是固定的大小
  • Variable Size:大小是可变的,包括了Large pool、Shared pool、Java pool等
  • Database Buffers:用于存储从数据文件读取的块的内存区域,这部分一般比较大
  • Redo Buffers:包含要写入重做日志的更改数据的前后映像副本的内存
SELECT * FROM V$SGASTAT;

在这里插入图片描述
查看其他动态视图的方法也是这样的,可以参考基础知识的第四部分查看其他动态视图

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

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

相关文章

【MySql】悲观锁和乐观锁的介绍

一、并发控制 当程序中可能出现并发的情况时,就需要保证在并发情况下数据的准确性,以此确保当前用户和其他用户一起操作时,所得到的结果和他单独操作时的结果是一样的。这就叫做并发控制。并发控制的目的是保证一个用户的工作不会对另一个用…

在Anaconda中用命令行安装环境以及安装包

一、下载Anaconda 下载地址 二、创建环境 1. 打开Anaconda命令行 2.创建环境 conda create -n 环境名称 python3.10(需要的python版本号) 3.激活环境 activate 环境名4.下载安装包 pip install 模块名 -i https://pypi.tuna.tsinghua.edu.cn/simple5.下载torch 官网&…

Cesium 关闭深度写入

没有关闭PointPrimitive的深度写入: 关闭了PointPrimitive的深度写入: if (pointPrimitiveCollection._rsOpaque) {pointPrimitiveCollection._rsOpaque Cesium.RenderState.fromCache({depthTest: {enabled: false,}});}const p pointPrimitiveCollection.add({position:…

Softing线上研讨会 I 用于现代工业物联网的OPC UA服务器聚合管理方案

| 线上研讨会时间:2023年12月4日 17:00~17:30或23:00~23:30 在工业自动化网络中有越来越多的设备通过OPC UA互操作性标准来传输数据,同时,在用户端也有越来越多的IT应用支持OPC UA。然而,为了加速OT和IT之间的融合,必…

P9242 [蓝桥杯 2023 省 B] 接龙数列(dp+最长接龙序列+分类)

1. 计算0~9为结尾的最长子串长度 2. 对于每个数字&#xff0c;比较其开头可连接子串长度1 与 原来以其末位为末尾的子串长度 3. 更新以其末位为末尾的子串长度 #include<iostream> #include<string.h>using namespace std;// 相当于记录…

苹果手机怎么卸载微信?记得掌握这两种方法!

微信是一款社交应用程序&#xff0c;在聊天过程中&#xff0c;我们会经常发送和接收各种形式的信息。随着时间的推移&#xff0c;微信缓存的文件会越来越多&#xff0c;占用的存储空间也会逐渐增加。 卸载微信可以释放手机内存&#xff0c;提高手机的运行速度。那么&#xff0…

阿里云服务器2核2G3M配置购买和续费同享99元1年,最后2天赶紧囤货

经济型e实例2核2G 3M固定带宽 40G ESSD Entry云盘&#xff0c;价格为99元1年&#xff0c;这款云服务器是阿里云在11月份推出的特价云服务器&#xff0c;不管是用户还是老用户&#xff0c;都觉得这个价格确实非常划算&#xff0c;但是有的用户觉得现在暂时没有使用云服务器的需求…

WebGL的项目类型

WebGL 是一种用于在 Web 浏览器中渲染交互式 3D 和 2D 图形的技术&#xff0c;它可以用于开发各种类型的应用。以下是一些常见的应用类型和它们各自的特点&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作…

如果说营销是一门科学

2023年11月28日 全天温度20&#xff5e;25度 适宜 昨天&#xff0c;有在听一本书&#xff0c;郑毓煌的《科学营销》。有这么一句话&#xff0c;重要的不是看完一本书后记住书中的多少知识点&#xff0c;而是能用自己理解的方式还能讲出多少。 我想这本书让我离开了一天还能记…

webpack如何处理css

一、准备工作 新建目录 添加样式 .word {color: red; } index.js添加dom元素&#xff0c;添加一个css word import ./css/index.css;const div document.createElement("div"); div.innerText "hello word!!!"; div.className "word"; do…

Linux—进程状态

目录 一.前言 1.1.通过系统调用获取进程标示符 1.2.通过系统调用创建进程 二.进程状态 三.Z(zombie)-僵尸进程 四.僵尸进程危害 一.前言 学习进程的状态&#xff0c;我们首先了解一下进程的基本数据 1.1.通过系统调用获取进程标示符 由getpid&#xff08;&#xff09…

Cesium 添加一个立方体实体。

Cesium 添加一个立方体实体 初始化地球 viewer new Cesium.Viewer(content, {terrainProvider: Cesium.createWorldTerrain({requestVertexNormals: true,requestWaterMask: true})})添加一个立方体 const redBox viewer.entities.add({name: 一个红色的正方形,position: …

时间序列分析【python代码实现】

时间序列分析是一种用于建模和分析时间上连续观测的统计方法。 它涉及研究数据在时间维度上的模式、趋势和周期性。常见的时间序列分析包括时间序列的平稳性检验、自相关性和部分自相关性分析、时间序列模型的建立和预测等。 下面是一个使用Python实现时间序列分析的示例&…

河北中洺科技-数据标注是怎样工作的?

由于人工智能系统的普及&#xff0c;各种智能场景在生活中变得普遍。然而&#xff0c;在这些极大方便我们生活的智能背后&#xff0c;数据标注似乎从未被人们所重视。数据标注是怎样的工作&#xff1f;为什么被称为人工智能训练师&#xff1f; 要想了解这些问题&#xff0c;我…

Spark---SparkCore(四)

三、Spark Master HA 1、Master的高可用原理 Standalone集群只有一个Master&#xff0c;如果Master挂了就无法提交应用程序&#xff0c;需要给Master进行高可用配置&#xff0c;Master的高可用可以使用fileSystem(文件系统)和zookeeper&#xff08;分布式协调服务&#xff09…

前端入门(四)Ajax、Promise异步、Axios通信、vue-router路由

文章目录 AjaxAjax特点 Promise 异步编程&#xff08;缺&#xff09;Promise基本使用状态 - PromiseState结果 - PromiseResult Axios基本使用 Vue路由 - vue-router单页面Web应用&#xff08;single page web application&#xff0c;SPA&#xff09;vue-router基本使用路由使…

一文例说嵌入式 C 程序的内聚和耦合

1 - 原理篇 低耦合&#xff0c;是指模块之间尽可能的使其独立存在&#xff0c;模块之间不产生联系不可能&#xff0c;但模块与模块之间的接口应该尽量少而简单。这样&#xff0c;高内聚从整个程序中每一个模块的内部特征角度&#xff0c;低耦合从程序中各个模块之间的关联关系…

从0开始学习JavaScript--JavaScript 闭包的应用

JavaScript的高级概念中&#xff0c;闭包&#xff08;closure&#xff09;常常是一个让人感到困惑但又强大的概念。在这篇文章中&#xff0c;将深入探讨闭包的概念以及它在JavaScript中的各种应用场景。 什么是闭包&#xff1f; 在JavaScript中&#xff0c;闭包是指一个函数能…

图表控件LightningChart .NET中文教程 - 如何创建WPF 2D热图?(二)

LightningChart.NET完全由GPU加速&#xff0c;并且性能经过优化&#xff0c;可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D&#xff0c;高级3D&#xff0c;Polar&#xff0c;Smith&#xff0c;3D饼/甜甜圈&#xff0c;地理地图和GIS图表以及适用于科学…

pygame光标

文章目录 系统内置光标自定义光标 系统内置光标 pygame.mouse中&#xff0c;通过get_cursor和set_cursor来获取和设置光标状态。 pygame中封装了如下常量&#xff0c;表示不同的光标形态 值常量说明0pygame.SYSTEM_CURSOR_ARROW箭头1pygame.SYSTEM_CURSOR_IBEAM插入光标2pyg…