Baixe o app para aproveitar ainda mais
Prévia do material em texto
SISTEMA DE ENSINO BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Banco de Dados Oracle e PL/SQL Livro Eletrônico 2 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro Sumário Banco de Dados Oracle e PL/SQL ...........................................................................................................................3 1. Conceitos de Banco de Dados Oracle ...............................................................................................................3 1.1. Introdução ao Banco de Dados Oracle .........................................................................................................3 1.2. Acesso a Dados Oracle .........................................................................................................................................6 1.3. Gerenciamento de Transações Oracle .........................................................................................................7 1.4. Arquitetura do Banco de Dados Oracle ......................................................................................................9 1.5. Estruturas de Armazenamento de Banco de Dados Oracle ..........................................................14 2. PL/SQL ...........................................................................................................................................................................29 Programação do Lado do Servidor ......................................................................................................................30 Visão Geral do PL/SQL ................................................................................................................................................31 Visão Geral de Gatilhos (Triggers) .....................................................................................................................37 Resumo ................................................................................................................................................................................41 Questões de Concurso ...............................................................................................................................................43 Gabarito ..............................................................................................................................................................................49 Gabarito Comentado ...................................................................................................................................................50 O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 3 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro BANCO DE DADOS ORACLE E PL/SQL 1. ConCeitos de BanCo de dados oraCle O banco de dados Oracle (Oracle DB) é um sistema de gerenciamento de banco de dados relacional (RDBMS, Relational Database Management System) da Oracle Corporation. O Oracle é um dos SGBDs mais utilizados em aplicações corporativas. Robusto, confiável e seguro, a qualidade dessa solução justifica o investimento feito para poder explorar os recur- sos do produto. 1.1. introdução ao BanCo de dados oraCle Toda organização tem informações que devem ser armazenadas e gerenciadas para aten- der aos seus requisitos. Por exemplo, uma organização deve coletar e manter registros dos seus funcionários, e esta informação deve estar disponível para aqueles que dela necessitam, por exemplo, uma área de recursos humanos. Um sistema de informação é um sistema formal para armazenar e processar informações. Um sistema de informação pode ser um conjunto de caixas de papelão contendo pastas de papel manilha juntamente com regras de como armazenar e recuperar as pastas. No entanto, a maioria das empresas hoje usa um banco de dados para automatizar seus sistemas de informação. Um banco de dados é uma coleção organizada de informações tratadas como uma unida- de. A finalidade de um banco de dados é coletar, armazenar e recuperar informações relacio- nadas para uso por aplicativos de banco de dados. Sistema de Gerenciamento de Banco de Dados (SGBD) Um sistema de gerenciamento de banco de dados (SGBD) é um software que controla o armazenamento, organização e recuperação de dados. Normalmente, um SGBD tem os seguintes elementos: • Código do kernel: este código gerencia a memória e o armazenamento do SGBD. • Repositório de metadados: esse repositório geralmente é chamado de dicionário de dados. • Linguagem de consulta: essa linguagem permite que os aplicativos acessem os dados. O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 4 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro Um aplicativo de banco de dados é um programa de software que interage com um banco de dados para acessar e manipular dados. A primeira geração de sistemas de gerenciamento de banco de dados (SGBD) incluiu os seguintes tipos: • Hierárquico: um banco de dados hierárquico organiza os dados em uma estrutura de árvore. Cada registro-pai possui um ou mais registros-filho, semelhante à estrutura de um sistema de arquivos. • Rede: um banco de dados de rede é semelhante a um banco de dados hierárquico, exceto que os registros têm um relacionamento muitos-para-muitos em vez de um para muitos. Os sistemas de gerenciamento de banco de dados (SGBD) anteriores armazenavam dados em relacionamentos rígidos e predeterminados. Como não existia nenhuma linguagem de defi- nição de dados, era difícil alterar a estrutura dos dados. Além disso, esses sistemas careciam de uma linguagem de consulta simples, o que dificultava o desenvolvimento de aplicativos. Modelo Relacional Um banco de dados relacional é um banco de dados que está em conformidade com o modelo relacional. O modelo relacional tem os seguintes aspectos principais: • Estruturas: objetos bem definidos armazenam ou acessam os dados de um banco de dados. • Operações: ações claramente definidas permitem que os aplicativos manipulem os da- dos e as estruturas de um banco de dados. • Regras de integridade: as regras de integridade controlam as operações nos dados e estruturas de um banco de dados. Um banco de dados relacional armazena dados em um conjunto de relações simples. Uma relação é um conjunto de tuplas. Uma tupla é um conjunto não ordenado de valores de atributos. Uma tabela é uma representação bidimensional de uma relação na forma de linhas (tuplas) e colunas (atributos). Cada linha em uma tabela tem o mesmo conjunto de colunas. Um banco de dados relacional é um banco de dados que armazena dados em relações (tabelas). Por exem- plo, um banco de dados relacional pode armazenar informações sobre funcionários da empresa em uma tabela de funcionários, uma tabela de departamentos e uma tabela de salários. Sistema de Gerenciamento de Banco de Dados Relacional (RDBMS) O modelo relacional é a base para um sistema de gerenciamento de banco de dados rela- cional (SGBDR). Um SGBDR pode mover dados para um banco de dados, armazenar os dados e os recuperar os dados para que os aplicativos possam manipulá-los. O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição,sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 5 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro Um SGBDR distingue entre os seguintes tipos de operações: • Operações lógicas: nesse caso, um aplicativo especifica qual conteúdo é necessário. Por exemplo, um aplicativo solicita um nome de funcionário ou adiciona um registro de funcionário a uma tabela. • Operações físicas: nesse caso, o SGBDR determina como as coisas devem ser feitas e realiza a operação. Por exemplo, depois que um aplicativo consulta uma tabela, o banco de dados pode usar um índice para localizar as linhas solicitadas, ler os dados na memó- ria e executar muitas outras etapas antes de retornar um resultado ao usuário. O RDBMS armazena e recupera dados para que as operações físicas sejam transparentes para os aplicativos de banco de dados. O banco de dados Oracle é um SGBDR. Um SGBDR que implementa recursos orientados a objetos, como tipos definidos pelo usuário, herança e polimorfismo, é chamado de sistema de gerenciamento de banco de dados relacional de objeto (SGBDOO). O banco de dados Oracle estendeu o modelo relacional para um modelo relacional de objeto, possibilitando armazenar modelos de negócios complexos em um banco de dados relacional. Objetos de Esquema Uma característica de um SGBDR é a independência do armazenamento físico de dados das estruturas lógicas de dados. No banco de dados Oracle, um esquema de banco de dados é uma coleção de estruturas de dados lógicos ou objetos de esquema. Um usuário de banco de dados possui um esquema de banco de dados, que tem o mesmo nome que o nome de usuário. Objetos de esquema são estruturas criadas pelo usuário que se referem diretamente aos dados no banco de dados. O banco de dados suporta muitos tipos de objetos de esquema, sendo os mais importantes as tabelas e os índices. Um objeto de esquema é um tipo de objeto de banco de dados. Alguns objetos de banco de dados, como perfis e funções, não residem em esquemas. Tabelas - Uma tabela descreve uma entidade, como “Funcionários”. Você define uma ta- bela com um nome de tabela, como “Funcionários”, e um conjunto de colunas. Em geral, cada coluna irá possuir um nome, um tipo de dados e uma largura ao criar a tabela. Uma tabela é um conjunto de linhas. Uma coluna identifica um atributo da entidade descrita pela tabela, en- quanto uma linha identifica uma instância da entidade. Por exemplo, os atributos da entidade de funcionários correspondem a colunas para ID de funcionário e sobrenome. Uma linha iden- tifica um funcionário específico. Opcionalmente, você pode especificar uma regra, chamada de restrição de integridade, para uma coluna. Um exemplo é uma restrição NOT NULL, que força a coluna a conter um valor em cada linha, não aceitando valores vazios (NULL). O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 6 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro Índices – Um índice é uma estrutura de dados opcional que você pode criar em uma ou mais colunas de uma tabela. Os índices podem aumentar o desempenho da recuperação de dados. Ao processar uma solicitação, o banco de dados pode usar os índices disponíveis para localizar as linhas solicitadas com eficiência. Os índices são úteis quando os aplicativos geral- mente consultam uma linha específica ou um intervalo de linhas. Os índices são logicamen- te e fisicamente independentes dos dados. Assim, você pode descartar e criar índices sem nenhum efeito nas tabelas ou outros índices. Todos os aplicativos continuam funcionando depois que um índice é descartado. 1.2. aCesso a dados oraCle Um requisito geral para um SGBD é aderir aos padrões aceitos da indústria para uma lin- guagem de acesso a dados. O SQL é uma linguagem declarativa baseada em conjunto que fornece uma interface para um SGBDR como o banco de dados Oracle. As linguagens procedurais, como C, descrevem como as coisas devem ser feitas. O SQL não é procedimental e descreve o que deve ser feito. Linguagem de Consulta Estruturada (SQL) O SQL é a linguagem padrão ANSI para bancos de dados relacionais. Todas as operações nos dados em um banco de dados Oracle são executadas usando instruções SQL. Por exem- plo, você usa SQL para criar tabelas e consultar e modificar dados em tabelas. Uma instrução SQL pode ser pensada como um programa de computador ou uma ins- trução muito simples, mas poderoso. Os usuários especificam o resultado que desejam (por exemplo, os nomes dos funcionários), não como derivá-lo. Uma instrução SQL é uma string de texto SQL, como o seguinte: As instruções SQL permitem que você execute as seguintes tarefas: • Consultar dados. • Inserir, atualizar e excluir linhas em uma tabela. • Criar, substituir, alterar e soltar objetos. • Controlar o acesso ao banco de dados e seus objetos. • Garanta consistência e integridade do banco de dados. O SQL unifica as tarefas anteriores em uma linguagem consistente. O Oracle SQL é uma implementação do padrão ANSI. O Oracle SQL oferece suporte a vários recursos que vão além do SQL padrão. O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 7 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro PL/SQL e Java PL/SQL é uma extensão procedural do Oracle SQL. O PL/SQL é integrado ao banco de dados Oracle, permitindo que você use todas as instruções, funções e tipos de dados SQL do banco de dados Oracle. Você pode usar PL/SQL para controlar o fluxo de um programa SQL, usar variáveis e escrever procedimentos de tratamento de erros. Um dos principais benefícios do PL/SQL é a capacidade de armazenar a lógica do aplicativo no próprio banco de dados. Um procedimento ou função PL/SQL é um objeto de esquema que consiste em um conjunto de instruções SQL e outras construções PL/SQL, agrupadas, armaze- nadas no banco de dados e executadas como uma unidade para resolver um problema especí- fico ou executar um conjunto de tarefas relacionadas. O principal benefício da programação do lado do servidor é que a funcionalidade integrada pode ser implantada em qualquer lugar. O banco de dados Oracle também pode armazenar unidades de programa escritas em Java. Um procedimento armazenado Java é um método Java publicado em SQL e armaze- nado no banco de dados para uso geral. Você pode chamar programas PL/SQL existentes de Java e programas Java de PL/SQL. 1.3. GerenCiamento de transações oraCle O gerenciamento de transações é o uso de transações para garantir a simultaneidade e a consistência dos dados. Transações O banco de dados Oracle foi projetado como um banco de dados multiusuário. O banco de dados deve garantir que vários usuários possam trabalhar simultaneamente sem corromper os dados uns dos outros. Uma transação é uma unidade de trabalho lógica e atômica que contém uma ou mais ins- truções SQL. Um SGBDR deve ser capaz de agrupar instruções SQL para que todas sejam confirmadas, o que significa que são aplicadas ao banco de dados, ou todas revertidas, o que significa que foram desfeitas. Uma ilustração da necessidade de transações é uma transferência de fundos de uma conta poupança para uma conta corrente. A transferência consiste nas seguintes operações separadas:• Diminua a conta poupança. • Aumente a conta corrente. • Registre a transação no diário de transações. O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 8 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro O banco de dados Oracle garante que todas as três operações sejam bem-sucedidas ou fa- lhem como uma unidade. Por exemplo, se uma falha de hardware impedir a execução de uma instrução na transação, as outras instruções deverão ser revertidas. As transações são um recurso que diferencia o banco de dados Oracle de um sistema de ar- quivos. No caso de um sistema de arquivos, se você executar uma operação atômica que atualiza vários arquivos e se o sistema falhar no meio, os arquivos não serão consistentes. Em contraste, uma transação move um banco de dados Oracle de um estado consistente para outro. O princípio básico de uma transação é “tudo ou nada”: uma operação atômica é bem-sucedida ou falha como um todo. Simultaneidade dos Dados Um requisito de um SGBDR multiusuário é o controle de simultaneidade de dados, que é o acesso simultâneo dos mesmos dados por vários usuários. Sem qualquer tipo de controle de concorrência, os usuários poderiam alterar os dados de forma inadequada, comprometendo a integridade dos dados. Por exemplo, um usuário pode atualizar uma linha enquanto um usuário diferente a atualiza simultaneamente. Se vários usuários acessarem os mesmos dados, uma maneira de gerenciar a concorrência é fazer com que os usuários esperem. No entanto, o objetivo de um SGBD é reduzir o tempo de espera para que seja inexistente ou insignificante. Todas as instruções SQL que modificam dados devem proceder com a menor interferência possível. As interações destrutivas, que são interações que atualizam dados incorretamente ou alteram estruturas de dados subjacentes, devem ser evitadas. O banco de dados Oracle usa bloqueios (locks) para controlar o acesso simultâneo aos dados. Um bloqueio é um mecanismo que impede a interação destrutiva entre transações que acessam um recurso compartilhado. Os bloqueios ajudam a garantir a integridade dos dados enquanto permitem o máximo acesso simultâneo aos dados. Consistência dos Dados No banco de dados Oracle, cada usuário deve ter uma visão consistente dos dados, in- cluindo alterações visíveis feitas pelas próprias transações de um usuário e transações confir- madas de outros usuários. Por exemplo, o banco de dados deve evitar o problema de leitura suja (dirty read), que ocorre quando uma transação vê alterações não confirmadas feitas por outra transação simultânea. O banco de dados Oracle sempre impõe consistência de leitura em nível de instrução, o que garante que os dados retornados por uma única consulta sejam confirmados e consis- tentes em um único ponto no tempo. Dependendo do nível de isolamento da transação, esse ponto é a hora em que a instrução foi aberta ou a hora em que a transação começou. O recurso Oracle Flashback Query permite especificar esse momento explicitamente. O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 9 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro O banco de dados também pode fornecer consistência de leitura para todas as consultas em uma transação, conhecida como consistência de leitura em nível de transação. Nesse caso, cada instrução em uma transação vê dados do mesmo ponto no tempo, que é o momen- to em que a transação começou. 1.4. arquitetura do BanCo de dados oraCle Um servidor de banco de dados é a chave para o gerenciamento de informações. Em geral, um servidor de banco de dados gerencia de forma confiável uma grande quanti- dade de dados em um ambiente multiusuário, para que os usuários possam acessar simulta- neamente os mesmos dados. Um servidor de banco de dados também impede o acesso não autorizado e fornece soluções eficientes para recuperação de falhas. Banco de Dados e Instância Um servidor de banco de dados Oracle consiste em um banco de dados e pelo menos uma instância de banco de dados. Como uma instância e um banco de dados estão intimamente conectados, o termo banco de dados Oracle às vezes se refere à instância e ao banco de dados. Em sentido estrito, os termos têm os seguintes significados: Banco de dados – É um conjunto de arquivos, localizados em disco, que armazenam da- dos do usuário. Esses arquivos de dados podem existir independentemente de uma instância de banco de dados. A partir do banco de dados Oracle 21c, “banco de dados” refere-se espe- cificamente aos arquivos de dados de um banco de dados de contêiner multilocatário (CDB), banco de dados plugável (PDB) ou contêiner de aplicativo. Instância de banco de dados – É um conjunto nomeado de estruturas de memória que geren- ciam arquivos de banco de dados. Uma instância de banco de dados consiste em uma área de me- mória compartilhada, chamada de área global do sistema (SGA) e um conjunto de processos em segundo plano. Uma instância pode existir independentemente dos arquivos de banco de dados. Arquitetura Multitenant A arquitetura multitenant permite que um banco de dados Oracle seja um CDB. Um contêiner é uma coleção de esquemas, objetos e estruturas relacionadas em um ban- co de dados de contêiner multilocatário (CDB). Dentro de um CDB, cada contêiner tem um ID e um nome exclusivos. Um CDB inclui nenhum, um ou muitos bancos de dados conectáveis (PDBs) criados pelo cliente e contêineres de aplicativos. Um PDB é uma coleção portátil de esquemas, objetos de esquema e objetos não esquema que aparecem para um cliente Oracle Net como um banco de dados separado. Um contêiner de aplicativo é um componente CDB opcional criado pelo O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 10 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro usuário que armazena dados e metadados para um ou mais back-ends de aplicativo. Um CDB inclui nenhum ou mais contêineres de aplicativos. Cada banco de dados Oracle deve conter ou poder ser contido por outro banco de dados. Por exemplo, um CDB contém PDBs e um contêiner de aplicativo contém PDBs de aplicativo. Um PDB está contido em um CDB ou contêiner de aplicativo e um contêiner de aplicativo está contido em um CDB. A partir do banco de dados Oracle 21c, um banco de dados de contêiner multilocatário (CDB)é a única arquitetura com suporte. Nas versões anteriores, a Oracle suportava bancos de dados não-contêiner (não CDBs). CDB – Um CDB contém um ou mais PDBs e contêineres de aplicativos criados pelo usuário. No nível físico, um CDB é um conjunto de arquivos: arquivo de controle, arquivos de redo log on- line e arquivos de dados. A instância do banco de dados gerencia os arquivos que compõem o CDB. A figura a seguir mostra um CDB e uma instância de banco de dados associada: O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilizaçãocivil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 11 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro A figura acima mostra o SGA. Dentro do SGA estão o Database Buffer Cache, Redo Log Buffer, Shared Pool, Large Pool, Fixed SGA, Java Pool e Streams Pool. À direita do SGA estão os processos em segundo plano PMON, SMON, RECO, MMON, MMNL e outros. Abaixo do SGA estão DBWn, CKPT, LGWR, ARCn e RVWR. Abaixo do SGA estão o PGA e o Processo do Ser- vidor. O Processo Servidor está conectado a um Processo Cliente. À direita do Processo do Cliente estão os Arquivos de Banco de Dados (Arquivos de Dados, Arquivos de Controle, Redo Log Online), Redo Log Arquivado e Flashback Log. PDB – Um PDB é uma coleção portátil de esquemas, objetos de esquema e objetos que não são de esquema que aparecem para um aplicativo como um banco de dados separado. No nível físico, cada PDB possui seu próprio conjunto de arquivos de dados que armaze- nam os dados para o PDB. O CDB inclui todos os arquivos de dados dos PDBs contidos nele e um conjunto de arquivos de dados do sistema que armazenam metadados para o próprio CDB. Para mover ou arquivar um PDB, você pode desconectá-lo. Um PDB desconectado consis- te nos arquivos de dados do PDB e em um arquivo de metadados. Um PDB desconectado não é utilizável até que seja conectado a um CDB. A figura a seguir mostra um CDB chamado MYCDB: Fisicamente, o MYCDB é um banco de dados Oracle, no sentido de um conjunto de arqui- vos de dados associados a uma instância. O MYCDB tem uma instância de banco de dados, embora várias instâncias sejam possíveis no Oracle Real Application Clusters e um conjunto de arquivos de banco de dados. O MYCDB contém dois PDBs: hrpdb e salespdb. Conforme mostrado na figura acima, es- ses PDBs aparecem para seus respectivos aplicativos como bancos de dados independentes e separados. Um aplicativo não sabe se está se conectando a um CDB ou PDB. O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 12 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro Para administrar o próprio CDB ou qualquer PDB dentro dele, você pode se conectar à raiz do CDB. A raiz é uma coleção de esquemas, objetos de esquema e objetos sem esquema aos quais pertencem todos os PDBs e contêineres de aplicativos. Contêineres de aplicativos – É um contêiner opcional criado pelo usuário em um CDB que armazena dados e metadados para um ou mais aplicativos. Nesse contexto, um aplicativo é um conjunto nomeado e com versão de dados e metadados comuns armazenados na raiz do aplicativo. Por exemplo, o aplicativo pode incluir definições de tabelas, exibições, contas de usuário e pacotes PL/SQL comuns a um conjunto de PDBs. De certa forma, um contêiner de aplicativo funciona como um CDB específico do aplicativo dentro de um CDB. Um contêiner de aplicativo, como o próprio CDB, pode incluir vários PDBs de aplicativo e permite que esses PDBs compartilhem metadados e dados. No nível físico, um contêiner de aplicativo possui seu próprio conjunto de arquivos de dados, assim como um PDB. Por exemplo, uma implantação de SaaS pode usar vários PDBs de aplicativos, cada um para um cliente separado, que compartilham metadados e dados de aplicativos. Por exemplo, na figu- ra a seguir, sales_app é o modelo de aplicativo na raiz do aplicativo. O aplicativo PDB nomeado cust1_pdb contém dados de vendas apenas para o cliente 1, enquanto o aplicativo PDB nomea- do cust2_pdb contém dados de vendas apenas para o cliente 2. Conectar, desconectar, clonar e outras operações em nível de PDB estão disponíveis para PDBs de clientes individuais. O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 13 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro Arquitetura de Fragmentação O Oracle Sharding é uma técnica de dimensionamento de banco de dados baseada no par- ticionamento horizontal de dados em vários PDBs. Os aplicativos percebem o pool de PDBs como um único banco de dados lógico. Os principais benefícios do sharding para aplicativos OLTP incluem escalabilidade linear, contenção de falhas e distribuição de dados geográficos. A fragmentação é adequada para implantação no Oracle Cloud. Ao contrário de armazenamentos de dados NoSQL que imple- mentam sharding, o Oracle Sharding oferece os benefícios de sharding sem sacrificar os re- cursos de um SGBDR corporativo. Em uma arquitetura de sharding, cada CDB é hospedado em um servidor dedicado com seus próprios recursos locais, CPU, memória, flash ou disco. Você pode designar um PDB como um shard. Os fragmentos de PDB de diferentes CDBs formam um único banco de dados lógico, conhecido como banco de dados fragmentado. Dois fragmentos no mesmo CDB não podem ser membros do mesmo banco de dados fragmentado. No entanto, dentro do mesmo CDB, um PDB pode estar em um banco de dados fragmentado e outro PDB pode estar em um banco de dados fragmentado separado. O particionamento horizontal envolve a divisão de uma tabela de banco de dados em frag- mentos para que cada fragmento contenha a tabela com as mesmas colunas, mas um sub- conjunto diferente de linhas. Uma tabela dividida dessa maneira também é conhecida como tabela fragmentada. A figura a seguir mostra uma tabela fragmentada horizontalmente particionada em três fragmentos, cada um dos quais é um PDB em um CDB separado: Um caso de uso é distribuir dados de contas de clientes em vários CDBs. Por exemplo, um cliente com ID 28459361 pode pesquisar seus registros. A figura a seguir mostra uma arqui- tetura possível. A solicitação do cliente é roteada por meio de um pool de conexões, onde os O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 14 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro diretores de fragmentação (ouvintes de rede) direcionam a solicitação para o fragmento PDB apropriado, que contém todas as linhas do cliente. 1.5. estruturas de armazenamento de BanCo de dados oraCle Um banco de dados pode ser considerado de uma perspectiva física e lógica. Dados físicos são dados visíveis no nível do sistema operacional. Por exemplo, utilitários do sistema operacional, como os comandos ls e ps do Linux, que podem listar arquivos e pro- cessos de banco de dados. Dados lógicos, como uma tabela, são significativos apenas para o banco de dados. Uma instrução SQL pode listar as tabelas em um banco de dados Oracle, mas um utilitário do sistema operacional não pode. O banco de dados possui estruturas físicas e estruturas lógicas. Como as estruturas físi- cas e lógicas são separadas, você pode gerenciar o armazenamento físico de dados sem afe- tar o acesso às estruturas de armazenamento lógico. Por exemplo, renomear um arquivo de banco de dados físico não renomeia as tabelas cujos dados estão armazenados nesse arquivo. O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meiose a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 15 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro Estruturas de Armazenamento Físico As estruturas físicas do banco de dados são os arquivos que armazenam os dados. Um banco de dados Oracle é um conjunto de arquivos que armazenam dados Oracle em armaze- namento persistente. Ao executar um comando CREATE DATABASE, você cria um CDB. Os seguintes arquivos são criados: • Arquivos de dados e arquivos temporários: Cada CDB possui um ou mais arquivos de dados físicos, que contêm todos os dados do banco de dados. Os dados de estruturas lógicas de banco de dados, como tabelas e índices, são armazenados fisicamente nos ar- quivos de dados. Um arquivo de dados é um arquivo físico em armazenamento persisten- te que foi criado pelo banco de dados Oracle e contém estruturas de dados como tabelas e índices. Um arquivo temporário é um arquivo de dados que pertence a um tablespace temporário. O banco de dados grava dados nesses arquivos em um formato proprietário da Oracle que não pode ser lido por outros programas. Quando você cria um PDB, o PDB tem seu próprio conjunto de arquivos de dados dentro do conjunto geral de arquivos de dados que compõe o CDB. Por exemplo, você pode criar um CDB chamado mycdb e, em seguida, criar dois PDBs dentro dele, hrpdb e salespdb. Nesse caso, mycdb teria seu pró- prio conjunto de arquivos de dados e arquivos temporários, como hrpdb e salespdb. • Arquivos de controle: Cada CDB possui um arquivo de controle. Um arquivo de controle contém metadados que especificam a estrutura física do banco de dados, incluindo o nome do banco de dados e os nomes e locais dos arquivos do banco de dados. Um arquivo de controle é um arquivo raiz que rastreia os componentes físicos do CDB. Os PDBs não possuem seus próprios arquivos de controle separados. • Arquivos de redo log online: Cada CDB tem um redo log online, que é um conjunto de dois ou mais arquivos de redo log online. Um redo log online é composto de entradas de redo (tam- bém chamadas de registros de redo log), que registram todas as alterações feitas nos dados. O redo log online é um conjunto de arquivos contendo registros de alterações feitas nos da- dos dentro do CDB. Os PDBs não têm seus próprios arquivos de redo log online separados. O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 16 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro Uma instância de banco de dados é um conjunto de estruturas de memória que gerenciam arquivos de banco de dados em um CDB. A figura a seguir mostra o relacionamento entre a instância e os arquivos que ela gerencia: Ao executar um comando CREATE PLUGGABLE DATABASE em um CDB, você cria um PDB. O PDB contém um conjunto dedicado de arquivos de dados dentro do CDB. Um PDB não possui um arquivo de controle dedicado e separado e um redo log online, esses arquivos são compartilhados pelos PDBs. Estruturas de Armazenamento Lógico O banco de dados Oracle aloca espaço lógico para todos os dados no banco de dados. O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 17 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro As unidades lógicas de alocação de espaço de banco de dados são blocos de dados, extensões, segmentos e tablespaces. Em um nível físico, os dados são armazenados em ar- quivos de dados em disco. Os dados nos arquivos de dados são armazenados em blocos do sistema operacional. A figura a seguir é um diagrama entidade-relacionamento para armazenamento físico e lógico. A notação do pé de galinha representa uma relação um-para-muitos: Um segmento contém uma ou mais extensões, cada uma contendo vários blocos de dados. O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 18 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro A figura a seguir mostra os relacionamentos entre blocos de dados, extensões e segmen- tos em um tablespace. Neste exemplo, um segmento tem duas extensões armazenadas em arquivos de dados diferentes. Do nível mais baixo de granularidade ao mais alto, o banco de dados Oracle armazena da- dos da seguinte forma: • Um bloco de dados (data block) é a menor unidade lógica de armazenamento de dados no banco de dados Oracle. Um bloco de dados lógicos corresponde a um número específico de bytes de armazenamento persistente, por exemplo, 2 KB. Os blocos de dados são as menores unidades de armazenamento que o banco de dados Oracle pode usar ou alocar. • Uma extensão (extent) é um conjunto de blocos de dados logicamente contíguos alocados para armazenar um tipo específico de informação. Na figura anterior, a extensão de 24 KB possui 12 blocos de dados, enquanto a extensão de 72 KB possui 36 blocos de dados. • Um segmento (segment) é um conjunto de extensões alocadas para um objeto de ban- co de dados específico, como uma tabela. Por exemplo, os dados da tabela “Funcioná- rios” são armazenados em seu próprio segmento de dados, enquanto cada índice da tabela “Funcionário” é armazenado em seu próprio segmento de índice. Cada objeto de banco de dados que consome armazenamento consiste em um único segmento. • Um espaço de tabela (tablespace) é uma unidade de armazenamento de banco de da- dos que contém um ou mais segmentos. Cada segmento pertence a um e apenas um tablespace. Assim, todas as extensões de um segmento são armazenadas no mesmo tablespace. Dentro de um tablespace, um segmento pode incluir extensões de vários O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 19 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro arquivos de dados, conforme mostrado na figura anterior. Por exemplo, uma extensão para um segmento pode ser armazenada em users01.dbf, enquanto outra é armazenada em users02.dbf. Uma única extensão nunca pode abranger arquivos de dados. Arquivos Gerenciados pelo Oracle (Oracle Managed Files) e Arquivos Gerencia- dos pelo Usuário O Oracle Managed Files é uma estratégia de nomenclatura de arquivos que permite espe- cificar operações em termos de objetos de banco de dados em vez de nomes de arquivos. Por exemplo, você pode criar um tablespace sem especificar os nomes de seus arquivos de dados. O Oracle Managed Files elimina a necessidade de administradores gerenciarem direta- mente os arquivos do sistema operacional em um banco de dados. O Oracle ASM requer Ora- cle Managed Files. Esse recurso não afeta a criação ou nomeação de arquivos administrativos, comoarqui- vos de rastreamento, arquivos de auditoria e logs de alerta. Com arquivos gerenciados pelo usuário, você gerencia diretamente os arquivos do siste- ma operacional no banco de dados. Você toma as decisões sobre a estrutura e a nomenclatura do arquivo. Por exemplo, ao criar um tablespace, você define o nome e o caminho dos arquivos de dados do tablespace. Por meio dos parâmetros de inicialização, você especifica o diretório do sistema de arqui- vos para um tipo específico de arquivo. O recurso Oracle Managed Files garante que o banco de dados crie um arquivo exclusivo e o exclua quando não for mais necessário. O banco de dados usa internamente interfaces de sistema de arquivos padrão para criar e excluir arquivos para arquivos de dados e arquivos temporários, arquivos de controle e arquivos relacionados à recuperação armazenados na área de recuperação rápida. O Oracle Managed Files não elimina a funcionalidade existente. Você pode criar novos arquivos enquanto administra manualmente os arquivos antigos. Assim, um banco de dados pode ter uma mistura de Oracle Managed Files e arquivos gerenciados pelo usuário. Oracle Automatic Storage Management (Oracle ASM) O Oracle ASM é uma solução de armazenamento de alto desempenho e fácil gerencia- mento para arquivos do banco de dados Oracle. O Oracle ASM é um gerenciador de volume e fornece um sistema de arquivos projetado exclusivamente para uso pelo banco de dados. Para usar o Oracle ASM, você aloca discos particionados para o banco de dados Oracle com preferências para distribuição e espelhamento. O Oracle ASM gerencia o espaço em dis- co, distribuindo a carga de E/S por todos os recursos disponíveis para otimizar o desempenho e eliminar a necessidade de ajuste manual de E/S. Por exemplo, você pode aumentar o tama- nho do disco do banco de dados ou mover partes do banco de dados para novos dispositivos sem precisar desligar o banco de dados. O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 20 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro Componentes de Armazenamento Oracle ASM O banco de dados Oracle pode armazenar um arquivo de dados como um arquivo Oracle ASM em um grupo de discos Oracle ASM. Dentro de um grupo de discos, o Oracle ASM expõe uma interface de sistema de arquivos para arquivos de banco de dados. A figura a seguir mostra os relacionamentos entre os componentes de armazenamento em um banco de dados que usa o Oracle ASM. O diagrama descreve o relacionamento entre um arquivo Oracle ASM e um arquivo de dados, embora o Oracle ASM possa armazenar outros tipos de arquivos. A notação do pé de galinha representa uma relação um-para-muitos. A figura acima ilustra os seguintes conceitos do Oracle ASM: • ASM Disk (Discos Oracle ASM): Um disco Oracle ASM é um dispositivo de armazena- mento provisionado para um grupo de discos Oracle ASM. Um disco Oracle ASM pode ser um disco físico ou partição, um número de unidade lógica (LUN) de uma matriz de armazenamento, um volume lógico ou um arquivo conectado à rede. Os discos Oracle ASM podem ser adicionados ou descartados de um grupo de discos enquanto o banco de dados está em execução. Ao adicionar um disco a um grupo de discos, você atribui um nome de disco ou o disco recebe um nome de disco Oracle ASM automaticamente. • ASM Disk Group (Grupos de Discos Oracle ASM): Um grupo de discos Oracle ASM é uma coleção de discos Oracle ASM gerenciados como uma unidade lógica. As estrutu- ras de dados em um grupo de discos são independentes e consomem algum espaço em disco em um grupo de discos. Dentro de um grupo de discos, o Oracle ASM expõe uma interface de sistema de arquivos para arquivos de banco de dados Oracle. O conteúdo dos arquivos armazenados em um grupo de discos é distribuído uniformemente, ou dis- tribuído, para eliminar pontos de acesso e fornecer desempenho uniforme nos discos. • ASM File (Arquivos Oracle ASM): Um arquivo Oracle ASM é um arquivo armazenado em um grupo de discos Oracle ASM. O banco de dados Oracle se comunica com o Oracle O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 21 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro ASM em termos de arquivos. O banco de dados pode armazenar arquivos de dados, arquivos de controle, arquivos de redo log online e outros tipos de arquivos como arqui- vos Oracle ASM. Quando solicitado pelo banco de dados, o Oracle ASM cria um arquivo Oracle ASM e atribui a ele um nome que começa com um sinal de mais (+) seguido por um nome de grupo de discos, como em +DISK1. • ASM Extent (Extensões Oracle ASM): Uma extensão Oracle ASM é uma seção de um arquivo Oracle ASM. Um arquivo Oracle ASM consiste em uma ou mais extensões de arquivo. Cada extensão do Oracle ASM consiste em uma ou mais unidades de alocação em um disco específico. Uma extensão Oracle ASM é diferente da extensão usada para armazenar dados em um segmento. • ASM Allocation Unit (Unidades de Alocação Oracle ASM): Uma unidade de alocação Oracle ASM é a unidade fundamental de alocação em um grupo de discos. Uma unida- de de alocação é o menor espaço em disco contíguo que o Oracle ASM aloca. Uma ou mais unidades de alocação formam uma extensão Oracle ASM. Instâncias Oracle ASM Uma instância Oracle ASM é uma instância especial do Oracle que gerencia discos Oracle ASM. As instâncias do Oracle ASM e do banco de dados exigem acesso compartilhado aos dis- cos em um grupo de discos do Oracle ASM. As instâncias do Oracle ASM gerenciam os meta- dados do grupo de discos e fornecem informações de layout de arquivo para as instâncias do banco de dados. As instâncias de banco de dados direcionam a E/S para discos Oracle ASM sem passar por uma instância Oracle ASM. Uma instância Oracle ASM é construída com a mesma tecnologia que uma instância de banco de dados. Por exemplo, uma instância do Oracle ASM tem uma área global do sistema (SGA) e processos em segundo plano semelhantes aos de uma instância de banco de dados. No entanto, uma instância do Oracle ASM não pode montar um banco de dados e executa me- nos tarefas do que uma instância de banco de dados. O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 22 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro A figura a seguir mostra uma configuração de nó único com uma instância Oracle ASM e duas instâncias de banco de dados, cada uma associada a um banco de dados de instância única diferente. A instância Oracle ASM gerencia os metadados e fornece alocação de espaço para os arquivos Oracle ASM que armazenam os dados dos dois bancos de dados. Um grupo de discos Oracle ASM tem quatro discos Oracle ASM e o outro tem dois discos. Ambas as instâncias de banco de dados podem acessar os grupos de discos. Armazenamento de Arquivos de Memória Persistente do Oracle (PMEM Filestore) PMEM é memória persistente endereçável por byte. O Oracle Persistent Memory Filestore (PMEM Filestore) pode armazenar arquivos de dados, arquivos de redo log online e arquivosde controle. As consultas podem ler bytes diretamente do PMEM sem primeiro migrar blocos para o cache de buffer do banco de dados. Esse mecanismo de alto desempenho evita redundância de dados e E/S desnecessárias. Um armazenamento de arquivos PMEM não pode armazenar arquivos de rastreamento, arquivos de auditoria ou arquivos de parâmetros do servidor. Os tipos de arquivo suportados para PMEM são semelhantes aos tipos para Oracle ASM. O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 23 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro Na pirâmide de armazenamento tradicional, PMEM fica entre DRAM, que não é persistente, e Flash, que é persistente (não volátil). O cache do buffer do banco de dados reside na DRAM. Os processos Oracle têm acesso en- dereçável por byte direto a blocos em um armazenamento de arquivos PMEM, que são mapeados para o cache de buffer do banco de dados. O mecanismo de mapeamento é invocado automati- camente quando você coloca um arquivo de dados em um armazenamento de arquivos PMEM. O banco de dados Oracle usa um algoritmo interno para decidir se os blocos de dados vão migrar do armazenamento de arquivos PMEM para DRAM. Os motivos típicos para a migração incluem mo- dificações de DML, consistência de leitura e acesso mais rápido para blocos de dados ativos. Para criar um armazenamento de arquivos PMEM, use o comando CREATE PMEM FILESTORE. O armazenamento de arquivos PMEM é montado automaticamente após sua criação. O armazenamento de arquivos PMEM aparece no ponto de montagem especificado como se fosse um sistema de arquivos nativo. O parâmetro de inicialização PMEM_FILESTORE especifica um armazenamento de arquivos PMEM que a instância de banco de dados monta automaticamente quando é iniciada. O parâ- metro é definido como um par ordenado de strings. A primeira string na lista de valores de parâ- metro é o diretório onde o PMEM Filestore está montado. A segunda string é o arquivo de apoio. O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 24 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro Arquivos de Dados No nível do sistema operacional, o banco de dados Oracle armazena dados em estruturas chamadas de arquivos de dados. Todo banco de dados Oracle, seja um CDB ou PDB, deve ter pelo menos um arquivo de dados. O banco de dados Oracle armazena fisicamente os dados do tablespace em arqui- vos de dados. Cada objeto de esquema não particionado e cada partição de um objeto são armazenados em seu próprio segmento, que pertence a apenas um tablespace. Por exemplo, os dados de uma tabela não particionada são armazenados em um único segmento, que por sua vez é ar- mazenado em um tablespace. Tablespaces e arquivos de dados estão intimamente relacionados, mas têm diferenças importantes: • Cada tablespace consiste em um ou mais arquivos de dados, que estão em conformida- de com o sistema operacional no qual o banco de dados Oracle está sendo executado. • Os dados de um banco de dados são armazenados coletivamente nos arquivos de da- dos que estão localizados em cada tablespace do banco de dados. • Um segmento pode abranger um ou mais arquivos de dados, mas não pode abranger vários tablespaces. • Um CDB deve ter os tablespaces SYSTEM e SYSAUX. Cada PDB dentro de um CDB tem seus próprios tabelspaces SYSTEM e SYSAUX. O banco de dados Oracle aloca automa- ticamente os primeiros arquivos de dados de qualquer banco de dados para o tablespa- ce SYSTEM durante a criação do banco de dados. O tablespace SYSTEM contém o dicionário de dados, um conjunto de tabelas que contém metadados do banco de dados. Normalmente, um banco de dados também possui um tables- pace de undo e um tablespace temporário (geralmente denominado TEMP). O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 25 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro A figura a seguir mostra o relacionamento entre tablespaces, arquivos de dados e segmentos: Um tablespace permanente contém objetos de esquema persistentes. Objetos em tables- paces permanentes são armazenados em arquivos de dados. Um tablespace temporário contém objetos de esquema apenas durante uma sessão. Os tablespaces temporários gerenciados localmente têm arquivos temporários, que são arquivos especiais projetados para armazenar dados em operações de hash, classificação e outras. Os arquivos temporários também armazenam dados do conjunto de resultados quando existe espaço insuficiente na memória. Cada arquivo de dados está online (disponível) ou offline (indisponível). É possível alterar a disponibilidade de arquivos de dados individuais ou arquivos temporários colocando-os offline ou online. O banco de dados não pode acessar arquivos de dados offline até que eles sejam colocados online. Os arquivos de dados podem ser colocados offline por vários motivos, incluindo a execução de backups offline ou a corrupção de blocos. O banco de dados coloca um arquivo de dados offline automaticamente se o banco de dados não puder gravar nele. Como um arquivo de dados, um tablespace em si está offline ou online. Quando você co- loca um arquivo de dados offline em um tablespace online, o próprio tablespace permanece online. Você pode tornar todos os arquivos de dados de um tablespace temporariamente in- disponíveis colocando o próprio tablespace offline. O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 26 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro A partir do Oracle Database 12c, você pode usar a instrução ALTER DATABASE MOVE DATAFILE para mover um arquivo de dados online de um arquivo físico para outro enquanto o banco de dados está aberto e acessando o arquivo. O banco de dados Oracle cria um arquivo de dados para um tablespace alocando a quantida- de especificada de espaço em disco mais a sobrecarga para o cabeçalho do arquivo de dados. O cabeçalho do arquivo de dados contém metadados sobre o arquivo de dados, como seu tamanho e ponto de verificação SCN (checkpoint). O SCN (System Change Number) é um nú- mero em formato atômico mantido pelo Oracle para registrar quais alterações foram feitas no seu banco de dados. Cada cabeçalho contém um número de arquivo absoluto, que identifica exclusivamente o arquivo de dados no banco de dados, e um número de arquivo relativo, que identifica exclusi- vamente um arquivo de dados em um tablespace. A figura a seguir ilustra os diferentes tipos de espaço em um arquivo de dados. Com o tempo, atualizações e exclusões de objetos em um tablespace podem criar bolsões de espaço vazio que individualmente não são grandes o suficiente para serem reutilizados para novos dados. Esse tipo deespaço vazio é chamado de espaço livre fragmentado. A figura acima descreve um arquivo de dados como camadas. A camada superior é o cabe- çalho do arquivo de dados. As segunda, quinta e sexta camadas são usadas. A última camada é livre (formatada, mas nunca usada). As terceira, quarta e sétima camadas são livres (usadas anteriormente, atualmente não utilizadas). Arquivos de Controle O arquivo de controle do banco de dados é um pequeno arquivo binário associado a ape- nas um CDB. Cada CDB possui um arquivo de controle único, embora várias cópias idênticas sejam permitidas. Os PDBs não possuem arquivos de controle separados. O banco de dados Oracle usa o arquivo de controle para localizar arquivos de banco de dados e gerenciar o estado do banco de dados em geral. O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 27 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro Um arquivo de controle contém informações como: • O nome do banco de dados e o identificador exclusivo do banco de dados (DBID). • O carimbo de hora da criação do banco de dados. • Informações sobre arquivos de dados, arquivos de redo log online e arquivos de redo log arquivados. • Informações do espaço de tabela. • Backups RMAN. O arquivo de controle tem as seguintes finalidades: • Ele contém informações sobre arquivos de dados, arquivos de redo log online e assim por diante que são necessários para abrir o banco de dados. O arquivo de controle ras- treia as alterações estruturais no banco de dados. Por exemplo, quando um administra- dor adiciona, renomeia ou descarta um arquivo de dados ou arquivo de redo log online, o banco de dados atualiza o arquivo de controle para refletir essa alteração. • Ele contém metadados que devem estar acessíveis quando o banco de dados não está aberto. Por exemplo, o arquivo de controle contém informações necessárias para recu- perar o banco de dados, incluindo pontos de verificação (checkpoints). O banco de dados Oracle lê e grava no arquivo de controle continuamente durante o uso do banco de dados e deve estar disponível para gravação sempre que o banco de dados esti- ver aberto. Por exemplo, a recuperação de um banco de dados envolve a leitura do arquivo de controle dos nomes de todos os arquivos de dados contidos no banco de dados. As informações sobre o banco de dados são armazenadas em diferentes seções do arqui- vo de controle. Cada seção é um conjunto de registros sobre um aspecto do banco de dados. Por exemplo, uma seção no arquivo de controle rastreia arquivos de dados e contém um conjunto de registros, um para cada arquivo de dados. Cada seção é armazenada em vários blo- cos de arquivos de controle lógico. Os registros podem abranger blocos dentro de uma seção. O arquivo de controle contém os seguintes tipos de registros: • Registros circulares de reutilização: Contém informações não críticas que podem ser substituídas, se necessário. Quando todos os slots de registro disponíveis estiverem cheios, o banco de dados expande o arquivo de controle para liberar espaço para um novo registro ou substitui o registro mais antigo. Os exemplos incluem registros sobre arquivos de redo log arquivados e backups RMAN. • Registros de reutilização não circulares: Contém informações críticas que não mudam com frequência e não podem ser substituídas. Exemplos de informações incluem ta- blespaces, arquivos de dados, arquivos de log de redo online e threads de redo. O banco de dados Oracle nunca reutiliza esses registros, a menos que o objeto correspondente seja removido do tablespace. O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 28 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro Redo Log Online A estrutura mais importante para recuperação é o redo log online, que consiste em dois ou mais arquivos pré-alocados que armazenam alterações no banco de dados à medida que ocorrem. O redo log online registra as alterações nos arquivos de dados. O banco de dados mantém arquivos de redo log online para proteção contra perda de dados. Especificamente, após uma falha de instância, os arquivos de redo log online permitem que o banco de dados Oracle recupere dados confirmados que ainda não foram gravados nos arquivos de dados. Os processos do servidor gravam todas as transações de forma síncrona no buffer de redo log, que o processo LGWR grava no redo log online. O conteúdo do redo log online inclui transações não confirmadas e instruções de gerenciamento de esquema e objeto. O redo log online para uma instância de banco de dados é chamado de redo thread. Em configurações de instância única, apenas uma instância acessa um banco de dados, portanto, apenas um redo thread está presente. Em uma configuração do Oracle Real Applica- tion Clusters (Oracle RAC), no entanto, várias instâncias acessam simultaneamente um banco de dados, com cada instância tendo seu próprio redo thread. Um redo thread separado para cada instância evita a contenção de um único conjunto de arquivos de redo log online. Um redo log online consiste em dois ou mais arquivos de redo log online. O banco de dados Oracle requer um mínimo de dois arquivos para garantir que um arquivo esteja sempre dis- ponível para gravação caso o outro arquivo esteja em processo de limpeza ou arquivamento. O banco de dados Oracle apenas um arquivo de redo log online por vez para armazenar registros gravados no buffer de redo log. O arquivo de redo log online no qual o processo de gravação de log (LGWR) está gravando ativamente é chamado de arquivo de redo log online atual. Uma alternância de log (log switch) ocorre quando o banco de dados para de gravar em um arquivo de redo log online e começa a gravar em outro. Normalmente, uma troca ocorre quando o arquivo de redo log online atual está cheio e a gravação deve continuar. No entanto, você pode configurar as alternâncias de log (log switchs) para ocorrer em intervalos regu- lares, independentemente se o arquivo de redo log online atual está preenchido, e forçar as alternâncias de log manualmente. O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 29 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro O gravador de log grava em arquivos de log de redo online de forma circular. Quando o gra- vador de log preenche o último arquivo de redo log online disponível, o processo grava no pri- meiro arquivo de log, reiniciando o ciclo. A figura abaixo ilustra a escrita circular do redo log: Os números na figura acima mostram a sequência na qual o LGWR grava em cada arquivo de redo log online. O banco de dados atribui a cada arquivo um novo número de sequência de log quando um log é alternado e os gravadores de log começam a gravar nele. Quando o banco de dados reutiliza um arquivo de redo log online, esse arquivo recebe o próximo número de sequência de log disponível. Os arquivos de log de redo online contêm registros de redo. Um registro de redo é composto de um grupo de vetores de alteração, cada um dos quais descreve uma alteraçãoem um bloco de dados. 2. Pl/sql PL/SQL é um acrônimo para a expressão inglesa Procedural Language/Structured Query Language, trata de uma extensão da linguagem padrão SQL para o SGBD Oracle. Ela foi criada pela Oracle para facilitar e acelerar o tratamento e a persistência de dados, aplicando lógica de programação unificada a comandos nativos SQL do banco de dados. O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 30 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro ProGramação do lado do servidor Em uma linguagem não procedural como SQL, o conjunto de dados a ser operado é especifica- do, mas não as operações a serem executadas ou a maneira pela qual elas devem ser executadas. Em um programa de linguagem procedural, a maior parte da execução de instruções de- pende de instruções anteriores ou subsequentes e de estruturas de controle, como loops ou ramificações condicionais, que não estão disponíveis no SQL. Para uma ilustração da diferença entre linguagens procedurais e não procedurais, supo- nha que a seguinte instrução SQL consulte a tabela “Funcionários” (employees): A instrução solicita dados, mas não aplica lógica aos dados. No entanto, suponha que você queira que um aplicativo determine se cada funcionário no conjunto de dados merece um aumento com base no salário e no desempenho do departamento. Uma condição necessária para um aumento é que o funcionário não tenha recebido mais de três aumentos nos últimos cinco anos. Se for solicitado um aumento, o aplicativo deve ajustar o salário e enviar um e-mail ao gerente, caso contrário, o aplicativo deve atualizar um relatório. O problema é, como os aplicativos de banco de dados procedurais que exigem lógica con- dicional e controle de fluxo de programa podem usar SQL, as abordagens básicas de desenvol- vimento são as seguintes: • Use a programação do lado do cliente para incorporar instruções SQL em aplicativos escritos em linguagens procedurais, como C, C++ ou Java. Você pode colocar instru- ções SQL no código-fonte e enviá-las a um pré-compilador ou tradutor Java antes da compilação. Como alternativa, você pode eliminar a etapa de pré-compilação e usar uma API como Java Database Connectivity (JDBC) ou Oracle Call Interface (OCI) para permitir que o aplicativo interaja com o banco de dados. • Use a programação do lado do servidor para desenvolver lógica de dados que reside no banco de dados. Uma aplicação pode invocar explicitamente subprogramas arma- zenados (procedimentos e funções), escritos em PL/SQL ou Java. Você também pode criar um gatilho (trigger), que é chamado de unidade de programa que é armazenado no banco de dados e chamado em resposta a um evento específico. O principal benefício da programação do lado do servidor é que a funcionalidade incorpo- rada ao banco de dados pode ser implantada em qualquer lugar. O banco de dados, e não o aplicativo, determina a melhor maneira de realizar tarefas em um determinado sistema ope- racional. Além disso, os subprogramas aumentam a escalabilidade centralizando o proces- samento de aplicativos no servidor, permitindo que os clientes reutilizem o código. Como as chamadas de subprogramas são rápidas e eficientes, uma única chamada pode iniciar um subprograma armazenado com uso intensivo de computação, reduzindo o tráfego de rede. O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 31 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro visão Geral do Pl/sql A PL/SQL fornece uma linguagem procedural armazenada do lado do servidor que é fácil de usar, integrada com SQL, robusta, portátil e segura. Você pode acessar e manipular dados do banco de dados usando objetos procedurais chamados unidades PL/SQL. As unidades PL/SQL geralmente são categorizadas da seguinte forma: • Um subprograma PL/SQL é um bloco PL/SQL que é armazenado no banco de dados e pode ser chamado pelo nome de um aplicativo. Quando você cria um subprograma, o ban- co de dados analisa o subprograma e armazena sua representação analisada no banco de dados. Você pode declarar um subprograma como um procedimento ou uma função. • Um bloco PL/SQL anônimo é um bloco PL/SQL que aparece em seu aplicativo e não é nomeado ou armazenado no banco de dados. Em muitos aplicativos, os blocos PL/SQL podem aparecer onde quer que as instruções SQL apareçam. O compilador e o interpretador PL/SQL são incorporados ao Oracle SQL Developer, oferecen- do aos desenvolvedores um modelo de desenvolvimento consistente e otimizado no cliente e no servidor. Além disso, os procedimentos armazenados PL/SQL podem ser chamados de vários clientes de banco de dados, como Pro*C, JDBC, ODBC ou OCI, e do Oracle Reports e Oracle Forms. Subprogramas PL/SQL Um subprograma PL/SQL é um bloco PL/SQL nomeado que permite ao chamador fornecer parâmetros que podem ser somente entrada, somente saída ou valores de entrada e saída. Um subprograma resolve um problema específico ou executa tarefas relacionadas e serve como um bloco de construção para aplicativos de banco de dados modulares e de fácil manu- tenção. Um subprograma é um procedimento PL/SQL ou uma função PL/SQL. Procedimentos e funções são idênticos, exceto que as funções sempre retornam um único valor para o cha- mador, enquanto os procedimentos não. Um subprograma armazenado autônomo é um subprograma criado no nível do esquema com a instrução CREATE PROCEDURE ou CREATE FUNCTION. Os subprogramas definidos em um pacote são chamados de subprogramas de pacote e são considerados parte do pacote. O banco de dados armazena subprogramas no dicionário de dados como objetos de es- quema. Um subprograma tem uma especificação, que inclui descrições de quaisquer parâme- tros, e um corpo. Este exemplo mostra parte de uma instrução de criação para o procedimento PL/SQL inde- pendente “Contrata_Funcionario” (hire_employees). O procedimento insere uma linha na tabela “Funcionario” (employees). O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 32 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro Os usuários podem executar um subprograma interativamente de várias maneiras. As opções são: • Usando uma ferramenta Oracle, como SQL*Plus ou SQL Developer. • Chamando-o explicitamente no código de um aplicativo de banco de dados, como um Oracle Forms ou um aplicativo pré-compilador. • Chamando-o explicitamente no código de outro procedimento ou gatilho. A figura a seguir mostra diferentes aplicativos de banco de dados chamando o procedi- mento “Contrata_Funcionario” (hire_employees). O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 33 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro Como alternativa,um usuário privilegiado pode usar o Oracle Enterprise Manager ou SQL*Plus para executar o procedimento “Contrata_Funcionario” (hire_employees) usando uma instrução como a seguinte: A instrução anterior insere um novo registro para “TSMITH” na tabela “Funcionario” (employees). Um procedimento armazenado (stored procedure) depende dos objetos referenciados em seu corpo. O banco de dados rastreia e gerencia automaticamente essas dependências. Por exemplo, se você alterar a definição da tabela “Funcionario” (employees) referenciada pelo procedimento “Contrata_Funcionario” (hire_employees) de uma maneira que afetaria esse procedimento, o pro- cedimento deverá ser recompilado para validar se ainda funciona conforme projetado. Normal- mente, o banco de dados administra automaticamente esse gerenciamento de dependência. Pacotes PL/SQL Um pacote PL/SQL é um grupo de subprogramas relacionados, junto com os cursores e variá- veis que eles usam, armazenados juntos no banco de dados para uso contínuo como uma unidade. Subprogramas empacotados podem ser chamados explicitamente por aplicativos ou usuários. O banco de dados Oracle inclui muitos pacotes fornecidos que estendem a funcionalidade do banco de dados e fornecem acesso PL/SQL aos recursos SQL. Por exemplo, o pacote UTL_ HTTP permite chamadas HTTP de PL/SQL e SQL para acessar dados na Internet. Você pode usar os pacotes fornecidos ao criar aplicativos ou como fonte de ideias ao criar seus próprios procedimentos armazenados. Você cria um pacote em duas partes: a especificação e o corpo. A especificação do pacote declara todas as construções públicas do pacote, enquanto o corpo do pacote define todas as construções (públicas e privadas) do pacote. O exemplo a seguir mostra parte de uma instrução que cria a especificação de pacote para “Funcionario_Gerencia” (employees_management), que encapsula vários subprogramas usa- dos para gerenciar um banco de dados de funcionários. Cada parte do pacote é criada com uma instrução diferente. O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 34 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro A especificação declara a função “Contrata_Funcionario” (hire_employees), os procedimen- tos “Demite_Funcionario” (fire_employees) e “Aumenta_Salario” (salary_raise). Todos esses ob- jetos de programa público estão disponíveis para usuários que têm acesso ao pacote. A instrução CREATE PACKAGE BODY define objetos declarados na especificação. O corpo do pacote deve ser criado no mesmo esquema que o pacote. Depois de criar o pacote, você pode desenvolver aplicativos que chamem qualquer um desses procedimentos ou funções públicas ou gerem qualquer uma das exceções públicas do pacote. Gatilhos (triggers) de banco de dados, subprogramas armazenados, programas de aplicati- vos 3GL e ferramentas Oracle podem fazer referência ao conteúdo do pacote. A figura a seguir mostra os aplicativos de banco de dados invocando procedimentos e funções no pacote “Funcionario_Gerencia” (employees_management). Os aplicativos de banco de dados chamam explicitamente os procedimentos empacota- dos conforme necessário. Após receber os privilégios para o pacote “Funcionario_Gerencia” (employees_management), um usuário pode executar explicitamente qualquer um dos proce- dimentos contidos nele. Blocos Anônimos PL/SQL Um bloco anônimo PL/SQL é uma unidade PL/SQL sem nome e não persistente. Os usos típicos para blocos anônimos incluem: • Iniciando chamadas para subprogramas e construções de pacotes. • Isolando o tratamento de exceções. O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 35 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro • Gerenciando o controle aninhando código em outros blocos PL/SQL. Blocos anônimos não têm as vantagens de reutilização de código dos subprogramas armazenados. Um bloco anônimo consiste em uma parte declarativa opcional, uma parte executável e um ou mais manipuladores de exceção opcionais. O exemplo de bloco anônimo a seguir sele- ciona o sobrenome de um funcionário em uma variável e imprime o nome: O banco de dados Oracle compila o bloco PL/SQL e o coloca no pool compartilhado da SGA, mas não armazena o código-fonte ou a versão compilada no banco de dados para reu- tilização além da instância atual. Ao contrário dos gatilhos (triggers), um bloco anônimo é compilado toda vez que é carregado na memória. Construções de Linguagem PL/SQL Os blocos PL/SQL podem incluir uma variedade de construções de linguagem PL/SQL di- ferentes. Essas construções, incluindo o seguinte: • Variáveis e constantes: Você pode declarar essas construções em um procedimento, função ou pacote. Você pode usar uma variável ou constante em uma instrução SQL ou PL/SQL para capturar ou fornecer um valor quando necessário. • Cursores: Você pode declarar um cursor explicitamente em um procedimento, função ou pacote para facilitar o processamento orientado a registros de dados do banco de dados Oracle. O mecanismo PL/SQL também pode declarar cursores implicitamente. • Exceções: A PL/SQL permite que você manipule explicitamente condições de erro inter- nas e definidas pelo usuário, chamadas exceções, que surgem durante o processamen- to do código PL/SQL. A PL/SQL pode executar instruções SQL dinâmicas cujo texto completo não é conhecido até o tempo de execução. As instruções SQL dinâmicas são armazenadas em cadeias de caracteres que são inseridas ou criadas pelo programa em tempo de execução. Essa técnica permite criar O conteúdo deste livro eletrônico é licenciado para Nome do Concurseiro(a) - 000.000.000-00, vedada, por quaisquer meios e a qualquer título, a sua reprodução, cópia, divulgação ou distribuição, sujeitando-se aos infratores à responsabilização civil e criminal. https://www.grancursosonline.com.br https://www.grancursosonline.com.br 36 de 63www.grancursosonline.com.br Banco de Dados Oracle e PL/SQL BANCO DE DADOS E GESTÃO DA INFORMAÇÃO Sérgio Sierro procedimentos de propósito geral. Por exemplo, você pode criar um procedimento que opera em uma tabela cujo nome não é conhecido até o tempo de execução. Coleções e Registros PL/SQL Muitas técnicas de programação usam tipos de coleção como arrays, bags, listas, tabelas aninhadas, conjuntos e árvores. Para dar suporte às técnicas de coleta em aplicativos de banco de dados, a PL/SQL forne- ce os tipos de dados TABLE e VARRAY. Esses tipos permitem declarar matrizes associativas, tabelas aninhadas e matrizes de tamanho variável. Uma coleção PL/SQL é um grupo ordenado de elementos, todos do mesmo tipo. Cada elemento possui um subscrito exclusivo que determina sua posição na coleção. Para criar uma coleção, você primeiro define um tipo de coleção e, em seguida, declara uma variá- vel desse tipo. As coleções funcionam como os arrays encontrados na maioria das linguagens de progra- mação de terceira geração. Além disso, as coleções podem ser passadas como parâmetros. Assim, você pode usá-los para mover colunas de dados para dentro e para fora de tabelas de banco de dados ou entre aplicativos do lado do cliente e subprogramas armazenados. Um registro PL/SQL é uma variável composta que pode armazenar valores de dados de diferentes tipos, semelhantes a um tipo de estrutura em C, C++ ou Java. Os registros são úteis para armazenar dados das linhas
Compartilhar