返回顶部
首页 > 资讯 > 数据库 >Oracle中表空间offline的三种参数对比案例
  • 224
分享到

Oracle中表空间offline的三种参数对比案例

2024-04-02 19:04:59 224人浏览 安东尼
摘要

oracle数据库管理中,对表空间操作是基础中的基础。其中,表空间Offline是我们经常接触的。同数据文件Offline一起,构成了Oracle维护数据一致性的重要体系结构。 &n


oracle数据库管理中,对表空间操作是基础中的基础。其中,表空间Offline是我们经常接触的。同数据文件Offline一起,构成了Oracle维护数据一致性的重要体系结构。

 

一般我们比较常接触到的,就是直接的alter tablespace xxx offline操作。但是在实际中,针对表空间对应数据文件的不同情况,Oracle提供了三种offline的参数。同数据库关闭shutdown对应的若干种参数一样,不同的offline参数对应Oracle不同的行为,更引出后续不同的处理方法。

 

下面是Oracle11g官方文档关于表空间offline的相关解释说明:

*************************************************************************************************************

You may want to take a tablespace offline for any of the following reasons:

  • To make a portion of the database unavailable while allowing nORMal access to the remainder of the database
  • To perform an offline tablespace backup (even though a tablespace can be backed up while online and in use)
  • To make an application and its group of tables temporarily unavailable while updating or maintaining the application
  • To rename or relocate tablespace datafiles

希望使表空间offline的原因如下:

?使数据库的一部分不访问,同时允许正常访问数据库的其余部分

?要执行脱机表空间备份(即使可以在线并在使用中备份表空间)

?在更新或维护应用程序时,使应用程序及其一组表暂时不可用

?重命名或重新定位表空间数据文件

When a tablespace is taken offline, the database takes all the associated files offline.

当表空间脱机时,数据库会将所有关联的文件脱机。

You cannot take the following tablespaces offline:

  • SYSTEM
  • The undo tablespace
  • Temporary tablespaces

SYSTEMundo表空间、临时表空间不可以offline

Before taking a tablespace offline, consider altering the tablespace allocation of any users who have been assigned the tablespace as a default tablespace. Doing so is advisable because those users will not be able to access objects in the tablespace while it is offline.

在使表空间脱机之前,请考虑将已分配表空间的任何用户的表空间分配更改为默认表空间。 这样做是可取的,因为这些用户在脱机时将无法访问表空间中的对象。

You can specify any of the following parameters as part of the ALTER TABLESPACE...OFFLINE statement:

Clause

Description

NORMAL

A tablespace can be taken offline normally if no error conditions exist for any of the datafiles of the tablespace. No datafile in the tablespace can be currently offline as the result of a write error. When you specify OFFLINE NORMAL, the database takes a checkpoint for all datafiles of the tablespace as it takes them offline. NORMAL is the default.

1normal offline的默认方式
2
normal 对表空间的所有数据文件执行检查点操作,online表空间时不需要介质恢复。
3
normal 方式离线表空间时,不应该有写错误,表空间所有文件应该online状态。

TEMPORARY

A tablespace can be taken offline temporarily, even if there are error conditions for one or more files of the tablespace. When you specify OFFLINE TEMPORARY, the database takes offline the datafiles that are not already offline, checkpointing them as it does so.

If no files are offline, but you use the temporary clause, media recovery is not required to bring the tablespace back online. However, if one or more files of the tablespace are offline because of write errors, and you take the tablespace offline temporarily, the tablespace requires recovery before you can bring it back online.

1offline temporary 表空间时,如果表空间中没有offline的数据文件,则online该表空间时不需要介质恢复。
2
offline temporary 表空间时,不会对已经offline的数据文件执行检查点操作,仅仅对online的数据文件执行检查点操作
3
offline temporary 表空间时,对于离线表空间之前已经offline的数据文件,则online该表空间时,offline数据文件需要介质恢复。

IMMEDIATE

A tablespace can be taken offline immediately, without the database taking a checkpoint on any of the datafiles. When you specify OFFLINE IMMEDIATE, media recovery for the tablespace is required before the tablespace can be brought online. You cannot take a tablespace offline immediately if the database is running in NOARCHiveLOGmode.

1offline immediate  不会对表空间的任何文件执行检查点操作。
2
online表空间时需要对所有数据文件进行media recovery
3
offline immediate 需要数据库日志模式为归档模式

 

