sexta-feira, 29 de maio de 2009

O que é um Banco de Dados, no Oracle

O que é o Servidor de Banco de Dados Oracle

Quando você instala o Oracle Database, você na verdade está instalando um SGBD – Sistema de Gerenciamento de Bancos de Dados. Para que você possa, efetivamente, ter um banco de dados, você precisa de uma instância rodando. Nas versões comerciais, você pode definir esta instância durante a instalação ou criá-la depois, usando o utilitário DBCA.

Ao se instalar o XE, uma instância é criada automaticamente. Esta instância recebe o sugestivo nome de XE.

O que é uma Instância Oracle

Para os propósitos deste artigo, uma instância Oracle é um conjunto de processos e serviços em execução, destinados a realizar tarefas pertinentes à um Servidor de Banco de Dados. Esta instância recebe um nome, que é usado como SID (System ID); possui um conjunto de Processos que correspondem ao gerenciamento da instância; e possui um Listener, que é o canal de comunicação entre os Processos do servidor e os Clientes do banco de dados.

O Oracle Database

Um banco de dados Oracle é uma coleção de dados tratados como uma unidade. O propósito de um banco de dados é armazenar e recuperar informações relacionadas. Um servidor de banco de dados é a chave para resolver problemas de gerenciamento de informação.

Em geral, um servidor gerencia confiavelmente uma grande quantidade de dados em um ambiente multiusuário onde vários usuários podem acessar o mesmo dado, concorrentemente. Tudo isto é realizado ao mesmo tempo em que o servidor garante alta performance. Um servidor de banco de dados também evita acessos não autorizados aos dados e ainda provê uma eficiente solução de recuperação de falhas.

Fig. 1 - Arquitetura de Processos em um servidor Oracle

A figura acima mostra a arquitetura de processos de um servidor de banco de dados Oracle. Nesta postagem eu não vou entrar em detalhes arquitetônicos do Oracle. Mas esta introdução à sua arquitetura irá esclarecer muita coisa de seu funcionamento. Em primeiro lugar, o que é um banco de dados, no Oracle?


O que é, afinal, um Banco de Dados, no Oracle

O Oracle trabalha com o conceito de “Schemas”. Numa tradução livre, “Schema” significa esquema. Mas vamos usar sempre o termo original, agora sem as aspas: Schema. Então, o que é um Schema?

Um Schema é uma coleção de estruturas lógicas de dados, ou objetos de um usuário. Um Schema é, ainda, uma espécie de "área de trabalho" de um usuário e tem sempre o mesmo nome do usuário. Cada usuário possui um único Schema. Os objetos de um Schema podem ser criados e manipulados com SQL (Structured Query Language) e incluem os seguintes tipos de objeto:

  • Clusters
  • Database links
  • Database triggers
  • Dimensions
  • External procedure libraries
  • Indexes and index types
  • Java classes, Java resources, and Java sources
  • Materialized views and materialized view logs
  • Object tables, object types, and object views
  • Operators
  • Sequences
  • Stored functions, procedures, and packages
  • Synonyms
  • Tables and index-organized tables
  • Views

Fig. 2 - Tablespaces em um banco de dados Oracle

Outros tipos de objetos podem também ser armazenados no banco de dados e podem ser criados e manipulados via SQL, mas não estão contidos num Schema:

  • Contexts
  • Directories
  • Profiles
  • Roles
  • Tablespaces
  • Users
Os objetos de um Schema são estruturas lógicas de armazenamento de dados. E eles não têm uma correspondência um-para-um com arquivos físicos em um disco que armazena tais informações. Ao invés disto, o Oracle armazena logicamente os objetos de um Schema dentro de uma Tablespace do banco de dados (ver Fig. 2). As Tablespaces, sim, tem relação com arquivos físicos. Mas isto não é importante do ponto de vista do armazenamento lógico dos objetos de um esquema.

Não há um relacionamento de exclusividade entre Schemas e Tablespaces: uma Tablespace pode conter objetos de diferentes Schemas, e os objetos de um Schema podem ser contidos em diferentes Tablespaces.

Para não ficar muito confuso, vou deixar para falar sobre Tablespaces em outra postagem específica. Por enquanto, vamos ver como criar um usuário de banco de dados e ver qual sua relação com as Tablespaces.

Vou dar um exemplo, baseado numa situação hipotética:

Dado um Sistema de Protocolo, seria lógico criar no servidor de banco de dados Oracle um Schema chamado PROTOCOLO. No Schema PROTOCOLO, então, nós criaríamos todos os objetos necessários para o Sistema de Protocolo: tabelas, views, procedures, functions, packages, índices e etc.

