Я хочу узнать размер всех таблиц в определенном табличном пространстве, в оракуле 10g
O / P должен указывать размер, занимаемый в настоящее время каждым
Таблица. Он должен включать размер поля большого двоичного объекта, если оно есть в таблице,
также он должен включать размер любого индекса, если он находится в этой таблице.
В настоящее время я использую этот запрос, но он не включает размер индекса, а также не уверен, включает ли он размер BLOB-объекта.
select TABLE_NAME, ROUND((AVG_ROW_LEN * NUM_ROWS / 1024), 2) ROW_SIZE_KB, (BLOCKS * 8) BLOCK_SIZE_KB
from USER_TABLES
order by TABLE_NAME
Предложения ..
Было бы здорово, если бы кто-то мог написать какой-нибудь запрос, который дает размер каждого поля в таблице, а также общий размер таблицы и размер каждого индекса, если он есть в таблице.
РЕДАКТИРОВАТЬ:
Что я на самом деле хочу: я хочу знать фактическое пространство, занимаемое таблицей, пространство, фактически потребляемое моими данными. не пустое место. и если есть какие-либо индексы, то размер индекса, а не дополнительные байты, которые oracle хранит для будущего использования.
мотив:
Я переместил несколько баз данных из Oracle в SqlServer 2008, используя SSMA. Проблема, с которой я сталкиваюсь, заключается в том, что размер баз данных уменьшился с 80 ГБ (в Oracle) до 20 ГБ (в SqlServer). Я использовал этот запрос:
SELECT
/* + RULE */
df.tablespace_name "Tablespace",
df.bytes / (1024*1024*1024) "Size(GB)",
SUM(fs.bytes) / (1024*1024*1024) "Free(GB)",
NVL(ROUND(SUM(fs.bytes) * 100 / df.bytes),1) "%Free",
ROUND((df.bytes - SUM(fs.bytes)) * 100 / df.bytes) "%Used"
FROM dba_free_space fs,
(SELECT tablespace_name,
SUM(bytes) bytes
FROM dba_data_files
WHERE tablespace_name not like 'SCN%'
GROUP BY tablespace_name
) df
WHERE fs.tablespace_name (+) = df.tablespace_name
GROUP BY df.tablespace_name, df.bytes
order by 3 desc
Теперь я подумал о том, что, поскольку есть это сокращение, я подумал о сравнении данных в таблице под табличным пространством. Вот почему вопрос.