Оракул 10G сжатые файлы данных - PullRequest
1 голос
/ 24 декабря 2008

как мне сжать файлы данных в Oracle 10G?

Ответы [ 5 ]

1 голос
/ 24 декабря 2008

Предупреждение: я не являюсь системным администратором Oracle, за исключением личных установок. Возьми все, что я скажу, с большим количеством соли.

Я предполагаю, что вы создали файлы данных с автоматическим расширением, и они были расширены за пределы того, что, по вашему мнению, они должны содержать. В ALTER DATABASE есть пункт, который будет изменять размер файла, вот пример из справочника Oracle SQL:

ALTER DATABASE
DATAFILE 'diskb:tbs_f5.dat' RESIZE 10 M;

Тем не менее, я действительно не думаю, что вы хотите делать это вслепую. Лучшим подходом IMO было бы использовать команду экспорта, чтобы вывести таблицы из этого файла данных, а затем воссоздать табличное пространство.

1 голос
/ 28 августа 2009

Вот способ, любезно предоставленный Томом Кайтом, чтобы получить размер блока вашей БД, перечислить, сколько места вы можете восстановить, и построить команды alter ... для фактического выполнения сжатия базы данных. Надеюсь, это поможет,

http://cglendenningoracle.blogspot.com/2009/08/how-do-i-shrink-datafiles-to-reclaim.html

Крейг Гленденнинг

0 голосов
/ 27 октября 2011

@ Dave ответ об экспорте и импорте правильный и лучший выбор для освобождения места. Также в Oracle нет команды сжатия, @ Dave прав, но существует команда изменения размера, которая, как @ Дэвид сказал: «Файлы данных можно изменить до последнего использованного блока», НО Следует отметить, что свободные блоки в файле данных могут быть распределены следующим образом

0101000001111000000000000000000001110000000000
                                    |---------

, где: 0-это свободный блок 1-й блок

изменяя размер файла данных до последнего использованного блока, он будет выглядеть так:

010100000111100000000000000000000111
                                    |---------     

Но как насчет других свободных блоков в файле данных? Они недоступны для других файлов данных или самой системы.

Если файл данных был таким:

1111111111111100000000000000000

тогда изменение размера будет полезно, но не в предыдущем варианте.

В любом случае, чтобы определить, до какого размера вы можете изменить размер файла данных, вот скрипт:

    select 'alter database '||a.name||' datafile '''||b.file_name||'''' ||
' resize '||greatest(trunc(bytes_full/.7)
,(bytes_total-bytes_free))||chr(10)||
'--tablespace was '||trunc(bytes_full*100/bytes_total)||
'% full now '||
trunc(bytes_full*100/greatest(trunc(bytes_full/.7)
,(bytes_total-bytes_free)))||'%'
from v$database a
,dba_data_files b
,(Select tablespace_name,sum(bytes) bytes_full
From dba_extents
Group by tablespace_name) c
,(Select tablespace_name,sum(bytes) bytes_total
From dba_data_files
Group by tablespace_name) d
,(Select a.tablespace_name,a.file_id,b.bytes bytes_free
From (select tablespace_name,file_id
,max(block_id) max_data_block_id 
from dba_extents
group by tablespace_name,file_id) a
,dba_free_space b
where a.tablespace_name = b.tablespace_name
and a.file_id = b.file_id
and b.block_id > a.max_data_block_id) e
Where b.tablespace_name = c.tablespace_name
And b.tablespace_name = d.tablespace_name
And bytes_full/bytes_total < .7
And b.tablespace_name = e.tablespace_name
And b.file_id = e.file_id

Не беспокойтесь, этот скрипт не будет вырезать использованные блоки из файла данных.

0 голосов
/ 15 сентября 2009

ALTER TABLESPACE .... RESIZE разрешено только за пределами HWM. Таким образом, у вас может быть много неиспользованных сегнетов под ним. Перед этой операцией введите:

ALTER TABLE ... .SHRINK SPACE в некоторых таблицах этого табличного пространства / файла данных для реорганизации содержимого файлов данных.

Может быть долгой задачей, но вы можете генерировать команды с помощью SQL.

0 голосов
/ 24 декабря 2008

Для стандартных файлов данных в Oracle их нельзя сжать. Вы должны сделать что-то вроде:

  1. Перемещение сегментов в другое табличное пространство или экспорт и удаление их
  2. Удалить файл данных
  3. Создать новый файл данных меньшего размера
  4. Переместить сегменты обратно к первым таблицам или импортировать их из файла дампа

Для табличного пространства "bigfile", означающего, что для его создания использовался CREATE BIGFILE TABLESPACE, можно использовать ALTER TABLESPACE .. RESIZE ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...