Pages

Monday, February 9, 2026

DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC procedure

- Info:

Automatic optimizer statistics collection gathers optimizer statistics by calling the DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC procedure. 

The GATHER_DATABASE_STATS_JOB_PROC procedure collects statistics on database objects when the object has no previously gathered statistics or the existing statistics are stale because the underlying object has been modified significantly (more than 10% of the rows).

The DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC is an internal procedure, but it operates in a very similar fashion to the DBMS_STATS.GATHER_DATABASE_STATS procedure using the GATHER AUTO option. 

The primary difference is that the DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC procedure prioritizes the database objects that require statistics, so that those objects which most need updated statistics are processed first. 

This ensures that the most-needed statistics are gathered before the maintenance window closes.

- Check Current Status:

SELECT client_name, status FROM DBA_AUTOTASK_CLIENT;

CLIENT_NAME                         STATUS
----------------------------------- --------------------------------
auto optimizer stats collection     DISABLED
auto space advisor                  DISABLED
sql tuning advisor                  DISABLED

- To Enable/Disable Auto Task for Gathering Statistics:

BEGIN
  DBMS_AUTO_TASK_ADMIN.DISABLE(

    client_name => 'auto optimizer stats collection', 
    operation => NULL, 
    window_name => NULL);
END;
/

BEGIN
  DBMS_AUTO_TASK_ADMIN.ENABLE(

    client_name => 'auto optimizer stats collection', 
    operation => NULL, 
    window_name => NULL);
END;
/

Gathering Statistics Job uses CPU

Begin Snap:      1519 26-Jan-21 22:00:44       144       9.7
  End Snap:      1520 26-Jan-21 23:00:12       144      10.5
   Elapsed:               59.46 (mins)
   DB Time:               10.90 (mins)

Top 10 Foreground Events by Total Wait Time

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                           Total Wait       Avg   % DB Wait
Event                                Waits Time (sec)      Wait   time Class
------------------------------ ----------- ---------- --------- -----
DB CPU                                          478.8            73.2
db file sequential read             15,574       44.9    2.88ms    6.9 User I/O
local write wait                     9,439       36.2    3.83ms    5.5 User I/O
log file sync                       14,062       33.6    2.39ms    5.1 Commit
db file scattered read               3,023       16.1    5.32ms    2.5 User I/O
direct path read                     3,796       14.7    3.88ms    2.3 User I/O
enq: RO - fast object reuse          1,900       12.3    6.46ms    1.9 Applicat
reliable message                     2,035        3.1    1.54ms     .5 Other
PGA memory operation               122,899        3.1   25.03us     .5 Other
enq: TM - contention                    10        2.8  278.76ms     .4 Applicat


Operating System Statistics                 DB/Inst: IGT/igt  Snaps: 1519-1520

-> *TIME statistic values are diffed.

   All others display actual values.  End Value is displayed if different

-> ordered by statistic type (CPU Use, Virtual Memory, Hardware Config), Name


Statistic                                  Value        End Value
------------------------- ---------------------- ----------------
FREE_MEMORY_BYTES                    376,426,496      192,045,056
INACTIVE_MEMORY_BYTES              3,918,254,080    3,863,429,120
SWAP_FREE_BYTES                   12,415,664,128   12,394,430,464
BUSY_TIME                                464,704
IDLE_TIME                                879,888
IOWAIT_TIME                               25,893
NICE_TIME                                  4,948
SYS_TIME                                  57,235
USER_TIME                                377,969
LOAD                                          13                2
VM_IN_BYTES                           20,910,080
VM_OUT_BYTES                          36,524,032
PHYSICAL_MEMORY_BYTES             10,303,094,784
-> %CPU   - CPU Time      as a percentage of Elapsed Time
-> %IO    - User I/O Time as a percentage of Elapsed Time
-> Captured SQL account for   68.1% of Total DB Time (s):             654
-> Captured PL/SQL account for  176.0% of Total DB Time (s):             654
        Elapsed                  Elapsed Time
        Time (s)    Executions  per Exec (s)  %Total   %CPU    %IO    SQL Id
---------------- -------------- ------------- ------ ------ ------ -------------
           875.1              1        875.11  133.8   64.9   28.8 b6usrg82hwsa3