Caution:

If you must take a tablespace offline, use the NORMAL clause (the default) if possible. This setting guarantees that the tablespace will not require recovery to come back online, even if after incomplete recovery you reset the redo log sequence using an ALTER DATABASE OPEN RESETLOGS statement.

如果必须使表空间脱机,请尽可能使用NORMAL子句(默认值)。 此设置保证表空间不需要恢复在线恢复,即使在不完全恢复后,使用ALTER DATABASE OPEN RESETLOGS语句重置重做日志序列。

Speify TEMPORARY only when you cannot take the tablespace offline normally. In this case, only the files taken offline because of errors need to be recovered before the tablespace can be brought online. Specify IMMEDIATE only after trying both the normal and temporary settings.

仅在不能使表空间正常脱机时指定TEMPORARY 在这种情况下,只有在出现错误的情况下离线的文件需要在表空间上线之前恢复。 仅在尝试正常和临时设置之后才指定IMMEDIATE

The following example takes the users tablespace offline normally:

ALTER TABLESPACE users OFFLINE NORMAL;

*************************************************************************************************************

 

通过以上官方文档的说明,将表空间进行Offline的命令很简单,就是alter tablespace xxx offline;根据不同的情况,可以使用三种参数进行命令修饰,分别为normal、temporary和immediate。三个命令分别对应了Offline过程的不同行为。

 

下面的实验中,我们通过具体的案例来区别三种命令参数的不同之处:

 

实验环境:

(注意:是否归档模式对于数据表空间和文件Offline行为至关重要!)

SYS@seiang11g>select * from v$version;

 

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

PL/sql Release 11.2.0.4.0 - Production

CORE    11.2.0.4.0      Production

TNS for linux: Version 11.2.0.4.0 - Production

NLSRTL Version 11.2.0.4.0 – Production

 

SYS@seiang11g>archive log list;

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            /u01/app/oracle/arch

Oldest online log sequence     50

Next log sequence to archive   52

Current log sequence           52

 

示例一:归档模式下offline normal

 

创建表空间wjQtest,为了更加明显进行试验,该表空间由两个数据文件构成。

SYS@seiang11g>create tablespace wjqtest datafile '/u01/app/oracle/oradata/OraDB11g/wjqtest01.dbf' size 5M

  2  extent management local uniform size 1M

  3  segment space management auto;

 

Tablespace created.

 

SYS@seiang11g>

SYS@seiang11g>alter tablespace wjqtest add datafile '/u01/app/oracle/oradata/OraDB11g/wjqtest02.dbf' size 5M;

 

Tablespace altered.

 

SYS@seiang11g>select tablespace_name,status from dba_tablespaces where tablespace_name='WJQTEST';

 

TABLESPACE_NAME                STATUS

------------------------------ ---------

WJQTEST                        ONLINE

 

SYS@seiang11g>select file_name,status,online_status from dba_data_files where tablespace_name='WJQTEST';

 

FILE_NAME                                          STATUS    ONLINE_

-------------------------------------------------- --------- -------

/u01/app/oracle/oradata/OraDB11g/wjqtest01.dbf     AVAILABLE ONLINE

/u01/app/oracle/oradata/OraDB11g/wjqtest02.dbf     AVAILABLE ONLINE

 

 

SCOTT@seiang11g>create table wjqtest tablespace wjqtest as select * from dba_objects where rownum<1000;

 

Table created.

 

SCOTT@seiang11g>select count(*) from wjqtest;

 

  COUNT(*)

----------

       999

 

SYS@seiang11g>alter tablespace wjqtest offline normal;

 

Tablespace altered.

 

SYS@seiang11g>select tablespace_name ,status from dba_tablespaces where tablespace_name='WJQTEST';

 

TABLESPACE_NAME                STATUS

------------------------------ ---------

WJQTEST                        OFFLINE

 

SYS@seiang11g>select file_name,status,online_status from dba_data_files where tablespace_name='WJQTEST';

 

FILE_NAME                                          STATUS    ONLINE_

-------------------------------------------------- --------- -------

/u01/app/oracle/oradata/OraDB11g/wjqtest01.dbf     AVAILABLE OFFLINE

/u01/app/oracle/oradata/OraDB11g/wjqtest02.dbf     AVAILABLE OFFLINE

 

