【Oracle篇】rman时间点异机恢复:从RAC环境到单机测试环境的转移(第六篇,总共八篇)

💫《博主介绍》:✨又是一天没白过,我是奈斯,DBA一名✨

💫《擅长领域》:✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌️

💖💖💖大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注💖💖💖

    今天是端午假期后的第一天,拖着疲惫的身体,开始了新的一周工作。博主在端午期间去了天津,吹了天津的海风,吃了大众推荐的top1饭馆,游览了天津方特世界,确实不虚此行。不知道各位小伙伴都去哪里潇洒了,有没有玩的开心,即使不开心也要收收心,开始新的一周工作。那么今天作为oracle rman的第六篇,也是非常重要的一篇,所以各位该玩玩,该学习就要学习,那么让我们开始今天的内容——rman时间点异机恢复:从单机环境到单机测试环境的转移。 

   在第四、五篇文章中主要是介绍了rman全库异机恢复,也就是说恢复的数据文件和归档备份片都是最后备份的时间点的, 如果在实例上drop了一张表、delete数据,或者truncate清空了整张表,这时需要通过rman的备份恢复出来的话,就不能使用最新的数据文件和归档备份片了 ,那么就只能使用drop、delete、truncate之前的数据文件和归档的备份片。

PS小提士💥:

    数据被误drop、delete、truncate的话,通过RMAN定点(时间点)恢复只是其中的一个办法。rman作为物理工具,需要将误操作的恢复的话,只能是将rman的备份片全部异机恢复出来之后,然后再通过数据泵的方式导入到生产环境中,所以对于误drop、delete、truncate的话建议rman作为最后的恢复手段,首先先通过其他的方式先恢复出来,毕竟是需要快速的将数据恢复出来,所以那种时间最短就选那种喽,下面列出了对于误drop、delete、truncate操作后有哪些恢复方式,小伙伴可以自行参考哦💨,也列出了对应恢复方式的我的博客跳转地址。  

分类

drop

Truncate

Delete

是否删除表结构

删除表结构及其表上的约束,且依赖于该表的存储过程和函数等将变为INVALID 状态

只删除数据。不删除表的定义、约束、触发器和索引

SQL 命令类型

DDL 语句,隐式提交,不能对TRUNCATE 和

DROP 使用ROLLBACK 命令(不可回滚)

DML 语句,事务提交(COMMIT)之后才生效,可以使用ROLLBACK 语句撤销未提交的事务(可回滚)

删除的数据是否放入回滚(ROLLBACK SEGMENT)

高水位是否下降

日志的产生

少量(ddl语句操作的信息,数据不产生undo日志)

少量(ddl语句操作的信息,数据不产生undo日志)

大量undo日志

是否可以对视图进行操作

级联删除

不能drop一个带有enable外键的表

不能truncate一个带有enable外键的表,会报错ora-02266

可以delete一个带有enable外键的表

执行速度

DROP>TRUNCATE>DELETE

DROP和TRUNCATE是在底层修改了数据字典,所以无论是大表还是小表执行都非常快

而DELETE 是需要读取数据到Undo,所以对于大表进行DELETE全表操作将会非常慢

安全性

DROP 和TRUNCATE 在无备份的情况下需谨慎

使用方面

想删除部分数据行只能用DELETE 且带上WHERE 子句;想删除表数据及其结构则使用DROP;想保留表结构而将所有数据删除则使用TRUNCATE

恢复方法

闪回数据库

闪回drop(回收站)

RMAN备份

DUL工具等

闪回数据库

RMAN备份

DUL工具等

闪回数据库

闪回查询

闪回表

LogMiner日志挖掘

RMAN备份

DUL工具等

             

恢复方法博客跳转地址:

1. 《LogMiner日志挖掘》直通车👉Oracle篇—logminer日志挖掘恢复误操作数据_oracle 日志挖掘-CSDN博客👈

2. 《flashback闪回(包括了闪回数据库、闪回drop、闪回查询、闪回表、闪回归档五大功能)》,关于flashback闪回,博主目前还没有写哦😯,先记录到这里,等不久写了之后,就会在这里完善啦