Module: DBMS_SCHEDULER
call dbms_stats.gather_database_stats_job_proc ( )



-> Total FG Wait Time:               176.98 (s)  DB CPU time:         478.76 (s)
                                     %Time      Total Wait
Wait Class                     Waits -outs        Time (s)   Avg wait  %DB time
-------------------- --------------- ----- --------------- ---------- ---------
DB CPU                                                 479                 73.2
User I/O                      32,124     0             113     3.52ms      17.3
Commit                        14,062     0              34     2.39ms       5.1
Application                    1,934     0              15     7.79ms       2.3
Other                        125,566     0               9    71.05us       1.4
Concurrency                      339     0               3     9.03ms       0.5
Network                    1,445,391     0               2     1.51us       0.3
System I/O                     1,200     0               1   558.07us       0.1
Configuration                     25   100               0    17.23ms       0.1
                          ------------------------------------------------------
SQL ordered by CPU Time                     DB/Inst: IGT/igt  Snaps: 1519-1520
-> Resources reported for PL/SQL code includes the resources used by all SQL
   statements called by the code.
-> %Total - CPU Time      as a percentage of Total DB CPU
-> %CPU   - CPU Time      as a percentage of Elapsed Time
-> %IO    - User I/O Time as a percentage of Elapsed Time
-> Captured SQL account for   51.0% of Total CPU Time (s):             479
-> Captured PL/SQL account for  148.3% of Total CPU Time (s):             479
    CPU                   CPU per           Elapsed
  Time (s)  Executions    Exec (s) %Total   Time (s)   %CPU    %IO    SQL Id
---------- ------------ ---------- ------ ---------- ------ ------ -------------
     568.3            1     568.33  118.7      875.1   64.9   28.8 b6usrg82hwsa3
Module: DBMS_SCHEDULER
call dbms_stats.gather_database_stats_job_proc ( )
      82.3           59       1.40   17.2      138.7   59.4   26.9 av6f85bw3c5v7
Module: JDBC Thin Client


Example:
COL CLIENT_NAME for A40
COL STATUS for A20
SELECT client_name, status FROM DBA_AUTOTASK_CLIENT;

CLIENT_NAME                          STATUS
------------------------------------ ------------------------
sql tuning advisor                   
ENABLED
auto optimizer stats collection      ENABLED
auto space advisor                   ENABLED

SQL> 
BEGIN
  DBMS_AUTO_TASK_ADMIN.DISABLE(
    client_name => 'auto optimizer stats collection',
    operation => NULL,
    window_name => NULL);
END;
 
PL/SQL procedure successfully completed.

SQL> SELECT client_name, status FROM DBA_AUTOTASK_CLIENT;


CLIENT_NAME                          STATUS
------------------------------------ ------------------------
sql tuning advisor                   
ENABLED
auto optimizer stats collection      
DISABLED
auto space advisor                   ENABLED



In case DBMS_STATS.GATHER_DATABASE_STATS_JOB is slow and using a lot of CPU, it might be because of missing dictionary stats.
 
SOLUTION: Gather dictionary stats and fixed object stats by executing following: 

EXEC DBMS_STATS.GATHER_SCHEMA_STATS ('SYS');
EXEC DBMS_STATS.GATHER_DATABASE_STATS (gather_sys=>TRUE);
EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;
EXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;


To see the jobs:
SELECT * FROM DBA_SCHEDULER_JOBS 
 WHERE job_action LIKE '%collect%';
ORACLE_OCM.MGMT_CONFIG.collect_stats
ORACLE_OCM.MGMT_CONFIG.collect_config

Run auto optimizer stats manually
BEGIN
  DBMS_AUTO_TASK_IMMEDIATE.GATHER_OPTIMIZER_STATS;
END;
/


See the history runs for the auto optimizer stats task
SELECT * FROM  DBA_AUTOTASK_JOB_HISTORY 
 WHERE client_name LIKE 'auto optimizer stats%' 
   AND job_start_time > SYSDATE -30
 ORDER BY job_start_time DESC;

