Oracle 11g R2 RAC 到单实例 Data Guard 搭建(RMAN备份方式)

一、配置方案

环境说明

角色主库主库备库
主机名rac01rac02racdg
公网IP10.10.10.14110.10.10.14310.10.10.191
VIP10.10.10.14210.10.10.144-
SCAN10.10.10.14010.10.10.140-
INSTANCE_NAMEorcl1orcl2orcl
DB_NAMEorclorclorcl
SERVICE_NAMEorclorclorcl
DB_UNIQUE_NAMEorclorclorcldg
存储模式ASMASM文件系统

文件系统规划

主库备库
+DATADG/orcl/datafile/oradata/datafile
+DATADG/orcl/tempfile/oradata/tempfile
+ARCDG/orcl/onlinelog, +DATADG/orcl/onlinelog/oradata/onlinelog
+ARCDG//oradata/arch

操作步骤

1. 主库上设置 Force Logging 模式

查看数据库的模式:

SQL> select LOG_MODE, OPEN_MODE, PROTECTION_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, GUARD_STATUS, FORCE_LOGGING from v$database;

在主库上开启强制日志模式:

SQL> alter database force logging;SQL> select force_logging from v$database; 
FOR
---
YES
--如果没有开始归档模式需要开启归档模式
srvctl stop database -d orcl -o immediate
srvctl start instance -d orcl -i orcl1 -o mount
alter database archivelog;
alter database open;
srvctl start instance -d orcl -i orcl2
2. RMAN备份主库

在rac节点上执行 RMAN 备份:

$rman target /
RMAN> run {allocate channel c1 type disk;allocate channel c2 type disk;backup as compressed backupset database format='/oracle/backup/%T_%d_%s_%p.bak';sql 'alter system archive log current';backup archivelog all format '/oradata/backup/arch_%d_%T_%s_%p.bak';backup format='/oracle/backup/%T_%d_%s_%p.ctl' current controlfile;release channel c1;release channel c2;
}

传递备份至备库:

$ scp /oracle/backup/20210418* oracle@10.10.10.191:/oradata/backup
3. 主库上监听和 TNS 配置

配置主库监听:对于 RAC 环境在grid用户下的$GRID_HOME/network/admin/listener.ora

su - grid
$cd $GRID_HOME/network/admin/
$vi listener.ora

示例配置:

##节点 1
[grid@rac01 admin]$ cat listener.oralistener.ora Network Configuration File:
/u01/app/11.2.0/grid/network/admin/listener.ora  Generated by Oracle
configuration tools.ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1 = ONSID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = orcl)(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)(SID_NAME = orcl1)))LISTENER =(DESCRIPTION =(ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER)))ADR_BASE_LISTENER = /u01/app/gridENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER = ONLISTENER_SCAN1 =(DESCRIPTION =(ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER_SCAN1)))ADR_BASE_LISTENER_SCAN1 = /u01/app/grid##节点 2,对应修改即可。
[grid@rac02 admin]$ cat listener.oralistener.ora Network Configuration File: /u01/app/11.2.0/grid/network/admin/listener.oraGenerated by Oracle configuration tools.ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1 = ONSID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = orcl)(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)(SID_NAME = orcl2)))LISTENER =(DESCRIPTION =(ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER)))ADR_BASE_LISTENER = /u01/app/gridENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER = ONLISTENER_SCAN1 =(DESCRIPTION =(ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER_SCAN1)))ADR_BASE_LISTENER_SCAN1 = /u01/app/grid-- 这里写的 Oracle 用户的 ORACLE_HOME,否则连接时会报错:ORA-01031: insufficient privileges

注意在 Oracle 11gR2 的 RAC 环境下,监听是在 grid 用户下配置的。所以这里可以用 grid 用户连接,并修改。 最后重新加载监听。

将备库的 TNS 添加到主库两节点的 tnsnames.ora 中:

$cd $ORACLE_HOME/network/admin
$vi tnsnames.ora

