Pesquisar este blog

sexta-feira, 26 de dezembro de 2014

Configurando HUGEPAGE em Banco de Dados Oracle 11g





Hugepage em Oracle 11g


            Muitos DBAs tem o conceito errado de que HugePages é um método usado exclusivamente para possibilitar o aumento da SGA em servidores Linux 32 bits, e a idéia do documento é apresentar os benefícios em se implementar o método em máquinas x86-64 bem como demonstrar o procedimento necessário para ativar a funcionalidade em bancos de dados Oracle 11g.

Introdução

HugePages é uma funcionalidade presente no kernel 2.6 que permite que o sistema operacional trabalhe com páginas de até 2MB (x86-64) ao invés do tamanho default de 4KB. Esta funcionalidade é bastante útil quando trabalhamos com servidores com grande quantidade de memória.

Os Sistemas Operacionais Linux possuem uma característica muito interessante chamada de HugePages, que quando usada por um banco Oracle oferece grandes ganhos de performance.

HugePages consiste em tornar os blocos de alocação de memória muito maiores do que os 4KB padrão. No Linux os HugePages possuem 2MB. Outra vantagem é que os HugePages são sempre alocados na memória física e nunca vão para a área de swap. Na verdade esses blocos de memória sequer são considerados como candidatos a ir para swap.

Benefícios

1.    Não utiliza swap, portanto evita-se o overhead existente no mecanismo de page-in/page-out
2.    Elimina a busca por páginas em swap.
3.    O processo kswapd será muito requisitado caso tenha que gerenciar uma grande quantidade de páginas de memória e certamente utilizará uma grande quantidade de processamento da máquina. Quando HugePages é implementado, este processo não é envolvido no gerenciamento. 




Roteiro básico


            Para implementar HugePages em Oracle 11g é necessário desabilitar a funcionalidade de gerenciamento automático de memória, que torna a alocação de memória SGA dinâmica.

Além disso, os seguintes passos, já conhecidos de versões anteriores, são necessários na implementação:

 
     1.      Verificar a compatibilidade:


 root$ grep Huge /proc/meminfo
 HugePages_Total: 0        ---------- zerado (hugepage não funcionado ainda)
 HugePages_Free:  0
 HugePages_Rsvd:  0
 Hugepagesize: 2048 kB     

2.    Iniciar a instância Oracle

oracle$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Thu May 6 12:05:25 2010
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
 With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select open_mode from v$database;
OPEN_MODE
 --------------------
 READ WRITE
  
   3.      Verificar se o gerenciamento automático de memória do Oracle está desabilitado:

SQL> show parameter memory_target
NAME                               TYPE             VALUE
 ------------------------------------ ----------- ------------------------------
 memory_target                           big integer 0
  
  4.      Definir memlock

Para implementar HugePages no Linux x86-64, a Oracle recomenda que o valor de memlock seja maior que o tamanho da SGA.  Para uma SGA de 5 GB,  coloque sempre superior o valor mais nada impede de configurar com o mesmo valor, mais é sempre bom configurar com uma folga.

root$ grep memlock /etc/security/limits.conf

 # - memlock - max locked-in-memory address space (KB)

 oracle hard memlock 5243000
 oracle soft memlock 5243000
  
  5.      Calcular nr_hugepages utilizando o script hugepages_settings.sh oferecido pela Oracle no seguinte note:


*Como criar o script  hugepages_settings.sh no final da documentação. 

Esse script lhe permite achar o valor exato para o parâmetro  - nr_hugepages


Shell Script to Calculate Values Recommended Linux HugePages / HugeTLB Configuration [ID 401749.1]


