Translate

vendredi 15 décembre 2017

Decrypt WLST Password



L'autre jour chez un client j'avais besoin d'aller voir la console weblogic , cependant le client n''avait pas le bon mot de passe.

Pour essayer de le récupérer : 

$ locate boot.properties
/data/install/oracle/middleware/user_projects/domains/ClassicDomain/servers/AdminServer/security/boot.properties
/data/install/oracle/middleware/user_projects/domains/ClassicDomain/servers/WLS_REPORTS/security/boot.properties

$ cat /data/install/oracle/middleware/user_projects/domains/ClassicDomain/servers/AdminServer/security/boot.properties 
password={AES}AqTvVv8IVCNkT9ukqPtEXGz5LIza20NqGdSSBKc/DWA\=
username={AES}6F+45IFJ7IhGcZJQv96As9Q/hYl8BMPDtOH4NQj/oXI\=


Ici, il faudrait prendre la valeur inscrite dans le password et  enlever le "\" avant le "=" pour être utilisé dans les étapes ci-dessous. Donc, la valeur à utiliser serait : 

{AES}AqTvVv8IVCNkT9ukqPtEXGz5LIza20NqGdSSBKc/DWA=


$ /data/install/oracle/middleware/user_projects/domains/ClassicDomain/bin/setDomainEnv.sh
$ /data/install/oracle/middleware/oracle_common/common/bin/wlst.sh


CLASSPATH=/data/install/oracle/middleware/patch_wls1036/profiles/default/sys_manifest_classpath/weblogic_patch.jar:/data/install/oracle/middleware/patch_ocp371/profiles/default/sys_manifest_classpath/weblogic_patch.jar:/usr/local/jdk1.6.0_29/lib/tools.jar:/data/install/oracle/middleware/wlserver_10.3/server/lib/weblogic_sp.jar:/data/install/oracle/middleware/wlserver_10.3/server/lib/weblogic.jar:/data/install/oracle/middleware/modules/features/weblogic.server.modules_10.3.6.0.jar:/data/install/oracle/middleware/wlserver_10.3/server/lib/webservices.jar:/data/install/oracle/middleware/modules/org.apache.ant_1.7.1/lib/ant-all.jar:/data/install/oracle/middleware/modules/net.sf.antcontrib_1.1.0.0_1-0b2/lib/ant-contrib.jar::/data/install/oracle/middleware/oracle_common/modules/oracle.jrf_11.1.1/jrf-wlstman.jar:/data/install/oracle/middleware/oracle_common/common/wlst/lib/adfscripting.jar:/data/install/oracle/middleware/oracle_common/common/wlst/lib/adf-share-mbeans-wlst.jar:/data/install/oracle/middleware/oracle_common/common/wlst/lib/mdswlst.jar:/data/install/oracle/middleware/oracle_common/common/wlst/resources/auditwlst.jar:/data/install/oracle/middleware/oracle_common/common/wlst/resources/igfwlsthelp.jar:/data/install/oracle/middleware/oracle_common/common/wlst/resources/jps-wlst.jar:/data/install/oracle/middleware/oracle_common/common/wlst/resources/jps-wls-trustprovider.jar:/data/install/oracle/middleware/oracle_common/common/wlst/resources/jrf-wlst.jar:/data/install/oracle/middleware/oracle_common/common/wlst/resources/oamap_help.jar:/data/install/oracle/middleware/oracle_common/common/wlst/resources/oamAuthnProvider.jar:/data/install/oracle/middleware/oracle_common/common/wlst/resources/ossoiap_help.jar:/data/install/oracle/middleware/oracle_common/common/wlst/resources/ossoiap.jar:/data/install/oracle/middleware/oracle_common/common/wlst/resources/ovdwlsthelp.jar:/data/install/oracle/middleware/oracle_common/common/wlst/resources/sslconfigwlst.jar:/data/install/oracle/middleware/oracle_common/common/wlst/resources/wsm-wlst.jar:/data/install/oracle/middleware/utils/config/10.3/config-launch.jar::/data/install/oracle/middleware/wlserver_10.3/common/derby/lib/derbynet.jar:/data/install/oracle/middleware/wlserver_10.3/common/derby/lib/derbyclient.jar:/data/install/oracle/middleware/wlserver_10.3/common/derby/lib/derbytools.jar::
Initializing WebLogic Scripting Tool (WLST) ...
Jython scans all the jar files it can find at first startup. Depending on the system, this process may take a few minutes to complete, and WLST may not return a prompt right away.
Welcome to WebLogic Server Administration Scripting Shell
Type help() for help on available commands

Ici, il faut spécifier le chemin complet du domaine 

wls:/offline> domain = "/data/install/oracle/middleware/user_projects/domains/ClassicDomain"
wls:/offline> service = weblogic.security.internal.SerializedSystemIni.getEncryptionService(domain)
wls:/offline> encryption = weblogic.security.internal.encryption.ClearOrEncryptedService(service)
wls:/offline> print encryption.decrypt("{AES}AqTvVv8IVCNkT9ukqPtEXGz5LIza20NqGdSSBKc/DWA=")

