聊聊Oracle表空間Offline的三種引數(上)
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兩個引數了。下面我們繼續討論。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29067253/viewspace-2151758/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 聊聊Oracle表空間Offline的三種引數(中)Oracle
- 聊聊Oracle表空間Offline的三種引數(下)Oracle
- 表空間OFFLINE的3種選項。
- Oracle表空間Oracle
- oracle 表空間Oracle
- ORACLE線上切換undo表空間Oracle
- oracle表空間的整理Oracle
- 表空間與資料檔案的offline和online操作
- 增加oracle表空間Oracle
- oracle temp 表空間Oracle
- oracle 表移動表空間Oracle
- Oracle表移動表空間Oracle
- Oracle 批量建表空間Oracle
- Oracle清理SYSAUX表空間OracleUX
- Oracle的表空間quota詳解Oracle
- Oracle OCP(47):表空間的建立Oracle
- Oracle Temp 表空間切換Oracle
- Oracle 表空間增加檔案Oracle
- Oracle OCP(49):表空間管理Oracle
- Oracle表空間收縮方案Oracle
- Oracle RMAN 表空間恢復Oracle
- Oracle中表空間、表、索引的遷移Oracle索引
- Oracle新建使用者、表空間、表Oracle
- Oracle 19c 線上縮減 UNDO 表空間 容量Oracle
- oracle建立臨時表空間和資料表空間以及刪除Oracle
- oracle臨時表空間相關Oracle
- oracle sql 表空間利用率OracleSQL
- 【Oracle 恢復表空間】 實驗Oracle
- 【TABLESPACE】Oracle表空間最佳實踐Oracle
- 剛體在三維空間的旋轉-幾種表達方式
- 聊聊Go工作空間Go
- oracle 建立表空間和使用者Oracle
- Oracle建立表空間和使用者Oracle
- Oracle中新建表空間、使用者Oracle
- oracle表空間增長趨勢分析Oracle
- Oracle OCP(46):表空間、段、區、塊Oracle
- 【TABLESPACE】Oracle 表空間結構說明Oracle
- Oracle RAC+DG 表空間擴容Oracle