oracle$ ./hugepages_settings.sh
This script is provided by Doc ID 401749.1 from My Oracle Support
 (http://support.oracle.com) where it is intended to compute values for
 the recommended HugePages/HugeTLB configuration for the current shared
 memory segments. Before proceeding with the execution please make sure
 that:
 * Oracle Database instance(s) are up and running
 * Oracle Database 11g Automatic Memory Management (AMM) is not setup
 (See Doc ID 749851.1)
 * The shared memory segments can be listed by command:
 # ipcs -m
Press Enter to proceed...
Recommended setting: vm.nr_hugepages = 105
 
6.      Alterar parametro de kernel conforme valor recomendado no procedimento anterior:



root$ grep hugepages /etc/sysctl.conf

 root$ echo "vm.nr_hugepages = 105">> /etc/sysctl.conf
 root$ sysctl -p

   7.      Reinicie a instância Oracle


SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.


Total System Global Area 431058944  bytes
Fixed Size                  1336960 bytes
Variable Size             213911936 bytes
Database Buffers          209715200 bytes
Redo Buffers                6094848 bytes
Database mounted.
Database opened.

  8. Verifique o funcionamento

root$ grep Huge /proc/meminfo
 HugePages_Total: 1
 HugePages_Free:  1
 HugePages_Rsvd:  0
 Hugepagesize:   4096 kB
Caso a configuração não se efetive, pode ser necessário o reboot do servidor.
 

 

Roteiro a ser seguido

Configuração

A primeira coisa a ser feita para a configuração é identificar quanta quantidade de memória você necessita para ser usada como HugePages. No caso de uma instância Oracle você deve alocar uma quantidade de memória suficiente para acomodar todo o seu SGA. Para isso use a fórmula abaixo.

Z = Y / X

Onde:
·      X: Tamanho do HugePage em KB (no caso do Linux será sempre 2048);
·      Y: Tamanho do seu SGA também em KB (se utilizar o valor do PFILE, divida por 1024);
·      Z: Quantidade de HugePages necessárias.
Obs.: Uma dica é sempre configurar um valor um pouco maior do informado na fórmula. Eu normalmente somo 8 no resultado encontrado.

Agora que você já sabe quanto de HugePages configurar, vamos colocar a mão na massa!


Servidor  - ha1

Achando o Hugepage

Para achar o valor de Hugepage pode ser utilizado 2 metodos, o metodo acima Z=Y/X acima setado ou metodo utilizado pelo script da Oracle, o qual vamos utilizar. ./hugepages_settings.sh o qual eu recomendo.

Para executar este script é necessário que a instancia esteja no ar, sem gerenciamento automático de memória.

Para executar o script e necessário que já tenha em mente o quanto de memória deseja usar:
 No meu caso eu tenho um servidor com 94G de memória mais vou configurar 35G.

35G de 94G.

35G  ---- ok

A instância oracle já deve ser configurada para 35G de SGA.

Configurando o kernel linux para 35G.

# Configurando para 35G    --- vi /etc/sysctl.conf

kernel.shmmax = 37580963840

# Controls the maximum number of shared memory segments, in pages  – pagesize = 4096

kernel.shmall = shmmax / pagesize   =>  37580963840 / 4096    .:

kernel.shmall =  9175040

oracle$ /sbin/sysctl -p          # carregarar os valores alterado nas variaveis



Configurando o Banco de Dados:

No Oracle o que deve ser feito é desabilitar o gerenciamento automático de memória (AMM).

Essa configuração não é requerida na versão 10g, apenas na 11g. Mas é recomendado que seja aplicada em ambos pois o ganho de performance pode ser significativo. Isso ocorre pois o gerenciamento automático de memória pode, em algumas situações, consumir muitos recursos e causar problemas de performance, dessa forma a recomendação geral é que utilize tamanhos pre-definidos para os pools no SGA.

Para desabilitar o AMM basta configurar o parâmetro abaixo para "0" com o seguinte comando:

                   SQL> alter system set sga_target=0 scope=spfile;
SQL> alter system set memory_max_target=0 scope=spfile;
SQL> alter system set memory_target=0 scope=spfile;
SQL> alter system set lock_sga=FALSE scope=spfile;


Configuração de Memória Manual.

De 35G separado para o Banco de Dados Oracle, os quais serão configurados para HUGEPAGES no sistema operacional, o Banco de Dados Oracle terá seu startup com  25G máximo, mais internamente seus outros parâmetros o deixará com 20G aproximadamente, podendo depois aumentar até os 25G

SQL> alter system set sga_max_size =25G scope=spfile;

sga_max_size                          big integer      25G
memory_max_target               big integer 0
memory_target                        big integer 0
sga_target                                big integer 0
lock_sga                                  boolean     FALSE




Quando se está configurado o Banco de Dados para gerenciamento de memória manual, é necessário setar os parâmetros abaixo:

SQL> alter system set pga_aggregate_target =3G scope=spfile;
SQL> alter system set db_cache_size =7424M scope=spfile;
SQL> alter system set shared_pool_size =7G scope=spfile;
SQL> alter system set Java_pool_size =832M scope=spfile;
SQL> alter system set streams_pool_size = 768M scope=spfile;
SQL> alter system set large_pool_size =1G scope=spfile;



pga_aggregate_target            big integer       3G
db_cache_size                        big integer       7424M
shared_pool_size                   big integer       7G
java_pool_size                       big integer       832M
log_buffer                              integer             69206016  ---- não alterar (default)
streams_pool_size                 big integer       768M
large_pool_size                      big integer      1G

log_buffer                              integer     69206016  --- valor default não alterar


Após isso será necessário reiniciar a instância para aplicar a configuração, pois trata-se de um parâmetro estático.

Os parâmetros foram setados para comportar dentro de um SGA de 25G, deixando uma folga para aumentos futuros, caso tenha que aumentar novamente, abaixo de 35G, basta setar uma valor superior para sga_max_size que seja abaixo de 35G e setar os outros parâmetros tal que não seja superior a SGA.

SQL> shutdown immediate
...
SQL> startup



Após colocar o banco em gerenciamento de memória manual, já podemos começar a configuração do HugePage na máquina.


Configurando o Linux

O primeiro passo é editar o arquivo /etc/security/limits.conf e definir a quantidade máxima de memória que o usuário oracle pode alocar:



oracle soft    memlock  xxxxxxx
 oracle hard    memlock  xxxxxxxx



Servidor - ha1


vi /etc/security/limits.conf

# Setando o memlock para 35G para um sga de 35G

oracle hard memlock 36700160
oracle soft memlock 36700160


[root@hall:~]# grep memlock /etc/security/limits.conf


# - memlock - max locked-in-memory address space (KB)

oracle hard memlock 36700160
oracle soft memlock 36700160
[root@hall:~]#



O passo seguinte  é editar o arquivo /etc/sysctl.conf e adicionar os seguintes parâmetros:

·      vm.nr_hugepages = <Número de HugePages>
·      vm.hugetlb_shm_group = <ID do grupo principal do usuário oracle>


Para verificar o ID do grupo principal do usuário oracle utilize o comando id:

# id oracle
uid=500(oracle) gid=501(oinstall) groups=501(oinstall),500(dba)

No exemplo acima o ID é 501.


Servidor - ha1

Com o banco de Dados no Ar e a base de dados estando configurado para gerenciamento de memória manual, podemos executar o script abaixo para achar o valor de HugePage configurados para 35G.

Logado como usuário oracle: execute o script - hugepages_settings.sh

oracle$ ./hugepages_settings.sh
This script is provided by Doc ID 401749.1 from My Oracle Support
 (http://support.oracle.com) where it is intended to compute values for
 the recommended HugePages/HugeTLB configuration for the current shared
 memory segments. Before proceeding with the execution please make sure
 that:
 * Oracle Database instance(s) are up and running
 * Oracle Database 11g Automatic Memory Management (AMM) is not setup
 (See Doc ID 749851.1)
 * The shared memory segments can be listed by command:
 # ipcs -m
Press Enter to proceed...
Recommended setting: vm.nr_hugepages = 12808
[root@hall:~]# id oracle

uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba),503(oper)
[root@hall:~]#

Grupo oracle  - 501


Abra o arquivo /etc/sysctl.conf e adicione as linhas abaixo:

vi /etc/sysctl.conf

vm.nr_hugepages = 12808
vm.hugetlb_shm_group=501

Depois de configurar esses parâmetros reinicie o S.O. para que as configurações entrem em vigor. Para validar use os seguintes comandos:


[root@hall:~]# cat /proc/meminfo
MemTotal:       99052404 kB
MemFree:         7265892 kB
Buffers:          730096 kB
Cached:         61531308 kB
SwapCached:            0 kB
Active:         27687168 kB
Inactive:       34843268 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      479612 kB
VmallocChunk:   34307793532 kB
HardwareCorrupted:     0 kB
AnonHugePages:     69632 kB
HugePages_Total:   12808 KB  ----- já não está mais zero
HugePages_Free:     6783 KB
HugePages_Rsvd:     6776 KB
HugePages_Surp:        0 KB
Hugepagesize:       2048 kB
DirectMap4k:        5604 kB
DirectMap2M:     2078720 kB
DirectMap1G:    98566144 kB
[root@hall:~]#

Verifique se o item de HugePages_Total está com o valor configurado.

Para validar o limite de alocação de memoria do usuário oracle, logue-se com ele e use o comando abaixo:


# ulimit -l

Verifique se o valor retornado é igual ao configurado.


Para Finalizar a configuração é necessário alterar o parâmetro kernel.shmall para o novo parâmetro onde o pagesize agora é 2M


shmax / pagesize = shmall ((35*1024)*1024)/2

# Como o tamanho da pagina agora e 2M pela configuracao do hugepage
# entao shmax / pagesize = shmall ((35*1024)*1024)/2

kernel.shmall = 18350080

Depois disso, baixe o banco de dados, e execute o comando abaixo para o novo parâmetro entrar em vigor, depois start a base de dados novamente.

* Shutdown banco de dados

execute  o comando como root.


/sbin/sysctl -p


* Startup no banco de dados.




            Para saber se o Oracle iniciou utilizando as páginas em HugePages utilize novamente o comando "cat /proc/meminfo" e verifique a diferença entre os valores dos itens HugePages_Total e HugePages_Free. Se o valor de free for menor que o de total a sua instância está utilizando os HugePages, caso contrário, valide novamente as configurações e reinicie novamente a instância Oracle.



Fazendo o arquivo hugepages_settings.sh

-

No sistema operacional crie um arquivo chamado hugepages_settings.sh e cole o seguinte conteúdo dentro dele.



#!/bin/bash
#
# hugepages_settings.sh
#
# Linux bash script to compute values for the
# recommended HugePages/HugeTLB configuration
#
# Note: This script does calculation for all shared memory
# segments available when the script is run, no matter it
# is an Oracle RDBMS shared memory segment or not.
#
# This script is provided by Doc ID 401749.1 from My Oracle Support
# http://support.oracle.com

# Welcome text
echo "
This script is provided by Doc ID 401749.1 from My Oracle Support
(http://support.oracle.com) where it is intended to compute values for
the recommended HugePages/HugeTLB configuration for the current shared
memory segments. Before proceeding with the execution please make sure
that:
 * Oracle Database instance(s) are up and running
 * Oracle Database 11g Automatic Memory Management (AMM) is not setup
   (See Doc ID 749851.1)
 * The shared memory segments can be listed by command:
     # ipcs -m

Press Enter to proceed..."

read

# Check for the kernel version
KERN=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'`

# Find out the HugePage size
HPG_SZ=`grep Hugepagesize /proc/meminfo | awk '{print $2}'`

# Initialize the counter
NUM_PG=0

# Cumulative number of pages required to handle the running shared memory segments
for SEG_BYTES in `ipcs -m | awk '{print $5}' | grep "[0-9][0-9]*"`
do
   MIN_PG=`echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q`
   if [ $MIN_PG -gt 0 ]; then
      NUM_PG=`echo "$NUM_PG+$MIN_PG+1" | bc -q`
   fi
done

RES_BYTES=`echo "$NUM_PG * $HPG_SZ * 1024" | bc -q`

# An SGA less than 100MB does not make sense
# Bail out if that is the case
if [ $RES_BYTES -lt 100000000 ]; then
   echo "***********"
   echo "** ERROR **"
   echo "***********"
   echo "Sorry! There are not enough total of shared memory segments allocated for
HugePages configuration. HugePages can only be used for shared memory segments
that you can list by command:

   # ipcs -m

of a size that can match an Oracle Database SGA. Please make sure that:
 * Oracle Database instance is up and running
 * Oracle Database 11g Automatic Memory Management (AMM) is not configured"
   exit 1
fi

# Finish with results
case $KERN in
   '2.4') HUGETLB_POOL=`echo "$NUM_PG*$HPG_SZ/1024" | bc -q`;
          echo "Recommended setting: vm.hugetlb_pool = $HUGETLB_POOL" ;;
   '2.6') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
    *) echo "Unrecognized kernel version $KERN. Exiting." ;;
