Oracle Data Guard 11g com VirtualBox – Parte 2
janeiro 30, 2013

Introdução

Parte 1

Parte 2

Parte 3

Parte 4

Parte 5

Parte 6

Na primeira parte da nossa série, foi criada a máquina virtual chamada de “DB Primary”, ela será nosso Primary Database (está lembrado?). Temos somente o Oracle Linux instalado nessa máquina, precisamos hoje criar as configurações do pré-requisitos e instalarmos o Oracle Database 11g nessa máquina.

Após essa máquina virtual está totalmente configurada e instalada, iremos criar um clone desse disco para a criação do Dataguard Database, mais isso faremos juntos na parte 3.

Hoje nossa missão é realizar os pré requisitos e instalar o Oracle Database 11gR2, para isso tenha em mãos o binário de instalação do Oracle 11g R2. Vou utilizar aqui a versão 11.2.0.3, porém fica a seu critério que release 11g R2 utilizar.

Com a máquina virtual ligada, clique no disco vazio que fica na barra de status da VM (veja o marco em vermelho).

Após ter clicado, irá mostrar os discos ISO disponíveis, provavelmente o Oracle Linux estará, caso não esteja selecione através da opção “Choose a virtual CD/DVD disk file …”

Feito isso, você verá a ISO do Oracle Linux sendo montada como um CDROM na máquina Virtual:

Veja que a ISO está apontando para o diretório /media/Enterprise Linux dvd 20100405.