Voilà, on a le mot de passe (Bien sûr, c'est un exemple) : wgm1agS 


wls:/offline> exit()
Exiting WebLogic Scripting Tool.

vendredi 10 novembre 2017

Rolling Forward a Physical StandBy 12c



L'autre jour chez un client, une des bd's standby était désynchronisée de plusieurs jours. Les archives n'étaient plus sur place, et comme la base de données n'était pas si volumineuse j'ai décide de faire un Rolling Forward sur la bd 12c.

Voici la procédure appliquée :

################
### Primaire ###
################
SYS@BDRMAN> select HXFIL File_num,substr(HXFNM,1,40),fhscn from x$kcvfh;
  FILE_NUM SUBSTR(HXFNM,1,40)                       FHSCN
---------- ---------------------------------------- ----------------
         1 +DATINXRWBDRMAN/PBDRMAN/datafile/system.26 9801556159502
         2 +DATINXRWBDRMAN/PBDRMAN/datafile/sysaux.26 9801556159611
         3 +DATINXRWBDRMAN/PBDRMAN/datafile/undotbs1. 9801556159800
         4 +DATINXRWBDRMAN/PBDRMAN/datafile/users.269 9801556159830
         5 +DATINXRWBDRMAN/PBDRMAN/datafile/refrmanpf 9801556159835
         6 +DATINXRWBDRMAN/PBDRMAN/datafile/refrmanca 9801556159887
         7 +DATINXRWBDRMAN/PBDRMAN/datafile/refrmanpf 9801556159904
 
 
7 rows selected.


  
################
### Standby  ###
################

owner@serverb:/export/home/owner# tnsping pbdrman
TNS Ping Utility for Solaris: Version 12.1.0.2.0 - Production on 08-NOV-2017 16:25:23
Copyright (c) 1997, 2014, Oracle.  All rights reserved.
Used parameter files:

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = servera.domaine)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pbdrman.domaine)))
OK (0 msec)


SYS@BDRMAN> select HXFIL File_num,substr(HXFNM,1,40),fhscn from x$kcvfh;
  FILE_NUM SUBSTR(HXFNM,1,40)                       FHSCN
---------- ---------------------------------------- ----------------
         1 +DATINXRWBDRMAN/SBDRMAN/DATAFILE/system.25 9801132353171
         2 +DATINXRWBDRMAN/SBDRMAN/DATAFILE/sysaux.25 9801132353171
         3 +DATINXRWBDRMAN/SBDRMAN/DATAFILE/undotbs1. 9801132353171
         4 +DATINXRWBDRMAN/SBDRMAN/DATAFILE/users.267 9801132353171
         5 +DATINXRWBDRMAN/SBDRMAN/DATAFILE/refrmanpf 9801132353171
         6 +DATINXRWBDRMAN/SBDRMAN/DATAFILE/refrmanca 9801132353171
         7 +DATINXRWBDRMAN/SBDRMAN/DATAFILE/refrmanpf 9801132353171

7 rows selected.

SYS@BDRMAN> SELECT TO_CHAR(CURRENT_SCN) FROM V$DATABASE;
TO_CHAR(CURRENT_SCN)
----------------------------------------
9801132353170


SYS@BDRMAN> exit


Il faut passer par rman et se servir du nom du service utilisé pour la synchronisation:

owner@serverb:/export/home/owner# rman target/
Recovery Manager: Release 12.1.0.2.0 - Production on Tue Nov 7 16:15:42 2017
Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.
connected to target database: BDRMAN (not mounted)


RMAN> recover database from service pbdrman noredo using compressed backupset;

Starting recover at 07-NOV-17
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=607 device type=DISK
channel ORA_DISK_1: starting incremental datafile backup set restore
channel ORA_DISK_1: using compressed network backup set from service pbdrman
destination for restore of datafile 00001: +DATINXRWBDRMAN/SBDRMAN/DATAFILE/system.258.821180069
channel ORA_DISK_1: restore complete, elapsed time: 00:00:26
channel ORA_DISK_1: starting incremental datafile backup set restore
channel ORA_DISK_1: using compressed network backup set from service pbdrman
destination for restore of datafile 00002: +DATINXRWBDRMAN/SBDRMAN/DATAFILE/sysaux.259.821180069
channel ORA_DISK_1: restore complete, elapsed time: 00:01:26
channel ORA_DISK_1: starting incremental datafile backup set restore
channel ORA_DISK_1: using compressed network backup set from service pbdrman
destination for restore of datafile 00003: +DATINXRWBDRMAN/SBDRMAN/DATAFILE/undotbs1.260.821180069
channel ORA_DISK_1: restore complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting incremental datafile backup set restore
channel ORA_DISK_1: using compressed network backup set from service pbdrman
destination for restore of datafile 00004: +DATINXRWBDRMAN/SBDRMAN/DATAFILE/users.267.821180073
channel ORA_DISK_1: restore complete, elapsed time: 00:00:02
channel ORA_DISK_1: starting incremental datafile backup set restore
channel ORA_DISK_1: using compressed network backup set from service pbdrman
destination for restore of datafile 00005: +DATINXRWBDRMAN/SBDRMAN/DATAFILE/refrmanpfd.257.821180069
channel ORA_DISK_1: restore complete, elapsed time: 00:00:25
channel ORA_DISK_1: starting incremental datafile backup set restore
channel ORA_DISK_1: using compressed network backup set from service pbdrman
destination for restore of datafile 00006: +DATINXRWBDRMAN/SBDRMAN/DATAFILE/refrmancad.273.866618929
channel ORA_DISK_1: restore complete, elapsed time: 00:00:08
channel ORA_DISK_1: starting incremental datafile backup set restore
channel ORA_DISK_1: using compressed network backup set from service pbdrman
destination for restore of datafile 00007: +DATINXRWBDRMAN/SBDRMAN/DATAFILE/refrmanpfp_tempo.256.874499281
channel ORA_DISK_1: restore complete, elapsed time: 00:00:02

Finished recover at 07-NOV-17



SYS@BDRMAN> select HXFIL File_num,substr(HXFNM,1,40),fhscn from x$kcvfh;

  FILE_NUM SUBSTR(HXFNM,1,40)                       FHSCN