esac

# End




O arquivo deve possuir permissão para execução;

rwxr-xr-x  1 root root  2428 Apr 20 11:08 hugepages_settings.sh




sexta-feira, 5 de dezembro de 2014

Agendando tarefas com o cron (crontab Linux)

O agendamento de tarefas é um recurso essencial em servidores. No Linux, o daemon responsável pela tarefa é o cron. Ele é o responsável por diversas funções executadas automaticamente na maioria das distribuições, tais como o rotacionamento dos logs e pode ser programado para executar operações diversas, tais como scripts de backup.

O arquivo principal de configuração é o “/etc/crontab” e o script responsável pelo serviço é o “/etc/init.d/cron” (ou “/etc/init.d/crond” no Fedora e no CentOS). A configuração do cron pode parecer indigesta à primeira vista, mas na verdade ela é bastante lógica e, dependendo do ponto de vista, até mesmo simples.

Você pode criar um agendamento simples adicionando a linha abaixo no final do arquivo:

* * * * * root date >> /tmp/testedata
 
Ela faz com que o sistema execute o comando “date >> /tmp/testedata” uma vez a cada minuto. O comando “date” mostra o horário atual do sistema e as duas setas direcionam a saída do comando para o arquivo especificado.

Depois de salvar o arquivo, você precisa apenas esperar um minuto ou dois e verificar o conteúdo do arquivo para checar se o agendamento está funcionando. Ele conterá várias linhas com a saída do comando, como em:

Qui Jun 19 04:36:38 BRT 2008
Qui Jun 19 04:36:39 BRT 2008
 
O cron checa o conteúdo do arquivo uma vez a cada minuto, de forma que não é necessário reiniciar o serviço para que a alteração entre em vigor. Para desativar o agendamento, basta remover ou comentar a linha.

Os cinco campos separados por espaço no início da linha permitem definir o horário ou a periodicidade em que uma determinada tarefa será executada. O primeiro campo especifica os minutos, o segundo especifica as horas, o terceiro especifica o dia, o quarto o mês e o quinto especifica o dia da semana. A princípio essa designação parece muito confusa, mas na verdade ela é bastante prática.

Para que o comando fosse executado todos os dias às 6:20 da manhã, usaríamos:

20 06 * * * root date >> /tmp/testedata
 
Os dois campos especificam a hora, como você pode ver. Os outros três (dia, mês e dia da semana) permanecem com o asterisco, o que faz com que o comando seja executado todos os dias. Se a idéia fosse fazer com que ele fosse executado nessa mesma hora, mas apenas aos domingos (imagine o caso de um script de backup que precisasse desativar temporariamente o banco de dados, deixando o servidor fora do ar, por exemplo), você usaria:

20 06 * * 0 root /usr/local/bin/script-de-backup
 
