Pages

Monday, December 6, 2021

Drop Obsolete Tablespaces and Datafiles

===================
General
===================
Drop Obsolete Tablespaces and Datafiles
In case table is partitioned, and a TBS is assigned to each partition, it might be that there are obsolete TBS which are assigned to already dropped partitions

Step 1 - Identify Obsolete Tablespaces
Step 2 - Drop Obsolete Tablespaces and Datafiles
Step 3 - Identify datafiles that are assigned to non existing tablespaces.


===================
Code by Example
===================
Step 1 - Identify Obsolete Tablespaces

SELECT 'DROP TABLESPACE '||obsolete_tbs||' INCLUDING CONTENTS AND DATAFILES;'
FROM (
 SELECT DBA_DATA_FILES.tablespace_name as obsolete_tbs, 
        DBA_DATA_FILES.file_name as obsolete_data_file,
        ROUND(DBA_DATA_FILES.bytes/1024/1024) as Mb
 FROM (
  SELECT tablespace_name as tablespace_name 
    FROM DBA_DATA_FILES 
   WHERE 1=1
     AND file_name LIKE '%20%'
     AND tablespace_name NOT LIKE '%YEARLY%'
  MINUS 
  SELECT DISTINCT  tablespace_name 
   FROM DBA_SEGMENTS
 ) OBSOLETE_TBS_LIST,
   DBA_DATA_FILES
 WHERE OBSOLETE_TBS_LIST.tablespace_name =
       DBA_DATA_FILES.tablespace_name
);

Step 2 - Drop Obsolete Tablespaces and Datafiles
DROP TABLESPACE DWNG_REP_MONTHLY_201701 INCLUDING CONTENTS AND DATAFILES;
DROP TABLESPACE DWNG_REP_MONTHLY_201702 INCLUDING CONTENTS AND DATAFILES;
etc...


Step 3 - Identify datafiles that are assigned to non existing tablespaces.
SELECT * 
  FROM DBA_DATA_FILES 
 WHERE file_name LIKE '%DWNG_REP_MONTHLY_2016%' 
ORDER BY file_name;

ls -ltr | grep 2016
rw-r----- 1 oracle dba     2105344 Dec  6 08:43 DWNG_DAILY_TB_MONTHLY_201601_1.dbf
-rw-r----- 1 oracle dba     2105344 Dec  6 08:43 DWNG_DAILY_TB_MONTHLY_201602_1.dbf
-rw-r----- 1 oracle dba     2105344 Dec  6 08:44 DWNG_DAILY_TB_MONTHLY_201603_1.dbf
-rw-r----- 1 oracle dba     2105344 Dec  6 08:44 DWNG_DAILY_TB_MONTHLY_201605_1.dbf
-rw-r----- 1 oracle dba     2105344 Dec  6 08:44 DWNG_DAILY_TB_MONTHLY_201604_1.dbf

In case the files from OS do not exist in DB - simply from these files with OS command - as there were assigned to a dropped tablespace.


Error ORA-14405: partitioned index contains partitions in a different tablespace
In case of error ORA-14405 need to find which objects use the same tablespace.

DROP TABLESPACE DWNG_REP_MONTHLY_201901 INCLUDING CONTENTS AND DATAFILES
ERROR at line 1:
ORA-14405: partitioned index contains partitions in a different tablespace

SELECT table_owner,
       table_name,
       partition_name,
       tablespace_name,
       DBA_TAB_PARTITIONS.*
  FROM DBA_TAB_PARTITIONS
 WHERE (table_owner, table_name) IN (
   SELECT table_owner, table_name
    FROM dba_tab_partitions DTB
   WHERE     DTB.tablespace_name = 'DWNG_REP_MONTHLY_201901'
     AND EXISTS
        (SELECT *
           FROM DBA_TAB_PARTITIONS DTB_INNER
          WHERE DTB.table_owner = DTB_INNER.table_owner
            AND DTB.table_name = DTB_INNER.table_name
            AND DTB_INNER.tablespace_name <>  'DWNG_REP_MONTHLY_201901'
    )
      GROUP BY table_owner, table_name)
ORDER BY 1, 2, partition_position;

SOME_USER REP_OUT_DAILY_SMS_TRANSACTIONS
SOME_USER REP_IN_DAILY_SMS_TRANSACTIONS
MY_USER   REP_OUT_DAILY_TRANSACTIONS
MY_USER   REP_IN_DAILY_DN_TRANSACTIONS

