Oracle数据库管理基础中,表空间操作是基础中的基础。其中,表空间Offline是我们经常接触的一个知识点。同数据文件Offline一起,构成了Oracle维护数据一致性的重要体系结构。 一般我们比较常接触到的,就是直接的alter tablespace xxx offline操作。但是在实际中,针对表空间对应数据文件的不同情况,我们是有三种参数操作相对应的。同数据库关闭shutdown对应的若干种参数一样,不同的offline参数对应Oracle不同的行为,更引出后续不同的处理方法。 本篇从原理入手,分别详细介绍表空间Offline、数据文件Offline、日志归档模式和备份还原之间的关系。 Oracle 10g UNDO表空间过大的解决方案 http://www.linuxidc.com/Linux/2014-05/101633.htmOracle 11g中Temp临时表空间、文件的新特性 http://www.linuxidc.com/Linux/2014-05/101208.htmOracle实验(move表空间和database link) http://www.linuxidc.com/Linux/2014-04/99833.htmOracle查看数据库表空间使用情况sql语句 http://www.linuxidc.com/Linux/2014-04/99618.htmOracle Data Guard_ 主库添加数据文件或创建表空间 http://www.linuxidc.com/Linux/2014-03/99213.htmOracle Data Guard_ 主备库传输表空间 http://www.linuxidc.com/Linux/2014-03/99208.htm
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 - ProductionPL/SQL Release 11.2.0.3.0 - ProductionCORE11.2.0.3.0ProductionTNS for Linux: Version 11.2.0.3.0 - ProductionNLSRTL Version 11.2.0.3.0 - Production 归档模式数据库。 SQL> archive log list;Database log modeArchive ModeAutomatic archivalEnabledArchive destinationUSE_DB_RECOVERY_FILE_DESTOldest online log sequence21Next log sequence to archive23Current log sequence23 --数据库在open状态SQL> select status from v$instance; STATUS------------OPEN --Oracle支持命名管理OMFSQL> show parameter db_create_file; NAMETYPEVALUE------------------------- ----------- ------------------------------db_create_file_deststring/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_NAMESTATUS------------------------------ ---------TESTTBSONLINE SQL> select file_name, status, online_status from dba_data_files where tablespace_name="TESTTBS";FILE_NAMESTATUSONLINE_STATUS-------------------- --------- -------------/u01/app/oradata/ORA AVAILABLE ONLINE11G/datafile/o1_mf_testtbs_94hpygrx_.dbf /u01/app/oradata/ORA AVAILABLE ONLINE11G/datafile/o1_mf_testtbs_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 2013alter tablespace testtbs offline normalCompleted: alter tablespace testtbs offline normal 此时,数据表空间和数据文件状态如下: SQL> select tablespace_name, status from dba_tablespaces where tablespace_name="TESTTBS"; TABLESPACE_NAMESTATUS------------------------------ ---------TESTTBSOFFLINE SQL> select file_name, status, online_status from dba_data_files where tablespace_name="TESTTBS"; FILE_NAMESTATUSONLINE_STATUS-------------------- --------- -------------/u01/app/oradata/ORA AVAILABLE OFFLINE11G/datafile/o1_mf_testtbs_94hpygrx_.dbf /u01/app/oradata/ORA AVAILABLE OFFLINE11G/datafile/o1_mf_testtbs_94hq0dgm_.dbf 数据文件一个很重要的内容就是文件头的SCN编号。我们知道,如果完全关闭数据库或者check point的时候,Oracle是要保证控制文件和文件头的SCN一致。 SQL> select file#, status, recover, fuzzy, CHECKPOINT_CHANGE# from v$datafile_header; FILE# STATUSRECOVER FUZZY CHECKPOINT_CHANGE#---------- ------- ------- ----- ------------------1 ONLINENOYES10543122 ONLINENOYES10543123 ONLINENOYES10543124 ONLINENOYES10543125 ONLINENOYES10543126 OFFLINE07 OFFLINE0 7 rows selected SQL> select file#, CHECKPOINT_CHANGE#, OFFLINE_CHANGE# from v$datafile; FILE# CHECKPOINT_CHANGE# OFFLINE_CHANGE#---------- ------------------ ---------------1105431278789621054312787896310543127878964105431278789651054312819012610591751058506710591751058506 7 rows selected 在offline normal的时候,数据文件头的SCN是一致的。 alter log中信息里面,Data Recovery Advisor显示出信息。 --有报错内容Sun Sep 29 15:53:04 2013Checker run found 2 new persistent data failures RMAN> list failure all; List of Database Failures========================= Failure ID Priority StatusTime Detected Summary---------- -------- --------- ------------- -------122HIGHOPEN29-SEP-13One or more non-system datafiles are offline128HIGHOPEN29-SEP-13Tablespace 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两个参数了。下面我们继续讨论。
更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2014-05/101881p2.htm
Oracle 从10.2.0.1升级到10.2.0.5操作实验统计量收集Method_Opt参数使用相关资讯 Oracle表空间
- 关于Oracle可传输表空间的总结 (今 20:12)
- Aix下删除Oracle表空间以及对应的 (04月17日)
- Oracle表空间过大时候的处理 (10/27/2015 20:42:50)
| - Oracle删除表空间遇到的问题及解决 (04月17日)
- Oracle使用SQL传输表空间 (03月01日)
- Oracle 设置表空间自增长 (10/09/2015 11:42:07)
|
本文评论 查看全部评论 (0)