[root@bancodg ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 19G 3.0G 15G 17% /
tmpfs 502M 0 502M 0% /dev/shm
/dev/hda 3.4G 3.4G 0 100% /media/Enterprise Linux dvd 20100405

Entre no diretório da ISO.

[root@bancodg ~]# cd /media/Enterprise\ Linux\ dvd\ 20100405/Server/
[root@bancodg Server]#

É  necessário agora realizar a instalação dos pacotes rpm Linux. Seja abaixo a instalação de cada um deles.

[root@bancodg Server]# rpm -ivh binutils-2.17.50.0.6-14.el5.x86_64.rpm
warning: binutils-2.17.50.0.6-14.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
package binutils-2.17.50.0.6-14.el5.x86_64 is already installed

[root@bancodg Server]# rpm -ivh compat-libstdc++-33-3.2.3-61.x86_64.rpm
warning: compat-libstdc++-33-3.2.3-61.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
package compat-libstdc++-33-3.2.3-61.x86_64 is already installed

[root@bancodg Server]# rpm -ivh compat-libstdc++-33-3.2.3-61.i386.rpm
warning: compat-libstdc++-33-3.2.3-61.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
package compat-libstdc++-33-3.2.3-61.i386 is already installed

[root@bancodg Server]# rpm -ivh elfutils-libelf-0.137-3.el5.x86_64.rpm
warning: elfutils-libelf-0.137-3.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
package elfutils-libelf-0.137-3.el5.x86_64 is already installed

[root@bancodg Server]# rpm -ivh glibc-2.5-49.x86_64.rpm
warning: glibc-2.5-49.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
package glibc-2.5-49.x86_64 is already installed

[root@bancodg Server]# rpm -ivh glibc-2.5-49.i686.rpm
warning: glibc-2.5-49.i686.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
package glibc-2.5-49.i686 is already installed

[root@bancodg Server]# rpm -ivh glibc-common-2.5-49.x86_64.rpm
warning: glibc-common-2.5-49.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
package glibc-common-2.5-49.x86_64 is already installed

[root@bancodg Server]# rpm -ivh ksh-20100202-1.el5.x86_64.rpm
warning: ksh-20100202-1.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
package ksh-20100202-1.el5.x86_64 is already installed

[root@bancodg Server]# rpm -ivh libaio-0.3.106-5.x86_64.rpm
warning: libaio-0.3.106-5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
package libaio-0.3.106-5.x86_64 is already installed

[root@bancodg Server]# rpm -ivh libaio-0.3.106-5.i386.rpm
warning: libaio-0.3.106-5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
package libaio-0.3.106-5.i386 is already installed

[root@bancodg Server]# rpm -ivh libgcc-4.1.2-48.el5.x86_64.rpm
warning: libgcc-4.1.2-48.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
package libgcc-4.1.2-48.el5.x86_64 is already installed

[root@bancodg Server]# rpm -ivh libgcc-4.1.2-48.el5.i386.rpm
warning: libgcc-4.1.2-48.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
package libgcc-4.1.2-48.el5.i386 is already installed

[root@bancodg Server]# rpm -ivh libstdc++-4.1.2-48.el5.x86_64.rpm
warning: libstdc++-4.1.2-48.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
package libstdc++-4.1.2-48.el5.x86_64 is already installed

[root@bancodg Server]# rpm -ivh libstdc++-4.1.2-48.el5.i386.rpm
warning: libstdc++-4.1.2-48.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
package libstdc++-4.1.2-48.el5.i386 is already installed

[root@bancodg Server]# rpm -ivh make-3.81-3.el5.x86_64.rpm
warning: make-3.81-3.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
package make-3.81-3.el5.x86_64 is already installed

[root@bancodg Server]# rpm -ivh unixODBC-2.2.11-7.1.x86_64.rpm
warning: unixODBC-2.2.11-7.1.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
1:unixODBC ########################################### [100%]

[root@bancodg Server]# rpm -ivh unixODBC-2.2.11-7.1.i386.rpm
warning: unixODBC-2.2.11-7.1.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
1:unixODBC ########################################### [100%]

[root@bancodg Server]# rpm -ivh unixODBC-devel-2.2.11-7.1.x86_64.rpm
warning: unixODBC-devel-2.2.11-7.1.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
1:unixODBC-devel ########################################### [100%]

[root@bancodg Server]# rpm -ivh unixODBC-devel-2.2.11-7.1.i386.rpm
warning: unixODBC-devel-2.2.11-7.1.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
1:unixODBC-devel ########################################### [100%]

[root@bancodg Server]# rpm -ivh elfutils-libelf-devel-static-0.137-3.el5.x86_64.rpm
warning: elfutils-libelf-devel-static-0.137-3.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
package elfutils-libelf-devel-static-0.137-3.el5.x86_64 is already installed

[root@bancodg Server]# rpm -ivh gcc-4.1.2-48.el5.x86_64.rpm
warning: gcc-4.1.2-48.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
package gcc-4.1.2-48.el5.x86_64 is already installed

[root@bancodg Server]# rpm -ivh gcc-c++-4.1.2-48.el5.x86_64.rpm
warning: gcc-c++-4.1.2-48.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
package gcc-c++-4.1.2-48.el5.x86_64 is already installed

[root@bancodg Server]# rpm -ivh glibc-devel-2.5-49.x86_64.rpm
warning: glibc-devel-2.5-49.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
package glibc-devel-2.5-49.x86_64 is already installed

[root@bancodg Server]# rpm -ivh glibc-devel-2.5-49.i386.rpm
warning: glibc-devel-2.5-49.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
package glibc-devel-2.5-49.i386 is already installed

[root@bancodg Server]# rpm -ivh glibc-headers-2.5-49.x86_64.rpm
warning: glibc-headers-2.5-49.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
package glibc-headers-2.5-49.x86_64 is already installed

[root@bancodg Server]# rpm -ivh kernel-headers-2.6.18-194.el5.x86_64.rpm
warning: kernel-headers-2.6.18-194.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
package kernel-headers-2.6.18-194.el5.x86_64 is already installed

[root@bancodg Server]# rpm -ivh libgomp-4.4.0-6.el5.x86_64.rpm
warning: libgomp-4.4.0-6.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
package libgomp-4.4.0-6.el5.x86_64 is already installed

[root@bancodg Server]# rpm -ivh libstdc++-devel-4.1.2-48.el5.x86_64.rpm
warning: libstdc++-devel-4.1.2-48.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
package libstdc++-devel-4.1.2-48.el5.x86_64 is already installed

[root@bancodg Server]# rpm -ivh sysstat-7.0.2-3.el5.x86_64.rpm
warning: sysstat-7.0.2-3.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
package sysstat-7.0.2-3.el5.x86_64 is already installed

Com todos os pacotes instalados, vamos as configurações de kernel do sistema operacional. Faça as seguintes operações:

[root@bancodg ~]# vi /etc/sysctl.conf
#Oracle Settings
kernel.shmmni = 4096 
kernel.sem = 250 32000 100 128 
fs.file-max = 6815744 
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500 
net.core.rmem_default = 262144 
net.core.rmem_max = 4194304 
net.core.wmem_default = 262144 
net.core.wmem_max = 1048576

Para ativa-lós execute o sysctl como abaixo:

[root@bancodg ~]# sysctl -p

Hora de configurar os limits do Oracle, para isso adicione as seguintes linhas no arquivo /etc/security/limits.conf

[root@bancodg ~]# vi /etc/security/limits.conf
#Oracle Settings
oracle soft nproc 2047 
oracle hard nproc 16384 
oracle soft nofile 1024 
oracle hard nofile 65536 
oracle soft stack 10240

Edite também as limites do arquivo /etc/profile.

[root@bancodg ~]# vi /etc/profile
if [ $USER = "oracle" ]; then 
     if [ $SHELL = "/bin/ksh" ]; then 
         ulimit -u 16384 
         ulimit -n 65536 
     else 
         ulimit -u 16384 -n 65536 
     fi 
fi

Configure agora o arquivo /etc/pam.d/login com a linha abaixo:

[root@bancodg ~]# vi /etc/pam.d/login
session    required     pam_limits.so

Pronto, limites e demais configurações feitas. Vamos a validação do host que é muito importante para um ambiente DataGuard.

[root@bancodg ~]# vi /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1	localhost.localdomain localhost
::1		localhost6.localdomain6 localhost6
20.0.0.10 bancodg.oracle.com bancodg

Checando o hostname:

[root@bancodg ~]# hostname
bancodg.oracle.com
[root@bancodg ~]# hostname -i
20.0.0.10

Com as configurações acima, vamos agora criar o usuário oracle:

[root@bancodg ~]# groupadd oinstall 
[root@bancodg ~]# groupadd dba 
[root@bancodg ~]# useradd -g oinstall -G dba oracle

Altere a senha do usuário também:

[root@bancodg ~]# passwd oracle
Changing password for user oracle.
New UNIX password: oracle
BAD PASSWORD: it is based on a dictionary word
Retype new UNIX password: oracle
passwd: all authentication tokens updated successfully.

Vamos agora a criação do diretório. Faça os seguintes comandos:

[root@bancodg ~]# mkdir -p /u01/app/oracle 
[root@bancodg ~]# chown -R oracle:oinstall /u01/

Pronto! As configurações todas ok.

Precisamos agora transferir o binário do Oracle para a máquina virtual. Caso você estiver em um ambiente windows, você pode utilizar o winscp. No meu caso vou utilizar o utilitário scp.

$ scp p10404530_112030_Linux-x86-64_1of7.zip p10404530_112030_Linux-x86-64_2of7.zip oracle@20.0.0.10:/u01/app/oracle/.
oracle@20.0.0.10's password: ***********
p10404530_112030_Linux-x86-64_1of7.zip                              100%   01:28 ETA
p10404530_112030_Linux-x86-64_2of7.zip                              100%   01:45 ETA

Antes de instalar, precisamos é claro, descompactar os arquivos de instalação na máquina virtual.

Acesse novamente a VM do VirtualBox, e entre no caminho /u01/app/oracle (ou onde você deixou os binários) e utilize o unzip para descompactar os arquivos. Faça primeiro no arquivo 1 depois no arquivo 2, como abaixo:

[oracle@bancodg ~]$ cd /u01/app/oracle/
[oracle@bancodg oracle]$ ll
total 2444440
-rwxr-xr-x 1 oracle oinstall 1358454646 Jan 16 22:44 p10404530_112030_Linux-x86-64_1of7.zip
-rwxr-xr-x 1 oracle oinstall 1142195302 Jan 16 22:45 p10404530_112030_Linux-x86-64_2of7.zip

[oracle@bancodg oracle]$ unzip p10404530_112030_Linux-x86-64_1of7.zip 
  ...
  inflating: database/stage/properties/oracle.server_PE.properties  
  inflating: database/stage/properties/sshConnectivity-usage.txt  
  inflating: database/stage/properties/oracle.server_Custom.properties  
  inflating: database/stage/properties/sPaths.properties  
  inflating: database/stage/properties/ssh_system.properties  
  inflating: database/stage/properties/oracle.server_SE.properties  
  inflating: database/stage/properties/userPaths.properties  
  inflating: database/welcome.html   
  inflating: database/readme.html 
[oracle@bancodg oracle]$ unzip p10404530_112030_Linux-x86-64_2of7.zip
  ...
  inflating: database/stage/Components/oracle.sysman.console.db/11.2.0.3.0/1/DataFiles/filegroup10.jar  
  inflating: database/stage/Components/oracle.sysman.console.db/11.2.0.3.0/1/DataFiles/filegroup11.jar  
  inflating: database/stage/Components/oracle.sysman.console.db/11.2.0.3.0/1/DataFiles/filegroup7.jar  
  inflating: database/stage/Components/oracle.sysman.console.db/11.2.0.3.0/1/DataFiles/filegroup5.jar  
  inflating: database/stage/Components/oracle.sysman.console.db/11.2.0.3.0/1/DataFiles/filegroup3.jar  
  inflating: database/stage/Components/oracle.sysman.console.db/11.2.0.3.0/1/DataFiles/filegroup1.jar  
  inflating: database/stage/Components/oracle.sysman.console.db/11.2.0.3.0/1/DataFiles/filegroup13.jar  
  inflating: database/stage/Components/oracle.sysman.console.db/11.2.0.3.0/1/DataFiles/filegroup2.jar

Feito os passos acima, uma pasta chamada “database” será criada no atual diretório. Ela contém os binários de instalação do software Oracle Database 11gR2.

Vamos então para esse diretório, que no meu caso é o /u01/app/oracle/database:

LEMBRE-SE VOCÊ DEVE ESTAR COM O USUÁRIO ORACLE CONECTADO NA MÁQUINA VIRTUAL

Dispare o runInstaller, como na Imagem acima.

O runInstaller irá abrir uma janela de utilitário de passo a passo de instalação do software. Seguiremos os passos:

Primeiro, desmarque a opção de receber updates via My Oracle Support.

Um aviso será mostrado, pode ignora-ló e continue.

Por ser um ambiente totalmente feito para teste, vamos novamente ignorar os updates. Para isso clique em Skip software updates

Aqui, temos que selecionar o tipo da instalação. Vamos por enquanto somente instalar somente o software Oracle Database 11gR2.

Selecione opção Enterprise. Lembrando para usar o Oracle Dataguard, é obrigatório e imprescindível que a versão seja Enterprise Edition. Por isso ATENÇÃO, selecione a versão ENTERPRISE EDITION para essa instalação.

Define aqui a localização das variáveis ORACLE BASE e ORACLE_HOME.

Nesse momento é realizado um checklist completo do ambiente Oracle sobre as possíveis falhas de pré requisitos. No nosso caso, ele informou somente a falta de memória. Por ser um ambiente criado somente com a finalidade de estudo, podemos deixar a memória da máquina baixa (por motivos óbvios), porém em ambientes de produção nunca ignore tais erros.

 

Aqui é informado um resume de todas as configurações selecionadas.

 

Início da instalação …

 

É informado agora, para rodarmos dois scripts com o usuário root. Simplesmente assim: conecte como root e execute os dois.


[root@bancodg ~]# whoami
root
[root@bancodg ~]# /u01/app/oraInventory/orainstRoot.sh 
Changing permissions of /u01/app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.

Changing groupname of /u01/app/oraInventory to oinstall.
The execution of the script is complete.

Agora o segundo

[root@bancodg ~]# whoami 
root
[root@bancodg ~]# /u01/app/oracle/product/11.2.0/dbhome_1/root.sh 
Performing root user operation for Oracle 11g 

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /u01/app/oracle/product/11.2.0/dbhome_1

Enter the full pathname of the local bin directory: [/usr/local/bin]: 
   Copying dbhome to /usr/local/bin ...
   Copying oraenv to /usr/local/bin ...
   Copying coraenv to /usr/local/bin ...

Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Finished product-specific root actions.

Fim da instalação

 

Com a conclusão da parte 2, temos a máquina virtual criada com o Oracle Database e todos os pré-requisitos feitos.

Vamos somente agora, adicionar as variáveis de ambiente da máquina DB Primary. Com o usuário oracle conectado, edite o arquivo ˜/.bash_profile e adicione as seguintes linhas:

[oracle@bancodg ~]$ vi ~/.bash_profile 
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
[oracle@bancodg ~]$

Agora ative as variáveis com o comando:

[oracle@bancodg ~]$ . ~/bash_profile

Na próxima parte, estarei realizando a cópia dessa VM ponta, para poder criar a máquina em um outro projeto.

 

Protegendo o Oracle – Parte 2
janeiro 12, 2013

Parte 01 – 07_DICTIONARY_ACCESSIBILITY

Encontrando os password default

Não é novidade nenhuma que existem várias contas de usuários padrão no banco de dados Oracle, alguns deles até são criados com privilégios administrativos.

Usuários padrão são criados no momento da criação do banco e claro,  são registrados sem uma senha e já vem bloqueado por default, exceto para SYS e SYSTEM que são contas administrativas que quando criadas através do CREATE DATABASE, se não definidas as senhas, elas devem ficar:

SYS : CHANGE_ON_INSTALL)
SYSTEM : MANAGER