示例配置:

ORCL =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.141)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.143)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = orcl)))ORCLDG =
(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.191)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl))
)
4. 主库上修改参数

在节点一和节点二上设置以下参数:

SQL> alter system set fal_server='orcldg';
SQL> alter system set fal_client='orcl1' scope=both sid='orcl1'; --不打算使用FSFO功能可以不配
SQL> alter system set fal_client='orcl2' scope=both sid='orcl2'; --不打算使用FSFO功能可以不配
SQL> alter system set log_archive_config='DG_CONFIG=(orcl,orcldg)' scope=both sid='*';
SQL> alter system set log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(all_logfiles,all_roles) db_unique_name=orcl' scope=both sid='*';
SQL> alter system set log_archive_dest_2='SERVICE=orcldg lgwr ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcldg' scope=both;
SQL> alter system set log_archive_max_processes=10 scope=both;
SQL> alter system set db_file_name_convert='/oradata/datafile', '+DATADG/orcl/datafile', 'oradata/tempfile', '+DATADG/orcl/tempfile' scope=spfile;
SQL> alter system set log_file_name_convert='/oradata/onlinelog','+ARCDG/orcl/onlinelog','/oradata/onlinelog','+DATADG/orcl/onlinelog' scope=spfile;
SQL> alter system set standby_file_management='AUTO' scope=both;
SQL> alter system set log_archive_dest_state_1='enable';
SQL> alter system set log_archive_dest_state_2='enable';
SQL> alter system set remote_login_passwordfile='EXCLUSIVE' scope=spfile;
5. 备库存储和文件系统创建

在备库上新建各个数据文件的存放位置:

$ mkdir -p /oradata/datafile      # 数据文件
$ mkdir -p /oradata/tempfile      # 临时文件
$ mkdir -p /oradata/onlinelog     # redo 日志
$ mkdir -p /oradata/controlfile   # 控制文件
$ mkdir -p /oradata/arch          # 归档文件

手动建立以下目录,保持与主库目录一致:

$ cd $ORACLE_BASE
$ mkdir -p /u01/app/oracle/oradata/orcl
$ mkdir -p /u01/app/oracle/admin/orcl/adump
$ mkdir -p /u01/app/oracle/fast_recovery_area
6. 口令文件复制

将主库的口令文件复制到备库相同目录下,并改名为 orapworcldg

$ scp /oracle/app/oracle/db/dbs/orapworcl oracle@10.10.10.191:/u01/app/oracle/product/11.2.0/db_1/dbs
$ mv orapworcl orapworcldg
7. 创建和修改备库 pfile 参数文件

在主库上生成 pfile:

SQL> create pfile from spfile;

传递至备库并重命名:

$ cd $ORACLE_HOME/dbs
$ scp initorcl.ora oracle@10.10.10.191: /u01/app/oracle/product/11.2.0/db_1/dbs
$ vi initorcldg.ora

修改相关参数:

*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/oradata/controlfile/control01.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name=orcl
*.db_unique_name=orcldg
*.service_names=orcl
*.db_recovery_file_dest_size=209715200000
*.open_cursors=300
*.pga_aggregate_target=70061654016
*.processes=1500
*.sessions=1655
*.sga_target=38386270208
*.log_archive_format='%t_%s_%r.arc'
*.db_recovery_file_dest='/oradata/arch'
*.db_file_name_convert='+DATADG/orcl/datafile','/oradata/datafile','+DATADG/orcl/tempfile','/oradata/tempfile'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl, orcldg)'
*.LOG_ARCHIVE_DEST_1='LOCATION=/oradata/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcldg'
*.LOG_ARCHIVE_DEST_2='SERVICE=orcl LGWR ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl'
*.log_file_name_convert='+ARCDG/orcl/onlinelog','/oradata/onlinelog','+DATADG/orcl/onlinelog','/oradata/onlinelog'
*.remote_login_passwordfile='exclusive'
*.standby_file_management=auto
*.diagnostic_dest='/u01/app/oracle'
*.fal_server='orcl1','orcl2'
*.fal_client='orcldg'

