用exp和imp释放Oracle磁盘空间


版本1

Oracle12c

版本2

 

版本3

 

关键字

释放空间

 

  1. 问题现象
    1. Oracle有很多临时表,太占空间了,想把他们删掉。并释放磁盘空间。事实上,删掉Oracle表(清空回收站)是不会释放磁盘空间的,释放磁盘空间最彻底的方式就是exp/imp。
  2. 原因分析
    1. 在Oracle中,如果想删掉某些表,用delete删了后,其实不会释放空间和定义的。
  3. 处理步骤
    1. 按照1的方式,可以释放空间和定义。这样删除后,Oracle就多出了空闲的空间,表空间的使用率也下降了。如果我们再新建表存数据时,优先用Oracle的空闲空间,提高表空间的使用率,当空闲空间已用完,表空间的使用率为100%时,Oracle就会自动增大表空间(一般有最大限制)。所以定时做1操作,磁盘空间就不会老增大,它会优先用删掉的表的空间。如果想缩小oracle表空间大小,释放磁盘空间,可按照1,2,3,4步骤做。
    1. 1把不要的表删掉
      1. 先把不要的表的数据所占的空间释放。

TRUNCATE TABLE 表名称DROP STORAGE;

  1. 把表删除,不放进回收站。

drop table 表名称purge;

  1. 2创建用户和表空间(如果想导入表的用户存在,这一步可以省略)
    1. 创建表空间语句:

create tablespace temp1 datafile 'D:\ temp1.dbf' size 10m autoextend on  next 50m maxsize 20480m extent management local;(每次自动增加50m,最大为20G)

  1. 创建用户并指定表空间:

create user temp1  identifiedby oracle default tablespace TEMP1;(用户名:temp1,密码:oracle,表空间:TEMP1)

  1. 给用户授予权限:

grant connect,resource,dba to temp1;(用户名:temp1)3


  1. 3文件的导入导出释放磁盘空间
    1. 打开命令行提示符(管理员),将用户nzk的数据保存到d盘的nzk.dmp文件
    2. 导出的用户名:NZK  密码:oracle (不用分号)  
    3. exp NZK/[email protected]/xe file=d:\nzk.dmp
    4. 用exp和imp释放Oracle磁盘空间_第1张图片
  1.  将nzk.dmp文件还原给用户Temp1

导入的用户名:TEMP1 密码:oracle(不用分号)

imp Temp1/[email protected]/xe file=d:\nzk.dmp full=y

用exp和imp释放Oracle磁盘空间_第2张图片

  1. 这样TEMP1用户就拥有NZK用户的全部数据
  1. 4删除用户和表空间它所在的表空间
    1. 打开sqlplus,在system用户下输入如下:
      1. 删除user
      2. drop user 用户名 cascade;
      3. 将表空间设置为离线

alter tablespace 表空间名称 offline;

  1. 删除表空间

drop tablespace 表空间名称 including contents and datafiles;

  1. 效果
    1. 结果,之前nzk用户所在的ASSM表空间大小为8百多兆,

    2. 导出的文件大小

    3. 新建用户TEMP1,导入数据后大小

    4. 然后,我们可以吧ASSM表空间删掉了,

你可能感兴趣的:(异常排查,异常解决方案急诊室)