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

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

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

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

    话接上篇,上篇详解介绍了 如何使用RMAN从RAC环境的备份片中恢复数据到单机环境。然而,在实际操作中,我们也可能会遇到从 单机环境备份的数据恢复到RAC环境的需求 。这种恢复过程相较于前者可能更为复杂,因为它需要考虑到RAC环境的多个节点和共享存储等特性。

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

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

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

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

         

恢复所使用的rman备份片:

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

         

兄弟们开始今天的内容!

               

FS源机:

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

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

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


            

RAC异机:

一、通过手动注册rac实例的方式进行恢复,需要注册实例集群等。单机的db_name和rac的db_name要一致不然后面还要注册实例集群(db_unique_name、service_names、instance_name不会涉及在控制文件里,但db_name会涉及到控制文件和数据文件头部中。如果通过参数文件改完之后导致库启动不了ORA-01103: database name 'ORCL' in control file is not 'ORCLDG',如果参数文件改了控制文件也重置,那么在效验数据文件时文件的头部也是不能通过的,也会报ORA-01161: Database name ORCL in the file header does not match ORCLDG in the DATABASE clause)。所以db_name进行异机迁移,不管迁移到FS还是迁移到rac环境,db_name是不能变的。想要变动db_name就只能通过expdp这种逻辑迁移等。

Rac oracle用户节点一:

[oracle@rac1 dbs]$ cd  $ORACLE_HOME/dbs
[oracle@rac1 dbs]$ orapwd file=orapwliufei1 password=123456
[oracle@rac1 dbs]$ vi initliufei1.ora    ---实例默认参数文件的保存路径为$ORACLE_HOME/dbs,init+SID_node.ora文件记录了以ASM方式启动参数文件的路径(ASM数据库启动时找不到spfileliufeidg1.ora,找到initliufeidg1.ora里的路径来通过asm管理的参数文件来启动)
SPFILE='+DATA/liufei/spfileliufei.ora'

         

Rac oracle用户节点二:

[oracle@rac2 dbs]$ cd  $ORACLE_HOME/dbs
[oracle@rac2 dbs]$ orapwd file=orapwliufei2 password=123456
[oracle@rac2 dbs]$ vi initliufei2.ora    ---实例默认参数文件的保存路径为$ORACLE_HOME/dbs,init+SID_node.ora文件记录了以ASM方式启动参数文件的路径(ASM数据库启动时找不到spfileliufeidg2.ora,找到initliufeidg2.ora里的路径来通过asm管理的参数文件来启动)
SPFILE='+DATA/liufei/spfileliufei.ora'

                 

节点二:

无须任何操作

           

节点一:迁移完成前的所有操作都在一个节点操作

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

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

[oracle@rac1 dbs]$ vi /oracle/app/oracle/product/11.2.0/db_1/dbs/liufei1.ora
*.db_name='liufei'
*.instance_name='liufei1'[oracle@11g ~]$ export ORACLE_SID=liufei1
SQL> startup pfile='/oracle/app/oracle/product/11.2.0/db_1/dbs/liufei1.ora' 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/spfileliufei.ora' from '/backup/full/orcl_spfile_1684_1_20240123'; 
release channel ch00;
}[grid@rac1~]$ asmcmd
ASMCMD> cd +data
ASMCMD> mkdir liufei[oracle@rac1 dbs]$ export ORACLE_SID=liufei1
[oracle@rac1 dbs]$ sqlplus / as sysdba
将rman恢复的spfile文件转换成可vi编辑的pfile文件:
SQL> create pfile='/oracle/app/oracle/product/11.2.0/db_1/dbs/pfileliufei.ora' from spfile='/oracle/app/oracle/product/11.2.0/db_1/dbs/spfileliufei.ora';[oracle@dg dbs]$ vi  /oracle/app/oracle/product/11.2.0/db_1/dbs/pfileliufei.ora标准的rac集群参数文件
liufei2.__db_cache_size=402653184
liufei1.__db_cache_size=301989888
liufei1.__java_pool_size=16777216
liufei2.__java_pool_size=16777216
liufei1.__large_pool_size=33554432
liufei2.__large_pool_size=33554432
liufei1.__pga_aggregate_target=452984832
liufei2.__pga_aggregate_target=486539264
liufei1.__sga_target=738197504
liufei2.__sga_target=704643072
liufei1.__shared_io_pool_size=0
liufei2.__shared_io_pool_size=0
liufei2.__shared_pool_size=234881024
liufei1.__shared_pool_size=369098752
liufei1.__streams_pool_size=0
liufei2.__streams_pool_size=0
*.audit_file_dest='/oracle/app/oracle/admin/orcl/adump'
*.audit_trail='db'
*.cluster_database=true
*.compatible='11.2.0.4.0'
*.control_files='+DATA/orcl/controlfile/current.269.1090195865'
*.db_block_size=8192
*.db_create_file_dest='+DATA'
*.db_domain=''
*.db_name='liufei'
*.diagnostic_dest='/oracle/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
liufei1.instance_number=1
liufei2.instance_number=2
*.log_archive_dest_1='LOCATION=+DATA'
*.log_archive_format='%t_%s_%r.dbf'
*.memory_target=1189085184
*.open_cursors=300
*.processes=200
*.remote_listener='racscan:1521'
*.remote_login_passwordfile='exclusive'
*.sessions=225
liufei2.thread=2
liufei1.thread=1
liufei2.undo_tablespace='UNDOTBS2'
liufei1.undo_tablespace='UNDOTBS1'
将vi编辑好的pfile文件转换成spfile文件在ASM磁盘中:
SQL> create spfile='+DATA/liufei/spfileliufei.ora'  from pfile='/oracle/app/oracle/product/11.2.0/db_1/dbs/pfileliufei.ora';
SQL> shutdown immediate
SQL> startup nomount
SQL> show parameter spfile

                 