3. 《RMAN备份》,那么不用再跳转了,就是这篇文章了😁

    在企业的数据库运维过程中,备份和恢复是密不可分的两个环节。备份提供了数据安全的保障,而恢复则是确保在数据丢失或系统崩溃时能够迅速恢复业务运行的关键。特别是rman时间点异机恢复的过程中,恢复流程的正确性和高效性更是至关重要。

    本文将详细介绍 如何使用RMAN定点(时间点)恢复从RAC环境的备份片中恢复数据到单机环境 。我们将从恢复前的准备工作讲起,涵盖恢复步骤的每一个环节,包括恢复控制文件、数据文件、参数文件、归档等关键组件。同时,我们还将讨论在恢复过程中可能遇到的问题和解决方案,以确保整个恢复过程的顺利进行。

    然而,RMAN所涉及的内容之广、之深,使得难以在单篇文章中全面涵盖。所以我将理论、命令、备份策略、异机恢复、坏块处理等分成八篇文章去讲,即使分为八篇也有不少内容没有涵盖到,所以这八篇文章都是精华,看完这八篇就可以解决95%以上的RMAN相关工作内容了。八篇文章的内容分别如下:

  • 第一篇:rman物理备份工具的基础理论概述
  • 第二篇:rman工具实用指南:常用命令详解与实践
  • 第三篇:rman标准化全库备份策略:完整备份or增量备份
  • 第四篇:rman全库异机恢复:从RAC环境到单机测试环境的转移
  • 第五篇:rman全库异机恢复:从单机环境到RAC测试环境的转移
  • 第六篇:rman时间点异机恢复:从RAC环境到单机测试环境的转移(当前篇)
  • 第七篇:Oracle数据库物理坏块处理:rman修复坏块实践与案例分析
  • 第八篇:逻辑备份工具expdp(exp)/impdp(imp)和物理备份工具rman的区别和各自的使用场景总汇

                         

恢复所使用的rman备份片:

 在上篇文章中, 我们都知道了rman有完整备份or增量备份,所以通过那种备份都可以实现全库的异机恢复 ,但是我的建议使用rman完整备份+归档备份即可 ,而不建议使用rman基本增量备份+rman差异增量备份+归档备份(为什么使用完整备份可以参考上篇文章的原因哦,我有详细介绍,直通车👉【Oracle篇】rman标准化全库备份策略:完整备份or增量备份(第三篇,总共八篇)_rman增量备份-CSDN博客👈),所以这篇文章所使用的rman备份片为rman完整备份+归档备份。

           

So without further ado, let's start today's recovery!!!💫

                 

两个不同的时间进行全库备份。包括数据文件、控制文件、参数文件、归档。备份策略参考👉【Oracle篇】rman标准化全库备份策略:完整备份or增量备份(第三篇,总共八篇)_rman增量备份-CSDN博客👈

17点00分

[oracle@rac1 full]$ sqlplus user/123456
SQL> create table ceshi (id number);
SQL> insert into ceshi values (1);
SQL> commit;

17点20分 

[oracle@rac1 full]$ sqlplus user/123456
SQL> drop table ceshi;


              

               

RAC源机:

一、恢复删除表之前的数据库。oracle在recover时只能设置时间向前恢复,不能向后恢复,在恢复删除表之前的数据库需要用到有这个表数据的备份片,因为在恢复文件时,oracle会根据控制文件就近恢复记录在内的所有数据文件,如果备份片之间有数据文件差异并且需要在特定时间点恢复时就要特别注意需不需要新加的数据文件,和删除表之前和之后是一个道理,所以需要1679、1680、1681、1682数据文件,1683控制文件,1684参数文件,1685、1686、1687归档。

      

二、通过nfs或者scp到目标FS数据库。源库和异机的备份片的路径要一致,不然报找不到备份片。如果路径不一致可以通过catalog将未识别的RMAN备份集注册到控制文件:

scp拷贝到FS异机的/backup/full目录下:

           

          

FS异机:

一、FS已经安装好了一套单机,与源库实例名可以保持一致,也可以不一致。进行还原文件。

(1)定义一个空实例的SID名,启动到nomount状态

