oracle10g如何删除数据文件/表空间

66次阅读
没有评论

共计 3016 个字符,预计需要花费 8 分钟才能阅读完成。

丸趣 TV 小编给大家分享一下 oracle10g 如何删除数据文件 / 表空间,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

1. 获取开启
select alter table || owner || . || table_name || enable row movement; from dba_tables where tablespace_name= USERS
select alter table || owner || . || table_name || shrink space CASCADE; from dba_tables where tablespace_name= USERS

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 表空间权限会正常导入,否则报错

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

以上是“oracle10g 如何删除数据文件 / 表空间”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-24发表,共计3016字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)