Então, como criar um Schema? Simples, muito simples: crie um usuário de banco de dados, ou simplesmente: crie um usuário!

Criando um Usuário de Banco de Dados

Para criar um usuário de banco de dados, basta você se conectar ao Oracle como um usuário DBA (DataBase Administrator ou Administrador de Banco de Dados) e usar comandos apropriados da SQL.

Os comandos da SQL são classificados, basicamente, nas seguintes categorias:

DML - Linguagem de Manipulação de Dados
DDL - Linguagem de Definição de Dados
DCL - Linguagem de Controle de Dados
DTL - Linguagem de Transação de Dados
DQL - Linguagem de Consulta de Dados

A criação de um usuário se enquadra na categoria DCL e o comando é CREATE USER. Então, para criar um usuário no Oracle, é só comandar:

CREATE USER FulanoDeTal IDENTIFIED BY SenhaDoFulanoDeTal;

Apenas isto já criaria o usuário. Mas existem alguns detalhes relacionados à Tablespaces que são importantes saber desde o início. Então o comando para criar nosso usuário de banco de dados no Oracle ficaria assim:

CREATE USER PROTOCOLO IDENTIFIED BY Senha
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;

Se não tivéssemos informado a Default Tablespace e a Temporary Tablespace, o Oracle usaria aquelas que foram configuradas como Tablespaces Padrão ou Default. No Oracle, estas Tablespaces são USERS e TEMP.

Privilégios de um usuário

Criar o usuário não basta! Nós ainda precisamos dizer o que ele pode fazer no servidor de banco de dados Oracle. Fazemos isto através de outro comando da categoria DCL. Seu nome é GRANT. Em nosso exemplo faríamos:

GRANT CONNECT, RESOURCE, UNLIMITED TABLESPACE TO PROTOCOLO;

Há inúmeros outros privilégios, mas estes aí permitem conectar-se ao servidor Oracle (CONNECT), criar recursos (RESOURCE) ou objetos, tais como tabelas e etc, sem nenhum limite estabelecido para armazenamento destes recursos (UNLIMITED TABLESPACE).

As TableSpaces default

Mesmo que não sejam informadas as tablespaces default, ao se criar um usuário, o Oracle atribui as tablespaces necessárias para a criação dos objetos de um usuário ou Schema. Mas, qual o significado destas tablespaces?

A Default TableSpace é a tablespace onde o Oracle armazena as estruturas lógicas que um usuário cria em seu Schema, caso não seja informada uma. Assim, se nosso usuário PROTOCOLO criasse uma tabela, através do comando:

CREATE TABLE ASSUNTO_PROTOCOLO(
ID_ASSUNTO INTEGER PRIMARY KEY,
DS_ASSUNTO VARCHAR2(128)
);

a estrutura lógica da tabela ASSUNTO_PROTOCOLO seria criada e armazenada dentro da Default Tablespace USERS. Mas nada impede o usuário PROTOCOLO de fazer o seguinte:

CREATE TABLE ASSUNTO_PROTOCOLO(
ID_ASSUNTO INTEGER PRIMARY KEY,
DS_ASSUNTO VARCHAR2(128)
)
TABLESPACE NomeDaTableSpace;

Ou seja, ele poderia criar a tabela em seu Schema, mas armazenando sua estrutura lógica em outra Tablespace.

Esta característica ímpar abre uma janela incrível de possibilidades, mas que fogem ao escopo desta postagem. Por hora saiba apenas que é possível!

A Temporary TableSpace é a tablespace onde o Oracle armazena temporariamente estruturas lógicas necessárias quando se está manipulando dados. Em determinadas situações de consultas muito complexas, por exemplo, o Oracle precisa criar estruturas lógicas temporariamente, para somente depois dar o resultado. É na Temporary TableSpace onde ele armazena tais estruturas. Mais uma vez vou dizer que esta característica ímpar abre uma janela incrível de possibilidades, mas vamos falar sobre isto em outra oportunidade.

Resumo da Ópera

Agora que você leu todo o artigo, sugiro rolar a tela para cima e observar as figuras. Certamente agora elas fazem mais sentido, não? (Espero que sim :-)

Um banco de dados, no Oracle, é uma coleção de objetos dentro de um Schema, que é possuído por (owned by) um usuário de banco de dados (ou simplesmente usuário). Em tal usuário nós “preenchemos” o Schema com objetos necessários, que irão atender ao propósito de um banco de dados.

Nenhum comentário:

Postar um comentário