Veja que agora usamos o número 0 no último campo, que indica o dia da semana. Na sintaxe do cron, os dias da semana são numerados de 0 a 6, onde o “0” representa o domingo e o “6” o sábado.


É possível também especificar mais de um valor em um mesmo campo, fazendo com que o script seja executado duas vezes por dia, ou duas vezes por semana, sem precisar incluir duas linhas diferentes. Se deseja que um script seja executado tanto aos domingos quanto às quartas-feiras, sempre às 4:00 da manhã, você usaria:

00 04 * * 0,3 root /usr/local/bin/script-de-backup
 
A vírgula no campo do dia da semana permite especificar mais de um valor, ela é interpretada pelo cron como um “e”, de forma que “0,3” é lido como “aos domingos e às quartas feiras”.

É possível também usar a “/” para indicar um período. Para fazer com que o script seja executado a cada 5 minutos, você usaria:

*/5 * * * * root /usr/local/bin/verificar-servidor
 
O mesmo pode ser feito para os demais campos. Para que o script fosse executado a cada 3 horas (1:15, 4:15, 7:15, etc.), por exemplo, você usaria:

15 */3 * * * root /usr/local/bin/verificar-servidor
 
Continuando, temos os campos com o dia e o mês. Para executar um script às 6:20 da manhã, no primeiro dia de cada mês, você usaria:

00 06 1 * * root /usr/local/bin/gerar-folha-de-pagamento
 
Para executar apenas no dia primeiro de janeiro, uma vez por ano, usaria:

00 06 1 * * root /usr/local/bin/feliz-ano-novo
 
O cron executa a tarefa apenas se todas as condições especificados nos campos sejam satisfeitas. Isso permite especificar condições bastante específicas. Para executar um comando às 00:15 toda vez que uma sexta feira cair no dia 13 (imagine que você seja supersticioso e queira fazer um backup extra, por exemplo :), você usaria:

15 00 13 * 5 root /usr/local/bin/backup-extra
 
Naturalmente, você pode também fazer com que os scripts sejam executados usando outros logins de usuário em vez do root, o que é o ideal do ponto de vista da segurança. Para isso, basta substituir o “root” pelo login desejado. Com isso, o script é executado dentro das permissões do usuário, o que limita qualquer possível dano ou brecha de segurança que possa ser aberta pelo script.
Em quase todas as distribuições atuais, o arquivo “/etc/crontab” vem pré-configurado para que o sistema execute os scripts incluídos nas pastas “/etc/cron.hourly”, “/etc/cron.daily”, “/etc/cron.weekly” e “/etc/cron.monthly”, executados, respectivamente, uma vez a cada hora, dia, semana e mês:

01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
 
Esta configuração facilita o agendamento de tarefas, já que para fazer com que um script seja executado todos os dias, por exemplo, você precisa apenas colocá-lo dentro da pasta “/etc/cron.daily”. Olhando o conteúdo da pasta, você notará a presença de diversos scripts de manutenção do sistema, como o logrotate, encarregado de rotacionar e compactar os arquivos de log, evitando que eles cresçam indefinidamente.

