oracle删除(释放)数据文件/表空间流程

生产环境:数据库里空间不足,niptest 表空间251G,只使用了17G

再alter database datafile '...../niptest1' resize 10G; 的时候说超出了范围要求

由于表变动比较频繁,高水位值比较大

(高水位 HWM “High Water Mark “:oracle中block有没有使用的分界线,它会随着数据的insert而上升,但它并不会随数据的delete而下降,因此全表扫描的时间并不因数据的delete而减少,相反可能由于块清除反而全表扫描时间增加)

删除表空间步骤:

1)  批量将niptest表空间中的表move 到USERS表空间,再删除表空间niptest
首先看下此表空间内的表  move到其他表空间  防止数据丢失

select * from dba_tables where tablespace_name='NIPTEST'; 
select * from dba_extents where tablespace_name='NIPTEST';
select * from dba_segments where tablespace_name='NIPTEST';
SELECT 'alter table '||owner||'.'||table_name||' move tablespace USERS;' FROM DBA_tables WHERE TABLESPACE_NAME='NIPTEST'; 批量把表移动到其他表空间

******  move (降低高水位)

优点:可以移动表到其他表空间,在执行命令时不需要执行alter table table_name enable row movement

缺点:表move 会导致表中的索引失效,要rebuild;同时表会产生行级锁......;在此如果表中有LOB字段 时要用一下命令来实现表空间移动:alter table owner.table_name move tablespace tablespace_name lob (lob_column) store as lob segment  tablespace tablespace_name;也可以单独move lob,index要rebuild

******  shrink space

优点:降低高水位时索引不会失效

缺点:不能将表移动到其他表空间;高水位降低效果没有move明显;同时在执行命令前要先执行(alter table table_name enable row movement允许行移动)也会表会产生行级锁.......,shrink比move更耗费cpu,产生很多current block这样生成巨大的redo与undo 如果表中索引很少可以建议使用move降低高水位

2) 移动完表发现 主键和索引还是在源表空间

SELECT * FROM DBA_extents WHERE TABLESPACE_NAME='USERS';   -->查看原表空间的主键和索引
alter index XX rebuild tablespace ;

---> 批量执行索引重建
SELECT 'alter index  '||owner||'.'||segment_name||' rebuild tablespace USERS;' FROM DBA_extents WHERE TABLESPACE_NAME='NIPTEST';   批量将主键索引重建到其他表空间
select * from dba_segments where tablespace_name='NIPTEST';弄完上面的操作,这里还有数据,不要在意,那是回收站的,无需修改直接删表空间即清空

(3) 表都移动完了  之后 先把数据文件offline drop再删除数据文件

alter database datafile '/home/oracle/app/oracle/oradata/kfdb/niptest1' offline drop;

---> 查看下数据文件状态

select status from dba_tablespaces v$datafile where tablespace_name='NIPTEST'; -----offline
--> 再删除表空间
drop tablespace niptest; --> 删除表空间,但不删除其文件 
drop tablespace niptest including contents; -->删除表空间同时删除表空间的数据对象
drop tablespace niptest including contents and datafiles;

--> 删除表空间时删除数据对象及其OS系统文件一起删除,,以便释放空间,前提表空间不能是数据库默认表空间 
否则会 报错:ORA-12919: Can not drop the default permanent tablespace

(4) 怎么查看下数据库的默认表空间是什么:
select * from database_properties where property_name = 'DEFAULT_PERMANENT_TABLESPACE';

如果您删除的表空间是数据库默认表空间要用一下命令来

更换数据库默认表空间:alter database default tablespace users;
 再执行: drop tablespace niptest including contents and datafiles;

[root@kfdb49 kfdb]# df -hl  --> 看下OS系统空间情况  --- 表空间释放

------创建表空间的语句:
create tablespace niptest datafile '/home/oracle/app/oracle/oradata/kfdb/niptest1' size 10G autoextend on next XXM maxsize XXm extent management local;

有的人会想着再创建一个niptest 为10G的表空间,避免后期imp时源表的表空间是niptest

: 其实不需要,如果库中没有niptest表空间,就算imp源表的表空间是niptest,也会导入到用户的默认表空间,有niptest表空间的话则会导入到niptest表空间(如果后续不想拥有niptest表空间 就要斩草除根的将niptest删除之后不要创建)

回收unlimited tablespace 给予额外权限niptest表空间权限会正常导入,否则报错

额外权限和用户默认表空间是一个的话可以正常导入,否则知道表结构到用户默认表空间

具体实验参考: http://space.itpub.net/28602568/viewspace-760169#xspace-tracks

转自:http://blog.itpub.net/28602568/viewspace-759786/