CLIENT_NAME                     WINDOW_NAME     WINDOW_START_TIME   WINDOW_DURATION     JOB_NAME                JOB_STATUS  JOB_START_TIME      JOB_DURATION JOB_ERROR JOB_INFO        
------------------------------- --------------- ------------------- ----------------    ---------------------   ----------- ------------------- ------------ --------- ---------
auto optimizer stats collection SUNDAY_WINDOW 20260208 06:00:00 0 20:0:0.184801000 ORA$AT_OS_OPT_SY_37361 SUCCEEDED 20260208 22:05:05 0 0:13:8.0 0
auto optimizer stats collection SUNDAY_WINDOW 20260208 06:00:00 0 20:0:0.184801000 ORA$AT_OS_OPT_SY_37358 SUCCEEDED 20260208 18:04:54 0 0:14:16.0 0
auto optimizer stats collection SUNDAY_WINDOW 20260208 06:00:00 0 20:0:0.184801000 ORA$AT_OS_OPT_SY_37355 SUCCEEDED 20260208 14:04:44 0 0:12:38.0 0
auto optimizer stats collection SUNDAY_WINDOW 20260208 06:00:00 0 20:0:0.184801000 ORA$AT_OS_OPT_SY_37352 SUCCEEDED 20260208 10:04:29 0 0:14:44.0 0
auto optimizer stats collection SUNDAY_WINDOW 20260208 06:00:00 0 20:0:0.184801000 ORA$AT_OS_OPT_SY_37332 SUCCEEDED 20260208 06:00:03 0 0:56:38.0 0
auto optimizer stats collection SATURDAY_WINDOW 20260207 06:00:00 0 20:0:0.35269000 ORA$AT_OS_OPT_SY_37321 SUCCEEDED 20260207 22:03:44 0 0:52:16.0 0
auto optimizer stats collection SATURDAY_WINDOW 20260207 06:00:00 0 20:0:0.35269000 ORA$AT_OS_OPT_SY_37318 SUCCEEDED 20260207 18:03:25 0 0:13:13.0 0
auto optimizer stats collection SATURDAY_WINDOW 20260207 06:00:00 0 20:0:0.35269000 ORA$AT_OS_OPT_SY_37315 SUCCEEDED 20260207 14:03:13 0 0:10:56.0 0

Oracle Autotask - auto space advisor

Info:
The auto space advisor Calculates stats regarding space usage.
The 
auto space advisor Auto Task in Oracle can be very CPU and I/O intensive.
In large systems this task can run forever, generating load on the system

Better option would be to disable this task, and run the task upon demand


- Check Current Status:

COL CLIENT_NAME for A40
COL STATUS for A20
SELECT client_name, status FROM DBA_AUTOTASK_CLIENT;

CLIENT_NAME                         STATUS
----------------------------------- --------------------------------
auto optimizer stats collection     DISABLED
auto space advisor                  ENABLED
sql tuning advisor                  DISABLED

- To Enable/Disable Auto Task for Gathering Statistics:

BEGIN
  DBMS_AUTO_TASK_ADMIN.DISABLE(

    client_name => '
auto space advisor', 
    operation => NULL, 
    window_name => NULL);
END;
/

BEGIN
  DBMS_AUTO_TASK_ADMIN.ENABLE(

    client_name => 'auto space advisor', 
    operation => NULL, 
    window_name => NULL);
END;
/


See Auto Tasks status
SELECT client_name, status, window_group  
  FROM DBA_AUTOTASK_CLIENT;

client_name             status window_group
------------------------------- ------- --------------
sql tuning advisor   ENABLED ORA$AT_WGRP_SQ
auto optimizer stats collection ENABLED ORA$AT_WGRP_OS
auto space advisor   ENABLED ORA$AT_WGRP_SA

See Auto Tasks history. In case the job running the task was dropped, task would still be running, but giving an error "ORA-27367: program "SYS"."AUTO_SPACE_ADVISOR_PROG" associated with this job is disabled"

SELECT * 
  FROM DBA_AUTOTASK_JOB_HISTORY 
 WHERE client_name = 'auto space advisor' 
   AND job_start_time > SYSDATE -30
 ORDER BY job_start_time DESC;
 
 
