sexta-feira, 8 de agosto de 2014

Instalação do Oracle Linux para Banco de dados Oracle

É unânime nos Benchmark de comparativos entre Windows e Linux como S.O para Banco de Dados Oracle, que o Linux é melhor em desempenho. Apesar do ambiente Windows simplificar as tarefas de administração e atender muito bem vários clientes, fatalmente quando for administrar um grande banco de dados é o ambiente Linux que teremos que administrar.

Este é o primeiro artigo de uma série que pretendo escrever de Oracle em ambiente Linux, neste primeiro momento será mostrado como instalar e deixar preparado o S.O "Oracle Linux. No próximo será mostrado a instalação do Oracle em ambiente Linux.

A instalação será em um ambiente virtualizado, e sem mais delongas, vamos ao passo a passo para instalar o Oracle Linux 6.5 64 Bits.

1 - Ao iniciar o instalador, escolha a 1º opção para instalar e o iniciar a instalação do S.O, click  em "SKIP" para pular a validação do disco.




2 - Selecione o idioma, por padrão escolha inglês, vá em “Basic Storage Devices" para usar os discos locais da maquina,





3-Click em NEXT e escolha a opção “Fresh Installation”



4 - Depois seleciona o local – neste exemplo Cuiabá-MT; Brasil – click em “Create Custom Layout” para customizar as partições de discos.


5-Na área de customização, exclua todas as partições sugeridas, então click em “Create” para customizar o layout

6-Crie crie as partições, “/Boot” com 512 mega, este apenas para iniciar a maquina. A área de Swap com o mesmo tamanho da memória principal, neste exemplo 2Gb.
Como o disco é de 40Gb (em ambiente real isso é muito pouco), o “/” que é o Raiz é criado com 10Gb e os demais - cerca de 28GB - é a partição “/u01” para os binários e o Banco de dados Oracle.


7-Depois de configurar, escolha a opção de escrever no disco e feito isso, aceite as opções de inicialização do S.O

8 - Na configuração do S.O, seleciona o BASIC SERVER e marque a opção “Customize Now” para instalar os pacotes necessários para a versão do Oracle DataBase

9-Instale os pacotes conforme as imagens posteriores:






10-Depois basta instalar o S.O.


11-Configure as informações de Rede inserindo o IP, Gateway e DNS.  Abaixo tem um exemplo, mas estas informações deve atender a Rede onde Oracle está operando.


12-Desabilite o FireWall, recomendado pela Oracle - O Firewall deve estar a nivel de Rede e não do Host.

13- Agora é possivel acessar remotamente o Linux usando o PUTTY, sendo também a maneira mais acessada a partir de uma maquina windows. Use Xming na maquina Windows, isso irar permitir que a parte gráfica seja enviada para a maquina Windows no PUTTY de comando Linux.

14-Configure SELINUX :

[root@LXAGNUS ~]# vi /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing – SELinux security policy is enforced.
#       permissive – SELinux prints warnings instead of enforcing.
#       disabled – SELinux is fully disabled.
SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
#       targeted – Only targeted network daemons are protected.
#       strict – Full SELinux protection.
SELINUXTYPE=targeted

15- Desabilitar os serviços desnecessários. Deve-se ativar o xMing (Windows)

[root@LXAGNUS ~]# system-config-services
AVAHI-DAEMON, BLUETOOTH, IP6TABLES, IPTABLES, MULTIPATHD, RHNSD,


16-Monte o disco de instalação do Oracle Linux 6.5

[root@LXAGNUS ~]# mount /dev/cdrom /mnt

17- Crie um diretório de repositório dos pacotes locais Linux, isso para não precisar pegar da NET, uma vez que foi realizada a cópia a partir da imagem do DVD. Copie os pacotes que estão no Disco do S.O para o diretório criado.

[root@LXAGNUS ~]# mkdir -p /root/stage/rpms
[root@LXAGNUS ~]# cd /mnt/Packages/
[root@LXAGNUS Packages]# cp * /root/stage/rpms/
[root@LXAGNUS Packages]# cd ..
[root@LXAGNUS mnt]# cp RPM-GPG-KEY-oracle /root/stage/rpms/
[root@LXAGNUS mnt]#  cd /mnt/Packages/
[root@LXAGNUS Packages]# cp oracle-rdbms-server-11gR2-preinstall-1.0-7.el6.x86_64.rpm /root/stage/rpms/

18-Vá para pasta onde tem os pacotes copiados

[root@LXAGNUS Packages]# cd /root/stage/rpms/

19-Instalar o pacote CreateRepo, com suas dependências.