注意:db_unique_name、service_names、instance_name不会涉及在控制文件里,但db_name会涉及到控制文件和数据文件头部中。所以db_name进行异机迁移,不管迁移到FS还是迁移到rac环境,db_name是不能变的。想要变动db_name就只能通过expdp这种逻辑迁移等。

[oracle@11g dbs]$ vi /oracle/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora
*.db_name='orcl'
*.instance_name='orcl'[oracle@11g ~]$ export ORACLE_SID=orcl
SQL> startup nomount

           

(2)还原参数文件

[oracle@rac1 ~]$ rman target /
run {
ALLOCATE CHANNEL ch00 TYPE disk;
restore spfile to '/oracle/app/oracle/product/11.2.0/db_1/dbs/spfileorcl.ora' from '/backup/full/orcl_spfile_1684_1_20240123';
release channel ch00;
}SQL> create pfile='/oracle/app/oracle/product/11.2.0/db_1/dbs/pfileorcl.ora' from spfile='/oracle/app/oracle/product/11.2.0/db_1/dbs/spfileorcl.ora';[oracle@11g dbs]$ vi /oracle/app/oracle/product/11.2.0/db_1/dbs/pfileorcl.ora
*.audit_file_dest='/oracle/app/oracle/admin/orcl/adump'
*.audit_trail='NONE'
*.compatible='11.2.0.4.0'
*.db_block_size=8192
*.db_domain=''
*.db_files=8192
*.db_name='orcl'
*.instance_name='orcl'
*.diagnostic_dest='/oracle/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.log_archive_format='%t_%s_%r.arc'
*.memory_target=2306867200
*.remote_login_passwordfile='exclusive'
*.log_archive_dest_1='location=/oracle/app/oracle/product/11.2.0/db_1/dbs/arch'SQL> create spfile='/oracle/app/oracle/product/11.2.0/db_1/dbs/spfileorcl.ora' from pfile='/oracle/app/oracle/product/11.2.0/db_1/dbs/pfileorcl.ora';
SQL> shutdown immediate
SQL> startup nomount
SQL> show parameter spfile

               

(3)还原控制文件

[oracle@lf ~]$ rman target /
run {
ALLOCATE CHANNEL ch00 TYPE disk;
restore controlfile to '/oracle/app/oracle/oradata/orcl/control.ctl' from '/backup/full/orcl_ctl_1683_1_20240123';
release channel ch00;
}修改控制文件的参数,启动至mount状态:
SQL> show parameter control
SQL> alter system set control_files='/oracle/app/oracle/oradata/orcl/control.ctl' scope=spfile;  
SQL> shutdown immediate
SQL> startup mount
SQL> show parameter control   

             

(4)重命名redo日志组

注意:1)通过rman定义set newname for logfile设置路径失败,所以只能在sqlplus中重命名redo日志组。12c版本之后可能支持了在rman中定义set newname for logfile(待验证)

          2)只进行重命名redo日志组操作,先不进行删除和重建redo日志组,如果同时进行重建redo日志组,就会导致在后续追归档日志阶段不能应用归档日志(执行recover database using backup controlfile until cancel;命令,报错ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below ORACLE)

           3)先还原数据文件然后再重命名redo日志组,可能会导致v$logfile里面日志组的路径全部直接成为了+ASM磁盘组没有具体路径的情况,比如:全部都成了+DATA这样,这样的话部分日志组因为当前在用删除不了,并且重命名redo日志组是需要具体路径的,但是都变成了+DATA就没有办法识别到是哪一个日志组。所以先进行redo日志组的重命名,然后再进行数据文件还原,就可以避免这个问题。

SQL> select * from v$logfile;         ---重做日志组
SQL> select * from v$standby_log;    ---镜像日志组(dg)

