表空间是逻辑上的概念。
临时表空间:只用来存储用户会话期间的对象,应使用临时文件而不是数据文件创建临时表空间。
undo表空间:一种永久表空间,它存储撤销对数据的更改所使用的撤销数据。
每个ORACLE表空间都必须有强制的system和sysaux表空间。system表空间是永久的表空间,包含重要的帮助数据库运行的数据字典信息。
6.1
表空间区尺寸和空间管理。
自动与手都段管理。
使用alter tale命令移动表到其他的表空间。
SQL> create table test (a1 int);
表已创建。
SQL> commit;
提交完成。
SQL> select owner,segment_name,tablespace_name from dba_segments where segment_n
ame='TEST';
OWNER SEGMENT_NAME TABLESPACE_NAME
-------------------- -------------------- --------------------
SYS TEST SYSTEM
创建的test表默认存在于system表空间中,
用alter table 命令将test移动到users表空间。
SQL> alter table test move tablespace users;
表已更改。
SQL> select owner,segment_name,tablespace_name from dba_segments where segment_n
ame='TEST';
OWNER SEGMENT_NAME TABLESPACE_NAME
-------------------- -------------------- --------------------
SYS TEST USERS
如果移动索引,可使用alter index rebulind命令
SQL> alter index index1 rebuild tablespace system;
索引已更改。
6.2创建表空间
1 create tablespace test
2 datafile 'D:\oradata\orcl\test01.dbf'
3 size 50M
4 autoextend on
5 next 10m
6* maxsize 100m
SQL> /
表空间已创建。
删除表空间
(1)SQL> drop tablesoace test;
在发布drop tablespace命令时,如果test 表空间中包括表或者索引存在,将会报错。可以先将对象转移到其他的表空间中,或者可以将存在的对象一起删除。
SQL> drop tablespace test;
drop tablespace test
*
第 1 行出现错误:
ORA-01549: 表空间非空, 请使用 INCLUDING CONTENTS 选项
SELECT owner,segment_name,segment_type,tablespace_name FROM DBA_SEGMENTS where tablespace_name='TEST'
OWNER
SEGMENT_NAME
SEGMENT_TYPE
TABLESPACE_NAME
1
SYS
TEST
TABLE
TEST
2
SYS
INDEX1
INDEX
TEST
查询dba_segments 视图可以查询到test表空间中的对象,此时可以把表test,索引index1移动到其他表空间。
强制将对象删除可加参数 including contents
(2)drop tablespace including contents;
使用上述删除表空间的命令时,表空间中的对象将绕过回收站并立即被删除,同时,回收站中的属于该表空间的任何对象也将被清空。
drop tablespace including contents命令不会把操作系统上的数据文件释放掉,必须手动删除数据文件,可用以下命令实现删除表空间的同时删除掉数据文件。
(3) drop tablespace test including contents and datafiles;(此语句表空间连同数据文件一同被删除)。
(4) drop tablespace test cascade constraints;
如果其他表中存在指向要删除的表空间中的表的引用完整性约束,则必须用上述命令。
6.2.10管理重做数据的生成
管理表空间的可用性
表空间的脱机(offline)
offline有三种情况normal、temporary、immediate
*使用offline normal字句可以使一个表空间干净的脱机,这表示使它联机之前不需要再表空间进行介质恢复。如果不能对表空间执行带OFFLINE NORMAL字句的脱机,则需要制动OFFLINE TEMPORARY 字句;如果仍然无法offline 可使用immediate字句。
SQL> alter tablespace test offline normal;
表空间已更改。
SQL> alter tablespace test online;
表空间已更改。
6.2.11重命名表空间
alter tablespace xxx rename to xxx;
SQL> alter tablespace test rename to test01;
表空间已更改。
(可以重新命名永久表空间和临时表空间,但是不能重命名system、sysaux表空间;被重命名的表空间必须使其所有数据文件联机;若表空间只读,则重命名无法改变数据文件的文件头);
重新命名表空间下的数据文件
步骤:a、表空间offline b、移动数据文件 c、重命名
实例:原test表空间数据文件为
D:\ORADATA\ORCL\TEST01.DBF
select file_name ,file_id,tablespace_name from dba_data_files;
FILE_NAME
FILE_ID
TABLESPACE_NAME
1
D:\ORADATA\ORCL\SYSTEM01.DBF
1
SYSTEM
2
D:\ORADATA\ORCL\UNDOTBS01.DBF
2
UNDOTBS1
3
D:\ORADATA\ORCL\SYSAUX01.DBF
3
SYSAUX
4
D:\ORADATA\ORCL\USERS01.DBF
4
USERS
5
D:\ORADATA\ORCL\ABC.DBF
5
XIAOCHEN
6
D:\ORADATA\ORCL\TEST01.DBF
6
TEST
现将test表空间数据移动至C盘根目录下。
步骤1
SQL> alter tablespace test offline normal;
表空间已更改。
步骤2
D:\oradata\orcl>copy TEST01.DBF c:\
已复制 1 个文件。
步骤3:
SQL> alter tablespace test
2 rename datafile 'D:\oradata\orcl\test01.dbf'
3 to
4* 'c:\test01.dbf'
SQL> /
表空间已更改。
步骤4:
SQL> alter tablespace test online;
表空间已更改。
6.2.12 只读表空间
SQL> alter tablespace test read only;
表空间已更改。
SQL> alter tablespace test read write;
表空间已更改。
6.3临时表空间
6.3.1创建临时表空间
SQL> create temporary tablespace temp01 tempfile 'C:\temp01.dbf'
2 size 10m
3 autoextend on
4 next 1m
5 maxsize 100m;
表空间已创建。
6.3.2更改临时表空间
增加临时表空间的临时文件
SQL> alter tablespace temp add tempfile 'c:\1.dbf' size 10M;
表空间已更改。
摘除一个临时文件,同时删除操作系统上的文件
SQL> alter database tempfile 'c:\1.dbf' drop including datafiles;
数据库已更改。
6.3.4默认临时表空间
database_properties 视图中可查询到
SQL> select property_name,property_value from database_properties
where property_name like '%DEFAULT%';
PROPERTY_NAME PROPERTY_VALUE
------------------------------ ------------------------------
DEFAULT_TEMP_TABLESPACE TEMPGRP1
DEFAULT_PERMANENT_TABLESPACE USERS
DEFAULT_TBS_TYPE SMALLFILE
6.3.5临时表空间组
select * from dba_tablespace_groups(空间组视图)
可将多个临时表空间放在一个临时表空间组中,然后将database_properties视图中的默认临时表空间设置为临时表空间组。
优点:由于sql查询可以同时使用几个临时表空间进行排序,因此sql查询很少会用尽排序空间; 可以再数据库级指定多个默认临时表空间; 并行操作的并行执行服务器将高效地利用临时表空间;单用户可在不同会话中同时使用多个临时表空间。
6.3.6默认的永久表空间
SQL> select username,default_tablespace from dba_users;
USERNAME DEFAULT_TABLESPACE
------------------------------ ------------------------------
XIAOCHEN USERS
MDDATA USERS
DIP USERS
TSMSYS USERS
DBSNMP SYSAUX
SYSMAN SYSAUX
MDSYS SYSAUX
ORDSYS SYSAUX
CTXSYS SYSAUX
ANONYMOUS SYSAUX
EXFSYS SYSAUX
USERNAME DEFAULT_TABLESPACE
------------------------------ ------------------------------
DMSYS SYSAUX
WMSYS SYSAUX
XDB SYSAUX
ORDPLUGINS SYSAUX
SI_INFORMTN_SCHEMA SYSAUX
OLAPSYS SYSAUX
MGMT_VIEW SYSTEM
SYS SYSTEM
SYSTEM SYSTEM
OUTLN SYSTEM
查询dba_users视图可以查看各个用户默认的永久表空间。
SQL> select property_name,property_value from database_properties where proper
ty_name='DEFAULT_PERMANENT_TABLESPACE';
PROPERTY_NAME PROPERTY_VALUE
------------------------------ ------------------------------
DEFAULT_PERMANENT_TABLESPACE USERS
而查询
系统默认表空间,为users,
也就是说在你创建一个用户时 如果没有给他指定默认表空间,
系统就会指定这个表空间为他的默认表空间。
管理表空间的几个重要的视图
DBA_TABLESPACES;
DBA_SEGMENTS;
DBA_FREE_SPACE;
DBA_DATA_FILES;
DBA_TEMP_FILES;
DBA_TABLESPACE_GROUPS;
database_properties;
v$datafile;
v$filestat;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26667101/viewspace-750834/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26667101/viewspace-750834/