普通表空间
新建表空间test11,数据文件为/u01/oracle/oradata/primary/primary/test11.dbf
SQL> createtablespace test1 datafile '/u01/oracle/oradata/primary/primary/test1.dbf' size10m;
Undo表空间
新建Undo表空间undotbs2:
SQL〉CREATE UNDO TABLESPACE undotbs2
DATAFILE '/u01/oracle/oradata/primary/primary/undotbs2.dbf' SIZE 200M
REUSE AUTOEXTEND OFF
ONLINE;
SQL〉ALTER SYSTEM SET UNDO_TABLESPACE ='undotbs2' SCOPE= BOTH;
临时表空间
新建临时表空间temp2
SQL〉CREATE TEMPORARY TABLESPACE temp2
TEMPFILE '/u01/oracle/oradata/primary/primary/temp2.dbf'SIZE 200M
REUSE AUTOEXTEND OFF
EXTENT MANAGEMENT LOCAL
UNIFORM SIZE 1M;
创建规范:
CREATE[UNDO] TABLESPACE tablespace_name
[DATAFILE datefile_spec1 [,datefile_spec2] ......
[ { MININUM EXTENT integer [k|m]
| BLOCKSIZE integer [k]
|logging clause
|FORCE LOGGING
|DEFAULT {data_segment_compression}storage_clause
|[online|offline]
|[PERMANENT|TEMPORARY]
|extent_manager_clause
|segment_manager_clause}]
1、undo 说明系统将创建一个回滚表空间。
2、tablespace指出表空间的名称。
3、datafile datefile_spec1指出表空间包含什么空间文件。
datefile_spec1 是形如 ['filename'] [SIZE integer [ K | M ]] [REUSE][autoextend_clause]
4、MININUMEXTENT integer [k|m] 指出在表空间中范围的最小值。这个参数可以减小空间碎片,保证在表空间的范围是这个数值的整数倍。
5、BLOCKSIZE integer [k] 这个参数可以设定一个不标准的块的大小。
6、loggingclause这个子句声明这个表空间上所有的用户对象的日志属性(缺省是logging),包括表,索引,分区,物化视图,物化视图上的索引,分区。
7、FORCE LOGGING使用这个子句指出表空间进入强制日志模式。
8、DEFAULTstorage_clause声明缺省的存储子句。
9、online|offline改变表空间的状态。
10、PERMANENT|TEMPORARY指出表空间的属性,是永久表空间还是临时表空间。
11、extent_management_clause说明了表空间如何管理范围
12、segment_management_clause段空间管理的方式,自动或者手动:
SEGMENT SPACE MANAGEMENT {AUTO|MANUAL}
赋予表空间权限:
alter user EPUFS quota unlimited on XIB_TRANS_DATA ;
重命名表空间:
alter tablespace test1 rename to test11;
将system表空间从dictionary-managed更改为locally managed:
*oracle 10g默认的表空间管理方式是本地管理(locally managed)。
在转换system表前,你必须把所有的其他表空间转换为本地管理。否则在将system表空间传换为locally managed后不能在READ-WRITE模式下使用这些表空间。
EXECUTE dbms_space_admin.tablespace_migrate_to_local("tablespace");
系统表空间从数据字典管理转换到本地管理的限制条件非常严格。必须严格遵守以下条件:
1)系统的默认临时表空间不是系统表空间
2)数据字典管理的表空间中不存在回滚段
3)至少一个联机回滚段存在于本地管理表空间中或者使用了自动undo管理,且undo表空间联机
4)除去undo或回滚表空间,其他表空间都置于只读模式
5)系统使用restricted模式启动
6)利用DBMS_SPACE_ADMIN
EXECUTE DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL(‘SYSTEM’);
使用这种方法很好,但是它建立的表空间没有automatic segment space managerment选项,所有字典管理表空间都是用默认手动段空间管理,而且在转换为本地管理的表空间是不能进行修改。
还有一个缺点,就是表空间如果存在空间碎片的话,此方法也不能解决碎片问题
因此,要转换普通表空间,建议使用下面的方法!
普通表空间从dictionary-managed更改为locally managed:首先你要新建一个本地管理的表空间:
CREATE TEMPORARY TABLESPACE new_tempt
TEMPFILE '/u01/oracle/oradata/primary/primary/new_tempt.dbf'SIZE 200M
REUSE AUTOEXTEND OFF
EXTENT MANAGEMENT LOCAL
UNIFORM SIZE 1M;
对于表空间的转移使用命令:
ALTER TABLE temp MOVE TABLESPACE new_temp;
对于索引你需要重建:
ALTER TABLE index REBUILD TABLESPACEnew_index;
resize表空间大小:
SQL> select a.tablespace_name,total,free,total-free used from (select tablespace_name,sum(bytes)/1024/1024 total from dba_data_files group by tablespace_name) a, (select tablespace_name,sum(bytes)/1024/1024 free from dba_free_space group by tablespace_name) b where a.tablespace_name=b.tablespace_name;
TABLESPACE_NAME TOTAL FREE USED
-------------------------------------------------------------------------
SQL> alter database datafile '/home/oracle/test/TEST/test.dbf' resize 20M;
Database altered.
SQL> select a.tablespace_name,total,free,total-free used from (select tablespace_name,sum(bytes)/1024/1024 total from dba_data_files group by tablespace_name) a, (select tablespace_name,sum(bytes)/1024/1024 free from dba_free_space group by tablespace_name) b where a.tablespace_name=b.tablespace_name;
TABLESPACE_NAME TOTAL FREE USED
-------------------------------------------------------------------------
TEST1 20 19.875 .125
注意:
alter databasedatafile 'filepath' resize <filesize>;