启动备库并创建 SPFILE:

SQL> startup pfile='/u01/app/oracle/product/11.2.0/db_1/dbs/initorcldg.ora' nomount;
SQL> create spfile from pfile;
SQL> shutdown immediate;
8. 备库上监听和 TNS 配置

配置监听器:

$cd $ORACLE_HOME/network/admin
$vi listener.ora

示例配置:

LISTENER =
(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.191)(PORT = 1521)))
)SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = orcl)(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)(SID_NAME = orcl)))ADR_BASE_LISTENER = /u01/app/oracle

配置 TNS:

$vi tnsnames.ora

示例配置:

ORCL =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.141)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.143)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = orcl)))ORCLDG =
(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.191)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl))
)

开启监听:

$ lsnrctl start

检查监听和 TNS:

$ tnsping orcldg
$ tnsping orcl
9. RMAN恢复备库

恢复控制文件并注册备份集:

-- 备库启动到nomount
SQL> startup nomount;
-- 进入rman恢复控制文件,并注册备份集
rman target /
RMAN> restore standby controlfile from '/oradata/backup/20210418_ORCL_4020_1.ctl';
RMAN> alter database mount;
RMAN> CATALOG START WITH '/oradata/backup/';
RMAN> CROSSCHECK BACKUP;

恢复数据库:

示例:批量重命名数据文件和临时文件