---------- ---------------------------------------- ----------------
         1 +DATINXRWBDRMAN/SBDRMAN/DATAFILE/system.25 9801556159502
         2 +DATINXRWBDRMAN/SBDRMAN/DATAFILE/sysaux.25 9801556159611
         3 +DATINXRWBDRMAN/SBDRMAN/DATAFILE/undotbs1. 9801556159800
         4 +DATINXRWBDRMAN/SBDRMAN/DATAFILE/users.267 9801556159830
         5 +DATINXRWBDRMAN/SBDRMAN/DATAFILE/refrmanpf 9801556159835
         6 +DATINXRWBDRMAN/SBDRMAN/DATAFILE/refrmanca 9801556159887
         7 +DATINXRWBDRMAN/SBDRMAN/DATAFILE/refrmanpf 9801556159904

SYS@BDRMAN> SHUTDOWN IMMEDIATE;
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.

SYS@BDRMAN>   STARTUP NOMOUNT;
ORACLE instance started.
Total System Global Area 2147483648 bytes
Fixed Size                  3702536 bytes
Variable Size            1526726904 bytes
Database Buffers          603979776 bytes
Redo Buffers               13074432 bytes


Maintenant il faut faire un restore du controlfile :

owner@serverb:/export/home/owner# rman target/
Recovery Manager: Release 12.1.0.2.0 - Production on Tue Nov 7 16:15:42 2017
Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.
connected to target database: BDRMAN (not mounted)


RMAN> restore standby controlfile from service pbdrman ;

Starting restore at 07-NOV-17
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=873 device type=DISK

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: using network backup set from service PBDRMAN
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
output file name=+DATINXRWBDRMAN/SBDRMAN/controlfile/current.274.868272013
output file name=+ARCHFLASBDRMAN/SBDRMAN/controlfile/current.367.868272013
Finished restore at 07-NOV-17


RMAN> alter database mount;
Statement processed
released channel: ORA_DISK_1


RMAN> report schema;
Starting implicit crosscheck backup at 07-NOV-17
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=873 device type=DISK
Crosschecked 14 objects
Finished implicit crosscheck backup at 07-NOV-17

Starting implicit crosscheck copy at 07-NOV-17
using channel ORA_DISK_1
Crosschecked 2 objects
Finished implicit crosscheck copy at 07-NOV-17

searching for all files in the recovery area
cataloging files...
cataloging done

List of Cataloged Files
=======================
File Name: +ARCHFLASBDRMAN/SBDRMAN/ARCHIVELOG/2017_11_05/thread_1_seq_25532.859.959213437
File Name: +ARCHFLASBDRMAN/SBDRMAN/ARCHIVELOG/2017_11_05/thread_1_seq_25533.858.959214639
...
...
File Name: +ARCHFLASBDRMAN/SBDRMAN/ARCHIVELOG/2017_11_07/thread_1_seq_25747.753.959439639
File Name: +ARCHFLASBDRMAN/SBDRMAN/ARCHIVELOG/2017_11_07/thread_1_seq_25748.752.959439819
File Name: +ARCHFLASBDRMAN/SBDRMAN/ARCHIVELOG/2017_11_07/thread_1_seq_25749.1715.959440997
File Name: +ARCHFLASBDRMAN/SBDRMAN/ARCHIVELOG/2017_11_07/thread_1_seq_25750.1753.959442199
File Name: +ARCHFLASBDRMAN/SBDRMAN/ARCHIVELOG/2017_11_07/thread_1_seq_25751.1714.959443399

RMAN-06139: WARNING: control file is not current for REPORT SCHEMA
Report of database schema for database with db_unique_name SBDRMAN


List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    0        SYSTEM               ***     +DATINXRWBDRMAN/SBDRMAN/datafile/system.266.820912527
2    0        SYSAUX               ***     +DATINXRWBDRMAN/SBDRMAN/datafile/sysaux.267.820912527
3    0        UNDOTBS1             ***     +DATINXRWBDRMAN/SBDRMAN/datafile/undotbs1.268.820912529
4    0        USERS                ***     +DATINXRWBDRMAN/SBDRMAN/datafile/users.269.820912529
5    0        REFRMANPFD           ***     +DATINXRWBDRMAN/SBDRMAN/datafile/refrmanpfd.275.820913979
6    0        REFRMANCAD           ***     +DATINXRWBDRMAN/SBDRMAN/datafile/refrmancad.257.866618911
7    0        TBS_OTHERS           ***     +DATINXRWBDRMAN/SBDRMAN/datafile/datafile_a_tempo.265.874499275

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    20       TEMP                 32767       +DATINXRWBDRMAN/SBDRMAN/tempfile/temp.274.820912675



On doit cataloguer les datafiles :

RMAN> catalog start with '+DATINXRWBDRMAN/SBDRMAN' ;

searching for all files that match the pattern +DATINXRWBDRMAN/SBDRMAN

List of Files Unknown to the Database
=====================================
File Name: +DATINXRWBDRMAN/SBDRMAN/TEMPFILE/temp.268.822253261
File Name: +DATINXRWBDRMAN/SBDRMAN/TEMPFILE/temp.266.902243751
File Name: +DATINXRWBDRMAN/SBDRMAN/TEMPFILE/temp.291.917695929
File Name: +DATINXRWBDRMAN/SBDRMAN/TEMPFILE/temp.300.949315305
File Name: +DATINXRWBDRMAN/SBDRMAN/ONLINELOG/group_1.264.902243735
File Name: +DATINXRWBDRMAN/SBDRMAN/ONLINELOG/group_2.265.902243737
File Name: +DATINXRWBDRMAN/SBDRMAN/ONLINELOG/group_1.282.910188609
File Name: +DATINXRWBDRMAN/SBDRMAN/ONLINELOG/group_7.263.821180431
File Name: +DATINXRWBDRMAN/SBDRMAN/ONLINELOG/group_8.262.821180431
...
File Name: +DATINXRWBDRMAN/SBDRMAN/ONLINELOG/group_9.295.948357781
File Name: +DATINXRWBDRMAN/SBDRMAN/ONLINELOG/group_1.297.948359319
File Name: +DATINXRWBDRMAN/SBDRMAN/ONLINELOG/group_2.298.948359325
File Name: +DATINXRWBDRMAN/SBDRMAN/ONLINELOG/group_3.299.948359327
File Name: +DATINXRWBDRMAN/SBDRMAN/DATAFILE/refrmanpfd.257.821180069
File Name: +DATINXRWBDRMAN/SBDRMAN/DATAFILE/system.258.821180069
File Name: +DATINXRWBDRMAN/SBDRMAN/DATAFILE/sysaux.259.821180069
File Name: +DATINXRWBDRMAN/SBDRMAN/DATAFILE/undotbs1.260.821180069
File Name: +DATINXRWBDRMAN/SBDRMAN/DATAFILE/users.267.821180073
File Name: +DATINXRWBDRMAN/SBDRMAN/DATAFILE/refrmancad.273.866618929
File Name: +DATINXRWBDRMAN/SBDRMAN/DATAFILE/datafile_a_tempo.256.874499281

Do you really want to catalog the above files (enter YES or NO)? yes
cataloging files...
cataloging done

List of Cataloged Files
=======================
File Name: +DATINXRWBDRMAN/SBDRMAN/TEMPFILE/temp.268.822253261
File Name: +DATINXRWBDRMAN/SBDRMAN/TEMPFILE/temp.266.902243751
File Name: +DATINXRWBDRMAN/SBDRMAN/TEMPFILE/temp.291.917695929
File Name: +DATINXRWBDRMAN/SBDRMAN/TEMPFILE/temp.300.949315305
File Name: +DATINXRWBDRMAN/SBDRMAN/DATAFILE/refrmanpfd.257.821180069
File Name: +DATINXRWBDRMAN/SBDRMAN/DATAFILE/system.258.821180069
File Name: +DATINXRWBDRMAN/SBDRMAN/DATAFILE/sysaux.259.821180069
File Name: +DATINXRWBDRMAN/SBDRMAN/DATAFILE/undotbs1.260.821180069
File Name: +DATINXRWBDRMAN/SBDRMAN/DATAFILE/users.267.821180073
File Name: +DATINXRWBDRMAN/SBDRMAN/DATAFILE/refrmancad.273.866618929
File Name: +DATINXRWBDRMAN/SBDRMAN/DATAFILE/datafile_a_tempo.256.874499281

List of Files Which Were Not Cataloged
=======================================
File Name: +DATINXRWBDRMAN/SBDRMAN/ONLINELOG/group_1.264.902243735
 RMAN-07529: Reason: catalog is not supported for this file type
File Name: +DATINXRWBDRMAN/SBDRMAN/ONLINELOG/group_2.265.902243737
 RMAN-07529: Reason: catalog is not supported for this file type
File Name: +DATINXRWBDRMAN/SBDRMAN/ONLINELOG/group_1.282.910188609
 RMAN-07529: Reason: catalog is not supported for this file type
File Name: +DATINXRWBDRMAN/SBDRMAN/ONLINELOG/group_7.263.821180431
 RMAN-07529: Reason: catalog is not supported for this file type
File Name: +DATINXRWBDRMAN/SBDRMAN/ONLINELOG/group_8.262.821180431
 RMAN-07529: Reason: catalog is not supported for this file type
...
File Name: +DATINXRWBDRMAN/SBDRMAN/ONLINELOG/group_8.289.948357781
 RMAN-07529: Reason: catalog is not supported for this file type
File Name: +DATINXRWBDRMAN/SBDRMAN/ONLINELOG/group_9.295.948357781
 RMAN-07529: Reason: catalog is not supported for this file type
File Name: +DATINXRWBDRMAN/SBDRMAN/ONLINELOG/group_1.297.948359319
 RMAN-07529: Reason: catalog is not supported for this file type
File Name: +DATINXRWBDRMAN/SBDRMAN/ONLINELOG/group_2.298.948359325
 RMAN-07529: Reason: catalog is not supported for this file type
File Name: +DATINXRWBDRMAN/SBDRMAN/ONLINELOG/group_3.299.948359327
 RMAN-07529: Reason: catalog is not supported for this file type

  
RMAN> SWITCH DATABASE TO COPY;
datafile 1 switched to datafile copy "+DATINXRWBDRMAN/SBDRMAN/DATAFILE/system.258.821180069"
datafile 2 switched to datafile copy "+DATINXRWBDRMAN/SBDRMAN/DATAFILE/sysaux.259.821180069"
datafile 3 switched to datafile copy "+DATINXRWBDRMAN/SBDRMAN/DATAFILE/undotbs1.260.821180069"
datafile 4 switched to datafile copy "+DATINXRWBDRMAN/SBDRMAN/DATAFILE/users.267.821180073"
datafile 5 switched to datafile copy "+DATINXRWBDRMAN/SBDRMAN/DATAFILE/refrmanpfd.257.821180069"
datafile 6 switched to datafile copy "+DATINXRWBDRMAN/SBDRMAN/DATAFILE/refrmancad.273.866618929"
datafile 7 switched to datafile copy "+DATINXRWBDRMAN/SBDRMAN/DATAFILE/datafile_a_tempo.256.874499281"

Comme ma base de données se trouve sur un autre serveur je n'ai pas de risque de faire ça sur mes trois redologs:
RMAN> ALTER DATABASE CLEAR LOGFILE GROUP 1;
Statement processed

RMAN> ALTER DATABASE CLEAR LOGFILE GROUP 2;
Statement processed

RMAN> ALTER DATABASE CLEAR LOGFILE GROUP 3;
Statement processed

