我正在使用此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'
上面没有给出正确的结果....看起来像表连接或者出了什么问题......
答案 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
;