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

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

金堂县网站制作公司哪家好,找成都创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站建设等网站项目制作,到程序开发,运营维护。成都创新互联于2013年创立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联

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

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

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

1、Offline简说

 

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

 

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

 

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

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

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

 

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

 

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

 

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

 

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

 

将表空间进行Offline的命令很简单,就是alter tablespace xxx offline;根据不同的情况,我们是可以使用三种参数进行命令修饰,分别为normal、temporary和immediate。三个命令分别对应了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在很多时候,是不能保证一致性的。这个时候就需要使用Temporary和Immediate两个参数了。

 

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


网页题目:怎么理解Oracle表空间Offline的三种参数
URL链接:http://scyanting.com/article/gjggci.html