#DICA - Upgrade do Oracle database 12.1.0.2 para 19c "travado" - ADR block file read

Durante um processo de upgrade via dbua, de um ambiente Oracle Database 12.1.0.2 para a versão 19c apresentou uma lentidão muito grande na etapa inicial (Pre Upgrade Step), sendo que se passaram mais de 10 minutos e o status não saia de 0%.


Afim de identificar o que poderia estar ocasionando essa demora no processo de Pre Upgrade validei o status da sessão e pude constatar o evento de espera ADR block file read. Este evento esta relacionado a geração de incidentes ADR.


A solução encontrada para agilizar essa etapa de "destravar" o dbua foi conectar no repositório do ADRCI e realizar um purge dos dados a mais de 1 dia. Após efetuar o purge o processo de upgrade continuou normalmente, passando da etapa de pre upgrade.

adrci> purge -age 1 -type hm

Para mais algumas informações sobre o gerenciamento do ADRCI - http://www.lamimdba.com.br/2014/11/gerenciando-retencao-de-traces-usando-o.html


#DICA - OCI VM Database - Erro ao alterar a senha de usuário no SO - passwd: Authentication token manipulation error

Recentemente os ambientes VM Database no OCI estão apresentando um erro quando tentamos alterar a senha de um usuário no SO, seja um usuário existente ou mesmo um usuário recém criado.

Segue o exemplo do erro ao alterar a senha de um usuário recém criado. Vale ressaltar que apos o comando passwd já é apresentado o erro, mesmo sem pedir a nova senha.

[root@srvdb01 ~]# useradd lamim
[root@srvdb01 ~]#
[root@srvdb01 ~]# passwd lamim
Changing password for user lamim.
passwd: Authentication token manipulation error

Este comportamento está ocorrendo devido ao ambiente estar com a linha 16 do arquivo /etc/pam.d/system-auth estar comentada. Para que seja possível alterar a senha, basta remover o comentário dessa linha e executar o processo de alteração de senha.

[root@srvdb01 ~]# vi /etc/pam.d/system-auth
      1 #%PAM-1.0
      2 # This file is auto-generated.
      3 # User changes will be destroyed the next time authconfig is run.
      4 auth        required      pam_env.so
      5 auth        required      pam_faildelay.so delay=2000000
      6 auth        sufficient    pam_unix.so nullok try_first_pass
      7 auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
      8 auth        required      pam_deny.so
      9
     10 account     required      pam_unix.so
     11 account     sufficient    pam_localuser.so
     12 account     sufficient    pam_succeed_if.so uid < 1000 quiet
     13 account     required      pam_permit.so
     14
     15 password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
     16 #password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok
     17
     18
     19 password    required      pam_deny.so
     20
     21 session     optional      pam_keyinit.so revoke
     22 session     required      pam_limits.so
     23 -session     optional      pam_systemd.so
     24 session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
     25 session     required      pam_unix.so
     26
     27 # PAM system service should be configured to store only encrypted representations of passwords.
     28 password    sufficient    pam_unix.so sha512 shadow try_first_pass use_authtok
~
Apos a remoção, deste comentário da linha 16 já é possível efetuar a troca da senha.

[root@srvdb01 ~]#
[root@srvdb01 ~]# passwd lamim
Changing password for user lamim.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@srvdb01 ~]#


Alterando o hostaname em um ambiente Oracle Single com ASM (Oracle Restart)

Para efetuar a alteração do hostname de um ambiente com Oracle Restart, além de ajustar os parâmetros de sistema operacional é necessário que seja realizada a reconfiguração do grid. 

O processo de alteração do hostname e reconfiguração do Grid é relativamente simples e pode ser feito de acordo com os passos abaixo. 


Este processo foi validado em um ambiente Oracle Grid 19.3 com Oracle database 19.3 instalados em um Oracle Linux 7.9.

Na alteração em ambientes que esteja ativos (operantes), é necessário que você pare todos os serviços antes de realizar a alteração do hostname. Também é recomendável que seja feito um backup do grid antes do processo.

Parar os serviços:
[root@lamimtst ~]# service ohasd stop

Parados os serviços, efetuado o backup do produto e alterado o hostname da máquina, será necessário remover a configuração existente. Com o usuário root, devem ser exportadas as variáveis do grid  ORACLE_HOME e ORACLE_SID e executado o comando abaixo.

[root@lamimtst ~]# $ORACLE_HOME/perl/bin/perl -I $ORACLE_HOME/perl/lib -I $ORACLE_HOME/crs/install $ORACLE_HOME/crs/install/roothas.pl -deconfig -force
Using configuration parameter file: /orabin01/app/19c/grid/crs/install/crsconfig_params
The log of current session can be found at:
  /orabin01/app/oracle/crsdata/lamimtst/crsconfig/hadeconfig.log
PRCR-1070 : Failed to check if resource ora.asm is registered
CRS-5168 : unable to communicate with ohasd
2021/09/23 07:53:49 CLSRSC-180: An error occurred while executing the command '/orabin01/app/19c/grid/bin/srvctl remove asm -force'
PRCR-1070 : Failed to check if resource ora.ons is registered
CRS-5168 : unable to communicate with ohasd
2021/09/23 07:53:50 CLSRSC-180: An error occurred while executing the command '/orabin01/app/19c/grid/bin/srvctl config ons'
CLSU-00107: operating system function: opendir; failed with error data: 2; at location: scrsearch1
CLSU-00101: operating system error message: No such file or directory
CLSU-00104: additional error information: cant open scr home dir scls_scr_getval
CRS-4639: Could not contact Oracle High Availability Services
CRS-4000: Command Stop failed, or completed with errors.
2021/09/23 07:53:53 CLSRSC-337: Successfully deconfigured Oracle Restart stack
[root@lamimtst ~]#

Após remover a configuração do grid, pode ser efetuada a alteração do hostname. Neste exemplo, a maquina havia sido clonada e o hostname já alterado, desta forma a etapa de remoção da configuração do grid foi realizada após a alteração do hostname.

O processo de alteração do hostname a partir do Oracle Linux 7 poder ser ver consultado aqui.

Concluídas as etapas acima, será realizada a reconfiguração do grid, conforme abaixo.

[root@lamimtst ~]#
[root@lamimtst ~]# $ORACLE_HOME/perl/bin/perl -I $ORACLE_HOME/perl/lib -I $ORACLE_HOME/crs/install $ORACLE_HOME/crs/install/roothas.pl
Using configuration parameter file: /orabin01/app/19c/grid/crs/install/crsconfig_params
The log of current session can be found at:
  /orabin01/app/oracle/crsdata/lamimtst/crsconfig/roothas_2021-09-23_07-58-56AM.log
2021/09/23 07:59:01 CLSRSC-363: User ignored prerequisites during installation
LOCAL ADD MODE
Creating OCR keys for user 'oracle', privgrp 'oinstall'..
Operation successful.
LOCAL ONLY MODE
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
CRS-4664: Node lamimtst successfully pinned.
2021/09/23 07:59:13 CLSRSC-330: Adding Clusterware entries to file 'oracle-ohasd.service'

lamimtst     2021/09/23 08:00:11     /orabin01/app/oracle/crsdata/lamimtst/olr/backup_20210923_080011.olr     724960844
2021/09/23 08:00:12 CLSRSC-327: Successfully configured Oracle Restart for a standalone server
[root@lamimtst ~]#

Ajustar o listener para responder para o novo hostname. O procedimento de reconfiguração do listener pode ser feito também dropando o listener antigo e recriando o mesmo com a ferramenta netca

vi $ORACLE_HOME/network/admin/listener.ora

Adicionar o recurso do listener no Oracle Grid.

[root@lamimtst ~]#
[root@lamimtst ~]# srvctl add listener
[root@lamimtst ~]#

Os discos do ASM não são adicionados automaticamente após a reconfiguração, por isso é necessário adiciona-los novamente.

Para discos criados com o asm lib:

[root@lamimtst ~]#
[root@lamimtst ~]# srvctl add asm -d '/dev/oracleasm/*'
[root@lamimtst ~]# oracleasm listdisks
ASMDISK001
ASMDISK002
ASMDISK003
ASMDISK004
ASMDISK005
[root@lamimtst ~]#

Se não for utilizado o asm lib, os rawdevices devem ser mapeados.

srvctl add asm -d '/dev/sd*'

Iniciar o listener e o ASM.

[root@lamimtst ~]#
[root@lamimtst ~]# srvctl start listener
[root@lamimtst ~]# srvctl start asm
[root@lamimtst ~]# crsctl stat res -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.LISTENER.lsnr
               ONLINE  ONLINE       lamimtst                 STABLE
ora.asm
               ONLINE  ONLINE       lamimtst                 Started,STABLE
ora.ons
               OFFLINE OFFLINE      lamimtst                 STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cssd
      1        ONLINE  ONLINE       lamimtst                 STABLE