Se você acha que os usuários default do Oracle é uma lista pequena, está enganado, aqui é alguns dos usuários padrão que são instalado sempre que um banco ou uma feature do banco é instalada. Por exemplo, o usuário XDB somente é instalado quando o Oracle XMLDB é instalado:

SYS
SYSTEM
SYSMAN
OUTLN
TSMSYS
WKSYS
SCOTT
ADAMS
JONES
WKPROXY
OLAPSYS
OWBSYS
CLARK
BLAKE
HR
OE
SH
DEMO
ANONYMOUS
CSMIG
CTXSYS
DBSNMP
DIP
DMSYS
DSSYS
EXFSYS
LBACSYS
MDSYS
ORACLE_OCM
ORDPLUGINS
ORDSYS
PERFSTAT
XDB
MGMT_VIEW
SI_INFORMTN_SCHEMA

Porém para alguns deles (quase todos), existe uma senha padrão definida, como o famoso usuário SCOTT que possuí a senha padrão definida como TIGER.

Muitos ambientes Oracle tem o usuário SCOTT criado (e provavelmente até com a senha padrão definida), o que deixa o banco de dados muito vulnerável, imagina que com uma senha padrão definida, qualquer um a qualquer momento pode acessar o seu banco, somente acessando essa conta.

Ok, mais como me livro disto? Qual é a maneira de descobrir se os usuários na lista acima está com a senha padrão habilitada?

