Make Aliases on sqlplus

In first example, i can show these:
[oracle@localhost~] echo “select count(*) from tab;” | sqlplus -s username/pass
With another method, you can run from one Linux command a SQL file
 [oracle@localhost~] sqlplus -s username/pass <filename.sql
 COUNT(*)
————-
                20
  1. alias sysdba=‘select status, instance_name from v$instance; | sqlplus / as sysdba’
  2. alias sysoper=‘sqlplus / as sysoper’
  3. alias rman=‘rman target / ‘

Change the face for SQLPLUS – Automatically display SID and connected User in Sql*Plus

Show the name of instance on startup of sqlplus

set termout off
define gname=idle
column global_name new_value gname
select lower(user)||’@’ ||substr(global_name,1,decode(dot,0,length(global_name),dot-1)) global_name from (select global_name, instr(global_name,’.’) dot from global_name);
set sqlprompt ‘&gname>’
set termout on

Put this code on file “glogin.sql” in your $ORACLE_HOME/sqlplus/admin 

before
SQL>show user
USER is “SYS”
SQL>

After
sys@ORCL>show user
USER is “SYS”
sys@ORCL>


Automatically startup the database when Oracle Linux Starts

To make a startup of Oracle database automatically please follow these steps.
1. First of all we’ve to change our /etc/oratab file. This file have some hints like, database name, Oracle home, and start or not – N/Y
orcl:/home/oracle/product/10.2.0/Db_1:N
The first field is the name of my database (orcl), the second one is my home directory (/home/oracle/product/10.2.0/Db_1), and the third indicates to the dbstart utility whether the database should, or should not be brough up at the system boot time with “Y” or “N” parameters respectively
As a root user, we’ll change last field of this line from “N” to “Y” to let dbstart utility start this database when it runs
2. This need to put one file dbora in /etc/init.d/ directory. In this script, we’ll define two variables, ORA_OWNERand ORACLE_HOME and then, we’ll start (or shutdown) our database by connecting with oracle user and running lsnrctl (Listener utility), dbstart (utility which starts the database) and dbshut (utility which shutdowns the database) utilities depending on our OS state.
This is the source of our dbora file:
ORACLE_HOME=/home/oracle/product/10.2.0/Db_1
ORA_OWNER=oracle
case “$1″ in
 ’start’)  #If the system is starting, then …
su – $ORA_OWNER -c “$ORACLE_HOME/bin/lsnrctl start” #Start the listener
su – $ORA_OWNER -c “$ORACLE_HOME/bin/dbstart #Start the database
  ;;
‘stop’)   #If the system is stops, that is we’re shutting down our OS, then …
  su -$ORA_OWNER -c $ORACLE_HOME/bin/dbshut
  su -$ORA_OWNER -c “$ORACLE_HOME/bin/lsnrctl stop”
  ;;
esac
3. Once you’ve saved your file into this directory, make sure that it’s executable by running:
chmod 750  dbora
4. Then you need to add the appropriate symbolic links to cause the script to be executed when the system goes down, or comes up. Create it with ln -s command.
# ln -s /etc/init.d/dbora /etc/rc.d/rc3.d/K01dbora
# ln -s /etc/init.d/
dbora /etc/rc.d/rc3.d/S99dbora
# ln -s /etc/init.d/
dbora /etc/rc.d/rc5.d/K01dbora
# ln -s /etc/init.d/
dbora /etc/rc.d/rc5.d/S99dbora
Let’s analyze these commands:
The first line creates symbolic link of our script in rc3.d directory. At startup, Linux runs /etc/rc.d/rc script at the current level (normally 3 or 5). rc3.d indicates 3rd runlevel, “K” indicates OS’s shutdown (on servers shutdown, Linux calls the scripts in /etc/rc.d/rc3/K* in order)
The second line creates another symbolic link of our script, to be run at startup of our OS, indicating “S99″ and the name of our script
Another two lines creates symoblic links for 5th runlevel.
That’s all. Your script and your service is ready for use. Just restart your OS and upon startup you’ll see your newly created service running. Then open new terminal, enter you database and issue :
SQL>SELECT status FROM v$instance;
You’ll see your database’s status is OPEN
P.S
In some releases, even when we create a new service, it doesn’t work. When we issue dbstart command manually from OS, we’re getting an error:
cat: /var/opt/oracle/oratab: No such file or directory
It has simple reason and solution
If the directory /var/opt/oracle exists during the Oracle installation the dbhome script will have the parameter ORATAB set to “/var/opt/oracle/oratab” instead of “/etc/oratab”. The normal DBCA process during a default installation will still add the instance entry to /etc/oratab.
It has two solutions:
1. You can either copy the original oratab file to this directory :
cp /etc/oratab /var/opt/oracle/
2. Or you can edit dbstart and dbshut scripts, find the variable ORATAB, and you’ll find that it’s addressing to  /var/opt/oracle/oratab file. Jus
t change it to /etc/oratab

Problemas instalação windows – senha enteprise manager

Ao fazer operações no enteprise manager – da erro de senha do usuario windows mas ele está correto.

Para corrigir isso temos que fazer o post install do windows:

http://download.oracle.com/docs/cd/B19306_01/install.102/b14316/postcfg.htm#BABFAEIG

4.3.12 Setting Credentials for the Job System to Work with Enterprise Manager

Windows systems require that you set the correct credentials for the Jobs system to work properly in Enterprise Manager. By default, the Management Agent service is installed as a LocalSystem user. When submitting jobs, such as stopping or starting the database, the user submitting the job must have the Log on as a batch job privilege enabled.
Perform the following steps to establish that privilege for any operating system user who needs to submit an Enterprise Manager job.

  1. Start the Local Security Policy tool:
    • Windows 2000: From the Start menu, select Control Panel, Administrative Tools, then Local Security Policy.
    • Windows 2003: From the Start menu, select Administrative Tools, then Local Security Policy.
    • Windows XP: From the Start menu, select Control Panel, Administrative Tools, then Local Security Policy.
    • Windows Vista: From the Start menu, select Programs, Administrative Tools, then Local Security Policy.
  2. Under the Security Settings list, expand the list to Local Policies.
  3. Under Local Policies, double-click User Rights Assignment.
  4. Under Policy, search for the Log on as a batch job policy.
    If the Management Agent service is installed as any other user (that is, not LocalSystem), then, in addition to granting the Log on as a batch job privilege, you must grant the “Windows service” user the following three privileges:
    • Act as part of the operating system
    • Adjust memory quotas for a process (This setting is named Increase memory quotas on Windows 2000.)
    • Replace a process level token
  5. With each policy, perform the following steps:
    1. Double-click the policy name.
    2. In the Properties dialog box, click Add User or Group.
    3. In the Select Users or Groups dialog box, enter the name of the user (for example, jsmith, administrator, and so on.)
      Note:

      On Windows Vista, the name of the dialog box is Select Users, Computers, or Groups.

    4. Click Check Names to check that you have entered the name correctly.
    5. Click OK.
  6. Click OK to exit the Properties dialog box, then exit Local Security Settings and Administrative Tools.
  7. Restart your computer.

If a user exists locally and at the domain level, Windows gives the local user precedence. To use the domain user, qualify the user name with the domain name. For example, to use the user joe in the ACCOUNTS domain specify the user name as ACCOUNTSjoe.

Repositorio YUM – Oracle – FREE

Se voce tiver os discos de instalacao pode copiar eles em uma pasta por exemplo /stage/
E deve adicionar essas informacoes criando um arquivo  media.repo na pasta /etc/yum.repos.d assim o yum ira funcionar normalmente.