(3)还原控制文件

[oracle@rac1 ~]$ rman target /
run {
ALLOCATE CHANNEL ch00 TYPE disk;
restore controlfile to '+data/liufei/controlfile/control.ctl' from '/backup/full/orcl_ctl_1683_1_20240123';
release channel ch00;
}查看asm路径是否有控制文件:
[grid@rac1 ~]$ asmcmd
ASMCMD> cd +data/liufei/controlfile
ASMCMD> ls -l             ---通过asm管理的文件会自动命名。设置自动命名的文件+DATA/liufei/CONTROLFILE/current.332.1090793947,和手动恢复的文件+data/liufei/controlfile/control.ctl都可以

修改控制文件的参数,启动至mount状态:
SQL> show parameter control
SQL> alter system set control_files='+DATA/liufei/CONTROLFILE/current.332.1090793947' scope=spfile;   ---设置自动命名的文件+DATA/liufei/CONTROLFILE/current.332.1090793947,和手动恢复的文件+data/liufei/controlfile/control.ctl都可以
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 '/oracle/app/oracle/oradata/orcl/redo1.log' to '+data/liufei/onlinelog/redo1.log';
alter database rename file '/oracle/app/oracle/oradata/orcl/redo2.log' to '+data/liufei/onlinelog/redo2.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 '+data';
set newname for datafile 2 to '+data';
set newname for datafile 3 to '+data';
set newname for datafile 4 to '+data';
set newname for datafile 5 to '+data';
set newname for datafile 6 to '+data';
set newname for datafile 7 to '+data';
set newname for datafile 8 to '+data';###还原临时文件到新的路径
set newname for tempfile 2 to '+data';
###自动全库恢复。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)追归档日志(使用备份的控制文件恢复时,控制文件会根据归档追scn,同时数据文件的scn也会恢复的最新)

SQL> set logsource /backup/arch;   ---set logsource +路径:设置的是数据库读取归档的路径,默认的读取的路径是archive log list,如果通过rman恢复的是其他路径,那么就需要重新设置一下读取归档的路径。SQL> recover database using backup controlfile until cancel;
auto
SQL> recover database using backup controlfile until cancel;
CancelSQL> 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 日志组序号;

              

(4)重建临时文件

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

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

SQL> alter tablespace temp add tempfile '+data' size 200m autoextend off;
SQL> alter tablespace temp drop tempfile 2;
注意:如果删除临时文件失败,需要先删除临时表空间,然后重建。

                       

(5)启用重做日志线程2(节点二使用)。因为原先是单机环境,恢复到了rac环境,所以每个实例都是独立的redo线程

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

SQL> 
alter database add logfile thread 2 group 3 '+data' size 200M;
alter database add logfile thread 2 group 4 '+data' size 200M;SQL> alter database enable thread 2;   ---添加完之后再应用日志线程2,不然节点二报: redo thread 2 is not enabled - cannot mount

            

(6)创建一个UNDOTBS2表空间给节点二使用(undo同redo一样是分线程的)

SQL> create undo tablespace UNDOTBS2 datafile '+data' size 5G autoextend on;

                     

三、启动rac数据库

节点一:      

[oracle@rac1 dbs]$ export ORACLE_SID=liufei1                      
SQL> shutdown immediate
SQL> startup   

                  

节点二:

[oracle@rac2 dbs]$ export ORACLE_SID=liufei2
SQL> startup   
在启动节点二时,节点一的告警日志会自动创建UNDOTBS2(已经手动创建UNDOTBS2),用于应用节点二。 在rac中,undo、redo是分线程的,temp是公用的

           

四、在oracle用户下注册rac实例