【Oracle】删除(释放)数据文件/表空间流程的更多相关文章

  1. 如何删除offline数据文件/表空间上的分区

    接上一篇"Oracle 10g RAC全库flashback " http://www.cnblogs.com/cqubityj/p/3265552.html 在打开数据库之前把2 ...

  2. oracle删除非空的表空间

    oracle删除非空的表空间: drop tablespace tablespaceName including contents;

  3. Oracle添加数据文件创建表空间,创建用户代码

    1,添加数据文件创建表空间 CREATE TABLESPACE "TEST1" DATAFILE 'D:\ORACLE\11G\ORADATA\ORCL\TEST1.DBF' SI ...

  4. Linux环境下利用句柄恢复Oracle误删除的数据文件

    在误删除Oracle的数据文件后,如果未关闭数据库,文件句柄还没有释放,且被删除的数据文件占用的磁盘块未被复写,则可以利用句柄的方式来恢复数据文件.下面模拟恢复过程. (一)环境 OS版本:redha ...

  5. Oracle基础(三) 表空间

    数据库的存储结构 数据库主要用于存储和检索相关的信息,Oracle数据库包含逻辑结构和物理结构. 物理结构是指现实存储单元,由一组文件组成如数据文件.日志文件.控制文件. 数据文件:用于存储数据的文件 ...

  6. Oracle架构设计01:表空间的管理维护规范

    Oracle数据库的表空间管理可以说是非常简单和基础的一项维护工作,但是越简单的事情就越要制定统一的规范,这样数据库的各项管理工作才会愈加的简单高效. 那么接下来,问题来了.. Q1:当我们接手一个新 ...

  7. Oracle创建、管理撤销表空间

    撤销管理模式: 用户通过设定撤销管理模式(undo mode)就可以灵活地选择使用手动撤销管理(manual undo management)或自动撤销管理(automatic undo manage ...

  8. oracle入坑日记<四>表空间

    1   表空间是什么 1.1.数据表看做的货品,表空间就是存放货品的仓库.SQLserver 用户可以把表空间看做 SQLserver 中的数据库. 1.2.引用[日记二]的总结来解释表空间. 一个数 ...

  9. Oracle数据库体系结构(7) 表空间管理1

    表空间是Oracle数据库最大的逻辑存储结构,有一系列段构成.Oracle数据库对象存储结构的管理主要是通过表空间的管理实现的. 1.表空间的分类 表空间根据存储类型不同分为系统表空间和非系统表空间 ...

随机推荐

  1. I/O-外部设备

    目录 输入设备 输出设备 显示器 阴极射线管(CRT)显示器 字符显示器 图形显示器 图像显示器 打印机 小结 外存储器 磁盘存储器 磁盘设备的组成 存储区域 硬盘存储器 磁盘的性能指标 磁盘地址 硬 ...

  2. Android全面解析之Activity生命周期

    前言 很高兴遇见你~ 欢迎阅读我的文章. 关于Activity生命周期的文章,网络上真的很多,有很多的博客也都讲得相当不错,可见Activity的重要性是非常高的.事实上,我猜测每个android开发 ...

  3. JavaSE23-函数式接口&Stream流

    1.函数式接口 1.1 函数式接口概述 概念 有且仅有一个抽象方法的接口 如何检测一个接口是不是函数式接口 @FunctionalInterface 放在接口定义的上方:如果接口是函数式接口,编译通过 ...

  4. Java NIO:FileChannel数据传输

    调用方式 FileChannel dstChannel; FileChannel srcChannel; dstChannel.transferFrom(srcChannel,0,srcChannel ...

  5. 仵航说 Vue项目如何打包并发布到linux服务器 仵老大

    1,打包 1.1首先你会在本地编辑好你的代码, 1.2然后在控制台输入 npm run build npm run build 1.3稍等片刻就打包完毕 2,位置 2.1打包完毕之后会在项目中生成一个 ...

  6. PHPCMS V9.6.0 SQL注入漏洞EXP

    运行于python3.5 import requests import time import re import sys def banner(): msg = '''--------------E ...

  7. eclipse 创建自己的Maven项目(超详细)

    本文章 主要是 讲解 是讲解 eclipse创建项目 --SpiritMark_liu 先配置 Maven 的 settings 地址 (Window -> Perferences–>Ma ...

  8. Docker 笔记学习

    文章目录 概述 CentOS7 Docker 安装 启动 Docker 后台服务 镜像加速 Docker常用命令 如何创建一个镜像 存储和载入镜像 上传镜像 容器的基本操作 创建容器 终止容器 如何进 ...

  9. python之把列表当做队列使用

    把列表当做队列使用,只是在列表中第一个加入的元素,第一个提取出来,拿列表当做队列用,效率并不高.在列表中最后添加或者删除元素速度很快,然而从列表里插入或者从头弹出速度却不快,因为其他所有元素都要一个一 ...

  10. C#中Newtonsoft.Json 序列化和反序列化 时间格式

    步骤 引用 using Newtonsoft.Json; using Newtonsoft.Json.Converters; 格式配置 IsoDateTimeConverter timeFormat ...