ora.diskmon
      1        OFFLINE OFFLINE                               STABLE
ora.evmd
      1        ONLINE  ONLINE       lamimtst                 STABLE
--------------------------------------------------------------------------------
[root@lamimtst ~]#

Iniciados os serviços do listener e ASM, será necessário montar os diskgroups no ASM. O processo pode ser realizado via asmcmd ou sqlplus conectado no ASM.

Neste laboratório ao montar os discos novamente, tive o erro abaixo. Este erro esta relacionado ao parametro asm_diskstring que não estava definido no ASM. Após defini-lo "apontando" para os discos do asm lib, foi possível montar o diskgroup.

[oracle@lamimtst ~]$ asmcmd
ASMCMD> mount DGDATA
ORA-15032: not all alterations performed
ORA-15017: diskgroup "DGDATA" cannot be mounted
ORA-15040: diskgroup is incomplete (DBD ERROR: OCIStmtExecute)
ASMCMD>
ASMCMD> mount DGDATA
ORA-15032: not all alterations performed
ORA-15017: diskgroup "DGDATA" cannot be mounted
ORA-15040: diskgroup is incomplete (DBD ERROR: OCIStmtExecute)
ASMCMD> exit
[oracle@lamimtst ~]$
[oracle@lamimtst ~]$
[oracle@lamimtst ~]$ kfod asm_diskstring='/dev/oracleasm/disks/*' disks=all
--------------------------------------------------------------------------------
 Disk          Size Path                                     User     Group
================================================================================
   1:      10239 MB /dev/oracleasm/disks/ASMDISK001          oracle   oinstall
   2:      10239 MB /dev/oracleasm/disks/ASMDISK002          oracle   oinstall
   3:      10239 MB /dev/oracleasm/disks/ASMDISK003          oracle   oinstall
   4:      10239 MB /dev/oracleasm/disks/ASMDISK004          oracle   oinstall
   5:      10239 MB /dev/oracleasm/disks/ASMDISK005          oracle   oinstall
--------------------------------------------------------------------------------
ORACLE_SID ORACLE_HOME
================================================================================
      +ASM /orabin01/app/19c/grid
[oracle@lamimtst ~]$ sqlplus

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Sep 23 08:25:30 2021
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

Enter user-name: / as sysasm

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> show parameter asm_diskstring;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
asm_diskstring                       string
SQL>
SQL>  alter system set asm_diskstring='/dev/oracleasm/disks/*' scope=memory;

System altered.

SQL> select name, state from v$asm_diskgroup;

NAME                           STATE
------------------------------ -----------
DGDATA                         DISMOUNTED

SQL>
SQL> alter diskgroup DGDATA mount;

Diskgroup altered.

SQL>

[oracle@lamimtst ~]$ srvctl status diskgroup -g DGDATA
Disk Group DGDATA is running on lamimtst
[oracle@lamimtst ~]$

Configurados os discos do ASM, o próximo passo é adicionar as instancias de banco de dados dentro do Grid.

[oracle@lamimtst ~]$
[oracle@lamimtst ~]$ srvctl add database -d lamimtst -o /orabin01/app/oracle/product/19c/dbhome_1 -n lamimtst -p +DGDATA/LAMIMTST/PARAMETERFILE/spfile.270.1083870825
[oracle@lamimtst ~]$

Adicionadas as instâncias, as mesmas podem ser iniciadas.

[oracle@lamimtst ~]$ srvctl start database -d lamimtst
[oracle@lamimtst ~]$
[oracle@lamimtst ~]$ srvctl status database -d lamimtst
Database is running.
[oracle@lamimtst ~]$ srvctl config database -d lamimtst -a
Database unique name: lamimtst
Database name: lamimtst
Oracle home: /orabin01/app/oracle/product/19c/dbhome_1
Oracle user: oracle
Spfile: +DGDATA/LAMIMTST/PARAMETERFILE/spfile.270.1083870825
Password file:
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Disk Groups: DGDATA
Services:
Database is enabled
OSDBA group:
OSOPER group:
Database instance: lamimtst
[oracle@lamimtst ~]$

How to change Hostname / IP for a Grid Infrastructure Oracle Restart Standalone Configuration (SIHA) 11.2 and Later (Doc ID 1552810.1)


#Dica - Alterando o hostname no Oracle Linux 7.9

A alteração de hostname em servidores linux acaba se tornando uma tarefa comum para os DBAs, seja em uma migração ou para criação de novos ambientes (teste, homologação, etc).

O processo de alteração de hostname em versões anteriores a Oracle Linux 7 era um pouco mais complexa, demandando a alteração do arquivo /etc/hosts e a reinicialização do SO. Porém a partir da versão 7 é possível efetuar a alteração através do comando hostnamectl, que pode ser usado, tanto para consultar as informações de hostname atuais, quanto para altera-lo. 

Consultar o hostname

root@lamimtst19c ~]# hostnamectl status
   Static hostname: lamimtst19c
         Icon name: computer-vm
           Chassis: vm
        Machine ID: c180e76cb7ba19449f0f79546824ea42
           Boot ID: 32483a1606ef4f65914975b03456b49c
    Virtualization: kvm
  Operating System: Oracle Linux Server 7.9
       CPE OS Name: cpe:/o:oracle:linux:7:9:server
            Kernel: Linux 5.4.17-2102.205.7.2.el7uek.x86_64
      Architecture: x86-64

Alterar o hostname 

root@lamimtst19c ~]# hostnamectl set-hostname lamimtst

root@lamimtst19c ~]# hostnamectl status
   Static hostname: lamimtst
         Icon name: computer-vm
           Chassis: vm
        Machine ID: c180e76cb7ba19449f0f79546824ea42
           Boot ID: 32483a1606ef4f65914975b03456b49c
    Virtualization: kvm
  Operating System: Oracle Linux Server 7.9
       CPE OS Name: cpe:/o:oracle:linux:7:9:server
            Kernel: Linux 5.4.17-2102.205.7.2.el7uek.x86_64
      Architecture: x86-64

Desta forma o hostname foi alterado de forma online, sem a necessidade de restart do servidor. Apenas lembrando que em ambiente com Grid, será necessário configura-lo após a alteração do hostname.


https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/networking_guide/sec_configuring_host_names_using_hostnamectl

Dica: Erro ao conectar o sql developer ao oracle 19c no OCI via IPSec VPN

Hoje tive um cenário, no qual um cliente não estava conseguindo conectar com o SQL Developer (20.4.1.407) ao Oracle 19C no OCI, com erro de ES quando testava a conexão que estava sendo configurada. Ao salvar a configuração e clicar em conectar será informando um código de erro 17002.

Este cenário ocorre apenas quando esta sendo feita a conexão com o SQL Developer do ambiente on premisse com o database 19c no OCI, através de uma IPSec VPN.

No alertlog do banco de dados, também há registro de erro de conexão para o IP da maquina na qual tentei abrir o SQL Developer.

Fatal NI connect error 12537, connecting to:
 (ADDRESS=(PROTOCOL=tcp)(HOST=10.20.31.197)(PORT=50493))

  VERSION INFORMATION:
        TNS for Linux: Version 19.0.0.0.0 - Production
        Oracle Bequeath NT Protocol Adapter for Linux: Version 19.0.0.0.0 - Production
        TCP/IP NT Protocol Adapter for Linux: Version 19.0.0.0.0 - Production
  Version 19.11.0.0.0
  Time: 25-MAY-2021 17:02:34
  Tracing not turned on.
  Tns error struct:
    ns main err code: 12537

TNS-12537: TNS:connection closed
    ns secondary err code: 12560
    nt main err code: 507

TNS-00507: Connection closed
    nt secondary err code: 0
    nt OS err code: 0
2021-05-25T17:02:34.707179-03:00
opiodr aborting process unknown ospid (25231) as a result of ORA-609
2021-05-25T17:02:34.707873-03:00
Errors in file /u01/app/oracle/diag/rdbms/cdbprd01_gru1kx/cdbprd01/trace/cdbprd01_ora_25231.trc:
ORA-00609: could not attach to incoming connection
ORA-12537: TNS:connection closed
2021-05-25T17:03:56.407529-03:00

Erros do SQL Developer:





Erro:
Status : Com FalhaFalha no teste: Erro de ES: Uma tentativa de conexão falhou porque o componente conectado não respondeu
corretamente após um período de tempo ou a conexão estabelecida falhou
porque o host conectado não respondeu, Authentication lapse 0 ms.

Para contornar esse erro tive que definir no sqlnet o parâmetro DISABLE_OOB_AUTO como true. Este é um novo parâmetro de rede da versão 19c, que é utilizado para habilitar ou desabilitar a verificação de suporte a mensagens de interrupção na conexão. Por padrão vem definido como off, ou seja, está habilitado.
Acontece que algumas vezes a rede pode não lidar bem com essa funcionalidade e começar a ocasionar quedas ou mesmo falhas de conexão.

