千家信息网

怎么理解Oracle表空间Offline的三种参数

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,本篇文章为大家展示了怎么理解Oracle表空间Offline的三种参数,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Oracle数据库管理基础中,表空间操作是
千家信息网最后更新 2025年01月31日怎么理解Oracle表空间Offline的三种参数

本篇文章为大家展示了怎么理解Oracle表空间Offline的三种参数,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

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

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

从原理入手,分别详细介绍表空间Offline、数据文件Offline、日志归档模式和备份还原之间的关系。

1Offline简说

Oracle Offline表空间是一种对表空间对象和数据的"关闭访问"。在正常Online情况下,一个表空间中若干个数据文件是维持在动态的一致状态中,文件头上的SCN根据DBWRCKPT维持一致或者不一致的状态。

我们将表空间Offline的目的无非有如下三类:

ü 实现部分数据的不可访问。如果使用表空间进行多个系统数据模块的划分,可以使用offline方法,将一部分的数据不可访问;

ü 当进行前端应用程序进行升级维护的时候,可以使用offline方法对部分数据访问进行屏蔽;

ü 对数据文件进行改名和重定位(转移到其他位置上);

在进行数据库管理的时候,留足备份、慎删数据是非常重要的原则。没有绝对把握的时候,绝对不要动手删除数据。这里谈到的offline tablespacelock user都是非常好的屏蔽数据访问的手段。

一个表空间可以有一个或者多个数据文件。如果一个表空间被offline,那么对应的数据文件也就被offline

并不是所有表空间都可以被offlineSystemUndoTemporary表空间是不允许进行Offline操作的。一般只有非系统表空间,也就是业务数据表空间才会进行Offline操作。

另一个重要点是如果要进行offline操作的表空间是一个用户的Default表空间,那么最好要将其默认表空间修改一下,防止操作错误出现。

将表空间进行Offline的命令很简单,就是alter tablespace xxx offline;根据不同的情况,我们是可以使用三种参数进行命令修饰,分别为normaltemporaryimmediate。三个命令分别对应了Offline过程的不同行为。在下面的步骤中,我们通过实验来查看三种命令参数的行为特征。

2、实验环境介绍

实验选择在Oracle 11gR2上进行,数据库处在归档模式archive log mode。注意:是否归档模式对于数据表空间和文件Offline行为至关重要!

SQL> select * from v$version;

BANNER

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

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production

PL/SQL Release 11.2.0.3.0 - Production

CORE 11.2.0.3.0 Production

TNS for Linux: Version 11.2.0.3.0 - Production

NLSRTL Version 11.2.0.3.0 - Production

归档模式数据库。

SQL> archive log list;

Database log mode Archive Mode

Automatic archival Enabled

Archive destination USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence 21

Next log sequence to archive 23

Current log sequence 23

--数据库在open状态

SQL> select status from v$instance;

STATUS

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

OPEN

--Oracle支持命名管理OMF

SQL> show parameter db_create_file;

NAME TYPE VALUE

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

db_create_file_dest string /u01/app/oradata

创建实验表空间testtbs。为了更加明显进行试验,我们设计它是由两个数据文件构成。

SQL> create tablespace testtbs datafile size 10m extent management local uniform. size 1m segment space management auto;

Tablespace created

SQL> alter tablespace testtbs add datafile size 10m autoextend off;

Tablespace altered

SQL> select tablespace_name, status from dba_tablespaces where tablespace_name='TESTTBS';

TABLESPACE_NAME STATUS

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

TESTTBS ONLINE

SQL> select file_name, status, online_status from dba_data_files where tablespace_name='TESTTBS';

FILE_NAME STATUS ONLINE_STATUS

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

/u01/app/oradata/ORA AVAILABLE ONLINE

11G/datafile/o1_mf_t

esttbs_94hpygrx_.dbf

/u01/app/oradata/ORA AVAILABLE ONLINE

11G/datafile/o1_mf_t

esttbs_94hq0dgm_.dbf

注意三个Online状态,我们的实验就在这个过程中展开。最后再添加一个数据表,用于空间分配过程。

SQL> create table test tablespace testtbs as select * from dba_objects;

Table created

SQL> select tablespace_name from dba_segments where wner='SYS' and segment_name='TEST';

TABLESPACE_NAME

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

TESTTBS

SQL> select count(*) from test;

COUNT(*)

----------

75223

3、归档模式下数据文件offline normal

offline normal是我们最常用的表空间offline方法,也是默认的offline方法。如果数据表空间和数据文件状态都是online,我们是可以直接offline normal的。

--Offline数据表空间

SQL> alter tablespace testtbs offline normal;

Tablespace altered

--alert log中内容

Sun Sep 29 15:35:18 2013

alter tablespace testtbs offline normal

Completed: alter tablespace testtbs offline normal

此时,数据表空间和数据文件状态如下:

SQL> select tablespace_name, status from dba_tablespaces where tablespace_name='TESTTBS';

TABLESPACE_NAME STATUS

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

TESTTBS OFFLINE

SQL> select file_name, status, online_status from dba_data_files where tablespace_name='TESTTBS';

FILE_NAME STATUS ONLINE_STATUS

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

/u01/app/oradata/ORA AVAILABLE OFFLINE

11G/datafile/o1_mf_t

esttbs_94hpygrx_.dbf

/u01/app/oradata/ORA AVAILABLE OFFLINE

11G/datafile/o1_mf_t

esttbs_94hq0dgm_.dbf

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

SQL> select file#, status, recover, fuzzy, CHECKPOINT_CHANGE# from v$datafile_header;

FILE# STATUS RECOVER FUZZY CHECKPOINT_CHANGE#

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

1 ONLINE NO YES 1054312

2 ONLINE NO YES 1054312

3 ONLINE NO YES 1054312

4 ONLINE NO YES 1054312

5 ONLINE NO YES 1054312

6 OFFLINE 0

7 OFFLINE 0

7 rows selected

SQL> select file#, CHECKPOINT_CHANGE#, OFFLINE_CHANGE# from v$datafile;

FILE# CHECKPOINT_CHANGE# OFFLINE_CHANGE#

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

1 1054312 787896

2 1054312 787896

3 1054312 787896

4 1054312 787896

5 1054312 819012

6 1059175 1058506

7 1059175 1058506

7 rows selected

offline normal的时候,数据文件头的SCN是一致的。

alter log中信息里面,Data Recovery Advisor显示出信息。

--有报错内容

Sun Sep 29 15:53:04 2013

Checker run found 2 new persistent data failures

RMAN> list failure all;

List of Database Failures

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

Failure ID Priority Status Time Detected Summary

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

122 HIGH OPEN 29-SEP-13 One or more non-system datafiles are offline

128 HIGH OPEN 29-SEP-13 Tablespace 7: 'TESTTBS' is offline

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

SQL> alter tablespace testtbs online;

Tablespace altered

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

Datafile在很多时候,是不能保证一致性的。这个时候就需要使用TemporaryImmediate两个参数了。

上述内容就是怎么理解Oracle表空间Offline的三种参数,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

0