RMAN> EXIT
Recovery Manager complete.


Par la suite, on va repartir la base de données :
owner@serverb:/export/home/owner#  srvctl stop database -d BDRMAN

owner@serverb:/export/home/owner#  srvctl start database -d BDRMAN

owner@serverb:/export/home/owner# sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Tue Nov 7 16:30:56 2017
Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics
and Real Application Testing options

SYS@BDRMAN> 
SET PAGESIZE 100
SET LINESIZE 1000
SELECT DB_UNIQUE_NAME, OPEN_MODE, DATABASE_ROLE, FLASHBACK_ON FROM V$DATABASE ;
SELECT CLIENT_PROCESS, PROCESS, SEQUENCE#, STATUS FROM V$MANAGED_STANDBY;

DB_UNIQUE_NAME                 OPEN_MODE            DATABASE_ROLE    FLASHBACK_ON
------------------------------ -------------------- ---------------- ------------------
SBDRMAN                         MOUNTED              PHYSICAL STANDBY NO

SYS@BDRMAN>
CLIENT_P PROCESS    SEQUENCE# STATUS
-------- --------- ---------- ------------
ARCH     ARCH               0 CONNECTED
ARCH     ARCH           25755 CLOSING
ARCH     ARCH               0 CONNECTED
ARCH     ARCH               0 CONNECTED
ARCH     ARCH               0 CONNECTED
ARCH     RFS                0 IDLE
LGWR     RFS            25756 IDLE

7 rows selected.


SYS@BDRMAN> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
Database altered.


SYS@BDRMAN> 
SET PAGESIZE 100
SET LINESIZE 1000
SELECT DB_UNIQUE_NAME, OPEN_MODE, DATABASE_ROLE, FLASHBACK_ON FROM V$DATABASE ;
SELECT CLIENT_PROCESS, PROCESS, SEQUENCE#, STATUS FROM V$MANAGED_STANDBY;

DB_UNIQUE_NAME                 OPEN_MODE            DATABASE_ROLE    FLASHBACK_ON
------------------------------ -------------------- ---------------- ------------------
SBDRMAN                         MOUNTED              PHYSICAL STANDBY NO

SYS@BDRMAN>
CLIENT_P PROCESS    SEQUENCE# STATUS
-------- --------- ---------- ------------
ARCH     ARCH               0 CONNECTED
ARCH     ARCH           25755 CLOSING
ARCH     ARCH               0 CONNECTED
ARCH     ARCH               0 CONNECTED
ARCH     ARCH               0 CONNECTED
ARCH     RFS                0 IDLE
LGWR     RFS            25756 IDLE
N/A      MRP0           25756 APPLYING_LOG

La base de données StandBye est une autre fois synchronisée  : 

SYS@BDRMAN> @check_synchro.sql

LOGS             TIME                  SEQUENCE# INCARNATION# 
---------------- -------------------- ---------- ------------ 
LAST APPLIED  :  07-NOV-2017 16:44:52      25756            2 
LAST RECEIVED :  07-NOV-2017 16:42:50      25757            2 



jeudi 9 novembre 2017

Script de validation de l'état d'une Bd StandBy

Script de validation de l'état de votre Bd StandBy
Ceci a été testé sur des serveurs Solaris et avec des bd's 11g et 12c

#!/usr/bin/bash

#################################################################################
###
### Script      : ValidStatusStBy.sh
### Description : Verification de l etat de la BD StandBy
### Author      : Victor Tijero
### Parametres  :
###             1.- ORACLE_SID
###             2.- UNIQUE_NAME DE LA STANDBY
###             3.- (Y/N) MODE FLASHBACK ACTIVE ATTENDU DANS LA BD STBY
###             4.- UNIQUE_NAME DE LA STANDBY
###             5.- (Y/N) iENVOYER UN EMAIL AVEC LE RESULTAT
###
###
#################################################################################


. ${HOME}/.profile

NLS_LANG="CANADIAN FRENCH_AMERICA.WE8ISO8859P1"
export NLS_LANG
NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI:SS'
export NLS_DATE_FORMAT

####################################
# Initialisation variables
####################################
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
ORACLE_SID=${1}
DB_UNIQUE_NAME_STB=${2}
MOD_FLSH_ACT=${3:-Y}
NBR_JRS_TOLR_SNAP=${4:-1}
ENV_EMAIL=${5:-Y}
#-------------------------------------------------------------------------------
export ORACLE_SID
export DB_UNIQUE_NAME_STB
export MOD_FLSH_ACT
export NBR_JRS_TOLR_SNAP
export ENV_EMAIL
export V_DATE=`date +%Y%m%d_%H%M`
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
if [ ! "$1" ]; then
   echo -e "ERROR - Valeur de la variable ORACLE_SID n a pas ete indique"
   exit
fi
if [ ! "$2" ]; then
   echo -e "ERROR - Valeur de la variable DB_UNIQUE_NAME_STB n a pas ete indique"
   exit
fi
if [ ! "$3" ]; then
   echo -e "ERROR - Valeur de la variable MOD_FLSH_ACT n a pas ete indique. Valeur Y assigne par defaut"
else
  if [ "$MOD_FLSH_ACT" != "Y" -a "$MOD_FLSH_ACT" != "y" -a "$MOD_FLSH_ACT" != "N" -a "$MOD_FLSH_ACT" != "n"  ]; then
     echo -e "ERROR - Valeur de la variable MOD_FLSH_ACT doit etre Y ou N"
     exit
  fi
fi
if [ ! "$4" ]; then
   echo -e "WARNING - Valeur de la variable NBR_JRS_TOLR ne peut pas etre NULL. Valeur 1 assigne par defaut"