[oracle@seiang11g trace]$ tail -f alert_seiang11g.log

Tue Sep 26 13:19:22 2017

alter tablespace wjqtest offline normal

Completed: alter tablespace wjqtest offline normal

Tue Sep 26 13:19:22 2017

Starting background process SMCO

Tue Sep 26 13:19:22 2017

SMCO started with pid=31, OS id=6497

Tue Sep 26 13:19:30 2017

Checker run found 3 new persistent data failures

 

数据文件一个很重要的内容就是数据文件头的SCN号。我们知道,如果完全关闭数据库或者check point的时候,Oracle是要保证控制文件和数据文件头的SCN一致。

SYS@seiang11g>select file#, status, recover, fuzzy, checkpoint_change# from v$datafile_header;

 

     FILE# STATUS  REC FUZ CHECKPOINT_CHANGE#

---------- ------- --- --- ------------------

         1 ONLINE  NO  YES            1860869

         2 ONLINE  NO  YES            1860869

         3 ONLINE  NO  YES            1860869

         4 ONLINE  NO  YES            1860869

         5 ONLINE  NO  YES            1860869

         6 ONLINE  NO  YES            1860869

         7 ONLINE  NO  YES            1860869

         8 OFFLINE                          0

         9 OFFLINE                          0

 

9 rows selected.

 

SYS@seiang11g>

SYS@seiang11g>select file#,checkpoint_change#,online_change# from v$datafile;

 

     FILE# CHECKPOINT_CHANGE# ONLINE_CHANGE#

---------- ------------------ --------------

         1            1860869         925702

         2            1860869         925702

         3            1860869         925702

         4            1860869         925702

         5            1860869         951158

         6            1860869              0

         7            1860869              0

         8            1862009              0

         9            1862009              0

 

9 rows selected.

 

RMAN> list failure all;

 

using target database control file instead of recovery catalog

List of Database Failures

=========================

 

Failure ID Priority Status    Time Detected Summary

---------- -------- --------- ------------- -------

254        HIGH     OPEN      26-SEP-17     Tablespace 9: 'WJQTEST' is offline

222        HIGH     OPEN      26-SEP-17     One or more non-system datafiles are offline

 

如果是正常的offline normal,是可以直接online回正常的表空间。

SYS@seiang11g>alter tablespace wjqtest online;

 

Tablespace altered.

 

SYS@seiang11g>select file#, status, recover, fuzzy, checkpoint_change# from v$datafile_header;

 

     FILE# STATUS  REC FUZ CHECKPOINT_CHANGE#

---------- ------- --- --- ------------------

         1 ONLINE  NO  YES            1860869

         2 ONLINE  NO  YES            1860869

         3 ONLINE  NO  YES            1860869

         4 ONLINE  NO  YES            1860869

         5 ONLINE  NO  YES            1860869

         6 ONLINE  NO  YES            1860869

         7 ONLINE  NO  YES            1860869

         8 ONLINE  NO  YES            1862119

         9 ONLINE  NO  YES            1862119

 

9 rows selected.

 

SYS@seiang11g>

SYS@seiang11g>select file#,checkpoint_change#,online_change# from v$datafile;

 

     FILE# CHECKPOINT_CHANGE# ONLINE_CHANGE#

---------- ------------------ --------------

         1            1860869         925702

         2            1860869         925702

         3            1860869         925702

         4            1860869         925702

         5            1860869         951158

         6            1860869              0

         7            1860869              0

         8            1862119        1862119

         9            1862119        1862119

 

9 rows selected.

 

[oracle@seiang11g trace]$ tail -f alert_seiang11g.log

Tue Sep 26 13:21:47 2017

alter tablespace wjqtest online

Completed: alter tablespace wjqtest online

 

RMAN>  list failure all;

no failures found that match specification

 

 

在数据库正常情况下,出于对性能考虑数据文件头SCN号是不能维持一致的。我们使用offline normal之后,各个数据文件头SCN相同。所以,offline normal特性是在offline的时候,要在表空间所有文件上打check point,只要能够打上SCN号,offline normal是可以正常完成的。也就是说,offline normal是表空间各个文件一致性的关闭。

 

 

示例二:归档模式下offline temporary

 

