第九章: 表空间和数据文件管理(1)
1、tablespace 功能:从逻辑上简化数据库的管理
2、tablespace :一个database 对应多个tablespace ,一个tablespace 可以对应一个datafile ,也可以多个
Oracle 10g,最少有两个系统表空间:system 和sysaux 用来存放数据字典信息
system和sysaux 作为系统表空间
system:存放数据字典,在建库是建立
sysaux:辅助表空间,存放从system分离一部分信息如对数据库的监控、运行状态等信息
temp:临时表空间,用于数据排序,不存放永久对象
undo:存放undo数据块(数据块旧的镜像)
system表空不能在线offline 和drop。
3、表空间的管理
1、创建表空间
05:50:39 SQL> col file_name for a50
05:57:22 SQL> select file_id,file_name,tablespace_name from dba_data_files;
FILE_ID FILE_NAME TABLESPACE_NAME
---------- -------------------------------------------------- ------------------------------
1 /u01/app/oracle/oradata/lx02/system01.dbf SYSTEM
7 /u01/app/oracle/oradata/lx02/OLTP01.DBF OLTP
6 /u01/app/oracle/oradata/lx02/indx01.dbf INDX
5 /u01/app/oracle/oradata/lx02/example01.dbf EXAMPLE
4 /u01/app/oracle/oradata/lx02/user01.dbf USERS
3 /u01/app/oracle/oradata/lx02/sysaux01.dbf SYSAUX
2 /u01/app/oracle/oradata/lx02/rtbs01.dbf RTBS
7 rows selected.
05:57:42 SQL> create tablespace test
05:58:14 2 datafile '/u01/app/oracle/oradata/lx02/test01.dbf' size 10m;
Tablespace created.
05:58:32 SQL> select file_id,file_name,tablespace_name ,bytes/1024/1024 "Size" from dba_data_files;
FILE_ID FILE_NAME TABLESPACE_NAME Size
---------- -------------------------------------------------- ------------------------------ ----------
1 /u01/app/oracle/oradata/lx02/system01.dbf SYSTEM 300
7 /u01/app/oracle/oradata/lx02/OLTP01.DBF OLTP 48
6 /u01/app/oracle/oradata/lx02/indx01.dbf INDX 40
5 /u01/app/oracle/oradata/lx02/example01.dbf EXAMPLE 400
4 /u01/app/oracle/oradata/lx02/user01.dbf USERS 48
3 /u01/app/oracle/oradata/lx02/sysaux01.dbf SYSAUX 100
2 /u01/app/oracle/oradata/lx02/rtbs01.dbf RTBS 100
8 /u01/app/oracle/oradata/lx02/test01.dbf TEST 10
8 rows selected.
2、表空间对free extents(空闲区) 的管理:
1)9i 以前通过dictionary管理,性能不好,容易产生碎片,通过uet$ 和 fet$ 管理
2)9i以后采用local 管理,在表空间上建立bitmap ,用0,1来表示free extents,oracle 10g 默认本地管理
06:08:59 SQL> select TABLESPACE_NAME,status ,EXTENT_MANAGEMENT from dba_tablespaces;
TABLESPACE_NAME STATUS EXTENT_MAN
------------------------------ --------- ----------
SYSTEM ONLINE DICTIONARY
RTBS ONLINE LOCAL
SYSAUX ONLINE LOCAL
TEMP ONLINE LOCAL
USERS ONLINE LOCAL
EXAMPLE ONLINE LOCAL
INDX ONLINE LOCAL
OLTP ONLINE LOCAL
TEST ONLINE LOCAL
9 rows selected.
06:11:27 SQL> create tablespace cuug
06:11:30 2 datafile '/u01/app/oracle/oradata/lx02/cuug01.dbf' size 10m
06:11:32 3 extent management dictionary;
Tablespace created.
06:11:35 SQL> select TABLESPACE_NAME,status ,EXTENT_MANAGEMENT from dba_tablespaces;
TABLESPACE_NAME STATUS EXTENT_MAN
------------------------------ --------- ----------
SYSTEM ONLINE DICTIONARY
RTBS ONLINE LOCAL
SYSAUX ONLINE LOCAL
TEMP ONLINE LOCAL
USERS ONLINE LOCAL
EXAMPLE ONLINE LOCAL
INDX ONLINE LOCAL
OLTP ONLINE LOCAL
TEST ONLINE LOCAL
CUUG ONLINE DICTIONARY
10 rows selected.
06:11:42 SQL>
--------如果system表空间是数据字典管理,其他表空间可以是数据字典管理或local管理(默认)
06:10:47 SQL> select TABLESPACE_NAME,status ,EXTENT_MANAGEMENT from dba_tablespaces;
TABLESPACE_NAME STATUS EXTENT_MAN
------------------------------ --------- ----------
SYSTEM ONLINE LOCAL
UNDOTBS1 ONLINE LOCAL
SYSAUX ONLINE LOCAL
TEMP ONLINE LOCAL
USERS ONLINE LOCAL
EXAMPLE ONLINE LOCAL
TEST ONLINE LOCAL
7 rows selected.
06:12:02 SQL> create tablespace cuug
06:12:15 2 datafile '/u01/app/oracle/oradata/lx02/cuug01.dbf' size 10m
06:12:24 3 extent management dictionary;
create tablespace cuug
*
ERROR at line 1:
ORA-12913: Cannot create dictionary managed tablespace
06:12:30 SQL>
------------如果system是local 管理,其余的表空间只能是local 管理。
3、数据字典管理通过fet$(记录空闲extent)和uet$(记录已使用extent)
08:39:37 SQL> col file_name for a50
08:40:00 SQL>
select a.ts#,a.name,b.file#,b.name "File_name" ,c.block#,d.extent_management from v$tablespace a,v$datafile b,fet$ c,dba_tablespaces d
08:40:04 2 where a.ts#=b.ts# and a.ts#=c.ts# and a.name=d.tablespace_name;
TS# NAME FILE# File_name BLOCK# EXTENT_MAN
---------- ------------------------------ ---------- -------------------------------------------------- ---------- ----------
0 SYSTEM 1 /u01/app/oracle/oradata/lx02/system01.dbf 21509 DICTIONARY
9 CUUG 9 /u01/app/oracle/oradata/lx02/cuug01.dbf 2 DICTIONARY
08:40:05 SQL>
select ts#,file#,block# from uet$;
4、local manager 对extent size 分配 有两种管理方式:autoallocate (自动分配,默认),uniform size 统一大小
采用uniform 建立表空间
08:45:44 SQL> create tablespace lx01
08:47:02 2 datafile '/u01/app/oracle/oradata/lx02/lx01.dbf' size 10m
08:47:14 3 extent management local
08:47:19 4 uniform size 1m;
Tablespace created.
08:47:36 SQL> select TABLESPACE_NAME,INITIAL_EXTENT/1024,NEXT_EXTENT/1024,EXTENT_MANAGEMENT from dba_tablespaces;
TABLESPACE_NAME INITIAL_EXTENT/1024 NEXT_EXTENT/1024 EXTENT_MAN
------------------------------ ------------------- ---------------- ----------
SYSTEM 16 16 DICTIONARY
RTBS 64 LOCAL
SYSAUX 64 LOCAL
TEMP 1024 1024 LOCAL
USERS 4096 4096 LOCAL
EXAMPLE 1024 1024 LOCAL
INDX 64 LOCAL
OLTP 2048 2048 LOCAL
TEST 64 LOCAL
CUUG 40 40 DICTIONARY
LX01 1024 1024 LOCAL
11 rows selected.
08:47:40 SQL>
------------inittial_extent 第一个extent 的大小
next_extent 第二个extent的大小
5、数据字典管理表空间
08:47:40 SQL> create tablespace lx02
08:51:53 2 datafile '/u01/app/oracle/oradata/lx02/lx02.dbf' size 10m
08:52:00 3 extent management dictionary
08:52:06 4 default storage (initial 1m next 1m pctincrease 50);
Tablespace created.
08:52:27 SQL> select TABLESPACE_NAME,INITIAL_EXTENT/1024,NEXT_EXTENT/1024,EXTENT_MANAGEMENT,pct_increase from dba_tablespaces;
TABLESPACE_NAME INITIAL_EXTENT/1024 NEXT_EXTENT/1024 EXTENT_MAN PCT_INCREASE
------------------------------ ------------------- ---------------- ---------- ------------
SYSTEM 16 16 DICTIONARY 50
RTBS 64 LOCAL
SYSAUX 64 LOCAL
TEMP 1024 1024 LOCAL 0
USERS 4096 4096 LOCAL 0
EXAMPLE 1024 1024 LOCAL 0
INDX 64 LOCAL
OLTP 2048 2048 LOCAL 0
TEST 64 LOCAL
CUUG 40 40 DICTIONARY 50
LX01 1024 1024 LOCAL 0
LX02 1024 1024 DICTIONARY 50
12 rows selected.
08:52:41 SQL>
-----------initial 初始化区(第一个extent),next 第二个extent ,pctincrease 从第三个extent 开始,比上一个extent增加的百分比。
undo tablespace 存放undo数据块,可以建立多个undo 表空间,但处于active状态只有一个,active 状态的undo tablespace是不能offline 和drop。
如果未建立undo tablespace oracle 使用system undo segment。
09:01:22 SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string rtbs
09:01:48 SQL> select TABLESPACE_NAME,STATUS,CONTENTS from dba_tablespaces;
TABLESPACE_NAME STATUS CONTENTS
------------------------------ --------- ---------
SYSTEM ONLINE PERMANENT
RTBS ONLINE UNDO
SYSAUX ONLINE PERMANENT
TEMP ONLINE TEMPORARY
USERS ONLINE PERMANENT
EXAMPLE ONLINE PERMANENT
INDX ONLINE PERMANENT
OLTP ONLINE PERMANENT
TEST ONLINE PERMANENT
CUUG ONLINE PERMANENT
LX01 ONLINE PERMANENT
LX02 ONLINE PERMANENT
12 rows selected.
09:02:01 SQL> create undo tablespace undo_tbs01
09:02:50 2 datafile '/u01/app/oracle/oradata/lx02/undotbs01.dbf' size 10m;
Tablespace created.
09:03:06 SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string rtbs
SP2-0734: unknown command beginning "09:01:48 S..." - rest of line ignored.
09:03:25 SQL> select TABLESPACE_NAME,STATUS,CONTENTS from dba_tablespaces;
TABLESPACE_NAME STATUS CONTENTS
------------------------------ --------- ---------
SYSTEM ONLINE PERMANENT
RTBS ONLINE UNDO
SYSAUX ONLINE PERMANENT
TEMP ONLINE TEMPORARY
USERS ONLINE PERMANENT
EXAMPLE ONLINE PERMANENT
INDX ONLINE PERMANENT
OLTP ONLINE PERMANENT
TEST ONLINE PERMANENT
CUUG ONLINE PERMANENT
LX01 ONLINE PERMANENT
LX02 ONLINE PERMANENT
UNDO_TBS01 ONLINE UNDO
13 rows selected.
09:03:28 SQL> alter system set undo_tablespace=undo_tbs01;
System altered.
--------------切换undo 表空间
09:04:11 SQL> show parameter undo;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDO_TBS01
09:04:18 SQL>