1

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

试图列出所有下面的列,但在显示file_id(数据文件 ID)时绊倒了。

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

所需列:

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

我想我需要加入dba_segment, dba_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'

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

4

1 回答 1

0

试试这个查询。选择您需要的列。请注意,partition_name 可以为空。有一个segment.header_file 和一个extent file_id 可以不同。对于段分区,段 extent_count = max(extent_id)+1,因为每个段分区的 extent_ids 从零开始。段字节 = 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
 ;
于 2013-07-15T14:45:28.073 回答