CLIENT_NAME         WINDOW_NAME      WINDOW_START_TIME   WINDOW_DURATION  JOB_NAME              JOB_STATUS  JOB_START_TIME      JOB_DURATION JOB_ERROR JOB_INFO        
------------------- ---------------- ------------------- ---------------- --------------------- ----------- ------------------- ------------ --------- ---------------------------------------------------------------------------------------
auto space advisor SUNDAY_WINDOW     20260208 06:00:00   0 20:0:0.184801  ORA$AT_SA_SPC_SY_37362 FAILED     20260208 22:05:06   0 0:0:0.0    27367     ORA-27367: program "SYS"."AUTO_SPACE_ADVISOR_PROG" associated with this job is disabled
auto space advisor SUNDAY_WINDOW     20260208 06:00:00   0 20:0:0.184801  ORA$AT_SA_SPC_SY_37359 FAILED     20260208 18:04:54   0 0:0:0.0    27367     ORA-27367: program "SYS"."AUTO_SPACE_ADVISOR_PROG" associated with this job is disabled
auto space advisor SUNDAY_WINDOW     20260208 06:00:00   0 20:0:0.184801  ORA$AT_SA_SPC_SY_37356 FAILED     20260208 14:04:44   0 0:0:0.0    27367     ORA-27367: program "SYS"."AUTO_SPACE_ADVISOR_PROG" associated with this job is disabled
auto space advisor SUNDAY_WINDOW     20260208 06:00:00   0 20:0:0.184801  ORA$AT_SA_SPC_SY_37353 FAILED     20260208 10:04:29   0 0:0:0.0    27367     ORA-27367: program "SYS"."AUTO_SPACE_ADVISOR_PROG" associated with this job is disabled
auto space advisor SUNDAY_WINDOW     20260208 06:00:00   0 20:0:0.184801  ORA$AT_SA_SPC_SY_37333 FAILED     20260208 06:00:03   0 0:0:0.0    27367     ORA-27367: program "SYS"."AUTO_SPACE_ADVISOR_PROG" associated with this job is disabled
auto space advisor SATURDAY_WINDOW   20260207 06:00:00   0 20:0:0.352690  ORA$AT_SA_SPC_SY_37322 FAILED     20260207 22:03:44   0 0:0:0.0    27367     ORA-27367: program "SYS"."AUTO_SPACE_ADVISOR_PROG" associated with this job is disabled
auto space advisor SATURDAY_WINDOW   20260207 06:00:00   0 20:0:0.352690  ORA$AT_SA_SPC_SY_37319 FAILED     20260207 18:03:25   0 0:0:0.0    27367     ORA-27367: program "SYS"."AUTO_SPACE_ADVISOR_PROG" associated with this job is disabled
auto space advisor SATURDAY_WINDOW   20260207 06:00:00   0 20:0:0.352690  ORA$AT_SA_SPC_SY_37316 FAILED     20260207 14:03:14   0 0:0:0.0    27367     ORA-27367: program "SYS"."AUTO_SPACE_ADVISOR_PROG" associated with this job is disabled


The solution would be to disable the task, and run it manually
Disable the task:
BEGIN
  DBMS_AUTO_TASK_ADMIN.DISABLE(
  client_name => 'auto space advisor',
  operation => NULL,
  window_name => NULL);
END;
/

Run task manually:
BEGIN
  DBMS_SPACE.auto_space_advisor_job_proc;
END;
/

Wednesday, February 4, 2026

Using Golden Gate logdump utility, line by line and summary mode

Logdump 1 >ghdr on
Logdump 2 >detail on
Logdump 3 >detail data
Logdump 4 >open ep000000003
Current LogTrail is /software/ogg/191/dirdat/01/out/ep000000003
Logdump 5 >n
Logdump 6 >n
Logdump 7 >n
...
...
After reading header metadata and some records, one can see the record in question

Logdump 29 >n
___________________________________________________________________
Hdr-Ind    :     E  (x45)     Partition  :     .  (x0c)
UndoFlag   :     .  (x00)     BeforeAfter:     A  (x41)
RecLength  :    36  (x0024)   IO Time    : 2026/01/30 20:29:22.983.254
IOType     :   134  (x86)     OrigNode   :   255  (xff)
TransInd   :     .  (x03)     FormatType :     R  (x52)
SyskeyLen  :     0  (x00)     Incomplete :     .  (x00)
AuditRBA   :      18680       AuditPos   : 87598608
Continued  :     N  (x00)     RecCount   :     1  (x01)

