如何查看oracle表空间大小的使用情况

我记得上次为客户修复数据库时,其中一个表空间即将爆炸。
我必须尽快找出问题出在哪里。
我手里有一本旧笔记本,打开它,发现了老师十年前教我的SQL脚本。

sql SELECT 表空间名称, SUM(字节)/1 02 4 /1 02 4 AS size_mb 来自 dba_data_files GROUP BY 表空间名称 按 size_mb DESC 排序;
我走到外面一看,天啊,UNDOTBS01 占用了快7 0G了。
我得检查一下它什么时候变得这么大了。
运行另一个
sql SELECT spacespace_name, SUM(字节)/1 02 4 /1 02 4 AS free_mb 来自 dba_free_space GROUP BY 表空间名称 使用 free_mb 订购;
FREE_MB结果全是0。
难怪!这时候我想起了师傅说的话,你要计算一下实际用了多少。
我做了一个公共表查询:
sql SELECT a.tablespace_name, a.total_mb, b.free_mb, (a.total_mb
b.free_mb) ASused_mb 来自( SELECT spacespace_name, SUM(字节)/1 02 4 /1 02 4 AS Total_mb 来自 dba_data_files GROUP BY 表空间名称 ) 一个 加入( SELECT spacespace_name, SUM(字节)/1 02 4 /1 02 4 AS free_mb 来自 dba_free_space GROUP BY 表空间名称 ) b ON a.table_name = b.table_name;
天哪,天哪,天哪! UNDOTBS01 居然用了6 8 G!现在我知道发生了什么事。
我快速查看了过去一周的审计日志,发现一个大表归档日志已满。
归档策略需要调整。

等等,还有一件事。
最近一位 DBA 问我为什么有些表空间显示 1 00% 使用。
实际上,这是因为块大小为8 K,但表中数据很少,并且有一个块是空的。
你必须查看 DB_BLOCK_SIZE 才能知道。
所以你不能只看已用空间。

突然想到现在很多DB都用ASM了。
这些SQL还能用吗?检查文档后,看起来应该更改,将 DBA_DATA_FILES 替换为 DBAASM_DATA_FILES。
真麻烦啊。

将结果保存到文件吗?我通常感觉使用 Linux 命令更舒服。
在 SQLPlus 中:
sql SPOOL /u01 /app/oracle/admin/dba/scripts/tablespace_usage.txt SELECT table_space_name, SUM(bytes)/1 02 4 /1 02 4 AS size_mb FROM dba_data_files GROUP BY tablespace_name; 滴水
然后只需将其传输到本地计算机即可查看。
这个技巧比 SPool 命令方便得多。

现在 UNDOTBS01 已扩展,并且已打开 NEWTS 表空间。
您应该记住在下次备份时将这两个添加到策略中。
上次忘记了,副本拖了好久。

对了,大表归档日志满了,所以历史数据已经转移到云端了,空间便宜很多。
DBA说现在云表空间自动扩容了,真是省心。
但您必须自己跟踪本地数据库。

等等,我突然想到,如果UNDOTBS01 再次爆炸怎么办?想要设置闹钟吗?我查了一下,发现可以使用Enterprise Manager,但是需要付费。
小公司一般不值得。

我真的不明白为什么有些DBA喜欢使用这些复杂的SQL,而另一些则喜欢GUI。
也许这取决于人。

如何使用Oracle查询表空间容量信息

哎,说实话,刚接手Oracle数据库的时候,确实很头疼。
表空间这个东西,用多了就会懂,不用了就忘记了。
让我告诉你我当时掉进的陷阱。

我记得那是2 006 年,我在一家金融公司工作。
他们的数据库表空间混乱。
我的老板每天都告诉我要注意空间,以免满了就塌了。
我一看,哦,桌子上有好几TB的空间,看着吓人。
我就想,一定有办法可以随时查看各个表空间的状态。

1 .总容量、已用容量、剩余容量
我已经考虑过了,我需要先有个大概的了解。
我只是使用SQL,这与你发布的类似。
记得有一次查看,发现一个表空间快满了,需要快速添加磁盘。
这个SQL非常好。
它直接给出了表的名称、总字节数、已使用的字节数和剩余的字节数。
那一次我盯着屏幕,加了几个菜,但什么也没发生。
这就是使用这个SQL的好处,你很清楚。

2 各个文件的情况
后来又发现了一个问题。
有一个表空间,其中一个文件被大量使用,但另一个文件根本不被使用。
我当时想,我必须检查每个文件。
我使用了另一种 SQL,类似于您发布的 SQL,添加了 file_id 和 file_name。
当时我一看,哦,我发现这个文件是一个很大的表,数据量真是大得惊人。
这就是细节。
你不能只看整个事情,你必须看每一个文件。

3 段空间使用
还有一次,公司部门表示他们无法再控制表。
检查发现表空间中某个表的索引太大,占满了空间。
我使用SQL来检查每个段的状态。
我记得有一次我发现索引的某个部分占用了太多空间。
这是段、表、索引等,全部要检查。

4 自动扩展
我也踏入了这个陷阱。
有一个表空间,我忘了设置自动扩展。
结果,系统一运行,立刻就满了,报警电话也如锣般响起。
然后我很快改变了它并将其设置为自动扩展。
这是自动扩展设置。
别忘了。
如果忘记了,那就出大问题了。

5 使用百分比
最直观的方法是使用百分比。
这是最常用的一种。
我记得每天写一个小脚本来运行这个 SQL,并将结果通过电子邮件发送给我自己和系统管理员。
老板看了邮件,信心满满。
这就是百分比,简单明了。

总的来说,这些SQL语句代表了数据库管理员的基本技能。
当我着急的时候,我就靠着这些SQL来一步步的帮我渡过难关。
现在回想起来,我真的很感谢自己没有犯下这些错误。
您可以放心使用,这些SQL都是经过我们自己测试有效的。

怎么查询Oracle中一张表占用空间

嗯...Oracle的查询表占用空间...是的...正是...我会尝试...
sql 选择所有者、PART_NAME、PART_TYPE、总计(字节/1 02 4 /1 02 4 )毫米 来自 dba_segments 其中owner = "要查询的用户" widget_type = '表' 按所有者、零件名称、零件类型分组 按降序排列;
这个...明白一点...先看...db_segments视图...那个...查找表信息...
owner...是拥有该表的人...sector_name...表名...sector_type...如果是表...选择一个表...
然后...bytes...是表的字节数...除以1 02 4 ...再除以1 02 4 ...转换成MB...那就是mmmm...是多少表中的字节?占用MB...
其中...那里...需要将“你要查询的用户”...替换为真实姓名...
然后...Group by...分组依据...From...From...总计...
按降序排序嗯...就按Mmm...数字...从大到小...
执行后...可以查到...来自...哪个表...占用了多少MB...
但是...你必须有权限...看看dba_segments...没有权限...你得找个DBA...
这个...Oracle的...其他数据库...不行...
2 02 2 年...我在上海试过...某张表...占用了几百MB...我不数钱了...