Olá,
Como já mencionado no artigo de Março/2008 na qual eu faço uma breve introdução ao conceito de tablespaces no Oracle, um banco de dados Oracle consiste em uma ou mais unidades de armazenamento lógicas denominadas tablespaces, que armazenam coletivamente todos os dados do banco de dados. Cada tablespace em um banco de dados Oracle consiste em um ou mais arquivos denominados arquivos de dados (data files), que são estruturas físicas compatíveis com o sistema operacional no qual o Oracle é executado. Vale a pena salientar que os arquivos de banco de dados também podem ser criados utilizando o ASM (Automatic Storage Manager) que é um gerenciador de volumes e ao mesmo tempo um sistema de arquivos para banco de dados Oracle. Em resumo, os dados de um banco de dados Oracle são armazenados coletivamente nos arquivos de dados que constituem cada tablespace do banco de dados. É aconselhável não misturar dados de aplicativos em um mesmo tablespace. Recomendo que, ao criar tablespaces para seus aplicativos, dê a eles um nome descritivo (por exemplo, dados de um sistema de RH podem ser mantidos no tablespace RECURSOS_HUMANOS). Neste caso, uma aplicação específica poderá ter seus dados separados logicamente de outras aplicações em um mesmo banco de dados. Uma outra vantagem em separar as aplicações em tablespaces distintos seria a oportunidade de utilizar o método Tablespace Point-in-Time Recovery (TSPITR) caso necessário, durante um evento de recover sem prejudicar as demais aplicações. Assim como mencionado no artigo de Junho/2008 sobre a reorganização de tablespaces, irei tratar nesse artigo sobre a organização de segmentos de banco de dados que poderão residir em tablespaces específicos separados das tabelas. Os segmentos são objetos que ocupam espaço em um banco de dados. Existem vários tipos de segmentos como tabelas, índices, segmentos de undo, segmentos temporários, LOB, entre outros. Neste artigo irei tratar especificamente da realocação de índices e segmentos LOB para outros tablespaces. No meu ponto de vista, separar esses segmentos em tablespaces distintos podem trazer alguns benefícios para quem administra o banco de dados.
- Layout do banco de dados esteticamente organizado.
- Administração do banco de dados simplificada.
- Mais opções de recover dependendo do cenário de desastre.
- Monitoramento de crescimento do banco de dados mais assertivo.
O cenário que irei criar possui um schema de banco de dados (SCOTT) que possui 3 tabelas contendo várias colunas entre elas colunas do tipo LOB (BLOB, CLOB) além alguns índices. Inicialmente, tanto as tabelas/índices quantos os segmento LOB estão alocados em uma única tablespace TBS_DATA. O objetivo principal será demonstrar como mover não só os segmentos LOB para uma tablespace específica chamada TBS_LOB, como também mover todos os índices para uma tablespace específica chamada TBS_INDX. Ao final, irei demonstrar como mover as tabelas para uma outra tablespace.
C:\>sqlplus scott/tiger
SQL*Plus: Release 11.2.0.1.0 Production on Qui Jan 2 10:15:39 2014
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Conectado a:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select * from session_privs;
PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE CLUSTER
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE
SELECT ANY DICTIONARY
11 linhas selecionadas.
Acima estou demonstrando que concedi o privilégio de sistema SELECT ANY DICTIONARY para o usuário SCOTT de forma que o mesmo tenha acesso às views de dicionário de dados DBA_*. Abaixo está o resultado dos dados do schema SCOTT separados por tipo de segmento. A consulta SQL utilizada é mesma usada no artigo de Maio/2005 intitulado de "Qual é mesmo o tamanho de uma tabela no Oracle?".
SQL> break on report
SQL> compute sum of data_mb on report
SQL> compute sum of indx_mb on report
SQL> compute sum of lob_mb on report
SQL> compute sum of total_mb on report
SQL> SELECT table_name,
2 DECODE(partitioned,'/','NO',partitioned) partitioned,
3 num_rows,
4 data_mb,
5 indx_mb,
6 lob_mb,
7 total_mb
8 FROM (SELECT data.table_name,
9 partitioning_type
10 || DECODE (subpartitioning_type,
11 'NONE', NULL,
12 '/' || subpartitioning_type)
13 partitioned,
14 num_rows,
15 NVL(data_mb,0) data_mb,
16 NVL(indx_mb,0) indx_mb,
17 NVL(lob_mb,0) lob_mb,
18 NVL(data_mb,0) + NVL(indx_mb,0) + NVL(lob_mb,0) total_mb
19 FROM ( SELECT table_name,
20 NVL(MIN(num_rows),0) num_rows,
21 ROUND(SUM(data_mb),2) data_mb
22 FROM (SELECT table_name, num_rows, data_mb
23 FROM (SELECT a.table_name,
24 a.num_rows,
25 b.bytes/1024/1024 AS data_mb
26 FROM user_tables a, user_segments b
27 WHERE a.table_name = b.segment_name))
28 GROUP BY table_name) data,
29 ( SELECT a.table_name,
30 ROUND(SUM(b.bytes/1024/1024),2) AS indx_mb
31 FROM user_indexes a, user_segments b
32 WHERE a.index_name = b.segment_name
33 GROUP BY a.table_name) indx,
34 ( SELECT a.table_name,
35 ROUND(SUM(b.bytes/1024/1024),2) AS lob_mb
36 FROM user_lobs a, user_segments b
37 WHERE a.segment_name = b.segment_name
38 GROUP BY a.table_name) lob,
39 user_part_tables part
40 WHERE data.table_name = indx.table_name(+)
41 AND data.table_name = lob.table_name(+)
42 AND data.table_name = part.table_name(+))
43 ORDER BY table_name;
TABLE_NAME PARTITIONED NUM_ROWS DATA_MB INDX_MB LOB_MB TOTAL_MB
-------------- --------------- ---------- ---------- ---------- ---------- ----------
T1 NO 12000 31 5,25 384,06 420,31
T2 NO 50000 400 12,13 ,13 412,26
T3 NO 180000 1472 232,13 ,13 1704,26
---------- ---------- ---------- ----------
sum 1903 249,51 384,32 2536,83
3 linhas selecionadas.
Abaixo estão listados os segmentos de tabela, índices e LOB. Podemos perceber que todos os segmentos estão alocados na tablespace TBS_DATA.
SQL> SELECT owner,
2 segment_name,
3 segment_type,
4 tablespace_name
5 FROM dba_segments
6 WHERE owner = 'SCOTT';
OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME
-------------------- ---------------------------- ------------------ ------------------
SCOTT T1 TABLE TBS_DATA
SCOTT T2 TABLE TBS_DATA
SCOTT T3 TABLE TBS_DATA
SCOTT IDX_T1_01 INDEX TBS_DATA
SCOTT IDX_T1_02 INDEX TBS_DATA
SCOTT IDX_T1_03 INDEX TBS_DATA
SCOTT IDX_T1_04 INDEX TBS_DATA
SCOTT IDX_T2_01 INDEX TBS_DATA
SCOTT IDX_T2_02 INDEX TBS_DATA
SCOTT IDX_T2_03 INDEX TBS_DATA
SCOTT IDX_T3_01 INDEX TBS_DATA
SCOTT IDX_T3_02 INDEX TBS_DATA
SCOTT SYS_IL0000141649C00005$$ LOBINDEX TBS_DATA
SCOTT SYS_IL0000141654C00004$$ LOBINDEX TBS_DATA
SCOTT SYS_IL0000141654C00005$$ LOBINDEX TBS_DATA
SCOTT SYS_IL0000141644C00004$$ LOBINDEX TBS_DATA
SCOTT SYS_IL0000141644C00005$$ LOBINDEX TBS_DATA
SCOTT SYS_IL0000141649C00004$$ LOBINDEX TBS_DATA
SCOTT SYS_LOB0000141644C00004$$ LOBSEGMENT TBS_DATA
SCOTT SYS_LOB0000141644C00005$$ LOBSEGMENT TBS_DATA
SCOTT SYS_LOB0000141649C00004$$ LOBSEGMENT TBS_DATA
SCOTT SYS_LOB0000141649C00005$$ LOBSEGMENT TBS_DATA
SCOTT SYS_LOB0000141654C00004$$ LOBSEGMENT TBS_DATA
SCOTT SYS_LOB0000141654C00005$$ LOBSEGMENT TBS_DATA
24 linhas selecionadas.
Como dito anteriormente, o objetivo será mover os segmentos de índices e de LOBs para as tablespaces TBS_INDX e TBS_LOB respectivamente.
SQL> select tablespace_name,
2 contents,
3 extent_management,
4 segment_space_management
5 from dba_tablespaces
6 order by 1;
TABLESPACE_NAME CONTENTS EXTENT_MAN SEGMEN
------------------------------ --------- ---------- ------
SYSAUX PERMANENT LOCAL AUTO
SYSTEM PERMANENT LOCAL MANUAL
TBS_DATA PERMANENT LOCAL AUTO
TBS_INDX PERMANENT LOCAL AUTO
TBS_LOB PERMANENT LOCAL AUTO
TEMP TEMPORARY LOCAL MANUAL
UNDOTBS1 UNDO LOCAL MANUAL
USERS PERMANENT LOCAL AUTO
8 linhas selecionadas.
Movendo LOBs
Segue abaixo o comando DDL que deverá ser utilizado para mover um segmento LOB para uma outra tablespace:
ALTER TABLE [Table_Name] MOVE LOB([Column_Name]) store as (TABLESPACE [Tablespace_Name]);
Se caso quisermos mover todos os segmentos LOB de um schema para uma tablespace específica (TBS_LOB), poderemos utilizar a consulta abaixo:
SQL> SELECT 'alter table ' 2 || t.owner 3 || '.' 4 || t.table_name 5 || ' move lob (' 6 || column_name 7 || ') store as (tablespace TBS_LOB);' CMD 8 FROM dba_lobs l, dba_tables t 9 WHERE l.owner = t.owner 10 AND l.table_name = t.table_name 11 AND l.SEGMENT_NAME IN 12 (SELECT segment_name 13 FROM dba_segments 14 WHERE segment_type = 'LOBSEGMENT' 16 AND OWNER = 'SCOTT' 17 AND tablespace_name = 'TBS_DATA') 18 AND l.owner = 'SCOTT' 19 ORDER BY t.owner, t.table_name; CMD ---------------------------------------------------------------------- alter table SCOTT.T1 move lob (IMAGEM) store as (tablespace TBS_LOB); alter table SCOTT.T1 move lob (SUMARIO) store as (tablespace TBS_LOB); alter table SCOTT.T2 move lob (FOTO) store as (tablespace TBS_LOB); alter table SCOTT.T2 move lob (SUMARIO) store as (tablespace TBS_LOB); alter table SCOTT.T3 move lob (IMG_01) store as (tablespace TBS_LOB); alter table SCOTT.T3 move lob (SAT_01) store as (tablespace TBS_LOB); 6 linhas selecionadas.
Agora irei executar o resultado da consulta afim de mover todos os segmentos LOB para a tablespace TBS_LOB. Vale a pena salientar que ao mover os segementos de LOB, os índices das tabelas ficarão UNUSABLE e precisarão ser reconstruídos.
SQL> set timing on
SQL> alter table SCOTT.T1 move lob (IMAGEM) store as (tablespace TBS_LOB);
Tabela alterada.
Decorrido: 00:00:00.89
SQL> alter table SCOTT.T1 move lob (SUMARIO) store as (tablespace TBS_LOB);
Tabela alterada.
Decorrido: 00:00:23.24
SQL> alter table SCOTT.T2 move lob (FOTO) store as (tablespace TBS_LOB);
Tabela alterada.
Decorrido: 00:00:31.92
SQL> alter table SCOTT.T2 move lob (SUMARIO) store as (tablespace TBS_LOB);
Tabela alterada.
Decorrido: 00:00:28.93
SQL> alter table SCOTT.T3 move lob (IMG_01) store as (tablespace TBS_LOB);
Tabela alterada.
Decorrido: 00:01:48.34
SQL> alter table SCOTT.T3 move lob (SAT_01) store as (tablespace TBS_LOB);
Tabela alterada.
Decorrido: 00:02:39.70
Movendo Índices
Segue abaixo o comando DDL que deverá ser utilizado para mover um índice para uma outra tablespace:
ALTER INDEX [Index_Name] REBUILD TABLESPACE [Tablespace_Name];
Se caso quisermos mover todos os segmentos de índices de um schema para uma tablespace específica (TBS_INDX), poderemos utilizar a consulta abaixo:
SQL> SELECT ' alter index '
2 || owner
3 || '.'
4 || index_name
5 || ' rebuild tablespace TBS_INDX;' CMD
6 FROM dba_indexes
7 WHERE index_type <> 'LOB' AND owner = 'SCOTT';
CMD
---------------------------------------------------------
alter index SCOTT.IDX_T1_01 rebuild tablespace TBS_INDX;
alter index SCOTT.IDX_T1_02 rebuild tablespace TBS_INDX;
alter index SCOTT.IDX_T1_03 rebuild tablespace TBS_INDX;
alter index SCOTT.IDX_T1_04 rebuild tablespace TBS_INDX;
alter index SCOTT.IDX_T2_01 rebuild tablespace TBS_INDX;
alter index SCOTT.IDX_T2_02 rebuild tablespace TBS_INDX;
alter index SCOTT.IDX_T2_03 rebuild tablespace TBS_INDX;
alter index SCOTT.IDX_T3_01 rebuild tablespace TBS_INDX;
alter index SCOTT.IDX_T3_02 rebuild tablespace TBS_INDX;
9 linhas selecionadas.
Agora irei executar o resultado da consulta afim de mover todos os segmentos de índices para a tablespace TBS_INDX.
SQL> alter index SCOTT.IDX_T1_01 rebuild tablespace TBS_INDX;
Índice alterado.
Decorrido: 00:00:00.41
SQL> alter index SCOTT.IDX_T1_02 rebuild tablespace TBS_INDX;
Índice alterado.
Decorrido: 00:00:00.05
SQL> alter index SCOTT.IDX_T1_03 rebuild tablespace TBS_INDX;
Índice alterado.
Decorrido: 00:00:00.05
SQL> alter index SCOTT.IDX_T1_04 rebuild tablespace TBS_INDX;
Índice alterado.
Decorrido: 00:00:00.06
SQL> alter index SCOTT.IDX_T2_01 rebuild tablespace TBS_INDX;
Índice alterado.
Decorrido: 00:00:00.45
SQL> alter index SCOTT.IDX_T2_02 rebuild tablespace TBS_INDX;
Índice alterado.
Decorrido: 00:00:00.52
SQL> alter index SCOTT.IDX_T2_03 rebuild tablespace TBS_INDX;
Índice alterado.
Decorrido: 00:00:00.53
SQL> alter index SCOTT.IDX_T3_01 rebuild tablespace TBS_INDX;
Índice alterado.
Decorrido: 00:00:10.92
SQL> alter index SCOTT.IDX_T3_02 rebuild tablespace TBS_INDX;
Índice alterado.
Decorrido: 00:00:11.91
Após a realocação dos segmentos de LOB e de índices, podemos ver abaixo como ficou o layout do banco de dados.
SQL> SELECT owner,
2 segment_name,
3 segment_type,
4 tablespace_name
5 FROM dba_segments
6 WHERE owner = 'SCOTT';
OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME
-------------------- ---------------------------- ------------------ ------------------
SCOTT T1 TABLE TBS_DATA
SCOTT T2 TABLE TBS_DATA
SCOTT T3 TABLE TBS_DATA
SCOTT IDX_T1_01 INDEX TBS_INDX
SCOTT IDX_T1_02 INDEX TBS_INDX
SCOTT IDX_T1_03 INDEX TBS_INDX
SCOTT IDX_T1_04 INDEX TBS_INDX
SCOTT IDX_T2_01 INDEX TBS_INDX
SCOTT IDX_T2_02 INDEX TBS_INDX
SCOTT IDX_T2_03 INDEX TBS_INDX
SCOTT IDX_T3_01 INDEX TBS_INDX
SCOTT IDX_T3_02 INDEX TBS_INDX
SCOTT SYS_IL0000141649C00005$$ LOBINDEX TBS_LOB
SCOTT SYS_IL0000141654C00004$$ LOBINDEX TBS_LOB
SCOTT SYS_IL0000141654C00005$$ LOBINDEX TBS_LOB
SCOTT SYS_IL0000141644C00004$$ LOBINDEX TBS_LOB
SCOTT SYS_IL0000141644C00005$$ LOBINDEX TBS_LOB
SCOTT SYS_IL0000141649C00004$$ LOBINDEX TBS_LOB
SCOTT SYS_LOB0000141644C00004$$ LOBSEGMENT TBS_LOB
SCOTT SYS_LOB0000141644C00005$$ LOBSEGMENT TBS_LOB
SCOTT SYS_LOB0000141649C00004$$ LOBSEGMENT TBS_LOB
SCOTT SYS_LOB0000141649C00005$$ LOBSEGMENT TBS_LOB
SCOTT SYS_LOB0000141654C00004$$ LOBSEGMENT TBS_LOB
SCOTT SYS_LOB0000141654C00005$$ LOBSEGMENT TBS_LOB
24 linhas selecionadas.
Movendo tabelas
Para finalizar, caso seja necessário mover alguma tabela para uma outra tablespace, o comando DDL abaixo deverá ser utilizado para fazer esse trabalho:
ALTER TABLE [Table_Name] MOVE TABLESPACE [Tablespace_Name];
Como exemplo, irei mover todas as tabelas do schema SCOTT para a tablespace USERS.
SQL> SELECT ' alter table '
2 || owner
3 || '.'
4 || table_name
5 || ' move tablespace USERS;' CMD
6 FROM dba_tables
7 WHERE owner = 'SCOTT';
CMD
--------------------------------------------
alter table SCOTT.T1 move tablespace USERS;
alter table SCOTT.T2 move tablespace USERS;
alter table SCOTT.T3 move tablespace USERS;
3 linhas selecionadas.
SQL> alter table SCOTT.T3 move tablespace USERS;
Tabela alterada.
Decorrido: 00:01:43.42
SQL> alter table SCOTT.T2 move tablespace USERS;
Tabela alterada.
Decorrido: 00:00:33.89
SQL> alter table SCOTT.T1 move tablespace USERS;
Tabela alterada.
Decorrido: 00:00:01.45
Após a realocação das tabelas para uma outra tablespace (USERS), poderemos notar que todos os índices das tabelas envolvidas, ficaram inválidos (UNUSABLE). Isso ocorreu devido a alteração dos ROWIDs das linhas das tabelas durante o processo de movimentação. Para corrigir esse problema, termos que reconstruir todos os índices envolvidos.
SQL> SELECT owner, index_name, status, tablespace_name
2 FROM dba_indexes
3 WHERE owner = 'SCOTT' AND status <> 'VALID';
OWNER INDEX_NAME STATUS TABLESPACE_NAME
-------------------------- ------------------------- ---------- ------------------
SCOTT IDX_T1_01 UNUSABLE TBS_INDX
SCOTT IDX_T1_02 UNUSABLE TBS_INDX
SCOTT IDX_T1_03 UNUSABLE TBS_INDX
SCOTT IDX_T1_04 UNUSABLE TBS_INDX
SCOTT IDX_T2_01 UNUSABLE TBS_INDX
SCOTT IDX_T2_02 UNUSABLE TBS_INDX
SCOTT IDX_T2_03 UNUSABLE TBS_INDX
SCOTT IDX_T3_01 UNUSABLE TBS_INDX
SCOTT IDX_T3_02 UNUSABLE TBS_INDX
9 linhas selecionadas.
SQL> SELECT ' alter index '
2 || owner
3 || '.'
4 || index_name
5 || ' rebuild;' CMD
6 FROM dba_indexes
7 WHERE owner = 'SCOTT' AND status <> 'VALID';
CMD
-------------------------------------
alter index SCOTT.IDX_T1_01 rebuild;
alter index SCOTT.IDX_T1_02 rebuild;
alter index SCOTT.IDX_T1_03 rebuild;
alter index SCOTT.IDX_T1_04 rebuild;
alter index SCOTT.IDX_T2_01 rebuild;
alter index SCOTT.IDX_T2_02 rebuild;
alter index SCOTT.IDX_T2_03 rebuild;
alter index SCOTT.IDX_T3_01 rebuild;
alter index SCOTT.IDX_T3_02 rebuild;
9 linhas selecionadas.
Após a execução da consulta acima, irei executar o resultado da mesma afim de reconstruir todos os índices que ficaram inválidos.
SQL> alter index SCOTT.IDX_T1_01 rebuild;
Índice alterado.
Decorrido: 00:00:00.20
SQL> alter index SCOTT.IDX_T1_02 rebuild;
Índice alterado.
Decorrido: 00:00:00.06
SQL> alter index SCOTT.IDX_T1_03 rebuild;
Índice alterado.
Decorrido: 00:00:00.05
SQL> alter index SCOTT.IDX_T1_04 rebuild;
Índice alterado.
Decorrido: 00:00:00.07
SQL> alter index SCOTT.IDX_T2_01 rebuild;
Índice alterado.
Decorrido: 00:00:00.46
SQL> alter index SCOTT.IDX_T2_02 rebuild;
Índice alterado.
Decorrido: 00:00:00.50
SQL> alter index SCOTT.IDX_T2_03 rebuild;
Índice alterado.
Decorrido: 00:00:00.59
SQL> alter index SCOTT.IDX_T3_01 rebuild;
Índice alterado.
Decorrido: 00:00:19.43
SQL> alter index SCOTT.IDX_T3_02 rebuild;
Índice alterado.
Decorrido: 00:00:10.50
Pronto. Por fim, poderemos verificar abaixo que todas as tabelas foram realocadas para a tablespace USERS.
SQL> SELECT owner,
2 segment_name,
3 segment_type,
4 tablespace_name
5 FROM dba_segments
6 WHERE owner = 'SCOTT';
OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME
-------------------- ---------------------------- ------------------ ------------------
SCOTT T1 TABLE USERS
SCOTT T2 TABLE USERS
SCOTT T3 TABLE USERS
SCOTT IDX_T1_01 INDEX TBS_INDX
SCOTT IDX_T1_02 INDEX TBS_INDX
SCOTT IDX_T1_03 INDEX TBS_INDX
SCOTT IDX_T1_04 INDEX TBS_INDX
SCOTT IDX_T2_01 INDEX TBS_INDX
SCOTT IDX_T2_02 INDEX TBS_INDX
SCOTT IDX_T2_03 INDEX TBS_INDX
SCOTT IDX_T3_01 INDEX TBS_INDX
SCOTT IDX_T3_02 INDEX TBS_INDX
SCOTT SYS_IL0000141649C00005$$ LOBINDEX TBS_LOB
SCOTT SYS_IL0000141654C00004$$ LOBINDEX TBS_LOB
SCOTT SYS_IL0000141654C00005$$ LOBINDEX TBS_LOB
SCOTT SYS_IL0000141644C00004$$ LOBINDEX TBS_LOB
SCOTT SYS_IL0000141644C00005$$ LOBINDEX TBS_LOB
SCOTT SYS_IL0000141649C00004$$ LOBINDEX TBS_LOB
SCOTT SYS_LOB0000141644C00004$$ LOBSEGMENT TBS_LOB
SCOTT SYS_LOB0000141644C00005$$ LOBSEGMENT TBS_LOB
SCOTT SYS_LOB0000141649C00004$$ LOBSEGMENT TBS_LOB
SCOTT SYS_LOB0000141649C00005$$ LOBSEGMENT TBS_LOB
SCOTT SYS_LOB0000141654C00004$$ LOBSEGMENT TBS_LOB
SCOTT SYS_LOB0000141654C00005$$ LOBSEGMENT TBS_LOB
24 linhas selecionadas.
5 comentários:
Olá,
Apenas uma observação. Ao mover o segmentos de LOB, todos os índices da tabela ficarão no estado UNUSABLE. Neste caso eles precisarão ser reconstruídos.
Abraços
Legatti
Belo post Eduardo.
A questão de mover os lobs e lobindex é somente visando a separação em si?
Qual o ganho real desta separação?
Olá Anônimo,
Como eu falo no artigo, eu vejo algumas vantagens em separar os segmentos em tablespaces distintas.
* Layout do banco de dados esteticamente organizado.
* Administração do banco de dados simplificada.
* Mais opções de recover dependendo do cenário de desastre.
* Monitoramento de crescimento do banco de dados mais assertivo.
Abraços,
Legatti
Também gosto de separar dados de índices, uma mania muito antiga mas colunas clob ainda tenho dúvidas. Qual seria o tamanho do bloco para esta tablespace específica para receber essas colunas?
Excelente material, didáticas excelente.
Parabéns.
Olá Marcos,
Da mesma forma que os segmentos de índices e de tabelas, também gosto de separar os segmentos de LOBs em tablespaces específicas. Não pelo fato de ser positivo em relação a performance, porque acredito que não tenha algum ganho de performance, mas simplesmente pelo fato de que o layout do seu banco de dados fica mais claro e esteticamente mais organizado, ou seja, tablespaces distintas para segmentos distintos. Geralmente uso o tamanho de bloco padrão 8KB para as tablespaces de LOB.
Abraços,
Legatti
Postar um comentário