2026/01/30 20:29:22.983.254 GGSUnifiedUpdate     Len    36 RBA 2571
Name: USER_A.TABLE_A  (TDR Index: 1)
After  Image:                                             Partition x0c   G  s
 1000 0000 0100 0c00 0000 0800 5465 7374 2031 3031 | ......Test 101
 0100 0c00 0000 0800 5465 7374 2031 3032           | ......Test 102
Before Image          Len    20 (x00000014)
BeforeColumnLen     16 (x00000010)
Column     1 (x0001), Len    12 (x000c)
 0000 0800 5465 7374 2031 3031                     | ....Test 101

After Image           Len    16 (x00000010)
Column     1 (x0001), Len    12 (x000c)
 0000 0800 5465 7374 2031 3032                     | ....Test 102

It is possible to view a summary of the report:

./logdump
Logdump 1 > OPEN /software/ogg/191/dirdat/01/in/et000000004
Logdump 2 > GHDR ON
Logdump 3 > DETAIL ON
Logdump 4 > DETAIL DATA 
Logdump 5 > LOG TO full_file_dump.txt
Logdump 6 > COUNT
Logdump 7 > LOG STOP
Logdump 8 > EXIT


Example:
./logdump
Logdump 1 > OPEN /software/ogg/191/dirdat/01/in/et000000004
Logdump 2 > GHDR ON
Logdump 3 > DETAIL ON
Logdump 4 > DETAIL DATA 
Logdump 5 > LOG TO full_file_dump.txt
Logdump 6 > COUNT
Logdump 7 > LOG STOP
Logdump 8 > EXIT



Logdump 30 >open /software/ogg/191/dirdat/01/in/et000000004
Current LogTrail is /software/ogg/191/dirdat/01/in/et000000004
Logdump 31 >GHDR ON
Logdump 32 >DETAIL ON
Logdump 33 >DETAIL DATA
Logdump 34 >LOG TO /software/ogg/191/dirdat/et000000004_full_dump.txt
--- Session log /software/ogg/191/dirdat/et000000004_full_dump.txt opened 2026/02/01 12:19:24.549.821 ---
Logdump 35 >COUNT
LogTrail /software/ogg/191/dirdat/01/in/et000000004 has 10 records
Total Data Bytes               1866
  Avg Bytes/Record              186
Delete                            2
Insert                            2
Update                            1
RestartOK                         2
Metadata Records                  2
Others                            1
Before Images                     2
After Images                      5

Average of 9 Transactions
    Bytes/Trans .....        101
    Records/Trans ...          1
    Files/Trans .....          1


                                                   Partition x00
Total Data Bytes                 78
  Avg Bytes/Record               26
RestartOK                         2
Metadata Records                  1
After Images                      2

*FileHeader*                                       Partition x00
Total Data Bytes               1388
  Avg Bytes/Record             1388
Others                            1

LAB_QANFV_ALLQQ.ACTION_TYPES                       Partition x00
Total Data Bytes                244
  Avg Bytes/Record              244
Metadata Records                  1

LAB_QANFV_ALLQQ.ACTION_TYPES                       Partition x0c
Total Data Bytes                156
  Avg Bytes/Record               31
Delete                            2
Insert                            2
Update                            1
Before Images                     2
After Images                      3
Logdump 36 >LOG STOP
Logging stopped
Logdump 37 >EXIT
oracle@qanfv-1-dbs-1b:/software/ogg/191>%

Logdump 30 >open /software/ogg/191/dirdat/01/in/et000000004
Current LogTrail is /software/ogg/191/dirdat/01/in/et000000004
Logdump 31 >GHDR ON
Logdump 32 >DETAIL ON
Logdump 33 >DETAIL DATA
Logdump 34 >LOG TO /software/ogg/191/dirdat/et000000004_full_dump.txt
--- Session log /software/ogg/191/dirdat/et000000004_full_dump.txt opened 2026/02/01 12:19:24.549.821 ---
Logdump 35 >COUNT
LogTrail /software/ogg/191/dirdat/01/in/et000000004 has 10 records
Total Data Bytes               1866
  Avg Bytes/Record              186
Delete                            2
Insert                            2
Update                            1
RestartOK                         2
Metadata Records                  2
Others                            1
Before Images                     2
After Images                      5

Average of 9 Transactions
    Bytes/Trans .....        101
    Records/Trans ...          1
    Files/Trans .....          1


                                                   Partition x00