else
   if [ $NBR_JRS_TOLR_SNAP -le 0 ]; then
      echo -e "WARNING - Valeur de la variable NBR_JRS_TOLR ne peut pas etre 0. Valeur 1 assigne par defaut"
   fi
fi

#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
if [ ! -d /Scripts/DataGuard/${DB_UNIQUE_NAME_STB} ]; then
   mkdir -p /Scripts/DataGuard/${DB_UNIQUE_NAME_STB}
fi
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
FTEMP=/Scripts/DataGuard/${DB_UNIQUE_NAME_STB}/VerifStatusStdBy_${DB_UNIQUE_NAME_STB}.tmp
LOGFL=/Scripts/DataGuard/${DB_UNIQUE_NAME_STB}/VerifStatusStdBy_${DB_UNIQUE_NAME_STB}.log
export FTEMP
export LOGFL
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
echo -e "ORACLE_SID..........:" $ORACLE_SID
echo -e "DB_UNIQUE_NAME_STB..:" $DB_UNIQUE_NAME_STB
echo -e "MOD_FLSH_ACT........:" $MOD_FLSH_ACT
echo -e "NBR_JRS_TOLR_SNAP...:" $NBR_JRS_TOLR_SNAP
echo -e "ENV_EMAIL...........:" $ENV_EMAIL
#-------------------------------------------------------------------------------
if [ -f ${LOGFL} ]; then
    echo -e "Delete Log..........:" $LOGFL
    rm -f $LOGFL
fi
if [ -f $FTEMP ]; then
    echo -e "Delete du Temp..... :" $FTEMP
    rm -f $FTEMP