Somente a view DBA_USERS_WITH_DEFPWD pode te responder isso …

Logado no SQL*Plus com uma conta administrativa, execute a seguinte consulta de encontra a view DBA_USERS_WITH_DEFPWD

SQL> SELECT * FROM DBA_USERS_WITH_DEFPWD;

USERNAME
------------------------------
DIP
OUTLN
ORACLE_OCM
APPQOSSYS

SQL> select username, account_status from dba_users where username in (select username from dba_users_with_defpwd);

USERNAME                       ACCOUNT_STATUS
------------------------------ --------------------------------
APPQOSSYS                      EXPIRED & LOCKED
ORACLE_OCM                     EXPIRED & LOCKED
DIP                            EXPIRED & LOCKED
OUTLN                          OPEN

A primeira consulta, mostra que temos a lista completa dos usuários em que a senha padrão está definida. Na segunda consulta, é informado que apenas o usuário OUTLN que tem uma senha padrão está com o status da conta habilitado.

Mesma com uma conta bloqueada, deixar o usuário com uma senha padrão pode ser muito perigoso, imagina se alguém habilita uma dessas contas sem querer e não troca a senha?

Para mudar a senha não é segredo:

SQL> PASSWORD OUTLN
Changing password for OUTLN
New password: *********
Retype new password: ************
Password changed

São maneiras simples como essa que podem te livrar de uma dor de cabeça incrível. O DBA devem estar atento a tudo, inclusive a pequenos detalhes como este. Nem quero pensar que uma conta dessas caia em mãos erradas, imagina que uma conta dessas com privilégio administrativo, o de create/drop tablespaces por exemplo, esteja com a conta habilitada e password default e algum abelhudo consegue conectar com essa conta, já penso o estrago? …

