聊聊Data Guard環境下Temp表空間和Temp檔案管理
Oracle表空間和資料檔案裡面,Temp表空間和檔案是比較特殊的。除了Temp表空間對應的臨時段(temp segment)是由Oracle自動進行管理之外,稀疏檔案的特性也是我們需要注意的一個方面。
常規情況下,我們建立一個資料檔案,即使使用OMF特性,也需要指定初始檔案大小。建立資料檔案之後,磁碟空間被明確的佔用,我們從作業系統層面是可以看到空間的。但是,對於臨時表空間檔案而言,新建立出的檔案也許只能看到作業系統層面的檔案大小,但是卻沒有空間佔用。我們稱這個特性為“稀疏檔案”。
從實現層面,稀疏檔案意味著更少的redo log生成。那麼,在DG環境下,Temp檔案的特性和普通檔案有什麼差異呢?下面我們透過一系列的實驗來證明。
1、實驗環境介紹
我們在Oracle 11gR2環境下的Dataguard中進行測試。具體版本為11.2.0.4。當前Primary情況如下:
--Primary名稱ora11g
SQL> select DATABASE_ROLE, open_mode from v$database;
DATABASE_ROLE OPEN_MODE
---------------- --------------------
PRIMARY READ WRITE
當前資料庫中只有一個臨時檔案,對應表空間TEMP。
SQL> select file_name, tablespace_name from dba_temp_files;
FILE_NAME TABLESPACE_NAME
------------------------------------------------------------ ------------------------------
/u01/app/oradata/ORA11G/datafile/o1_mf_temp_9mnjxpk4_.tmp TEMP
對Dataguard而言,最重要的檔案管理引數為standby_file_management。如果保持為AUTO,就可以保證資料檔案同步建立。
SQL> show parameter standby_file
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
standby_file_management string AUTO
Standby端情況也比較簡單,處在mount狀態。檔案自動建立管理。
SQL> select DATABASE_ROLE, open_mode from v$database;
DATABASE_ROLE OPEN_MODE
---------------- --------------------
PHYSICAL STANDBY MOUNTED
SQL> select name, file# from v$tempfile;
NAME FILE#
-------------------------------------------------------------------------------- ----------
/u01/app/oradata/ORA11GSY/datafile/o1_mf_temp_9pcqbdd6_.tmp 1
SQL> show parameter standby_file
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
standby_file_management string AUTO
2、Primary端臨時表空間操作
我們首先實驗在Primary端進行表空間操作。
(primary)
SQL> alter tablespace temp add tempfile size 100m autoextend off;
Tablespace altered
SQL> select file_name, tablespace_name from dba_temp_files;
FILE_NAME TABLESPACE_NAME
------------------------------------------------------------ ------------------------------
/u01/app/oradata/ORA11G/datafile/o1_mf_temp_9mnjxpk4_.tmp TEMP
/u01/app/oradata/ORA11G/datafile/o1_mf_temp_9pm3ct62_.tmp TEMP
SQL> alter system switch logfile;
System altered
切換之後,正常redo log資訊應該已經傳遞到standby端。Standby端啟動redo apply過程,檢視臨時檔案是否建立。
SQL> alter database recover managed standby database using current logfile disconnect from session;
Database altered
SQL> select name, file# from v$tempfile;
NAME FILE#
-------------------------------------------------------------------------------- ----------
/u01/app/oradata/ORA11GSY/datafile/o1_mf_temp_9pcqbdd6_.tmp 1
啟動redo apply之後,standby端依然只有一個臨時檔案,也就是說明臨時檔案沒有聯動的傳遞過來。至此,Primary和Standby檔案結構出現差異。
此時是否可以在standby端直接新增檔案呢?mount狀態下,是拒絕的。
SQL> alter tablespace temp add tempfile size 100m autoextend off;
altertablespace temp add tempfile size 100m autoextend off
ORA-01109: 資料庫未開啟
與資料檔案對應的臨時表空間,如果我們在Primary端進行建立時,會不會聯動建立呢?
(主庫)
SQL> create temporary tablespace temp1 tempfile size 10m autoextend off
2 extent management local uniform size 1m;
Tablespace created
SQL> select file_name, tablespace_name from dba_temp_files;
FILE_NAME TABLESPACE_NAME
------------------------------------------------------------ ------------------------------
/u01/app/oradata/ORA11G/datafile/o1_mf_temp_9mnjxpk4_.tmp TEMP
/u01/app/oradata/ORA11G/datafile/o1_mf_temp_9pm3ct62_.tmp TEMP
/u01/app/oradata/ORA11G/datafile/o1_mf_temp1_9pm3mv8b_.tmp TEMP1
此時再觀察Standby端,TEMP1表空間也沒有連帶的傳導到standby端。
SQL> select name, file# from v$tempfile;
NAME FILE#
-------------------------------------------------------------------------------- ----------
/u01/app/oradata/ORA11GSY/datafile/o1_mf_temp_9pcqbdd6_.tmp 1
結論:當我們Standby端處在mount狀態(Read Only也相同),Primary端涉及到的臨時表空間建立維護、臨時檔案建立的操作是不會傳導到standby端的。處在mount狀態的standby端也不能進行檔案手工建立動作。
3、Switchover對Temp的影響
如果我們進行switchover,讓原來的standby切換到Primary狀態,那麼臨時檔案是否有變化呢?
首先是primary進行切換。
SQL> alter database commit to switchover to physical standby with session shutdown;
Database altered
SQL> conn / as sysdba
Connected to an idle instance.
SQL> startup nomount
ORACLE instance started.
Total System Global Area 313860096 bytes
Fixed Size 1364340 bytes
Variable Size 272633484 bytes
Database Buffers 33554432 bytes
Redo Buffers 6307840 bytes
SQL> alter database mount standby database;
Database altered.
--角色切換成功
SQL> select DATABASE_ROLE, open_mode from v$database;
DATABASE_ROLE OPEN_MODE
---------------- --------------------
PHYSICAL STANDBY MOUNTED
從standby端,切換為Primary。
SQL> select DATABASE_ROLE, open_mode from v$database;
DATABASE_ROLE OPEN_MODE
---------------- --------------------
PHYSICAL STANDBY MOUNTED
SQL>alter database commit to switchover to primary with session shutdown;
Database altered
SQL> select DATABASE_ROLE, open_mode from v$database;
DATABASE_ROLE OPEN_MODE
---------------- --------------------
PRIMARY MOUNTED
SQL> alter database open;
Database altered
此時,角色切換過來。但是新Primary端的臨時檔案還是1個,沒有帶過來。
SQL> select name, file# from v$tempfile;
NAME FILE#
-------------------------------------------------------------------------------- ----------
/u01/app/oradata/ORA11GSY/datafile/o1_mf_temp_9pcqbdd6_.tmp 1
雖然沒有,但是切換為Primary之後,我們可以手工進行臨時新增。注意下面的現象!
SQL> create temporary tablespace temp1 tempfile size 10m autoextend off
2 extent management local uniform size 1m;
create temporary tablespace temp1 tempfile size 10m autoextend off
extent management local uniform size 1m
ORA-01543: 表空間 'TEMP1' 已存在
剛剛在Primary建立TEMP1的時候,Standby中並沒有臨時檔案加入!我們檢視一下新Primary的表空間情況。
SQL> select tablespace_name, contents from dba_tablespaces;
TABLESPACE_NAME CONTENTS
------------------------------ ---------
SYSTEM PERMANENT
SYSAUX PERMANENT
UNDOTBS1 UNDO
TEMP TEMPORARY
USERS PERMANENT
TEMP1 TEMPORARY
6 rows selected
SQL> select file_name, tablespace_name from dba_temp_files;
FILE_NAME TABLESPACE_NAME
-------------------------------------------------------------------------------- ------------------------------
/u01/app/oradata/ORA11GSY/datafile/o1_mf_temp_9pcqbdd6_.tmp TEMP
/u01/app/oradata/ORA11GSY/datafile/o1_mf_temp_9pm43j4j_.tmp TEMP
我們看到了沒有臨時檔案對應的臨時表空間TEMP1。也就是說:當我們在Primary端新增一個臨時表空間,Standby端雖然不能建立出臨時檔案,但是臨時表空間的資訊是聯動的帶入的!
這也就意味著我們需要謹慎對待!
4、結論
和Data File、Redo Log不同,Temp檔案和Temp表空間在DG環境下同步的效果不好。在我們的試驗中甚至出現了沒有檔案對應的臨時表空間現象。
對於這個現象,筆者猜想會不會只要真正使用了一下臨時表空間,就會有檔案生成。留待以後實驗來確定吧。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-1351120/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- TEMP表空間不足解決 - temp group
- temp檔案空間的分配
- oracle temp 表空間Oracle
- 檢視單個SQL消耗TEMP表空間以及TEMP表空間使用率SQL
- Oracle Temp 表空間切換Oracle
- Oracle Temp 臨時表空間Oracle
- Oracle TEMP臨時表空間概念Oracle
- Oracle的temp表空間被佔滿Oracle
- Oracle Temp臨時表空間處理Oracle
- TEMP表空間的檔案丟失或損壞後的恢復
- Oracle 11g中Temp臨時表空間、檔案的新特性Oracle
- Oracle基礎 02 臨時表空間 tempOracle
- 處理TEMP表空間滿的問題
- Data Guard 主端OFFLINE資料檔案和表空間
- 如何捕捉temp表空間出錯的session資訊和SQLSessionSQL
- 有關temp表空間的一點總結!
- TEMP表空間報ORA-1652的處理
- 【TEMP】臨時表空間的工作原理及維護方法
- ORA-01652:無法通過128(在表空間TEMP中)擴充套件temp段套件
- ORA-01652 無法透過128 (在表空間 TEMP中)擴充套件temp段套件
- OS 刪除temp表空間 而磁碟空間未釋放的解決方案
- 表空間和資料檔案管理
- 直接刪除undo及temp表空間檔案後的資料庫恢復一例資料庫
- [轉]ORA-01652 無法通過128 (在表空間 TEMP中)擴充套件temp段套件
- tablespace 大檔案,undo,temp tablespace
- Oracle RMAN備份為什麼會大量使用temp表空間?Oracle
- Windows環境下的Oracle Data Guard安裝和配置WindowsOracle
- 表空間和資料檔案的管理
- 搬運工:temp表空間被過多佔用處理方法
- Oracle9i Standby資料庫啟用後需要加入或reuse temp表空間資料檔案Oracle資料庫
- 搭建Active Data Guard環境
- 12C關於CDB、PDB 臨時temp表空間的總結
- DATA GUARD手工管理資料檔案
- temp
- 解決ora-01652無法通過128(在temp表空間中)擴充套件temp段的過程套件
- 解決ora-01652無法透過128(在temp表空間中)擴充套件temp段的過程套件
- ORACLE temp表的簡介Oracle
- temp表學習筆記筆記