Pular para o conteúdo principal

Criando uma Base de Dados Oracle


#47
É pessoal vocês devem estar cansados de tanta teoria, mas já estamos quase na parte prática de colocar nossa primeira base de dados online.

Mas, primeiro vamos entender como funciona a parte teórica, depois vamos para a prática da criação da base de dados, porque a parte prática da criação de uma base de dados pode ser bem simples e rápida de se fazer, mas, para o DBA o importante é entender os passos que levam a essa criação da base de dados, e é isso que iremos aprender, quais são as etapas até que a base esteja pronta para uso.

No post anterior instalamos o banco de dados que é usado para gerênciar as bases de dados, mas, chamar uma base de dados de banco de dados também é normal e não tem problema.

Para criar a base de dados vamos usar o software DBCA, ele é um software gráfico desenvolvido em Java pela Oracle, o uso do DBCA facilita e otimiza a criação da base de dados. Também é possível criar uma base de dados diretamento pelo shell do linux, se você for usar o shell terá que seguir algumas etapas, mas não é nada muito complicado. Aqui não vou ensinar como criar a base de dados usando o shell do linux.

Antes de criar a base de dados, vamos executar um comando no shell do linux, esse comando irá listar os bancos de dados que já existem no servidor.

# ps -ef |grep pmon

Como é nossa primeira instalacão da base de dados, então esse comando não irá retornar resultados. Após criar a base de dados iremos executar novamente esse comando e observar o resultado.

*Observação: Como o comando "grep" gera um novo processo, então o resultado que aparece na primeira linha não se refere a uma base de dados, e sim, ao processo "grep" que foi executado para listar as base de dados.

Vamos reelembrar um pouco o conceito sobre um servidor de banco de dados Oracle, ele é dívidido e duas partes, uma é a instância e o outro é o banco de dados. A instância é composta das estruturas e processos de memória na sua RAM e o banco de dados são os arquivos no disco.

A criação da base de dados é realizada pela instância, essa criação é uma operação executada apenas uma vez, mas, a instância pode abri-lo ou fechá-lo muitas vezes. O banco de dados não tem nenhum valor sem a instância.

Para a criação do banco de dados, vários arquivos são criados, e é a partir destes arquivos que o banco de dados é gerado e configurado, exitem vários arquivos importantes, vamos começar falando do arquivo de parâmetros.

Para uma instância ser criada, ela utiliza um arquivo de parâmetros, esse arquivo de parâmetros contém diretrizes que definem como a instância deve ser criada na memória, alguns desses parâmetros são sobre o tamanho das estruturas de memória e o comportamento dos processos de segundo plano.

Após a criação da instância ela fica no modo de "nomount", nesse modo a instância existe mas não esta conectada a um banco de dados, nesse modo é provável que o banco de dados ainda nem mesmo exista.

No arquivo de parâmetro, todos os parâmetros têm valores padrão, exceto um, somente o parâmento DB_NAME não possuí um valor padrão. O parâmento DB_NAME nomeia o banco de dados ao qual a instância será conectada. Esse nome também está registrado no arquivo de controle.

Existe também um parâmetro chamado CONTROL_FILES que informa à instância o local onde está armazenado o arquivo de controle. Esse parâmetro é responsável por definir a conexão entre a instância e o banco de dados. A partir deste parâmetro a instância consegue localizar e ler o arquivo de controle, e é comparado o nome do banco de dados dentro do parâmetro DB_NAME com o nome dentro do arquivo de controle, e se houver alguma divergência nos nomes dos bancos de dados, o banco de dados não será montado.

Se o nome do banco de dados for igual dentro do DB_NAME e arquivo de controle, e sendo que o arquivo de controle não esteja corrompido, então, o banco de dados é montado com sucesso, nesse modo ele é chamado de "mount". Dentro do arquivo de controle existem ponteiros para outros arquivos importantes, que são, os arquivos de redo log online e os arquivos de dados.