É! … você pode dar adeus ao seu banco e rezar para ter backup …

Performance Tuning Utilities
janeiro 9, 2013

Já ouviram falar de OSWatcher? LTOM? SQLTXPLAIN e OPDG?

Bom, se vocês nunca ouviram  falar dessas ferramentas chegou a hora de conhece-las.

A nota do metalink 438452.1 mostra essas e diversas outras ferramentas sobre performance tuning.

Bom apetite, aproveitem :)

Segment Advisor Script v1.0
dezembro 12, 2012

Só nós DBA’s sabem as inúmeras funções, sintaxes e comandos que precisamos decorar no nosso dia a dia e isso não é uma tarefa fácil, além do que, as soluções sempre precisam ser rapidamente propostas. Por isso que gosto de facilitar as coisas sempre que posso, assim como esse script, que além de simples ele realiza é uma formarápida os passos que nem sempre são lembrados, isso evita aquele tempão gasto procurando na documentação a sintaxe exata de tal procedimento. Qual DBA que nunca passou por isso que atire a primeira pedra!

O objetivo principal do script é facilitar a execução do Oracle Segment Advisor, de uma forma bem simples, apenas três argumentos e nada mais e o melhor de tudo: não é preciso criar qualquer tipo de objeto no banco de dados, todo trabalho é executado através de um bloco anônimo de PLSQL e o único requisito aqui é o bom e velho SQL*Plus.

Você pode conferir a primeira versão (sim, próximas poderão surgir) você pode fazer aqui.

Como usar Segment Advisor Script?

SYNTAX: { @run_sa “Owner Segment” “Segment Name” “Segment Type” }

Ele não precisa nada mais além do que três argumento:

1. “Owner Segment” :  O primeiro representa o nome do owner do segmento.

2. “Segment Name”:  O segundo representa o nome do segmento.

3. “Segment Type”:  O terceiro representa o tipo do segmento. Que pode ser um TABLE, INDEX etc …

Usando o Segment Advisor Script

Para explicar melhor vamos a um teste prático.

Primeiro de tudo, precisamos de uma tabela grande favorável para o teste que vamos fazer, para isso criei a tabela chamada TBIG dentro do schema FSOARES.

FSOARES@dbtst> create table tbig as select * from dba_source;

Table created.

FSOARES@dbtst> insert into tbig (select * from tbig);

633054 rows created.

FSOARES@dbtst> /

1266108 rows created.

FSOARES@dbtst> /

2532216 rows created.
...
FSOARES@dbtst> commit;
FSOARES@dbtst> @size tbig

SEGMENT_NAME                    SEGMENT_TYPE        SIZE_MB
------------------------------ ------------------ ---------------
TBIG                             TABLE              5,244.00

Pronto, temos agora uma tabela de 5G que está perfeita para o nosso teste. Vamos ver quantos registros temos:

FSOARES@dbtst> set timing on
FSOARES@dbtst> select count(*) from tbig;

COUNT(*)
----------
40515456

1 row selected.
Elapsed: 00:04:08.21

Ok, temos cerca de 40515456 registros e levamos cerca de 4 minutos para sabermos isso. Vamos agora apagar uns 98% dessa tabela deixando apenas alguns milhares de registro. Para fazer essa operação mais racional,  quero descobrir  quantos registros tenho por usuário nessa tabela, afim de deixar apenas os menores owners:

FSOARES@dbtst> select count(*), owner from tbig group by owner order by 1;

  COUNT(*) OWNER
---------- ------------------------------
       576 IX
       576 OUTLN
      1088 PM
      2176 FLOWS_FILES
      2176 HR
      2880 SYSTEM
     13696 OE
     14912 ORDPLUGINS
     19392 WMSYS
     70464 EXFSYS
    183808 ORACLE_OCM
    230528 DBSNMP
    231552 ORDSYS
    548288 XDB
    731264 OLAPSYS
   1258816 CTXSYS
   1340416 MDSYS
   2624256 APEX_030200
   9466112 SYS
  23772480 SYSMAN

20 rows selected.

Elapsed: 00:01:14.06
FSOARES@dbtst> delete tbig where owner NOT IN ('IX', 'OUTLN');                         
40514304 rows deleted.

Elapsed: 00:29:57.41
FSOARES@dbtst> commit;

Commit complete.

Elapsed: 00:00:00.01

Aqui, a nossa tabela TBIG está somente com os dados usuário IX e OUTLN, o resto dos outros usuário foi simplesmente apagado. Bom como temos agora apenas alguns registros vamos realizar aquele mesmo count para ver o a quantidade de registro, vamos ver agora o quanto tempo levará. Primeiro é claro, vamos remover a consulta do nosso cache.

FSOARES@dbtst> alter system flush shared_pool;

System altered.

FSOARES@dbtst> alter system flush buffer_cache;

System altered.

FSOARES@dbtst> select count(*) tbig

  COUNT(*)
----------
      1152

1 row selected.

Elapsed: 00:03:53.93

Temos agora cerca de mil registros e levamos quase o mesmo tempo para realizar o count da tabela quando ela estava com mais de 40 milhões de registro!? Como isso pode ser? Tivemos o mesmo tempo para contar de 0 a 1152 e de 0 a 40 milhões?