/etc/yum.repos.d
[root@srvoracle01 yum.repos.d]# pwd
/etc/yum.repos.d
[root@srvoracle01 yum.repos.d]# cat media.repo
[media]
name=Red Hat Enterprise Linux $releasever
baseurl=file:///stage/redhat/Server/
enabled=1
gpgcheck=0

Ou seguir os passos abaixo para fazer a configuracao do repositorio do YUM.

Getting Started

   1. Download and Install Enterprise Linux
   2.

      Download and copy the appropriate yum configuration file in place, by running the

following commands as root:
      Oracle Enterprise Linux 4, Update 6 or Newer

      # cd /etc/yum.repos.d
      # mv Oracle-Base.repo Oracle-Base.repo.disabled
      # wget http://public-yum.oracle.com/public-yum-el4.repo

      Oracle Enterprise Linux 5

      # cd /etc/yum.repos.d
      # wget http://public-yum.oracle.com/public-yum-el5.repo

      Oracle VM 2

      # cd /etc/yum.repos.d
      # wget http://public-yum.oracle.com/public-yum-ovm2.repo

   3.

      Enable the appropriate repository by editing the yum configuration file
          * Open the yum configuration file in a text editor
          * Locate the section in the file for the repository you plan to update from,

e.g. [el4_u6_base]
          * Change enabled=0 to enabled=1
   4.

      Begin using yum, for example:

      yum list

      yum install firefox

You may be prompted to confirm the import of the Oracle OSS Group GPG key.

(http://public-yum.oracle.com/)

Como uma consulta pode influenciar em performance

Performance de Consultas

Otimizador – É o programa que está preparado internamentamente pelo oracle para diagnosticar qual será a melhor proposta para se recuperar a informação. Seria ele o responsável por gerar o plano (caminho) para se buscar os dados das tabelas e indices. O Oracle nas versões mais recentes ( a partir 9iR2 se não me engano) se utiliza-se de custo como padrão e não recomenda usar regra em suas consultas.

Custo – É a melhor estimativa do numero de I/Os que devem ser feitos para a execução de uma consulta.

Estimativas – São empregadas técnicas para se gerar o melhor plano e são usadas como base as estimativas. Os tipos são: seletividade, cardinalidade e custo;
A cardinalidade é derivada da seletividade e o custo depende da cardinalidade.
Se as estatisticas estão atualizadas, serão empregadas na geração dos planos, se caso não estejam serão usadas valores padrão de estatisticas usando se o parametro para isso: OPTIMIZER_DYNAMIC_SAMPLING.

Seletividade – É uma proporção estimada de um conjunto de linhas retorndas a partir de um predicado (filtro) ou uma combinação de predicados.
Fórmula: (numero de linhas que satisfazem o filtro/total de numero de linhas – baseado em histogramas)

Ex:
select last_name from employees where last_name =’JOHN’;

A fórmula pode ser melhor entendida assim:
a) O número de linhas que satisfazem o filtro para o predicado é 2.
b) O número de linhas que precisam ser lidas para satisfazer o retorno é 200 baseando se em nomes distintos que existem na coluna last_name.
A seletividade será: 2/200  = 0,01 – alta seletividade – utilizará indices.

Os valores sao entre 0.0 e 1.0, se diz uma alta seletividade: baixo numero de linhas, baixa seletividade: numero alto de linhas.

– Um indice não será usado porque temos uma baixa seletividade. É melhor percorrer a tabela ao inves de percorrer varias linhas no indice.

– Um indice pode ser usado porque temos uma alta seletividade. O numero de linhas pequeno a ser retornado é mais provavel se usar o indice para localizar rapidamente estas linhas na tabela quando esta quantidade de linhas nao exceder 3% a 4% do total de linhas da tabela.

O cálculo da seletividade se base em duas fontes:
a) Estatísticas – se caso nao exista usuará exemplos dinamicos.
b) Histogramas – Analisa a distribuição das linhas, como a quantidade de informações distintas em uma coluna (ideal para indices BTREE e quando varios valores distintos melhor para BITMAP).

Cardinalidade – Expectativa do número de linhas a serem retornadas de uma tabela para uma operação em particular. Analisa o número de linhas distinas, o número total de linhas da tabela e a seletividade. É usado para determinar junções, filtros, agrupamentos e custo de ordenação.
Fórmula – seletividade/número total de linhas baseadas no histograma

Fórmula: (numero de linhas que satisfazem o filtro/número total de linhas baseadas no histograma)/número total de linhas da tabela


Custo – É o melhor estimativa que existe para saber qual seria o número de I/Os que se devem ser feitos para satisfazer o retorno de uma consulta. Uma unidade de custo equivale a leitura de uma  leitura para um bloco em forma randômica.
São feitos os seguintes calculos para se conseguir a estimativa correta:
a) Estimativa de Tempo de leitura de blocos de forma randômica.

b) Estimativa de Tempo de leitura de blocos em leitura em lote.
c) Estimativa de Tempo de uso de CPU pelo processo para leitura de uma unidade de custo.

Geração de planos

Para se gerar planos, o melhor é utilizar da seguinte forma:
a) Sqldeveloper – da própria oracle – gratuito.
b) Linha de comandos no sqlplus.

C:UsersAndre>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.3.0 – Production on Qua Nov 17 09:41:49 2010

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

Conectado a:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 – Production
With the Partitioning, OLAP and Data Mining options

SQL> alter user scott identified by tiger account unlock;

Usuário alterado.
SQL> EXPLAIN PLAN
  2  SET STATEMENT_ID = ‘badsql1’
  3  FOR
  4  SELECT ename FROM emp;

Explicado.

SQL> SELECT cardinality “Rows”,
  2         lpad(‘ ‘,level-1)||operation||’ ‘||
  3         options||’ ‘||object_name “Plan”
  4    FROM PLAN_TABLE
  5  CONNECT BY prior id = parent_id
  6          AND prior statement_id = statement_id
  7    START WITH id = 0
  8          AND statement_id = ‘badsql1’
  9    ORDER BY id;

      Rows
———-
Plan
——————————————————————————–

        14
SELECT STATEMENT

        14
 TABLE ACCESS FULL EMP

http://download.oracle.com/docs/cd/B10500_01/server.920/a96533/ex_plan.htm

Uma consulta eficiente

Alta seletividade – Index scan – Número de retorno de linhas pequeno. Uso aconselhado de índices na pesquisa onde as tabelas são maiores que 4% do valor do total de numero de linhas retornadas. Aconselhado em sistemas comerciais ou OLTP.

Baixa seletividade – Full table scan – Número de retorno de linhas alto. Aconselhado a busca direta dos dados sem a utilização de indices. É melhor percorrer toda a tabela ao invés de usar o índice para buscar muitas linhas. Baseado em sistemas de Data Warehouse ou Bussiness Inteligence. Pode se melhorar a leitura sequencial dos registros na tabela através do aumento no valor do paramêtro: DB_FILE_MULTIBLOCK_READ_COUNT e se aplica também:

  • Tabelas pequenas
  • Alto grau de paralelismo
  • Nenhum indice atende ao filtro
  • Nenhum filtro na consulta ou baixa seletividade
  • Uso de hint – FULL (NOMETABELA)

Custo menor – Sempre que possivel analise o custo e veja as referencias para que se construa bases eficazes para a analise do otimizador.

Índices

Quando fazemos a consulta geralmente no plano, temos retornos do uso do índice e para interpreta-los:
Lembre-se INDICE BTREE significa indice balanceado.

