共计 1879 个字符,预计需要花费 5 分钟才能阅读完成。
在 Oracle 下在创建表空间时一般没有特殊的需求时都是使用可自动扩展的表空间以便于日常的管理,这样在日常情况下就不用监控表空间大小,在没有使用自动增长的表空间建议在 80% 左右的时候就要增加新的物理文件已保障其稳定,而在 Oracle 中使用自动增长的表空间,在使用中其物理文件会随着表空间的增加而增加而在实际情况中可能会因为业务的改变而没有使用那么多的表空间,这时我们就可以通过 Oracle 下的表空间缩减回收来回收未使用的表空间物理文件所使用的磁盘资源,在 Oracle 下回收表空间很简单,在 Oracle 的系统下除了用户自行定义的表空间还有如下几个默认表空间:
表空间 | 说明 |
---|---|
EXAMPLE | 如果在安装时有选择“实例方案”选项,则在 Oracle 中会有该表空间,如未选择则没有,此表空间中存放的是各样例的数据 |
SYSAUX | SYSTEM 表空间的辅助空间。主要用于存储数据字典的其他数据对象,这可以减少 SYSTEM 表空间的负荷 |
SYSTEM | 存放数据字典,其中包括表、视图、存储过程等等相关数据 |
TEMP | 存放 SQL 语句处理的表和索引的信息,如:在数据排序时就会占用此表空间 |
UNDOTBS1 | 存放撤销数据的表空间 |
USERS | 一般用于存放 Oracle 的用户数据 |
而默认的表空间的相关详细信息可以通过 sys 用户下的 DBA_DATA_FILES、DBA_FREE_SPACE、DBA_SEGMENTS 这 3 张字典表查到相关表空间所存放的数据对象、类型及表空间的相关物理文件和拥有者的相关记录,如下用于查询 Oracle 下表空间的使用详细情况
SELECT
F.TABLESPACE_NAME
"表空间名"
,
D.TOT_GROOTTE_MB
"表空间大小 (M)"
,
D.TOT_GROOTTE_MB - F.TOTAL_BYTES
"已使用空间 (M)"
,
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),
'990.99'
) ||
'%'
"使用比"
,
F.TOTAL_BYTES
"空闲空间 (M)"
,
F.MAX_BYTES
"最大块 (M)"
FROM
(
SELECT
TABLESPACE_NAME,
ROUND(
SUM
(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(
MAX
(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM
SYS.DBA_FREE_SPACE
GROUP
BY
TABLESPACE_NAME) F,
(
SELECT
DD.TABLESPACE_NAME,
ROUND(
SUM
(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM
SYS.DBA_DATA_FILES DD
GROUP
BY
DD.TABLESPACE_NAME) D
WHERE
D.TABLESPACE_NAME = F.TABLESPACE_NAME
AND
F.TABLESPACE_NAME <>
'EXAMPLE'
AND
F.TABLESPACE_NAME <>
'SYSAUX'
AND
F.TABLESPACE_NAME <>
'SYSTEM'
AND
F.TABLESPACE_NAME <>
'UNDOTBS1'
AND
F.TABLESPACE_NAME <>
'USERS'
AND
F.TABLESPACE_NAME <>
'EXAMPLE'
ORDER
BY
1;
而在使用表空间收缩也很简单:
SELECT
FILE_NAME
FROM
SYS.DBA_DATA_FILES
WHERE
TABLESPACE_NAME =
'TEST'
;# 查询出 TEST 表空间的物理文件路径
ALTER
TABLESPACE TEST
COALESCE
;# 回收表空间碎片
ALTER
DATABASE
DATAFILE
'/usr/local/u01/oracle/oradata/oracle/test.dbf'
RESIZE 2M;# 回收表空间
更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2018-01/150221.htm
正文完
星哥玩云-微信公众号