Agora que o banco de dados já foi montado, é hora de abrir o banco de dados, para isso a instância utiliza os ponteiros do arquivo de controle para localizar e abrir os arquivos de redo log online e os arquivos de dados. Um banco de dados é considerado aberto, quando a instância abri todos os arquivos de redo log online disponíveis.

Agora que o banco de dados esta aberto, precisamos acessar o dicionário de dados, já dedicamos um post exclusívo para falar sobre o dicionário de dados (https://wdsdba.blogspot.com.br/2018/03/dicionario-de-dados-estruturas-logicas.html), mas, só para reelembrar, um dicionário de dados armazena todas informações referentes ao banco de dados, tanto da estrutura física, quanto da estrutura lógica.

Para acessar o dicionário de dados, precisamos acessar a tablespace SYSTEM e para acessar o tablespace SYSTEM precisamos acessar novamente o arquivo de controle, pois, dentro do arquivo de controle existe um mapeamento do arquivo de dados para todos os tablespace.

Acessando o tablespace SYSTEM temos acesso ao dicionário de dados, e o dicionário de dados permite que a instância resolva as referências aos objetos citados nos códigos SQL, essas referências são relacionadas as informações sobre os segmentos nos quais eles residem e descubra onde os objetos estão fisicamente no banco dados.

O dicionário de dados é criado inicialmente com o banco de dados, o dicionário de dados é criado a partir da execução de um conjunto de scripts SQL, esses scripts estão no diretório "$ORACLE_HOME/rdbms/admin" , esses scripts são chamados pelo comando CREATE DATABASE e o primeiro arquivo a ser chamado é o "sql.bsq" e esse arquivo é responsável por chamar vários outros arquivos. Ao executar esses scripts eles emitem uma série de comandos que criam todas as tabelas e outros objetos que compõem o dicionário de dados. Você só consegue acessar um dicionário de dados usando o conjunto de views que ele oferece.

Outros scripts também são executados na criação do banco de dados, esses scripts criam as visões e outros objetos que tornam o banco de dados utilizável, esses scripts estão dentro do diretório $ORACLE_HOME/rdbms/admin e tem como prefixo "cat", exemplos, "catalog.sql" e "catproc.sql", esses dois scripts devem ser executados imediatamente após a criação do banco de dados. Existem muitos outros scripts de prefixo "cat" opcionais que permitem certos recursos, alguns podem ser executados na hora da criação do banco de dados ou posteriormente.

A criação de um servidor de banco de dados deve envolver estas etapas:

- Criar a instância
- Criar o banco de dados
- Criar os objetos do dicionário de dados
- Criar as visões do dicionário de dados

Chegou a hora, vamos para a parte prática para instalar a base de dados, antes, mais um detalhe, se o banco de dados a ser usado for usar o Enterprise Manager Database Control, temos que passar por uma etapa adicional, que é a configuração do listener de banco de dados. Essa exigência é porque o Database Control sempre se conecta ao seu banco de dados por meio de um listener e o DBCA verifica se existe algum disponível. Essa configuração é simples e iremos entender o funcionamento em um outro post, nesse momento iremos fazer isso com o "Net Configuration Assistant" e aceitando os valores padrão que o Assistente define.

Listener, resumidamente, ele é um processo que é responsável por gerenciar conexões e tráfego entre as aplicações e o servidor de banco de dados Oracle.

O Net Configuration Assistant também é gráfico e para executar o software digite esse comando no shell e pressione enter:

# netca

* Para executar ele é bem provável que você tenha que configurar a variável DISPLAY, tente executar o "xclock" se ele funcionar o netca vai funcionar também, assim como o DBCA. Só é possível executar a interface gráfica utilizando um usuário sem os privilégios de root.

Se você executar o comando, " echo $DISPLAY " você tem acesso ao conteúdo da variável.

Segue as imagens para da instalação do LISTENER usando o comando netca. Se em algum momento aparecer uma mensagem informando que já existe um Listener, você pode sair da ferramenta imediatamente, clicando em Cancel e Finish.








Vamos partir para a instalação da base de dados usando o DBCA, se você configurou certo as variáveis de ambiente na instalação, então é só digitar o comando "dbca" no shell do linux, se ele não abrir execute o "xclock", se ele também não abrir verifique se a variável DISPLAY está correta.

Ao executar o DBCA ele pecorre o seguintes processos, ele cria um arquivo de parâmetros e um arquivo de senha, em seguida, gera os scripts que iniciarão a instância, depois, cria o banco de dados e gera o dicionário de dados, as visões do dicionário de dados e o Enterprise Manager Database Control.

A primeira tela é de boas vindas.


Na segunda tela você informa o que deseja fazer, a segunda e terceira opção ficam ativas somente se o DBCA encontrar uma outra base de dados instalada no ORACLE_HOME. Escolha a primeira opção.


Na tela "Database Templates" oferece opções de escolher um template para o novo banco de dados, escolha a segunda opção "Custom Database", que apresentará todas as opções possíveis.


Na tela "Database Identification" informamos o nome do banco de dados global e um System Identifier (SID), que será usado como nome da instância. Por padrão, ambos devem ter o mesmo nome. Esse nome é o mesmo informado na variável de ambiente ORACLE_SID onde informa a instância que será acessada.


Na tela "Management Options" tem a caixa de seleção para configurar o banco de dados com o Entreprise Manager.
Selecione a opção, "Configure Enterprise Manager".
Se o DBAC não detectar um agente do "Grid Control", então, a opção "Grid Control" vai estar desabilitada.
Escolha então a opção "Configure Database Control for local management".
Nessa mesma tela, na aba "Automatic Maintenance Tasks" deixe a caixa de seleção marcada. 
Clique em Next, nesse ponto, o DBCA irá gerar um erro se não houver um listener disponível.



Na tela "Database Credentials" solicita a senha para os quatro principais usuários do banco de dados. Selecione a opção de baixo, onde, você informa uma única senha para todos o usuários.

Os usuários criados e suas funções:

SYS          - Dono do dicionário de dados,
SYSTEM - Usado para grande parte do trabalho do DBA.
DBSNMP - Usada para monitoramento externo.
SYSMAN - Usada pelo Entreprise Manager.



Como segurança, se você informar uma senha simples, será questionado se você deseja manter a senha informada, clique em YES.


Na tela "Database File Locations" pede para informar o tipo de Storage, mantenha o tipo "File System", também é solicitado um diretório raiz para o banco de dados. Use a opção "Use Database File Locations from Template". Clique no botão "File Locations Variables" para ver onde o banco de dados será criado. Esse local será no ORACLE_BASE/oradata/DB_NAME do padrão OFA.


Na tela "Recovery Configuration" selecione "Specify Fast Recovery Area", mantenha o caminho atual para "Fast Recovery Area" e coloque 2GB no campo "Fast Recovery Area Size". Não ative o arquivamento.


Na tela "Database Content" marque apenas a opção "Enterprise Manager Repository", as outras opções não são necessárias para esse banco de dados e tornarão a criação mais longa. Clique no botão "Standard Database Components" e desmarque todas as opções, não se preocupe com o alerta informando que XML DB é usado por outros componentes.



Na tela "Initialization Parameters" tem quatro abas, mantenha todas com os valores padrões.

A primeira aba "Memory" mostra a memória que será alocada para a instância, com base em uma porcentagem da memória principal detectada.


Na segunda aba "Sizing" mostra o tamanho do bloco do banco de dados, padronizando como 8KB, essa é a única opção que não pode ser alterada após a criação da base de dados.


Na terceira aba "Character Sets" mostra o conjunto de caracteres a ser usado no banco de dados, que terá um valor padrão baseado no sistema operacional, essa opção pode ser muito difícil de alterar posteriormente.


Na última aba "Connection Mode" determina como as sessões de usuário serão gerenciadas.


Na tela "Database Storage" mostra, por meio de árvore de navegação à esquerda, os arquivos que serão criados, você pode navegar por eles e ver o nome e tamanhos dos arquivos.


Na tela "Creation Options" marque as opções "Create Database" e "Generate Database Creation Scripts", observe o caminho para os scripts, ele será ORACLE_BASE/admin/orcl/scripts.

Ao clicar em "Finish" será apresentado a tela informando o que o DBCA irá fazer, clicando em OK o DBCA irá gerar os scripts de criação, isso leva poucos minutos, quando terminar, clique em OK e o DBCA vai começar a criar o banco de dados.

Muitos DBA's gostam de apenas criar os script pelo DBCA, com isso é possível examinar e editar o que deseja, depois eles usam esses scripts para criar o banco de dados de forma manual pelo shell do linux.

Quando o banco de dados estiver sendo criado, se você observar acima do botão de stop da criação do banco de dados, você vai ver o endereço onde esta sendo armazenados os logs, se ocorrer algum erro, você pode examinar esses logs.

A instalação demora de 15 a 40 minutos, dependendo da máquina.






Finalizamos a instalação do banco de dados. Se digitarmos novamente o comando:

#  ps -ef |grep pmon

Iremos ver que a base de dados foi criada e esta com o nome de " ora_pmon_orcl ".

Depois de criar a base de dados, agora iremos conhecer um pouco mais sobre os scripts criados.
Você pode acessar os scripts gerados pelo DBCA, eles estarão no diretório ORACLE_BASE/admin/DB_NAME/scripts.

Um dos primeiros arquivos que você deve examinar é o "init.ora" esse é o arquivo de parâmetros de instância. Existem cerca de 300 parâmetros, mas o arquivo gerado pelo DBCA configura apenas alguns. Você pode abrir esse arquivo usando o camando "vi" no linux.

Vou citar apenas três parâmetros, o: DB_BLOCK_SIZE, CONTROL_FILES e DB_NAME.

- DB_BLOCK_SIZE, determina o tamanho dos buffers no cache de buffer do banco de dados. Esse parâmetro também é usado pela instância na criação de um banco de dados, o tamanho do DB_BLOCK_SIZE é usado para formatar os arquivos de dados que compõem os tablespace SYSTEM e SYSAUX, após a criação do banco de dados, seu valor não pode ser alterado.

- CONTROL_FILES, é o ponteiro que permite que a instância encontre todas as cópias multiplexadas do arquivo de controle do banco de dados. Nesse estágio, o arquivo de controle não existe e esse parâmetro informará à instância onde criá-lo.

- DB_NAME, esse é o único parâmetro de instância para o qual não há um valor padrão. Esse parâmetro deve existir ou você não poderá iniciar uma instância. Esse parâmetro pode ser configurado com até oito caracteres, somente letras e dígitos, mas sempre deve começar com uma letra.

Para a criação do banco de dados, é executado um script em shell, esse script irá criar os diretórios no padrão OFA, após a criação dos diretórios é configurada a variável de ambiente ORACLE_SID e o caminho do diretório ORACLE_HOME/bin é incluido no início da variável PATH, após essas configurações, o script inicia o SQLPlus que executa o arquivo orcl.sql ( "orcl" é o nome dado ao SID na criação do banco de dados ) que controla a criação do banco de dados.

Ao executar o script orcl.sql, as primeiras intruções são para a criação de um arquivo de senha externo para o banco de dados, nesse arquivos vão estar as senhas das quatro contas informadas na tela "Database Credentials". Após a criação do arquivo de senhas, o script chama vários outros arquivos. Abaixo você observar um print do script orcl.sql.


O primeiro arquivo a ser executado é o "CreateDB.sql", o script conecta a instância usando a sintaxe de autenticação do arquivo de senha. O comando echo e spool faz com que o SQLPlus grave em log tudo o que acontece em seguida. Ao executar o comando "startup nomount" é criado uma instância na memória usando o arquivo de parâmetro estático mencionado anteriormente. O "nomount" é necessário pois não existe nenhum banco de dados para montar e abrir. Após o start irá existir uma instância executando com uma SGA e os processos de segundo plano. A SGA será dimensionada de acordo com os parâmetros no arquivo "init.ora" mencionado anteriormente.

Após o comando "startup nomount" é executado o comando "CREATE DATABASE orcl", esse comando continua até o ponto e virgula que fica no final do arquivo. Abaixo um print do script.


Abaixo do comando CREATE DATABASE, a primeira seção de comando configura alguns limites globais para o banco, esses limites podem ser alterados depois. Em seguida encontramos duas especificações de arquivos de dados, essas especificações são os arquivos que serão usados para os tablespaces SYSTEM e SYSAUX, depois, há especificações para um tablespace TEMPORARY e um tablespace UNDO. Em seguida, há uma especificação para o conjunto de caracteres de banco de dados, que é usado para o dicionário de dados e colunas do tipo VARCHAR2, CHAR, CLOB. O próximo é o conjunto de caracteres nacional, que é usado para colunas do tipo NVARCHAR2, NCHAR, NCLOB. É possível alterar o conjunto de caracteres após a criação com o SQLPlus. Depois vemos a especificação para três grupos de arquivos de log, cada um deles com um membro, esse é um exemplo dos valores padrões do DBCA, seria melhor multiplexar os arquivos de redo log, criar ao menos dois arquivos para cada grupo, mas não tem problema, isso pode ser alterado depois. E finalmente as senhas para os usuários de banco de dados SYS e SYSTEM são inicializadas e a saída para o log é desativada.

Após a execução bem sucedida do comando CREATE DATABASE, você terá uma instância executando na memória e um banco de dados composto de um arquivo de controle e cópias conforme especificado pelo parâmetro de inicialização CONTROL_FILES e os arquivos de dados e redo logs especificados. Um dicionário de dados terá sido gerado no tablespace SYSTEM.

Embora o banco de dados tenha sido criado, ele é inútil. Os scripts restantes chamados pelo orcl.sql que resolvem isso e tornam o banco de dados utilizável.

A quantidade de outros scripts chamados para concluir a instalação do banco de dados irá depender das opções escolhidas durante a execução do DBCA, neste exemplo, como marcamos apenas a opção "Enterprise Manager Database Control", irá existir apenas mais 5 scripts.

Os scripts são:

- CreateDBfiles.sql, de menor importância, ele cria um pequeno tablespace, USERS, para ser usado como o local padrão de todos os objetos criados pelos usuários. É recomendado criar um tablespace para um conjunto de tabelas, mas se você não informar um tablespace no momento de criar uma tabela, o tablespace padrão USERS será usado.

- CreateDBCatalog.sql, esse é vital, pois executa um conjunto de scripts no diretório $ORACLE_HOME/rdbms/admin que constrói as visões do dicionário de dados e cria muitos pacotes PL/SQL. São essas visões e pacotes que possibilitam o gerenciamento de um banco de dados Oracle.

- emRepository.sql, executa o script que cria os objetos necessários do Enterprise Manager Database Control. Ele é executado porque foi selecionado na instalação.

- lockAccount.sql, script simples que bloqueia as contas abertas e expiradas por razões de segurança.

- postDBCreation.sql, gera um arquivo de parâmetros de servidor a partir do arquivo "init.ora", desbloqueia as contas DBSNMP e SYSMAN usadas pelo Enterprise Manager e executa o assistente de configuração do Enterprise Manager, que é o "emca" usado para configurar o Database Control para o novo banco de dados.


* Observação, no Livro OCA Database 11g, menciona apenas quatro scripts, o script deixado de fora é o lockAccount.sql.

Analisando o comando CREATE DATABASE, ele é considerado longo e complexo, mas, todos esses parâmetros são opcionais, porque se você não informa-los, serão usados parâmetros padrão, desta forma, executando apenas o comando "CREATE DATABASE + NOME_DATA_BASE" é possível criar o banco de dados. Só não existem valores padrão para os tablespace TEMP e UNDO, se eles não forem especificados o banco de dados é criado sem problemas e eles podem ser adicionados mais tarde.

Se tiverem dúvidas realizem um INSERT nos comentários e depois dê um COMMIT que depois respondo.

Abraço e bons estudos.

Comentários

Postagens mais visitadas deste blog

Conhecendo a arquitetura do Banco de Dados Oracle

#15 Vamos focar mais no ambiente de banco de dados mais comum, que é uma instância em um computador, abrindo um banco de dados armazenado em discos locais. Sempre que for mensionado instância, esta se referindo ao banco de dados em funcionamento. Um banco Oracle é composto por duas estruturas, uma lógica e uma física. A estrutura lógica é chamada de instância e composta por estruturas de memória e processos, a sua existência é temporária na memória RAM e CPU e fica ativa enquanto o banco Oracle estiver ligado, se desligar o banco Oracle toda a informação ou vestígios de sua existência será apagado da memória, ao ligar o banco Oracle a instância é carregada novamente na memória. Os processos que compõem a instância trabalham em segundo plano e fica ativo o tempo todo enquanto a instância estiver ativa. A estrutura física é onde fica armazenado as informações, e uma vez criado, ele existe até que o DBA deliberadamente decida exclui-lo. Quando um banco Oracle é iniciado, na me...

O Cache de Buffer do Banco de dados - Estruturas de Memória no Oracle

#21 Vamos conhecer um pouco mais sobre o Cache de Buffer de Dados. O Cache de Buffer de Dados é o local de trabalho do Oracle, é nessa área que ele executa as SQLs. A função dessa área é otimizar e melhorar o desempenho das instruções DML. O maior gargalo de um banco de dados é o I/O dos arquivos em disco. Mas antes de explicar como funciona o Cache de Buffer de Banco de dados, vamos entender rápidamente o que é bloco, desta forma você não fica perdido, os arquivos de dados que contém os registros que são as linhas da tabela, indices e outros objetos de dados são formatados em blocos de tamanho fixo, o DBA pode definir um tamanho para esses blocos ou deixar de forma automática. A quantidade de linhas por bloco é indefinida, pois, as linhas possuem comprimento variável, o comprimento desta linha dependerá do número de colunas e os tipos de informações definidos para a tabela. De acordo com tamanho das linhas, pode haver várias linhas por bloco ou uma linha pode se estender por vár...

Shared Pool - Estruturas de Memória no Oracle

#23 O Shared Pool é considerada umas das estruturas de memórias mais complexas da SGA, ela é dividida em dezenas de subestruturas e todas são gerenciadas internamente pelo Oracle. Mas nesse momento vamos citar apenas os 4 principais componentes desta estrutura, as demais serão analizadas posteriormente. Quando uma aplicação executa uma DML, vários processos internos no Oracle são realizados até o retorno do resultado para o usuário. E esses 4 componentes tem participação direta na execução da DML e com isso gerando um bom desempenho do banco de dados. Os 4 principais componentes são: - O Cache de Biblioteca - O Cache de Dicionário de Dados - A Área PL/SQL - O Cache de Resultados de Funções PL/SQL e Consultas SQL Agora, vamos conhecer um pouco mais de cada um. - O Cache de Biblioteca (library cache) Todas instruções DML enviadas pela aplicação devem ser analizadas pelo Oracle. Quem realiza essa análise é o parse, o parse converte o código escrito pelos progra...