Total Data Bytes                 78
  Avg Bytes/Record               26
RestartOK                         2
Metadata Records                  1
After Images                      2

*FileHeader*                                       Partition x00
Total Data Bytes               1388
  Avg Bytes/Record             1388
Others                            1

LAB_QANFV_ALLQQ.ACTION_TYPES                       Partition x00
Total Data Bytes                244
  Avg Bytes/Record              244
Metadata Records                  1

LAB_QANFV_ALLQQ.ACTION_TYPES                       Partition x0c
Total Data Bytes                156
  Avg Bytes/Record               31
Delete                            2
Insert                            2
Update                            1
Before Images                     2
After Images                      3
Logdump 36 >LOG STOP
Logging stopped
Logdump 37 >EXIT
oracle@qanfv-1-dbs-1b:/software/ogg/191>%

Golden Gate issue in Oracle 19 - LOGICAL_REPLICATION

Issue
In Oracle 19, a new field was added to
USER_TABLES: logical_replication

In addition to running ADD TRANDATA and having the table supplemental logging, as can be validated in DBA_LOG_GROUPS, the table also must have USER_TABLES.logical_replication set to ENABLED.

When USER_TABLES.logical_replication is set to DISABLED, the Primary Key data is not written to the before and after image in Extract Files.

In this setup,
INSERT and DELETE would work, but UPDATE Transactions are failing to be replicated, and replicat would fail with mapping error

To Fix it, change USER_TABLES.logical_replication to ENABLED, and restart Extract on Source.

Fix
ALTER TABLE USER_A.TABLE_A ENABLE LOGICAL REPLICATION;

Evidences
The Error would be coming in
REPLICAT, as it fails to process the UPDATE Transaction
This error would be coming in Site B replicat logs:

2026-01-30 20:33:11  INFO    OGG-02243  Opened trail file /software/ogg/191/dirdat/01/in/et000000004 at 2026-01-30 20:33:11.076300.
2026-01-30 20:33:11  WARNING OGG-02760  ASSUMETARGETDEFS is ignored because trail file /software/ogg/191/dirdat/01/in/et000000004 contains table definitions.
2026-01-30 20:33:11  INFO    OGG-03506  The source database character set, as determined from the trail file, is UTF-8.
2026-01-30 20:33:11  INFO    OGG-06505  MAP resolved (entry USER_A.TABLE_A): MAP "USER_A"."TABLE_A", TARGET USER_A.TABLE_A.
2026-01-30 20:33:11  INFO    OGG-02756  The definition for table USER_A.TABLE_A is obtained from the trail file.
2026-01-30 20:33:11  INFO    OGG-06511  Using following columns in default map by name: ACTION_ID, ACTION_NAME.
2026-01-30 20:33:11  INFO    OGG-06510  Using the following key columns for target table USER_A.TABLE_A: ACTION_ID.
2026-01-30 20:33:11  WARNING OGG-01431  Aborted grouped transaction on USER_A.TABLE_A, Mapping error.
2026-01-30 20:33:11  WARNING OGG-01003  Repositioning to rba 2571 in seqno 4.
2026-01-30 20:33:11  WARNING OGG-01151  Error mapping from USER_A.TABLE_A to USER_A.TABLE_A.

