Adição de Datafiles no banco de dados Oracle.


Os datafiles são estruturas físicas do banco, que estão ligados a uma unidade lógica chamada de tablespace. O crescimento dos datafiles pode ser limitado e controlado dentro do banco.

Para listar todas as tablespaces contidas no banco de dados utilizamos o seguinte script: 

set lines 158
set pages 100
column "Tablespace" format A20
column "Usado" format '9,999,990.00'
column "Livre" format '9,999,990.00'
column "Expansivel" format A12
column "Total" format '9,999,990.00'
column "Usado %" format '990.00'
column "Livre %" format '990.00'
column "Tipo Ger." format A12
select t.tablespace_name "Tablespace",
       round(ar.usado, 2) "Usado",
       round(decode(NVL2(cresc.tablespace, 0, sign(ar.Expansivel)),
                    1,
                    (ar.livre + ar.expansivel),
                    ar.livre),
             2) "Livre",
       round(ar.alocado,2) "Alocado Mb",
       NVL2(cresc.limite, 'ILIMITADO', round(ar.expansivel, 2)) "Expansivel",
       round(decode(NVL2(cresc.tablespace, 0, sign(ar.Expansivel)),
                    1,
                    ar.usado / (ar.total + ar.expansivel),
                    (ar.usado / ar.total)) * 100,
             2) "Usado %",
       round(decode(NVL2(cresc.tablespace, 0, sign(ar.Expansivel)),
                    1,
                    (ar.livre + ar.expansivel) / (ar.total + ar.expansivel),
                    (ar.livre / ar.total)) * 100,
             2) "Livre %",
       round(decode(NVL2(cresc.tablespace, 0, sign(ar.Expansivel)),
                    1,
                    (ar.total + ar.expansivel),
                    ar.total),
             2) "Total",
       t.Contents "Conteudo",
       t.Extent_Management "Tipo Ger.",
       FORCE_LOGGING
  from dba_tablespaces t,
       (select df.tablespace_name tablespace,
               sum(nvl(df.user_bytes,0))/1024/1024 Alocado,
               (sum(df.bytes) - sum(NVL(df_fs.bytes, 0))) / 1024 / 1024 Usado,
               sum(NVL(df_fs.bytes, 0)) / 1024 / 1024 Livre,
               sum(decode(df.autoextensible,
                          'YES',
                          decode(sign(df.maxbytes - df.bytes),
                                 1,
                                 df.maxbytes - df.bytes,
                                 0),
                          0)) / 1024 / 1024 Expansivel,
               sum(df.bytes) / 1024 / 1024 Total
          from dba_data_files df,
               (select tablespace_name, file_id, sum(bytes) bytes
                  from dba_free_space
                 group by tablespace_name, file_id) df_fs
         where df.tablespace_name = df_fs.tablespace_name(+)
           and df.file_id = df_fs.file_id(+)
         group by df.tablespace_name
        union
        select tf.tablespace_name tablespace,
               sum(nvl(tf.user_bytes,0))/1024/1024 Alocado,        
               sum(tf_fs.bytes_used) / 1024 / 1024 Usado,
               sum(tf_fs.bytes_free) / 1024 / 1024 Livre,
               sum(decode(tf.autoextensible,
                          'YES',
                          decode(sign(tf.maxbytes - tf.bytes),
                                 1,
                                 tf.maxbytes - tf.bytes,
                                 0),
                          0)) / 1024 / 1024 Expansivel,
               sum(tf.bytes) / 1024 / 1024 Total
          from dba_temp_files tf, V$TEMP_SPACE_HEADER tf_fs
         where tf.tablespace_name = tf_fs.tablespace_name
           and tf.file_id = tf_fs.file_id
         group by tf.tablespace_name) ar,
       (select df.tablespace_name tablespace, 'ILIMITADO' limite
          from dba_data_files df
         where df.maxbytes / 1024 / 1024 / 1024 > 30
           and df.autoextensible = 'YES'
         group by df.tablespace_name
        union
        select tf.tablespace_name tablespace, 'ILIMITADO' limite
          from dba_temp_files tf
         where tf.maxbytes / 1024 / 1024 / 1024 > 30
           and tf.autoextensible = 'YES'
         group by tf.tablespace_name) cresc
where cresc.tablespace(+) = t.tablespace_name
   and ar.tablespace(+) = t.tablespace_name
order by 1 

 /


Após a execução obtive o seguinte resultado: 




Vamos utilizar como exemplo a tablespace "TBS_DADOS". Para verificar os datafiles ligados a está tablespace executaremos o script abaixo: 

set pages 200
set lines 200
col file_name for a70
select file_name, maxbytes/1024/1024 as maxbytes, bytes/1024/1024 as bytes, autoextensible 
from dba_data_files
where tablespace_name='TBS_DADOS'

order by FILE_NAME;



Conforme retorno do script, temos somente um datafile ligado a tablespace TBS_DADOS, este datafile está localizado em /u01/app/oracle/oradata/ORCL/datafile/tbd_dados.dbf e possui 100 megabytes, podendo se estender até 200 megabytes.

Agora iremos adicionar mais um datafile seguindo os padrões do datafile anterior. É importante validar se o disco possui espaço suficiente para alocar o novo datafile.


alter tablespace TBS_DADOS add datafile '/u01/app/oracle/oradata/ORCL/datafile/tbd_dados2.dbf ' size 100m autoextend on next 100m maxsize 200m;


Se executarmos novamente o script para verificação dos datafiles, podemos validar que o novo datafile já se encontra na tablespace:



Vimos de forma bem simples, como podemos adicionar um datafile a uma tablespace, é importante efetuar este procedimento com muita atenção, pois após adicionado para realizar alterações no datafile pode exigir a parada do banco de dados, abordaremos mais sobre datafiles e tablespace nas próximas postagens.


Fonte: https://docs.oracle.com/cd/B19306_01/server.102/b14220/physical.htm

Nenhum comentário:

Postar um comentário

Recentes

O Blog

Bem vindo ao blog AvizDBA

Criei o blog com intuito de ajudar a todos, compartilhando minha experiência, casos do dia a dia e algumas dicas.

Espero que aproveite os posts e fique a vontade para deixar um comentário caso tenha algum dúvida ou sugestão.

Certificações