Вы можете консолидировать (перераспределять) свободное пространство в таблицах и фрагментах таблиц, в том числе при сжатии этих таблиц и их фрагментов.
Данные можно перераспределять в подключенном или автономном режиме с помощью аргумента repack или repack_offline. Операция repack_offline идентична операции repack, за исключением того, что сервер IBM® Informix выполняет эту операцию, когда таблица или фрагмент находится в режиме монопольной блокировки. Это предотвращает любой доступ к данным до окончания операции.
Если при выполнении операции перераспределения в таблице или фрагменте происходит упрощенное присоединение данных, операция не завершает консолидацию пространства в конце таблицы или фрагмента. Операция перераспределения не выполняется, потому что в области пространства, где она уже была завершена, добавляются новые данные, и возврат этого пространства в пространство базы данных невозможен. Чтобы закончить операцию перераспределения, надо повторно запустить ее после завершения упрощенного присоединения данных. При повторном выполнении операции перераспределения учитывается результат выполнения первой операции.
Удаление или отключение индексов перед выполнением операции repack_offline может сократить время, необходимое серверу для завершения операции. После этого можно повторно создать или включить индексы, желательно с помощью PDQ. Удаление или отключение индексов и их повторное создание или включение можно выполнить быстрее, чем операцию repack_offline без выполнения этих действий.
Как консолидировать свободное пространство в таблице:
В следующем примере приведена команда, которая указывает, что сервер Informix должен консолидировать свободное пространство в таблице с именем "opera" в базе данных "music", владельцем в которой является "bob".
EXECUTE FUNCTION task("table repack","opera","music","bob");
В следующем примере приведена команда, которая указывает, что сервер Informix должен в автономном режиме консолидировать свободное пространство в таблице с именем "folk" в базе данных "music", владельцем в которой является "janna".
EXECUTE FUNCTION task("table repack_offline","folk","music","janna");
В следующем примере приведена команда, которая указывает, что сервер
Informix должен консолидировать свободное пространство во фрагменте с номером раздела 14680071, а
затем вернуть его в пространство базы данных.EXECUTE FUNCTION task("fragment repack shrink", "14680071");
Чтобы отменить команду с аргументом compress, можно ввести CTRL-C в DB-Access. Команды с аргументом repack или repack_offline можно выполнить повторно, если выполнение команды было прервано ранее (операции сжатия и перераспределения записываются в журнал, но выполняются небольшими частями).