1 删除数据后释放数据文件所占磁盘空间

(1)找到占用空间的文件号

select file#, name from v$datafile;

(2)查找最大的块号,例如得到1234

select max(block_id) from dba_extents where file_id=4;

(3)计算表空间实际占用的磁盘空间

select value from v$parameter where name='db_block_size';--数据块的大小,例如得到8192
select 1234 * 8192 / 1024 / 1024 from dual; --以MB为单位计算出实际占用的空间大小

(4)修改数据文件尺寸,比实际占用的物理空间稍大点即可

alter database datafile 'D:\oracle\oradata\renyuan\RENYUAN_TBS_XLUSER.DATA' resize 10m;


2 释放 UNDOTBS01.DBF 占用的空间:

(1)创建一个新的小空间的 undo tablespace  

create undo tablespace UNDOTBS02 datafile 'D:\oracle\oradata\renyuan\UNDOTBS02.dbf' size 5m;

(2)设置新的表空间为系统 undo tablespace  

alter system set undo_tablespace=UNDOTBS02;

(3)删除旧的表空间  

drop tablespace UNDOTBS1 including contents;


3 ORA-01683 解决方法:

alter database datafile 'D:\oracle\oradata\renyuan\RENYUAN_TBS_XLUSER.DATA' 
autoextend on next 5m maxsize unlimited;

本文链接地址: Oracle磁盘空间释放一例
https://blog.qingfengju.com/index.asp?id=396

分类:数据库 查看次数:20072 发布时间:2016/11/18 21:25:12

对于Oracle11g来说,新增了参数deferred_segment_creation,且默认等于true,导出空表时会报错:

EXP-00003: 未找到段 (0,0) 的存储定义,解决方法:


1 找到这些空表,并生成 alter table <表名> allocate extent(size 64k); 语句;

select 'alter table '||table_name||' allocate extent(size 64k);' sql_text,table_name,tablespace_name
from user_tables where table_name not in (select segment_name from user_segments where segment_type = 'TABLE');


2 执行该SQL语句输出的结果,创建这些表的segment。


3 相关命令

show parameter deferred_segment_creation;
alter system set deferred_segment_creation=false;


导出数据:

exp xxxdba/xxxdba@mydb_test file=2016-08-01_mydb.dmp owner=xxxdba


导入数据:

imp xxxdba/xxxdba@mydb file=2016-08-01_mydb.dmp full=y ignore=y

本文链接地址: Oracle 11g导出数据时报错EXP-00003
https://blog.qingfengju.com/index.asp?id=395

分类:数据库 查看次数:23255 发布时间:2016/8/1 13:08:18