Oracle各種表空間

智慧先行者發表於2015-01-11

system表空間:含資料字典資訊

sysaux表空間:儲存各種oracle應用的後設資料(如AWR的運算元據)

建立表空間後,不能改變區尺寸

區尺寸管理:
自動分配(AUTOALLOCATE):小段64K,中段1M,大段64M
統一分配(UNIFORM):需跟size,如果認為表空間的所有段的尺寸大致相同,並且認為它們會以一種相似方式增長,可以選擇uniform區尺寸管理。

手動段空間管理,須使用可用列表(Free list),pctfree,pctused

通過pctfree引數可以在每個資料塊中保留一定比例的空間。

自動段空間管理,用點陣圖跟蹤一個段的可用空間的可用性。

建立表空間
create tablespace datafile 建立永久表空間
create temporary tablespace tempfile
create undo tablespace

SQL>r
1 create tablespace test1
2 datafile '/u02/app/oracle/test1.dbf'
3* size 1M
Tablespace created.

SQL>r
1* select tablespace_name,allocation_type,contents,extent_management,segment_space_management from dba_tablespaces

TABLESPACE_NAME ALLOCATION_type CONTENTS EXTENT_MANAGEMENT SEGMENT_SPACE_MANAGEMENT
----------------------------- --------- --------- -------------------- -------------------------
SYSTEM SYSTEM permanent LOCAL MANUAL
SYSAUX SYSTEM PERMANENT LOCAL AUTO
UNDOTBS1 SYSTEM UNDO LOCAL MANUAL
TEMP uniform TEMPORARY LOCAL MANUAL
USERS SYSTEM PERMANENT LOCAL AUTO
TEST1 SYSTEM PERMANENT LOCAL AUTO

create tablespace test3
datafile '/u02/app/oracle/test3.dbf' size 8m
uniform size 4m;

如果區分配使用uniform未指定size,預設建立1M統一區

SQL>select initial_extent,next_extent,extent_management,allocation_type,segment_space_management,tablespace_name from dba_tablespaces;

INITIAL_EXTENT NEXT_EXTENT EXTENT_MANAGEMENT ALLOCATIO SEGMENT_SPACE_MANAGEMENT TABLESPACE_NAME
-------------- ----------- -------------------- --------- ------------------------- ------------------------------
65536 LOCAL SYSTEM MANUAL SYSTEM
65536 LOCAL SYSTEM AUTO SYSAUX
65536 LOCAL SYSTEM MANUAL UNDOTBS1
1048576 1048576 LOCAL UNIFORM MANUAL TEMP
65536 LOCAL SYSTEM AUTO USERS
65536 LOCAL SYSTEM AUTO TEST1
4194304 4194304 LOCAL UNIFORM AUTO TEST3

增加表空間大小:
alter tablespace test1 add datafile '/u02/app/oracle/test12.dbf' size 1m ;
alter database datafile '/u02/app/oracle/test1.dbf' resize 20m ;

請求表空間時,自動給表空間增加10M,MAXSIZE限定表空間為100M
alter tablespace test3 add datafile '/u02/app/oracle/test31.dbf' size 10m
autoextend on
next 10m
maxsize 100m

刪除表空間
drop tablespace test4;
drop tablespace test4 INCLUDING CONTENTS AND DATAFILES;
drop tablespace test3 cascade constraints;刪除表的引用完整性約束

SQL>desc v$sysaux_occupants
Name Null? Type
----------------------------------------- -------- ----------------------------
OCCUPANT_NAME VARCHAR2(64)
OCCUPANT_DESC VARCHAR2(64)
SCHEMA_NAME VARCHAR2(64)
MOVE_PROCEDURE VARCHAR2(64)
MOVE_PROCEDURE_DESC VARCHAR2(64)
SPACE_USAGE_KBYTES NUMBER

select occupant_name,schema_name,move_procedure from v$sysaux_occupants;

OCCUPANT_NAME SCHEMA_NAM MOVE_PROCEDURE
-------------------- ---------- ----------------------------------------------------------------

