Cancelar Sesiones con scripts en RDS AWS

Cancelar Sesiones con scripts en RDS AWS

Cuando tenemos bases de datos oracle en AWS en momentos nos piden cerrar todas las sesiones INACTIVE o ACTIVE, cuando es una es muy facil, pero cuando son muchas sesiones se debe recurrir a instrucciones que nos ayuden a ganar tiempo.

SQL> select s.username, s.status, count(1) from v$process p, v$session s where paddr(+)=addr group by s.status, s.username order by 1;

USERNAME        STATUS   COUNT(1)
------------------------------ -------- ----------
AWSDBA        ACTIVE 1
AWSDBA        INACTIVE 1
APP            INACTIVE 30
RDSADMIN        INACTIVE 1

Podemos utilizar el script con DISCONNECT
SQL> select status,OSUSER,USERNAME,'EXEC rdsadmin.rdsadmin_util.disconnect('||''||SID||','||serial#||''||' );  ' cadena  from v$session  where status like '%&STATUS%' AND USERNAME  like '%&USER%' ;


INACTIVE    jboss APP
SQL> EXEC rdsadmin.rdsadmin_util.disconnect(3866,5704 );


Podemos utilizar el script con KILL
SQL> select status,OSUSER,USERNAME,'begin rdsadmin.rdsadmin_util.kill(sid=> '||''||SID||',serial =>'||serial#||''||' );end;  ' cadena  from v$session  where status like '%&STATUS%' AND USERNAME  like '%&USER%' ;

SQL> begin rdsadmin.rdsadmin_util.kill(51,59312,'IMMEDIATE');end;
  2  /



Convertir SCN a Marca de Tiempo (scn_to_timestamp)

Convertir SCN a Marca de Tiempo (scn_to_timestamp)

Buscando información me intereso este post importante para temas de recuperación de datos tomado y traducido en google "Vi la buena función a continuación mientras leía sobre la sección de bloqueo y pestillos del Libro del Sr. Thomas Kytes (Expert Oracle Architecture Architecture 9i y 10g Programming Techniques and Solutions) y me dije a mí mismo que tenía que compartirlo para personas como yo. 

Si conoce el SCN (número de cambio del sistema), puede obtener su valor de marca de tiempo (dentro de aproximadamente +/– 3 segundos) mediante la función scn_to_timestamp. Después de mirar el manual para obtener más información, vi otras dos buenas funciones sobre scn. Todos están bajo el paquete DBMS_FLASHBACK y no están disponibles para las versiones anteriores a 10 g. Encontré estas funciones útiles para problemas de recuperación de datos, problemas de recuperación y problemas de flashback."



SQL> select TO_CHAR(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER) from dual;