Source Context :
  SourceModule            : [er.replicat.errors]
  SourceID                : [er/replicat/reperrors.cpp]
  SourceMethod            : [repError]
  SourceLine              : [1810]
  ThreadBacktrace         : [15] elements
                          : [/software/ogg/191/libgglog.so(CMessageContext::AddThreadContext())]
                          : [/software/ogg/191/libgglog.so(CMessageFactory::CreateMessage(CSourceContext*, unsigned int, ...))]
                          : [/software/ogg/191/libgglog.so(_MSG_QualTableName_QualTableName(CSourceContext*, int, ggs::gglib::ggapp::CQualDBObjName<(DBObjType)1> const&, ggs::gglib::ggapp::CQualDBObjName<(DBObjType)1> const&, CMessageFactory::MessageDisposition))]
                          : [/software/ogg/191/replicat(ggs::er::ReplicatContext::repError(short, int, char const*, extr_ptr_def*, ggs::gglib::gglcr::CommonLCR const*, std_rec_hdr_def*, char*, ObjectMetadata*, bool))]
                          : [/software/ogg/191/replicat()]
                          : [/software/ogg/191/replicat(ggs::er::ReplicatContext::processRecord(ggs::gglib::gglcr::CommonLCR const*, ggs::gglib::gglcr::CommonLCR*, extr_ptr_def*&, extr_ptr_def*&, bool&, int&, bool, RepCsn&))]
                          : [/software/ogg/191/replicat(ggs::er::ReplicatContext::processReplicatLoop())]
                          : [/software/ogg/191/replicat(ggs::er::ReplicatContext::run())]
                          : [/software/ogg/191/replicat()]
                          : [/software/ogg/191/replicat(ggs::gglib::MultiThreading::MainThread::ExecMain())]
                          : [/software/ogg/191/replicat(ggs::gglib::MultiThreading::Thread::RunThread(ggs::gglib::MultiThreading::Thread::ThreadArgs*))]
                          : [/software/ogg/191/replicat(ggs::gglib::MultiThreading::MainThread::Run(int, char**))]
                          : [/software/ogg/191/replicat(main)]

                          : [/lib64/libc.so.6(__libc_start_main)]
                          : [/software/ogg/191/replicat()]

2026-01-30 20:33:11  ERROR   OGG-01296  Error mapping from USER_A.TABLE_A to USER_A.TABLE_A.

What to check on SOURCE DB:

SELECT supplemental_log_data_min FROM V$DATABASE;

SUPPLEMENTAL_LOG_DATA_MIN
--------------------------------
YES


SELECT supplemental_log_data_min, 
       supplemental_log_data_pk, 
       supplemental_log_data_ui, 
       supplemental_log_data_all
FROM V$DATABASE;

SUPPLEMENTAL_LOG_DATA_MIN SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI SUPPLEMENTAL_LOG_DATA_ALL
------------------------- ------------------------ ------------------------ -------------------------
YES                       NO                       NO                       NO

SELECT log_group_name, 
       table_name, 
       owner, 
       log_group_type, 
       always
  FROM DBA_LOG_GROUPS
 WHERE OWNER = 'USER_A
   AND TABLE_NAME =  'TABLE_A';

LOG_GROUP_NAME   TABLE_NAME  OWNER   LOG_GROUP_TYPE      ALWAYS
---------------- ----------- ------- ------------------- -----------
GGS_119994       TABLE_A     USER_A  USER LOG GROUP      ALWAYS
SYS_C00197420    TABLE_A     USER_A  PRIMARY KEY LOGGING ALWAYS
SYS_C00197421    TABLE_A     USER_A  UNIQUE KEY LOGGING  CONDITIONAL
SYS_C00197422    TABLE_A     USER_A  FOREIGN KEY LOGGING CONDITIONAL
SYS_C00197423    TABLE_A     USER_A  ALL COLUMN LOGGING  ALWAYS



SELECT owner, table_name, logical_replication 
  FROM DBA_TABLES 
 WHERE owner='USER_A' 
  AND table_name='TABLE_A';

OWNER      TABLE_NAME      LOGICAL_REPLICATION
---------- --------------- ---------------------
USER_A     TABLE_A         DISABLED


ALTER TABLE USER_A.TABLE_A ENABLE LOGICAL REPLICATION;

SELECT owner, table_name, logical_replication 
  FROM DBA_TABLES 
 WHERE owner='USER_A' 
  AND table_name='TABLE_A';

OWNER      TABLE_NAME      LOGICAL_REPLICATION
---------- --------------- ---------------------
USER_A     TABLE_A         ENABLED

Tuesday, December 2, 2025

du vs df giving wrong disk usage results

du vs df giving wrong disk usage results

In OS, oracle is reported as using 168 Gb
While in oracle, the usage is only 78 Gb
How can that be?

Space usage in Linux:

find . -type f -printf '%s %p\n'| sort -nr | head -40
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/oravg2-ora_db      196G  168G   19G  91% /oracle_db/db3

At this point , many files were dropped using the Oracle syntax
Example:

Drop some big tablespaces, each one is several Gb in size.
DROP TABLESPACE OLD_TRANSACTION_202401 INCLUDING CONTENTS AND DATAFILES;
DROP TABLESPACE OLD_TRANSACTION_202402 INCLUDING CONTENTS AND DATAFILES;

