Preciso de ajuda sobre como executar o DBMS_COMPRESSION.GET_COMPRESSION_RATIO
pacote em todas as tabelas de um banco de dados para ver se vale a pena implementar ou não.
Este é o procedimento que estou executando sozinho e preciso de uma forma de automatizá-lo para não precisar executá-lo manualmente tabela por tabela.
SET SERVEROUTPUT ON
DECLARE
blkcnt_cmp PLS_INTEGER;
blkcnt_uncmp PLS_INTEGER;
row_cmp PLS_INTEGER;
row_uncmp PLS_INTEGER;
cmp_ratio NUMBER;
comptype_str VARCHAR2(32767);
BEGIN
DBMS_COMPRESSION.GET_COMPRESSION_RATIO (
scratchtbsname => 'USERS' ,
ownname => 'OWNER' ,
objname => 'TABLE_NAME' ,
subobjname => NULL ,
comptype => DBMS_COMPRESSION.COMP_ADVANCED,
blkcnt_cmp => blkcnt_cmp,
blkcnt_uncmp => blkcnt_uncmp,
row_cmp => row_cmp,
row_uncmp => row_uncmp,
cmp_ratio => cmp_ratio,
comptype_str => comptype_str,
subset_numrows=> DBMS_COMPRESSION.comp_ratio_minrows,
objtype => DBMS_COMPRESSION.objtype_table
);
DBMS_OUTPUT.put_line( 'Number of blocks used by the compressed sample of the object : ' ||
blkcnt_cmp);
DBMS_OUTPUT.put_line( 'Number of blocks used by the uncompressed sample of the object : ' ||
blkcnt_uncmp);
DBMS_OUTPUT.put_line( 'Number of rows in a block in compressed sample of the object : ' ||
row_cmp);
DBMS_OUTPUT.put_line( 'Number of rows in a block in uncompressed sample of the object : ' ||
row_uncmp);
DBMS_OUTPUT.put_line ('Estimated Compression Ratio of Sample : ' ||
cmp_ratio);
DBMS_OUTPUT.put_line( 'Compression Type : ' ||
comptype_str);
END;
É para isso que serve o PL/SQL, para escrever código para fazer chamadas programaticamente. Consulte o dicionário para obter os nomes das tabelas e, dentro de um loop, chame o procedimento. Algo assim:
Você provavelmente não deseja usar
dbms_output
para isso, entretanto. Eu recomendaria inserir os resultados em uma tabela de log criada para essa finalidade, que você poderá consultar à vontade mais tarde.