› Fóruns › Banco de dados Oracle › Tablespace e Datafile › Responder a: Tablespace e Datafile
Tudo jóia ? Espero que sim….
Então, pra primeira resposta acho que te faltam alguns Conceitos importantes aí : primeiro, um datafile com AUTOEXTEND ON significa que ele vai crescer automaticamente quando necessário até o limite indicado no MAXSIZE (desde que HAJA espaço livre no disco onde ele reside, claro) – PORÉM, que fique CLARO : esse limite é o limite PARA O ORACLE AUMENTAR SOZINHO O DATAFILE – de FORMA ALGUMA isso é o limite máximo geral que vc pode fazer um datafile crescer manualmente, okdoc ?? Conceitualmente um datafile PODE ser aumentado manualmente INDEFINIDAMENTE, até o limite máximo que o hardware, o osftware RDBMS Oracle e o Sistema Operacional permite (normalmente 32 GB mas varia de acordo com cada hardware, SO e versão de Oracle)…. ESSE é o conceito primeiro que te faltava, esse MAXSIZE limita crescimento AUTOMÁTICO mas na mão vc pode aumentar e aumentar (que nem vc mesmo fez, né) sem um limite específico, até quanto o teu hardware, o teu SO e a tua versão de Oracle aguentarem… E OBVIAMENTE, ao aumentar manualmente o MAXISIZE ** não vai ser alterado ** , ele é o máximo para aumento AUTOMÁTICO, não tem NADA A VER com aumento manual, certinho ??
SEGUNDO conceito, o datafile é criado em disco com o tamanho que vc ordenou na cláusula SIZE (vc usou SIZE 3072M) , e SE foi criado com a cláusula AUTOEXTEND ON, cfrme for acabando o espaço livre dentro dele o RDBMS Oracle vai automaticamente adicionando mais pedacinhos nesse arquivo (pedacinhos sempre do tamanho indicado em NEXT, no seu caso vc usou NEXT 512M) , até que chegue no limite máximo indicado em MAXSIZE….
Sabendo disso, na verdade nesse seu CREATE vc na verdade QUEBROU COMPLETAMENTE essa lógica : como dito esse MAXISZE é o limite para o RDBMS aumentar sozinho o datafile : ora, no seu caso vc já pediu pro datafile começar com 3072M , então ao especificar que o datafile PODE crescer sozinho mas só até o MAXSIZE de 3072M, que é o tamanho que ele Já Está Criado com, na verdade na prática vc IMPEDIU o auto-crescimento : dizer que pode crescer sozinho até o mesmo tamanho que já tem hoje é, Logicamente falando, o mesmo que dizer que não cresce, okdoc ??
Assim sendo, sua resposta é : SE vc REALMENTE QUER que o RDBMS ORACLE vá aumentando Sozinho o datafile, plz faça um ALTER que indique um MAXSIZE *** maior *** do que o tamanho com o qual o datafile foi criado E maior do que o que o datafile tem hoje né ??? OU, SE na verdade vc não quer que o datafile cresça sozinho, aí Desligue o AUTOEXTEND, indicando AUTOEXTEND OFF com o ALTER adequado…. Logicamente falando, como já explicado, já que vc SEMPRE pode crescer um datafile manualmente se quiser, caso o desejado for sempre crescimento manual esse desligamento do AUTOEXTEND é só pra controle seu, pra deixar o database logicamente organizado, okdoc ??
=> A segunda resposta é bem simples : sim, há uma trava/controle que não deixa vc diminuir para menos do que os dados já consumiram… Na documentação Oracle mesmo (https://docs.oracle.com/cd/B28359_01/server.111/b28310/dfiles003.htm#ADMIN11425 é pro 11g mas isso vale pra Qualquer versão) já é dito :
“It is not always possible to decrease the size of a file to a specific value. It could be that the file contains data beyond the specified decreased size, in which case the database will return an error.”
Que é exatamente o que eu falei… O erro que o RDBMS retorna, mostrando que não foi possível diminuir o datafile para o tamanho especificado, é ORA-03297, veja um exemplo no meu banco de teste, onde o datafile indicado já contém dados ACIMA dos 10M que indiquei :
SYSTEM@xepdb1::CONTAINER=XEPDB1> alter database datafile 'D:\APP\ORACLE\PRODUCT\XE\18.0.0\ORADATA\XE\XEPDB1\USERS01.DBF' resize 10m;
alter database datafile 'D:\APP\ORACLE\PRODUCT\XE\18.0.0\ORADATA\XE\XEPDB1\USERS01.DBF' resize 10m
*
ERRO na linha 1:
ORA-03297: o arquivo contém dados usados além do valor solicitado de RESIZE
SYSTEM@xepdb1::CONTAINER=XEPDB1>
Blz ?
Abraços,
Chiappa