Offline Normal是一种比较理想的情况。在很多时候,Offline一个Tablespace的时候,并不能执行成功。比如,在offline操作的时候,如果此时有正在进行的对表空间对象的DDL和DML操作,offline可能会受到影响。此外,如果一个表空间中有数据文件已经被Offline过了,我们正常是不能够进行offline normal的。此时,我们就需要使用temporary。

 

我们首先将表空间的其中一个数据文件offline。

 

SYS@seiang11g>alter database datafile '/u01/app/oracle/oradata/OraDB11g/wjqtest01.dbf' offline;

 

Database altered.

 

 

注意:这个操作是在Archivelog模式下才能进行。如果是在非归档模式下,直接offline表空间中的一个数据文件会出现ORA-01145的错误如下所示:
SYS@seiang11g>alter database datafile '/u01/app/oracle/oradata/OraDB11g/wjqtest01.dbf' offline;
alter database datafile '/u01/app/oracle/oradata/OraDB11g/wjqtest01.dbf' offline
*
ERROR at line 1:
ORA-01145: offline immediate disallowed unless media recovery enabled

SYS@seiang11g>!oerr ora 01145
01145, 00000, "offline immediate disallowed unless media recovery enabled"
// *Cause: ALTER TABLESPACE ... OFFLINE IMMEDIATE or ALTER DATABASE DATAFILE
//         ... OFFLINE is only allowed if database is in ARCHIVELOG mode.
// *Action:Take tablespace offline normally or shutdown abort. Reconsider your
//         backup strategy. You could do this if you were archiving your logs.

要想对数据文件脱机,必须在归档模式下,这是Oracle自动保护的一种措施,防止在非归档模式下对数据文件脱机,造成数据丢失。

解决办法:
可以在非归档模式下,
使用alter database datafile '/u01/app/oracle/oradata/OraDB11g/wjqtest01.dbf ' offline for drop;语句将数据文件脱机,drop并不会删除物理文件。如果没有使用alter system switch logfile;切换日志文件组,那么可以采用recover datafile XXX;来恢复,并联机。如果已切换日志文件组并清空了里面的内容,这个数据文件就不能再恢复联机,永远处于recover状态(可以通过v$datafile视图查看)。所以如果在实际的生产环境中,尽量在归档模式下做脱机数据文件操作。

 

 

SYS@seiang11g>

SYS@seiang11g>select tablespace_name,status from dba_tablespaces where tablespace_name='WJQTEST';

 

TABLESPACE_NAME                STATUS

------------------------------ ---------

WJQTEST                        ONLINE

 

观察表空间和数据文件状态,发现被offline的数据文件状态为Recover。

SYS@seiang11g>select file_name,status,online_status from dba_data_files where tablespace_name='WJQTEST';

 

FILE_NAME                                          STATUS    ONLINE_

-------------------------------------------------- --------- -------

/u01/app/oracle/oradata/OraDB11g/wjqtest01.dbf     AVAILABLE RECOVER

/u01/app/oracle/oradata/OraDB11g/wjqtest02.dbf     AVAILABLE ONLINE

看到的文件recover状态,就表明如果需要这个文件回到Online状态,需要进行Recover。此时,Online状态表空间下的几个文件状态是不一致的。

 

 

注意,Oracle维持数据文件一致性,是一个动态一致性的过程。如果某一个文件或者对象临时性的退出了这个一致性机制,就表示这个文件或者对象已经不一致。如果该对象希望回归到原有的一致性体系里面,就需要进行RecoverOracle进行Recover手段就需要借助于连续的redo log文件。

 

尝试使用offline normal表空间

SYS@seiang11g>alter tablespace wjqtest offline normal;

alter tablespace wjqtest offline normal

*

ERROR at line 1:

ORA-01191: file 8 is already offline - cannot do a normal offline

ORA-01110: data file 8: '/u01/app/oracle/oradata/OraDB11g/wjqtest01.dbf'

 

SCOTT@seiang11g>create table tb_test tablespace wjqtest as select * from dba_objects where 1=0;

 

Table created.

 

[oracle@seiang11g trace]$ tail -f alert_seiang11g.log

Tue Sep 26 13:26:53 2017

alter tablespace wjqtest offline normal

ORA-1191 signalled during: alter tablespace wjqtest offline normal...

Tue Sep 26 13:26:53 2017

Checker run found 1 new persistent data failures

 

 

正常normal offline已经不能成功了。此时可以使用temporary参数。

SYS@seiang11g>alter tablespace wjqtest offline temporary;

 