[root@LXAGNUS rpms]# rpm -ivh createrepo-0.9.9-18.0.1.el6.noarch.rpm python-deltarpm-3.5-0.5.20090913git.el6.x86_64.rpm deltarpm-3.5-0.5.20090913git.el6.x86_64.rpm
warning: createrepo-0.9.9-18.0.1.el6.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
Preparing...                ########################################### [100%]
   1:deltarpm               ########################################### [ 33%]
   2:python-deltarpm        ########################################### [ 67%]
   3:createrepo             ########################################### [100%]
[root@LXAGNUS rpms]#

[root@LXAGNUS rpms]# createrepo -v /root/stage/rpms

20-Crie uma nova entrada no arquivo de repositório YUM e marque como 0 os gpgcheck e enabled as outras entradas.

[root@LXAGNUS rpms]# cd /etc/yum.repos.d/
[root@LXAGNUS yum.repos.d]# cd /etc/yum.repos.d/
[root@LXAGNUS yum.repos.d]# vi public-yum-ol6.repo

[local_ol65_UEK]
name=Unbreakable Enterprise Kernel for Oracle Linux 65
baseurl=file:///root/stage/rpms
gpgkey=file:///root/stage/rpms/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1

21 - Atualize o catalogo do YUM

[root@LXAGNUS yum.repos.d]# yum clean all
[root@LXAGNUS yum.repos.d]# yum repolist

22-Adicionar os comandos abaixo no arquivo  /etc/profile

if [ $USER = "oracle" ]; then
if [ $SHELL = "bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi

23-Adicione o nome da maquina no arquivo de hosts do Linux

[root@OLXAGNUS yum.repos.d]# vi /etc/hosts
[root@OLXAGNUS yum.repos.d]# more /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.91.131 OLXAGNUS

24-INSTALAR O PACOTE DE PRÉ-CONFIGURAÇÃO DO ORACLE 11GR2

[root@OLXAGNUS yum.repos.d]# yum install oracle-rdbms-server-11gR2-preinstall


Pronto, seu Linux já esta pronto para instalar o Oracle, pois todo o processo de criar usuario Oracle e grupo e ainda já temos os parametros do kernel já configurado. 

No próximo artigo vamos instalar o Oracle no Linux.

segunda-feira, 28 de julho de 2014

Criando um Banco de Teste D-1


Quantas vezes um DBA precisou criar um mais um Banco de Dados de teste ou atualizar os dados deste a partir de produção, pois os desenvolvedores não consegue realizar seus testes no Banco de Dados de teste, porque este encontra-se muito defasado com de Produção.

E comum em muitos sistemas, tem periodos onde é realizada várias atividade que identifica que mudou o periodo. E infelizmente para os desenvolvedores o banco de dados de teste encontra-se com os dados do periodo anterior. Pode acontecer algum erro na base de produção e a equipe de desenvovimento/suporte não conseguir reproduzir o mesmo justamente por falta de dados.

Este artigo, visa justamente atender essa situação, é a criação de um banco de dados que terá os dados de apenas um dia de atraso, Por isso o nome D -1.

A idéia e ter um banco de todos os dias ele realizar um DROP no Banco de Dados e faz um Restore a partir do Backup de Produção.

Os passos são praticamente os mesmos da segunda parte do artigo "Backup & Recovery Parte 3 - Recuperação Incompleta" que é o tópico "Restaurando o Banco de Dados em Outro Servidor". Contudo naquele artigo foi apresentado passos que precisava da intervesão manual do DBA, neste artigo, no final dele, é resultar em um script que o processo será totalmente automático. E ainda neste exemplo para ilustração os diretorios de restauração será diferente, pois em um ambiente real isto pode perfeitamente acontecer.

Vale lembrar que para realizar este processo é preciso que o Banco de Produção esteja configurado para fazer Backup em Rede, como demostrado em "Backup & Recovery Parte 1 - Configurando o Banco Recuperação" e é interessante tem lidos os três artigos de Backup e Recovery.

Além disso é preciso realizar a configuração de AutoBackup do ControlFile em um diretorio da Rede, passo este que não apresentei nos artigos anteriores.

O resumo da operá consite basicamente :

   * DROPAR o Banco PROD D-1
   * Resturar o ControlFile
   * Resturar os DataFiles
   * Recuperar os DataFiles
   * Abrir o Banco de Dados com ResetLog's

Configurar o Banco de Produção Para AutoBackup do ControlFile

Logue no Rman, confirme os parametros, altere os parametros necessários e obtenha o DBID do banco de dados.

C:\>set oracle_sid=bdprod

C:\>rman target sys nocatalog

Gerenciador de Recuperação: Release 11.2.0.1.0 - Production on Seg Jul 28 16:30: 05 2014

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Senha do banco de dados de destino:
conectado ao banco de dados de destino: BDPROD (DBID=3924117592)
usar o arquivo de controle do banco de dados de destino em vez do catálogo de recuperação



RMAN> show all;
Os parâmetros de configuração de RMAN para o banco de dados com db_unique_name BDPROD são:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F';
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'D:\APP\C8757887\PRODUCT\11.2.0\DBHOME_1\DATABASE\SNCFBDAGNUS.ORA'; # default


RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '\\172.16.1.21\BCK_ORACLE\AUTOBACKUP\CF_%F';

Agora toda vez que o Banco de dados realizar o Backup, uma cópia do controlfile é feito no diretório de Rede compartilhado.

            Criandos os Script de Recriação do Banco de Teste.


Serão criados 5 arquivos, sendo 1 script CMD que pode ser chamado via agendador de tarefa e os demais contem tarefas especificas para cada passo da atualização.

1) Cria o arquivo CMD
Crie um arquivo com o nome "AtualizaBancoTESTE.cmd" (sugestão) e digite os comandos para invocar os arquivos/scripts que serão criados.