Bom, sem dúvidas há alguma coisa de errado com nosso segmento de tabela TBIG. É aí que entra o Segment Advisor, que vai nos aconselhar o que fazer com esse segmento.

Veja como é simples:

FSOARES@dbtst> @run_sa fsoares tbig table

---------------------------------------------------------------------------------
-- Segment Adviser Script v1.0 by Flavio Soares ( http://flaviosoares.com )

Running the Segment Advisor for Segment 
Owner   : FSOARES
Segment Name: TBIG
Segment Type: TABLE

Segment Advisor successfuly completed

For delete the task TaskName_FSOARES_cxdnLahXMf run: 
SQL> exec  dbms_advisor.delete_task('TaskName_FSOARES_cxdnLahXMf');

-- Showing the Segment Advice Recommendations for the object "table" "fsoares" "tbig"

 TABLESPACE_NAME   : USERS
 SEGMENT_OWNER     : FSOARES
 SEGMENT_NAME      : TBIG
 SEGMENT_TYPE      : TABLE
 PARTITION_NAME    :
 ALLOC_MB          :    5,244.00
 RECLAIM_MB        :    4,567.54
 USED_MB           :      676.46
 PCT_SAVE          : 87 %
 RECOMMENDATIONS   : Enable row movement of the table FSOARES.TBIG and perform shrink, estimated savings is 4789413285 bytes.
 SOLUTION 1        : alter table "FSOARES"."TBIG" shrink space
 SOLUTION 2        : alter table "FSOARES"."TBIG" shrink space COMPACT
 SOLUTION 3        : alter table "FSOARES"."TBIG" enable row movement

---------------------------------------------------------------------------------

Observe a recomendação, ele sugere realizar um shrink na tabela que ganharemos com isso cerca de 87% de espaço que hoje não está sendo utilizado. Opa!  … é 87% é um bom ganho, então vamos aplicar as recomendações sugeridas.

FSOARES@dbtst> alter table "FSOARES"."TBIG" enable row movement;

Table altered.

FSOARES@dbtst> alter table "FSOARES"."TBIG" shrink space;

Table altered.

Após as recomendações aplicadas, vamos agora executar novamente o count de encontro a tabela TBIG e observar o tempo:

FSOARES@dbtst> alter system flush shared_pool;

System altered.

FSOARES@dbtst> alter system flush buffer_cache;

System altered.

FSOARES@dbtst> select count(*) from tbig;

  COUNT(*)
----------
      1152

1 row selected.

Elapsed: 00:00:00.01

Depois da recomendação aplicada, o tempo simplesmente caiu para 0.01 segundos.

Viu como ficou bem mais simples utilizar o Segment Advisor agora com o run_sa.sql :)

Com apenas três argumentos e já temos nossas recomendações.

FSOARES@dbtst> @run_sa fsoares tbig table

---------------------------------------------------------------------------------
-- Segment Adviser Script v1.0 by Flavio Soares ( http://flaviosoares.com )

Running the Segment Advisor for Segment 
Owner   : FSOARES
Segment Name: TBIG
Segment Type: TABLE

Segment Advisor successfuly completed

For delete the task TaskName_FSOARES_cxdnLahXMf run: 
SQL> exec  dbms_advisor.delete_task('TaskName_FSOARES_cxdnLahXMf');

-- Showing the Segment Advice Recommendations for the object "table" "fsoares" "tbig"

 TABLESPACE_NAME   : USERS
 SEGMENT_OWNER     : FSOARES
 SEGMENT_NAME      : TBIG
 SEGMENT_TYPE      : TABLE
 PARTITION_NAME    :
 ALLOC_MB          :    5,244.00
 RECLAIM_MB        :    4,567.54
 USED_MB           :      676.46
 PCT_SAVE          : 87 %
 RECOMMENDATIONS   : Enable row movement of the table FSOARES.TBIG and perform shrink, estimated savings is 4789413285 bytes.
 SOLUTION 1        : alter table "FSOARES"."TBIG" shrink space
 SOLUTION 2        : alter table "FSOARES"."TBIG" shrink space COMPACT
 SOLUTION 3        : alter table "FSOARES"."TBIG" enable row movement

---------------------------------------------------------------------------------

Dúvidas, melhorias, bugs, recomendações serão muito bem vindas!

Um abraço e aproveitem!

Oracle 12c, amanhã?
dezembro 11, 2012

Será o lançamento do Oracle 12c amanhã?

No dia 12/12/2012 ?

Será?

Só nos basta esperar …

Atenção no uso de ALTER TYPE .. RESET
dezembro 11, 2012

O objetivo não é assustar mais o de sempre informar.

Bug 4421376 – Dump (kgldpo) after ALTER TYPE .. RESET

De acordo com a Oracle, existem casos em que quando o “ALTER TYPE RESET;” é executado podem ocorrer corrupção no dicionário de dados do seu banco, isso mesmo você “pode” ter uma corrupção no seu banco!

Para confirmar o problema, basta ver a mensagem kgldpo no seu dump quando um reset é disparado.  Oracle acredita que as versões abaixo da 11g podem ser afetadas com esse problema, porém confirma apenas na versão 10.2.0.4.

Sempre consulte o Oracle Supporte para qualquer conselho.

Mais detalhes:
Bug 4421376 – Dump (kgldpo) after ALTER TYPE .. RESET [ID 4421376.8]

São esses tipos de problemas, que existe um intenso apelo por parte da Oracle para sempre manter o seu banco atualizado e com seus os patch em dias, podendo evitar assim problemas extremamente graves como este.

Fotos do Oracle OpenWorld Latin America 2012
dezembro 10, 2012

Oracle OpenWorld Latin America 2012
dezembro 4, 2012

Olá Pessoal

Amanhã para quem não sabe estará acontecendo o Oracle OpenWorld Latin America 2012 aqui em São Paulo na Transamérica Expo Center em São Paulo.

Está é a oitava edição que acontecerá nos dias 04, 05 e 06 de Dezembro.

Sem dúvida é sempre um grande oportunidade para conhecermos as novidades e estar por dentro de tudo que está rolando no mundo Oracle.

Estarei somente no dia 06 (último dia), mais vou tentar tirar algumas fotos para postar no blog. Tudo de interessante que ver por lá estarei compartilhando com vocês.

Essa é uma boa oportunidade para conhecer o pessoal que visita o blog, se alguém for me procure lá :)