EM SYSMAN emd_maintenance.move_em_tblspc
TEXT CTXSYS DRI_MOVE_CTXSYS
ULTRASEARCH WKSYS MOVE_WK
ULTRASEARCH_DEMO_USE WK_TEST MOVE_WK

如果希望將sysaux的佔有物ULTRASEARCH移動到一個新的表空間ULTRA1,可以使用WKSYS模式擁有的MOVE_WK過程來完成
exect WKSYS.MOVE_WK('ULTRA1');

預警極限值
預警極限值型別:百分比滿,位元組剩餘數
設定預警極限值:OEM--administration--related links--manage metrics--edit thresholds
OEM--相關連結--度量和策略設定--編輯

SQL>BEGIN
DBMS_SERVER_ALERT.SET_THRESHOLD(
metrics_id =>DBMS_SERVER_ALTER.TABLESPACE_BYT_FREE,
warning_operator =>DBMS_SERVER_ALTER.OPERATOR_LE,
warning_value =>'10240',
critical_operator =>DBMS_SERVER_ALTER.OPERATOR_LE,
critical_value =>'2048',
observation_period =>1,
consecutive_occurrences =>1,
instance_name =>NULL,
object_type =>DBMS_SERVER_ALTER.OBJECT_TYPE_TABLESPACE,
object_name =>'users');
END;

以上警告極限值warning_value為10M,嚴重極限值critical_value為2M

SQL>SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE,
(B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE"
FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C
WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME;

TABLESPACE_N TOTAL USED FREE % USED % FREE
------------ ---------- ---------- ---------- ---------- ----------
SYSAUX 629145600 545652736 82444288 86.72 13.28
UNDOTBS1 550502400 44302336 505151488 8.04 91.96
USERS 5242880 327680 3866624 6.25 73.75
SYSTEM 734003200 684457984 48496640 93.25 6.65

表空間離線
alter tablespace test1 offline;

重新命名錶空間
alter tablespace test1 rename to test2;

select file#, name from v$datafile

FILE# NAME
---------- --------------------------------------------------
1 +DATA/ora11g/datafile/system.260.823205117
2 +DATA/ora11g/datafile/sysaux.261.823205185
3 +DATA/ora11g/datafile/undotbs1.262.823205249
4 +DATA/ora11g/datafile/users.264.823205299
5 /u02/app/oracle/test1.dbf
6 /u02/app/oracle/test3.dbf
8 /u02/app/oracle/test12.dbf
9 /u02/app/oracle/test31.dbf

select tablespace_name, file_name,file_id,autoextensible from dba_data_files;

TABLESPACE_N FILE_NAME FILE_ID AUTOEXTENSIBLE
------------ -------------------------------------------------- ---------- --------------------
SYSTEM +DATA/ora11g/datafile/system.260.823205117 1 YES
SYSAUX +DATA/ora11g/datafile/sysaux.261.823205185 2 YES
UNDOTBS1 +DATA/ora11g/datafile/undotbs1.262.823205249 3 YES
USERS +DATA/ora11g/datafile/users.264.823205299 4 YES
TEST1 /u02/app/oracle/test1.dbf 5 NO
TEST3 /u02/app/oracle/test3.dbf 6 NO
TEST1 /u02/app/oracle/test12.dbf 8 NO
TEST3 /u02/app/oracle/test31.dbf 9 YES

重新命名資料檔案,須使表空間離線,以致資料檔案離線
alter tablespace test1 offline
在os下:cp或mv
在db下:alter tablespace test1 rename datafile '/u01/app/oracle/test1.dbf' to '/u02/app/oracle/test1.dbf';

只讀表空間
alter tablespace test1 read only;
alter tablespace test1 read write;

在臨時表空間內排序

預設時,所有臨時表空間都是用統一尺寸的本地管理的區來建立。

在給一個表空間組分配第一個臨時表空間時,就自動建立了該臨時表空間組。
alter tablespace temp1 tablespace group group1;如果group1不存在,改語句將會自動建立group1

 

相關文章