Oracle中含有recover 状态的数据文件环境中,做异机恢复

背景:

我们在一些恢复测试案例中,会经常遇到一些奇怪的问题,其中有的是源端数据文件不规范而导致恢复过程出错,比较常见的错误有:

  1. 数据文件名称重复(如:/oradata1/user01.dbf 和 /oradata2/user01.dbf),这种情况下,我们在做恢复测试时候,如果往同一块盘中恢复数据文件,就会报错,需要我们重新rename 重名的datafile。
  2. 数据文件状态为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                                        SYSTEM
         2 /u01/app/oracle/oradata/TEST/sysaux01.dbf                                        ONLINE
         3 /u01/app/oracle/oradata/TEST/undotbs01.dbf                                       ONLINE
         4 /u01/app/oracle/oradata/TEST/users01.dbf                                         ONLINE
         5 /u01/app/oracle/oradata/TEST/example01.dbf                                       ONLINE
         6 /u01/app/oracle/oradata/TEST/test01.dbf                                          ONLINE
         7 /u01/app/oracle/oradata/TEST/test02.dbf                                          ONLINE


SQL> 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                                        SYSTEM
         2 /u01/app/oracle/oradata/TEST/sysaux01.dbf                                        ONLINE
         3 /u01/app/oracle/oradata/TEST/undotbs01.dbf                                       ONLINE
         4 /u01/app/oracle/oradata/TEST/users01.dbf                                         ONLINE
         5 /u01/app/oracle/oradata/TEST/example01.dbf                                       ONLINE
         6 /u01/app/oracle/oradata/TEST/test01.dbf                                          ONLINE
         7 /u01/app/oracle/oradata/TEST/test02.dbf                                          RECOVER

7 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(*)
----------
    157838

SQL> 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 #37

Specify 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: 3

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: 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 2022

