近期公司老项目反应附件无法上传,查询后台日志发现数据库insert报错,原因是附件以二进制存储在数据库表中导致oracle表空间文件已经达到了32G的最大值。找到了问题,坚信一个数据库肯定不会就只支持32G,来分析下表空间,看看怎么给它扩容?

oracle表空间

Oracle的表空间与数据文件是成对出现的,每一个数据文件对应一个表空间,一个表空间可以包含多个数据文件。表空间分为普通表空间和大文件表空间,普通表空间的单个数据文件最大为32G,而大文件表空间的单个数据文件最大可以为128TB。一般设计数据库时,判断普通表空间无法满足应用时就创建大文件表空间。

--创建表空间
create tablespace TABLESPACE_NAME
logging  
datafile 'D:\app\roydd\oradata\orcl\TABLESPACE_NAME.dbf'
size 50m 
autoextend on  
next 50m maxsize 20480m  
extent management local;

--创建大文件表空间
create bigfile tablespace TABLESPACE_NAME
datafile 'D:\app\roydd\oradata\orcl\TABLESPACE_NAME.dbf'
size 100G AUTOEXTEND ON;

--创建临时表空间 
create temporary tablespace TABLESPACE_NAME
tempfile 'D:\app\roydd\oradata\orcl\TABLESPACE_NAME.dbf' 
size 50m  
autoextend on  
next 50m maxsize 20480m  
extent management local; 

表空间扩容

了解了oracle表空间的定义和特性后,大概就明白,可以通过增加数据文件的方式来为表空间扩容。

第一步:查看表空间使用情况
-- 查看表空间使用情况
SELECT 
tablespace_name 表空间名,
sum(totalM) 总大小M,
sum(usedM) 已使用量M,
sum(surplusM) 剩余量M,
sum(usedM)/sum(totalM)*100 已使用率per
FROM
(
SELECT b.file_id ID,
b.tablespace_name tablespace_name ,
b.file_name file_name,
b.bytes/1024/1024 totalM,
(b.bytes-sum(nvl(a.bytes,0)))/1024/1024 usedM,
sum(nvl(a.bytes,0)/1024/1024) surplusM
FROM dba_free_space a,dba_data_files b
WHERE a.file_id = b.file_id
GROUP BY b.tablespace_name,b.file_name,b.file_id,b.bytes
ORDER BY b.tablespace_name
)
GROUP BY tablespace_name ;
第二步:为指定表空间增加数据文件
ALTER TABLESPACE TABLESPACE_NAME 
ADD DATAFILE 'D:\app\Administrator\oradata\orcl\new_datafile_name.DBF' 
SIZE 512m AUTOEXTEND ON NEXT 32768m MAXSIZE UNLIMITED;

最后,再次检查表空间使用情况确认已经使用新的表空间文件了。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