quinta-feira, 15 de novembro de 2012

O Script changePerm.sh


Para que serve?

Durante a instalação patchs de banco de dados, todos os novos arquivos e diretórios são criados com acesso restrito. Para usuários ou aplicativos de terceiros com um grupo diferente do grupo do usuário Oracle (normalmente definido como dba), que tentarem acessar os utilitários ou bibliotecas do software Oracle, serão apresentadas mensagens de erros de permissão, conforme apresentada abaixo.

$ id
uid=701(test) gid=81(dbus) groups=81(dbus)
$ sqlplus
Error 6 initializing SQL*Plus
Message file sp1.msb not found
SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory
Exit 1

Para corrigir este problema, deve-se executar o script changePerm.sh. Este script permitirá que os usuários que não pertencem ao grupo dba possam acessar e executar as ferramentas no diretório ORACLE_HOME.

Este script está localizado no ORACLE_HOME/install em Unix e Linux (não é necessário para o sistema operacional Windows). Este script só deve ser usado para as versões do Oracle 9.x e 10g.

O que o script faz?

O script changePerm.sh, varre um conjunto de arquivos e diretórios, atribuindo a permissão do grupo “dba” (normalmente definido nas instalações) e repassando a permissão de execução aos demais grupos.  Com  isso, os demais grupos serão capazes de executar os  arquivos.

Exemplo de execução do script changePerm.sh

$ id
$  uid=3000(oracle) gid=3000(dba) groups=3000(dba)
$ cd $ORACLE_HOME/install
$ ./changePerm.sh
----------------------------------------------------------------------
Disclaimer: The purpose of this script is to relax permissions on some of the files in the database Oracle Home so that all clients can access them.
Please note that Oracle Corporation recommends using the most restrictive file permissions as possible for your given implementation.  Running this script should be done only after considering all security ramifications.
----------------------------------------------------------------------
Do you wish to continue (y/n) [n]: y
Finished running the script successfully
Please see /tmp/changePerm_err.log for errors and /tmp/changePerm.log for the log of events

A partir da versão 11g, as permissões sob o ORACLE_HOME estão redefinidas permitindo que demais usuários com grupos diferentes possam executar as ferramentas diretamente. Portanto para a versão 11g não é mais necessário a execução deste script.




MSc. Rubens Oliveira
DBA Oracle Consultor
olivert.dba@consultant.com

domingo, 4 de novembro de 2012

Multiplexando controlfiles no ASM



Neste artigo vamos apresentar como podemos fazer a multiplexação de controlfiles.

Mas antes de apresentar os passos, vamos falar para que serve a multiplexação de controlfiles.

A multiplexação de controlfiles serve entre outras coisas para melhorar a performance do banco de dados, principalmente em ambientes com o RAC instalado. A multiplexação também previne problemas com a corrupção do mesmo, pois nesses casos pode-se copiar um controlfile em bom estado sobre o controlfile danificado.

Vamos aos passos da multiplexação dos controlfiles.

A. Criar o diretório para armazenar o controlfile.

Na instância do ASM:


SQL> alter diskgroup DGBKP add directory '+DGBKP/DBTESTE';
SQL> alter diskgroup DGBKP add directory '+DGBKP/DBTESTE/CONTROLFILE';

Na instância do banco de dados:

B. Deve-se identificar o local dos controlfiles correntes:

SQL> select name from v$controlfile;

NAME
------------------------------------------------------------
+DATADG/DBTESTE/control01.ctl
+REDODG/DBTESTE/control02.ctl

SQL> show parameter control_files

'+DATADG(CONTROLFILE)/DBTESTE/control01.ctl',
'+REDODG(CONTROLFILE)/DBTESTE/control02.ctl'

C. Editar o spfile e modificar o parâmetro control_file:

SQL> alter system set control_files =
'+DATADG(CONTROLFILE)/DBTESTE/control01.ctl',
'+REDODG(CONTROLFILE)/DBTESTE/control02.ctl',
'+DGBKP(CONTROLFILE)/DBTESTE/control03.ctl'
scope=spfile sid='*';

System altered.

Em destaque está o novo controlfile (definido neste exemplo como "control03.ctl").

D. Efetuar um shutdown no banco de dados (incluindo todas as instâncias se estiver no RAC):
   
$ srvctl stop database -d DBTESTE

E.Iniciar o banco de dados em modo NOMOUNT:

$ sqlplus / as sysdba

SQL> startup nomount


F. Usar o RMAN para duplicar o controlfile:

$ rman nocatalog

Recovery Manager: Release 11.2.0.1.0 - Production on Thu Nov 04 09:15:24 2012
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

RMAN> connect target

connected to target database: DBTESTE (not mounted)
using target database control file instead of recovery catalog

RMAN> restore controlfile to '+DGBKP/DBTESTE/control03.ctl' from '+DATADG/DBTESTE/control01.ctl';

Starting restore at 04-NOV-12
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=297 instance=DBTESTE1 device type=DISK

channel ORA_DISK_1: copied control file copy
Finished restore at 04-NOV-12

RMAN> exit

G. Efetuar um shutdown no banco de dados:

$ sqlplus / as sysdba

SQL> shutdown immediate


H. Iniciar o banco de dados:

srvctl start database –d DBTESTE

I. Verificar o resultado final:

SQL> select name from v$controlfile;

NAME
------------------------------------------------------------
+DATADG/DBTESTE/control01.ctl
+REDODG/DBTESTE/control02.ctl
+DGBKP/DBTESTE/control03.ctl

SQL> show parameter control_files

'+DATADG(CONTROLFILE)/DBTESTE/control01.ctl',
'+REDODG(CONTROLFILE)/DBTESTE/control02.ctl',
'+DGBKP(CONTROLFILE)/DBTESTE/control03.ctl'
   



MSc. Rubens Oliveira
DBA Oracle Consultor
olivert.dba@consultant.com