quarta-feira, 18 de janeiro de 2012

Analise do seu SGDB com o pacote DBMS_STATS

(1) Todo o seu SGDB Oracle (Tabelas e índices)

EXEC DBMS_STATS.gather_database_stats;

Utilizando somente X % das linhas para definição

EXEC DBMS_STATS.gather_database_stats(estimate_percent => 15);

Utilizando somente X % das linhas para definição e cascade nas estatisticas anteriores.

EXEC DBMS_STATS.gather_database_stats(estimate_percent => 15, cascade => TRUE);

(2) Apenas um schema

EXEC DBMS_STATS.gather_schema_stats('SCOTT');
EXEC DBMS_STATS.gather_schema_stats('SCOTT', estimate_percent => 15);
EXEC DBMS_STATS.gather_schema_stats('SCOTT', estimate_percent => 15, cascade => TRUE);

(3) Apenas uma tabela do seu schema.

EXEC DBMS_STATS.gather_table_stats('SCOTT', 'EMPLOYEES');
EXEC DBMS_STATS.gather_table_stats('SCOTT', 'EMPLOYEES', estimate_percent => 15);
EXEC DBMS_STATS.gather_table_stats('SCOTT', 'EMPLOYEES', estimate_percent => 15, cascade => TRUE);


(4) Atualiação das estatisticas do dicionario de dados (data dictionary).


EXEC DBMS_STATS.gather_dictionary_stats;


(5) Somente os indices de um schema.

EXEC DBMS_STATS.gather_index_stats('SCOTT', 'EMPLOYEES_PK');
EXEC DBMS_STATS.gather_index_stats('SCOTT', 'EMPLOYEES_PK', estimate_percent => 15);


(6) Atualizar estatistica do System Stats

EXEC DBMS_STATS.gather_system_stats;

(7) Outras formas de atualizar estatística (legado)


ANALYZE TABLE employees COMPUTE STATISTICS;
ANALYZE INDEX employees_pk COMPUTE STATISTICS;

ANALYZE TABLE employees ESTIMATE STATISTICS SAMPLE 100 ROWS;
ANALYZE TABLE employees ESTIMATE STATISTICS SAMPLE 15 PERCENT;

EXEC DBMS_UTILITY.analyze_schema('SCOTT','COMPUTE');
EXEC DBMS_UTILITY.analyze_schema('SCOTT','ESTIMATE', estimate_rows => 100);
EXEC DBMS_UTILITY.analyze_schema('SCOTT','ESTIMATE', estimate_percent => 15);

EXEC DBMS_UTILITY.analyze_database('COMPUTE');
EXEC DBMS_UTILITY.analyze_database('ESTIMATE', estimate_rows => 100);
EXEC DBMS_UTILITY.analyze_database('ESTIMATE', estimate_percent => 15);

(8) Exemplo de criação de job para execução continua de análise.

SET SERVEROUTPUT ON
DECLARE
l_jobEst NUMBER;
BEGIN
DBMS_JOB.submit(l_jobEst,
'BEGIN DBMS_STATS.gather_schema_stats(''SCOTT''); END;',
SYSDATE,
'SYSDATE + 1');
COMMIT;
DBMS_OUTPUT.put_line('Job: ' || l_jobEst);
END;
/

EXEC DBMS_JOB.remove(X);
COMMIT;

segunda-feira, 19 de dezembro de 2011

Erro ORA-12899 em Import

Hoje tive participei da solução de um problema na execução do comando Imp.exe .No momento do import estávamos recebendo o seguinte erro.

ORA-12899: valor muito grande para a coluna "schema"."tabela"."coluna" (real: 105, máximo: 100).

Vale a pena observar a seguinte mensagem do log do import :


importação realizada nos conjuntos de caracteres WE8MSWIN1252 e NCHAR AL16UTF16
o servidor de importação usa o conjunto de caracteres AL32UTF8 (conversão de charset possível)

O nosso problema aconteceu pelo fato de o banco de origem ter um charset diferente do banco de destino.Qual a solução que tivemos ?No momento do export.exe devemos dizer o charset que queremos para garantir o import.

NLS_LANG="AMERICAN_AMERICA.AL32UTF8"

fica a dica

quarta-feira, 12 de outubro de 2011

Configuração do modo ARCHIVELOG

Configuração do modo ARCHIVELOG

Para fazermos backups consistentes de um banco de dados Oracle aberto,precisamos que esta instancia esteja
no modo ARCHIVELOG ativado.Com isso conseguimos fazer o chamado BACKUP ON-LINE.

O Oracle armazena os dados do redo log de forma ciclica.Quando o ultimo arquivo do redo log ativo for
preenchido o processo LGWR (log Write) irá substituir o conteúdo do primeiro arquivo redo.

Se a instancia do banco de dados estiver em modo ARCHIVELOG , o processo ARC (archive) irá fazer uma cópia
redo log depois do processo LGWR terminar de gravar o redo log.

Para fazer uso do modo ARCHIVELOG algumas configurações devem ser feitas.Vamos listar a recomendadas :

(1) Configure o parametro db_recovery_file_dest

ex : log_archive_dest = 'c:\app\oracle\arch'
(2) Defina o parametro Log_arquive_dest_n (pelo menos 1 )

ex : log_archive_dest_1 = 'c:\app\oracle\arch'
log_archive_dest_2 = 'c:\app\oracle\arch\backup'
log_archive_dest_3 = 'c:\app\oracle\arch\backup\bkp'

(3) Ative o modo ARCHIVELOG

sql> shutdown immediate ;
sql> startup mount
sql> alter database archivelog ;
sql> alter database open ;