Reputation: 333
I have a table with proper partition.
Code snippet:
CREATE TABLE RSA_DBA.RSA_ADHOC_ACCT
(
RSA_ACCT_DTL_GID NUMBER(12,0) NOT NULL,
EFF_DT DATE NOT NULL,
RSA_CMPSN_REC_GID NUMBER(12,0),
ACCT_ID NUMBER(12,0),
ACCT_CMPSN_AMT NUMBER(16,3),
INSRT_USER VARCHAR2(30 BYTE) DEFAULT USER NOT NULL,
INSRT_TS DATE DEFAULT SYSDATE NOT NULL,
UPDT_USER VARCHAR2(30 BYTE) DEFAULT USER NOT NULL,
UPDT_TS DATE DEFAULT SYSDATE NOT NULL,
PRCS_RUN_ID NUMBER(12,0),
SRC_TS DATE,
VLD_IND CHAR(1 BYTE),
CONSTRAINT PK_RSA_ADHOC_ACCT_DTL_AI
PRIMARY KEY (RSA_ACCT_DTL_GID, EFF_DT)
PARTITION BY RANGE (EFF_DT)
PARTITION PTN_M20221201 VALUES LESS THAN (TO_DATE(' 2023-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
PARTITION PTN_M20230101 VALUES LESS THAN (TO_DATE(' 2023-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
PARTITION PTN_M20230201 VALUES LESS THAN (TO_DATE(' 2023-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
:
:
:
PARTITION PTN_M20241001 VALUES LESS THAN (TO_DATE(' 2024-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
PARTITION PTN_M20241101 VALUES LESS THAN (TO_DATE(' 2024-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
)
When I am trying to insert data, few data got inserted properly in respective partition while others didn't.
Sharing screenshot of data available data in table:
SQL:
select trunc(EFF_DT), count(ACCT_CMPSN_AMT)
from RSA_DBA.RSA_ADHOC_ACCT
group by trunc(EFF_DT)
order by 1;
Now we we look into table "dba_tab_partitions" to check if data are properly inserted I can see only 2 partition has proper data, highlighted.
SQL:
SELECT table_name, partition_name, num_rows
FROM dba_tab_partitions
WHERE table_name like 'RSA_ADHOC_ACCT' and NUM_ROWS > 0
ORDER BY table_name, partition_name;
Please note: here I can see for other partition data is very huge. Can someone guide me - where can I fix this issue? It's a PROD issue.
Upvotes: 0
Views: 50
Reputation: 333
When checked issue found in "Gathering statistics". Since the data volume was high and hence oracle didn't performed proper partition maintenance. when checked object_id of the inserted data with respect to eff_dt it was matching with the partion object_id value(obtained using dba_objects)
SQL:
select distinct substr(dbms_rowid.rowid_object(rowid),1,15) object_id , eff_dt
from RSA_ADHOC_ACCT;
Object_id obtained:
Thus just by executing below SQL, I was able to get these data reflected corresponding to partition.
EXEC dbms_stats.gather_table_stats(ownname => 'RSA_DBA', tabname => RSA_ADHOC_ACCT, estimate_percent => 100);
Upvotes: 1