Tablespace altered.

 

SYS@seiang11g>

SYS@seiang11g>select tablespace_name,status from dba_tablespaces where tablespace_name='WJQTEST';

 

TABLESPACE_NAME                STATUS

------------------------------ ---------

WJQTEST                        OFFLINE

 

SYS@seiang11g>

SYS@seiang11g>select file_name,status,online_status from dba_data_files where tablespace_name='WJQTEST';

 

FILE_NAME                                          STATUS    ONLINE_

-------------------------------------------------- --------- -------

/u01/app/oracle/oradata/OraDB11g/wjqtest01.dbf     AVAILABLE RECOVER

/u01/app/oracle/oradata/OraDB11g/wjqtest02.dbf     AVAILABLE OFFLINE

 

[oracle@seiang11g trace]$ tail -f alert_seiang11g.log

Tue Sep 26 13:30:01 2017

alter tablespace wjqtest offline temporary

Completed: alter tablespace wjqtest offline temporary

Tue Sep 26 13:30:15 2017

Checker run found 2 new persistent data failures

 

使用temporary参数实现了Offline。但是对于那个提前进行offline的数据文件,状态依然是recover。猜想,Temporary Offline的过程是一种不一致的关闭。

 

查看视图v$datafile和v$datafile_header反映了控制文件和数据文件头中文件SCN号的记录。在offline normal的时候,我们看到了各个文件的一致性。在进行offline normal的时候,Oracle是打入了一个check point(内部),来同步各个文件的文件头SCN。

 

在使用Temporary的时候,视图状态如何呢?

 

SYS@seiang11g>select file#, status, recover, fuzzy, checkpoint_change# from v$datafile_header;

 

     FILE# STATUS  REC FUZ CHECKPOINT_CHANGE#

---------- ------- --- --- ------------------

         1 ONLINE  NO  YES            1860869

         2 ONLINE  NO  YES            1860869

         3 ONLINE  NO  YES            1860869

         4 ONLINE  NO  YES            1860869

         5 ONLINE  NO  YES            1860869

         6 ONLINE  NO  YES            1860869

         7 ONLINE  NO  YES            1860869

         8 OFFLINE YES YES            1862119

         9 OFFLINE NO  NO             1862456

 

9 rows selected.

 

SYS@seiang11g>

SYS@seiang11g>select file#,checkpoint_change#,online_change# from v$datafile;

 

     FILE# CHECKPOINT_CHANGE# ONLINE_CHANGE#

---------- ------------------ --------------

         1            1860869         925702

         2            1860869         925702

         3            1860869         925702

         4            1860869         925702

         5            1860869         951158

         6            1860869              0

         7            1860869              0

         8            1862119        1862119

         9            1862456        1862119

 

9 rows selected.

 

控制文件和数据文件头上面两个文件的SCN编号不相同,说明在一个表空间内部文件的SCN号是不一致的。

 

说明:在Temporary Offline的时候,一些“有问题”的数据文件和“没问题”的数据文件状态是可以不一样。“没问题”的数据文件之间SCN号是一致。

 

如果此时直接Online表空间的话会报错ORA-01113和ORA-01110。

 

SYS@seiang11g>alter tablespace wjqtest online;

alter tablespace wjqtest online

*

ERROR at line 1:

ORA-01113: file 8 needs media recovery

ORA-01110: data file 8: '/u01/app/oracle/oradata/OraDB11g/wjqtest01.dbf'

 

在online的时候,Oracle一定会去online一个“一致”的表空间。此时,它会发现表空间内部SCN的不一致。根据提示,我们需要手工进行文件恢复。

SYS@seiang11g>recover datafile 8;

Media recovery complete.

 

SYS@seiang11g>alter tablespace wjqtest online;

 

Tablespace altered.

 

online成功了,在alert 日志中看到了进行media recovery中使用的redo log apply乃至archived redo log apply过程。注意:此时我们只恢复了datafile 6

[oracle@seiang11g trace]$ tail -f alert_seiang11g.log

Tue Sep 26 13:34:05 2017

ALTER DATABASE RECOVER  datafile 8 

Media Recovery Start

Serial Media Recovery started

Recovery of Online Redo Log: Thread 1 Group 1 Seq 52 Reading mem 0

  Mem# 0: /u01/app/oracle/oradata/OraDB11g/redo01.log