-- 生成重命名数据文件的 RMAN命令
SELECT 'set newname for datafile ' || t.file_id || ' to ''' || '/oradata/datafile/' || SUBSTR(t.file_name, INSTR(t.file_name, '/', -1) + 1) || '''; '
FROM dba_data_files t;-- 生成重命名临时文件的 RMAN命令
SELECT 'set newname for tempfile ' || t.file_id || ' to ''' || '/oradata/datafile/' || SUBSTR(t.file_name, INSTR(t.file_name, '/', -1) + 1) || '''; '
FROM dba_temp_files t;-- 生成重命名日志文件的 SQL 语句(如果需要)
SELECT 'ALTER DATABASE RENAME FILE ''' || a.MEMBER || ''' TO ''' || '/oradata/onlinelog/' || SUBSTR(a.MEMBER, INSTR(a.MEMBER, '/', -1) + 1) || ''';'
FROM v$logfile a;

执行恢复:

RMAN> run {set newname for datafile 1 to '/oradata/datafile/system01.dbf';set newname for datafile 2 to '/oradata/datafile/sysaux01.dbf';set newname for datafile 3 to '/oradata/datafile/undotbs01.dbf';set newname for datafile 4 to '/oradata/datafile/undotbs02.dbf';set newname for datafile 5 to '/oradata/datafile/users01.dbf';set newname for datafile 6 to '/oradata/datafile/test01.dbf';set newname for tempfile 1 to '/oradata/tempfile/temp01.dbf';restore database;switch datafile all;switch tempfile all;
}recover database;

如果恢复中有差异可以从主库中复制归档日志到备库并注册:

$su – grid
$asmcmd
ASMCMD> cp +ARCDG/orcl/AR*/2021_04_18/thread_* /oracle/backup
$scp /oracle/backup/thread_* oracle@10.10.10.191:/oradata/arch

注册归档日志并恢复数据库:

SQL> alter database register logfile '/oradata/arch/thread_2_seq_3741.2001.973785643';
...
SQL> recover managed standby database disconnect from session;
SQL> recover managed standby database cancel;
10. 在主库中建立 Standby Logfile

RAC 每个 Redo Thread 都需要创建对应的 Standby Redo Log。 创建原则和单实例一样,包括日志文件大小相等,日志组数量要多 1 组。

-- 主库查询日志文件大小及路径
SQL> set lines 120
SQL> col member for a50
SQL> select a.thread#,
a.group#,a.bytes/1024/1024 size(MB),b.member 
from v$log a,v$logfile b where a.group#=b.group#;

在rac节点一或节点二上执行:

SQL> alter database add standby logfile thread 1 group 11('+ARCDG', '+DATADG') size 512M;
SQL> alter database add standby logfile thread 1 group 12('+ARCDG', '+DATADG') size 512M;
SQL> alter database add standby logfile thread 1 group 13('+ARCDG', '+DATADG') size 512M;
SQL> alter database add standby logfile thread 1 group 14('+ARCDG', '+DATADG') size 512M;
SQL> alter database add standby logfile thread 1 group 15('+ARCDG', '+DATADG') size 512M;
...
SQL> alter database add standby logfile thread 2 group 16('+ARCDG', '+DATADG') size 512M;
SQL> alter database add standby logfile thread 2 group 17('+ARCDG', '+DATADG') size 512M;
SQL> alter database add standby logfile thread 2 group 18('+ARCDG', '+DATADG') size 512M;
SQL> alter database add standby logfile thread 2 group 19('+ARCDG', '+DATADG') size 512M;
SQL> alter database add standby logfile thread 2 group 20('+ARCDG', '+DATADG') size 512M;
...
11. 在备库中建立 Standby Logfile
alter database add standby logfile group 11 ('/oradata/onlinelog/standby_redo11a.dbf', '/oradata/onlinelog/standby_redo11b.dbf') size 512m;
alter database add standby logfile group 12 ('/oradata/onlinelog/standby_redo12a.dbf', '/oradata/onlinelog/standby_redo12b.dbf') size 512m;
alter database add standby logfile group 13 ('/oradata/onlinelog/standby_redo13a.dbf', '/oradata/onlinelog/standby_redo13b.dbf') size 512m;
alter database add standby logfile group 14 ('/oradata/onlinelog/standby_redo14a.dbf', '/oradata/onlinelog/standby_redo14b.dbf') size 512m;
alter database add standby logfile group 15 ('/oradata/onlinelog/standby_redo15a.dbf', '/oradata/onlinelog/standby_redo15b.dbf') size 512m;
...
12. 备库打开数据库并实时应用 Redo
SQL> alter database open;
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLYSQL> alter database recover managed standby database using current logfile disconnect from session;

二、完成后验证

主库检查

SQL> select thread#, sequence#, status from v$log;
SQL> select process, sequence#, status from v$managed_standby;

备库检查

SQL> SELECT PROCESS, THREAD#, SEQUENCE#, STATUS FROM V$MANAGED_STANDBY;
SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;

验证同步

-- rac节点1 执行
SQL> create table test1 as select * from dba_users;
Table created.SQL> alter system switch logfile;
System altered.-- 节点2 执行
SQL> create table test2 as select * from dba_users;
Table created.SQL> alter system switch logfile;
System altered.-- 备库查询
SQL> select count(*) from test1;COUNT(*)
----------31SQL> select count(*) from test2; COUNT(*)
----------31SQL> select THREAD#,sequence#,applied from v$archived_log order by 1,2;THREAD#  SEQUENCE# APPLIED
---------- ---------- ---------1	   72 NO1	   73 YES1	   74 YES2	   56 YES2	   57 NO

三、问题汇总

3.1 备库未打补丁处理

  • 传递与主库一致的补丁。
  • 关闭所有 Oracle 相关进程。
  • 应用补丁。

3.2 Temp 文件错误处理

  • 恢复时 set newname 路径错误。
  • 将 tempfile 下线并新建正确路径的 tempfile。
  • 删除错误的 tempfile。

3.3 归档删除脚本部署

  • 创建归档删除脚本并定期自动删除归档文件。

总结

至此,Oracle RAC集群到单机的dataguard搭建完成。

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

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

相关文章

[2024年3月10日]第15届蓝桥杯青少组stema选拔赛C++中高级(第二子卷、编程题(2))

方法一&#xff08;string&#xff09;&#xff1a; #include <iostream> #include <string> using namespace std;// 检查是否为回文数 bool isPalindrome(int n) {string str to_string(n);int left 0, right str.size() - 1;while (left < right) {if (s…

Spring MVC练习(前后端分离开发实例)

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f439;今日诗词:二十五弦弹夜月&#xff0c;不胜清怨却飞来&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&#x1f64f; ⛳️点赞 ☀️收藏⭐️关注&#x1f4…

【ArcGIS Pro实操第11期】经纬度数据转化成平面坐标数据

经纬度数据转化成平面坐标数据 数据准备ArcGIS操作步骤-投影转换为 Sinusoidal1 投影2 计算几何Python 示例 另&#xff1a;Sinusoidal (World) 和 Sinusoidal (Sphere) 的主要区别参考 数据准备 数据投影&#xff1a; 目标投影&#xff1a;与MODIS数据相同&#xff08;Sinu…

丹摩|丹摩智算平台使用教学指南

本指南旨在为新用户提供一个详细的操作步骤和实用的入门指导&#xff0c;帮助大家快速上手丹摩智算平台。 一、平台简介 丹摩智算平台是一款强大的数据分析和计算平台&#xff0c;支持多种编程语言&#xff0c;提供丰富的数据处理和机器学习工具。无论您是数据分析师、开发者…

LLAVA论文简记

LLAVA 1. 研究动机 近年来&#xff0c;随着大语言模型&#xff08;LLM&#xff09;的发展&#xff0c;因此想向着多模态方向扩展。多模态任务&#xff08;例如图像分类、检测、生成等&#xff09;往往需要结合视觉和语言信息&#xff0c;传统的视觉模型在处理这些任务时通常将…

【嵌入式——QT】QT制作安装包

第一步 QT程序写好之后&#xff0c;编译release版本 第二步 拿到release生成的.exe文件 第三步 新建文件夹deploy 第四步 将.exe文件复制到deploy目录下 第五步 在该目录下输入cmd指令&#xff0c;回车 第六步 在打开的命令窗口下输入 windeployqt TegNetCom_1.0.…

YOLOv8模型pytorch格式转为onnx格式

一、YOLOv8的Pytorch网络结构 model DetectionModel((model): Sequential((0): Conv((conv): Conv2d(3, 64, kernel_size(3, 3), stride(2, 2), padding(1, 1))(act): SiLU(inplaceTrue))(1): Conv((conv): Conv2d(64, 128, kernel_size(3, 3), stride(2, 2), padding(1, 1))(a…

分布式储能监控系统为储能电站高效运维与精细化管理赋能

1、引言 随着全球对可持续发展和环境保护意识的增强&#xff0c;能源结构正在经历深刻的转型。传统化石能源因其不可再生性和环境污染问题而逐渐受到限制&#xff0c;而可再生能源如太阳能、风能等因其清洁、可持续的特性而受到广泛关注和推广。这一转型推动了储能技术的快速发…

课题组自主发展了哪些CMAQ模式预报相关的改进技术?

空气污染问题日益受到各级政府以及社会公众的高度重视&#xff0c;从实时的数据监测公布到空气质量数值预报及预报产品的发布&#xff0c;我国在空气质量监测和预报方面取得了一定进展。随着计算机技术的高速发展、空气污染监测手段的提高和人们对大气物理化学过程认识的深入&a…

Avalonia11中读取外部配置文件

背景&#xff1a; 在使用Avalonia开发的过程中需要使用Http请求Api&#xff0c;把Api的BaseUrl appKey等信息写在了代码中&#xff0c;当Api提供发生变化时&#xff0c;需要重新打包客户端程序&#xff0c;于是想着把此部分信息从代码中剥离出来。 需求&#xff1a; 请求服务…

解析客服知识库搭建的五个必要性

在当今竞争激烈的商业环境中&#xff0c;客服知识库的搭建已成为企业提升服务质量、优化客户体验的重要手段。一个完善的客服知识库不仅能帮助企业高效管理客户服务流程&#xff0c;还能显著提升客户满意度和忠诚度。以下是搭建客服知识库的五个必要性&#xff1a; 1. 提升服务…

Springboot 修改post请求接口入参或重新赋值

前言 很久之前写过一篇就是自动填充接口参数的&#xff0c;利用的 HandlerMethodArgumentResolver 自定义注解 Springboot Controller接口默认自动填充 业务实体参数值_springboot设置入参默认值-CSDN博客 现在这一篇也差不多&#xff0c;达到的目的就是重新去给post请求的参数…

如何创建一个Next.js项目(超简单)

1、安装Node.js&#xff08;官网Node.js下载也行&#xff0c;但Windows更加推荐nvm工具&#xff09; 2、运行node -v和npm -v两条命令&#xff08;检验是否下载成功Node.js&#xff09; 3、npx create-next-applatest&#xff08;使用 启动一个新的 Next.js 应用 create-next…

2024农历年余下的数模比赛名单已出炉!

数学建模比赛季又来了&#xff01;作为一名资深的数学建模辅导老师&#xff0c;我想对你们说&#xff1a;这不仅是挑战智商的时候&#xff0c;也是展现团队合作力、数据分析能力和逻辑思维的最佳舞台&#xff01;&#x1f4a1; 如果你是建模新手&#xff0c;或者想让自己的比赛…

Spring Cloud 程序读取 nacos 中的配置信息

本文主要介绍如何用 Spring Cloud 程序读取 nacos 中的配置信息 文章目录 一、启动nacos二、在nacos中添加配置项二、order-service项目读取配置项1. 项目的pom.xml 文件2. bootstrap.yml 配置文件&#xff0c;配置nacos3. Controller方法中读取nacos配置4. URL调用接口&#x…

在鸿蒙应用中 Debug 对开发者的帮助

文章目录 摘要引言Debug 的意义与挑战案例&#xff1a;页面渲染性能优化中的 Bug 排查Debug 过程详解问题定位问题解决优化布局与渲染逻辑 代码详细讲解示例代码详细讲解1. 导入必要模块2. 数据生成3. 使用虚拟列表组件items 属性itemHeight 属性renderItem 属性 4. 返回完整组…

SpringBoot小知识(3):热部署知识

一、热部署 热部署是一个非常消耗内存的机制&#xff0c;在实际大型项目开发中几乎用不到&#xff0c;只有小型项目或者分模块或者不停机更新的时候才会用到&#xff0c;仁者见仁智者见智。 1.1 什么是热部署&#xff1f; 热部署是指在不停止应用程序或服务器的情况下&#xf…

【ArcGIS Pro】实现一下完美的坐标点标注

在CAD里利用湘源可以很快点出一个完美的坐标点标注。 但是在ArcGIS Pro中要实现这个效果却并不容易。 虽然有点标题党&#xff0c;这里就尽量在ArcGIS Pro中实现一下。 01 标注实现方法 首先是准备工作&#xff0c;准备一个点要素图层&#xff0c;包含xy坐标字段。 在地图框…

.net XSSFWorkbook 读取/写入 指定单元格的内容

方法如下&#xff1a; using NPOI.SS.Formula.Functions;using NPOI.SS.UserModel;using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;using OfficeOpenXml.FormulaParsing.Excel.Functions.Numeric;/// <summary>/// 读取Excel指定单元格内容/// </summa…

【Redis】Redis介绍

目录 1.Redis是什么? 2. Redis特性 2.1 速度快 2.2 基于键值对的数据结构服务器 2.3 丰富的功能 2.4 简单稳定 2.5 客户端语言多 2.6 持久化 2.7 主从复制 2.8 高可用和分布式 3. Redis使用场景 3.1 缓存(Cache) 3.2 排行榜系统 3.3 计数器应用 3.4 社交网络 …