===================
Check Tablespace Usage
===================
SELECT 'TABLE' AS type, COUNT(*) AS segments
  FROM DBA_TABLES T
WHERE T.TABLESPACE_NAME = 'DWNG_REP_MONTHLY_202106'
UNION ALL  
SELECT  'INDEX' AS type, COUNT(*) AS segments
  FROM DBA_INDEXES I
WHERE I.TABLESPACE_NAME = 'DWNG_REP_MONTHLY_202106'
UNION ALL     
SELECT 'LOB' as type, COUNT(*) AS segments
  FROM DBA_LOBS L
WHERE L.TABLESPACE_NAME = 'DWNG_REP_MONTHLY_202106'
UNION ALL
SELECT 'TABLE_PARTITIONS' as type, COUNT(*) as segments
  FROM DBA_TAB_PARTITIONS TP
WHERE TP.TABLESPACE_NAME = 'DWNG_REP_MONTHLY_202106'
UNION ALL
SELECT 'INDEX_PARTITIONS' as type, COUNT(*) as segments
  FROM DBA_IND_PARTITIONS IP
WHERE IP.TABLESPACE_NAME = 'DWNG_REP_MONTHLY_202106'
UNION ALL
SELECT 'LOB_PARTITIONS' as type, COUNT(*) as segments
  FROM DBA_LOB_PARTITIONS LP
WHERE LP.TABLESPACE_NAME = 'DWNG_REP_MONTHLY_202106';



ORA-14404 and ORA-14405 When dropping a partition
DROP TABLESPACE CDROMETER_DATA_HIST_202107 INCLUDING CONTENTS AND DATAFILES;
ORA-14404: partitioned table contains partitions in a different tablespace

To solve this error, need to free move these objects to a different tablespace.

CREATE TABLESPACE CDROMETER_TEST_TBS DATAFILE '/oracle_db/db1/db_igt/cdrometer_test_data_01.dbf' SIZE 100M AUTOEXTEND ON MAXSIZE 10000M;

To generate the SQL:

SELECT 'ALTER TABLE '||TABLE_OWNER ||'.'||table_name||' MOVE PARTITION '||partition_name||' TABLESPACE NEW_TABLESPACE_NAME UPDATE INDEXES;' 
FROM DBA_TAB_PARTITIONS 
WHERE tablespace_name = 'CDROMETER_DATA_HIST_202107';

Actual SQL:

ALTER TABLE CDROMETER_TEST.CDROMETER_DATA_HISTORY MOVE PARTITION P_202107 TABLESPACE CDROMETER_TEST_TBS UPDATE INDEXES;

DROP TABLESPACE CDROMETER_DATA_HIST_202107 INCLUDING CONTENTS AND DATAFILES;

ORA-14405: partitioned index contains partitions in a different tablespace

SELECT COUNT(*) FROM DBA_SEGMENTS WHERE tablespace_name IN ('CDROMETER_DATA_HIST_202107');
  COUNT(*)
----------
         0

SELECT COUNT(*) FROM DBA_IND_PARTITIONS WHERE tablespace_name IN ('CDROMETER_DATA_HIST_202107');
 
  COUNT(*)
----------
         3
To generate the SQL:
SELECT 'ALTER INDEX '||index_owner||'.'||index_name||' REBUILD PARTITION '||partition_name||' TABLESPACE CDROMETER_TEST_TBS;' FROM DBA_IND_PARTITIONS WHERE tablespace_name IN ('CDROMETER_DATA_HIST_202107');

ALTER INDEX CDROMETER_TEST.CDROMETER_DATA_HISTORY_A2 REBUILD PARTITION P_202107  TABLESPACE CDROMETER_TEST_TBS;

DROP TABLESPACE CDROMETER_DATA_HIST_202107 INCLUDING CONTENTS AND DATAFILES;
Tablespace dropped

Checks before dropping tablespace
SELECT * FROM DBA_SEGMENTS       WHERE tablespace_name LIKE 'CDROMETER_DATA_HIST_2021%'
SELECT * FROM DBA_IND_PARTITIONS WHERE tablespace_name LIKE 'CDROMETER_DATA_HIST_2021%'
SELECT * FROM DBA_TAB_PARTITIONS WHERE tablespace_name LIKE 'CDROMETER_DATA_HIST_2021%'
SELECT * FROM DBA_DATA_FILES     WHERE tablespace_name LIKE 'CDROMETER_DATA_HIST_2021%'