SQL> 
alter database rename file '+DATA/orcl/onlinelog/group_1.266.1140875825' to '/oracle/app/oracle/oradata/orcl/redo1.log';
alter database rename file '+DATA/orcl/onlinelog/group_2.257.1140875825' to '/oracle/app/oracle/oradata/orcl/redo2.log';
alter database rename file '+DATA/orcl/onlinelog/group_3.275.1140875827' to '/oracle/app/oracle/oradata/orcl/redo3.log';
alter database rename file '+DATA/orcl/onlinelog/group_4.276.1140875827' to '/oracle/app/oracle/oradata/orcl/redo4.log';
alter database rename file '+DATA/orcl/onlinelog/group_5.281.1140882455' to '/oracle/app/oracle/oradata/orcl/redo5.log';
alter database rename file '+DATA/orcl/onlinelog/group_6.293.1140883981' to '/oracle/app/oracle/oradata/orcl/redo6.log';
alter database rename file '+DATA/orcl/onlinelog/group_7.294.1140883981' to '/oracle/app/oracle/oradata/orcl/redo7.log';
alter database rename file '+DATA/orcl/onlinelog/group_8.295.1140883981' to '/oracle/app/oracle/oradata/orcl/redo8.log';

                  

(5)还原数据文件

注意:rman备份记录在控制文件中,启动到mount状态时,就可以查到rman的备份信息。在恢复数据文件时,会自动找备份片的位置进行恢复,所以源库和异机的备份片的路径要一致,不然报找不到备份片。如果路径不一致可以通过catalog将未识别的RMAN备份集注册到控制文件。

RMAN> CATALOG START WITH '/backup/full';   ---注册目录(多用于批量注册归档,也可以用于注册备份片)
RMAN> report schema;                    ---显示实例的信息。根据数据文件和临时文件ID恢复

RMAN>
run {
ALLOCATE CHANNEL ch00 TYPE disk;
ALLOCATE CHANNEL ch01 TYPE disk;
###还原数据文件到新的路径
set newname for datafile 1 to '/oracle/app/oracle/oradata/orcl/system.259.1140874089';
set newname for datafile 2 to '/oracle/app/oracle/oradata/orcl/sysaux.260.1140874091';
set newname for datafile 3 to '/oracle/app/oracle/oradata/orcl/undotbs1.261.1140874091';
set newname for datafile 4 to '/oracle/app/oracle/oradata/orcl/undotbs2.263.1140874093';
set newname for datafile 5 to '/oracle/app/oracle/oradata/orcl/users.264.1140874093';
set newname for datafile 6 to '/oracle/app/oracle/oradata/orcl/itpux.277.1140877153';
set newname for datafile 7 to '/oracle/app/oracle/oradata/orcl/liu.472.1158545801';
set newname for datafile 8 to '/oracle/app/oracle/oradata/orcl/liu.427.1153721763';
###还原临时文件到新的路径
set newname for tempfile 1 to '/oracle/app/oracle/oradata/orcl/temp.262.1140874091';
###自动全库恢复。restore database会导致所有文件覆盖还原所以谨慎,restore datafile是指定单个文件从rman中还原。
restore database;           
###将已发出SET NEWNAME for DATAFILE命令的所有数据文件切换为其新名称。如果是asm管理的文件可能在设置路径时出现问题,导致控制文件的路径和物理路径不对应。所以建议源库为asm转文件系统时不设置这个参数,手动注册和通知控制文件路径catalog datafilecopy和switch datafile。
switch datafile all;  
release channel ch00;
release channel ch01;
}

                  

(6)查看数据文件头部和控制文件头部还原的时间

SQL> select name from v$datafile;
SQL> SELECT FILE#,to_char(checkpoint_change#,'999999999999') ,TO_CHAR(CHECKPOINT_TIME,'YYYY-MM-DD HH24:MI:SS') CPTIME FROM v$datafile_header;       ---数据文件头部

SQL> SELECT FILE#,to_char(checkpoint_change#,'999999999999'),TO_CHAR(CHECKPOINT_TIME,'YYYY-MM-DD HH24:MI:SS') CPTIME FROM V$DATAFILE;            ---控制文件头部

               

二、恢复数据

(1)还原归档

注意:先执行一遍recover database using backup controlfile until cancel;和v$datafile_header、V$DATAFILE就会输出当前恢复的SCN时间,然后根据时间再决定恢复几天的归档,或者也会显示从那个归档开始恢复,确定了开始恢复的归档号之后,就按照序列号恢复RESTORE ARCHIVELOG sequence,恢复到最新的序列号通过list backup查看最后一个备份的归档号。

