一、概念
1、表空间
用来进行数据存储的(表、function、存储过程等),所以是实际物理存储区域。
每个table都有相应的user,而每个user都有默认的tablespace,如果你创建user时没有指定默认的tablespace,默认tablespace会指定USERS这个tablespace。
表空间一般设置为自动扩展.
2、临时表空间-----
临时表空间主要用来做查询和存放一些缓冲区数据。临时表空间消耗的主要原因是需要对查询的中间结果进行排序。
主要用途是在数据库进行排序运算[如创建索引、order by及group by、distinct、union/intersect/minus/、sort-merge及join、analyze命令]、管理索引[如创建索 引、IMP进行数据导入]、访问视图等操作时提供临时的运算空间,当运算完成之后系统会自动清理
重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql语句的执行,temp表空间会一直增长,直到耗尽硬盘空间。
[重启数据库指的是重启数据库服务器:
sqlplus命令连接数据库
shutdown immediate;关闭数据库
startup force; 启动数据库
]
网上有人猜测在磁盘空间的分配上,oracle使用的是贪心算法,如果上次磁盘空间消耗达到1GB,那么临时表空间就是1GB。也就是说当前临时表空间文件的大小是历史上使用临时表空间最大的大小。
二、问题总结
1、什么时候需要新增临时表空间和表空间?
当空间不足时
2、创建的表空间大小和临时表空间的步骤
(1)查询当前数据库表空间使用量【决定表空间/临时表空间大小】
SELECT TABLESPACE_NAME “tablespace”,
To_char(Round(BYTES / 1024, 2), ‘99990.00’)
|| ‘G’ “total”,
To_char(Round(FREE / 1024, 2), ‘99990.00’)
|| ‘G’ “availabe”,
To_char(Round(( BYTES - FREE ) / 1024, 2), ‘99990.00’)
|| ‘G’ “used”,
To_char(Round(10000 * USED / BYTES) / 100, ‘99990.00’)
|| ‘%’ “used_percent”
FROM (SELECT A.TABLESPACE_NAME TABLESPACE_NAME,
Floor(A.BYTES / ( 1024 * 1024 )) BYTES,
Floor(B.FREE / ( 1024 * 1024 )) FREE,
Floor(( A.BYTES - B.FREE ) / ( 1024 * 1024 )) USED
FROM (SELECT TABLESPACE_NAME TABLESPACE_NAME,
Sum(BYTES) BYTES
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME) A,
(SELECT TABLESPACE_NAME TABLESPACE_NAME,
Sum(BYTES) FREE
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) B
WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME)
ORDER BY Floor(10000 * USED / BYTES) DESC;
(2)查询需要增加数据文件的表空间
select file_name,tablespace_name,bytes/1024/1024 Mb,autoextensible,
maxbytes/1024/1024 MaxSize_Mb from dba_data_files where tablespace_name=upper(‘admin’);
(3)增加表空间的数据文件
alter tablespace admin add
datafile ‘/u01/app/oracle/oradata/orcl/admin_2.dbf’ size 1g autoextend on next 200m;
(4)创建表空间
create tablespace 名字
datafile ‘*oradata orcl .bdf文件’数据表空间的位置
size 50m autoextend on next 50m maxsize 20480m
extent management local 本地表空间管理,若不加默认local
#####本地表空间管理local与数据字典管理dictionary:
临时表空间报错:
(1)可以通过如下语句查看,数据库系统的临时表空间大小:
SELECT TABLESPACE_NAME, FILE_ID, FILE_NAME, BYTES/1024/1024 AS “SPACE(M)”
FROM DBA_TEMP_FILES
(2)通过如下语句扩大表空间:
alter database tempfile ‘/XXXX/XXXX/XXX/temp1_01.dbf’ resize 4G;
其中 ‘/XXXX/XXXX/XXX/temp1_01.dbf’ 是前面那条语句中查询出来的内容。resize后面接的是扩大为多大。
3、增加表空间/临时表空间的注意事项:
(1)在操作前请确保使用者拥有DBA权限
查看用户权限:select * from dba_sys_privs where grantee=‘用户名’
dba_users all_users
(2)数据库服务器磁盘存储具有充足的空间