fi
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
sqlplus -s / as sysdba <<EOF >$FTEMP
set feed off pages 0 trimspool on linesize 500
SELECT CHECK_MODE_BD||','||CHECK_FLASHBK||','||CHECK_RESTPNT||','||CHECK_LOGSAPP||','||CHECK_LOGSREC||','||CHECK_APPLLOG RESULT
FROM (
SELECT '1CHECK_MODE_BD' ACHECK, DATABASE_ROLE AS VALEUR
  FROM V\$DATABASE
UNION
SELECT '2CHECK_FLASHBK' ACHECK, FLASHBACK_ON AS VALEUR
  FROM V\$DATABASE
UNION
SELECT '3CHECK_RESTPNT' ACHECK, NAME AS VALEUR
  FROM V\$RESTORE_POINT WHERE GUARANTEE_FLASHBACK_DATABASE = 'YES'
UNION
SELECT '4CHECK_LOGSAPP' ACHECK, TO_CHAR(NEXT_TIME,'YYYYMMDD_HH24MI') AS VALEUR
  FROM ( SELECT DISTINCT INC_B.INCARNATION#,
                FIRST_VALUE(ARC.NEXT_TIME) OVER (ORDER BY ARC.SEQUENCE# DESC) NEXT_TIME,
                FIRST_VALUE(ARC.SEQUENCE#) OVER (ORDER BY ARC.SEQUENCE# DESC) SEQUENCE#,
                FIRST_VALUE(ARC.NAME     ) OVER (ORDER BY ARC.SEQUENCE# DESC) NAME
           FROM V\$DATABASE_INCARNATION INC_B, V\$ARCHIVED_LOG ARC
          WHERE ARC.APPLIED = 'YES' AND
                ARC.RESETLOGS_CHANGE# = INC_B.RESETLOGS_CHANGE#
                AND ARC.RESETLOGS_TIME = INC_B.RESETLOGS_TIME
                AND INC_B.INCARNATION# = ( SELECT (CASE DBS.DATABASE_ROLE WHEN 'SNAPSHOT STANDBY' THEN INC_A.PRIOR_INCARNATION# ELSE INC_A.INCARNATION# END ) INCARNATION
                                 FROM V\$DATABASE DBS, V\$DATABASE_INCARNATION INC_A
                                WHERE INC_A.STATUS ='CURRENT' ) )
UNION
SELECT '5CHECK_LOGSREC' ACHECK, TO_CHAR(NEXT_TIME,'YYYYMMDD_HH24MI') AS VALEUR
  FROM ( SELECT DISTINCT INC_B.INCARNATION#,
                FIRST_VALUE(ARC.NEXT_TIME) OVER (ORDER BY ARC.SEQUENCE# DESC) NEXT_TIME,
                FIRST_VALUE(ARC.SEQUENCE#) OVER (ORDER BY ARC.SEQUENCE# DESC) SEQUENCE#,
                FIRST_VALUE(ARC.NAME     ) OVER (ORDER BY ARC.SEQUENCE# DESC) NAME
           FROM V\$DATABASE_INCARNATION INC_B, V\$ARCHIVED_LOG ARC
          WHERE ARC.RESETLOGS_CHANGE# = INC_B.RESETLOGS_CHANGE#
                AND ARC.RESETLOGS_TIME = INC_B.RESETLOGS_TIME
                AND INC_B.INCARNATION# = ( SELECT (CASE DBS.DATABASE_ROLE WHEN 'SNAPSHOT STANDBY' THEN INC_A.PRIOR_INCARNATION# ELSE INC_A.INCARNATION# END ) INCARNATION
                               FROM V\$DATABASE DBS, V\$DATABASE_INCARNATION INC_A
                              WHERE INC_A.STATUS ='CURRENT' ) )
UNION
SELECT DISTINCT '6CHECK_APPLLOG' ACHECK, STATUS VALEUR
  FROM V\$MANAGED_STANDBY
 WHERE STATUS = 'APPLYING_LOG'
ORDER BY ACHECK )
PIVOT ( MAX(VALEUR) FOR ACHECK IN ( '1CHECK_MODE_BD' AS CHECK_MODE_BD,
                                    '2CHECK_FLASHBK' AS CHECK_FLASHBK,
                                    '3CHECK_RESTPNT' AS CHECK_RESTPNT,
                                    '4CHECK_LOGSAPP' AS CHECK_LOGSAPP,
                                    '5CHECK_LOGSREC' AS CHECK_LOGSREC,
                                    '6CHECK_APPLLOG' AS CHECK_APPLLOG
) );
EOF
#################################################################################
#################################################################################
# now process the temp file
V_FOOT="0"
IFS=","
while read CHECK_MODE_BD CHECK_FLASHBK CHECK_RESTPNT CHECK_LOGSAPP CHECK_LOGSREC CHECK_APPLLOG
do
   ###############################################################
   ###############################################################
   ## Ne pas creer le fichier sauf erreur
   ## Si un fichier de Log existe c est parce qu il y a une erreur
       echo " "
       echo "ORACLE_SID..........:" $ORACLE_SID
       echo "DB_UNIQUE_NAME_STB..:" $DB_UNIQUE_NAME_STB
       echo "NBR_JRS_TOLR_SNAP...:" $NBR_JRS_TOLR_SNAP
       echo "CHECK_MODE_BD.......:" $CHECK_MODE_BD
       echo "CHECK_FLASHBK.......:" $CHECK_FLASHBK
       echo "CHECK_RESTPNT.......:" $CHECK_RESTPNT
       echo "V_DATE..............:" $V_DATE
       echo "CHECK_LOGSREC.......:" $CHECK_LOGSREC
       echo "CHECK_LOGSAPP.......:" $CHECK_LOGSAPP
       echo " "
   ###############################################################
   ###############################################################
   if [ ! -z $FTEMP ]; then
      if [ `grep "ORA-" $FTEMP | wc -l` -ge 1 ]; then
         echo -e " \n" >> $LOGFL
         echo -e "ERROR - Possible probleme de connexion a la Bd $ORACLE_SID\n" >> $LOGFL
         echo -e "Parametres........:\n" >> $LOGFL
         echo -e "   ORACLE_SID..........:" $ORACLE_SID >> $LOGFL
         echo -e "   DB_UNIQUE_NAME_STB..:" $DB_UNIQUE_NAME_STB >> $LOGFL
         echo -e "   NBR_JRS_TOLR_SNAP...:" $NBR_JRS_TOLR_SNAP >> $LOGFL
         echo -e "   ORACLE_HOME.........:" $ORACLE_HOME >> $LOGFL
         echo -e " \n" >> $LOGFL
         echo -e "Erreur detecte....:\n" >> $LOGFL
         cat $FTEMP >> $LOGFL
         echo -e " \n" >> $LOGFL
         #exit
      fi
  fi
  ########################################################
  # Validation en fonction du FlashBack de la BD
  ########################################################
  #------------------------------------------------------------#
  if [ "$CHECK_FLASHBK" == "NO" ]; then
     if [ "$MOD_FLSH_ACT" == "Y" -o "$MOD_FLSH_ACT" == "y" ]; then
        echo -e " \n" >> $LOGFL
        echo -e "WARNING - La Bd Standby ${DB_UNIQUE_NAME_STB} semble ne pas etre en mode Flashback  \n" >> $LOGFL
        echo -e "WARNING - Le Flashback est normalement active en PROD sur toutes les BDs avec une configuration DataGuard\n" >> $LOGFL
        echo -e " \n" >> $LOGFL
     fi
  fi
  #------------------------------------------------------------#

  ########################################################
  # Validation en fonction de l APPLY des logs
  #   Une tolerance en fonction du parametre est appliquee
  ########################################################
    #---------------------------------------------------#
    # Structure YYYMMDD - HEURES - APPLY
    #---------------------------------------------------#
       VAH_REC_H=`echo $CHECK_LOGSREC | cut -d_ -f2 | cut -c1,2`
       VAH_REC_M=`echo $CHECK_LOGSREC | cut -d_ -f2 | cut -c3,4`

       VAH_APP_H=`echo $CHECK_LOGSAPP | cut -d_ -f2 | cut -c1,2`
       VAH_APP_M=`echo $CHECK_LOGSAPP | cut -d_ -f2 | cut -c3,4`

       V_DIF_APPLY_LOG_H=`expr $VAH_REC_H - $VAH_APP_H`

    #---------------------------------------------------#
    # Structure YYYMMDD - JOURS - APPLY
    #---------------------------------------------------#
       VAJ_REC=`echo $CHECK_LOGSREC | cut -d_ -f1`
              VAJ_REC=$(/opt/csw/bin/gdate -d "$VAJ_REC $VAH_REC_H:$VAH_REC_M:00" '+%s' )

       VAJ_APP=`echo $CHECK_LOGSAPP | cut -d_ -f1`
              VAJ_APP=$(/opt/csw/bin/gdate -d "$VAJ_APP $VAH_APP_H:$VAH_APP_M:00" '+%s' )

       V_DIF_APPLY_LOG_J=$(( ( $VAJ_REC - $VAJ_APP ) / 86400 ))
    #---------------------------------------------------#

    if [ "$CHECK_MODE_BD" == "SNAPSHOT STANDBY" ]; then
       if [ $V_DIF_APPLY_LOG_J -gt $NBR_JRS_TOLR_SNAP ]; then #### Difference en jours. Au moins 1 jour
          echo -e "INFORMATION - La Bd StandBy ${DB_UNIQUE_NAME_STB} est en Mode Snapshot  \n" >> $LOGFL
          echo -e "INFORMATION - Le seuil de tolerance en mode snapshot a ete etabli a ${NBR_JRS_TOLR_SNAP} jours \n" >> $LOGFL
          echo -e "INFORMATION - Il se peut que des travaux soient en cours sur cette BD mais il faudrait valider\n" >> $LOGFL
          echo -e "ERROR - La BD semble ne pas appliquer de logs il y a ${V_DIF_APPLY_LOG_J} jours \n" >> $LOGFL
          V_FOOT="1"
       fi
    else
       if [ ! "$CHECK_APPLLOG" ]; then      #### L Apply est arrete
           echo -e "INFORMATION - La Bd StandBy ${DB_UNIQUE_NAME_STB} est en Mode Physical  \n" >> $LOGFL
           echo -e "ERROR - La Bd semble ne pas avoir l APPLY des logs active dans sa configuration\n" >> $LOGFL
       fi
       if [ $V_DIF_APPLY_LOG_J -gt 0 ]; then  #### Difference en jours. Au moins 1 jour
          if [ $V_DIF_APPLY_LOG_J -gt 1 ]; then
             echo -e "ERROR(0A) - La BD semble ne pas appliquer de logs il y a ${V_DIF_APPLY_LOG_J} jours \n" >> $LOGFL
             V_FOOT="1"
          else
             V_DIF_ABS=`expr 24 + ${V_DIF_APPLY_LOG_H}`
             if [ $V_DIF_ABS -gt 2 ]; then   #### Difference en heures. Plus de 2 heures
                echo -e "ERROR(1A) - La BD semble ne pas aplliquer de logs il y a plus ou moins ${V_DIF_ABS} heures \n" >> $LOGFL
                V_FOOT="1"
             fi
          fi
       else
          if [ $V_DIF_APPLY_LOG_H -gt 2 ]; then  #### Difference en heures. Plus de 2 heures
             echo -e "ERROR(2A) - La BD semble ne pas appliquer de logs il y a plus ou moins ${V_DIF_APPLY_LOG_H} heures \n" >> $LOGFL
             V_FOOT="1"
          fi
       fi
    fi
###########################################################

  ########################################################
  # Validation en fonction de la reception des logs
  #   Une tolerance de 2 heures est appliquee
  ########################################################
    #---------------------------------------------------#
    # Structure YYYMMDD - HEURES - RECEPTION
    #---------------------------------------------------#
       VRH_DTE_H=`echo $V_DATE | cut -d_ -f2 | cut -c1,2`
       VRH_DTE_M=`echo $V_DATE | cut -d_ -f2 | cut -c3,4`

       VRH_REC_H=`echo $CHECK_LOGSREC | cut -d_ -f2 | cut -c1,2`
       VRH_REC_M=`echo $CHECK_LOGSREC | cut -d_ -f2 | cut -c3,4`

       V_DIF_RECEP_LOG_H=`expr $VRH_DTE_H - $VRH_REC_H `

    #---------------------------------------------------#
    # Structure YYYMMDD - JOURS - RECEPTION
    #---------------------------------------------------#
       VRJ_DTE=`echo $V_DATE | cut -d_ -f1`
              VRJ_DTE=$(/opt/csw/bin/gdate -d "$VRJ_DTE $VRH_DTE_H:$VRH_DTE_M:00" '+%s' )

       VRJ_REC=`echo $CHECK_LOGSREC | cut -d_ -f1`
              VRJ_REC=$(/opt/csw/bin/gdate -d "$VRJ_REC $VRH_REC_H:$VRH_REC_M:00" '+%s' )

       V_DIF_RECEP_LOG_J=$(( ( $VRJ_DTE - $VRJ_REC ) / 86400 ))

    #---------------------------------------------------#
    if [ $V_DIF_RECEP_LOG_J -gt 0 ]; then   #### Difference en jours. Au moins 1 jour
       if [ $V_DIF_RECEP_LOG_J -gt 1 ]; then #### Difference en jours.
          echo -e "ERROR(0R) - La BD semble ne pas recevoir de logs il y a ${V_DIF_RECEP_LOG_J} jours \n" >> $LOGFL
          V_FOOT="1"
       else
          V_DIF_ABS=`expr 24 + ${V_DIF_RECEP_LOG_H}`
          if [ $V_DIF_ABS -gt 2 ]; then     #### Difference en heures. Plus de 2 heures
             echo -e "ERROR(1R) - La BD semble ne pas recevoir de logs il y a plus ou moins ${V_DIF_ABS} heures \n" >> $LOGFL
             V_FOOT="1"
          fi
       fi
    else
       if [ $V_DIF_RECEP_LOG_H -gt 2 ]; then #### Difference en heures. Plus de 2 heures
          echo -e "ERROR(2R) - La BD semble ne pas recevoir de logs il y a plus ou moins ${V_DIF_RECEP_LOG_H} heures \n" >> $LOGFL
          V_FOOT="1"
       fi
    fi

    #---------------------------------------------------#
    if [ $V_DIF_RECEP_LOG_J -gt 0 ]; then
       if [ $V_FOOT == "1" ]; then
          echo -e "INFORMATION - Dernier Log recu........ "${CHECK_LOGSREC}"  \n" >> $LOGFL
          echo -e "INFORMATION - Dernier Log applique....."${CHECK_LOGSAPP}"  \n" >> $LOGFL
       fi
    fi

  #------------------------------------------------------------#
  EMAIL=YOUR.EMAIL@YOUR.DOMAIN
  export EMAIL
  #------------------------------------------------------------#
  if [ -f ${LOGFL} ]; then
     if [ "${ENV_EMAIL}" == "Y" ]; then
        cat $LOGFL | mailx -s "Bd StandBy ${DB_UNIQUE_NAME_STB} a surveiller " $EMAIL
     fi
     cat $LOGFL
  else
     echo " "
     echo "Tout semble correct"
     echo " "
  fi
  exit
done <$FTEMP

exit


À la fin, si jamais il y a un problème, vous pouvez recevoir un message comme celui-ci :