sqlplus sys/senhasecreta as sysdba @DropDataBase.txt
sqlplus sys/senhasecreta as sysdba @inicia_nomount.txt
rman target sys/senhasecreta nocatalog @ScriptRecover.txt
sqlplus sys/senhasecreta as sysdba @AbreBanco.txt

2)Criar o Arquivo DropDataBase.txt;

create pfile=C:\initBDPROD.ora' from spfile;
Shutdown immediate;
startup mount restrict pfile='C:\initBDPROD.ora';
drop database;

exit;

3)Criar o inicia_nomount.txt

startup nomount pfile='C:\initBDPROD.ora';

exit;

4) Criar o script ScriptRecover.txt.

Neste script deve ser informado o DBID do banco de dados de Produção e também o local onde está sendo feito o backup do controlfile.

Não será possivel realizar um restore completo, pois não temos o RedoLog, por isso setamos um restore incompleto, neste exemplo de 4 horas atras da atual.

Use o parametro DB_CREATE_FILE_DEST para indicar o diretorio onde deseja restaurar o banco de dados e comando " switch datafile all" para que o Oracle edite o controlfile com a nova localização.  

O script ficará assim:
run {
  set dbid=3924117592; 
  set controlfile autobackup format for device type disk to '\\172.16.1.21\BCK_ORACLE\AUTOBACKUP\CF_%F';';
  restore controlfile from autobackup;
  alter database mount;
  crosscheck backup;
  delete expired backup;
  set until time 'SYSDATE - 4/24';
  sql 'ALTER SYSTEM SET DB_CREATE_FILE_DEST="C:\app\ADMINISTRADOR\oradata"';
  set newname for database to NEW;
  restore database;
  switch datafile all;
  recover database;

   }

5)O ultimo passo é criar o AbreBanco.txt;
Neste arquivo você deve renomear os RedoLog para um diretorio válido do servidor de teste, recriar-los com Resetlogs e então para o modo Archivelog (o Banco de Teste não deve faze-lo).


alter database rename file 'D:\APP\ADMINISTRATOR\ORADATA\BDPROD\REDO01.LOG' to 'C:\app\ADMINISTRADOR\oradata\BDPROD\ONLINELOG\REDO01.LOG';
alter database rename file 'D:\APP\ADMINISTRATOR\ORADATA\BDPROD\REDO02.LOG' to 'C:\app\ADMINISTRADOR\oradata\BDPROD\ONLINELOG\REDO02.LOG';
alter database rename file 'D:\APP\ADMINISTRATOR\ORADATA\BDPROD\REDO03.LOG' to 'C:\app\ADMINISTRADOR\oradata\BDPROD\ONLINELOG\REDO03.LOG';
alter database open resetlogs;
shutdown immediate;
startup mount;
alter database noarchivelog;
alter database open;
create spfile from pfile='C:\initBDPROD.ora'';
alter system set log_archive_dest_1='' scope=spfile;
alter system set log_archive_dest_2='' scope=spfile;
shutdown immediate;
startup;
exit;

Pronto, agora toda vez que precisar do banco de teste atualizado basta executar o script. Caso precise de D-1 basta somente colocar no agendador de tarefa.

Até a próxima.



















quarta-feira, 12 de fevereiro de 2014