Os scripts incluídos na programação do cron são arquivos de texto simples, contendo os comandos que você deseja que sejam executados. Aqui temos um exemplo de script simples de backup, que usa o rsync para salvar uma cópia do conteúdo da partição “/var/www” na pasta “/mnt/sdb1″, que corresponderia a um HD separado, salvando a saída do comando, em um arquivo de texto, que você pode examinar posteriormente em busca de erros:
 
#! /bin/sh
/usr/bin/rsync -av –delete /var/www/ /mnt/sdb1 >> /var/log/backup-www.log

Para que o script fosse executado todos os dias, você precisaria apenas copiá-lo para a pasta “/etc/cron.daily” e marcar a permissão de execução (chmod +x). Outra opção seria simplesmente adicionar uma nova linha no arquivo “/etc/crontab“, especificando a hora em que você deseja que ele seja executado.

quinta-feira, 13 de novembro de 2014

Passo para criar um Ambiente de treinamento, aprendizagem e Laboratório Oracle ( ORACLE APPLIANCE )


Bom aqui está o Appliance que eu cheguei a comentar no final do post da instalação do VirtualBox.

Este appliance possui um Oracle Linux configurado já com um  Oracle Database 12c configurado no mesmo, possibilitando aprender melhor a ferramenta da Oracle.

 Estarei descrevendo como podemos criar um pequeno Laboratório de Treinamento e Aprendizagem de algumas ferramentas da Oracle.

 Eu cheguei a postar anteriormente como fazer a instalação do Virtual Box, sendo necessário para este procedimento.

       Esse Appliance é indicar para montar laboratórios para aprender mais sobre Oracle Database, SQL Developer e outras ferramentas relacionadas. Irei explicar, o que contém este appliance e quais são os pré-requisitos para efetuar a sua importação. No final, apresentarei um roteiro passo a passo de como importá-lo.
 
       Para utilizar a máquina virtual que vou indicar, é necessário instalar préviamente o software Oracle VM Virtual Box. Para efetuar a sua instalação, leia o artigo Instalando o Oracle VM Virtual Box.  
 
    
      O appliance que compartilharei com vocês, conhecido como Oracle Technology Network Developer Day - Database Application Development Hands On Labs, contém os seguintes softwares pré-configurados:
       
        - Oracle Linux 5;
        - Oracle Database 12c Release 1 Enterprise Edition;
        - Oracle TimesTen In-Memory Database Cache;
        - Oracle XML DB;
        - Oracle SQL Developer;
        - Oracle SQL Developer Data Modeler;
        - Oracle Application Express;
        - Oracle JDeveloper;
        - Hands-On-Labs.
     Os requisitos de hardware e sistema operacional para importá-lo são:
          - 2 GB RAM;
          - 15 GB de espaço livre em disco;
          - Processador de 2 GHz (mínimo recomendável);
          - Privilégios de administrador para o usuário do SO.

     O appliance foi disponibilizado pela Oracle para fins de testes e uso pessoal. Sugiro que você leia atentamente o termos e condições da licença de uso (que podem ser consultados durante o processo de importação) antes de utilizar os softwares da máquina virtual.
 
     Segue abaixo o roteiro passo a passo do processo de importação:



1. Passo a passo da Importação do Appliance

1.1 Faça um download do arquivo Oracle_DB_Developer_VM_new.ova, seu tamanho é de aproximadamente de 5,6G.

 Para baixá-lo é necessário ter uma conta oracle, caso não possua crie uma na página iniciar sessão na opção Criar Conta.

O link abaixo redireciona para a página de download,

http://www.oracle.com/technetwork/database/enterprise-edition/databaseappdev-vm-161299.html


Ao clicar no link acima você será redirecionado para a página abaixo, até o dia de hoje 13.11.14 a versão do Oracle era 12c Release 12.1.0.2, pode ser que em um certo momento o link possa leva-lo para um versão superior a esta.


Clique na opção Accept License Agreement, onde você concorda com os termos da licença e habilita o link do arquivo para ser abaixado.




















Ao clicar no Oracle_DB_Developer_VM_new.ova você será redirecionado para página onde você
deve autenticar com um conta Oracle, caso você não possua clique em Criar Conta (grátis)























Logo após autenticar, será mostrada a tela de opção de download, a oracle recomenda que você tenha
um programa de gerenciamento de download devido ao tamanho do arquivo, caso você possua um bom link de internet isso não será problema.






Com o arquivo já baixado do site da Oracle, abra o Virtual Box. Vá em Arquivo e selecione Importar Appliance.
























