oracle表空间如何压缩,Oracle里表空间的压缩
对于table空间的收缩是一个老生常谈的问题,不过却是一个一直都没有很透彻的讨论清楚过的问题。借ks_reny的机会,谈谈个人看法,有不及之处,希望高手引领更深入研究此话题。
datafile是物理上的一个文件在下层就是基于文件系统的block块了,而我们经常提到的segment,extent,数据库的 block,这里都是oracle存储是的逻辑上的单位,所以首先设想一下如果是你来实现delete或者drop的操作的时候,你会是真正的调用文件系统的API,而重新把datafile重新整理一遍吗,我想你也不会如此的吧。这样的话,每个delete或者是drop的操作将会带来我们更多的痛苦。所以Oracle更不会如此,这就是为什么你的datafile的大小并没有发生变化的原因,那么,文件系统上虽然没有重新修理datafile,但是 oracle里却通过自己的实现,通过对内部逻辑单元的处理,在逻辑上已经删除了那些单元,从而storage manage知道以后如果需要的连续block这里可以满足的话,就把这个碎片填上了。所以对于oracle来说,他很清楚这里是可用的,这样利用率也就小了变话了。
所以这里要解决你的问题就要使我们的datafile瘦身,只有datafile瘦下来了,你的data又不变化了,利用率也就上升了。那么如何让你的datafile瘦下来?
1. exp/imp expdp/impdp 这个虽然原始,也比较繁琐,但是确实是一个非常稳定可靠的方法。
2. resize resize面临一个问题,resize到多大,大了没有意义,小了出现错误。
这里特地写了一个sql脚本,你可以使用运行这个脚本的结果,就是你指定的file做resize的命令
SQL> variable blocksize number;
SQL> begin execute immediate 'select value from v$parameter where name = ''db_block_size''' into :blocksize; end;
2 /
SQL>print :blocksize;
SQL> select 'alter database datafile ''' ||
2 file_name || ''' resize ' ||
3 ceil( nvl(hwm,1)*:blocksize/1024/1024 ) || 'm;' cmd
4 from dba_data_files a,
5 ( select file_id,
6 max(block_id+blocks-1) hwm
7 from dba_extents
8 group by file_id ) b
9 where a.file_id = b.file_id(+) and b.file_id in (7, 8, 10);
CMD
--------------------------------------------------------------------------------
alter database datafile 'F:\DEVELOPER\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST\TESTTS1.02.DBF' resize 18m;
alter database datafile 'F:\DEVELOPER\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST\TESTTS1.01.DBF' resize 5m;
alter database datafile 'F:\DEVELOPER\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST\TESTTS1.03.DBF' resize 40m;
执行这里的sql语句就可以了,不过这里注意了,这里可以看到,实际上是用最大的blocks作为resize的标准,如果size超过,或者是已经扩展过的block 就会出现 文件包含在请求的 RESIZE 值以外使用的数据的错误了,所以这个方法,可行但是并不是很实际。这样的case基本上只在做练习的时候出现。
3. 如果你是一个表或者少量的表在那个表空间,可以通过creat table as select ...的方式或者move的方式,move完成后再干掉表空间,干掉表空间的时候,including contents and datefiles就可以了。
oracle表空间如何压缩,Oracle里表空间的压缩相关推荐
- oracle表独立数据文件,oracle表空间及数据文件
1. Oracle 的逻辑结构 数据库的物理结构是由数据库的操作系统文件所决定,每一个 Oracle 数据库是由三种类型的文件组成:数据文件.日志文件和控制文件.数据库的文件为数据库信息提供真正的物理 ...
- oracle 表碎片化处理,oracle数据库碎片化管理
******************************************************************************** 1.表空间碎片 *********** ...
- oracle表最大条数,oracle 数据表最大多少条记录
1.64位linux 和64位oracle,默认oracle表空间数据文件用的BLOCKSIZE是8k,表空间数据文件最大是32G. SQL>show parameter k_cache_siz ...
- oracle表领域的做成,Oracle的架构学会了就可以做一个框架软件设计师了
编辑推荐: 本文来自于csdn,本文主要是先来看一个图,这个图对于从整体上理解ORACLE的体系结构组件,最后,举一个用户提交sql语句的的例子来结束本文. 对于一个数据库系统来说,假设这个系统没有运 ...
- oracle 表列 自增,ORACLE表建立自增列
create tablespace studentDB datafile 'E:\datafiles_1.dbf' size 10m; create user Huang_Ying_Bo identi ...
- java 获取oracle表结构_获取Oracle中所有表的列表?
回答(19) 2 years ago 我们可以从以下查询获取所有表格,包括列详细信息: SELECT * FROM user_tab_columns; 2 years ago 使用sqlplus更好地 ...
- java 获取oracle表结构_Java导出oracle表结构实例详解
Java导出oracle表结构实例详解 发布于 2020-7-20| 复制链接 摘记: Java导出oracle表结构实例详解最近用到的,因为plsql是收费的,不让用,找了很多方法终于发现了这个. ...
- oracle 表单重命名,Oracle重命名表
在本教程中,您将学习如何使用Oracle RENAME语句重命名数据库中的表. 要重命名表,可以使用以下Oracle RENAME表语句,如下所示: RENAME table_name TO new_ ...
- oracle表ddl,七、Oracle中DDL改变表结构操作
目录 7.1. 创建表 Create table student( Sid number(10), Snamevarchar2(10) ) tablespace tt; 以上 tablespace 不 ...
- oracle 表 实时同步,跨Oracle数据库实现表级别的实时同步
Unsplash 一. 前言 这个问题是上一篇文章<Oracle跨数据库实现定时同步指定表中的数据>中所提问题的进一步延伸.考虑到对数据的实时性要求比较高,设置成定时同步,有点不妥,需要改 ...
最新文章
- VR/AR标准委员会成立,宣布全新的标准OpenXR
- POJ1118 HDU1432 Lining Up
- springMVC,mybatis配置事务
- Qt文档阅读笔记-Image QML官方解析与实例
- 并查集(ACWING三道题)
- 基于FPGA 的CRC校验码生成器
- Jlink软件下载和安装教程
- 代码对比工具 mac
- map字符串转json格式
- NC63重写导入功能
- 透彻解读mysql的可重复读、幻读及实现原理
- 君正X1000串口流控bug
- 图片编辑助手小程序_图片加文字_快速拼图_表情包制作
- 使用Jquery+bootstrap无限级菜单树
- android车载应用市场,车载市场
- 关于java项目与web项目中lib包的那点事
- css中 vertical-align 属性的应用和案例
- 爬取东方财富网的部分股票信息(2)
- 啊!我的专业不只是修电脑,装系统
- SpringBoot整合Swagger2-knife4j