2013-04-19 5 views
1

Я работаю над этим скриптом SQL, чтобы перечислять данные логической записи базы данных, но не смог успешно присоединиться к таблицам.Сценарий для поиска логических данных базы данных

Попытка перечислить все ниже столбцы, но натыкается при отображении file_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' 

Выше не дает правильный результат .. .. выглядит как соединение таблицы или что-то не так ...

+1

[Вредные привычки пинать: использование старого стиля JOIN и] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old -style-joins.aspx) - стиль старого стиля * разделенный запятыми список таблиц * был отменен с помощью ANSI - ** 92 ** SQL Standard (более ** 20 лет ** назад) –

+0

Я запускаю этот запрос к oracle11g ... идея состоит в том, чтобы перечислять детали сегментов, а также выводить идентификатор файла данных, который становится сложным, поскольку каждый сегмент имеет больше экстентов в dba_extents ... поэтому объединение становится сложным. – Khallas301

+0

спасибо marc_s за эту ссылку .. Я никогда не думал, что этот тип присоединения был таким старым .. читать вашу ссылку сейчас .. – Khallas301

ответ

0

Попробуйте этот запрос. Выберите нужные столбцы. Обратите внимание, что имя_раздела может быть нулевым. Есть файл segment.header_file и размер file_id, который может отличаться. Сегмент extent_count = max (extent_id) +1 для сегмента сегмента, так как length_ids начинаются с нуля каждого сегмента сегмента. Сегмент 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 
; 
Смежные вопросы