脚本查找数据库逻辑详细信息

时间:2013-04-19 15:20:47

标签: sql oracle oracle11g

我正在使用此SQL脚本列出数据库逻辑记录详细信息但无法成功连接表。

尝试列出以下所有列,但在显示file_id(数据文件ID)时偶然发现。

非常感谢所有帮助和建议。

所需的专栏:

 owner, segment_name, partition_name, file_id, segment_type, 
 extent count, size_k (space occupied by object) 

我想我需要加入dba_segmentdba_extents& dba_tablespaces次观看,但它没有成功......

SELECT 
    dbs.owner, dbs.segment_name, dbs.partition_name, dbe.file_id, 
    dbs.segment_type, dbs.extents "Extent count" , dbs.bytes/1024 "size_k" 
FROM dba_segments dbs, dba_extents dbe, dba_tablespaces tbs 
WHERE 
    dbs.tablespace_name = dbe.tablespace_name 
    and dbe.tablespace_name = tbs.tablespace_name 
    and tbs.contents = 'PERMANENT'

上面没有给出正确的结果....看起来像表连接或者出了什么问题......

1 个答案:

答案 0 :(得分:0)

尝试此查询。选择您需要的列。请注意,partition_name可以为null。有一个segment.header_file和一个可以不同的范围file_id。由于extent_ids从每个段分区开始为零,因此段分区的段extent_count = max(extent_id)+1。段bytes = sum(extent.bytes)。

SELECT seg.owner, seg.segment_name, seg.partition_name, 
      seg.header_file, seg.bytes / 1024 AS segment_kb, seg.EXTENTS AS extent_count, 
      seg.tablespace_name, ext.extent_id, ext.file_id, ext.bytes / 1024 as extent_kb
FROM dba_segments seg
JOIN dba_extents ext
  ON seg.owner = ext.owner
 AND seg.segment_name = ext.segment_name
 AND (seg.partition_name = ext.partition_name OR seg.partition_name IS NULL)
ORDER BY seg.owner, seg.segment_name, seg.partition_name, ext.extent_id
 ;