TO_CHAR(DBMS_FLASHBACK.GET_SYSTEM_CHANGE
----------------------------------------
12282276930740


Convertir a Fecha y hora

SQL> select scn_to_timestamp(12282276930740) as timestamp from dual; ---Valor anterior

TIMESTAMP
---------------------------------------------------------------------------
05-JUN-20 02.39.34.000000000 AM


Convertir de Fecha y Hora a SCN

SQL> select TO_CHAR(timestamp_to_scn(to_timestamp('05/06/2020 02:39:34','DD/MM/YYYY HH24:MI:SS'))) as scn from dual;

SCN
----------------------------------------
12282276930737





Resolver atraso de archive entre PRIMARY y STANDBY - Dataguard

Resolver atraso de archive entre PRIMARY y STANDBY - Dataguard

Una base de datos de StandBy se sincroniza con la primaria mediante la aplicación continua de registros de archivo de una base de datos primaria.
Cuando faltan los registros en espera, hay menos de 10-15 números. Podemos enviar los registros que faltan en la base de datos en espera desde la base de datos primaria mediante SCP / FTP y luego registrar los archivos de registro en espera para resolver el atraso.

Utilice la consulta a continuación para encontrar la direfencia de archivo en modo de espera:
SELECT ARCH.THREAD# "Thread", ARCH.SEQUENCE# "Last Sequence Received", APPL.SEQUENCE# "Last Sequence Applied", (ARCH.SEQUENCE# - APPL.SEQUENCE#) "Difference"
FROM (SELECT THREAD# ,SEQUENCE# FROM V$ARCHIVED_LOG WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$ARCHIVED_LOG GROUP BY THREAD#)) ARCH,
(SELECT THREAD# ,SEQUENCE# FROM V$LOG_HISTORY WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$LOG_HISTORY GROUP BY THREAD#)) APPL
WHERE ARCH.THREAD# = APPL.THREAD# ORDER BY 1;

   Thread Last Sequence Received Last Sequence Applied Difference
---------- ---------------------- --------------------- ----------
        1                 820398                820369         29

Última secuencia recibida Última secuencia aplicada:
SQL> SELECT THREAD#, MAX(SEQUENCE#) AS "LAST_APPLIED_LOG" FROM V$LOG_HISTORY GROUP BY THREAD#;

   THREAD# LAST_APPLIED_LOG
---------- ----------------
     1           820369

Copiar archive desde la BD PRIMARIA:
scp oracle@10.18.0.9:/backup/archive/PRD1/*820254* oracle@10.19.0.10:/backup/archive/STB1/

Registar el archive log en BD STANDBY:
SQL> alter database register logfile '/backup/archive/STB1/820254.arc'; 

logfile registered

Repita el mismo proceso para todos los archivos de registro que faltan en el modo de standby.



Tamaño de Base de Datos Oracle

Estos scripts retornan el tamaño de las Bases de Datos incluyendo data, temp, controlfile, redos.

#---Tamano-en-MB-#

SELECT  a.data_size_mb
       , b.temp_size_mb
       , c.redo_size_mb
       , d.controlfile_size_mb,
   a.data_size_mb
       + b.temp_size_mb
       + c.redo_size_mb
       + d.controlfile_size_mb "total_size in MB"
  FROM (SELECT SUM (BYTES) / 1024 / 1024 data_size_mb
       FROM dba_data_files) a,
       (SELECT NVL (SUM (BYTES), 0) / 1024 / 1024 temp_size_mb
          FROM dba_temp_files) b,
       (SELECT SUM (BYTES) / 1024 / 1024 redo_size_mb
          FROM SYS.v_$log) c,
       (SELECT SUM (block_size * file_size_blks)/1024/1024 controlfile_size_mb
          FROM v$controlfile) d;

DATA_SIZE_MB TEMP_SIZE_MB REDO_SIZE_MB CONTROLFILE_SIZE_MB total_size in MB
------------ ------------ ------------ ------------------- ----------------
      381448   20735.9922      1500             57.75     403741.742



#---Tamano-en-GB-#

SELECT  a.data_size_gb
       , b.temp_size_gb
       , c.redo_size_gb
       , d.controlfile_size_gb,
   a.data_size_gb
       + b.temp_size_gb
       + c.redo_size_gb
       + d.controlfile_size_gb "total_size in MB"
  FROM (SELECT SUM (BYTES) / 1024 / 1024 /1024 data_size_gb
       FROM dba_data_files) a,
       (SELECT NVL (SUM (BYTES), 0) / 1024 / 1024/1024 temp_size_gb
          FROM dba_temp_files) b,
       (SELECT SUM (BYTES) / 1024 / 1024/1024 redo_size_gb
          FROM SYS.v_$log) c,
       (SELECT SUM (block_size * file_size_blks)/1024/1024/1024 controlfile_size_gb
          FROM v$controlfile) d;


DATA_SIZE_GB TEMP_SIZE_GB REDO_SIZE_GB CONTROLFILE_SIZE_GB total_size in MB
------------ ------------ ------------ ------------------- ----------------
  372.507813   20.2499924   1.46484375        .056396484     394.279045