Oracle 表空间管理
概念
表空间用于组织管理实体数据文件
Oracle stores data logically in tablespaces and physically in datafiles associated with the corresponding tablespace.[1]
自Oracle 10g后,Oracle提供两类表空间BigFile Tablespace,BFT
和SmallFile Tablespace,SFT
,分别支持不同类型的datafiles,关于这两类表空间详细内容,可以参考此文[2]。本文主要以SmallFile Tablespace
类型表空间实现为主,这也目前Oracle默认的表空间设置。
创建
以表空间所属用户身份登录
-- 表空间名 tb_name
create tablespace tb_name
-- 开启log
logging
-- 指定数据文件存放路径及文件名
datafile 'D:/app/Administrator/oradata/user_data.dbf'
-- 初始大小
size 50m
-- 自动拓展 开
autoextend on
-- 每次自动拓展大小
next 50m maxsize unlimited
extent management local;
查询
查询已有表空间
SELECT a.tablespace_name "表空间名",
total "表空间大小",
free "表空间剩余大小",
( total - free ) "表空间使用大小",
Round(( total - free ) / total, 4) * 100 "使用率 %"
FROM (SELECT tablespace_name,
Sum(bytes) free
FROM DBA_FREE_SPACE
GROUP BY tablespace_name) a,
(SELECT tablespace_name,
Sum(bytes) total
FROM DBA_DATA_FILES
GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name
扩展
根据官方文档说明,扩展表空间有两种方式
- Add a datafile to a tablespace
- Increase the size of a datafile
第一种用于扩展系统表空间或其他已经存在的表空间
第二种用于直接拓展datafile大小,如果创建时设置了自动拓展就无需设置了
第一种实现如下
ALTER TABLESPACE tb_name
-- 不要跟已有文件冲突
ADD DATAFILE 'D:/app/Administrator/oradata/user_data_1.dbf'
-- 初始大小
size 50m
-- 自动拓展 开
autoextend on
-- 每次自动拓展大小 可以设置大一些
next 1024m maxsize unlimited;
收缩
删除表或者删除较多内容后,datafile文件不会自动缩减,可以通过resize
方式重置表空间大小。用下面代码可以生成不同datafile的resize
方案,再分别执行。
SELECT /*+ ordered use_hash(a,c) */
'alter database datafile '''
|| a.file_name
|| ''' resize '
|| round(a.filesize -(a.filesize - c.hwmsize - 100) * 0.8)
|| 'M;',
a.filesize,
c.hwmsize
FROM
(
SELECT
file_id,
file_name,
round(bytes / 1024 / 1024) filesize
FROM
dba_data_files
) a,
(
SELECT
file_id,
round(MAX(block_id) * 8 / 1024) hwmsize
FROM
dba_extents
GROUP BY
file_id
) c
WHERE
a.file_id = c.file_id
AND a.filesize - c.hwmsize > 100
对于TEMP表空间,可以采用shrink
方式[3],与之相关还有move
操作,可阅读相关文章[4]
-- 查询temp表空间情况
select * from dba_temp_free_space;
-- 收缩
alter tablespace temp shrink space;
Reference
本文最后更新于:2021年4月22日 下午
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。