# SYSCS_UTIL.SYSCS_COMPRESS_TABLE

O procedimento do sistema `SYSCS_UTIL.SYSCS_COMPRESS_TABLE` é utilizado para recuperar o espaço alocado, mas não utilizado, de uma tabela e seus índices. Normalmente, existe espaço alocado mas não utilizado quando uma grande quantidade de dados é excluída da tabela, ou os índices são atualizados. Por padrão, o Derby não retorna para o sistema operacional o espaço não utilizado. Por exemplo, uma vez que uma página tenha sido alocada para uma tabela ou um índice, esta não é devolvida automaticamente para o sistema operacional até que a tabela ou o índice tenha sido removido. O procedimento do sistema `SYSCS_UTIL.SYSCS_COMPRESS_TABLE` permite devolver para o sistema operacional o espaço não utilizado.

#### Sintaxe

    SYSCS_UTIL.SYSCS_COMPRESS_TABLE (IN SCHEMANAME VARCHAR(128),
    IN TABLENAME VARCHAR(128), IN SEQUENTIAL SMALLINT)

SCHEMANAME
  Um argumento de entrada do tipo VARCHAR(128) que especifica o esquema da tabela. Passar um valor nulo resulta em erro.
TABLENAME
  Um argumento de entrada do tipo VARCHAR(128) que especifica o nome da tabela. A cadeia de caracteres deve corresponder exatamente às letras maiúsculas e minúsculas do nome da tabela: um argumento igual a "Fred" é passado para o SQL como o identificador delimitado 'Fred'. Passar um argumento nulo resulta em erro.
SEQUENTIAL
  Um argumento de entrada diferente de zero do tipo SMALLINT força a operação executar no modo seqüencial, enquanto um argumento igual a zero força a operação a não executar no modo seqüencial. Passar um argumento nulo resulta em um erro.

#### Exemplo SQL

Para comprimir a tabela chamada CLIENTE no esquema chamado US, utilizando a opção SEQUENTIAL:

    CALL SYSCS_UTIL.SYSCS_COMPRESS_TABLE('US', 'CLIENTE', 1)

#### Exemplo Java

Para comprimir a tabela chamada CLIENTE no esquema chamado US, utilizando a opção SEQUENTIAL:

    CallableStatement cs = conn.prepareCall
    ("CALL SYSCS_UTIL.SYSCS_COMPRESS_TABLE(?, ?, ?)");
    cs.setString(1, "US");
    cs.setString(2, "CLIENTE");
    cs.setShort(3, (short) 1);
    cs.execute();

Se o parâmetro SEQUENTIAL não for especificado, o Derby reconstruirá todos os índices simultaneamente com a tabela base. Se não for especificado o argumento SEQUENTIAL, este procedimento poderá fazer uso intenso da memória e utilizar muito espaço temporário em disco (uma quantidade aproximadamente igual a duas vezes o espaço utilizado, mais o espaço alocado mas não utilizado). Isto acontece porque o Derby comprime a tabela copiando as linhas ativas para o novo espaço alocado (em vez de embaralhar e truncar o espaço existente). O espaço extra utilizado é retornado ao sistema operacional no COMMIT.

Quando é especificado SEQUENTIAL, o Derby comprime a tabela base e depois comprime cada um dos índices seqüencialmente. Utilizar SEQUENTIAL faz com que seja usado menos memória e espaço em disco, mas demora mais tempo. Deve ser utilizado o argumento SEQUENTIAL para reduzir a utilização de memória e espaço em disco.

O procedimento do sistema `SYSCS_UTIL.SYSCS_COMPRESS_TABLE` não pode devolver espaço em disco para o sistema operacional enquanto o COMMIT não for executado. Isto significa que o espaço ocupado pela tabela base e seus índices não pode ser retornado para o sistema operacional enquanto COMMIT não for executado (somente o espaço em disco alocado temporariamente pela classificação externa pode ser retornado para o sistema operacional antes de COMMIT). Recomenda-se utilizar o procedimento `SYSCS_UTIL.SYSCS_COMPRESS_TABLE` no modo de auto-efetivação.
Nota: Este procedimento obtém um bloqueio exclusivo na tabela sendo comprimida. Todos os planos de instrução dependentes da tabela e de seus índices são invalidados. Para obter informações sobre como identificar espaço não utilizado deve ser consultado o Guia do Servidor e Administração do Derby.
Tópico pai: Procedimentos do sistema nativos
Referências relacionadas
SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE
SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS
SYSCS_UTIL.SYSCS_SET_STATISTICS_TIMING
SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY
SYSCS_UTIL.SYSCS_FREEZE_DATABASE
SYSCS_UTIL.SYSCS_UNFREEZE_DATABASE
SYSCS_UTIL.SYSCS_CHECKPOINT_DATABASE
SYSCS_UTIL.SYSCS_BACKUP_DATABASE
SYSCS_UTIL.SYSCS_EXPORT_TABLE
SYSCS_UTIL.SYSCS_EXPORT_QUERY
SYSCS_UTIL.SYSCS_IMPORT_TABLE
SYSCS_UTIL.SYSCS_IMPORT_DATA