Selecione o Arquivo baixado e clique em Próximo.






























Será mostrado as configurações do appliance que está sendo importado,  clique em Importar






























Será mostrado um termo de Acordo de Licença de Uso de Software, clique em Concordo.



































Será mostrado o status da importação













Em algum momento será mostrado a tela abaixo, deixe conforme abaixo e clique em Permitir Acesso.


Após o termino da importação você já pode utilizar a máquina virtual recém importada.
Selecione a máquina e clique em Iniciar.



Todos os acessos são feito através da senha oracle




  1. Deseja acessar o Sistema Operacional como root / oracle,  senha oracle.
  2. Todos os usuário do Banco de Dados possuem senha oracle.













quinta-feira, 6 de novembro de 2014

Automatizando startup e shutdown do Oracle 11g R2 no CentOS


Neste artigo será apresentado como automatizar o startup e o shutdown do banco de dados Oracle 11g R2 x86_64 instalado no CentOS x86_64. A automatização será feita através de um script bash que tornará todo o processo simples, seguro, além de não necessitar de nenhuma intervenção humana.

Colocar o Banco de dados para Inicializar automaticamente é uma boa opção para evitar dores de cabeça, principalmente quando se ocorre algo inesperado e o sistema não pode ficar fora.
Automatizar processos manuais e repetitivos é uma forma de maximizar o tempo.
A automatização do processo é muito útil em ambientes 24×7 (24 horas por dia e 7 dias por semana). Implementar o startup automático pode evitar que você tenha que ir até a empresa de madrugada para iniciar o banco devido um pico de energia, neste caso, continue dormindo, pois ao reiniciar a máquina, o banco estará de pé novamente.
Descanse bem, pois logo de manhã talvez você precise fazer um recovery, ou se tiver sorte, o próprio Oracle vai se recuperar da queda.

O startup automático iniciará os processos na seguinte ordem:
   
    Listener
    Oracle Database
    Oracle Enterprise Manager

Caso em sua instalação você não utilize Oracle Enterprise Manager, basta comentar a linha no script dbora.

O shutdown automático finalizará os processos na seguinte ordem:
  
   Oracle Enterprise Manager
    Listener
    Oracle Database

Caso em sua instalação você não utilize Oracle Enterprise Manager, basta comentar a linha no script dbora.

Na própria instalação do Oracle é disponibilizado 2 scripts: um para startup e outro para shutdown, são eles: $ORACLE_HOME/bin/dbstart e $ORACLE_HOME/bin/dbshut.
Esses dois scripts trabalham junto com o arquivo /etc/oratab.
O arquivo oratab é responsável por definir quais instâncias serão inicializadas e finalizadas pelos scripts dbstart e dbshut. O oratab é composto por entradas que seguem o seguinte padrão:

$ORACLE_SID:$ORACLE_HOME:<N|Y>


$ORACLE_SID =>  instância
$ORACLE_HOME => diretório home do banco
<N|Y>  defini se será (Y) ou não (N) utilizado nos scripts dbstart e dbshut.

Para automatizar o processo siga os passos:

1- Editar o arquivo /etc/oratab, definindo Y para as instâncias que serão automatizadas:


vi /etc/oratab

Arquivo /etc/oratab:
#
# This file is used by ORACLE utilities.  It is created by root.sh
# and updated by the Database Configuration Assistant when creating
# a database.
# A colon, ':', is used as the field terminator.  A new line terminates
# the entry.  Lines beginning with a pound sign, '#', are comments.
#
# Entries are of the form:
#   $ORACLE_SID:$ORACLE_HOME:<N|Y>:
#
# The first and second fields are the system identifier and home
# directory of the database respectively.  The third filed indicates
# to the dbstart utility that the database should , "Y", or should not,
# "N", be brought up at system boot time.
#
# Multiple entries with the same $ORACLE_SID are not allowed.
#
#
ha1:/u01/app/oracle/product/11.2.0/db_1:Y








2 - Criar o script /etc/init.d/dbora:


[root@ha1 ~]# vi /etc/init.d/dbora




Script /etc/init.d/dbora:
#!/bin/bash
# script: dbora
# autor: Marcio Rocha
# chkconfig: 35 99 10
# description: startup/shutdown listener, oracle database and enterprise manager