DISABLE_OOB_AUTO = TRUE
[oracle@lamimdb-oci ~]$ cat /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/sqlnet.ora | grep DISABLE_OOB_AUTO
DISABLE_OOB_AUTO = TRUE
[oracle@lamimdb-oci ~]$

Após desabilitar a conexão com o SQL Developer voltou a funcionar normalmente.


https://docs.oracle.com/en/database/oracle/oracle-database/19/netrf/parameters-for-the-sqlnet.ora.html#GUID-897ABB80-64FE-4F13-9F8C-99361BB4465C

Oracle anuncia oficialmente a segunda região no Brasil


Hoje tivemos uma noticia que estava sendo esperada por muitos a algum tempo. A Oracle anunciou oficialmente a segunda região do OCI localizada na cidade de Vinhedo, interior de São Paulo e terá interconectividade com a Microsoft Azure.

Com a nova região os clientes podem estabelecer e implementar uma estratégia de alta disponibilidade e contingência utilizando duas regiões (geograficamente separadas) no Brasil.

"Dentre as razões que motivaram novamente, a escolha do estado de São Paulo para a implantação, está a alta demanda por serviços. Além disso, a região precisava estar próximo do data center da Microsoft e do primeiro data center, a fim de manter uma baixa latência. Segundo testes da empresa, esse valor tem chegado a 1 milissegundo."

https://blogs.oracle.com/oracle-brasil/oracle-segunda-regiao-nuvem-brasil?source=:so:ch:or:awr::::&SC=:so:ch:or:awr::::&pcode=&utm=champions&channel=LinkedIn


#Dica - Como descobrir no SO qual disco está sendo usado no ASMlib ?


Os discos criados com o ASMlib podem ser listados através do comando listdisks. Acontece que ao executar esse comando será apresentado o nome do disco que foi criado e não o disco propriamente usado no SO.

Por exemplo:

[grid@lamimtst01 ~]$ oracleasm
Usage: oracleasm [--exec-path=<exec_path>] <command> [ <args> ]
       oracleasm --exec-path
       oracleasm -h
       oracleasm -V

The basic oracleasm commands are:
    configure        Configure the Oracle Linux ASMLib driver
    init             Load and initialize the ASMLib driver
    exit             Stop the ASMLib driver
    scandisks        Scan the system for Oracle ASMLib disks
    status           Display the status of the Oracle ASMLib driver
    listdisks        List known Oracle ASMLib disks
    listiids         List the iid files
    deleteiids       Delete the unused iid files
    querydisk        Determine if a disk belongs to Oracle ASMlib
    createdisk       Allocate a device for Oracle ASMLib use
    deletedisk       Return a device to the operating system
    renamedisk       Change the label of an Oracle ASMlib disk
    update-driver    Download the latest ASMLib driver
[grid@lamimtst01 ~]$ oracleasm listdisks
DGDATA001
DGDATA002
DGDATA003
DGDATA004
DGDATA005
DGDATA006
DGDATA007
DGDATA008
DGDATA009
DGDATA010
DGDATA011
DGDATA012
DGDATA013
DGDATA014
DGRECO001
DGRECO002
DGRECO003
DGRECO004
[grid@lamimtst01 ~]$

Para identificar o disco usado é necessário executa o comando oracleasm querydisk -d nome_do_disco  para identificar os "major - minor numbers" que serão usados para localizar o device fisicamente. Neste exemplo temos o 8 como minor e o 129 como major numbers.

[grid@lamimtst01 ~]$ oracleasm querydisk -d DGDATA001
Disk "DGDATA001" is a valid ASM disk on device [8,129]
[grid@lamimtst01 ~]$

Com eles é possível identificar o disco fisicamente, através de um ls -l /dev | grep minor_number, | grep major_number.

[grid@lamimtst01 ~]$ ls -l /dev | grep 8, | grep 129
brw-rw---- 1 root disk      8, 129 Mar 16 14:40 sdi1
[grid@lamimtst01 ~]$

Neste exemplo o DGDATA001 é composto pelo disco /dev/sdi1. Se quisermos saber seu tamanho, basta usar o comando lsblk | grep nome_do_disco

[grid@lamimtst01 ~]$ lsblk | grep sdi1
ââsdi1                    8:129  0  205G  0 part
[grid@lamimtst01 ~]$