注意:1)不能在grid用户下,报:PRKH-1014 : Current user "grid" is not the oracle owner user "oracle" of oracle home "/oracle/app/oracle/product/11.2.0/db_1"

[oracle@rac1 dbs]$ srvctl add database -d liufei -c RAC -o /oracle/app/oracle/product/11.2.0/db_1 -p '+DATA/liufei/spfileliufei.ora' -r primary -n liufei[oracle@rac1 dbs]$ srvctl add instance -d liufei -i liufei1 -n rac1
[oracle@rac1 dbs]$ srvctl add instance -d liufei -i liufei2 -n rac2[oracle@rac1 dbs]$ srvctl status database -d liufei

[oracle@rac1 dbs]$ srvctl stop database -d liufei      ---一定要进行停止,因为在一个节点同步了数据实例到了mount状态,但srvctl status database -d看是没有启动的,因为在加集群之前启动的,加到了集群后也不会同步实例的状态,需要先停止然后启动
[oracle@rac1 dbs]$ srvctl start database -d liufei
[oracle@rac1 dbs]$ srvctl stop database -d liufei
[oracle@rac1 dbs]$ srvctl start database -d liufei[grid@rac1 dbs]$ crsctl status resource -t
只多了ora.liufei.db实例的节点一和节点二组件的监控,其他都是安装了集群组件grid和oracle软件就有的组件

[oracle@rac1 dbs]$ srvctl config database -d liufei -aDatabase unique name: liufei
Database name: liufei
Oracle home: /oracle/app/oracle/product/11.2.0/db_1
Oracle user: oracle
Spfile: +DATA/liufei/spfileliufei.ora
Domain: 
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools: liufei
Database instances: liufei1,liufei2
Disk Groups: DATA
Mount point paths: 
Services: 
Type: RAC
Database is enabled
Database is administrator managed

               

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