Media Recovery Complete (seiang11g)

Completed: ALTER DATABASE RECOVER  datafile 8 

 

SYS@seiang11g>select file#, status, recover, fuzzy, checkpoint_change# from v$datafile_header;

 

     FILE# STATUS  REC FUZ CHECKPOINT_CHANGE#

---------- ------- --- --- ------------------

         1 ONLINE  NO  YES            1860869

         2 ONLINE  NO  YES            1860869

         3 ONLINE  NO  YES            1860869

         4 ONLINE  NO  YES            1860869

         5 ONLINE  NO  YES            1860869

         6 ONLINE  NO  YES            1860869

         7 ONLINE  NO  YES            1860869

         8 ONLINE  NO  YES            1863020

         9 ONLINE  NO  YES            1863020

 

9 rows selected.

 

SYS@seiang11g>

SYS@seiang11g>select file#,checkpoint_change#,online_change# from v$datafile;

 

     FILE# CHECKPOINT_CHANGE# ONLINE_CHANGE#

---------- ------------------ --------------

         1            1860869         925702

         2            1860869         925702

         3            1860869         925702

         4            1860869         925702

         5            1860869         951158

         6            1860869              0

         7            1860869              0

         8            1863020        1862119

         9            1863020        1862119

 

 

示例三:归档模式下offline immediate

 

首先对表空间中的一个数据文件进行offline,然后再对相应的表空间进行offline,就会出现报错ORA-01191和ORA-01110

SYS@seiang11g>alter database datafile '/u01/app/oracle/oradata/OraDB11g/wjqtest01.dbf' offline;

 

Database altered.

 

SYS@seiang11g>

SYS@seiang11g>alter tablespace wjqtest offline;

alter tablespace wjqtest offline

*

ERROR at line 1:

ORA-01191: file 8 is already offline - cannot do a normal offline

ORA-01110: data file 8: '/u01/app/oracle/oradata/OraDB11g/wjqtest01.dbf'

 

此处使用offline immediate操作。

SYS@seiang11g>alter tablespace wjqtest offline immediate;

 

Tablespace altered.

 

SYS@seiang11g>

SYS@seiang11g>select file#, status, recover, fuzzy, checkpoint_change# from v$datafile_header;

 

     FILE# STATUS  REC FUZ CHECKPOINT_CHANGE#

---------- ------- --- --- ------------------

         1 ONLINE  NO  YES            1863090

         2 ONLINE  NO  YES            1863090

         3 ONLINE  NO  YES            1863090

         4 ONLINE  NO  YES            1863090

         5 ONLINE  NO  YES            1863090

         6 ONLINE  NO  YES            1863090

         7 ONLINE  NO  YES            1863090

         8 OFFLINE YES YES            1863090

         9 OFFLINE YES YES            1863090

 

9 rows selected.

 

SYS@seiang11g>

SYS@seiang11g>select file#,checkpoint_change#,online_change# from v$datafile;

 

     FILE# CHECKPOINT_CHANGE# ONLINE_CHANGE#

---------- ------------------ --------------

         1            1863090         925702

         2            1863090         925702

         3            1863090         925702

         4            1863090         925702

         5            1863090         951158

         6            1863090              0

         7            1863090              0

         8            1863090        1862119

         9            1863090        1862119

 

 

[oracle@seiang11g trace]$ tail -f alert_seiang11g.log

Tue Sep 26 13:40:52 2017

alter tablespace wjqtest offline immediate

Completed: alter tablespace wjqtest offline immediate

 

immediate和temporary相似地方是:在“有问题”数据文件存在的情况下,表空间依然可以进行Offline操作。但是区别是,Oracle在immediate参数情况下,就不会给任何数据文件进行check point统一SCN动作了。这种方法类似于shutdown abort。无论文件是不是有问题,Oracle都不进行检查和统一动作。

 

有一个细节需要注意,就是v$datafile_header中的recover列。在normal参数的时候,这个列是不显示的,也就是表示这个问题不需要关注和理睬。在tempory模式下,只有那些“有问题”文件才会被标注为YES,也就是需要进行Recover。其他没问题的文件状态为NO,也就是不需要进行recover。上面的案例证明了这点。

 

在immediate参数情况下,所有文件状态都是YES,表示无论好坏,都要进行recover。

 

下面尝试online动作。

 

SYS@seiang11g>alter tablespace wjqtest online;

