无限未来 2017-09-28
之前导入一个大容量dmp数据文件,报一个600错误,咨询网上的解决方法,按上面的处理一圈也没有整好,最后咨询组里一个大神,出现此错误 思路是,单个数据文件大小最大为32G,分析数据库后解决如下:
错误情况:
解决方法:在保证我们导入sql无误的情况下,检查当前用户所在表空间:
select username,default_tablespace from user_users;
可以看到,我们当前使用的是users表空间,下面检查当前使用表空间的使用率:
select total.tablespace_name,
round(total.MB, 2) as Total_MB,
round(total.MB - free.MB, 2) as Used_MB,
round((1 - free.MB / total.MB) * 100, 2) as Used_Pct
from (select tablespace_name, sum(bytes) / 1024 / 1024 as MB
from dba_free_space
group by tablespace_name) free,
(select tablespace_name, sum(bytes) / 1024 / 1024 as MB
from dba_data_files
group by tablespace_name) total
where free.tablespace_name = total.tablespace_name;
在未给表空间加dbf文件前,表空间使用率接近99%,自此分析出为什么Oracle报600错误了,数据文件爆满溢出,导入数据后会被回滚的,解决方式就是加dbf数据文件.
alter tablespace USERS add datafile 'H:\APP\16489\ORADATA\ORCL\USERS03.DBF' size 3G autoextend on;
了解到我导入的数据文件较大,直接加了两个30G的dbf文件,以备后患
alter tablespace USERS add datafile 'H:\APP\16489\ORADATA\ORCL\USERS05.DBF' size 30G autoextend on;
需要注意的是新增的dbf文件是会直接占用硬盘内存的,看大家需求创建新DBF,不要创建一个过大而又用不完的.
增加dbf文件后表空间足够装下我们的数据了,执行导入,无错误,导入成功。