DROP TABLESPACE CDROMETER_DATA_HIST_202109 INCLUDING CONTENTS AND DATAFILES;

Tuesday, November 30, 2021

ORA-23404: refresh group "MY_USER"."MY_TABLE" does not exist

=============
General
=============
Error when running the scheduled refresh for a snapshot

BEGIN
 DBMS_REFRESH.refresh('"MY_USER"."MY_TABLE"');
END;
/
 
 
ORA-23404: refresh group "MY_USER"."MY_TABLE" does not exist
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95
ORA-06512: at "SYS.DBMS_REFRESH", line 23
ORA-06512: at "SYS.DBMS_REFRESH", line 195
ORA-06512: at line 3
View program sources of error stack?

=============
How to Fix
=============
Solution A
Replace DBMS_REFRESH with DBMS_SNAPSHOT - which does not require group configuration

BEGIN
 DBMS_SNAPSHOT.refresh('"
MY_USER"."MY_TABLE"');
END;
/
 
Solution B
Create a Refresh Group. 
And refresh by Refresh group name.

Now:
SELECT rowner, rname, refgroup, job, interval 
FROM USER_REFRESH 
WHERE rname = 'MY_GROUP';
--0 rows selected

Create a new Refresh Group. 
BEGIN
  DBMS_REFRESH.MAKE(name => 'MY_USER.MY_GROUP',
                    list => '', 
    next_date => TRUNC(SYSDATE+1)+0.2/24 , 
    interval => 'TRUNC(SYSDATE+1)+0.2/24 ',
                    implicit_destroy => TRUE, 
    lax => FALSE,
                    job => 299);
  commit;
END;
/

Add Materialized View to the Refresh Group. 
BEGIN
  DBMS_REFRESH.ADD(name => 'MY_USER.MY_GROUP',
                   list => 'MY_USER.MY_TABLE');
  commit;
END;
/

SELECT rowner, rname, refgroup, job, interval 
  FROM USER_REFRESH 
 WHERE rname = 'MY_GROUP';
 
ROWNER  RNAME        REFGROUP  JOB INTERVAL
------- ------------ --------- --- -------------------------
DWNG    MY_GROUP     141       299 TRUNC(SYSDATE+1)+0.5/24

SELECT owner, name, type, rowner, rname, refgroup, job  
  FROM USER_REFRESH_CHILDREN 
WHERE refgroup = 141;
 
OWNER    NAME     TYPE     ROWNER  RNAME        REFGROUP JOB
-------- -------- ---------------- ------------ -------- ---
MY_USER  MY_TABLE SNAPSHOT MY_USER MCCMNC_TABLE 11       299


Join USER_REFRESH  and USER_REFRESH_CHILDREN 
SELECT UR.rowner, UR.rname, URC.name, URC.type, UR.job
  FROM USER_REFRESH UR, USER_REFRESH_CHILDREN URC
 WHERE UR.refgroup = URC.refgroup;

ROWNER     RNAME    NAME      TYPE     JOB
---------- -------- --------- -------- ----
MY_USER    MY_GROUP MY_TABLE  SNAPSHOT 299
 

Fix the broken job
BEGIN
  DBMS_JOB.broken(299, FALSE);
  DBMS_JOB.next_date(299, TRUNC(SYSDATE+1)+0.2/24);
  commit;
END;
/

To test the execution:

BEGIN
  DBMS_JOB.next_date(299, SYSDATE+1/1440);
  commit;
END;
/

Sunday, November 28, 2021

Golden gate DATAPUMP is not working

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

General
===================
Golden Gate DATAPUMP is not working
In the status, DATAPUMP is RUNNING
But no data is getting replicated
How to troubleshoot and fix

===================
Troubleshoot and Fix
===================
GGSCI (my_server) 1> INFO ALL

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING
EXTRACT     RUNNING     DPM_I_01    00:00:00      00:00:01
EXTRACT     RUNNING     DPM_N_01    00:00:00      00:00:06
EXTRACT     RUNNING     DPM_P_01    00:00:00      00:00:00
EXTRACT     RUNNING     DPM_S_01    00:00:00      00:00:01
EXTRACT     RUNNING     EXT_I_01    00:00:00      00:00:05
EXTRACT     RUNNING     EXT_N_01    00:00:00      00:00:01
EXTRACT     RUNNING     EXT_P_01    00:00:00      00:00:04
EXTRACT     RUNNING     EXT_S_01    00:00:03      00:00:04
REPLICAT    RUNNING     REP_I_01    00:00:00      00:00:06
REPLICAT    RUNNING     REP_N_01    00:00:00      00:00:03
REPLICAT    RUNNING     REP_P_01    00:00:00      00:00:06
REPLICAT    RUNNING     REP_S_01    00:00:00      00:00:08

GGSCI (my_server) 6> SEND EXTRACT DPM_N_01 STATS

Sending STATS request to EXTRACT DPM_N_01 ...

No active extraction maps.


GGSCI (my_server as OGG@igt) 10> INFO DPM_N_01

EXTRACT    DPM_N_01  Last Started 2021-11-28 10:06   Status RUNNING
Checkpoint Lag       00:00:00 (updated 00:00:04 ago)
Process ID           31970
Log Read Checkpoint  File /software/ogg/191/dirdat/01/out/en000000000
                     First Record  RBA 0




GGSCI (my_server as OGG@igt) 11> DBLOGIN USERID OGG PASSWORD XXXXX

GGSCI (my_server as OGG@igt) 12> INFO EXT_N_01 DETAIL

  Trail Name                                       Seqno        RBA     Max MB Trail Type

  /software/ogg/191/dirdat/01/out/en                  10     198769        500 EXTTRAIL


GGSCI (my_server as OGG@igt) 14> SEND EXTRACT DPM_N_01, FORCESTOP

Sending FORCESTOP request to EXTRACT DPM_N_01 ...
STOP request will be executed immediately (recovery aborted).


GGSCI (my_server as OGG@igt) 15> STOP EXTRACT DPM_N_01
EXTRACT DPM_N_01 is already stopped.


GGSCI (my_server as OGG@igt) 16> ALTER EXTRACT DPM_N_01, EXTSEQNO 10 EXTRBA 198769
EXTRACT altered.


GGSCI (my_server as OGG@igt) 17> START DPM_N_01

Sending START request to MANAGER ...
EXTRACT DPM_N_01 starting


GGSCI (my_server as OGG@igt) 18> INFO DPM_N_01

EXTRACT    DPM_N_01  Last Started 2021-11-28 13:02   Status RUNNING
Checkpoint Lag       00:00:00 (updated 00:00:06 ago)
Process ID           23935
Log Read Checkpoint  File /software/ogg/191/dirdat/01/out/en000000010
                     First Record  RBA 198769


GGSCI (my_server as OGG@igt) 19>  INFO DPM_N_01

EXTRACT    DPM_N_01  Last Started 2021-11-28 13:02   Status RUNNING
Checkpoint Lag       00:00:00 (updated 00:00:03 ago)
Process ID           23935
Log Read Checkpoint  File /software/ogg/191/dirdat/01/out/en000000010
                     2021-11-28 13:02:07.000000  RBA 203030


Now the RBA in Datapump is advancing

Golden Gate REPLICAT is not working

===================
General
===================
Golden Gate REPLICAT is not working
In the status, REPLICATE is RUNNING
But no data is getting replicated
How to troubleshoot and fix

===================
Troubleshoot and Fix
===================
GGSCI (my_server) 1> INFO ALL

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING
EXTRACT     RUNNING     DPM_I_01    00:00:00      00:00:01
EXTRACT     RUNNING     DPM_N_01    00:00:00      00:00:06
EXTRACT     RUNNING     DPM_P_01    00:00:00      00:00:00
EXTRACT     RUNNING     DPM_S_01    00:00:00      00:00:01
EXTRACT     RUNNING     EXT_I_01    00:00:00      00:00:05
EXTRACT     RUNNING     EXT_N_01    00:00:00      00:00:01
EXTRACT     RUNNING     EXT_P_01    00:00:00      00:00:04
EXTRACT     RUNNING     EXT_S_01    00:00:03      00:00:04
REPLICAT    RUNNING     REP_I_01    00:00:00      00:00:06
REPLICAT    RUNNING     REP_N_01    00:00:00      00:00:03
REPLICAT    RUNNING     REP_P_01    00:00:00      00:00:06
REPLICAT    RUNNING     REP_S_01    00:00:00      00:00:08

GGSCI (my_server) 1> SEND REPLICAT REP_N_01 STATS

Sending STATS request to REPLICAT REP_N_01 ...

No active replication maps.

Integrated Replicat Statistics:

        Total transactions                                 0.00
        Redirected                                         0.00
        Replicated procedures                              0.00
        DDL operations                                     0.00
        Stored procedures                                  0.00
        Datatype functionality                             0.00
        Operation type functionality                       0.00
        Event actions                                      0.00
        Direct transactions ratio                          0.00%

GGSCI (my_server) 1> INFO REP_N_01

REPLICAT   REP_N_01  Last Started 2021-11-28 10:06   Status RUNNING
INTEGRATED
Checkpoint Lag       00:00:00 (updated 00:00:00 ago)
Process ID           31883
Log Read Checkpoint  File /software/ogg/191/dirdat/01/in/en000000000
                     First Record  RBA 0


 

oracle@qanfv-2-dbs-01:/software/ogg/191/dirdat/01/in>% ls -ltr | grep en
-rw-r----- 1 oracle dba 499997601 Aug  1 08:01 en000007644
-rw-r----- 1 oracle dba 499999336 Aug  1 08:03 en000007645
-rw-r----- 1 oracle dba 499997863 Aug  1 08:04 en000007646
-rw-r----- 1 oracle dba 499999493 Aug  1 08:06 en000007647
-rw-r----- 1 oracle dba 499998290 Aug  1 08:08 en000007648
-rw-r----- 1 oracle dba 499995601 Aug  1 08:10 en000007649
-rw-r----- 1 oracle dba 499997099 Aug  1 08:11 en000007650
-rw-r----- 1 oracle dba 499996252 Aug  1 08:13 en000007651
-rw-r----- 1 oracle dba 499996558 Aug  1 08:16 en000007652
-rw-r----- 1 oracle dba 499997959 Aug  1 08:18 en000007653
-rw-r----- 1 oracle dba 499998548 Aug  1 08:19 en000007654
-rw-r----- 1 oracle dba 331578832 Aug  1 08:38 en000007655
-rw-r----- 1 oracle dba 499999030 Aug  1 08:46 en000007656
-rw-r----- 1 oracle dba 499999386 Aug  1 08:48 en000007657
-rw-r----- 1 oracle dba 159395611 Nov 28 10:06 en000007658
-rw-r----- 1 oracle dba   5460356 Nov 28 11:56 en000007659


 
GGSCI (my_server) 2> STOP REPLICAT REP_N_01

Sending STOP request to REPLICAT REP_N_01 ...
Request processed.


GGSCI (my_server) 3> ALTER REPLICAT REP_N_01, EXTSEQNO 7658

2021-11-28 11:59:33  INFO    OGG-06594  Replicat REP_N_01 has been altered. Even the start up position might be updated, duplicate suppression remains active in next startup. To override duplicate suppression, start REP_N_01 with NOFILTERDUPTRANSACTIONS option.

REPLICAT altered.


 
GGSCI (my_server) 8> START REPLICAT REP_N_01

Sending START request to MANAGER ...
REPLICAT REP_N_01 starting


GGSCI (my_server) 11> INFO REPLICAT REP_N_01

REPLICAT   REP_N_01  Last Started 2021-11-28 12:02   Status RUNNING
INTEGRATED
Checkpoint Lag       00:00:00 (updated 00:00:20 ago)
Process ID           15945
Log Read Checkpoint  File /software/ogg/191/dirdat/01/in/en000007658
                     First Record  RBA 0


GGSCI (my_server) 12> SEND REPLICAT REP_N_01 STATS

Sending STATS request to REPLICAT REP_N_01 ...

Start of Statistics at 2021-11-28 12:03:13.


Integrated Replicat Statistics:

        Total transactions                                 3.00
        Redirected                                         0.00
        Replicated procedures                              0.00
        DDL operations                                     0.00
        Stored procedures                                  0.00
        Datatype functionality                             0.00
        Operation type functionality                       0.00
        Event actions                                      0.00
        Direct transactions ratio                          0.00%

Replicating from LAB_QANFV_ALLQQ.SGA_W_IPN_SUBSCRIBER to LAB_QANFV_ALLQQ.SGA_W_IPN_SUBSCRIBER:

*** Total statistics since 2021-11-28 12:03:06 ***
        Total inserts                                      0.00
        Total updates                                      0.00
        Total deletes                                      0.00
        Total upserts                                      0.00
        Total discards                                     0.00
        Total ignores                                   1181.00
        Total operations                                   0.00

*** Daily statistics since 2021-11-28 12:03:06 ***
        Total inserts                                      0.00
        Total updates                                      0.00
        Total deletes                                      0.00
        Total upserts                                      0.00
        Total discards                                     0.00
        Total ignores                                   1181.00
        Total operations                                   0.00

*** Hourly statistics since 2021-11-28 12:03:06 ***
        Total inserts                                      0.00
        Total updates                                      0.00
        Total deletes                                      0.00
        Total upserts                                      0.00
        Total discards                                     0.00
        Total ignores                                   1181.00
        Total operations                                   0.00

*** Latest statistics since 2021-11-28 12:03:06 ***
        Total inserts                                      0.00
        Total updates                                      0.00
        Total deletes                                      0.00
        Total upserts                                      0.00
        Total discards                                     0.00
        Total ignores                                   1181.00
        Total operations                                   0.00

End of Statistics.




Issue is fixed.

Tuesday, October 12, 2021

Error in RMAN due to a corruption in UNDO Tablespace. How to Fix RMAN-03009; ORA-19501; ORA-27061; Linux-x86_64 Error: 5: Input/output error

=====================
General
=====================
Error in RMAN due to a corruption in UNDO Tablespace

 
RMAN-03009: failure of backup command on dev_0 channel at 10/12/2021 03:02:30
ORA-19501: read error on file "/oracle_db/db1/db_igt/ora_undotbs_01.dbf", block number 65664 (block size=8192)
ORA-27061: waiting for async I/Os failed
Linux-x86_64 Error: 5: Input/output error
Additional information: -1
Additional information: 524288

=====================
Troubleshoot
=====================
Try to validate datafile using RMAN calidate option
SELECT file_id, file_name 
  FROM DBA_DATA_FILES WHERE file_name LIKE '%UNDO%';

3 /oracle_db/db1/db_igt/ora_undotbs_01.dbf

OS>rman nocatalog
RMAN>connect target /
RMAN>validate datafile 3;


~>% rman nocatalog
Recovery Manager: Release 11.1.0.7.0 - Production on Tue Oct 12 15:18:32 2021
Copyright (c) 1982, 2007, Oracle.  All rights reserved.
RMAN> connect target /
connected to target database: IGT (DBID=9999999999)
using target database control file instead of recovery catalog
RMAN> validate datafile 3
2> ;
Starting validate at 12-OCT-21
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=1613 device type=DISK
channel ORA_DISK_1: starting validation of datafile
channel ORA_DISK_1: specifying datafile(s) for validation
input datafile file number=00003 name=/oracle_db/db1/db_igt/ora_undotbs_01.dbf
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of validate command on ORA_DISK_1 channel at 10/12/2021 15:18:53
ORA-19501: read error on file "/oracle_db/db1/db_igt/ora_undotbs_01.dbf", block number 65664 (block size=8192)
ORA-27061: waiting for async I/Os failed
Linux-x86_64 Error: 5: Input/output error
Additional information: -1
Additional information: 1048576

The file in question is 2Gb in size
-rw-r----- 1 oracle dba  2097160192 Oct 12 15:22 ora_undotbs_01.dbf



Try same with dbv
dbv file=/oracle_db/db1/db_igt/ora_undotbs_01.dbf blocksize=8192 FEEDBACK=100
DBVERIFY - Verification starting : FILE = /oracle_db/db1/db_igt/ora_undotbs_01.dbf
................................................................................
................................................................................
DBV-00600: Fatal Error - [28] [27061] [0] [0]

=====================
Solution
=====================
Indeed there is a corruption in UNDO Tablespace
Need to drop + create new UNDO Tablespace


show parameter undo_tablespace
  
NAME             TYPE       VALUE
---------------- ---------- --------------
undo_tablespace  string     UNDOTBS

SELECT tablespace_name, file_id, file_name,round (bytes / (1024 * 1024), 0) total_space 
FROM dba_data_files 
WHERE tablespace_name='UNDOTBS';

TABLESPACE_NAME FILE_ID FILE_NAME                                TOTAL_SPACE

--------------- ------- ---------------------------------------- --------------
UNDOTBS         3       /oracle_db/db1/db_igt/ora_undotbs_01.dbf 2000

Steps
CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE '/oracle_db/db1/db_igt/ora_undotbs_02.dbf' SIZE 2000M;
ALTER SYSTEM SET UNDO_TABLESPACE = UNDOTBS2 SCOPE=BOTH;
SELECT TABLESPACE_NAME, STATUS, COUNT(*) FROM DBA_ROLLBACK_SEGS GROUP BY TABLESPACE_NAME, STATUS;
SELECT STATUS,SEGMENT_NAME FROM DBA_ROLLBACK_SEGS WHERE STATUS NOT IN ('OFFLINE') AND TABLESPACE_NAME='UNDOTBS';
SELECT TABLESPACE_NAME, STATUS, COUNT(*) FROM DBA_ROLLBACK_SEGS GROUP BY TABLESPACE_NAME, STATUS;
DROP TABLESPACE UNDOTBS INCLUDING CONTENTS AND DATAFILES;

Steps by Example
CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE '/oracle_db/db1/db_igt/ora_undotbs_02.dbf' SIZE 2000M;
Tablespace created.

ALTER SYSTEM SET UNDO_TABLESPACE = UNDOTBS2 SCOPE=BOTH;

System altered.

SELECT TABLESPACE_NAME, STATUS, COUNT(*) FROM DBA_ROLLBACK_SEGS GROUP BY TABLESPACE_NAME, STATUS;

TABLESPACE_NAME                STATUS                 COUNT(*)
------------------------------ -------------------- ----------
SYSTEM                         ONLINE                        1
UNDOTBS                        OFFLINE                     135
UNDOTBS2                       ONLINE                       47

SELECT STATUS,SEGMENT_NAME FROM DBA_ROLLBACK_SEGS WHERE STATUS NOT IN ('OFFLINE') AND TABLESPACE_NAME='UNDOTBS';
no rows selected

DROP TABLESPACE UNDOTBS INCLUDING CONTENTS AND DATAFILES;
Tablespace dropped.

Now, optionally, can revert back to the original name
CREATE UNDO TABLESPACE UNDOTBS DATAFILE '/oracle_db/db1/db_igt/ora_undotbs_01.dbf' SIZE 2000M;
ALTER SYSTEM SET UNDO_TABLESPACE = UNDOTBS SCOPE=BOTH;
SELECT TABLESPACE_NAME, STATUS, COUNT(*) FROM DBA_ROLLBACK_SEGS GROUP BY TABLESPACE_NAME, STATUS;
SELECT STATUS,SEGMENT_NAME FROM DBA_ROLLBACK_SEGS WHERE STATUS NOT IN ('OFFLINE') AND TABLESPACE_NAME='UNDOTBS';
SELECT TABLESPACE_NAME, STATUS, COUNT(*) FROM DBA_ROLLBACK_SEGS GROUP BY TABLESPACE_NAME, STATUS;
DROP TABLESPACE UNDOTBS2 INCLUDING CONTENTS AND DATAFILES;


select file_id, file_name from dba_data_files where file_name LIKE '%undo%';

   FILE_ID FILE_NAME
---------- ----------------------------------------------------------
         3 /oracle_db/db1/db_igt/ora_undotbs_01.dbf


Try now again to validate datafiles using RMAN. This time it should be successful.

OS>rman nocatalog
RMAN>connect target /
RMAN>validate datafile 3;
RMAN> validate datafile 3
2> ;

Starting validate at 12-OCT-21
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=1526 device type=DISK
channel ORA_DISK_1: starting validation of datafile
channel ORA_DISK_1: specifying datafile(s) for validation
input datafile file number=00003 name=/oracle_db/db1/db_igt/ora_undotbs_01.dbf
channel ORA_DISK_1: validation complete, elapsed time: 00:00:15
List of Datafiles
=================
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
3    OK     0              255524       256000          16015824263262
  File Name: /oracle_db/db1/db_igt/ora_undotbs_01.dbf
  Block Type Blocks Failing Blocks Processed
  ---------- -------------- ----------------
  Data       0              0
  Index      0              0
  Other      0              476

Finished validate at 12-OCT-21

Friday, August 6, 2021

ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance

=================
Issue
=================
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance is coming after recreating SPFILE.

=================
How to recreate
=================

SQL> CREATE PFILE='/software/oracle/admin/igt/pfile/pfileigt.ora_20210806' FROM SPFILE;
File created.
SQL> CREATE SPFILE='/software/oracle/admin/igt/pfile/sfileigt.ora_20210806' FROM MEMORY;
File created.
--------------
sho parameter spfile
/software/oracle/admin/igt/pfile/spfileigt.ora

SQL> SHUTDOWN IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP;
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.

To find out which parameters are deprecated, open the alert.log

  
WARNING: The user_dump_dest init.ora parameter has been deprecated.
WARNING: Please remove the user_dump_dest parameter from the init.ora file.
WARNING: The background_dump_dest init.ora parameter has been deprecated.
WARNING: Please remove the background_dump_dest parameter from the init.ora file.

Deprecated system parameters are:
  background_dump_dest
  user_dump_dest


=================
How to Fix
=================

CREATE PFILE='/software/oracle/admin/igt/pfile/pfile_fix_20210806.ora' from SPFILE;

!vi /software/oracle/admin/igt/pfile/pfile_fix_20210806.ora
Remove background_dump_dest + user_dump_dest from /software/oracle/admin/igt/pfile/pfile_fix_20210806.ora

SQL> SHUTDOWN IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup pfile = '/software/oracle/admin/igt/pfile/pfile_fix_20210806.ora';
ORACLE instance started.

Total System Global Area 4175568896 bytes
Fixed Size                  2259840 bytes
Variable Size            2214593664 bytes
Database Buffers         1946157056 bytes
Redo Buffers               12558336 bytes
Database mounted.
Database opened.



SQL> CREATE SPFILE FROM  PFILE='/software/oracle/admin/igt/pfile/pfile_fix_20210806.ora';
File created.

SQL> SHUTDOWN IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP;
ORACLE instance started.

Total System Global Area 4175568896 bytes
Fixed Size                  2259840 bytes
Variable Size            2214593664 bytes
Database Buffers         1946157056 bytes
Redo Buffers               12558336 bytes
Database mounted.
Database opened.
SQL>

Wednesday, August 4, 2021

Create an AFTER LOGON trigger to log sessions

Create an AFTER LOGON trigger to log sessions

CREATE TABLE LOGON_SESSIONS_HIST (
  schema_name VARCHAR2(30),
  os_user VARCHAR2(30),
  machine VARCHAR2(100),
  program VARCHAR2(100),
  client_ip VARCHAR2(15),
  logon_time DATE) 
TABLESPACE IGT_TABLE;

CREATE OR REPLACE TRIGGER LOGON_LOGGER_TRG
AFTER LOGON ON VRS_GROUP_SHARE.SCHEMA
BEGIN
  INSERT INTO LOGON_SESSIONS_HIST(schema_name, os_user, machine, program, client_ip, logon_time)
  SELECT sys_context ('USERENV', 'SESSION_USER') as schema_name, 
         sys_context ('USERENV', 'OS_USER') as os_user,
         sys_context ('USERENV', 'HOST') as machine, 
         sys_context ('USERENV', 'MODULE') as program,
         sys_context ('USERENV', 'IP_ADDRESS') as client_id,
         SYSDATE  as login_time   
         FROM DUAL; 
  COMMIT;
EXCEPTION
  WHEN OTHERS THEN
    NULL;
END;
/


SELECT * FROM LOGON_SESSIONS_HIST ;
 
SCHEMA_NAME     OS_USER  MACHINE      PROGRAM        CLIENT_IP      LOGON_TIME
--------------- -------- ------------ -------------- -------------- -----------------
VRS_GROUP_SHARE oracle   qadev-aps-01                               20210804 12:45:24
VRS_GROUP_SHARE os_user  DOMAIN\USER  plsqldev.exe   10.135.251.200 20210804 12:45:32
VRS_GROUP_SHARE oracle   qadev-aps-01                               20210804 12:46:29
VRS_GROUP_SHARE oracle   qadev-aps-01                               20210804 12:47:04
VRS_GROUP_SHARE oracle   qadev-aps-01                               20210804 12:48:09
VRS_GROUP_SHARE os_user  DOMAIN\USER  plsqldev.exe   10.135.251.200 20210804 12:48:28
VRS_GROUP_SHARE oracle   qadev-aps-01                               20210804 12:49:14
VRS_GROUP_SHARE os_user  DOMAIN\USER  plsqldev.exe   10.135.251.200 20210804 12:45:32

ALTER TRIGGER LOGON_LOGGER_TRG DISABLE;