博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle数据库 修改表空间数据文件大小,优化存储
阅读量:5107 次
发布时间:2019-06-13

本文共 2471 字,大约阅读时间需要 8 分钟。

查询数据文件存储使用情况

/**  示例1 只查询*/select b.file_id  文件ID,         b.tablespace_name  表空间,         b.file_name     物理文件名,         b.bytes / 1024 / 1024       总字节数,         (b.bytes - sum(nvl(a.bytes, 0))) / 1024 / 1024   已使用,         sum(nvl(a.bytes, 0)) / 1024 / 1024        剩余,         round(sum(nvl(a.bytes, 0)) / (b.bytes) * 100, 2)  剩余百分比   from dba_free_space a,       dba_data_files b   where a.file_id = b.file_id   group by b.tablespace_name,       b.file_name,       b.file_id,       b.bytes   order by b.tablespace_name;/** 示例2 附带查询压缩脚本*/select a.file#,a.name,a.bytes / 1024 / 1024 CurrentMB,ceil(HWM * a.block_size) / 1024 / 1024 ResizeTo,(a.bytes - HWM * a.block_size) / 1024 / 1024 ReleaseMB,'alter database datafile ''' || a.name || ''' resize ' ||ceil(HWM * a.block_size) / 1024 / 1024 || 'M;' ResizeCmdfrom v$datafile a,(SELECT file_id, MAX(block_id + blocks - 1) HWMFROM DBA_EXTENTSGROUP BY file_id) bwhere a.file# = b.file_id(+)And (a.bytes - HWM * a.block_size) >0and rownum < 10

修改数据文件容量语句

alter database datafile 'D:\DSINSTALL\ORACLE\ORADATA\ORCL\USERS_DATA01.DBF' resize 10M;

楼主在此处遇见了一个问题,在清理了一大批数据后,发现表空间的存储大小基本没变,强行修改数据文件大小也不行,会提示“资源正在占用”,后面了解到,在删除数据时最好使用下列语句:

/* 清空表i数据*/truncate table table_name;注:不要使用delete删除,由于oracle自带回滚机制或者oracle处于数据保护机制,使用delete删除的数据oracle会临时保存,类似于假删除/回收站/* 删除用户及附属数据*/drop user user_name descade;

如果数据表曾经存在大数据情况下,还需要修改表的初始化STORAGE值,语句如下,该语句的含义是修改表/索引的初始值为64k,每次增长的幅度为32k

--表select 'ALTER TABLE '||owner||'.'||table_name||' MOVE TABLESPACE '||tablespace_name||' STORAGE(INITIAL 64K NEXT 32K);'   from dba_tables  where owner='AA' and initial_extent>65536    --索引select 'ALTER INDEX '||owner||'.'||index_name||' REBUILD STORAGE(INITIAL 64K NEXT 32K);'   from dba_indexes  where owner='AA'  and initial_extent>65536  --分区表select 'ALTER table '||table_owner||'.'||table_name||' MOVE PARTITION '||PARTITION_NAME||' STORAGE(INITIAL 64K NEXT 32K);'     from DBA_tab_PARTITIONS  where table_owner='AA' and initial_extent>65536  --分区索引select 'ALTER INDEX '||index_owner||'.'||index_name||' REBUILD PARTITION '||PARTITION_NAME||' STORAGE(INITIAL 64K NEXT 32K);'     from DBA_ind_PARTITIONS  where index_owner='AA' and initial_extent>65536

清空当前用户数据库表下存储大于1M的表数据脚本查询语句

select'truncate table ' || segment_name||';',bytes/1024/1024 MB,u.*from user_extents uwhere bytes/1024/1024 > 1

查询数据库中各个表的实际数据存储使用情况

selectsegment_name, sum(bytes)/1024/1024 MBfrom user_extents ugroup by segment_name

 

转载于:https://www.cnblogs.com/hualuo-sign/p/10384695.html

你可能感兴趣的文章
如何处理Win10电脑黑屏后出现代码0xc0000225的错误?
查看>>
局域网内手机访问电脑网站注意几点
查看>>
c++ STL
查看>>
json数据在前端(javascript)和后端(php)转换
查看>>
[Serializable]的应用--注册码的生成,加密和验证
查看>>
Groovy中那些神奇注解之ToString
查看>>
Day19内容回顾
查看>>
第七次作业
查看>>
MySql update inner join!MySql跨表更新 多表update sql语句?如何将select出来的部分数据update到另一个表里面?...
查看>>
我最宏大的个人愿望
查看>>
北漂周记--第5记--拼命编程
查看>>
比赛总结一
查看>>
SpringBoot项目打包
查看>>
JSP的3种方式实现radio ,checkBox,select的默认选择值
查看>>
Linux操作系统 和 Windows操作系统 的区别
查看>>
《QQ欢乐斗地主》山寨版
查看>>
文件流的使用以及序列化和反序列化的方法使用
查看>>
Android-多线程AsyncTask
查看>>
第一个Spring冲刺周期团队进展报告
查看>>
C++函数基础知识
查看>>