INDEX UNIQUE SCAN – Os predicados são baseados em filtros onde existem indices de chaves unicas. É retornado um unico ROWID.

INDEX RANGE SCAN – São baseadas em consultas que necessitam varrer o índice para buscar os valores, geralmente são utilizadas quando combinamos predicados um filtro utilizando se do índice e outro em uma coluna que não está presente no índice.

INDEX FULL SCAN – Usado quando usamos no predicado o IS NOT NULL para filtrar a coluna indexada. Geralmente a consulta contém mais de dois predicados, sendo um baseado na coluna com o índice e outra não.

INDEX FAST FULL SCAN – Usado quando o otimizador irá buscar todos os dados da tabela, fazendo um full table scan isso desde que o predicado faça um filtro usando se a clausula IS NOT NULL em uma das colunas indexadas. É uma alternativa ao full table scan visto que forçamos a busca dos valores no índice na tentativa de fazer o retorno mais rapido das linhas. Para “forçar” o uso dessa técnica pode ser necessário adicionar o hint na consulta – INDEX_FFS.

INDEX SKIP SCAN – É a forma que o otimizador na leitura do indice, descarta aquele galho quando as informações do galho não satisfazem o filtro do predicado da consulta. Geralmente presente em consultas do tipo BETWEEN ou onde se encontram predicados usando colunas indexadas com os simbolos <, >, <=, >=.

INDEX JOIN SCAN – Faz um HASH JOIN, une vários indices (partes) para conseguir resolver a consulta, desde que estes indices apareçam nos predicados.

AND-EQUAL – Essá operação permite ao sistema fazer um merge entre indices combinando os diversos predicados que são usados. Em teoria poderia atingir até a cinco indices baseados em uma unica coluna e usar estes indices para fazer as buscas para os resultados. A ideia é encontrar os ROWIDs. Para forçar o uso dos vários indices, utilize o hint – AND_EQUAL.

Outras considerações

  • O retorno de número de registros é facilitado quando a coluna a ser contabilizada é NOT NULL.
  • Indice IOT é ideal quando em sistemas que necessitam buscar os valores do registro e fazem a busca pela chave primária geralmente. A IOT armazena no indice as informacoes das colunas restantes. A diferença é que em tabelas do tipo head as buscas precisam ir ao indices e depois no segmento da tabela. Na IOT isso é feito diretamente no segmento do indice.
  • Indices do tipo BITMAP são adequados para acelerar o retorno das funções de agregação. como soma, contar, max etc. O predicado IS NOT NULL pode ser beneficiado pelo indice bitmap, ja que este indice, diferente dos demais armazena valores nulos. Também indicados para colunas com grande número de valores distintos: Cores, Sexo, Cidades, Estados, Países etc.
  • Indices compostos – podem ter suas seletividades baixas quando sozinhos, mas combinados a seletividade aumenta, reduzindo o numero de registros lidos

Considerações ao analisar o plano de execução – BITMAP operations

As operações que no plano retornam a resposta como BITMAP nao diz, necessariamente que o indice percorrido é bitmap. O otimizador pode transformar em alguns casos o indice Btree em Bitmap.

BITMAP CONVERSION FROM ROWID:  Indice B-tree convertido em Bitmap e depois convertido de novo em rowid após o final da comparação.
BITMAP MERGE: Pode ser feito o merge entre varios indices bitmaps para se fazer buscas em atributos de indices diferentes.
BITMAP MINUS: è uma operação onde, se inverter as posições em outro mapa de bits pode se beneficiar a busca. Geralemente esta presentes em operações como : LAST_NAME=’Andre’ and LAST_NAME<>’LUIZ’.
BITMAP KEY ITERATION: Percorre a tabela encontrando as linhas e encontrando a correspondencia no bitmap a partir de um indice bitmap.Essa operação é feita para criar a operação: BITMAP MERGE
 BITMAP JOIN INDEX: Eficiente quando usado para facilitar as operações de JOIN entre os predicados.Faz com que a quantidade de dados retornados seja menor. Monta o mapa de bits com a chave primaria e no mesmo bloco todas as FKs facilitando o retorno das operações de JOIN.

Tablespace TEMP crescendo…

Um problema acontecendo em ambientes linux 64 bits ocorreu comigo, em uma instalação e o cliente afirmou que nao fazia SELECTs no banco.

Verifiquei no arquivo de alerta que a TABLESPACE temporaria estava estourando com frequencia.

Oracle Server – Enterprise Edition – Version: 10.2.0.2 to 10.2.0.4
This problem can occur on any platform.

Este SELECT estava ocasionando o problema, para detectar seu ambiente tem o mesmo problema teste o select abaixo no seu ambiente como SYS.

SELECT end_time, status, session_key, session_recid, session_stamp,
command_id, start_time, time_taken_display, input_type,
output_device_type, input_bytes_display, output_bytes_display,
output_bytes_per_sec_display
FROM v$rman_backup_job_details
WHERE end_time = (SELECT MAX (end_time)
FROM v$rman_backup_job_details);

Solução:

exec dbms_stats.DELETE_TABLE_STATS(‘SYS’,’X$KCCRSR’);
exec dbms_stats.LOCK_TABLE_STATS(‘SYS’,’X$KCCRSR’);

Teste novamente a consulta.

Referencia:
POOR PERFORMANCE WHILE ACCESSING V$RMAN_BACKUP_JOB_DETAILS [ID 420200.1]

crcdisk.sys – Erro maldito.

No windows 7 ou vista o erro ocorre. É uma $!#@#$# literalmente. Nem instalando, dando boot para tentar reavivar nao havia como sempre dava um errinho diferente.
Assim o que fiz foi formatar a partição, formatar colocando o linux e afins. Nao vencido nas tentativas de reaver meu windows de volta – coitado do ubuntu ainda ta fraco – mas le NTFS … entao eu fiz o que:

Instalei o windows 95 em uma particao pequena
baixei o programa ASUS UPDATE para windows

http://dlsvr01.asus.com/pub/ASUS/mb/flash/Asusupdt60701.zip

E logo em seguida fiz o seguinte – baixei as atualizações de eprom do site da asus de acordo com minha placa mae.

Atualizei a BIOS e o problema foi embora.

Portanto se seu vista ou windows 7 sofre atualizacoes da micosoft corporation voce deve atualizar a BIOS antes de atualiza-lo.

Treinamento Workshop 2 – Comentários e dicas

No ultimo treinamento, um aluno me enviou alguns dos comentários que fiz sobre os exercícios e dicas que repassei e que fui executando enquanto os slides eram repassados. Assim, como são dicas valiosas e super interessantes – decidi compartilhar. Creditos do Aluno Ronan Eustaquio. Aqui está a semana toda do treinamento, somente os comentários e dicas.

#### Primeiro dia de Curso (08/02/2010) ####
Aluno: Ronan Eustáquio de Brito
Prof.: André
Casa de Software S/A
---------------------------
-- RMAN --
dbid -> assinatura do banco
crosscheck -> verifica o status do backup ou copia no disco ou fita;

-> Verificar se o modo de arquivamento está ativado.
SQL> select archiver from v$instance;
ou
SQL> archive log list;

-> Mostrar data neste formato.
[oracle@aluno04 ~]$ export NLS_DATE_FORMAT=DDMMYYYY_HH24MI

RMAN> show all;

----
# Listar todos data files que requerem backup
# Assume que os mais recentes backups estão sendo usados durante o restore.
# Mostra 4 opções (incremental, dias, redundancia e janela de recuperação)
RMAN> report need backup;

---- Alterar o banco para modo de archive log. ----
RMAN> sql 'shutdown immeditate';
RMAN> sql 'startup mount';
RMAN> sql 'alter database archivelog';
RMAN> sql 'alter database open'; # Para alterar o banco para modo de archive log é necessário realizar até este passo.
RMAN> sql 'alter system switch logfile';
RMAN> list archivelog all;
RMAN> backup tablespace users;
RMAN> list backupset;
RMAN> delete backupset 2;

RMAN> backup as copy datafile 5 format '/u01/example.dbf';

# usando TAG's
RMAN> backup tablespace users TAG='BACKUPTBUSERS';
RMAN> delete backupset TAG='BACKUPTBUSERS';


RMAN> backup archivelog all delete all input; # para remover os logs arquivados no arquivo de redo.


# Para fazer backup completo do banco, inclusive os arquivos de controle.
RMAN> backup database plus archivelog;

----- Fazendo recuperação ----
RMAN> backup tablespace users; # faz backup da tablespace users;
RMAN> sql 'alter tablespace users offline immediate'; # para não ser usada.
RMAN> restore tablespace users; # Restaura a tablespace.
RMAN> recover tablespace users; # Aplica os devidos archivers.
RMAN> sql 'alter tablespace users online';

---- Deletar backup obsoleto ----
RMAN> list backup of tablespace users; # listar backups já feitos.
RMAN> host;
[oracle@aluno04 ~]$ rm
[oracle@aluno04 ~]$ exit
RMAN> crosscheck backupset; # visualiza os backups já feitos.
RMAN> delete expired backupset; # deletar backups expirados.

---- Pratica 3 Usando recovery manager ----
# Exercício 6
RMAN> list backup of database;
RMAN> backup as copy datafile 1 format '/u01/system01.copy';
RMAN> backup as copy datafile 4 format '/u01/example01.dbf';

# Exercício 7
RMAN> crosscheck backupset;

# Exercício 8
RMAN> report need backup;

# Exercício 9
RMAN> configure exclude for tablespace staging clear;


---- Exemplo para Recriar índice. ----
SQL> create tablespace indices;
SQL> create table cliente (codigo number, nome varchar2(50));
SQL> create index cliente_idx on cliente(nome) tablespace indices;
SQL> insert into cliente values (1, 'luiz');
SQL> commit;
SQL> select index_name, status from dba_indexes where index_name = 'CLIENTE_IDX';
SQL> drop tablespace indices including contents and datafiles;
SQL> select index_name, status from dba_indexes where index_name = 'CLIENTE_IDX';
SQL> create tablespace indices;
SQL> create index cliente_idx on cliente(nome) tablespace indices;
SQL> alter table cliente move tablespace users;
SQL> select index_name, status from dba_indexes where index_name = 'CLIENTE_IDX';
SQL> alter index cliente_idx rebuild tablespace indices;

---- Recriando o arquivo de senha para autenticação. ----
[oracle@aluno04 ~]$ orapwd file=orapworcl.ora password=oracle entries=5

# este arquivo deve ficar na pasta $ORACLE_HOME/dbs
# Obs.: Não esquecer de setar o parâmetro REMOTE_LOGIN_PASSWORDFILE para EXCLUSIVE;
# Para verificar como está setado execute o comando:
SQL> show parameter remote_login_passwordfile

#################################################################################
#### Segundo dia de Curso (09/02/2010) ####

Recuperação completa: Onde não há perda de dados.
Recuperação incompleta: Por exemplo, recuperar informação de 1 hora atrás.

Ponto de restauração: Ponto criado para fazer um recover até aquele momento. Utilizado quando não se tem certeza
do que está fazendo, por exemplo.
Ex.:
SQL> CREATE RESTORE POINT before_load;
RMAN> RECOVER DATABASE UNTIL RESTORE POINT before_load;

# Fazer backup full do banco
RMAN> backup full database plus archivelog delete all input tag=BACKUPFULL;

---- Exercício 5: Recuperação de banco de dados. ----

Dica: Para mudar o formato da data.
SQL> alter session set nls_date_format='DD/MM/YYYY HH24:MI';

Exercício 1:
[oracle@aluno04 labs]$ sqlplus hr/hr @lab_05_01.sql

Exercício 2:
SQL> select * from job_history;

Exercício 3:
SQL> shutdown immediate;
SQL> startup mount
[oracle@aluno06 labs]$ export NLS_DATE_FORMAT="DD/MM/YYYY HH24:MI"
[oracle@aluno06 labs]$ export NLS_LANG="BRAZILIAN PORTUGUESE_BRAZIL.WE8ISO8859P1"

RMAN> list backupset; # Observe que a partir deste momento o relatório de backup está sendo apresentado em portugues.
RMAN> RUN {
SET UNTIL TIME = '09/02/2010 14:02';
RESTORE DATABASE;
RECOVER DATABASE;
sql 'ALTER DATABASE OPEN RESETLOGS';
}

---- Capitulo 5: Flashback ----
---- Simular situação de recuperação utilizando flashback ----

sqlplus hr/hr
SQL> create table dados(codigo number, nome varchar2(100));
SQL> insert into dados values (1, 'xxxxx');
SQL> commit;
SQL> show recyclebin; # Observe que aqui não tem nada na lixeira, uma vez que este usuário não "deletou" nada.
SQL> drop table dados; # Dropando a tabela;
SQL> show recyclebin; # Mostrar dados que estão na lixeira. Note que a tabela dropada está lá.
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
DADOS BIN$fy2774dMAnvgQKjAEAxxMw==$0 TABLE 2010-02-09:14:51:50

SQL> flashback table dados to before drop; # Comando utilizado para recuperar dados que está na lixeira (flashback)
SQL> select * from dados; # Neste ponto a tabela dados já foi restaurada;


---- Configurando o flashback ----
SQL> conn / as sysdba
SQL> shutdown immediate
SQL> startup mount exclusive # exclusive para impedir que outros dba's conectem no banco.
SQL> alter system set db_flashback_retention_target=2880 scope=both;
SQL> alter database flashback on;
SQL> alter database open;

---- Pontos de restauração garantidos ----
Um ponto de restauração garantido assegura que você possa executar um comando FLASHBACK DATABASE para um SCN em qualquer momento.

---- Exercício 6: Flashback ----
SQL> create restore point before_load guarantee flashback database # Criar um ponto de restauração por medidas de segurança.
SQL> select CURRENT_SCN from V$DATABASE;
CURRENT_SCN
-----------
521807

SQL> SELECT SUM(SALARY) FR OM HR.EMPLOYEES;

SUM(SALARY)
-----------
679050

SQL> SELECT COUNT(*) FROM HR.JOB_HISTORY;

COUNT(*)
----------
15

---- Agora temos as informações a serem comparadas. ----
[oracle@aluno06 labs]$ sqlplus hr/hr @lab_06_04.sql # execução do script do exercício
[oracle@aluno06 labs]$ sqlplus / as sysdba
SQL> SELECT SUM(SALARY) FROM HR.EMPLOYEES;
SQL> shutdown immediate;
SQL> startup mount;
RMAN> flashback database to scn=521807; # o número SCN é o mesmo que executamos no select acima.
RMAN> alter database open resetlogs;

---- Capitulo 7: Lidando com banco de dados danificados. ----
-- DBVerify
SQL> select name from v$datafile
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/system01.dbf
/u01/app/oracle/oradata/orcl/undotbs01.dbf
/u01/app/oracle/oradata/orcl/sysaux01.dbf
/u01/app/oracle/oradata/orcl/users01.dbf
/u01/app/oracle/oradata/orcl/example01.dbf

[oracle@aluno06 labs]$ dbv file=/u01/app/oracle/oradata/orcl/system01.dbf blocksize=8192 # Executando o dbv para verificar o datafile, em caso de corrupção.

-- EXP
[oracle@aluno06 labs]$ exp hr/hr file=dadoshr.dmp # Todo esquema do usuário hr foi exportado para o arquivo dadoshr.dmp

---- Laboratorio 7: ----
Exercício 1:
SQL> select file_id, block_id from dba_extents where segment_name = 'DEPARTMENTS';
ou
SQL> select SEGMENT_NAME, TABLESPACE_NAME, HEADER_FILE, HEADER_BLOCK # Este comando não mostrou o bloco correto.
SQL> from DBA_SEGMENTS
SQL> WHERE SEGMENT_NAME = 'DEPARTMENTS';

id do arquivo: 5
id do bloco: 49

[oracle@aluno06 labs]$ sh lab_07_02.sh /u01/app/oracle/oradata/orcl/example01.dbf 49 8192
[oracle@aluno06 labs]$ sqlplus / as sysdba
SQL> select * from hr.departments;
Em caso de não retornar erro, é necessário limpar o buffer_cache;
Com o usuário system execute o comando abaixo.
SQL> alter system flush buffer_cache;
SQL> select * from hr.departments;
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 5, block # 51)
ORA-01110: data file 5: '/u01/app/oracle/oradata/orcl/example01.dbf'

Neste caso vamos recuperar usando o dbv (DB Verify) no arquivo de dados corrompido e informando o tamanho do bloco.
[oracle@aluno06 labs]$ dbv file=/u01/app/oracle/oradata/orcl/example01.dbf blocksize=8192

Obs.: os blocos corrompidos foram logados no log de alert. Mas a saída do comando dbv também mostra os blocos corrompidos. Que no meu caso foram os blocos 49,50,51 e 52
SQL> show parameter background_dump_dest
/u01/app/oracle/admin/orcl/bdump
[oracle@aluno06 labs]$ vi /u01/app/oracle/admin/orcl/bdump/alert_orcl.log

Logo em seguida, dentro do RMAN execute o comando de recuperação.
RMAN> blockrecover datafile 5 block 49,50,51,52;

Por fim, execute um select dentro da tabela hr.departments para verificar sua integridade.
SQL> select * from hr.departments;

Capitulo 8: Monitoramento e Gerenciamento de memória

SQL> show parameter db_block_size
SQL> show parameter db_cache_size
SQL> show parameter db_keep_cache_size
SQL> alter table hr.departments storage (buffer_pool keep); # este comando não terá validade a menos que defina o parâmetro db_keep_cache_size, pois este é configurado manualmente pelo DBA.
SQL> alter system set db_keep_cache_size=50M scope=both;

SGA_MAX_SIZE é o tamanho máximo que se pode definir para sga. Portanto, SGA_TARGET tem sempre que ser igual ou menor que ela.

alter system set sga_target=500M; # Definindo o tamanho do SGA_TARGET manualmente.

Comportamento de Parâmetros Auto-ajustáveis da SGA
SQL> select sum(bytes)/1024/1024 size_mb
2 from v$sgastat where pool = 'shared pool';

SQL> select component, current_size/1024/1024 size_mb
2 from v$sga_dynamic_components;

---- Laboratorio 8: ----
SQL> shutdown immediate
SQL> startup pfile='/home/oracle/labs/init_sgalab.ora';
SQL> @/home/oracle/labs/lab_08_02.sql
SQL> conn / as sysdba
SQL> @/home/oracle/labs/lab_08_04.sql # Este script deve ser executado várias vezes para se ver o comportamento do banco de dados ao longo do tempo.
SQL> shutdown immediate
SQL> startup

#################################################################################
#### Terceiro dia de Curso (10/02/2010) ####


V$EVENT_NAME -> Eventos de espera Oracle.


Sql Access Advisor
SQL> select * from hr.employees, dba_objects
2 union all
3 select * from hr.employees, dba_objects
4 where employee_id in (100,101)
5 order by 5,7,8;

Para monitorar a execução dessa SQL Advisor centro -> Advisor de ajuste SQL -> Principal Atividade


#################################################################################
#### Quarto dia de Curso (11/02/2010) ####

---- ASM ----

[oracle@aluno06 labs]$ dbca # Vamos criar o ASM - Gerenciamento de Armazenamento Automático. Para isso, é necessário rodar o script "localconfig".

[root@aluno06 ~]# /u01/app/oracle/product/10.2.0/db_1/bin/localconfig add

Posteriormente, continue no assitente do dbca. Na ultima etapa deste assistente, passo 2 de 2, onde aparecem os grupos
de discos disponíveis, clique em criar novo para criar um novo disc group.

Na linha de comando, execute o comando abaixo

[oracle@aluno06 labs]$ pgrep -lf pmon
5432 ora_pmon_orcl
8792 asm_pmon_+ASM

Isso quer dizer que o ASM está no ar.

Carregue a variável de ambiente ORACLE_SID para verificar o ASM

[oracle@aluno06 labs]$ export ORACLE_SID=+ASM
[oracle@aluno06 labs]$ sqlplus / as sysdba
SQL> select instance_name, status from v$instance;
INSTANCE_NAME STATUS
---------------- ------------
+ASM STARTED

Na tela do Create Disk Group, em Disc Group Name coloque DGROUP1, adicione os 4 primeiros discos e clique em ok. Depois finalize o assistente.

---- Laboratorio 12: ----
[oracle@aluno06 labs]$ export ORACLE_SID=+ASM
[oracle@aluno06 labs]$ sqlplus / as sysdba
SQL> !ps -ef |grep ASM # Para listar os processos no so a partir do sqlplus.
SQL> select name, state,type total_mb, free_mb from v$asm_diskgroup;

[oracle@aluno06 labs]$ export ORACLE_SID=orcl
[oracle@aluno06 labs]$ sqlplus / as sysdba
SQL> create tablespace tbsasm DATAFILE '+DGROUP1' SIZE 200M;
SQL> drop tablespace tbsasm including contents and datafiles;
SQL> create tablespace tbsasmmig DATAFILE 'asmmig1.dbf' SIZE 10M;
SQL> create table t2(c number) tablespace tbsasmmig;
SQL> insert into t2 values(1);
SQL> commit;
SQL> host rman target / nocatalog;
RMAN> sql "alter tablespace tbsasmmig offline";
RMAN> backup as copy tablespace tbsasmmig format '+DGROUP1';
RMAN> switch tablespace tbsasmmig to copy;
RMAN> sql "alter tablespace tbsasmmig online";
RMAN> exit
SQL> column file_name format a48
SQL> select tablespace_name, file_name from dba_data_files;
SQL> select * from t2;
SQL> drop tablespace tbsasmmig including contents and datafiles;
SQL> host rm $ORACLE_HOME/dbs/asmmig1.dbf

#################################################################################
#### Quinto dia de Curso (12/02/2010) ####

---- Capitulo 15: OWM Oracle Wallet Manager ----
owm # Ferramenta para criar certificados digitais.


---- Clonar um banco de dados ----
Os passos abaixo servem como orientação para clona r um banco de dados. Uma das utilizações para isto, por exemplo, é quando se tem um banco de produção e você quer criar um banco de homologação identico ao de produção.

[oracle@aluno06 u01]$ mkdir -p /u01/bdo/{adump,bdump,cdump,udump}
[oracle@aluno06 bdo]$ sqlplus / as sysdba
SQL> startup mount # Obs.: O banco original não pode estar aberto. Caso esteja, atrapalha todo o processo.
SQL> create pfile='/u01/bdo/init.ora' from spfile;
SQL> show parameter background_dump_dest;
SQL> host rm /u01/app/oracle/admin/orcl/udump/* # Este comando serve para remover tudo quanto é lixeira existente neste diretório para que não atrapalhe o procedimento.
SQL> alter database backup controlfile to trace; # Este comando vai criar o arquivo orcl_ora_8778.trc que servirá de exemplo para o nosso script.
SQL> select status from v$instance;
[oracle@aluno06 bdo]$ vi /u01/app/oracle/admin/orcl/udump/orcl_ora_8778.trc # Alterar este arquivo e deixá-lo como está abaixo. Lembre-se que você deve trocar o caminho do orcl para o novo bdo.

STARTUP NOMOUNT pfile='/u01/bdo/init.ora';
CREATE CONTROLFILE SET DATABASE "BDO" RESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u01/bdo/redo01.log' SIZE 50M,
GROUP 2 '/u01/bdo/redo02.log' SIZE 50M,
GROUP 3 '/u01/bdo/redo03.log' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'/u01/bdo/system01.dbf',
'/u01/bdo/undotbs01.dbf',
'/u01/bdo/sysaux01.dbf',
'/u01/bdo/users01.dbf',
'/u01/bdo/example01.dbf'
CHARACTER SET AL32UTF8;
alter database open resetlogs;
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/bdo/temp01.dbf';
:w /u01/bdo/control.sql
:q

[oracle@aluno06 bdo]$ vi /u01/bdo/init.ora # Neste passo deve-se trocar todo o caminho do orcl para o bdo assim como foi feito no arquivo acima.

*.audit_file_dest='/u01/bdo/adump'
*.background_dump_dest='/u01/bdo/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/u01/bdo/control01.ctl','/u01/bdo/control02.ctl','/u01/bdo/control03.ctl'
*.core_dump_dest='/u01/bdo/cdump'
*.db_block_size=8192
*.db_cache_size=251658240
*.db_create_file_dest='/u01/bdo'
*.db_domain='oracle.com'
*.db_file_multiblock_read_count=16
*.db_flashback_retention_target=2880
*.db_keep_cache_size=54525952
*.db_name='bdo'
*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.dispatchers='(PROTOCOL=TCP) (SERVICE=bdoXDB)'
*.java_pool_size=4194304
*.job_queue_processes=10
*.large_pool_size=4194304
*.open_cursors=300
*.pga_aggregate_target=200278016
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.resource_manager_plan='SYSTEM_PLAN'
*.sga_target=578813952
*.shared_pool_size=201326592
*.streams_pool_size=0
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/u01/bdo/udump'

[oracle@aluno06 orcl]$ cp /u01/app/oracle/oradata/orcl/* /u01/bdo/ # aqui você deverá copiar toda a estrutura do banco atual para o novo.

[oracle@aluno06 bdo]$ sqlplus / as sysdba
SQL> alter database open; # inicie o banco atual para se ter certeza do que está fazendo.

[oracle@aluno06 bdo]$ export ORACLE_SID=bdo # agora vamos para o passo do novo banco.
[oracle@aluno06 bdo]$ rm *.ctl # remover os arquivos de controle, pois o comando dentro do script irá criá-los. Caso tenha algum arquivo .ctl, o comando não funcionará e retornará erro.
[oracle@aluno06 bdo]$ sqlplus / as sysdba
Connected to an idle instance.
SQL> @control.sql
SQL> exit

[oracle@aluno06 bdo]$ emca -repos recreate # Aqui você deve passar as informações do banco como, sid do banco, porta, senhas, etc.
[oracle@aluno06 bdo]$ emca -config bd # No passo acima, vai dar erro uma vez que o caminho acima não existe. Isso será resolvido com este passo para que reconfigure todo o banco. Será necessário passar toda a informação conforme descrito no passo acima.


Comandos uteis oracle RAC – Utilitarios de manutenção rac 11g

11g RAC Administration and Maintenance Tasks and Utilities:

Task List:



Checking CRS Status:

The below two commands are generally used to check the status of CRS. The first command lists the status of CRS
on the local node where as the other command shows the CRS status across all the nodes in Cluster.

crsctl check crs <<-- for the local node
crsctl check cluster <<-- for remote nodes in the cluster

[root@node1-pub ~]# crsctl check crs
Cluster Synchronization Services appears healthy
Cluster Ready Services appears healthy
Event Manager appears healthy
[root@node1-pub ~]#

Checking Viability of CSS across nodes:

crsctl check cluster

For this command to run, CSS needs to be running on the local node. The “ONLINE” status for remote node says that CSS is running on that node.
When CSS is down on the remote node, the status of “OFFLINE” is displayed for that node.

[root@node1-pub ~]# crsctl check cluster
node1-pub    ONLINE
node2-pub    ONLINE


Viewing Cluster name:

I use below command to get the name of Cluster. You can also dump the ocr and view the name from the dump file.

ocrdump -stdout -keyname SYSTEM | grep -A 1 clustername | grep ORATEXT | awk '{print $3}'

[root@node1-pub ~]# ocrdump -stdout -keyname SYSTEM | grep -A 1 clustername | grep ORATEXT | awk '{print $3}'
test-crs
[root@node1-pub ~]#

OR

ocrconfig -export /tmp/ocr_exp.dat -s online
for i in `strings /tmp/ocr_exp.dat | grep -A 1 clustername` ; do if [ $i != 'SYSTEM.css.clustername' ]; then echo $i; fi; done



[root@node1-pub ~]# ocrconfig -export /tmp/ocr_exp.dat -s online
[root@node1-pub ~]# for i in `strings /tmp/ocr_exp.dat | grep -A 1 clustername` ; do if [ $i != 'SYSTEM.css.clustername' ]; then echo $i; fi; done
test-crs
[root@node1-pub ~]#

OR

Oracle creates a directory with the same name as Cluster under the $ORA_CRS_HOME/cdata. you can get the cluster name from this directory as well.

[root@node1-pub ~]# ls /u01/app/crs/cdata
localhost  test-crs


Viewing No. Of Nodes configured in Cluster:

The below command can be used to find out the number of nodes registered into the cluster.
It also displays the node’s Public name, Private name and Virtual name along with their numbers.

olsnodes -n -p -i

[root@node1-pub ~]# olsnodes -n -p -i
node1-pub       1       node1-prv       node1-vip
node2-pub       2       node2-prv       node2-vip

Viewing Votedisk Information:

The below command is used to view the no. of Votedisks configured in the Cluster.

crsctl query css votedisk

[root@node1-pub ~]# crsctl query css votedisk
 0.     0    /u02/ocfs2/vote/VDFile_0
 1.     0    /u02/ocfs2/vote/VDFile_1
 2.     0    /u02/ocfs2/vote/VDFile_2
Located 3 voting disk(s).
[root@node1-pub ~]#

[root@node1-pub ~]# crsctl check crs
Cluster Synchronization Services appears healthy
Cluster Ready Services appears healthy
Event Manager appears healthy
[root@node1-pub ~]#

Viewing OCR Disk Information:

The below command is used to view the no. of OCR files configured in the Cluster. It also displays the version of OCR
as well as storage space information. You can only have 2 OCR files at max.

ocrcheck

[root@node1-pub ~]# ocrcheck
Status of Oracle Cluster Registry is as follows :
         Version                  :          2
         Total space (kbytes)     :     262120
         Used space (kbytes)      :       3848
         Available space (kbytes) :     258272
         ID                       :  744414276
         Device/File Name         : /u02/ocfs2/ocr/OCRfile_0
                                    Device/File integrity check succeeded
         Device/File Name         : /u02/ocfs2/ocr/OCRfile_1
                                    Device/File integrity check succeeded
 
         Cluster registry integrity check succeeded
 

Various Timeout Settings in Cluster:

Disktimeout:
    Disk Latencies in seconds from node-to-Votedisk. Default Value is 200. (Disk IO)
Misscount:
    Network Latencies in second from node-to-node (Interconnect). Default Value is 60 Sec (Linux) and 30 Sec in Unix platform. (Network IO)
    Misscount < Disktimeout

NOTE: Do not change them without contacting Oracle Support. This may cause logical corruption to the Data.

IF
  (Disk IO Time > Disktimeout) OR (Network
IO time > Misscount)
THEN
   REBOOT NODE
ELSE
   DO NOT REBOOT
END IF;

crsctl get css disktimeout
crsctl get css misscount
crsctl get css  reboottime


[root@node1-pub ~]# crsctl get css disktimeout
200

[root@node1-pub ~]# crsctl get css misscount
Configuration parameter misscount is not defined. <<<<< This message indicates that the Misscount is not set maually and it is set to it’s
Default Value On Linux, it is default to 60 Second. If you want to chang it, you can do that as below. (Not recommended)

[root@node1-pub ~]# crsctl set css misscount 100
Configuration parameter misscount is now set to 100.
[root@node1-pub ~]# crsctl get css misscount
100

The below command sets the value of misscount back to its Default values:

 crsctl unset css misscount

[root@node1-pub ~]# crsctl unset css misscount

[root@node1-pub ~]# crsctl get css  reboottime
3

Add/Remove OCR file in Cluster:


Removing OCR File

(1) Get the Existing OCR file information by running ocrcheck utility.

[root@node1-pub ~]# ocrcheck
Status of Oracle Cluster Registry is as follows :
         Version                  :          2
         Total space (kbytes)     :     262120
         Used space (kbytes)      :       3852
         Available space (kbytes) :     258268
         ID                       :  744414276
         Device/File Name         : /u02/ocfs2/ocr/OCRfile_0 <-- OCR
                                    Device/File integrity check succeeded
         Device/File Name         : /u02/ocfs2/ocr/OCRfile_1 <-- OCR Mirror
                               &n
bsp;    Device/File integrity check succeeded

         Cluster registry integrity check succeeded

(2) The First command removes the OCR mirror (/u02/ocfs2/ocr/OCRfile_1). If you want to remove the OCR
      file (/u02/ocfs2/ocr/OCRfile_1) run the next command.

ocrconfig -replace ocrmirror
ocrconfig -replace ocr

[root@node1-pub ~]# ocrconfig -replace ocrmirror
[root@node1-pub ~]# ocrcheck
Status of Oracle Cluster Registry is as follows :
         Version                  :          2
         Total space (kbytes)     :     262120
         Used space (kbytes)      :       3852
         Available space (kbytes) :     258268
         ID                       :  744414276
         Device/File Name         : /u02/ocfs2/ocr/OCRfile_0 <<– OCR File
                                    Device/File integrity check succeeded

                                    Device/File not configured  <– OCR Mirror not existed any more

         Cluster registry integrity check succeeded

Adding OCR

You need to add OCR or OCR Mirror file in a case where you want to move the existing OCR file location to the different Devices.
The below command add ths OCR mirror file if OCR file alread exists.

(1) Get the Current status of OCR:

[root@node1-pub ~]# ocrconfig -replace ocrmirror
[root@node1-pub ~]# ocrcheck
Status of Oracle Cluster Registry is as follows :
         Version                  :          2
         Total space (kbytes)     :     262120
         Used space (kbytes)      :       3852
         Available space (kbytes) :     258268
         ID                       :  744414276
         Device/File Name         : /u02/ocfs2/ocr/OCRfile_0 <<– OCR File
                                    Device/File integrity check succeeded

                                    Device/File not configured  <– OCR Mirror does not exist

         Cluster registry integrity check succeeded

As You can see, I only have one OCR file but not the second file which is OCR Mirror.
So, I can add second OCR (OCR Mirror) as below command.

ocrconfig -replace ocrmirror

[root@node1-pub ~]# ocrconfig -replace ocrmirror /u02/ocfs2/ocr/OCRfile_1
[root@node1-pub ~]# ocrcheck
Status of Oracle Cluster Registry is as follows :
         Version                  :          2
         Total space (kbytes)     :     262120
         Used space (kbytes)      :       3852
         Available space (kbytes) :     258268
         ID                       :  744414276
         Device/File Name         : /u02/ocfs2/ocr/OCRfile_0
                                    Device/File integrity check succeeded
         Device/File Name         : /u02/ocfs2/ocr/OCRfile_1
                                    Device/File integrity check succeeded

         Cluster registry integrity check succeeded

You can have at most 2 OCR devices (OCR itself and its single Mirror) in a cluster. Adding extra Mirror gives you below error message

[root@node1-pub ~]# ocrconfig -replace ocrmirror /u02/ocfs2/ocr/OCRfile_2
PROT-21: Invalid parameter
[root@node1-pub ~]#


Add/Remove Votedisk file in Cluster:

Adding Votedisk:

Get the existing Vote Disks associated into the cluster. To be safe, Bring crs cluster stack down on all the nodes
but one on which you are going to add votedisk from.

(1) Stop CRS on all the nodes in cluster but one.

[root@node2-pub ~]# crsctl stop crs


(2) Get the list of Existing Vote Disks

crsctl query css votedisk

[root@node1-pub ~]# crsctl query css votedisk
 0.     0    /u02/ocfs2/vote/VDFile_0
 1.     0    /u02/ocfs2/vote/VDFile_1
 2.     0    /u02/ocfs2/vote/VDFile_2
Located 3 voting disk(s).

(3) Backup the VoteDisk file

Backup the existing votedisks as below as oracle:

dd if=/u02/ocfs2/vote/VDFile_0 of=$ORACLE_BASE/bkp/vd/VDFile_0

[root@node1-pub ~]# su – oracle
[oracle@node1-pub ~]$ dd if=/u02/ocfs2/vote/VDFile_0 of=$ORACLE_BASE/bkp/vd/VDFile_0
41024+0 records in
41024+0 records out
[oracle@node1-pub ~]$

(4) Add an Extra Votedisk into the Cluster:

    If it is a OCFS, then touch the file as oracle. On raw devices, initialize the raw devices using “dd” command

touch /u02/ocfs2/vote/VDFile_3 <<-- as oracle
crsctl add css votedisk /u02/ocfs2/vote/VDFile_3 <<-- as oracle
crsctl query css votedisks

[root@node1-pub ~]# su – oracle
[oracle@node1-pub ~]$ touch /u02/ocfs2/vote/VDFile_3
[oracle@node1-pub ~]$
crsctl add css votedisk /u02/ocfs2/vote/VDFile_3
Now formatting voting disk: /u02/ocfs2/vote/VDFile_3.
Successful addition of voting disk /u02/ocfs2/vote/VDFile_3.

(5) Confirm that the file has been added successfully:

[root@node1-pub ~]# ls -l /u02/ocfs2/vote/VDFile_3
-rw-r—–  1 oracle oinstall 21004288 Oct  6 16:31 /u02/ocfs2/vote/VDFile_3
[root@node1-pub ~]# crsctl query css votedisks
Unknown parameter: votedisks
[root@node1-pub ~]# crsctl query css votedisk
 0.     0    /u02/ocfs2/vote/VDFile_0
 1.     0    /u02/ocfs2/vote/VDFile_1
 2.     0    /u02/ocfs2/vote/VDFile_2
 3.     0    /u02/ocfs2/vote/VDFile_3
Located 4 voting disk(s).
[root@node1-pub ~]#

Removing Votedisk:

Removing Votedisk from the cluster is very simple. Tthe below command removes the given votedisk from cluster configuration.

crsctl delete css votedisk /u02/ocfs2/vote/VDFile_3

[root@node1-pub ~]# crsctl delete css votedisk /u02/ocfs2/vote/VDFile_3
Successful deletion of voting disk /u02/ocfs2/vote/VDFile_3.
[root@node1-pub ~]#

[root@node1-pub ~]# crsctl query css votedisk
 0.     0    /u02/ocfs2/vote/VDFile_0
 1.     0    /u02/ocfs2/vote/VDFile_1
 2.     0    /u02/ocfs2/vote/VDFile_2
Located 3 voting disk(s).
[root@node1-pub ~]#

Backing Up OCR

Oracle performs physical backup of OCR devices every 4 hours under the default backup direcory $ORA_CRS_HOME/cdata/
and then it rolls that forward to Daily, weekly and monthly backup. You can get the backup information by executing below command.

ocrconfig -showbackup

[root@node1-pub ~]# ocrconfig -showbackup

node2-pub     2007/09/03 17:46:47     /u01/app/crs/cdata/test-crs/backup00.ocr

node2-pub     2007/09/03 13:46:45     /u01/app/crs/cdata/test-crs/backup01.ocr

node2-pub     2007/09/03 09:46:44     /u01/app/crs/cdata/test-crs/backup02.ocr

node2-pub     2007/09/03 01:46:39     /u01/app/crs/cdata/test-crs/day.ocr

node2-pub     2007/
09/03 01:46:39     /u01/app/crs/cdata/test-crs/week.ocr
[root@node1-pub ~]#

Manually backing up the OCR

ocrconfig -manualbackup <<--Physical Backup of OCR

The above command backs up OCR under the default Backup directory. You can export the contents of the OCR using below command (Logical backup).

ocrconfig -export /tmp/ocr_exp.dat -s online <<-- Logical Backup of OCR

Restoring OCR

The below command is used to restore the OCR from the physical backup. Shutdown CRS on all nodes.

ocrconfig -restore

Locate the avialable Backups

[root@node1-pub ~]# ocrconfig -showbackup

node2-pub     2007/09/03 17:46:47     /u01/app/crs/cdata/test-crs/backup00.ocr

node2-pub     2007/09/03 13:46:45     /u01/app/crs/cdata/test-crs/backup01.ocr

node2-pub     2007/09/03 09:46:44     /u01/app/crs/cdata/test-crs/backup02.ocr

node2-pub     2007/09/03 01:46:39     /u01/app/crs/cdata/test-crs/day.ocr

node2-pub     2007/09/03 01:46:39     /u01/app/crs/cdata/test-crs/week.ocr

node1-pub     2007/10/07 13:50:41     /u01/app/crs/cdata/test-crs/backup_20071007_135041.ocr

Perform Restore from previous Backup

[root@node2-pub ~]# ocrconfig -restore /u01/app/crs/cdata/test-crs/week.ocr

The above command restore the OCR from week old backup.
If you have logical backup of OCR (taken using export option), then You can import it with the below command.

ocrconfig -import /tmp/ocr_exp.dat

Restoring Votedisks

  • Shutdown CRS on all the nodes in Cluster.
  • Locate the current location of the Votedisks
  • Restore each of the votedisks using “dd” command from the previous good backup of Votedisk taken using the same “dd” command.
  • Start CRS on all the nodes.

crsctl stop crs
crsctl query css votedisk
dd if= of= <<-- do this for all the votedisks
crsctl start crs

Changing Public and Virtual IP Address:

Current Config                                               Changed to

Node 1:

Public IP:       216.160.37.154                              192.168.10.11
VIP:             216.160.37.153                              192.168.10.111
subnet:          216.160.37.159                              192.168.10.0
Netmask:         255.255.255.248                             255.255.255.0
Interface used:  eth0                                        eth0
Hostname:        node1-pub.hingu.net                         node1-pub.hingu.net

Node 2:

Public IP:       216.160.37.156                              192.168.10.22
VIP:             216.160.37.157                              192.168.10.222
subnet:   &nbsp
;      216.160.37.159                              192.168.10.0

Netmask:         255.255.255.248                             255.255.255.0
Interface used:  eth0                                        eth0
Hostname:        node1-pub.hingu.net                         node2-pub.hingu.net

=======================================================================
(A)

Take the Services, Database, ASM Instances and nodeapps down on both the Nodes in Cluster. Also disable the nodeapps, asm and database instances to prevent them from restarting in case if this node gets rebooted during this process.

srvctl stop service -d test
srvctl stop database -d test
srvctl stop asm -n node1-pub
srvctl stop asm -n node2-pub
srvctl stop nodeapps -n node1-pub,node1-pub2
srvctl disable instance -d test -i test1,test2
srvctl disable asm -n node1-pub
srvctl disable asm -n node2-pub
srvctl disable nodeapps -n node1-pub
srvctl disable nodeapps -n node2-pub


(B)
Modify the /etc/hosts and/or DNS, ifcfg-eth0 (local node) with the new IP values
on All the Nodes

(C)
Restart the specific network interface in order to use the new IP.

ifconfig eth0 down
ifconfig eth0 up


Or, you can restart the network.
CAUTION: on NAS, restarting entire network may cause the node to be rebooted.

(D)
Update the OCR with the New Public IP.
In case of public IP, you have to delete the interface first and then add it back with the new IP address.

As oracle user, Issue the below command:

oifcfg delif -global eth0
oifcfg setif -global eth0/192.168.10.0:public


(E)
Update the OCR with the New Virtual IP.
Virtual IP is part of the nodeapps and so you can modify the nodeapps to update the Virtual IP information.

As privileged user (root), Issue the below commands:

srvctl modify nodeapps -n node1-pub -A 192.168.10.111/255.255.255.0/eth0 <-- for Node 1
srvctl modify nodeapps -n node1-pub -A 192.168.10.222/255.255.255.0/eth0 <-- for Node 2


(F)
Enable the nodeapps, ASM, database Instances for all the Nodes.

srvctl enable instance -d test -i test1,test2
srvctl enable asm -n node1-pub
srvctl enable asm -n node2-pub
srvctl enable nodeapps -n node1-pub
srvctl enable nodeapps -n node2-pub


(G)
Update the listener.ora file on each nodes with the correct IP addresses in case if it uses the IP address instead of the hostname.

(H)
Restart the Nodeapps, ASM and Database instance

srvctl start nodeapps -n node1-pub
srvctl start nodeapps -n node2-pub
srvctl start asm -n node1-pub
srvctl start asm -n node2-pub
srvctl start database -d test

=======================================================================

Fonte: http://www.oracledba.org/11g/rac/11g_RAC_Admin_Utilities.html