Introdução e índice com os outros posts desta série.
No post anterior sobre o arquivo de estrutura vimos sua sintaxe básica e como criar os diferentes tipos de extensões. Ao informar no arquivo ST uma extensão de dados (extensão tipo d) é possível controlar algumas propriedades avançadas de armazenamento utilizando o elemento opcional areainfo, introduzido no post anterior da série. Estas propriedades avançadas aplicam-se à Storage Area como um todo. Todas as extensões de uma mesma área utilizarão as mesmas propriedades.
Se utilizado, este elemento deve ser especificado logo após o tipo da extensão (d, para extensões de dados) e antes do caminho da extensão. Se não for utilizado o elemento areainfo, a extensão de dados será adicionada automaticamente à Schema Area, que é uma das Storage Areas pré-definidas em um banco de dados OpenEdge.
O elemento areainfo é composto de 4 partes, das quais apenas a primeira é obrigatória:
"areaname"[:areanum][,recsPerBlock][;blksPerCluster]
Segue a descrição de cada uma das partes:
- areaname indica o nome da Storage Area a qual esta extensão faz parte. Deve ser um nome com até 32 caracteres, entre aspas. Este nome não é relevante para o banco de dados, mas será utilizado pelo DBA e/ou desenvolvedor para atribuir as tabelas e índices às diferentes áreas criadas no banco;
- areanum indica o número da Storage Area. A área de número 6 é reservada para a Schema Area. As áreas de número 7 a 32000 podem ser definidas pelo DBA, conforme necessidade. Este número serve apenas para diferenciar uma área de outra e não tem nenhum significado especial;
- recsPerBlock indica a quantidade máxima de registros por bloco que o OpenEdge tentará armazenar em um bloco de dados desta área. Os valores válidos são 1, 2, 4, 8, 16, 32, 64, 128 ou 256. Ele valor é ignorado para a Schema Area, que possui um valor padrão e não pode ser alterado. Esta configuração também não afeta os blocos de índices, entretando o tamanho máximo de uma Storage Area é afetado por esta configuração;
- blksPerCluster indica quantos blocos serão utilizados em cada cluster de armazenamento de dados. Os valores possíveis são 1, 8, 64 e 512. O valor 1 indica que não será utilizado o conceito de cluster e a área é considerada uma Storage Area tipo 1. Para os demais valores será utilizada uma Storage Area do tipo 2. A Schema Area sempre será do tipo 1.
Como todas as extensões de uma mesma área utilizam as mesmas propriedades de armazenamento, só é necessário especificar os valores areanum, recsPerBlock e blksPerCluster para a primeira extensão. Se estes valores não forem informados, areanum será atribuído automaticamente com um número sequencial de área, recsPerBlock assumirá o mesmo valor da Schema Area e blksPerCluster assumirá o valor 1. O valor de recsPerBlock para a Schema Area varia de acordo com o tamanho de bloco do banco. Para bancos com bloco de 1, 2 ou 4KB, o valor é 32. Para bancos com bloco de 8KB, o valor é 64.
As duas principais propriedades de armazenamento, recsPerBlock e blksPerCluster, são ignoradas no caso da Schema Area. Como as configurações de armazenamento desta área não podem ser ajustadas recomendamos que sejam criadas novas áreas para os objetos, de acordo com as necessidades de armazenamento. O objetivo deste post é esclarecer o funcionamento e sintaxe do arquivo de estrutura. Voltaremos a tratar das questões de quantidade de registros por bloco e diferenças entre Storage Areas tipo 1 e 2 nos posts futuros desta série.
Para finalizar, segue um exemplo de um arquivo de estrutura com 1 extensão de before-image e 9 áreas de dados, algumas com várias extensões.
# arquivo de estrutura
b h:\blog.b1
d "Schema Area":6,32;1 d:\blog.d1
# abaixo estão definidas várias áreas (áreas 7 a 14)
# cada uma com diferentes configurações de armazenamento
d "Dados Area":7,64;8 d:\blog_7.d1
d "Index Area":8,1;8 d:\blog_8.d1
d "Big Index Area":9,1;64 d:\blog_9.d1
d "Dados Area 8":10,8;64 d:\blog_10.d1
d "Dados Area 16":11,16;512 e:\blog_11.d1 f 2000000
d "Dados Area 16":11,16;512 e:\blog_11.d2
d "Dados Area 32":12,32;512 f:\blog_12.d1 f 2000000
d "Dados Area 32":12,32;512 f:\blog_12.d2 f 2000000
d "Dados Area 32":12,32;512 f:\blog_12.d3
d "Dados Area 64":13,64;512 g:\blog_13.d1 f 2000000
d "Dados Area 64":13,64;512 g:\blog_13.d2
d "Dados Area 128":14,128;64 d:\blog_14.d1