ORA_HOME=/u01/app/oracle/product/11.2.0/db_1
ORA_OWNER=oracle
start(){
   echo "Starting..."
   su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart $ORA_HOME"
   su - $ORA_OWNER -c "$ORA_HOME/bin/emctl start dbconsole"
   touch /var/lock/subsys/dbora
}
stop(){
   echo "Stopping..."
   su - $ORA_OWNER -c "$ORA_HOME/bin/emctl stop dbconsole"
   su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut $ORA_HOME"
   rm -f /var/lock/subsys/dbora
}
restart(){
   stop
   start
}
usage(){
   echo "usage: $0 {start|stop|restart}"
}
if [ `id -u` -ne 0 ]
then
   echo "Este script deve ser executado como root"
   exit
fi
case $1 in
   'start') start;;
   'stop') stop;;
   'restart') restart;;
   *) usage;;
esac


 3-   Defina a permissão para script /etc/init.d/dbora:

[root@ha1 ~]# chmod 755 /etc/init.d/dbora

Registre o serviço:

[root@ha1 ~]# chkconfig --add dbora

Caso necessite fazer o startup e shutdown de forma manual, utilize o usuário root.

A sintaxe do script dbora é a seguinte:

[root@ha1 ~]# /etc/init.d/dbora

usage: /etc/init.d/dbora {start|stop|restart}


Para finalizar, algumas considerações sobre o script /etc/init.d/dbora.

O script dbora é basicamente uma chamada para os outros dois scripts $ORACLE_HOME/bin/dbstart e $ORACLE_HOME/bin/dbshut com mais alguns recursos.
Foi implementado o startup e shutdown do Oracle Enterprise Manager. O script dbora possui três opções: start, stop e restart. O restart nada mais é que a chamada do stop seguido do start.

domingo, 2 de novembro de 2014

Instalação do VirtualBox da Oracle

Bom, hoje vou falar sobre a instalação do VirtualBox, um VM da Oracle mais apropriado para desktop.

Sua instalação é bem simples e não requer conhecimento avançado, estou querendo postar está informação para poder ajudar os novos e pretendente a DBAs, passarei boas dicas para os que estão começando e não possui uma base para iniciar.

Essa ferramenta da Oracle é muito boa para nos auxiliar na criação de um pequeno laboratório de aprendizagem.

Você deve possuir uma boa máquina se pretende criar um laboratório para aprendizagem, eu estou falando isso, porque caso você queira criar varias máquinas virtuais é necessário que você tenha uma boa quantidade de memória, espaço em HD e se possível um ótimo processador.

Eu possuo um notebook com uma configuração acho que bastante satisfatória.

*  8GB de memória
*  1TB de HD
*  Processador Intel Core i5
*  Windows 7

Você não precisa possuir uma configuração dessa, mais possuir uma boa máquina ajuda bastante.


Então vamos lá... Primeiro vamos baixar o software do VirtualBox, sempre baixe o mais atualizado.

Eu aconselho para os que estão começando criar um conta de login na Oracle para poder baixar
os software disponibilizado pela Oracle.

https://login.oracle.com/mysso/signon.jsp


Caso você já possua um login... ótimo! Baixar software no site da Oracle é necessário que você possua uma conta para ser autenticado e assim efetuar o download.


Links:

https://www.virtualbox.org/wiki/Downloads   ---- não precisa de login.







site Oracle

http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html







Acessando qualquer um dos links, precisamos baixar 2 arquivos.


* Oracle VM VirtualBox
* Oracle VM VirtualBox Extension Pack

Baixe a versão mais recente e também a compatível com seu sistema operacional.

No dia da postagem o mais recente  para windows era o arquivo VirtualBox-4.3.18-96516-Win.exe e o Oracle_VM_VirtualBox_Extension_Pack-4.3.18-96516.vbox-extpack.



Em posse dos 2 arquivos execute o VirtualBox-4.3.18-96516-Win.exe.





Clique em Executar.




Clique em next.






Clique em next.




Clique em next.





Clique em yes para instalar network interfaces.




Clique em Install para Instalar.







Instalando o virtualbox.







No meio do processo de instalação deve aparecer algumas telas parecida com a debaixo, selecione sempre confiar em sofware da Oracle Corporation.  Esta relacionado ao dispositivo de rede e usb.





Clique em Finish para finalizar a instalação.



Tela do VirtualBox após sua instalação.







Bom a instalação é essa, não possui mistério em nem bicho de sete cabeça, coisa de criança.


Estarei postando um post sobre como adicionar um Banco de Dados Oracle, já pré-configurado, disponibilizado pela  própria Oracle. Seu intuito é para aprendizagem e conhecimento de seu software.

Estou falando do Appliance da Oracle, uma máquina já pré-configurada onde os novos aventureiros do Oracle podem dar seus primeiros passos.