Enviar e-mail usando Oracle com G-mail.


   Muitas empresas estão usando os servidores de e-mail externo como o G-mail para uso de correios eletrônicos ao invés de montarem servidores para esta finalidade, isto reduz o custo de T.I.

   Ocorre que ao realizar esta mudança, pode acontecer que o sistema que enviava e-mail normalmente com o servidor SMTP local possa não mais funcionar, a razão é que o gmail exige conexão autenticada segura (preferencialmente via protocolo TLS) .

   Este foi o caso em que uma aplicação de um cliente mandava e-mail usando os pacote PL/SQL de envio de e-mail, e depois de usarem o g-mail a aplicação - mais especificamente o Oracle - não consegui mais enviar e-mail.

  Para criar uma conexão segura é preciso esta usando no mínimo o Oracle na versão 11.2.0.2 e além disso não esta disponível na versão XE. Sendo preciso criar um Oracle Wallet, como discorrido em http://arkatec.wordpress.com/2011/08/15/sending-email-using-oracle-database-and-google-mail-service/ .

   Supondo que a versão do Oracle seja inferior ou que a edição seja Express Edition, neste caso ainda podemos enviar e-mail pelo g-mail, mas usando o emailrelay, e é isto que quero mostrar neste artigo, para referência que possa ajudar que passar pelo mesmo problema, além disso servir como documentação para mim, caso preciso fazer isso em mais servidores.  O cenário aqui apresentado é um servidor Windows Server 2008.

1 - Baixe o programa emailrelay e mande instalar o mesmo
1.1 - Na primeira Janela vem com as informações do programa, click em Next>
1.2 - Depois a licença, marque a opção de aceitar a licença e click em Next>
1.3 - A próxima janela mostra o diretório onde será instalado além do Spool e configuração. Aceite o padrão e click em Next>
1.4 - Em Tipo de Instalação marque o SMTP Server e depois escolha a opção "Check periodically" e
1.5 - Na próxima janela configure com a informação do seu G-mail. Em HostName digite smtp.gmail.com e na Port 587 e na parte "Account" coloque a informação do seu e-mail com Login no editor Name e a Senha no editor PassWord; Click em Next>
1.6 - Nas demais janelas aceite as opções padrões e click em Next> para terminar a instalação.

2 - Depois de instalado será preciso alterar o arquivo de configuração para o G-mail, o arquivo é o
emailrelay-star.bat e ele vai estar no caminho de instalação (passo 1.3), mas normalmente esta em c:\arquivos de programa\emailrelay;

2.1 Altere o arquivo como no exemplo abaixo;

 "C:\Arquivos de programas\emailrelay\emailrelay.exe" --as-proxy smtp.gmail.com:587 --client-tls --client-auth "C:\Arquivos de programas\emailrelay\emailrelay.auth" --log --pid-file "C:\Arquivos de programas\emailrelay\emailrelay.pid" --poll 60 --remote-clients --spool-dir C:\Windows\spool\emailrelay --syslog --verbose

2.2 Abre o arquivo emailrelay.auth e confirme que o Login e a Senha estão corretos.

3 -  Pelo CMD vá no diretório de instalação do E-mail relay e digite emailrelay-service.exe -install para criar o serviço no Windows.

3.1 Depois entre no serviço do Windows (Iniciar -> Executar -> Services.msc) e inicie o serviço caso ainda não esta inicializado.


Agora vamos no Oracle realizar alguns ajustes.

1 - Com usuário SYS altere o parâmetro SMTP_OUT_SERVER

     SQL>ALTER SYSTEM SET SMTP_OUT_SERVER='localhost' SCOPE=SPFILE;

2-Então Reinicie a instância Oracle.

3- Então pode usar diretamente o UTL_MAIL ou o UTL_SMPT;
3.1 Usando o UTL_MAIL, instale o pacote caso não exista;
SQL> @?/rdbms\admin\utlmail.sql;
SQL> @?/rdbms\admin\prvtmail.plb

E chame o pacote de enviar e-mail como no exemplo abaixo:
 
UTL_MAIL.send(sender     => 'My Name "<ale.lucio.cordeiro@gmail.com>"',
              recipients => 'destino@gmail.com',

              subject    => 'Teste',
              message    => 'Bom trabalho!');


3.2 Caso esteja usando o pacote UTL_SMPT, basta informar localhost  na conexão e retirar a parte de autenticação

Parte que precisa ser retirado

utl_smtp.command(mail_conn, 'AUTH LOGIN');
utl_smtp.command(mail_conn,
utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(v_usuario))));
utl_smtp.command(mail_conn,
utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(p_senha))));
 
 
OBS; Caso ocorra o erro SMTP permanent error: 553 verifique se você respeitou o uso das aspas simples e dupla além dos <> entre o endereço de e-mail, coloque como no exemplo supracitado.
 
Pronto, o Oracle já consegue enviar e-mail pelo G-mail;
 
Espero ter ajudado.