(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 ;查看监听:
[grid@rac2 admin]$ lsnrctl status LISTENER_SCAN1

数据同步测试:
节点一:
create tablespace liu11 datafile '+data' size 100m autoextend off;
create user liufei identified by 123456 default tablespace liu11; 
grant dba to liufei;conn liufei/123456;
create table liufei.itpux01(c1 varchar2(10),c2 number);
insert into itpux01 values('itpux01','1');
commit;节点二:                   
select name from v$datafile;
select * from liufei.itpux01;


    关于《rman全库异机恢复:从单机环境到RAC测试环境的转移》就到这里了,淦了2小时,博主已经累到虚脱😩,感觉身体被掏空,不过下篇《rman时间点异机恢复:从单机环境到单机测试环境的转移》再见!

     

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

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

相关文章

一文学会Spring 实现事务,事务的隔离级别以及事务的传播机制

目录 一.Spring (Spring Boot) 实现事务 1.通过代码的方式手动实现事务 (手动档的车) 2.通过注解的方式实现声明式事务 (自动挡的车) 二.事务的4大特性(ACID) 三.事务的隔离级别 ①Mysql的事务隔离级别: ②Spring的事务隔离级别: 四.事务的传播机制 ①事务传播机制的概…

验证码案例

目录 前言 一、Hutool工具介绍 1.1 Maven 1.2 介绍 1.3 实现类 二、验证码案例 2.1 需求 2.2 约定前后端交互接口 2.2.1 需求分析 2.2.2 接口定义 2.3 后端生成验证码 2.4 前端接收验证码图片 2.5 后端校验验证码 2.6 前端校验验证码 2.7 后端完整代码 前言…

基于可解释性深度学习的马铃薯叶病害检测

数据集来自kaggle文章,代码较为简单。 import numpy as np # linear algebra import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)# Input data files are available in the read-only "../input/" directory # For example, runni…

快团团供货大团长如何查看帮卖团长的订单?

一、功能说明 可以看到团购中每个帮卖团长帮卖产生的订单 二、具体设置方法 1、小程序端如何操作? 在团购页面中,点击订单管理,在这里可以选择全部团长订单,我的团订单,和帮卖团长的帮卖订单。 2、PC端如何操作&am…

ssm616基于vue.js的购物商场的设计与实现+vue【已测试】

前言:👩‍💻 计算机行业的同仁们,大家好!作为专注于Java领域多年的开发者,我非常理解实践案例的重要性。以下是一些我认为有助于提升你们技能的资源: 👩‍💻 SpringBoot…

【基于C++与OpenCV实现魔方图像识别和还原算法】施工总览图

文章目录 主要效果展示思维导图魔方还原算法 本系列博客长期更新,分为两大部分 OpenCV实现魔方六面识别 C编写科先巴二阶段还原算法实现三阶魔方的还原 主要效果展示 摄像头识别六面 3D图像构建,提供还原公式 动画演示还原过程 思维导图 魔方还原算法 参…

达梦8 开启物理逻辑日志对系统的影响

物理逻辑日志,是按照特定的格式存储的服务器的逻辑操作,专门用于 DBMS_LOGMNR 包挖掘获取数据库系统的历史执行语句。当开启记录物理逻辑日志的功能时,这部分日志内 容会被存储在重做日志文件中。 要开启物理逻辑日志的功能,需要…

社区物资交易互助平台的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,基础数据管理,论坛管理,公告信息管理 前台账户功能包括:系统首页,个人中心,论坛,求助留言板,公…

SQL Chat:从SQL到SPEAKL的数据库操作新纪元

引言 SQL Chat是一款创新的、对话式的SQL客户端工具。 它采用自然语言处理技术,让你能够像与人交流一样,通过日常对话的形式对数据库执行查询、修改、创建及删除操作 极大地简化了数据库管理流程,提升了数据交互的直观性和效率。 在这个框…

反AI浪潮中的新机遇:Cara艺术社区异军突起

近日,一个名为Cara的艺术社区在网络上迅速走红,其独特的反AI定位吸引了大量创意人士。在AI技术日益普及的今天,Cara社区反其道而行之,致力于打造一个无AI侵害的创作和交流环境。这一创新模式不仅赢得了艺术家的青睐,也为国内创业者提供了新的思考角度。 一、精准定位,守…

C++ list链表的使用和简单模拟实现

目录 前言 1. list的简介 2.list讲解和模拟实现 2.1 默认构造函数和push_back函数 2.2 迭代器实现 2.2.1 非const正向迭代器 2.2.2 const正向迭代器 2.2.3 反向迭代器 2.3 插入删除函数 2.3.1 insert和erase 2.3.2 push_back pop_back push_front pop_front 2.4 构…

[word] word如何清除超链接 #媒体#笔记#知识分享

word如何清除超链接 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享下word如何清除超链接的操作办法,一起来学习下吧! 1、清除所有超链接 按下组合键CtrlshiftF9,就可以将网上复制带有超链…

《软件定义安全》之三:用软件定义的理念做安全

第3章 用软件定义的理念做安全 1.不进则退,传统安全回到“石器时代” 1.1 企业业务和IT基础设施的变化 随着企业办公环境变得便利,以及对降低成本的天然需求,企业始终追求IT集成设施的性价比、灵活性、稳定性和开放性。而云计算、移动办公…

pytorch 加权CE_loss实现(语义分割中的类不平衡使用)

加权CE_loss和BCE_loss稍有不同 1.标签为long类型,BCE标签为float类型 2.当reduction为mean时计算每个像素点的损失的平均,BCE除以像素数得到平均值,CE除以像素对应的权重之和得到平均值。 参数配置torch.nn.CrossEntropyLoss(weightNone,…

解决Windows窗口聚焦问题

情景引入: 在使用副屏显示器写代码,主屏显示器看教程的时候,突然有个知识点卡住了,这个时候你想要按下空格让视频暂停,但是按下后你会发现:视频没有暂停,倒是代码界面多了个空格。。。这就不好玩…

用HTML实现拓扑面,动态4D圆环面,可手动调节,富有创新性的案例。(有源代码)

文章目录 前言一、示例二、目录结构三、index.html(主页面)四、main.js五、Tour4D.js六、swissgl.js七、dat.gui.min.js八、style.css 前言 如果你觉得对代码进行复制粘贴很麻烦的话,你可以直接将资源下载到本地。无需部署,直接可…

如何对stm32查看IO功能。

有些同学对于别人的开发板的资源,或者IO口,或者串口等资源不知道怎么分配。 方法1、看硬石、野火、正点原子的开发板,看下他们的例子,那个资源用什么。自己多看几个原理图,多看几个视频,做一下笔记。以后依…

【面试干货】MySQL 三种锁的级别(表级锁、行级锁和页面锁)

【面试干货】MySQL 三种锁的级别(表级锁、行级锁和页面锁) 1、表级锁2、行级锁3、页面锁4、总结 💖The Begin💖点点关注,收藏不迷路💖 在 MySQL 数据库中,锁是控制并发访问的重要机制&#xff0…

GQA,MLA之外的另一种KV Cache压缩方式:动态内存压缩(DMC)

0x0. 前言 在openreview上看到最近NV的一个KV Cache压缩工作:https://openreview.net/pdf?idtDRYrAkOB7 ,感觉思路还是有一些意思的,所以这里就分享一下。 简单来说就是paper提出通过一种特殊的方式continue train一下原始的大模型&#x…

DS:树与二叉树的相关概念

欢迎来到Harper.Lee的学习世界!博主主页传送门:Harper.Lee的博客主页想要一起进步的uu可以来后台找我哦! 一、树的概念及其结构 1.1 树的概念亲缘关系 树是一种非线性的数据结构,它是由n(n>0)个有限节点…