【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;
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 日志组序号;

              

(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 -a
        
Database 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时间点异机恢复:从单机环境到单机测试环境的转移》再见!

     

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

车载以太网测试要测些什么呢?

车载以太网测试大致可以分成两块:TC8测试和以太网通信测试。 TC8测试全称TC8一致性测试,其规范由OPEN联盟制定,包括车载以太网ECU从物理层到应用层的各层互操作性以及常规基础功能服务。目的在于提高不同ECU之间的兼容性。 TC8测试规范可以…

C++STL---stack queue知识汇总

前言 C将stack和queue划归到了Containers中,但严格的说这并不准确,stack和queue实际上已经不再是容器了,而是属于容器适配器,适配器做的功能是转换,即:它不是直接实现的,而是由其他容器封装转换…

ruoyi若依二次开发怎么添加扫描自己的controller和mapper,配置三个地方即可。

概要 首先,添加在com.ruoyi外的类,项目启动后,调用接口,是会返回404找不到的。 必须要对这以外的接口类进行配置。目录结构如下: 解决步骤 一、添加 com.ruoyi.framework.config 下: // 指定要扫描的M…

深度学习革命-AI发展详解

深度学习革命 《深度学习革命》是一部引人深思的作品,详细讲述了深度学习技术的发展历程及其对各个行业的深远影响。由杰出的计算机科学家、深度学习专家撰写,这本书不仅适合科技领域的专业人士阅读,也为普通读者提供了一个理解人工智能革命…

LeetCode322.零钱兑换

文章目录 题目描述解题思路递归记忆化搜索动态规划另一种实现 题目描述 https://leetcode.cn/problems/coin-change/description/?envTypestudy-plan-v2&envIdtop-interview-150 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount …

考研规划,这么学上岸率比985的学霸还高!

我觉得985考研上岸率低是可以理解的 因为大家本科能考上985,那研究生大概率会报考和本学校差不多或者更高水平的院校,甚至清华北大都有人敢报,去实现自己本科没有实现的梦想。 而且985其实保研的比例很高,一般有30%的保研比例了…

亚马逊测评自养号技术全攻略:一站式解决方案

在跨境电商这行,产品测评可是个大问题。如果你的商品销量少,评价也不多,那买家就很难注意到你的产品,更别提下单购买了。毕竟,大家都喜欢跟风买那些已经有很多人好评的产品,而不是冒险尝试一个全新的。 我们…

基于JSP技术的社区疫情防控管理信息系统

你好呀,我是计算机学长猫哥!如果有相关需求,文末可以找到我的联系方式。 开发语言:JSP 数据库:MySQL 技术:JSPJavaBeans 工具:MyEclipse、Tomcat、Navicat 系统展示 首页 用户注册与登录界…

《大宅门》特别活动走进李良济,开启探寻中医药文化之旅!

《大宅门》话剧将于6月14-16日在苏州湾大剧院上演,为了让大家了解到中医药知识,6月2日,李良济携手苏州湾大剧院举办《大宅门》特别活动“探寻中医药文化之旅”! 6月2日下午,大家一起走进李良济,深度了解传统…

Django框架中级

Django框架中级 – 潘登同学的WEB框架 文章目录 Django框架中级 -- 潘登同学的WEB框架 中间件自定义中间件常用中间件process_view() 使用中间件进行URL过滤 Django生命周期生命周期分析 Django日志日志配置filter过滤器自定义filter 日志格式化formatter Django信号内置信号定…

51单片机STC89C52RC——1.1点亮一个LED

目录 STC单片机模块 LED模块 创建Keil项目 代码 效果 STC单片机模块 我们程序中要点亮的LED灯的位置如下图。 我们程序要用到的针脚如下图 LED模块 电路图如下 8个LED,全部点亮 每一bit位 都需要设置为0 二进制是0000 0000 。如果只点亮D1一个&#xff…

进口电动低温调节阀的作用-美国NOTON

进口电动低温调节阀在低温环境下的精确控制、广泛的工业应用、高效能设计、耐低温性和密封性、稳定性及可靠性以及安全性等方面发挥着重要作用。 进口电动低温调节阀的作用主要体现在以下几个方面: 低温环境下的精确控制: 进口电动低温调节阀是一种专为…

jenkins插件之Jdepend

JDepend插件是一个为构建生成JDepend报告的插件。 安装插件 JDepend Dashboard -->> 系统管理 -->> 插件管理 -->> Available plugins 搜索 Jdepend, 点击安装构建步骤新增执行shell #执行pdepend if docker exec phpfpm82 /tmp/composer/vendor/bin/pdepe…

怎么把wmv格式转换成mp4?四种将wmv转成MP4格式的方法

怎么把wmv格式转换成mp4?在微软操作系统中,我们经常会遇到wmv格式的视频文件。这种由微软开发的视频格式在微软平台上有很好的兼容性,但它也存在一些被忽视的缺点。首先,wmv格式支持数字版权管理,这意味着某些视频可能…

期权有用吗?期权都有哪些用途?

今天带你了解期权有用吗?期权都有哪些用途?期权和期货作为衍生工具,都有风险管理、资产配置和价格发现等功能。 期权有用吗? 期权作为一种衍生金融工具,具有多种用途和好处,对不同类型的投资者和市场参与者来说&#…

Ubuntu编译指定版本NVMe Cli工具

1.克隆nvme-cli的存储库(repository): git clone https://github.com/linux-nvme/nvme-cli.git2. 进入nvme-cli目录,并切换到指定版本: cd nvme-cli git checkout v1.93. 编译nvme-cli: make4. 安装nvme…

剪画小程序:图片去除文字,我用它只要10秒!

Hello,大家好呀!我是不会画画的小画~ 图片上的文字该如何去除? 在工作或者学习中,我们常常需要处理一些图片文件,比如扫描的文件、 电子文档等。有时候,图片上可能会有文字,这时候需要将图片…

鸿蒙开发:从入门到实战!

一,默认模版中是容器Row或者Column中添加一个Text文本,我们可以尝试一下修改它的内容和样式,对UI语法有一个初体验: // 文本内容 Text("沉默的闪客") // 字体大小 .fontSize(50) //背…

VS-qt中运行程序时报错:fatal error RC1015:cannot open include file ‘afxres.h‘

开发环境:VS2015 qt5.12.10 点击运行时报错如下: 搜索了下afxres.h文件,发现位置如下: 看样子是VS中少安装了部分模块导致的,,看了同事的电脑,该文件应该是在以下目录中的: 所…

从零开始:如何在直播应用中集成美颜SDK和美颜插件

本篇文章,小编将详细介绍如何从零开始,在直播应用中集成美颜SDK和美颜插件。 一、准备工作 确定需求 在开始集成美颜SDK之前,首先需要明确需求。考虑以下几个问题: 直播应用的目标用户是谁? 需要集成哪些美颜功能&…