Copyright (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=DISK

Starting 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:49

Starting 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:51

Starting 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:53

released 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 2022

Copyright (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=DISK

channel 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:24

Starting 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:24

searching for all files in the recovery area
cataloging files...
no files cataloged

using channel ORA_DISK_1

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 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_1

starting media recovery

archived 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=DISK

channel 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 ONLINE
         2 /u01/app/oracle/oradata/TEST/sysaux01.dbf                                   4593926 ONLINE
         3 /u01/app/oracle/oradata/TEST/undotbs01.dbf                                  4593924 ONLINE
         4 /u01/app/oracle/oradata/TEST/users01.dbf                                    4593926 ONLINE
         5 /u01/app/oracle/oradata/TEST/example01.dbf                                  4593924 ONLINE
         6 /u01/app/oracle/oradata/TEST/test01.dbf                                     4593926 ONLINE
         7 /u01/app/oracle/oradata/TEST/test02.dbf                                     4592370 ONLINE

7 rows selected.

SQL> select file#,name,status  from v$datafile;

     FILE# NAME                                                      STATUS
---------- --------------------------------------------------------- --------------
         1 /u01/app/oracle/oradata/TEST/system01.dbf                 SYSTEM
         2 /u01/app/oracle/oradata/TEST/sysaux01.dbf                 ONLINE
         3 /u01/app/oracle/oradata/TEST/undotbs01.dbf                ONLINE
         4 /u01/app/oracle/oradata/TEST/users01.dbf                  ONLINE
         5 /u01/app/oracle/oradata/TEST/example01.dbf                ONLINE
         6 /u01/app/oracle/oradata/TEST/test01.dbf                   ONLINE
         7 /u01/app/oracle/oradata/TEST/test02.dbf                   RECOVER

7 rows selected.

我们可以看到在v d a t a f i l e h e a d e r 视图中, d a t a f i l e 7 状态仍然为 o n l i n e , 在 v datafile_header视图中,datafile 7 状态仍然为online,在v datafileheader视图中,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 ONLINE
         2 /u01/app/oracle/oradata/TEST/sysaux01.dbf                              4593926 ONLINE
         3 /u01/app/oracle/oradata/TEST/undotbs01.dbf                             4593924 ONLINE
         4 /u01/app/oracle/oradata/TEST/users01.dbf                               4593926 ONLINE
         5 /u01/app/oracle/oradata/TEST/example01.dbf                             4593924 ONLINE
         6 /u01/app/oracle/oradata/TEST/test01.dbf                                4593926 ONLINE
         7 /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 #41


Specify 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 recovery


ORA-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.log

SQL> 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(*)
----------
    157838

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'

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的方式去修复后删除。

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

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

相关文章

OpenCV入门(十八)快速学会OpenCV 17 直线检测

OpenCV入门&#xff08;十八&#xff09;快速学会OpenCV 17 直线检测1.霍夫直线变换概述2.霍夫变换原理3.操作实例3.1 HoughLines函数3.2 HoughLinesP函数作者&#xff1a;Xiou 1.霍夫直线变换概述 霍夫变换是一种在图像中寻找直线、圆形以及其他简单形状的方法。霍夫变换采用…

HTML5庆祝生日蛋糕烟花特效

HTML5庆祝生日蛋糕烟花特效 <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>HTML5 Birthday Cake Fireworks</title><style>canvas {position: absolute;top: 0;left: 0;z-index: -1;}</style> </h…

css + js 超好看的消息提示

先看图 css 使用了layui&#xff0c;直接在官网下载引入即可 实现的功能 自定义消息弹出位置自定义消息类型自定义消息关闭时间消息弹出关闭动画 <style>.message {width: 300px;/* background-color: rgba(0, 0, 0, 0.2); */background-color: rgba(255, 255, 255…

Linux - 进程控制(创建和终止)

1.进程创建fork函数初识 在linux中fork函数时非常重要的函数&#xff0c;它从已存在进程中创建一个新进程。新进程为子进程&#xff0c;而原进程为父进程。返回值&#xff1a;子进程返回0&#xff0c;父进程返回子进程id&#xff0c;出错返回-1getpid()获取子进程id&#xff0c…

【Linux】进程优先级 环境变量

进程优先级 环境变量 一、进程优先级1、基本概念2、查看以及修改系统进程的优先级3、一些其他的关于进程优先级的指令和函数调用4、与进程优先级有关的一些进程性质二、环境变量1、基本概念2、和环境变量相关的命令3、Linux中的常见环境变量介绍4、环境变量的组织方式以及在C代…

人脸识别经典网络-MTCNN(含Python源码实现)

人脸检测-mtcnn 本文参加新星计划人工智能赛道&#xff1a;https://bbs.csdn.net/topics/613989052 文章目录人脸检测-mtcnn1. 人脸检测1.1 人脸检测概述1.2 人脸检测的难点1.3 人脸检测的应用场景2. mtcnn2.1 mtcnn概述2.2 mtcnn的网络结构2.3 图像金字塔2.4 P-Net2.5 R-Net2…

蓝桥杯刷题冲刺 | 倒计时20天

作者&#xff1a;指针不指南吗 专栏&#xff1a;蓝桥杯倒计时冲刺 &#x1f43e;马上就要蓝桥杯了&#xff0c;最后的这几天尤为重要&#xff0c;不可懈怠哦&#x1f43e; 文章目录1.铁路与公路2.数字反转3.奖学金4.求阶乘1.铁路与公路 题目 链接&#xff1a; 4074. 铁路与公路…

论文阅读《Point NeRF:Point-based Neural Radiance Fileds》

论文地址&#xff1a;https://arxiv.org/abs/2201.08845 源码地址&#xff1a;https://xharlie.github.io/projects/project_sites/pointnerf 概述 体素神经渲染的方法生成高质量的结果非常耗时&#xff0c;且对不同场景需要重新训练&#xff08;模型不具备泛化能力&#xff09…

多线程 (六) wait和notify

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

Qt实践项目:仿Everything软件实现一个QtEverything

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的在读研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三…

九【springboot】

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

GPT-4来了!看看她究竟强在哪里!

GPT-4来了&#xff01;OpenAI老板Sam Altman直接开门见山地介绍说&#xff1a;这是我们迄今为止功能最强大的模型&#xff01;GPT-4是一个超大的多模态模型&#xff0c;也就是说&#xff0c;它的输入可以是文字&#xff08;上限2.5万字&#xff09;&#xff0c;还可以是图像。我…

【洛谷刷题】蓝桥杯专题突破-深度优先搜索-dfs(7)

目录 写在前面&#xff1a; 题目&#xff1a;P1596 [USACO10OCT]Lake Counting S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 解题思路&#xff1a; …

list底层的简单实现(万字长文详解!)

list底层的简单实现 文章目录list底层的简单实现list_node的实现&#xff01;list_node的构造函数list的迭代器&#xff01;——重点&#xff01;list迭代器的成员变量迭代器的构造函数* 重载前置 重载后置 重载前置-- 重载后置-- 重载! 重载 重载-- 重载list的const迭代器——…

提高曝光率:外贸网站如何充分利用谷歌优化赢得客户

自从我从事外贸行业以来&#xff0c;谷歌优化一直是我关注的重点。 作为一个外贸从业者&#xff0c;我深知提高网站在谷歌搜索引擎中的排名对企业的重要性。 那么&#xff0c;如何利用谷歌优化来提高外贸网站的曝光率&#xff0c;从而赢得更多客户呢&#xff1f; 以下是我在…

单例模式,饿汉与懒汉

文章目录什么是单例模式单例模式的两种形式饿汉模式懒汉模式懒汉模式与饿汉模式是否线程安全懒汉模式的优化什么是单例模式 单例模式其实就是一种设计模式&#xff0c;跟象棋的棋谱一样&#xff0c;给出一些固定的套路帮助你更好的完成代码。设计模式有很多种&#xff0c;单例…

Ubuntu-C语言下的应用

文章目录一、Ubuntu下C语言的应用&#xff08;一&#xff09;如何使用gedit创建/打开/保存/关闭文件&#xff08;二&#xff09;gedit中相关参数配置&#xff1a;首选项&#xff08;三&#xff09;ubuntu下C语言的编译器 -- gcc一、Ubuntu下C语言的应用 &#xff08;一&#x…

GPIO四种输入和四种输出模式

GPIO的结构图如下所示&#xff1a; 最右端为I/O引脚&#xff0c;左端的器件位于芯片内部。I/O引脚并联了两个用于保护的二极管。 输入模式 从I/O引脚进来就遇到了两个开关和电阻&#xff0c;与VDD相连的为上拉电阻&#xff0c;与VSS相连的为下拉电阻。再连接到TTL施密特触发…

机器学习算法——决策树详解

文章目录前言&#xff1a;决策树的定义熵和信息熵的相关概念信息熵的简单理解经典的决策树算法ID3算法划分选择或划分标准——信息增益ID3算法的优缺点C4.5算法信息增益率划分选择或划分标准——Gini系数&#xff08;CART算法&#xff09;Gini系数计算举例CART算法的优缺点其他…

RK3588平台开发系列讲解(显示篇)DP显示调试方法

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、查看 connector 状态二、强制使能/禁⽤ DP三、DPCP 读写四、Type-C 接口 Debug五、查看 DP 寄存器六、查看 VOP 状态七、查看当前显示时钟八、调整 DRM log 等级沉淀、分享、成长,让自己和他人都能有所收获!😄…
最新文章