RMAN>
run{
ALLOCATE CHANNEL ch00 TYPE disk;
set archivelog destination to '/backup/arch';
restore archivelog from time 'sysdate-10';
release channel ch00;
}      ---如果恢复报错no backup of archived log,根据序列号恢复RESTORE ARCHIVELOG sequence BETWEEN 5877 AND 5971 thread 2; 

             

(2)追归档日志(设置恢复归档日志的时间点,设置的时间略微高出还原的时间点,因为在recover时只能设置时间向前恢复,不能向后恢复。时间设置为还原点之后,drop表之前)

SQL> set logsource /backup/arch;   ---set logsource +路径:设置的是数据库读取归档的路径,默认的读取的路径是archive log list,如果通过rman恢复的是其他路径,那么就需要重新设置一下读取归档的路径。SQL> recover database until time '2024-01-18 17:18:00' using backup controlfile until cancel;
auto
SQL> recover database until time '2024-01-18 17:18:00' using backup controlfile until cancel; 
Cancel
SQL> SELECT FILE#,to_char(checkpoint_change#,'999999999999') ,TO_CHAR(CHECKPOINT_TIME,'YYYY-MM-DD HH24:MI:SS') CPTIME FROM v$datafile_header;       ---数据文件头部

SQL> SELECT FILE#,to_char(checkpoint_change#,'999999999999'),TO_CHAR(CHECKPOINT_TIME,'YYYY-MM-DD HH24:MI:SS') CPTIME FROM V$DATAFILE;            ---控制文件头部

                        

(3)删除不必要的redo日志组

SQL> select * from v$logfile;         ---重做日志组
SQL> select * from v$standby_log;    ---镜像日志组(dg)

SQL> 
alter database drop logfile group 5;
alter database drop logfile group 6;
alter database drop logfile group 7;
alter database drop logfile group 8;  

           

(4)重建临时文件

SQL> shutdown immediate
SQL> startup
SQL> alter database open resetlogs; 
SQL> select * from v$tablespace;        ---表空间中有temp表空间但是告警日志中显示需要重建信息的temp数据文件

temp临时文件的路径还是+ASM磁盘组,所以新增一个临时文件,然后删除临时文件为1的+ASM磁盘组的临时文件:
SQL> select * from v$tempfile;    

SQL> alter tablespace temp add tempfile '/oracle/app/oracle/oradata/orcl/temp.dbf' size 31G autoextend off;
SQL> alter tablespace temp drop tempfile 1;
注意:如果删除临时文件失败,需要先删除临时表空间,然后重建。

                 

(5)禁用重做日志线程2。因为原先是rac环境,所以每个实例都是独立的redo线程,现在恢复到单机只需要1个redo线程,单机只会在线程1的日志组来回切换

SQL> select * from v$logfile;         ---重做日志组
SQL> select * from v$standby_log;    ---镜像日志组(dg)
SQL> select * from v$log;           ---rac环境下有多个线程的重做日志组,所以在单机环境下重做日志只保留线程1

SQL> alter database disable thread 2;   ---禁用重做日志线程2
SQL> 
alter database drop logfile group 3;
alter database drop logfile group 4;

                         

(6)删除UNDOTBS2表空间(undo同redo一样是分线程的)

SQL> drop tablespace UNDOTBS2 including contents and datafiles;

             

三、启动单机数据库

SQL> shutdown immediate
SQL> startup   

                 

四、物理迁移完成查看状态

(1)通过rman恢复的实例是和生产环境一模一样的,所以只需要做后续参数部分的优化

参数优化参考RAC环境的配置即可😄

                

(2)检查实例情况

数据库文件和undo:
set linesize 500 
set pagesize 99
col file_name for a70 
col file_id for 9999999 
col status for a10 
col ts_name for a25 
col cur_mb for 99999 
col max_mb for 99999
select status, file_id, file_name, tablespace_name ts_name,blocks/128 tolal_mb, maxblocks/128 max_mb,AUTOEXTENSIBLE from dba_data_files order by file_name;temp临时表空间:
select username,temporary_tablespace from dba_users;
set linesize 230
col file_name for a65
select  FILE_ID,FILE_NAME,TABLESPACE_NAME,bytes/1024/1024 tolal_mb,status,AUTOEXTENSIBLE,MAXBYTES/1024/1024 max_mb from dba_temp_files;redo重做日志:
set linesize 230
col member for a50
select * from v$logfile;
select * from v$log;查看数据库实例的状态和模式:
select  instance_name , status  from  v$instance ;
select  name, open_mode  from  v$database ;

     