alter tablespace wjqtest online

*

ERROR at line 1:

ORA-01113: file 8 needs media recovery

ORA-01110: data file 8: '/u01/app/oracle/oradata/OraDB11g/wjqtest01.dbf'

 

SYS@seiang11g>

SYS@seiang11g>recover datafile 8;

Media recovery complete.

 

依然不行,需要将所有的文件都recover一遍,索性直接recover表空间

SYS@seiang11g>alter tablespace wjqtest online;

alter tablespace wjqtest online

*

ERROR at line 1:

ORA-01113: file 9 needs media recovery

ORA-01110: data file 9: '/u01/app/oracle/oradata/OraDB11g/wjqtest02.dbf'

 

SYS@seiang11g>recover tablespace wjqtest;

Media recovery complete.

 

[oracle@seiang11g trace]$ tail -f alert_seiang11g.log

Tue Sep 26 13:42:44 2017

Checker run found 1 new persistent data failures

Tue Sep 26 13:43:04 2017

ALTER DATABASE RECOVER  datafile 8 

Media Recovery Start

Serial Media Recovery started

Recovery of Online Redo Log: Thread 1 Group 1 Seq 52 Reading mem 0

  Mem# 0: /u01/app/oracle/oradata/OraDB11g/redo01.log

Media Recovery Complete (seiang11g)

Completed: ALTER DATABASE RECOVER  datafile 8 

alter tablespace wjqtest online

ORA-1113 signalled during: alter tablespace wjqtest online...

Tue Sep 26 13:44:43 2017

ALTER DATABASE RECOVER  tablespace wjqtest 

Media Recovery Start

Serial Media Recovery started

Recovery of Online Redo Log: Thread 1 Group 1 Seq 52 Reading mem 0

  Mem# 0: /u01/app/oracle/oradata/OraDB11g/redo01.log

Media Recovery Complete (seiang11g)

Completed: ALTER DATABASE RECOVER  tablespace wjqtest 

 

 

总结

 我们来总结一下Offline三种参数的情况。
(1)offline normal:是最常用的参数,也最不容易出问题。Offline Normal的时候,Oracle会在表空间内部进行Check Point动作,保证表空间内部各个文件头上面的SCN一致,也就是数据一致。如果存在数据文件不能前推SCN,如已经Offline,的情况,offline normal失效报错。

(2)offline temporary:比Normal要求略松的一种关闭模式。Temporary模式下,Oracle依然会去“尝试”统一表空间内部文件头的SCN号。如果数据文件可以统一,就进行Check Point动作,如果文件不能统一,操作也不会报错,只是将其状态标记为不一致。Temporary模式下Offline的表空间Online的时候,那些“有问题”的不一致文件,是需要进行media recovey的。没有问题,打入check point的数据文件,就不需要进行恢复动作。

(3)offline immediate:最松的一种offline模式。Immediate模式下,Oracle不会进行check point动作,无论有无问题的Datafile,都会被设置为需要Recover过程。在重新online的时候,表空间就需要进行重新的全表空media recover。




作者:SEian.G(苦练七十二变,笑对八十一难)


您可能感兴趣的文档:

--结束END--

本文标题: Oracle中表空间offline的三种参数对比案例