SELECT tablespace_name FROM dba_tablespaces WHERE tablespace_name = 'OLD_TRANSACTION_202401';

No Data Found


See now space usage in Linux:

df -hP | grep db3
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/oravg2-ora_db      196G  168G   19G  91% /oracle_db/db3

No change in space usage, how can that be?

Check space usage with du
>cd /oracle_db
>du -sh *
78G     db3

du report usage of 78Gb, which is in sync with oracle stats, but df report a wrong result.

A common cause is that the file was deleted by a process, but is still in a deleted status, and was not deleted by the OS.
indeed this was the case here:

>lsof | grep deleted
/oracle_db/db3/db_igt/OLD_TRANSACTION_202401_1.dbf (deleted)
oracle     37484    oracle  424u      REG             253,17  4404027392    2621478 /oracle_db/db3/db_igt/OLD_TRANSACTION_202402_1.dbf (deleted)
oracle     37484    oracle  428u      REG             253,17  3670024192    2621524 


Theory:
When Linux mount point usage as reported by df does not align with the sum of file sizes reported by du, several common scenarios can explain the discrepancy

1. Open but Deleted Files
A file may be deleted using rm, but if a process still holds an open file descriptor to it, the disk space occupied by that file is not immediately released. 
It remains allocated until the process either closes the file or terminates. 
This is a very common reason for df showing higher usage than du.
For Oracle, a simple solution is to bounce the instance.

There are other options, not related to Oracle scenario

After oracle restart

>df -hP | grep ora
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/oravg2-ora_db      196G   78G  109G  42% /oracle_db/db3


Issue fixed!

Wednesday, November 5, 2025

ORA-39346: data loss in character set conversion for object COMMENT

Error in impdp
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
ORA-39346: data loss in character set conversion for object COMMENT:"NEW_SCHEMA"."SOME_COLUMN"

What to check:
SELECT column_name, comments 
  FROM USER_COL_COMMENTS 
 WHERE column_name = 'TS_E_LAST_IN_NET_EVENT';

Solution:
Replace the comment, with valid text without "garbage" characters
COMMENT ON COLUMN SOME_TABLE.SOME_COLUMN IS 
'Some Valid Comment Text';


Tuesday, September 16, 2025

Purpose: Purge specific sql_id from Shared Pool.

Purpose: Purge specific sql_id from Shared Pool.
It could be useful if a sql have too many child cursors, which can cause "library cache: mutex X" wait events.


CREATE OR REPLACE PROCEDURE purge_sp_by_sql AS
  v_sql_str     VARCHAR2(1000);
  v_sql_id      VARCHAR2(13);
  v_address     RAW(8);
  v_hash_value  NUMBER;
  v_param       VARCHAR2(1000);
  v_child_records_before  INTEGER;
  v_child_records_after  INTEGER;
  v_module_name SGA_W_LOG.procedure_name%TYPE; 
  v_msg_str     SGA_W_LOG.data%TYPE;
BEGIN
  v_module_name := 'purge_sp_by_sql'; 
  
  SELECT sql_id, address, hash_value 
    INTO v_sql_id, v_address, v_hash_value
    FROM SYS.V_$SQLAREA
   WHERE sql_text LIKE 'MERGE into AAA_B_CCC_DDDDDD o using%' 
     AND ROWNUM < 2;
 
  SELECT loaded_versions INTO v_child_records_before 
    FROM SYS.V_$SQLAREA WHERE sql_id = v_sql_id;

   --Format is: 'ADDRESS,HASH_VALUE',
  v_param := v_address||','||v_hash_value;
  SYS.DBMS_SHARED_POOL.purge (v_param,'C');
  
  SELECT loaded_versions INTO v_child_records_after 
    FROM SYS.V_$SQLAREA WHERE sql_id = v_sql_id;
   
  v_msg_str :=  'Child Records Stats for sql_id : '||v_sql_id||' Before: '||v_child_records_before||' After: '||v_child_records_after;
  INSERT INTO SGA_W_LOG(procedure_name, data, ts_last_modified) 
  VALUES (v_module_name, v_msg_str, SYSDATE);
  commit;
END purge_sp_by_sql;