Mais informações: http://www.oracle.com/openworld/lad-pt/index.html

DemoGrounds: http://www.oracle.com/openworld/javaone-lad-2012-demogrounds-pt-1873601.pdf

Agenda: http://flaviosoares.com/wp-content/uploads/2012/12/oow-schedule15-pt-1876004-ptb.pdf

 

Oracle Data Guard 11g com VirtualBox – Parte 1
novembro 26, 2012

Introdução

Parte 1

Parte 2

Parte 3

Parte 4

Parte 5

Parte 6

Esse é o primeiro post de uma série inteira que está por vir, explicando passo a passo a instalação e configuração do Oracle Data Guard 11g utilizando o VirtualBox.

O Oracle Data Guard faz parte do Oracle Database High Availability, ou seja, estamos falando de alta disponibilidade (HA).  Diferentemente do Oracle RAC o Data Guard trabalha exclusivamente com os dados do seu banco, dados esses que são o bem mais crítico do negócio de uma empresa. O Data Guard é uma solução de proteção a dados como também, a disponibilidade deles, que cria e mantém um ou mais bancos de contingência (standby) sendo possível assim, recuperar de um completo desastre.

Não gosto de chamar o Oracle Dataguard simplesmente de um banco de standby, por que ele vai além disso as opções de configuração e otimização levam ele a um grau muito acima do que um simples banco de contingência. (veja mais sobre ele aqui)

Em uma configuração Data Guard, sempre terá o banco de dados primário e um ou mais bancos de standby, este por sua vez só será ativo quando houver problemas no banco primário, ou por qualquer outro motivo que precisamos utiliza-ló, como por exemplo uma manutenção no servidor onde o banco de dados primário encontra-se.

Sempre que um banco standby for ativado (switchover) ele é automáticamente “transformado” no banco primário e o banco primário passa a ser o standby. Podemos também realizar a volta (switchback) em que o banco standby atual (antigo primário) volta a ser o banco de dados produção e o atual primário (antigo standby) torna a ser o o banco de contigencia novamente.

Seja o modelo de uma configuração básica do Dataguard.

 

A partir do 11g, existe três tipos de Data Guard:

  • Physical database : É a cópia física perfeitamente identica do seu banco primário. Realmente é um clone feito bloco a bloco mantendo toda a estrutura de diretório, schemas, objetos e etc … Ele é mantido sincronizado através do Redo Apply.
  • Logical database: Ele contém a mesma estrutura lógica (tabelas, objetos, indexes etc …) porém a sua organização física e estrutural pode ser diferente. Ele é mantido sincronizado através do SQL Apply.
  • Snapshot database: Ele é um banco de contingência que é possível realizar qualquer movimentação de dados e ainda assim ele se mantém sincronizado, ou seja ele permite que qualquer sessão altere qualquer informação no banco enquanto ele se mantém sincronizado. Na verdade, enquanto o banco está aberto para utilização, ele represa os archives que são aplicados assim que voltamos o banco no modo standby.
Estaremos vendo aqui os três tipos de Data Guard, passando pelo Physical depois Logical e em seguida o Snapshot.
Vamos também aprender sobre o Oracle Data Broker, que automatiza (E MUITO) as operações de manutenção e monitoramento do Data Guard Oracle.
Caso queiram tirar alguma dúvida sobre Data Guard por favor deixe um comentário, no possível … estarei ajudando :)

Pré-Requisitos:

 Vou começar esse artigo passando desde a criação da máquina virtual, então você que não está familiarizado com a instalação do Oracle no Linux, fique despreocupado que vamos ver tudo aqui.

Para poder acompanhar vamos precisar:

  • Virtual Box instalado na máquina
  • Software Oracle 11g R2 (não é preciso o release 11.2.0.3).
  • ISO do Oracle Linux 5.x (ou similares). Você pode fazer o download gratuito aqui, basta apenas se cadastrar