五、验证数据是否恢复

[oracle@11g dbs]$ sqlplus user/123456
SYS@orcl> select * from ceshi;    ---通过之前的备份恢复数据

                 

六、将数据恢复到生产库 

少量数据的方式:

SYS@orcl> select 'insert into ceshi values (' || id || ');' from ceshi;

             

大量数据的方式:

exp/imp或者expdp/impdp。数据泵直通车👉【Oracle篇】一文搞清expdp/impdp逻辑迁移工具的用法和定时全备实例(第二篇,总共四篇)_impdp官方文档-CSDN博客👈


    各位经过第四、第五、第六篇文章,关于RMAN恢复的篇章至此圆满结束。这些精心挑选的案例不仅涵盖了多种恢复场景,而且都极具实用性和可操作性。希望能为各位在恢复工作中提供有力的支持和指导。

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

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

相关文章

Web应用安全测试-业务功能滥用(一)

Web应用安全测试-业务功能滥用(一) 1、短信定向转发 漏洞描述:短信接收人可任意指定 测试方法:拦截发送短信的请求,将手机号改为测试人员的手机号,测试是否可接收短信验证码。 风险分析:攻击…

node更改npm缓存存储位置-并配置环境变量

更改缓存位置 node安装完成之后,在安装目录中新建一个存放缓存的文件夹node_cache 此时这个文件夹必须使用管理员权限才能更改,这使得命令行下使用npm进行下载的时候总是报权限不足的错误:permit 解决办法: 右键 -> 属性 -> 安全 -> 编辑 -> 选择user -> …

mybatis中resultMap和resultType的区别

总结 基本映射 :(resultType)使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。(数据库,实体,查询字段,这些全部都得一一对应)…

盲盒App开发时有哪些技术框架可以借鉴

在开发盲盒App时,技术框架的选择对于应用的性能、稳定性和用户体验都至关重要。以下是几个可以借鉴的技术框架,它们在不同方面提供了优势,并且结合了参考文章中的相关信息: 前端技术框架 微信小程序框架: 优点&#…

Arrays与Lambda

Arrays 默认排序: 按照指定规则排序: 细节: 底层原理: 代码实现:o1-o2:升序排列 o2-o1:降序排列 Lambda表达式:简化匿名内部类方法 函数式编程: 格式: 总结: …

关于2024年第一批计算机程序设计员(Python)四级、三级职业技能等级证书认证考试的通知

计算机程序设计员(Python)详细介绍 报名详细信息: 报名截止时间:2024年6月05日 ~ 2024年6月18日 准考证下载时间:2023年6月24日 ~ 6月28日 考试时间:2024年6月29日 四级:08:30~12:30&#…

UDP的组播发送与接收C语言测试和nc接收组播测试

组播这个东西&#xff0c;很多年前用过一次。本身的原理不复杂&#xff0c;未知的是使用的环境&#xff0c;受使用环境的影响有多大&#xff0c;还是那句废话&#xff0c;具体问题具体分析。 发送端代码multicast.c #include <stdio.h> #include <stdlib.h> #…

k8s 自动伸缩机制-------HPA 超详细解读

目录 在K8s中扩缩容分为两种&#xff1a; 前言 弹性伸缩是根据用户的业务需求和策略&#xff0c;自动“调整”其“弹性资源”的管理服务。通过弹性伸缩功能&#xff0c;用户可设置对定时、周期或监控策略&#xff0c;恰到好处地增加或减少“弹性资源”&#xff0c;并完成实例…

最小生成树prim算法详解

prim算法解决的是最小生成树问题&#xff0c;即在一个给定的无向图G中求一棵生成树T&#xff0c;使得这棵树拥有图G中的所有顶点&#xff0c;且所有边都是来自图G中的边&#xff0c;并且满足整棵树的边权之和最小。 prim算法的基本思想是对图G设置集合S来存放已被访问的顶点&a…

