Oracle表空间介绍
1)Oracle表空间是一个逻辑的概念,它在物理上是不存在的
表空间属性:
一个数据库可以包含多个表空间,一个表空间只能属于一个数据库
一个表空间包含多个数据文件,一个数据文件只能属于一个表空间
2)Oracle数据库存储结构
从逻辑上看,一个数据库(database)下面可以分多个表空间(tablespace),一个表空间下可以分多个段(segment),一个表要占一个段,一个索引也要占一个段。一个段由多个区间(extent)组成,一个区间又有一组连续的数据块(data block)组成。这连续的数据库在逻辑上是连续的,有可能在物理磁盘上是分散的。
从物理上看,一个表空间由多个数据文件组成,数据文件是实实在在的磁盘上的文件,这些文件是由Oracle数据库操作系统的block组成的。
创建表空间
--Oracle表空间(tablespaces)
select * fromv$tablespace; --查看表空间
select * fromdba_data_files; --查看数据表空详细文件
select * fromdba_temp_files; --查看临时表空间详细文件
select * fromv$tempfile;
create tablespacepaul datafile 'C:\APP\ADMINISTRATOR\ORADATA\ORCL11C\paul02.DBF' size 20m; --创建表空间paul
create undotablespace undo datafile 'C:\APP\ADMINISTRATOR\ORADATA\ORCL11C\undo01.DBF' size20m; --创建undo类型的表空间
create temporarytablespace user_temp tempfile 'C:\APP\ADMINISTRATOR\ORADATA\ORCL11C\temp02.DBF'size 20m
extent managementlocal; --创建临时表空间
create temporarytablespace tmp tempfile 'C:\APP\ADMINISTRATOR\ORADATA\ORCL11C\tmp01.DBF' size4m ;--创建临时表空间
--删除表空间
drop tablespacetmp; --删除表空间后,保留datafiles文件
drop tablespace paulincluding contents; --删除表空间中的segments , ***.DBF文件没有删除
drop tablespace paulincluding contents and datafiles; --删除表空间中的segment和datafiles
drop tablespaceuser_temp including contents and datafiles cascade constraints; --删除所有与该空间相关的完整性约束条件
--查看表空间使用率
SELECT SUM(bytes) /(1024 * 1024) AS free_space, tablespace_name
FROM dba_free_space
GROUP BYtablespace_name;
SELECTa.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_availa, sys.sm$ts_used b, sys.sm$ts_free c
WHEREa.tablespace_name = b.tablespace_name
AND a.tablespace_name= c.tablespace_name;
--查看所有的表
select * fromall_tables;
--查看指定用户下的表的详情 包括 所属表空间 表大小等
select * fromall_tables where OWNER = 'TESTUSER' AND TABLE_NAME = 'TEST10W';
SELECT SEGMENT_NAME, BYTES/1024/1024/1024 FROMUSER_segments WHERE SEGMENT_NAME = 'TEST10W';
--使用block块方法查看指定用户下表的大小(单位M)
select table_name,blocks*8192/1024/1024from all_tables where OWNER = 'TESTUSER' AND TABLE_NAME = 'TEST10W';
select SEGMENT_NAME,BYTES/1024/1024/1024 from USER_segments;
SELECT * FROM USER_segments;
--在指定用户下查找表大下 通过segment大小
SELECT SEGMENT_NAME, BYTES/1024/1024 FROMUSER_segments WHERE SEGMENT_NAME = 'TEST10W';
-- BYTE方法计算表大小 (G) 1000w 51列 15G
select SEGMENT_NAME,BYTES/1024/1024/1024 from user_segments ;
selecttable_name,blocks*8192/1024/1024/1024 size_me from user_tables
where table_name ='TEST10W';
--block方法计算表大小 单位(M)
selecttable_name,blocks*8192/1024/1024 size_me from user_tables;--计算用户表大小
selecttable_name,blocks*8192/1024/1024 size_me from user_tables;
where table_name ='TEST10W'; --test为查找的表名(大写),user_tables用户下的表
--查看指定用户下视图、触发器、索引详情
select * fromall_triggers where owner='TESTUSER'; -- 所有触发器触发器
select * fromall_views where owner='TESTUSER'; --所有视图
select * fromall_tables where owner='TESTUSER'; --表
select * fromall_procedures where owner='TESTUSER'; --存储过程
selectsegment_name,bytes/1024/102/1024 from dba_segments where owner='TESTUSER'; --表中字段segment_name包含表和索引
select * from dba_tablespaces;
select * from dba_data_files;
alter tablespace system add datafile '路径/system0*.dbf' size 10g autoextend on next 500M maxsize 30g
参考:http://liujianshiwo.iteye.com/blog/1988094