Pessoal,
Vamos ao probliminha...
Seguinte ... recebi um DUMP de 300MB, fiz o import e quando fui ver, o
garoto tinha usado 6GB !!!! Verificando o causo, notei alguns parametros
INITIAL de tabelas com 600MB, sendo que essas tabelas quase não tem
linhas, ou seja, o programador deletou linhas dessa tabela, mas o
INITIAL continua a marcar seu ultimo valor ? Correto meu raciocinio ?
Agora vem o problema, como acertar o INITIAL dessas tabelas, para que eu
possa exportar esses dados para um dump para o programador criar a
estrutura do sistema nos clientes ?
Um ALTER TABLE ... MOVE TABLESPACE acertaria o tamanho da tabela
removendo as linhas marcadas para DELETE com o comando DELETE, mas o
initial ainda permaneceria, correto ?
Valeu...
-- Att. Thiago M. Zerbinato OCP DBA Oracle thiagomz@hotmail.com (MSN) 75311127 (ICQ)
Parametro INITIAL Tabelas
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Vou citar as palavras do Chiappa com relação a isso:
Cito também o Ederson Elias de OliveiraBom, justamente por questões do tipo IMHO quem ** TEM ** que criar tabelas no banco ** SEMPRE ** é o DBA (usando as previsões de crescimento e comportamento da tabela que os Analistas/Programadores passarão)... Inclusive isso está mais para problemão que probleminha, pois (como sabemos, e o manual de Concepts nos explica também) o INITIAL ** não é ** resultado de processamento, ele é uma indicação inicial -> antes mesmo de se inserir dados na tabela, no instante exato do CREATE TABLE o bd já aloca em disco o initial, se você tem um initial de 600 Mb, isso quer dizer que ANTES MESMO de qualquer dados serem entrados a tabela já consumiu 600 Mb... DIFICILMENTE isso é justificável, quase sempre é erro mesmo.
Como o INITIAL só é alocado quando do início de uso da tabela, para você o alterar você TEM que recriá-la : sim, isso pode ser feito dropando-se e a recriando, OU com ALTER TABLE MOVE, que também re-aloca TODOS os dados dela, funcionando como uma recriação (e obviamente deve-se indicar a tablespace desejada, a cláusula de STORAGE com o INITIAL e o NEXT, indicando FREELISTs, PCTFREE e PCTUSED, enfim, o trabalho normal e rotineiro de DBA que não foi feito quando a tabela originalmente foi criada).
Uma vez alterada a tabela manterá as características de alocação de espaço (INITIAL, NEXT, etc), e os futuros exports a respeitará, DESDE QUE SEJA usada a cláusula COMPRESS=N. SE você ainda não importou, para esse .DMP que você tem em mãos, a solução é trabalhosa, você teria que importar com a opção ROWS=N , fazer os MOVEs das tabelas desejadas (e REBUILD dos índices, se houverem), e depois re-importar com IGNORE=Y.
[]s
Chiappa
Bom dia Thiago,
Veja trecho de um DMP meu:
Observe o parâmetro INITIAL, no exemplo está com 40960 (40Kb).CREATE TABLE "CA_FIGURA" ("ID" NUMBER(12, 0) NOT NULL ENABLE, "IM_FIGURA" LONG RAW NOT NULL ENABLE, "TP_FIGURA" VARCHAR2(10) NOT NULL ENABLE, "NO_EMPRESA" VARCHAR2(100)) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 40960 FREELISTS 1 FREELIST GROUPS 1) TABLESPACE "D_COMERCIALIZACAO" LOGGING NOCOMPRESS
Quando não se especifica este parâmetro na criação da tabela, é setado como o default da tablespace, é preciso verificar qual é o valor corrente que está sendo setado, para ver a necessidade de fornecer sempre este valor na criação de tabelas.
No caso de uma criação de tabela, se este valor foi dimensionado erroneamente, a tabela vai ser alocada na tabelaspace com aquele initial, ocupando espaço do DB sem necessidade, se que as linhas a serem carregadas ainda não foram inseridas, ou se o cálculo foi mesmo errado e o espaço não será usado.
Para corrigir esta falha, o melhor é criar outra tabela com o valor initial correto e inserir as linhas da original para a nova tabela.
Neste caso a tabela com initial errado deverá ser dropada, mas antes deve-se verificar quais os índices, constraints, views, triggers e procedures dependem da tabela. Sabendo tudo isto, dropar a tabela com initial errado e renomear a tabela nova para o nome original e recriar/recompilar os objetos inválidos.
Outra forma também é gerar um export com ROWS=N e editar o DMP removendo as linhas antes dos CREATE TABLE, e alterando o create, removendo a cláusula STORAGE, retirando também as linhas do export abaixo dos create tables, e executa-lo como sql pelo SQLPLUS. Desta forma será usado o valor default da tablespace destino e o valor de initial ficará correto, caso o erro seja no initial da tabela na base original.
Depois disto, fazer o export da base original e importar, com a cláusula IGNORE=Y, desta forma será ignorado a criação de objetos já existentes, e serão importados apenas as linhas e os demais objetos (procedures,triggers, functions, constrains e índices, etc).
OK ?
Ederson Elias de Oliveira
DBA Oracle
- thiagomz
- Rank: Estagiário Sênior
- Mensagens: 11
- Registrado em: Dom, 27 Jun 2004 10:17 am
- Localização: Ribeirao Preto SP
- Contato:
Att.
Thiago M. Zerbinato
Oracle Certified Professional 8i
Thiago M. Zerbinato
Oracle Certified Professional 8i
Fiz esse HOW TO... ainda não testei... mas acho que esta correto...
COMO ACERTAR O PARAMETRO INITIAL DE TABELAS
===========================================
OBJETIVO
========
Acertar o parametro INITIAL antes de executar um IMPORT de um DUMP que
contem um INITIAL com valor elevado.
PROCEDIMENTO
============
1. Efetuar o import do DUMP com a opção ROWS=N
Ex: imp system/manager@tnsname fromuser=usuario touser=usuario ROWS=N
2. Após isso devemos mover as TABELAS para outra TABLESPACE ou mover
na MESMA TABLESPACE, para isso faça no SQL*PLUS
Verifique se o arquivo c:\move.sql esta correto e o execute,
isto acertará o parametro INITIAL de todas as TABELAS especificadas e
tambem executara um REBUILD dos indices.
3. Agora devemos importar os dados do DUMP, então faça:
4. Faça um novo DUMP.
COMO ACERTAR O PARAMETRO INITIAL DE TABELAS
===========================================
OBJETIVO
========
Acertar o parametro INITIAL antes de executar um IMPORT de um DUMP que
contem um INITIAL com valor elevado.
PROCEDIMENTO
============
1. Efetuar o import do DUMP com a opção ROWS=N
Ex: imp system/manager@tnsname fromuser=usuario touser=usuario ROWS=N
2. Após isso devemos mover as TABELAS para outra TABLESPACE ou mover
na MESMA TABLESPACE, para isso faça no SQL*PLUS
set pagesize 0
spool c:\move.sql
SELECT 'alter table '||owner||'.'||table_name||' move
tablespace '||tablespace_name||' ; 'FROM dba_tables WHERE owner = 'USUARIO'
spool off
isto acertará o parametro INITIAL de todas as TABELAS especificadas e
tambem executara um REBUILD dos indices.
@c:\move.sql;
Ex: imp system/manager@tnsname fromuser=usuario touser=usuario IGNORE=Y
- thiagomz
- Rank: Estagiário Sênior
- Mensagens: 11
- Registrado em: Dom, 27 Jun 2004 10:17 am
- Localização: Ribeirao Preto SP
- Contato:
Att.
Thiago M. Zerbinato
Oracle Certified Professional 8i
Thiago M. Zerbinato
Oracle Certified Professional 8i
Pessoal,
A Versão final ficou assim:
COMO ACERTAR O PARAMETRO INITIAL DE TABELAS
===========================================
OBJETIVO
========
Acertar o parametro INITIAL antes de executar um IMPORT de um DUMP que
contem um INITIAL com valor elevado.
PROCEDIMENTO
============
1. Efetuar o import do DUMP com a opção ROWS=N
2. Após isso devemos mover as TABELAS para outra TABLESPACE ou mover na
MESMA TABLESPACE, para isso faça no SQL*PLUS
2.5 - Verifique se o arquivo c:\move.sql esta correto e o execute,
isto acertará o parametro INITIAL de todas as TABELAS especificadas.
3. Agora devemos importar os dados do DUMP, então faça:
4. Faça um novo DUMP.
5. Faça um REBUILD dos Indices.
Ex:
A Versão final ficou assim:
COMO ACERTAR O PARAMETRO INITIAL DE TABELAS
===========================================
OBJETIVO
========
Acertar o parametro INITIAL antes de executar um IMPORT de um DUMP que
contem um INITIAL com valor elevado.
PROCEDIMENTO
============
1. Efetuar o import do DUMP com a opção ROWS=N
Ex: imp system/manager@tnsname fromuser=usuario touser=usuario ROWS=N
MESMA TABLESPACE, para isso faça no SQL*PLUS
2.1 - set pagesize 0
2.2 - spool c:\move.sql
2.3 - SELECT 'alter table '||owner||'.'||table_name||' move
tablespace '||tablespace_name||' ; 'FROM dba_tables WHERE owner = 'USUARIO'
2.4 - spool off
isto acertará o parametro INITIAL de todas as TABELAS especificadas.
2.6 - @c:\move.sql;
Ex: imp system/manager@tnsname fromuser=usuario touser=usuario IGNORE=Y
5. Faça um REBUILD dos Indices.
Ex:
select 'alter index ' || INDEX_NAME || ' rebuild ;' from dba_indexes where owner='USUARIO';
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 11 visitantes