Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Уменьшение индексного табличного пространства.  [new]
shamanoff
Member

Откуда: Moscow
Сообщений: 318
Первоначально индексное ТП состояло из 5 файлов данных по 32 Гб. Объем занимаемый индексами - около 50%, поэтому я решил для экономии места удалить один из датафайлов, заодно оптимизировав хранение индексов.

Сделав следующее:

-- check segment allocation
SELECT owner, sum(bytes)/1024/1024 as Indexes_mb FROM 
(SELECT owner, bytes FROM dba_segments WHERE owner = 'USER' and segment_type = 'INDEX') t
GROUP BY owner;

-- 73813 Mb

-- check datafile allocation
SELECT ts_name, sum(ts_size) FROM
(SELECT ts.name as ts_name, df.bytes/1024/1024 AS ts_size 
FROM v$tablespace ts, v$datafile df WHERE ts.TS# = df.TS#
AND ts.name = 'TS_USER_INDEX') t
GROUP BY ts_name

-- 156262 Mb

-- Шаг 1
expdp user/password directory=dp dumpfile=indexes.dmp include=index content=metadata_only; 

-- Шаг 2
DROP TABLESPACE user_index INCLUDING CONTENTS AND DATAFILES;

-- Шаг 3
CREATE TABLESPACE ts_user_index DATAFILE SIZE 31G
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO; 

-- Шаг 4
ALTER TABLESPACE ts_user_index ADD DATAFILE SIZE 31G; 

ALTER TABLESPACE ts_user_index ADD DATAFILE SIZE 10G AUTOEXTEND ON NEXT 100M MAXSIZE 31G;

-- Шаг 5
impdp user/password directory=dp dumpfile=indexes.dmp include=index content=metadata_only; 

-- Шаг 6
SPOOL  rebuild_ind.sql

select 'ALTER INDEX '||owner||'.'||index_name||' REBUILD ONLINE;' from dba_indexes where owner='user';
SPOOL OFF

@rebuild_ind.sql;

-- check segment allocation: 
16799,5 Mb (уменьшилось в 4,3 раза)

-- check datafile allocation:
73728 Mb (уменьшилось в 2,1 раза).
Мне интересно вот что:

1. Можно было бы сделать указанную задачу проще? Реально ли такое уменьшение объема занимаемого индексами (в 4 раза) и не потерял ли я где-то часть информации?

2. Шаг 5 выполнялся довольно долго (дамп-файл объемом 500 Кб). Правильно ли я понимаю, что при импорте индексов производилось их построение даже несмотря на то, что была указана опция metadata_only?

p.s. табличное пространство ts_user_index используется только под индексы пользователя user.
Oracle 10.2.0.3 + ASM (raw)
24 мар 09, 10:39    [6966825]     Ответить | Цитировать Сообщить модератору
 Re: Уменьшение индексного табличного пространства.  [new]
Aliona
Member

Откуда: Питер
Сообщений: 4031
shamanoff
2. Шаг 5 выполнялся довольно долго (дамп-файл объемом 500 Кб). Правильно ли я понимаю, что при импорте индексов производилось их построение даже несмотря на то, что была указана опция metadata_only?


Ага, индекся строятся.

shamanoff
1. Можно было бы сделать указанную задачу проще?


Вы сначала индексы постоили, они у вас получились компактными, а потом вы их перестраивали.
Надо было не выполнять пункт 6.

Или ещё проще, выполнить только пункт 6.
Можно было перестроить индексы в другое табличное пространство, а статоре, опустевшее, потом удалить.
24 мар 09, 11:22    [6967144]     Ответить | Цитировать Сообщить модератору
 Re: Уменьшение индексного табличного пространства.  [new]
shamanoff
Member

Откуда: Moscow
Сообщений: 318
to Aliona:
Спасибо, Алёна. Подход ясен.
24 мар 09, 15:26    [6969017]     Ответить | Цитировать Сообщить модератору
 Re: Уменьшение индексного табличного пространства.  [new]
XCB
Member

Откуда:
Сообщений: 727
shamanoff,

вроде проще было уменьшать не число а размер датафайлов, при этом возможно понадобилось бы ребилдить некоторые индексы (мешающие уменьшению).
25 мар 09, 12:34    [6972633]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить