quinta-feira, 9 de novembro de 2017

Aplicando RUR 12.2.0.1.171017 em single instance com GRID

Olá pessoal.

Vocês já aplicaram patches na versão 12.2.0.1 do Oracle? 

Naquela pegada de roteiros para tentar facilitar primeiro a minha vida depois a dos amigos DBA's, montei o passo a passo abaixo.

Mas antes de aplicar seria bom você se atentar as mudanças de nomenclatura e mesmo no conceito dos patches.

Bem a grosso modo e somente para traçar um paralelo com a maneira mais antiga já que na verdade as diferenças são bem maiores que essas abaixo, seria mais ou menos assim: 

- No lugar dos antigos PSU's (Patch Set Updates ) entraram os RU's (Release Updates).

- Já no lugar dos famosos BP's (Proactive Bundle Patches) temos agora os RUR's (Release Update Revisions).

Essa seria a nova organização dos patches:

Retirada do blog do Mike Dietrich

Obviamente não é tão simples assim, o conceito dos patches mudaram como eu disse lá no começo e essa minha definição é extremamente simplista e ilustrativa.

No note "Release Update Introduction and FAQ (Doc ID 2285040.1)" você encontra muitas informações sobre as mudanças. 

Se quiser algo mais mastigado, veja o ótimo texto no site do Mike Dietrich: [Differences between PSU/BP and RU/RUR]

Não deixe de ler, vale muito a pena além de ser bastante importante.

Bom, se você já leu ou já sabe das mudanças, vamos ao que interessa e aplicar o RUR 12.2.0.1.171017 que até o momento da escrita desse artigo é o mais recente.

Vamos ao roteiro da atualização (as saídas dos comandos foram editadas somente com as partes importantes):

1) Sempre verificar a última versão do OPATCH. Isso pode ser feito verificando o note abaixo:

Veja o note:
- How To Download And Install The Latest OPatch(6880880) Version (Doc ID 274526.1)

2) Localizar o patch mais atualizado - RUR ou RU
Veja os notes:
- Release Update Introduction and FAQ (Doc ID 2285040.1)
- 12.2.0.1 Base Release - Availability and Known Issues (Doc ID 2239820.1)


3) Baixe os PATCHES.
Patch 6880880: OPatch patch of version 12.2.0.1.11 for Oracle software releases 12.1.0.x (installer) and 12.2.0.x (OCT 2017) (Patch)  


Patch 26878187: GRID INFRASTRUCTURE RELEASE UPDATE REVISION 12.2.0.1.171017


 
4) Agora vamos atualizar o OPATCH do GRID e do DATABASE. Não é obrigatório mas eu acho bastante importante rodar o OPATCH atualizado. Aprendi isso com o meu amigo Portilho e nunca mais deixei de fazer.

-- Como root
su -
cd /home/oracle/PATCH
unzip -q p6880880_122010_Linux-x86-64.zip

-- GRID
cd /oracle/12.2.0.1/grid
mv OPatch OPatch-20171108

mkdir OPatch
cp -rv /home/oracle/PATCH/OPatch/* /oracle/12.2.0.1/grid/OPatch/.
chown -R oracle:oinstall OPatch


-- DATABASE
cd /oracle/app/oracle/product/12.2.0.1/dbhome_1/
mv OPatch OPatch-20171108
mkdir OPatch
cp -rv /home/oracle/PATCH/OPatch/* /oracle/app/oracle/product/12.2.0.1/dbhome_1/OPatch/
chown -R oracle:oinstall OPatch
  


5) Verificando versão do OPatch e os patches já aplicados no ambiente.

su - oracle
-- GRID
$GRID_HOME/OPatch/opatchauto version
Oracle OPatchAuto Version 13.9.2.1.0
Copyright (c) 2016, Oracle Corporation.  All rights reserved.
1. OPatchAuto version 13.9.2.1.0
2. OpatchautoDB version 12.2.0.1.11

$GRID_HOME/OPatch/opatch lsinventory

 Oracle Home       : /oracle/12.2.0.1/grid
Central Inventory : /oracle/app/oraInventory
 from              : /oracle/12.2.0.1/grid/oraInst.loc
OPatch version    : 12.2.0.1.11
OUI version       : 12.2.0.1.4
-------------------------------------------------------------------
Local Machine Information::
Hostname: single122
ARU platform id: 226
ARU platform description:: Linux x86-64

Installed Top-level Products (1): 
Oracle Grid Infrastructure 12c                                       12.2.0.1.0

 There are 1 products installed in this Oracle Home.
There are no Interim PATCH installed in this Oracle Home.
 -------------------------------------------------------------------


-- DATABASE
$ORACLE_HOME/OPatch/opatch lsinventory

 Oracle Home       : /oracle/app/oracle/product/12.2.0.1/dbhome_1
Central Inventory : /oracle/app/oraInventory
from           : /oracle/app/oracle/product/12.2.0.1/dbhome_1/oraInst.loc
OPatch version    : 12.2.0.1.11
OUI version       : 12.2.0.1.4
-------------------------------------------------------------------
Local Machine Information::
Hostname: single122
ARU platform id: 226
ARU platform description:: Linux x86-64

Installed Top-level Products (1): 

Oracle Database 12c                                                 12.2.0.1.0
There are 1 products installed in this Oracle Home.
There are no Interim PATCH installed in this Oracle Home.
 -------------------------------------------------------------------


6) Vamos descompactar o RUR para aplicar no ambiente. 

su - oracle
cd /home/oracle/PATCH
unzip -q p26878187_122010_Linux-x86-64

7) Após a leitura do README do patch, vamos verificar a compatibilidade do patch.

su -
  
cd /home/oracle/PATCH/26878187
export GRID_HOME=/oracle/12.2.0.1/grid
export PATH=$PATH:/oracle/12.2.0.1/grid/OPatch


Abaixo um trecho do README que muitos ignoram mas eu gosto de fazer:

"Determine whether any currently installed one-off patches conflict with the Grid Infrastructure 12.2.0.1.171017 26878187 as follows:"

$GRID_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /home/oracle/PATCH/26878187/26518812
Exemplo de saída:
Oracle Interim Patch Installer version 12.2.0.1.11
Copyright (c) 2017, Oracle Corporation.  All rights reserved.
PREREQ session
Oracle Home       : /oracle/12.2.0.1/grid
Central Inventory : /oracle/app/oraInventory
 from              : /oracle/12.2.0.1/grid/oraInst.loc
OPatch version    : 12.2.0.1.11
OUI version       : 12.2.0.1.4

Invoking prereq "checkconflictagainstohwithdetail"
Prereq "checkConflictAgainstOHWithDetail" passed.
OPatch succeeded.

Fazer isso para todos os patches contidos no RUR, como informa o README.


-- Executando também o ANALYZE do patch.

$GRID_HOME/OPatch/opatchauto apply /home/oracle/PATCH/26878187 -analyze -oh /oracle/12.2.0.1/grid

Executing OPatch prereq operations to verify patch applicability on home /oracle/12.2.0.1/grid
Patch applicability verified successfully on home /oracle/12.2.0.1/grid
OPatchAuto successful.

--------------------------------Summary-----------------------------
Analysis for applying patches has completed successfully:
Host:single122
SIHA Home:/oracle/12.2.0.1/grid

==Following patches were SUCCESSFULLY analyzed to be applied:

Patch: /home/oracle/PATCH/26878187/26878137
Log: /oracle/12.2.0.1/grid/cfgtoollogs/opatchauto/core/opatch/opatch2017-11-08_15-17-24PM_1.log

Patch: /home/oracle/PATCH/26878187/25586399
Log: /oracle/12.2.0.1/grid/cfgtoollogs/opatchauto/core/opatch/opatch2017-11-08_15-17-24PM_1.log

Patch: /home/oracle/PATCH/26878187/26839277
Log: /oracle/12.2.0.1/grid/cfgtoollogs/opatchauto/core/opatch/opatch2017-11-08_15-17-24PM_1.log

Patch: /home/oracle/PATCH/26878187/26928563
Log: /oracle/12.2.0.1/grid/cfgtoollogs/opatchauto/core/opatch/opatch2017-11-08_15-17-24PM_1.log

Patch: /home/oracle/PATCH/26878187/26518812
Log: /oracle/12.2.0.1/grid/cfgtoollogs/opatchauto/core/opatch/opatch2017-11-08_15-17-24PM_1.log

OPatchauto session completed at Wed Nov  8 15:18:25 2017
Time taken to complete the session 1 minute, 30 seconds


8) Após verificar a compatibilidade, podemos aplicar o patch.
su - oracle
$GRID_HOME/OPatch/opatchauto apply /home/oracle/PATCH/26878187

Exemplo de saída:
OPatchauto session is initiated at Wed Nov  8 15:50:25 2017

 ...
Preparing to bring down database service on home /oracle/app/oracle/product/12.2.0.1/dbhome_1
Successfully prepared home /oracle/app/oracle/product/12.2.0.1/dbhome_1 to bring down database service

Bringing down database service on home /oracle/app/oracle/product/12.2.0.1/dbhome_1
Following database has been stopped and will be restarted later during the session: hulk
Database service successfully brought down on home /oracle/app/oracle/product/12.2.0.1/dbhome_1

Bringing down CRS service on home /oracle/12.2.0.1/grid
Prepatch operation log file location: /oracle/app/oracle/crsdata/single122/crsconfig/hapatch_2017-11-08_03-52-57PM.log
CRS service brought down successfully on home /oracle/12.2.0.1/grid

Start applying binary patch on home /oracle/app/oracle/product/12.2.0.1/dbhome_1
Binary patch applied successfully on home /oracle/app/oracle/product/12.2.0.1/dbhome_1

Start applying binary patch on home /oracle/12.2.0.1/grid
Binary patch applied successfully on home /oracle/12.2.0.1/grid

Starting CRS service on home /oracle/12.2.0.1/grid
Postpatch operation log file location: /oracle/app/oracle/crsdata/single122/crsconfig/hapatch_2017-11-08_04-03-13PM.log
CRS service started successfully on home /oracle/12.2.0.1/grid

Starting database service on home /oracle/app/oracle/product/12.2.0.1/dbhome_1
Database service successfully started on home /oracle/app/oracle/product/12.2.0.1/dbhome_1

Preparing home /oracle/app/oracle/product/12.2.0.1/dbhome_1 after database service restarted
No step execution required.........
Prepared home /oracle/app/oracle/product/12.2.0.1/dbhome_1 successfully after database service restarted

Trying to apply SQL patch on home /oracle/app/oracle/product/12.2.0.1/dbhome_1
SQL patch applied successfully on home /oracle/app/oracle/product/12.2.0.1/dbhome_1

OPatchAuto successful.

--------------------------------Summary----------------------------
Patching is completed successfully. Please find the summary as follows:

Host:single122
SIDB Home:/oracle/app/oracle/product/12.2.0.1/dbhome_1
Summary:

==Following patches were SKIPPED:
Patch: /home/oracle/PATCH/26878187/25586399
Reason: This patch is not applicable to this specified target type - "oracle_database"

Patch: /home/oracle/PATCH/26878187/26839277
Reason: This patch is not applicable to this specified target type - "oracle_database"

Patch: /home/oracle/PATCH/26878187/26928563
Reason: This patch is not applicable to this specified target type - "oracle_database"


==Following patches were SUCCESSFULLY applied:
Patch: /home/oracle/PATCH/26878187/26518812
Log: /oracle/app/oracle/product/12.2.0.1/dbhome_1/cfgtoollogs/opatchauto/core/opatch/opatch2017-11-08_15-53-23PM_1.log

Patch: /home/oracle/PATCH/26878187/26878137
Log: /oracle/app/oracle/product/12.2.0.1/dbhome_1/cfgtoollogs/opatchauto/core/opatch/opatch2017-11-08_15-53-23PM_1.log


Host:single122
SIHA Home:/oracle/12.2.0.1/grid
Summary:

==Following patches were SUCCESSFULLY applied:
Patch: /home/oracle/PATCH/26878187/25586399
Log: /oracle/12.2.0.1/grid/cfgtoollogs/opatchauto/core/opatch/opatch2017-11-08_15-56-27PM_1.log

Patch: /home/oracle/PATCH/26878187/26518812
Log: /oracle/12.2.0.1/grid/cfgtoollogs/opatchauto/core/opatch/opatch2017-11-08_15-56-27PM_1.log

Patch: /home/oracle/PATCH/26878187/26839277
Log: /oracle/12.2.0.1/grid/cfgtoollogs/opatchauto/core/opatch/opatch2017-11-08_15-56-27PM_1.log

Patch: /home/oracle/PATCH/26878187/26878137
Log: /oracle/12.2.0.1/grid/cfgtoollogs/opatchauto/core/opatch/opatch2017-11-08_15-56-27PM_1.log

Patch: /home/oracle/PATCH/26878187/26928563
Log: /oracle/12.2.0.1/grid/cfgtoollogs/opatchauto/core/opatch/opatch2017-11-08_15-56-27PM_1.log

OPatchauto session completed at Wed Nov  8 16:06:49 2017
Time taken to complete the session 16 minutes, 24 seconds


9) Agora basta fazer as verificações.

su - oracle

-- Verificar se todos os serviços e databases estão no ar
####################################### CRSSTAT OUTPUT ###############################################
DATE: Wed Nov  8 16:54:38 BRST 2017  
######################################################################################################
COLOR CODES: HEADER  CONTENT  ALERT  ORACLE_SID 
######################################################################################################
  NAME               TYPE        VERSION        STATE                TARGET   LAST_RESTART         STATE 
  ----               ----        -------        -----                ------   ------------         --------
  ora.asm            asm         asm            ONLINE on single122  ONLINE   11/08/2017 16:04:34  STABLE 
  ora.cssd           cssd        SERVER_POOLS=  ONLINE on single122  ONLINE   11/08/2017 16:04:19  STABLE 
  ora.hulk.db        database    SERVER_POOLS=  ONLINE on single122  ONLINE   11/08/2017 16:05:00  STABLE 
  ora.FRA.dg         diskgroup   diskgroup      ONLINE on single122  ONLINE   11/08/2017 16:04:33  STABLE 
  ora.REDO.dg        diskgroup   diskgroup      ONLINE on single122  ONLINE   11/08/2017 16:04:33  STABLE 
  ora.DATA.dg        diskgroup   diskgroup      ONLINE on single122  ONLINE   11/08/2017 16:04:34  STABLE 
  ora.TESTE.dg       diskgroup   diskgroup      ONLINE on single122  ONLINE   11/08/2017 16:04:34  STABLE 
  ora.diskmon        diskmon     SERVER_POOLS=  OFFLINE              OFFLINE  11/08/2017 16:04:07  STABLE 
  ora.driver.afd     driver.afd  SERVER_POOLS=  ONLINE on single122  ONLINE   NEVER                STABLE 
  ora.evmd           evm         SERVER_POOLS=  ONLINE on single122  ONLINE   11/08/2017 16:04:03  STABLE 
  ora.LISTENER.lsnr  listener    listener       ONLINE on single122  ONLINE   11/08/2017 16:04:07  STABLE 
  ora.ons            ons         ons            OFFLINE              OFFLINE  NEVER                STABLE 
  

10) Verificando a aplicação do patch 

$ORACLE_HOME/OPatch/opatch lsinventory
Oracle Interim Patch Installer version 12.2.0.1.11
Copyright (c) 2017, Oracle Corporation.  All rights reserved.

Oracle Home       : /oracle/app/oracle/product/12.2.0.1/dbhome_1

Central Inventory : /oracle/app/oraInventory
   from           : /oracle/app/oracle/product/12.2.0.1/dbhome_1/oraInst.loc
OPatch version    : 12.2.0.1.11
OUI version       : 12.2.0.1.4
Log file location : /oracle/app/oracle/product/12.2.0.1/dbhome_1/cfgtoollogs/opatch/opatch2017-11-08_16-56-29PM_1.log

Lsinventory Output file location : /oracle/app/oracle/product/12.2.0.1/dbhome_1/cfgtoollogs/opatch/lsinv/lsinventory2017-11-08_16-56-29PM.txt


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

Local Machine Information::
Hostname: single122
ARU platform id: 226
ARU platform description:: Linux x86-64

Installed Top-level Products (1): 


Oracle Database 12c                                                  12.2.0.1.0

There are 1 products installed in this Oracle Home.

Interim patches (2) :


Patch  26878137     : applied on Wed Nov 08 15:56:17 BRST 2017

Unique Patch ID:  21594430
Patch description:  "OCW JUL2017 RELEASE UPDATE REVISION : 12.2.0.1.171017  (26878137)"
   Created on 27 Sep 2017, 06:10:39 hrs PST8PDT
   Bugs fixed:
26144044, 25541343, 25715179, 25493588, 24932026, 24801915, 25832375
25728787, 25825732, 24578464, 25832312, 25742471, 25790699, 25655495
25307145, 25485737, 25505841, 25697364, 24663993, 25026470, 25591658
25537905, 24451580, 25409838, 25371632, 25569634, 25245759, 24665035
25646592, 25025157, 24732650, 24664849, 24584419, 24423011, 24831158
25037836, 25556203, 24464953, 24657753, 25197670, 24796183, 20559126
25197395, 24808260, 26546632

Patch  26518812     : applied on Wed Nov 08 15:55:18 BRST 2017

Unique Patch ID:  21611172
Patch description:  "Database Jul 2017 Release Update Revision : 12.2.0.1.171017 (26518812)"
   Created on 4 Oct 2017, 18:39:53 hrs PST8PDT
   Bugs fixed:
23026585, 24336249, 24929210, 24942749, 25036474, 25110233, 25410877
25417050, 25427662, 25459958, 25547901, 25569149, 25600342, 25600421
25606091, 25655390, 25662088, 24385983, 24923215, 25099758, 25429959
25662101, 25728085, 25823754, 22594071, 23665623, 23749454, 24326846
24334708, 24560906, 24573817, 24578797, 24609996, 24624166, 24668398
24674955, 24744686, 24811725, 24827228, 24831514, 24908321, 24976007
25184555, 25210499, 25211628, 25223839, 25262869, 25316758, 25337332
25455795, 25457409, 25539063, 25546608, 25612095, 25643931, 25410017
22729345, 24485174, 24509056, 24714096, 25329664, 25410180, 25607726
25957038, 25973152, 26024732, 24376878, 24589590, 24676172, 23548817
24796092, 24907917, 25044977, 25736747, 25766822, 25856821, 25051628
24534401, 24835919, 25050160, 25395696, 25430120, 25616359, 25715167
25967985, 26546754, 26546664, 26544823, 26575788, 25489607, 25654936
25947799, 26271001, 26526726, 25980770
--------------------------------------------------------------------------------
OPatch succeeded.


E é isso, agora estamos com o último RUR aplicado em nosso ambiente.

Espero que ajude.

Abraço
Mario

terça-feira, 24 de outubro de 2017

Roteiro de utilização - ASM Filter Driver (ASMFD)

Olá pessoal.

Vamos falar um pouco de ASM Filter Driver (ASMFD).

Não vamos entrar aqui em questão de definições do que é, para que serve porque se você chegou até aqui você já sabe (ou deveria saber) do que se trata o assunto.

A ideia aqui é um roteiro para inserir novos discos, deletar discos, criar diskgroup, adicionar discos, etc. 

Lembrando também que a minha virtual tem um Oracle Single 12.2.0.1.0 com GRID instalado.

Primeiro, sempre bom dar uma olhada no Help. Aqui abaixo está somente a parte que nos interessa que é do ASMFD.

[oracle@single122 ~]$ asmcmd help

        commands:
        --------
        afd_configure, afd_deconfigure, afd_di, afd_dsget, afd_dsset
        afd_filter, afd_label, afd_lsdsk, afd_lslbl, afd_refresh
        afd_scan, afd_state, afd_unlabel

Legal também dar uma olhada nos comandos para sabermos as possibilidades como abaixo.
[oracle@single122 ~]$ asmcmd help afd_state

Enfim, vamos ao que interessa. Para os nossos testes apresentei um disco (/dev/sdl) para podermos fazer o processo inteiro.

-- Vamos primeiro verificar o disco e seu tamanho.
[oracle@single122 ~]$ cd /dev/

[oracle@single122 dev]$ ls -lhrt sdl*
brw-rw---- 1 root disk 8, 176 Oct 24 08:51 sdl

[oracle@single122 dev]$ lsblk sdl
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdl    8:176  0  10G  0 disk 

-- Criando a partição no disco 

oracle@single122 dev]$ su -

[root@single122 ~]# fdisk -l /dev/sdl 

Disk /dev/sdl: 10.7 GB, 10737418240 bytes, 20971520 sectors

Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

[root@single122 ~]# fdisk /dev/sdl 
-- Responda as opções abaixo as perguntas apresentadas.
n
p
1
ENTER
ENTER
w

[root@single122 ~]# fdisk -l /dev/sdl 

Disk /dev/sdl: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00094735

Device Boot      Start         End      Blocks   Id  System
  /dev/sdl1       2048    20971519    10484736   83  Linux

-- Verificando a artição criada.
[oracle@single122 dev]$ ls -lhrt sdl*
brw-rw---- 1 root disk 8, 176 Oct 24 09:07 sdl
brw-rw---- 1 root disk 8, 177 Oct 24 09:07 sdl1

[oracle@single122 dev]$ lsblk sdl
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdl      8:176  0  10G  0 disk 
+-sdl1   8:177  0  10G  0 part 

-- Nesse momento ainda não temos nada além da partição, nenhum disco candidate.

[oracle@single122 dev]$ asmcmd lsdsk -p --candidate



-- Vou listar os meus discos já existentes apresentados ao ASMFD.

[oracle@single122 dev]$ asmcmd afd_lsdsk
------------------------------------------------------------
Label                     Filtering   Path
============================================================
DATA01                      ENABLED   /dev/sdb1
DATA02                      ENABLED   /dev/sdc1
DATA03                      ENABLED   /dev/sdd1
DATA04                      ENABLED   /dev/sde1
DATA05                      ENABLED   /dev/sdf1
DATA06                      ENABLED   /dev/sdg1
DATA07                      ENABLED   /dev/sdh1
DATA08                      ENABLED   /dev/sdi1
DATA09                      ENABLED   /dev/sdj1
DATA10                      ENABLED   /dev/sdk1


-- Criar um label para o novo disco. Esse comando seria o equivalente (bem a grosso modo) ao CREATEDISK do ASLMLIB.


[oracle@single122 ~]$ su -

[root@single122 ~]# /oracle/12.2.0.1/grid/bin/asmcmd afd_label DATA11 /dev/sdl1


Importante: Se tentar criar um label para um disco que já está mapeado, levamos o erro abaixo:
[root@single122 dev]# /oracle/12.2.0.1/grid/bin/asmcmd afd_label DATA10 /dev/sdj1
disk /dev/sdj1 is already provisioned for ASM
ASMCMD-9513: ASM disk label set operation failed.

-- SCAN
[root@single122 dev]# /oracle/12.2.0.1/grid/bin/asmcmd afd_scan


-- Listando novamente os discos com o label criado.

[oracle@single122 dev]$ asmcmd afd_lsdsk
------------------------------------------------------------
Label                     Filtering   Path
============================================================
DATA01                      ENABLED   /dev/sdb1
DATA02                      ENABLED   /dev/sdc1
DATA03                      ENABLED   /dev/sdd1
DATA04                      ENABLED   /dev/sde1
DATA05                      ENABLED   /dev/sdf1
DATA06                      ENABLED   /dev/sdg1
DATA07                      ENABLED   /dev/sdh1
DATA08                      ENABLED   /dev/sdi1
DATA09                      ENABLED   /dev/sdj1
DATA10                      ENABLED   /dev/sdk1
DATA11                      ENABLED   /dev/sdl1

-- Ao criarmos o label, agora temos um disco candidate ao ASMFD.

[oracle@single122 dev]$ asmcmd lsdsk -p --candidate


-- Podemos verificar via SQL também.

COL GROUP_NUMBER  FORMAT 999;
COL MOUNT_STATUS  FORMAT A7;
COL HEADER_STATUS FORMAT A12;
COL MODE_STATUS   FORMAT A6;
COL PATH          FORMAT A11;
COL STATE         FORMAT A7;
COL TOTAL_MB      FORMAT 999,999,999.99;
COL FREE_MB       FORMAT 999,999,999.99;
COL NAME          FORMAT A15;
COL LABEL         FORMAT A15;
COL LIBRARY       FORMAT A10;
COL FAILGROUP     FORMAT A15;
COL VOTING_FILE   FORMAT A1;

SELECT 
           GROUP_NUMBER, 
           MOUNT_STATUS,HEADER_STATUS,MODE_STATUS,PATH, 
           STATE,TOTAL_MB,FREE_MB,NAME,LABEL,LIBRARY, 
           FAILGROUP, VOTING_FILE     
        FROM V$ASM_DISK 
        ORDER BY HEADER_STATUS, PATH;



Se o header status estiver PROVISIONED OU FORMER (fazia parte de outro DG e foi liberado), podemos adicionar. Caso tenha outro header, ai fazer o dd abaixo.
-- Vamos agora criar um novo diskgroup.

[oracle@single122 sql]$ sqlplus / as sysasm

SQL> CREATE DISKGROUP TESTE EXTERNAL REDUNDANCY DISK 'AFD:DATA11'
  ATTRIBUTE 
'SECTOR_SIZE'='512',
'LOGICAL_SECTOR_SIZE'='512',
'compatible.asm'='12.2.0.1',
'compatible.rdbms'='12.2.0.1',
'au_size'='1M';
Diskgroup created.


SQL>@showasm



-- Vamos agora dropar um disco de um dos diskgroups.

-- Remover o disco 09 do diskgroup REDO
SQL> alter diskgroup TESTE drop disk DATA09;
Diskgroup altered.


SQL> @showasm



-- Para fazer a remoção completa do disco devemos remover o label também.

[root@single122 ~]# su -

-- Listando os discos 
[root@single122 ~]# /oracle/12.2.0.1/grid/bin/asmcmd afd_lsdsk
------------------------------------------------------------
Label                     Filtering   Path
============================================================
DATA01                      ENABLED   /dev/sdb1
DATA02                      ENABLED   /dev/sdc1
DATA03                      ENABLED   /dev/sdd1
DATA04                      ENABLED   /dev/sde1
DATA05                      ENABLED   /dev/sdf1
DATA06                      ENABLED   /dev/sdg1
DATA07                      ENABLED   /dev/sdh1
DATA08                      ENABLED   /dev/sdi1
DATA09                      ENABLED   /dev/sdj1
DATA10                      ENABLED   /dev/sdk1
DATA11                      ENABLED   /dev/sdl1

-- Removendo o label
[root@single122 ~]# /oracle/12.2.0.1/grid/bin/asmcmd afd_unlabel DATA09

-- Listando novamente
[root@single122 ~]# /oracle/12.2.0.1/grid/bin/asmcmd afd_lsdsk
------------------------------------------------------------
Label                     Filtering   Path
============================================================
DATA01                      ENABLED   /dev/sdb1
DATA02                      ENABLED   /dev/sdc1
DATA03                      ENABLED   /dev/sdd1
DATA04                      ENABLED   /dev/sde1
DATA05                      ENABLED   /dev/sdf1
DATA06                      ENABLED   /dev/sdg1
DATA07                      ENABLED   /dev/sdh1
DATA08                      ENABLED   /dev/sdi1
DATA10                      ENABLED   /dev/sdk1
DATA11                      ENABLED   /dev/sdl1


--  Agora, vamos adicionar um disco a um DG existente

[oracle@single122 sql]$ sqlplus / as sysasm

-- Adicinando o disco 09
SQL> alter diskgroup TESTE add disk 'AFD:DATA09';
Diskgroup altered.


-- Dropar um diskgroup completo

SQL> drop diskgroup TESTE including contents;
Diskgroup dropped.



Importante 1: Depois disso, basta excluir os labels dos discos como descrito mais acima.
Importante2 : Caso esteja em um RAC, deixar apenas um dos nós montados

Exemplo: Temos um RAC com 2 nós, então no nó 2 executar como grid:
sqlplus / as sysasm
SQL> alter diskgroup TESTE dismount;
-- Se necessário, podemos fazer outros acertos via SQL

--  Alterando o compat ASM e DB

-- Antes da alteração
Group Name         Type       Compat.      DB Compat.      Total (GB)     Used (GB)     Free (GB) Used (PCT) Free (PCT) State
----- ------------ ---------- ------------ ------------ ------------- ------------- ------------- ---------- ---------- ----------
2 FRA          EXTERN     12.2.0.0.0   12.2.0.0.0           30.00           .06         29.94     .20 %    99.80%   MOUNTED
    

SQL> sqlplus / as sysasm
SQL> ALTER DISKGROUP FRA SET ATTRIBUTE 'compatible.asm'   = '12.2.0.1.0';
Diskgroup altered.

SQL> ALTER DISKGROUP FRA SET ATTRIBUTE 'compatible.rdbms' = '12.2.0.1.0';
Diskgroup altered.

Group Name         Type       Compat.      DB Compat.      Total (GB)     Used (GB)     Free (GB) Used (PCT) Free (PCT) State
----- ------------ ---------- ------------ ------------ ------------- ------------- ------------- ---------- ---------- ----------
2 FRA          EXTERN     12.2.0.1.0   12.2.0.1.0           30.00           .06         29.94     .20 %    99.80%   MOUNTED


-- Algumas verificações interessantes:

-- Quando adicionar ou dropar um disco do ASM, para verificar se ainda está fazendo REBALANCE
select 
o.INST_ID, 
g.name AS disk_grp, 
o.OPERATION, 
o.STATE, 
o.POWER, 
o.SOFAR, 
o.EST_WORK, 
o.EST_RATE, 
o.EST_MINUTES 
from 
GV$ASM_OPERATION o
join 
v$asm_diskgroup g ON g.group_number = o.group_number
where
o.GROUP_NUMBER=2
ORDER BY o.INST_ID, g.name;


-- Se necessário alterar o valor do rebalance online (isso pode gerar lentidão - quanto maior o power, mais impacto)

ALTER DISKGROUP DG_MVTREINA REBALANCE POWER 1;


-- Para verificar o compat,
COLUMN name FORMAT A10
COLUMN compatibility FORMAT A20
COLUMN database_compatibility FORMAT A20

SELECT 
        group_number, name, compatibility,  
        database_compatibility 
        FROM v$asm_diskgroup;


-- Para verificar os valores default na criação dos DG's
COLUMN name FORMAT A20
COLUMN value FORMAT A20

SELECT 
        group_number, name, value 
        FROM v$asm_attribute 
        WHERE 
        UPPER(NAME) NOT LIKE ('%TEMPLATE%') AND 
        GROUP_NUMBER = 1 
        ORDER BY group_number, name;

Então é isso. Espero que esse roteiro ajude.

Abraço
Mario

domingo, 8 de outubro de 2017

Erro ao criar controlfile no duplicate - perdi tudo?

Fala pessoal.

Uma dica rápida mas que pode ajudar no momento de necessidade.

Hoje estava fazendo um duplicate de uma base em RAC e por um descuido da minha parte o parâmetro "cluster_database" ficou setado com TRUE.

Como todos sabem durante o processo de duplicate deixamos esse parâmetro como FALSE.

Enfim, ao final do processo - era uma base de 5T então foi um processo bem demorado, eu tomei o erro abaixo no momento do CREATE CONTROLFILE:

released channel: aux1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 10/08/2017 13:04:28
RMAN-05501: aborting duplication of target database
RMAN-06136: ORACLE error from auxiliary database: ORA-01503: CREATE CONTROLFILE failed
ORA-12720: operation requires database is in EXCLUSIVE mode

Obviamente não poderia perder todo o meu trabalho até porque tinha prazo para entrega da base. 

Verifiquei nos logs que o Restore e Recover estavam completos e que só faltava os direcionamentos do clone para o novo controlfile.

Na realidade, a sequência que faltava era a partir desse ponto abaixo:

contents of Memory Script:
{
   set newname for tempfile  1 to
'+ASMDATA01';
   set newname for tempfile  2 to
'+ASMDATA01';
   set newname for tempfile  3 to
'+ASMDATA01';
   set newname for tempfile  4 to
'+ASMDATA01';
   set newname for tempfile  5 to
'+ASMDATA01';
   set newname for tempfile  6 to
'+ASMDATA01';
   switch clone tempfile all;
   catalog clone datafilecopy  
...

   
Fiz umas pesquisas no MOS e a partir desse ponto verifiquei que seria apenas recriado o controlfile, catalogado os datafiles e feito o switch final.

Deu um pouco de trabalho no início, listei os datafiles nos DISKGROUP's e depois apenas recriei o controlfile e abri a base.

Nesse momento, como diz meu amigo Ricardo Portilho, não existe DBA Ateu ahahahahhahaha... 

Mas também lembrei dele quando demorou para o comando ser completado e como ele sempre diz "Se demorou deve estar certo...".

A criação foi normal com: CREATE CONTROLFILE SET DATABASE 'MV0610' RESETLOGS ARCHIVELOG...

Então fica a dica, caso tome um erro nesso ponto do duplicate, o trabalho não está perdido.

Abraço
Mario

quarta-feira, 12 de julho de 2017

Renomear e excluir arquivos no Linux com caracteres especiais no nome

Fala pessoal...

Hoje surgiu uma necessidade um pouco fora do normal aqui. Nada a ver com Oracle e sim com a exclusão de arquivos no linux.

Achei bacana compartilhar.

Não sei porque surgiu um arquivo com o nome "?0?@@?i@8?@" no meu servidor de testes.

[root@odin]# ls -lrht
-rw-r--r--   1 root   root        0 Jul 12 09:58 ?0?@@?i@8?@

Ok, vamos excluir esse arquivo:

rm -f ?0?@@?i@8?@
rm -f "?0?@@?i@8?@"

Nos dois casos recebi o erro que o nome do arquivo era inválido.

Então, dei uma pesquisada e achei o tal do "--". Ai ficou fácil, primeiro renomeei o arquivo problemático e depois exclui.

-- Renomear
[root@odin]# mv -- ?0?@@?i@8?@ tt

[root@odin]# ll
-rw-r--r--   1 root   root        0 Jul 12 09:58 tt

-- Excluir
[root@odin]# rm tt
rm: remove regular empty file `tt'? y


E tudo foi resolvido.

Então é isso. Só uma dica que pode ser útil um dia.

Abraço
Mario

segunda-feira, 10 de julho de 2017

IPS - Incident Package Service

Olá pessoal.

Hoje me deparei com um erro ORA-07445. Após algumas pesquisas no MOS e como não havia achado nada relacionada decidi abrir um SR.

Um dos arquivos solicitados para abertura era o zip gerado pelo IPS (Incident Package Service).

O IPS é uma extensão do "Automatic Diagnostic Repository (ADR)", ou seja, ele é gerado pela ferramenta ADRCI.

Bom, então vamos ao que interessa. São várias as formas de usar o IPS. Abaixo vou colocar duas ou três.


Vamos nos conectar ao ADRCI e exibir os nossos homes:
adrci>  show homes
ADR Homes:
diag/asm/+asm/+ASM1
diag/rdbms/mv/mv1

Vamos setar o nosso homepath:
adrci> set homepath diag/rdbms/mv/mv1

adrci> show homes
ADR Homes:
diag/rdbms/mv/mv1

Exibir os incidentes do ambiente:

adrci> show incidents


Vamos agora criar o pacote de arquivos pelo INCIDENT_ID.

adrci> ips pack incident 1233454 in /tmp
Generated package 6 in file /tmp/ORA7445pr_20170710095409_COM_1.zip, mode complete

$ ls -lrht /tmp/
-rw-r--r--  1 oracle       oinstall     2.1M Jul 10 09:54 ORA7445pr_20170710095409_COM_1.zip

É isso, podemos mandar esse arquivo para o MOS.

Temos várias outras formas de criação, como por exemplo, pelo PROBLEM_ID:

Primeiro vamos identificar o PROBLEM_ID:
adrci> show incident -mode brief -p "incident_id=1233454"



Agora, é só criar o pacote:
adrci> ips create package problem 5 correlate all
Created package 11 based on problem id 5, correlation level all

E gerar o zip:
adrci> ips generate package 11 in "/tmp"
Generated package 11 in file /tmp/ORA7445pr_20170710103222_COM_1.zip, mode complete

$ ls -lrht /tmp/ORA7445pr_20170710103222_COM_1.zip
-rw-r--r-- 1 oracle oinstall 12M Jul 10 10:33 /tmp/ORA7445pr_20170710103222_COM_1.zip

Para listar os incidentes1 que fazem parte do pacote, basta executar:
adrci> ips show incidents package 11



Ou ainda, listar os arquivos que fazem parte do pacote.   
adrci> IPS SHOW FILES PACKAGE 11





Podemos também gerar por um período de tempo, por exemplo:

adrci> IPS CREATE PACKAGE TIME '2017-07-10 06:19:41.614000 -03:00' to '2017-07-10 09:23:07.109000 -03:00'
Created package 9 based on time range 2017-07-10 06:19:41.614000 -03:00 to 2017-07-10 09:23:07.109000 -03:00, correlation level typical

adrci> ips generate package 9 in /tmp
Generated package 9 in file /tmp/ORA7445pr_20170710100817_COM_1.zip, mode complete

$ ls -lrht /tmp/ORA7445pr_20170710100817_COM_1.zip
-rw-r--r-- 1 oracle oinstall 11M Jul 10 10:08 /tmp/ORA7445pr_20170710100817_COM_1.zip


Para verificar todas as opções, basta acessar o help;

adrci> help ips

 HELP IPS [topic]
   Available Topics:
        ADD
        ADD FILE
        ADD NEW INCIDENTS
        CHECK REMOTE KEYS
        COPY IN FILE
        COPY OUT FILE
        CREATE PACKAGE
        DELETE PACKAGE
        FINALIZE PACKAGE
        GENERATE PACKAGE
        GET MANIFEST
        GET METADATA
        GET REMOTE KEYS
        PACK
        REMOVE
        REMOVE FILE
        SET CONFIGURATION
        SHOW CONFIGURATION
        SHOW FILES
        SHOW INCIDENTS
        SHOW PACKAGE
        UNPACK FILE
        UNPACK PACKAGE
        USE REMOTE KEYS

E para verificar as configurações atuais do IPS:

adrci> ips  SHOW CONFIGURATION





Então é isso pessoal. Uma dica rápida mas que ajuda bastante no momento da abertura do SR.

Mais informações: ADRCI

Abraço
Mario

sábado, 8 de julho de 2017

Trigger de logon para ativar trace

Olá pessoal.

Tive uma necessidade a um tempo atrás de ativar um trace em uma detereminada sessão que viesse de um programa específico.

Coisa simples, então vou deixar documentado aqui para quem precisar a trigger de logon que eu usei.

create or replace trigger sys.LOGON_TRACE
      after logon on database
DECLARE
      v_username VARCHAR2(70);
      v_program  VARCHAR2(70);
BEGIN
      SELECT LOWER(USERNAME),
                      LOWER(PROGRAM)
      INTO  v_username,
                 v_program
      FROM sys.v_$session
      WHERE
                   sid = SYS_CONTEXT('USERENV', 'SID');

  -- if ora_login_user = 'MARIO' then   -- Se quiser utilizar a trigger em determinados logins
  IF (v_program = 'q_sender.exe' OR v_program='sqlplusw.exe')
  THEN
        EXECUTE IMMEDIATE 'ALTER SESSION SET sql_trace=TRUE';
        EXECUTE IMMEDIATE 'alter session set timed_statistics=true';
        EXECUTE IMMEDIATE 'alter session set max_dump_file_size=unlimited';
EXECUTE IMMEDIATE 'alter session set events=''10046 trace name context forever, level 12''';
  END IF;
END LOGON_TRACE;
/

Então é isso pessoal, simples e objetivo. 

Abraço
Mario

Postagem em destaque

[ORACLE] Useful scripts for the day-to-day life of a DBA (Part 3) - System metrics

Hello everyone.   Hope you're doing well! As I said here , I've created a repository on GITHUB to share some scripts that I like t...