本文链接: https://lsjlt.com/news/48733.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Oracle中表空间offline的三种参数对比案例
    Oracle数据库管理中,对表空间操作是基础中的基础。其中,表空间Offline是我们经常接触的。同数据文件Offline一起,构成了Oracle维护数据一致性的重要体系结构。 &n...
    99+
    2024-04-02
  • 聊聊Oracle表空间Offline的三种参数(下)
     6、非归档情况Offline处理 上面的一系列讨论,都是在归档文件模式下进行的实验。如果在非归档情况下,我们面对的问题是不同的。 首先,非归档模式下,表空间可以进行normal offline操作。 ...
    99+
    2023-06-06
  • 如何理解Oracle表空间Offline的三种参数
    如何理解Oracle表空间Offline的三种参数,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。归档模式下Temporary Offline操作 Of...
    99+
    2023-06-06
  • 怎么理解Oracle表空间Offline的三种参数
    本篇文章为大家展示了怎么理解Oracle表空间Offline的三种参数,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Oracle数据库管理基础中,表空间操作是基础中的基础。其中,表空间Offline...
    99+
    2023-06-06
  • Oracle更改表空间中数据文件位置的案例
    这篇文章主要介绍了Oracle更改表空间中数据文件位置的案例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。表空间概述Oracle的表空间属于...
    99+
    2024-04-02
  • oracle中表空间的示例分析
    这篇文章主要介绍了oracle中表空间的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。oracle 的表空间实例详解查询表空间SEL...
    99+
    2024-04-02
  • ORACLE中表空间和表碎片的示例分析
    这篇文章主要为大家展示了“ORACLE中表空间和表碎片的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ORACLE中表空间和表碎片的示例分析”这篇文章吧...
    99+
    2024-04-02
  • Oracle数据库中的表空间是什么
    表空间是Oracle数据库中存储数据的逻辑结构,用来存储表、索引以及其他数据库对象。每个表空间可以包含一个或多个数据文件,这些数据文...
    99+
    2024-04-09
    Oracle
  • 如何在 Oracle 数据库中确定表的表空间
    在Oracle数据库中确定表的表空间是数据库管理中的一个重要操作,通过这个操作可以更好地管理数据库空间并优化数据库性能。在Oracle数据库中,每个表都会被分配到一个表空间中,表空间是...
    99+
    2024-03-03
    oracle 表空间 表名 sql语句
  • oracle 11g手工热备中表空间的示例分析
    这篇文章给大家分享的是有关oracle 11g手工热备中表空间的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。手工热备必须在归档模式下进行,只读表空间不能做热备,临时表空...
    99+
    2024-04-02
  • Oracle表空间数据库文件收缩的示例分析
    这篇文章主要介绍了Oracle表空间数据库文件收缩的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。我们经常会遇到数据库磁盘空间爆满的...
    99+
    2024-04-02
  • 如何在Oracle数据库中创建新的表空间
    要在Oracle数据库中创建新的表空间,可以使用以下SQL语句: CREATE TABLESPACE tablespace_name...
    99+
    2024-04-09
    Oracle
  • JavaScript中函数参数使用对象而不是参数列表的示例分析
    这篇文章给大家分享的是有关JavaScript中函数参数使用对象而不是参数列表的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。函数参数使用对象而不是参数列表当我们使用参数列表给函数传递参数时,如果参数较少...
    99+
    2023-06-27
  • ORACLE数据库之大数据量TRUNCATE和DELETE操作对表空间的影响
    --1、创建测试表 create table cux.cux_test_data as select * from GL_JE_HEADERS; --2、查看数据条数 select co...
    99+
    2024-04-02
  • 如何更改Oracle中表空间的数据文件位置
    本篇文章给大家分享的是有关如何更改Oracle中表空间的数据文件位置,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。表空间概述Oracle的表空...
    99+
    2024-04-02
  • Oracle数据库中用户和表空间的管理技巧
    Oracle数据库是一款广泛应用于企业级数据管理中的关系型数据库管理系统,用户和表空间的管理是数据库管理员日常工作中十分重要的部分。良好的用户和表空间管理能够提高数据库的性能和安全性,...
    99+
    2024-03-02
    用户管理 表空间管理 oracle技巧
  • 36、Java——一个案例学会三层架构对数据表的增删改查
    ✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:Java案例分享专栏 ✨特色...
    99+
    2023-08-17
    java 数据库 mysql
  • Oracle数据库中空表导出遇到困难时的应对策略
    空表导出是数据库管理中常见的操作,但有时候遇到空表导出却遇到了困难,这时候我们需要使用一些特定的策略和技巧来解决问题。在Oracle数据库中,空表导出的困难通常出现在导出后的文件为空或...
    99+
    2024-03-08
    oracle 导出数据 空表 sql语句
  • Oracle数仓中判断时间连续性的几种SQL写法示例
    零、需求介绍 现有一张表数据如下: 此表是一张镜像表,policyno列代表一个保单号,state列代表这个保单号在snapdate当天的最后一次状态(state每天可能会变很多次,镜像表只保留snapdate时间点凌...
    99+
    2023-02-05
    oracle 判断时间 oracle判断时间连续性 oracle判断日期是否连续
  • 将Oracle中一个大数据表快速迁移到Sqlserver2008数据库的案例
    这篇文章主要介绍将Oracle中一个大数据表快速迁移到Sqlserver2008数据库的案例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!oracle 服务器  版本 &n...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作