Pedro F. Carvalho Analista de Sistemas [email protected] www.pedrofcarvlho.com.br ESTRUTURAS DE ARMAZENAMENTO Instance Na instância são executados processos e espaços em memória, estes permitem ao Oracle cumprir com seu papel de manter a integridade, confidencialidade e disponibilidade dos dados armazenados. A instância fica alocada na memória compartilhada (shared memory) e é a combinação do System Global Area (SGA) com os processos background Oracle. Por ser fundamental no funcionamento do banco de dados (BD), a arquitetura e a descrição dos caches e processos da instância serão tratados em posts posteriores, por enquanto fiquemos com a visão geral que a instância é usada para gerência e acesso ao banco de dados. Database Segundo Loney e Bryla, “database é uma coleção de dados em disco em um ou mais arquivos em servidor de banco de dados que coleta e mantém informações relacionadas”. Para um banco de dados (database) ser usado ele precisa ser montado, ou seja, associado a uma instância. Antes disso, os dados estão inacessíveis a qualquer usuário ou aplicação. Separar a instância do banco é apenas uma forma didática de explicar, pois, na prática, esta separação não ocorre. No entanto, pode acontecer de haver múltiplas instâncias rodando na mesma máquina, cada uma associada ao seu banco de dados físico. Nota do autor: costuma existir uma confusão entre banco de dados (database) e o servidor de BD. Pode-se dizer que o servidor de BD é a associação do banco de dados com a instância. Pedro F. Carvalho Analista de Sistemas [email protected] www.pedrofcarvlho.com.br Schema Representa a coleção de vários objetos de um usuário de banco de dados como, por exemplo, tabelas, índices, seqüências, sinônimos etc. São associados a um banco de dados na razão de vários esquemas para um BD. Tablespace e Datafile Um banco de dados é armazenado logicamente em uma ou mais tablespaces que, por sua vez, é armazenada fisicamente no disco em um ou mais arquivos para cada tablespace. Segment Os objetos do Banco (tabelas, índices, etc) são armazenados como segmentos. Existem diferentes tipos de segmentos, como: - Data segments (segmento de dados): armazena os dados das tabelas não clusterizadas. Para tabelas particionadas, cada partição tem seu segmento de dados. - Index segments: segmentos de índices. Vale a regra da partição. - Undo segments (de undo): a informação deste segmento é usado para gerar a leitura consistente e, durante o recovery, o rollback de informações não “comitadas”. - Temporary segments (temporários): usadas quando um comando SQL precisa de uma área temporária para completar a execução. A relação é de um ou mais segmentos para um tablespace. Extent Cada segmento contém um ou mais extents, que são grupos de blocos de dados contíguos (ou adjacentes). Por exemplo, quando se cria uma tabela, o BD aloca um número inicial de extents para o segmento, quando estes extents enchem, o BD automaticamente aloca um número incremental de extents. (Estes valores são configuráveis pela clausula STORAGE do comando CREATE TABLE ou ALTER TABLE ou podem ser otimamente dimensionados pelo Oracle). É DB importante notar que Block cada extent e só pode estar OS em um data file. Block Blocos de banco de dados é o menor nível de granularidade e é onde as informações são armazenadas. O DB Bloco é um múltiplo do OS Block (bloco do sistema operacional) e o tamanho é definido por uma variável (DB_BLOCK_SIZE) no momento da criação do tablespace. Pedro F. Carvalho Analista de Sistemas [email protected] www.pedrofcarvlho.com.br • Tablespace SYSTEM: O tablespace SYSTEM é considerado um tablespace permanente, além disso, todos os segmentos que precisam ser mantidos por um usuário ou uma aplicação além dos limites de uma sessão ou transação devem ser armazenados em um tablespace permanente. Os segmentos de um usuário nunca devem residir neste tablespace. A partir do Oracle 10g, é possível especificar um tablespace permanente padrão além do recurso de especificar um temporário padrão no Oracle 9i. Também a partir do Oracle 10g, o este tablespace é gerenciado localmente por padrão, ou seja, toda a utilização de espaço é gerenciada por um *segmento de bitmap na primeira parte do primeiro arquivo de dados do tablespace. Usar tablespace gerenciados localmente remove parte da disputa ou concorrência que pode ser gerada neste tablespace porque operações de alocação e desalocação de espaço não precisam usar tabelas de dicionário de dados. Para verificar se o tablespace SYSTEM é gerenciado localmente ou não, entre com a seguinte consulta e verifique a coluna EXTENT_MANAGEMENT: <!--[if !supportLineBreakNewLine]-- > <!--[endif]--> O tablespace SYSTEM é responsável por armazenar o dicionário de dados e seus respectivos objetos (metadados). Quantos mais objetos forem criados nos bancos de dados de uma instância Oracle, maior será este tablespace. Pedro F. Carvalho Analista de Sistemas [email protected] www.pedrofcarvlho.com.br • Tablespace SYSAUX: Como o tablespace anterior, o SYSTEM, este não deve ter segmentos de usuários. O conteúdo deste tablespace são membros de processos realmente auxiliares, por isso, caso haja algum processo que esteja ocupando muito espaço neste tablespace, interessante pensar em trocá-lo de lugar. O monitoramento poderá ser realizado através do EM Database Control. Este tablespace auxiliar não existe nas versões anteriores ao Oracle 10g e foi criado especialmente para aliviar o tablespace SYSTEM de segmentos associados a algumas aplicações do próprio banco de dados como o Oracle ultra search, Oracle Text e até mesmo segmentos relacionados ao funcionamento do Oracle Enterprise Manager entre outros. Como resultado da criação do tablespace SYSAUX, alguns dos gargalos de I/O freqüentemente associados ao tablespace SYSTEM foram reduzidos ou eliminados. Vale salientar, que o este tablespace não pode se colocado em modo offline e é parte integrante obrigatória em todos os bancos de dados a partir do Oracle 10g. Existe uma visão no dicionário de dados que exibe os dados relacionados com os ocupantes atuais neste tablespace: • Tablespace temporários: Pedro F. Carvalho Analista de Sistemas [email protected] www.pedrofcarvlho.com.br Segundo Rodrigo Almeida, uma das atuais autoridades em Oracle, a tablespace temporária, ou como nós conhecemos por TEMP, é utilizada para armazenar informações de ordenação (SORT) ou para armazenar dados de tabelas temporárias (CREATE TEMPORARY TABLE). A principio, a Tablespace Temporária tem seu lugar físico reservado no servidor, determinado pelo DBA, porém, sua principal função no banco de dados é auxiliar a memória do Oracle (SGA), em seu principal componente, o SORT_AREA_SIZE. É possível ter mais de um tablespace temporário ativo e online no banco de dados, mas até o Oracle 10g, várias sessões do mesmo usuário usariam o mesmo tablespace temporário, pois, apenas um tablespace temporário padrão poderia ser atribuído a um usuário. Para resolver esse possível problema de gargalo, podemos na versão 11g, utilizar grupos de tablespace temporários. Um grupo de tablespaces temporários deve consistir em ao menos um tablespace temporário e ele não pode ser vazio. Uma vez que um grupo de tablespaces temporários não tenha membros, ou seja, não tenha nenhum tablespace, ele deixará de existir. Ao invés de se atribuir a um usuário apenas um tablespace, podemos atribuir um grupo deles. Interessante observar que um grupo com três tablespaces poderá ceder espaço para organização dos dados de uma consulta A (esta que poderá utilizar ORDER BY, GROUP BY, DISTINCT, UNION, INTERSECT e/ou MINUS) e os outros tablespaces continuarão disponíveis para realizar o mesmo trabalho, de forma paralela, para outras consultas deste mesmo usuário. A criação de um grupo de tablespaces temporários é muito simples. Após criarmos os tablespaces, aqui neste exemplo chamaremos de TMP_1, TMP_2 e TMP_3, alteramos os mesmo para adicionar ao grupo TMP_GROUP: Pedro F. Carvalho Analista de Sistemas [email protected] www.pedrofcarvlho.com.br Neste momento, o grupo de tablespaces temporários, chamado de TMP_GROUP contém três membros. Para eliminar um grupo de tablespaces, primeiramente teremos que eliminar os seus membros; a eliminação dos membros de um grupo de tablespaces poderá ser realizada atribuindo uma string vazia ao seu grupo: Como um grupo de tablespaces temporários somente existirá se tiver pelo menos um tablespace, neste momento ele já não mais existe. Para checarmos os grupos de tablespaces temporários que existem em servidor de bancos de dados Oracle: • Tablespace de UNDO: Esse tablespace que contém seus segmentos de reconstrução em versões anteriores ao Oracle 9i chamado de RBS (tablespace de rollback), possui a capacidade de recuperar transações incompletas ou abortadas. Um segmento de undo é usado para salvar o valor antigo qparcialuando um processo altera dados de um banco de dados. Ele armazena a localização dos dados e também os dados da forma como se encontravam antes da modificação. Pedro F. Carvalho Analista de Sistemas [email protected] www.pedrofcarvlho.com.br Embora um banco de dados possa ter mais de um tablespace de UNDO, apenas um poderá estar ativo em um dado momento. Caso este necessite de mais espaço a AUTOEXTEND não estiver ativado, um novo arquivo de dados poderá ser adicionado. • Tablespace BIGFILE: Um tablespace BIGFILE facilita a administração do banco de dados porque consiste em apenas um arquivo de dados. Um único arquivo deste tipo de tablespace poderá chegar até 128TB de tamanho se o tamanho de bloco do tablespace for 32K. Tablespaces gerenciados localmente As extensões são gerenciadas no tablespace através de bitmaps. Cada bit no bitmap corresponde a um bloco ou um grupo de blocos. Quando uma extensão é alocada ou liberada para reutilização, as alterações do servidor Oracle valores do bitmap para mostrar o novo estatuto dos blocos. Tablespace gerenciadas pelo Dicionário As extensões são gerenciadas pelo dicionário de dados. O servidor atualiza as tabelas do Oracle adequada no dicionário de dados sempre que uma extensão é alocada ou não alocado. Isto é para compatibilidade com versões anteriores, é recomendável que você use tablespaces gerenciados localmente. Pedro F. Carvalho Analista de Sistemas [email protected] www.pedrofcarvlho.com.br Status de uma Tablespace Offline: Você pode fazer um Habbo tabela de modo que esta parte do banco de dados está temporariamente indisponível para uso geral. O resto do banco de dados é aberta e disponível para os usuários acessarem dados. Quando você colocá-lo offline, você pode usar as seguintes opções: Normal: A tablespace pode ser tirado do ar, normalmente, se não existem condições de erro para qualquer um dos arquivos de dados do tablespace. Banco de Dados Oracle garante que todos os dados são gravados no disco, tendo um posto de controle para todos os arquivos de dados do tablespace como leva-los offline. Temporária: A tablespace pode ser tirado do ar temporariamente, mesmo se não houver condições de erro para um ou mais arquivos do tablespace. Oracle Database tem os arquivos de dados (que ainda não estão offline) offline, realizando checkpointing sobre eles como se faz isso. Se não houver arquivos off-line, mas você usa a cláusula temporária, a recuperação de mídia não é obrigada a trazer a tabela online. No entanto, se um ou mais arquivos do tablespace estiver offline por causa de erros de gravação, e você toma o tablespace offline temporariamente, o tablespace requer recuperação antes que você pode trazer de volta online. Imediata: Uma tablespace pode ser tirado do ar imediatamente, sem banco de dados Oracle, tendo um posto de controle em qualquer um dos arquivos de dados. Quando você especificar imediato, os meios de recuperação para as tablespace é necessária antes que a tabela pode ser colocado online. Você não pode tomar uma tablespace offline imediatamente se o banco de dados está sendo executado no modo no archive. Você não pode tomar uma tablespace offline imediatamente se o banco de dados está sendo executado no modo NOARCHIVELOG. Para recuperar: A configuração PARA RECUPERAR foi substituído. A sintaxe é suportado para compatibilidade com versões anteriores Oracle Managed Files (OMF) Gere directamente criação de arquivos e exclusão ao nível do sistema operacional. As operações são especificadas em termos de objetos de banco de dados ao invés de nomes. Oracle internamente usa sistema de arquivos padrão de interfaces para criar e excluir arquivos conforme necessário para as estruturas de banco de dados, tais como tablespaces, arquivos de log redo on-line e arquivos de controle. Os administradores precisam especificar o diretório de sistema do arquivo a ser utilizado para um determinado tipo de arquivo. Depois disso, a Oracle consegue criar arquivos originais quando necessário e também elimina os arquivos que não são necessários. As vantagens incluem: * Não há necessidade de se preocupar com os nomes de arquivo e armazenamento. A Oracle fornece um nome de arquivo exclusivo. * Elimina a necessidade para o DBA para gerenciar diretamente os arquivos do sistema operacional. * Permite operações a serem especificadas em termos de objetos e não os arquivos. * Reduz a possibilidade de substituição de um arquivo. Evita a corrupção acidental de arquivos de dados. Pedro F. Carvalho Analista de Sistemas [email protected] www.pedrofcarvlho.com.br * Reduz o desperdício de espaço em disco consumido pelos arquivos obsoletos. Quando uma tabela for interrompida, os arquivos relevantes são removidos automaticamente no nível do host. Os parâmetros de inicialização a seguir especificam a localização do arquivo: * Db_create_file_dest: Define a localização do sistema de arquivos padrão do diretório onde o Oracle cria arquivos de dados ou arquivos temporários quando não há especificação do arquivo é dado na instrução de criação do objeto. * Db_create_online_log_dest_n: Define a localização do sistema de diretório de arquivo padrão para arquivos de log redo on-line e arquivos de controle quando não há especificação do arquivo é dado na instrução de criação. Este parâmetro de inicialização pode ser usado várias vezes em que n especifica uma cópia multiplexada do arquivo de log on-line ou controle refazer. Note que o diretório de sistema de arquivo especificado por um desses parâmetros já deve existir. Oracle não criá-la. O diretório também deve ter permissões para permitir a Oracle para criar os arquivos nele. O local padrão é usado sempre que um local não é explicitamente especificado para a operação de criar um arquivo. Oracle cria o arquivo, e assim criado um arquivo é um arquivo de gestão da Oracle. O exemplo a seguir define / u01/oracle/data/applic como o diretório padrão para usar ao criar arquivos de gestão da Oracle: DB_CREATE_FILE_DEST = '/ u01/oracle/data/applic' Por padrão, esse local seria aplicável para arquivos de dados, arquivos temporários, arquivos de redo log on-line e arquivos de controle. No entanto, o parâmetro de inicialização db_create_online_log_dest_n podem ser incluídos no arquivo de parâmetros de inicialização para identificar a localização predefinida para o servidor de banco de dados online para criar arquivos de log e refaz arquivos de controle. Por exemplo: DB_CREATE_ONLINE_LOG_DEST_1 = '/ u03/oracle/redo/applic' DB_CREATE_ONLINE_LOG_DEST_2 = '/ u04/oracle/redo/applic' Além disso, a localização DB_CREATE também pode ser alterado com o comando ALTER SYSTEM. Por exemplo, os seguintes comandos mudar o local do diretório OMF para '/ u05/oracle/data/applic, e cria um novo espaço de tabela. ALTER SYSTEM DB_CREATE_FILE_DEST = '/ u05/oracle/data/applic; CREATE TABLESPACE tbs_1; # cria CREATE TABLESPACE DATAFILE AUTOEXTEND ON 800M MAXSIZE; SET def.size de 100MB tbs_3 Para mais informações, consulte o capítulo sobre a utilização do Oracle Managed Files no Oracle Database 10g Administrator's Guide do. Com os sistemas de RAC, a instalação OMF só pode ser usado se o sistema de cluster está utilizando o sistema de arquivo cluster. A disponibilidade do sistema de arquivos de cluster com um conjunto de sistemas de arquivos montados, permite que um Pedro F. Carvalho Analista de Sistemas [email protected] www.pedrofcarvlho.com.br diretório para ser configurada para arquivos OMF. O DBCA também suporta Oracle Managed Files para sistemas operacionais que oferecem suporte a um sistema de arquivo cluster. ASM AUTOMATIC STORAGE MANAGER Automatic Storage Manager (ASM) é um gerenciador de volumes e ao mesmo tempo um sistema de arquivos para banco de dados Oracle o qual suporta configurações do tipo single-instance e RAC. O ASM é uma solução alternativa de gerenciamento de volume de discos, sistemas de arquivos e raw devices. O ASM utiliza agrupamento de discos para armazenar arquivos de dados; um ASM disk group nada mais é do que uma coleção de discos os quais o ASM gerencia como se fosse apenas uma unidade de disco. Dentro de um disk group, os arquivos de banco de dados Oracle são apresentados em uma interface semelhante ao sistema de arquivos unix e linux. O conteúdo dos arquivos são eventualmente redistribuidos para evitar gargalos e garantir estabilidade de desempenho. Seu desempenho é semelhante ao desempenho de raw devices. Voce pode adicionar ou remover discos de um disk group sem interromper o serviço de banco de dados. Quando você remove ou adiciona discos de um disk group, o ASM automaticamente redistribui os arquivos e, conseqüentemente elimina a necessidade de parada de serviços para redistribuição de conteúdos. O gerenciador ASM possui flexíveis opções de espelhamento. ASM normal e alta redundância de disk groups, espelhamentos tipo two-way e three-way respectivamente. Permite o uso de redundância externa do tipo RAID. O ASM também utiliza o Oracle Managed Files (OMF) para simplificar o gerenciamento de arquivos banco de dados. O OMF automaticamente cria os arquivos em sua respectivas pastas. Além disso, atribui nomes aos arquivos e remove-os, defragmentando áreas de disco, quando as tablespaces ou arquivos são excluídos. O ASM simplifica as tarefas de administração de storage consolidando os dados de storage em um reduzido grupo de discos. Isso possibilita a unificação do storage para diversos bancos de dados e oferece melhorias de desempenhos dos processos de leitura e gravação em discos. Os arquivos ASM podem ser configurados com outros gerenciadores de storage , como raw devices e sistemas de arquivos de terceiros. Isto simplifica a integração do ASM com os demais sistemas de armazenamento já existentes. Pedro F. Carvalho Analista de Sistemas [email protected] www.pedrofcarvlho.com.br Exercícios Adicionais : 1 – Descubra os segmentos contidos no banco SQL> SELECT SEGMENT_TYPE, COUNT(1) FROM DBA_SEGMENTS GROUP BY SEGMENT_TYPE ORDER BY SEGMENT_TYPE 2 – Saiba qual a tablespace default para criação de objetos SQL > select default_tablespace from user_users; 3 – Saiba as caracteristicas de um segmento SQL > select segment_name,segment_type,tablespace_name,bytes,blocks,extents from user_segments where segment_name='CLIENTE'; 4 – Vamos Criar uma TableSpace: SQL> CREATE TABLESPACE RECURSOS_HUMANOS datafile ‘/oracle/oradata/RH_01.dbf’ size 100m autoextend on next 100m maxsize 4096m; OBS1: repare que o nome da nossa tablespace no exemplo acima se chama RECURSOS_HUMANOS e nosso primeiro data file adicionado a nossa tablespace se chama RH_01.dbf. Podemos analisar que são nomes explicativos e de fácil identificação, como deve ser. Vamos adicionar um Data File: Ex2.: ALTER TABLESPACE RECURSOS_HUMANOS add datafile SQL> ‘/u02/oradata/RH_02.dbf’ size 100m autoextend on next 200m maxsize 4096m; OBS2: repare que neste exemplo acima estamos adicionando um outro Data File há uma TableSpace já existente e estamos dando continuidade a sequência dos Data Files como pode ser observado no exemplo. Além disto observe que estou passando outro caminho para este outro Data File, isto para me dá uma maior segurança com os dados. Esta é uma boa prática de Administração Oracle.