适用于 macOS 的最佳免费数据恢复软件

升级到 macOS 后&#xff0c;它可以帮助您从 HDD、SSD、存储卡、USB 闪存驱动器、数码相机或其他存储介质设备中完全恢复已删除、格式化或无法访问的数据。 当 macOS Monterey 用户寻找数据恢复解决方案时&#xff0c;免费数据恢复软件始终是一个不错的选择。实际上&#xff0…

【Qt】chartView设置橡皮筋效果(RubberBand)

1. 效果 2. 代码 QChartView* chartView new QChartView();chartView->setRubberBand(QChartView::RectangleRubberBand);

C# 数据结构与算法:近邻算法的详解

文章目录 1、什么是K最近邻算法&#xff08;KNN&#xff09;&#xff1f;2、 KNN算法的原理3、实现近邻算法算法使用示例 4、应用&#xff1a;使用KNN算法进行简单的分类5、算法的优势与不足6、总结 近邻算法是一种基于实例的学习方法&#xff0c;它通过找到与给定测试点最接近…

社区团购系统搭建部署 :便捷高效,连接消费者与商家新篇章

一、前言 随着科技的快速发展和互联网的普及&#xff0c;社区团购系统作为一种新型的购物模式&#xff0c;正以其便捷高效的特性&#xff0c;逐渐改变着消费者和商家的互动方式。社区团购系统为商家提供丰富的营销活动和便捷高效的门店管理体系&#xff0c;为消费者提供真正实惠…

以bert为例,了解Lora是如何添加到模型中的

以bert为例,了解Lora是如何添加到模型中的 一.效果图1.torch.fx可视化A.添加前B.添加后 2.onnx可视化A.添加前B.添加后 3.tensorboard可视化A.添加前B.添加后 二.复现步骤1.生成配置文件(num_hidden_layers1)2.运行测试脚本 本文以bert为例,对比了添加Lora模块前后的网络结构图…

冰与火时空门特效解析

本文在线示例查看。更多精彩内容尽在数字孪生平台&#xff0c;关注公众号&#xff1a;sky的数孪技术&#xff0c;技术交流、源码下载请添加VX&#xff1a;digital_twin123 基本信息 三维渲染库采用threejs&#xff0c;项目用vite打包。 版本&#xff1a;v1.1.0 场景解析 时空…

Python第二语言(十四、高阶基础)

目录 1. 闭包 1.1 使用闭包注意事项 1.2 小结 2. 装饰器&#xff1a;实际上也是一种闭包&#xff1b; 2.1 装饰器的写法&#xff08;闭包写法&#xff09; &#xff1a;基础写法&#xff0c;只是解释装饰器是怎么写的&#xff1b; 2.2 装饰器的语法糖写法&#xff1a;函数…

Flink作业执行之 2.算子 StreamOperator

Flink作业执行之 2.算子 StreamOperator 前文介绍了Transformation创建过程&#xff0c;大多数情况下通过UDF完成DataStream转换中&#xff0c;生成的Transformation实例中&#xff0c;核心逻辑是封装了SimpleOperatorFactory实例。 UDF场景下&#xff0c;DataStream到Transf…

Java——LinkedList

1、链表 1.1 链表的概念及结构 链表在逻辑层面上是连续的&#xff0c;在物理层面上不一定是连续的 链表结构可分为&#xff0c;单向或双向、带头或不带头、循环或非循环&#xff0c;组合共计8种 重点&#xff1a;无头单向非循环链表、无头双向链表 1.2 模拟实现无头单向非…

【代码随想录】【算法训练营】【第35天】[134]加油站 [135]分发糖果 [860]柠檬水找零 [406]根据身高重建队列

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 35&#xff0c;连休两天~ 题目详情 [134] 加油站 题目描述 134 加油站 解题思路 前提&#xff1a;数组 思路&#xff1a;全局贪心算法&#xff1a;最小累加剩余汽油为负数&#xff0c;说明…

面向对象编程重载

系列文章目录 文章目录 系列文章目录前言一、重载&#xff08;overload&#xff09; 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了…