Oracle中含有recover 状态的数据文件环境中,做异机恢复
背景:
我们在一些恢复测试案例中,会经常遇到一些奇怪的问题,其中有的是源端数据文件不规范而导致恢复过程出错,比较常见的错误有:
- 数据文件名称重复(如:/oradata1/user01.dbf 和 /oradata2/user01.dbf),这种情况下,我们在做恢复测试时候,如果往同一块盘中恢复数据文件,就会报错,需要我们重新rename 重名的datafile。
- 数据文件状态为recover,非online,通常发生在客户使用RAC环境,增加数据文件时候,错误的将datafile加到了本地磁盘,而发现错误后,又执行了offline datafile操作。
本文,主要测试,在数据库中,含有recover 状态的数据文件,如果做rman恢复测试?
1.创建测试表空间
SQL> CREATE TABLESPACE test DATAFILE '/u01/app/oracle/oradata/TEST/test01.dbf' size 10M autoextend on EXTENT MANAGEMENT LOCAL;Tablespace created.SQL> alter tablespace test add datafile '/u01/app/oracle/oradata/TEST/test02.dbf' size 10M;Tablespace altered.
2.在测试表空间中创建表
SQL> create table scott.test1 tablespace test as select * from dba_objects;Table created.SQL> select count(*) from scott.test1 ;COUNT(*)
----------78918
3.模拟offline datafile
3.1 执行offline datafile
SQL> set line222
SQL> col name for a80
SQL> select file#,name,status from v$datafile;FILE# NAME STATUS
---------- -------------------------------------------------------------------------------- --------------1 /u01/app/oracle/oradata/TEST/system01.dbf SYSTEM2 /u01/app/oracle/oradata/TEST/sysaux01.dbf ONLINE3 /u01/app/oracle/oradata/TEST/undotbs01.dbf ONLINE4 /u01/app/oracle/oradata/TEST/users01.dbf ONLINE5 /u01/app/oracle/oradata/TEST/example01.dbf ONLINE6 /u01/app/oracle/oradata/TEST/test01.dbf ONLINE7 /u01/app/oracle/oradata/TEST/test02.dbf ONLINESQL> alter database datafile 7 offline;Database altered.SQL> select file#,name,status from v$datafile;FILE# NAME STATUS
---------- -------------------------------------------------------------------------------- --------------1 /u01/app/oracle/oradata/TEST/system01.dbf SYSTEM2 /u01/app/oracle/oradata/TEST/sysaux01.dbf ONLINE3 /u01/app/oracle/oradata/TEST/undotbs01.dbf ONLINE4 /u01/app/oracle/oradata/TEST/users01.dbf ONLINE5 /u01/app/oracle/oradata/TEST/example01.dbf ONLINE6 /u01/app/oracle/oradata/TEST/test01.dbf ONLINE7 /u01/app/oracle/oradata/TEST/test02.dbf RECOVER7 rows selected.
此时,我们可以看到datafile 7 的状态已经变为recover。
3.2 再次查询,报错
SQL> select count(*) from scott.test1 ;
select count(*) from scott.test1*
ERROR at line 1:
ORA-00376: file 7 cannot be read at this time
ORA-01110: data file 7: '/u01/app/oracle/oradata/TEST/test02.dbf'
3.3 继续创建测试表
SQL> create table scott.test2 tablespace test as select * from dba_objects;Table created.SQL> select count(*) from scott.test2 ;COUNT(*)
----------78919
3.4 手动删除归档日志
SQL> alter system switch logfile ;System altered.SQL> /System altered.SQL> alter system checkpoint;System altered.-- 手动删除归档日志
[oracle@ora11204 ~]$ rm -rf 1_*
3.5 继续插入数据,切换日志
SQL> insert into scott.test2 select * from dba_objects;78919 rows created.SQL> select count(*) from scott.test2 ;COUNT(*)
----------157838SQL> alter system switch logfile ;System altered.SQL> /System altered.SQL> alter system checkpoint;System altered.
结论:虽然datafile 7 的状态变成了recover ,但是受影响的只是原来的表test1,而新表test2不受影响,可以继续写入。 其实也就是说,如果offline的datafile中不含有对象,那么对数据的使用,没有影响。
3.6 尝试recover datafile 7
SQL> recover datafile 7;
ORA-00279: change 4592370 generated at 07/09/2022 12:38:37 needed for thread 1
ORA-00289: suggestion : /home/oracle/1_37_1104664055.dbf
ORA-00280: change 4592370 for thread 1 is in sequence #37Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
AUTO
ORA-00308: cannot open archived log '/home/oracle/1_37_1104664055.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3ORA-00308: cannot open archived log '/home/oracle/1_37_1104664055.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
结论:这个时候,如果我们想去recover datafile 7,恢复正常的online状态,已经不行了,因为归档日志都已经被手动删除了。
所以正确的做法应该是: 在3.1手动执行offline datafile之后,立即做recover datafile,这样不管到什么时候,都可以online datafile,即使归档日志已经被删除。
此时我们的数据库中就包含了一个recover 状态的数据文件,那么我们接下来看,如何备份恢复?
4. 模拟备份恢复
4.1 rman备份
-- 备份前,先删掉expired archivelog
[oracle@ora11204 backup]$ rman target /Recovery Manager: Release 11.2.0.4.0 - Production on Sat Jul 9 12:47:26 2022Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.connected to target database: LHR11G (DBID=2007947551)RMAN> crosscheck archivelog all;RMAN> delete expired archivelog all;
Do you really want to delete the above objects (enter YES or NO)? yes
deleted archived log
archived log file name=/home/oracle/1_18_1104664055.dbf RECID=30 STAMP=1107010872
deleted archived log
archived log file name=/home/oracle/1_19_1104664055.dbf RECID=31 STAMP=1107084082
deleted archived log
archived log file name=/home/oracle/1_20_1104664055.dbf RECID=32 STAMP=1107084317
deleted archived log
archived log file name=/home/oracle/1_21_1104664055.dbf RECID=33 STAMP=1107248395
deleted archived log
archived log file name=/home/oracle/1_23_1104664055.dbf RECID=35 STAMP=1107248458
deleted archived log
archived log file name=/home/oracle/1_24_1104664055.dbf RECID=36 STAMP=1107248477
deleted archived log
archived log file name=/home/oracle/1_25_1104664055.dbf RECID=37 STAMP=1107248494
deleted archived log
archived log file name=/home/oracle/1_26_1104664055.dbf RECID=38 STAMP=1107248708
deleted archived log
archived log file name=/home/oracle/1_27_1104664055.dbf RECID=39 STAMP=1107249210
deleted archived log
archived log file name=/home/oracle/1_28_1104664055.dbf RECID=40 STAMP=1107249384
deleted archived log
archived log file name=/home/oracle/1_29_1104664055.dbf RECID=41 STAMP=1107594979
deleted archived log
archived log file name=/home/oracle/1_30_1104664055.dbf RECID=42 STAMP=1107965313
deleted archived log
archived log file name=/home/oracle/1_31_1104664055.dbf RECID=43 STAMP=1109430200
deleted archived log
archived log file name=/home/oracle/1_32_1104664055.dbf RECID=44 STAMP=1109400986
deleted archived log
archived log file name=/home/oracle/1_33_1104664055.dbf RECID=45 STAMP=1109514747
deleted archived log
archived log file name=/home/oracle/1_34_1104664055.dbf RECID=46 STAMP=1109515327
deleted archived log
archived log file name=/home/oracle/1_35_1104664055.dbf RECID=47 STAMP=1109593810
deleted archived log
archived log file name=/home/oracle/1_36_1104664055.dbf RECID=48 STAMP=1109593862
deleted archived log
archived log file name=/home/oracle/1_37_1104664055.dbf RECID=49 STAMP=1109594665
deleted archived log
archived log file name=/home/oracle/1_38_1104664055.dbf RECID=50 STAMP=1109594666
Deleted 20 EXPIRED objects-- 正式备份
RMAN> run{
2> allocate channel c1 device type disk;
3> backup database filesperset 3 format '/home/oracle/backup/db_%d_%T_%U';
4> backup archivelog all format '/home/oracle/backup/arc_%t_%s';
5> backup current controlfile format '/home/oracle/backup/cntrl_%s_%p_%s';
6> release channel c1;
7> } released channel: ORA_DISK_1
allocated channel: c1
channel c1: SID=33 device type=DISKStarting backup at 2022-07-09 12:48:34
channel c1: starting full datafile backup set
channel c1: specifying datafile(s) in backup set
input datafile file number=00001 name=/u01/app/oracle/oradata/TEST/system01.dbf
channel c1: starting piece 1 at 2022-07-09 12:48:34
channel c1: finished piece 1 at 2022-07-09 12:48:41
piece handle=/home/oracle/backup/db_LHR11G_20220709_4k1264p2_1_1 tag=TAG20220709T124834 comment=NONE
channel c1: backup set complete, elapsed time: 00:00:07
channel c1: starting full datafile backup set
channel c1: specifying datafile(s) in backup set
input datafile file number=00003 name=/u01/app/oracle/oradata/TEST/undotbs01.dbf
input datafile file number=00005 name=/u01/app/oracle/oradata/TEST/example01.dbf
input datafile file number=00007 name=/u01/app/oracle/oradata/TEST/test02.dbf
channel c1: starting piece 1 at 2022-07-09 12:48:41
channel c1: finished piece 1 at 2022-07-09 12:48:44
piece handle=/home/oracle/backup/db_LHR11G_20220709_4l1264p9_1_1 tag=TAG20220709T124834 comment=NONE
channel c1: backup set complete, elapsed time: 00:00:03
channel c1: starting full datafile backup set
channel c1: specifying datafile(s) in backup set
input datafile file number=00002 name=/u01/app/oracle/oradata/TEST/sysaux01.dbf
input datafile file number=00004 name=/u01/app/oracle/oradata/TEST/users01.dbf
input datafile file number=00006 name=/u01/app/oracle/oradata/TEST/test01.dbf
channel c1: starting piece 1 at 2022-07-09 12:48:44
channel c1: finished piece 1 at 2022-07-09 12:48:47
piece handle=/home/oracle/backup/db_LHR11G_20220709_4m1264pc_1_1 tag=TAG20220709T124834 comment=NONE
channel c1: backup set complete, elapsed time: 00:00:03
channel c1: starting full datafile backup set
channel c1: specifying datafile(s) in backup set
including current control file in backup set
including current SPFILE in backup set
channel c1: starting piece 1 at 2022-07-09 12:48:48
channel c1: finished piece 1 at 2022-07-09 12:48:49
piece handle=/home/oracle/backup/db_LHR11G_20220709_4n1264pf_1_1 tag=TAG20220709T124834 comment=NONE
channel c1: backup set complete, elapsed time: 00:00:01
Finished backup at 2022-07-09 12:48:49Starting backup at 2022-07-09 12:48:50
current log archived
channel c1: starting archived log backup set
channel c1: specifying archived log(s) in backup set
input archived log thread=1 sequence=39 RECID=51 STAMP=1109594808
input archived log thread=1 sequence=40 RECID=52 STAMP=1109594809
input archived log thread=1 sequence=41 RECID=53 STAMP=1109594930
channel c1: starting piece 1 at 2022-07-09 12:48:50
channel c1: finished piece 1 at 2022-07-09 12:48:51
piece handle=/home/oracle/backup/arc_1109594930_152 tag=TAG20220709T124850 comment=NONE
channel c1: backup set complete, elapsed time: 00:00:01
Finished backup at 2022-07-09 12:48:51Starting backup at 2022-07-09 12:48:51
channel c1: starting full datafile backup set
channel c1: specifying datafile(s) in backup set
including current control file in backup set
channel c1: starting piece 1 at 2022-07-09 12:48:52
channel c1: finished piece 1 at 2022-07-09 12:48:53
piece handle=/home/oracle/backup/cntrl_153_1_153 tag=TAG20220709T124851 comment=NONE
channel c1: backup set complete, elapsed time: 00:00:01
Finished backup at 2022-07-09 12:48:53released channel: c1
4.2. 恢复DB
利用备份做异机恢复(拷贝备份、pfile文件、密码文件等过程省略…)
4.2.1 启动数据库至nomount状态
SQL> startup nomount
ORACLE instance started.Total System Global Area 1068937216 bytes
Fixed Size 2260088 bytes
Variable Size 331350920 bytes
Database Buffers 729808896 bytes
Redo Buffers 5517312 bytes
4.2.2 恢复控制文件
[oracle@ora11204 backup]$ rman target /Recovery Manager: Release 11.2.0.4.0 - Production on Sat Jul 9 12:51:00 2022Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.connected to target database: LHR11G (not mounted)RMAN> restore controlfile from '/home/oracle/backup/cntrl_153_1_153';Starting restore at 2022-07-09 12:51:01
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=19 device type=DISKchannel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/u01/app/oracle/oradata/TEST/control01.ctl
Finished restore at 2022-07-09 12:51:03
4.2.3 mount数据库
RMAN> alter database mount;database mounted
released channel: ORA_DISK_1
4.2.4 restore database
RMAN> restore database;Starting restore at 2022-07-09 12:51:23
Starting implicit crosscheck backup at 2022-07-09 12:51:23
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=19 device type=DISK
Crosschecked 22 objects
Finished implicit crosscheck backup at 2022-07-09 12:51:24Starting implicit crosscheck copy at 2022-07-09 12:51:24
using channel ORA_DISK_1
Finished implicit crosscheck copy at 2022-07-09 12:51:24searching for all files in the recovery area
cataloging files...
no files catalogedusing channel ORA_DISK_1channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to /u01/app/oracle/oradata/TEST/system01.dbf
channel ORA_DISK_1: reading from backup piece /home/oracle/backup/db_LHR11G_20220709_4k1264p2_1_1
channel ORA_DISK_1: piece handle=/home/oracle/backup/db_LHR11G_20220709_4k1264p2_1_1 tag=TAG20220709T124834
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00003 to /u01/app/oracle/oradata/TEST/undotbs01.dbf
channel ORA_DISK_1: restoring datafile 00005 to /u01/app/oracle/oradata/TEST/example01.dbf
channel ORA_DISK_1: restoring datafile 00007 to /u01/app/oracle/oradata/TEST/test02.dbf
channel ORA_DISK_1: reading from backup piece /home/oracle/backup/db_LHR11G_20220709_4l1264p9_1_1
channel ORA_DISK_1: piece handle=/home/oracle/backup/db_LHR11G_20220709_4l1264p9_1_1 tag=TAG20220709T124834
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00002 to /u01/app/oracle/oradata/TEST/sysaux01.dbf
channel ORA_DISK_1: restoring datafile 00004 to /u01/app/oracle/oradata/TEST/users01.dbf
channel ORA_DISK_1: restoring datafile 00006 to /u01/app/oracle/oradata/TEST/test01.dbf
channel ORA_DISK_1: reading from backup piece /home/oracle/backup/db_LHR11G_20220709_4m1264pc_1_1
channel ORA_DISK_1: piece handle=/home/oracle/backup/db_LHR11G_20220709_4m1264pc_1_1 tag=TAG20220709T124834
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
Finished restore at 2022-07-09 12:51:33
4.2.5 在RMAN中执行recover database
RMAN> recover database;Starting recover at 2022-07-09 12:51:49
using channel ORA_DISK_1starting media recoveryarchived log for thread 1 with sequence 39 is already on disk as file /home/oracle/1_39_1104664055.dbf
archived log for thread 1 with sequence 40 is already on disk as file /home/oracle/1_40_1104664055.dbf
archived log for thread 1 with sequence 41 is already on disk as file /home/oracle/1_41_1104664055.dbf
Oracle Error:
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01152: file 1 was not restored from a sufficiently old backup
ORA-01110: data file 1: '/u01/app/oracle/oradata/TEST/system01.dbf'RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 07/09/2022 12:51:49
RMAN-06053: unable to perform media recovery because of missing log
RMAN-06025: no backup of archived log for thread 1 with sequence 38 and starting SCN of 4593111 found to restore
RMAN-06025: no backup of archived log for thread 1 with sequence 37 and starting SCN of 4591558 found to restore
结论:我们直接用传统的方式,在rman中执行recover database,会报错,需要37、38 两个已经被删除的archive log,无法完成recover。
4.2.6 在SQLPLUS中执行recover database
-- 先恢复归档全备中的归档日志
RMAN> restore archivelog from logseq 39 thread 1;Starting restore at 2022-07-09 13:02:02
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=1 device type=DISKchannel ORA_DISK_1: starting archived log restore to default destination
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=39
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=40
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=41
channel ORA_DISK_1: reading from backup piece /home/oracle/backup/arc_1109594930_152
channel ORA_DISK_1: piece handle=/home/oracle/backup/arc_1109594930_152 tag=TAG20220709T124850
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 2022-07-09 13:02:03-- 执行 recover database操作
SQL> recover database using backup controlfile until cancel;
ORA-00279: change 4592370 generated at 07/09/2022 12:38:37 needed for thread 1
ORA-00289: suggestion : /home/oracle/1_37_1104664055.dbf
ORA-00280: change 4592370 for thread 1 is in sequence #37
结论:我们在sqlplus中执行recover database,也会报错,需要37、38 两个已经被删除的archive log,无法完成recover。
4.3. 解决办法
4.3.1 查询数据文件状态
SQL> set line222
SQL> col name for a60
SQL> SELECT a.FILE#,a.NAME,a.RECOVER,a.CHECKPOINT_CHANGE#,status FROM v$datafile_header a;FILE# NAME RECOVE CHECKPOINT_CHANGE# STATUS
---------- --------------------------------------------------------- ------ ------------------ -------------1 /u01/app/oracle/oradata/TEST/system01.dbf 4593921 ONLINE2 /u01/app/oracle/oradata/TEST/sysaux01.dbf 4593926 ONLINE3 /u01/app/oracle/oradata/TEST/undotbs01.dbf 4593924 ONLINE4 /u01/app/oracle/oradata/TEST/users01.dbf 4593926 ONLINE5 /u01/app/oracle/oradata/TEST/example01.dbf 4593924 ONLINE6 /u01/app/oracle/oradata/TEST/test01.dbf 4593926 ONLINE7 /u01/app/oracle/oradata/TEST/test02.dbf 4592370 ONLINE7 rows selected.SQL> select file#,name,status from v$datafile;FILE# NAME STATUS
---------- --------------------------------------------------------- --------------1 /u01/app/oracle/oradata/TEST/system01.dbf SYSTEM2 /u01/app/oracle/oradata/TEST/sysaux01.dbf ONLINE3 /u01/app/oracle/oradata/TEST/undotbs01.dbf ONLINE4 /u01/app/oracle/oradata/TEST/users01.dbf ONLINE5 /u01/app/oracle/oradata/TEST/example01.dbf ONLINE6 /u01/app/oracle/oradata/TEST/test01.dbf ONLINE7 /u01/app/oracle/oradata/TEST/test02.dbf RECOVER7 rows selected.
我们可以看到在vdatafileheader视图中,datafile7状态仍然为online,在vdatafile_header视图中,datafile 7 状态仍然为online,在vdatafileheader视图中,datafile7状态仍然为online,在vdatafile中状态为recover。
4.3.2 执行offline datafile 操作
SQL> alter database datafile 7 offline drop;Database altered.SQL> set line222
SQL> col name for a60
SQL> SELECT a.FILE#,a.NAME,a.RECOVER,a.CHECKPOINT_CHANGE#,status FROM v$datafile_header a;FILE# NAME RECOVE CHECKPOINT_CHANGE# STATUS
---------- ---------------------------------------------------- ------ ------------------ --------------1 /u01/app/oracle/oradata/TEST/system01.dbf 4593921 ONLINE2 /u01/app/oracle/oradata/TEST/sysaux01.dbf 4593926 ONLINE3 /u01/app/oracle/oradata/TEST/undotbs01.dbf 4593924 ONLINE4 /u01/app/oracle/oradata/TEST/users01.dbf 4593926 ONLINE5 /u01/app/oracle/oradata/TEST/example01.dbf 4593924 ONLINE6 /u01/app/oracle/oradata/TEST/test01.dbf 4593926 ONLINE7 /u01/app/oracle/oradata/TEST/test02.dbf 4592370 OFFLINE
SQL> recover database using backup controlfile until cancel;
ORA-00279: change 4593921 generated at 07/09/2022 12:48:34 needed for thread 1
ORA-00289: suggestion : /home/oracle/1_41_1104664055.dbf
ORA-00280: change 4593921 for thread 1 is in sequence #41Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
AUTO
ORA-00279: change 4593946 generated at 07/09/2022 12:48:50 needed for thread 1
ORA-00289: suggestion : /home/oracle/1_42_1104664055.dbf
ORA-00280: change 4593946 for thread 1 is in sequence #42
ORA-00278: log file '/home/oracle/1_41_1104664055.dbf' no longer needed for
this recoveryORA-00308: cannot open archived log '/home/oracle/1_42_1104664055.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
结论:recover不在需要37、38 两个已经被删除的archive log,正常完成recover 操作。
4.3.3 查看redo logfile & tempfile
-- 确保redo logfile & tempfile路径存在或者rename file
SQL> select member from v$logfile;MEMBER
------------------------------------------------------------------------------------------------------------
/u01/app/oracle/oradata/TEST/redo01.log
/u01/app/oracle/oradata/TEST/redo02.log
/u01/app/oracle/oradata/TEST/redo03.logSQL> select name from v$tempfile;NAME
------------------------------------------------------------
/u01/app/oracle/oradata/TEST/temp01.dbf
4.3.4 open数据库
SQL> alter database open resetlogs;Database altered.
4.4 验证数据
SQL> select count(*) from scott.test2 ;COUNT(*)
----------157838SQL> select count(*) from scott.test1 ;
select count(*) from scott.test1*
ERROR at line 1:
ORA-00376: file 7 cannot be read at this time
ORA-01110: data file 7: '/u01/app/oracle/oradata/TEST/test02.dbf'
4.5 尝试删除datafile 7
SQL> alter tablespace test drop datafile '/u01/app/oracle/oradata/TEST/test02.dbf';
alter tablespace test drop datafile '/u01/app/oracle/oradata/TEST/test02.dbf'
*
ERROR at line 1:
ORA-03264: cannot drop offline datafile of locally managed tablespace
结论:datafile 7 删除报错,如果一定要处理的话,可以通过bbed的方式去修复后删除。
相关文章:

Oracle中含有recover 状态的数据文件环境中,做异机恢复
背景: 我们在一些恢复测试案例中,会经常遇到一些奇怪的问题,其中有的是源端数据文件不规范而导致恢复过程出错,比较常见的错误有: 数据文件名称重复(如:/oradata1/user01.dbf 和 /oradata2/us…...

图像识别模型
一、数据准备 首先要做一些数据准备方面的工作:一是把数据集切分为训练集和验证集, 二是转换为tfrecord 格式。在data_prepare/文件夹中提供了会用到的数据集和代码。首先要将自己的数据集切分为训练集和验证集,训练集用于训练模型…...

[零刻]EQ12 N100 迷你主机:从开箱到安装ESXi+虚拟机
开箱先上图:配置详情:EQ12采用了Intel最新推出的N100系列的处理,超低的功耗,以及出色的CPU性能用来做软路由或者是All in one 相当不错,CPU带有主动散热风扇,在长期运行下散热完全不用担心,性价…...

MongoDB基础
优质博客 IT-BLOG-CN 一、简介 MongoDB是一个强大的分布式文件存储的NoSQL数据库,天然支持高可用、分布式和灵活设计。由C编写,运行稳定,性能高。为WEB应用提供可扩展的高性能数据存储解决方案。主要解决关系型数据库数据量大,并…...

【Linux】Linux基本指令(下)
前言: 紧接上期【Linux】基本指令(上)的学习,今天我们继续学习基本指令操作,深入探讨指令的基本知识。 目录 (一)常用指令 👉more指令 👉less指令(重要&…...

基于uniapp+u-view开发小程序【技术点整理】
一、上传图片 1.实现效果: 2.具体代码: <template><view><view class"imgbox"><view>职业证书</view><!-- 上传图片 --><u-upload :fileList"fileList1" afterRead"afterRead"…...

投稿指南【NO.7】目标检测论文写作模板(初稿)
中文标题(名词性短语,少于20字,尽量不使用外文缩写词)张晓敏1,作者1,2***,作者2**,作者2*(通信作者右上标*)1中国科学院上海光学精密机械研究所空间激光传输与探测技术重…...

【绘图】比Matplotlib更强大:ProPlot
✅作者简介:在读博士,伪程序媛,人工智能领域学习者,深耕机器学习,交叉学科实践者,周更前沿文章解读,提供科研小工具,分享科研经验,欢迎交流!📌个人…...

经典七大比较排序算法 ·上
经典七大比较排序算法 上1 选择排序1.1 算法思想1.2 代码实现1.3 选择排序特性2 冒泡排序2.1 算法思想2.2 代码实现2.3 冒泡排序特性3 堆排序3.1 堆排序特性:4 快速排序4.1 算法思想4.2 代码实现4.3 快速排序特性5 归并排序5.1 算法思想5.2 代码实现5.3 归并排序特性…...

【网络安全工程师】从零基础到进阶,看这一篇就够了
学前感言 1.这是一条需要坚持的道路,如果你只有三分钟的热情那么可以放弃往下看了。 2.多练多想,不要离开了教程什么都不会,最好看完教程自己独立完成技术方面的开发。 3.有问题多google,baidu…我们往往都遇不到好心的大神,谁…...

素描-基础
# 如何练习排线第一次摸板子需要来回的排线,两点然后画一条线贯穿两点画直的去练 练线的定位叫做穿针引线法或者两点一线法 练完竖线练横线 按照这样去练顺畅 直线曲线的画法 直线可以按住shift键 练习勾线稿 把线稿打开降低透明度去勾线尽量一笔的去练不要压…...

Elasticsearch:高级数据类型介绍
在我之前的文章 “Elasticsearch:一些有趣的数据类型”,我已经介绍了一下很有趣的数据类型。在今天的文章中,我再进一步介绍一下高级的数据类型,虽然这里的数据类型可能和之前的一些数据类型有所重复。即便如此,我希望…...

Golang每日一练(leetDay0012)
目录 34. 查找元素首末位置 Find-first-and-last-position-of-element-in-sorted-array 🌟🌟 35. 搜索插入位置 Search Insert Position 🌟 36. 有效的数独 Valid Sudoku 🌟🌟 🌟 每日一练刷题专栏 …...

Web前端:6种基本的前端编程语言
如果你想在前端web开发方面开始职业生涯,学习JavaScript是必须的。它是最受欢迎的编程语言,它功能广泛,功能强大。但JavaScript并不是你唯一需要知道的语言。HTML和CSS对于前端开发至关重要。他们将帮助你开发用户友好的网站和应用程序。什么…...

九【springboot】
Springboot一 Spring Boot是什么二 SpringBoot的特点1.独立运行的spring项目三 配置开发环境四 配置开发环境五 创建 Spring Boot 项目1.在 IntelliJ IDEA 欢迎页面左侧选择 Project ,然后在右侧选择 New Project,如下图2.在新建工程界面左侧,…...

《程序员成长历程的四个阶段》
阶段一:不知道自己不知道(Unconscious incompetence) 大学期间,我和老师做过一些小项目,自认为自己很牛,当时还去过一些公司面试做兼职,但是就是不知道为什么没有回复。那个时期的我,压根不知道自己不知道&…...

【SpringBoot】Spring data JPA的多数据源实现
一、主流的多数据源支持方式 将数据源对象作为参数,传递到调用方法内部,这种方式增加额外的编码。将Repository操作接口分包存放,Spring扫描不同的包,自动注入不同的数据源。这种方式实现简单,也是一种“约定大于配置…...

uni-app基础知识介绍
uni-app的基础知识介绍 1、在第一次将代码运行在微信开发者工具的时候,应该进行如下的配置: (1)将微信开发者工具路径进行配置; [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lbyk5Jw2-16790251840…...

Word2010(详细布局解释)
目录一、界面介绍二、选项卡1、文件选项卡(保存、打开、新建、打印、保存并发送、选项)2、开始选项卡(剪贴板、字体、段落、样式、编辑)3、插入选项卡(页、表格、插图、链接、页眉页脚、文本、符号)4、页面…...

Spring如何实现Quartz的自动配置
Spring如何实现Quartz的自动配置1. 开启Quartz自动配置2. Quartz自动配置的实现过程2.1 核心类图2.2 核心方法3. 任务调度执行3.1 大致流程3.2 调整线程池的大小如果想在应用中使用Quartz任务调度功能,可以通过Spring Boot实现Quartz的自动配置。以下介绍如何开启Qu…...

计算机组成原理——作业四
一. 单选题(共11题,33分) 1. (单选题, 3分)四片74181 ALU和一片74182 CLA器件相配合,具有如下进位传递功能:________。 A. 行波进位B. 组内先行进位,组间行波进位C. 组内先行进位,组间先行进位D. 组内行波进位,组间先行进位 我的答案: C 3…...

2023前端面试题(经典面试题)
经典面试题Vue2.0 和 Vue3.0 有什么区别?vue中计算属性和watch以及methods的区别?单页面应用和多页面应用区别及优缺点?说说 Vue 中 CSS scoped 的原理?谈谈对Vue中双向绑定的理解?为什么vue2和vue3语法不可以混用&…...

【Linux内网穿透】使用SFTP工具快速实现内网穿透
文章目录内网穿透简介1. 查看地址2.局域网测试连接3.创建tcp隧道3.1. 安装cpolar4.远程访问5.固定TCP地址内网穿透简介 是一种通过公网将内网服务暴露出来的技术,可以使得内网服务可以被外网访问。以下是内网穿透的一些应用: 远程控制:通过内…...

SQL语句性能分析
1. 数据库服务器的优化步骤 当我们遇到数据库调优问题的时候,该如何思考呢?这里把思考的流程整理成下面这张图。 整个流程划分成了 观察(Show status) 和 行动(Action) 两个部分。字母 S 的部分代表观察&…...

【K3s】第28篇 详解 k3s-killall.sh 脚本
目录 k3s-killall.sh 脚本 k3s-killall.sh 脚本 为了在升级期间实现高可用性,当 K3s 服务停止时,K3s 容器会继续运行。 要停止所有的 K3s 容器并重置容器的状态,可以使用k3s-killall.sh脚本。 killall 脚本清理容器、K3s 目录和网络组件&a…...

生成时序异常样本-学习记录-未完待续
1.GAN&VAE|时间序列生成及异常注入那些事儿:主要讲了数据增广,用GAN、WGAN、DCGAN、VAE,有给几个代码的github的链接,非常有用 2.时序异常检测综述,写的非常好 3.自编码器原理讲解,后面还附…...

自定义类型的超详细讲解ᵎᵎ了解结构体和位段这一篇文章就够了ᵎ
目录 1.结构体的声明 1.1基础知识 1.2结构体的声明 1.3结构体的特殊声明 1.4结构体的自引用 1.5结构体变量的定义和初始化 1.6结构体内存对齐 那对齐这么浪费空间,为什么要对齐 1.7修改默认对齐数 1.8结构体传参 2.位段 2.1什么是位段 2.2位段的内存分配…...

【五】springboot启动源码 - onRefresh
onRefresh 源码解析 Initialize other special beans in specific context subclasses. 核心是创建一个web服务容器(并未在这个方法启动) createWebServer第182行,获取ServletWebServerFactory的具体实现 getWebServerFactory方法ÿ…...

带你一文透彻学习【PyTorch深度学习实践】分篇——线性回归(训练周期:前馈、反馈、权重更新)
“梦想使你迷醉,距离就成了快乐;追求使你充实,失败和成功都是伴奏;当生命以美的形式证明其价值的时候,幸福是享受,痛苦也是享受。” --------史铁生《好运设计》 🎯作者主页:追光者♂🔥 🌸个人简介:计算机专业硕士研究生💖、2022年CSDN博客之星人工…...

【前端八股文】浏览器系列:性能优化——HTML、CSS、JS、渲染优化
文章目录HTMLCSSCSS加载会造成阻塞吗JavaScript渲染优化参考本系列目录:【前端八股文】目录总结 是以《代码随想录》八股文为主的笔记。详情参考在文末。 代码随想录的博客_CSDN博客-leecode题解,ACM题目讲解,代码随想录领域博主 性能优化,从以下几个方…...