Vamos precisar de duas VM rodando na máquina, por isso recomendo que sua máquina tenha no mínimo 4G de RAM, vamos criar as máquina com 1G cada uma. Caso você não tenha 4G de RAM na sua máquina não tem problema, crie suas máquinas virtuais com menos RAM, porém as coisas irão ficar um pouco mais lentas.

Configurando o VirtualBox

Com o VirtualBox instalado, vamos realizar as configurações de Network.
Ao abrir as preferencias do VirtualBox a tela abaixo irá ser mostrada:
Clique na aba Network, e adicione mais um adaptador de rede clicando no ícone de “+” no canto direto da tela.
Adicione as seguintes configurações de IP nessa nova placa de rede.
 Certifique-se que não existe nenhuma configuração de DHCP, como mostra abaixo:

Criação da máquina Virtual (DB Primary).

Com as configurações necessárias feitas, vamos agora a criação da VM onde será o nosso Database Primary. Com o VirtualBox aberto clique no botão New.

Como a versão da minha ISO do Oracle Linux é x86-64, a versão minha selecionada foi o Oracle Linux 64bits. Caso a versão da sua ISO for x86 selecione a opção 32bits.

Selecione a quantidade de memória desejada.

Aqui temos nossa VM criada, vamos a algumas configurações necessárias. Por isso, selecione a VM DB Primary e clique na opção Settings.

Na aba System, remova o Floppy disk no Boot:

Clique na opção Processor, e caso você deseje, adicione mais um processador a máquina virtual.

Vá a Aba Storage, para adicionarmos a ISO de instalação do Oracle Linux.

Selecione o disco vázio na Controladora IDE, remova clicando no icone “-”.

Clique no icone +, e selecione a ISO do Oracle Linux.

Agora a última configuração, vá a aba Network e defina o adaptador como Host-only Adapter e selecione o adaptador vboxnet1.

Instalação do Oracle Linux

Agora sim, vamos a instalação do Linux. Inicie a máquina virtual.

Vamos cancelar essa etapa de checagem dos discos. Selecione o Skip e continue.

Aqui será mostrado uma mensagem de que estaremos iniciando a configuração de disco. Selecione em Yes e continue.

Selecione a opção Create custom layout, e continue.

Vamos agora, definir o layout do disco. Como o disco foi criado com 20G, estarei configurando da seguinte maneira:

  • Swap: 1G
  • Partição / com 19G.

Fique a vontade para configurar da maneira que desejar. Clique no botão New.

Defina o Swap.

Clique no botão New novamente e defina a partição / como ext3 e clique na opção Fill to maximum allowable size.

Na próxima tela, apenas continue.

Vamos agora a configuração da rede. Selecione o adaptador eth0 e clique no botão Edit.

Aqui estarei definindo o IP: 20.0.0.10 com o Netmask: 255.255.0.0

Com o adaptador configurado, vamos definir um hostname para o Linux instalado. Após deixar como a figura abaixo clique em Next.

Selecione o TimeZone de SP:

Defina agora a senha do usuário root, que aqui vou colocar como oracle.

Vamos agora uma das partes mais importantes, a definição dos pacotes. Selecione a opção Customize now e clique em Next.

Em Desktop Enviroments, deixe as opções como está. Clique em no item Applications.

Deixe as opções como na imagem abaixo:

Agora em Development, deixe as opções novamente iguais. Clique no item X Software Development e clique em Optional packages.

Selecione o pacote libxp-devel para ser instalado e clique em Close.

Agora vamos para o Server, e deixe iguais as opções de instalação.

Vá para a opção Base System agora e deixa como as opções da figura abaixo. Depois de feito, selecione a opção System Tools e clique na opção Optional packages e selecione o pacote sysstat para ser instalado.

Depois de feito, clique em Next.

Iniciando a instalação.

Com a instalação concluida, vamos reiniciar a máquina.

Desabilite as opções de Firewall.

Não vamos criar nenhum usuário agora, clique em Next e depois em Continue.

Instalação do Guest Additions VirtualBox

Com o nosso Linux instalado, vamos instalar o Guest Additions do VirtualBox que nada mais é que um otimizador da VM. Com a VM ligada vamos logar na máquina com o usuário root.

Após de logado, clique no item Install Guest Additions.

Um disco será criado e adicionado na máquina Virtual como mostra a figura abaixo.

Abra um terminal e vá para o diretório /media/VBOXADDITIONS … e execute o script VBoxLinuxAdditions.run

Temos agora a máquina virtual necessária para instalarmos o Oracle Database 11g. Na nossa próxima parte dessa série estaremos então instalando o Oracle Database 11g.

Um abraço, espero que tenham gostado da idéia e continuem acompanhando. Qualquer dúvida post um comentário ..

Post sobre Asynchronous I/O
novembro 23, 2012

Essa é para você que quer aprender mais sobre o Asynchronous IO, o que ele é e como ele trabalha.

Esse é um post da IBM escrito por M. Tim Jones, mais que pode ser encontrada no metalink pelo documento Asynchronous I/O Support on OCFS/OCFS2 and Related Settings: filesystemio_options, disk_asynch_io [ID 432854.1].

Acabei de ler o documento e fiquei impressionado com os detalhes explicado pelo autor.

Vale a pena conferir:

http://www.ibm.com/developerworks/linux/library/l-async/index.html

Próxima Página »