Pages

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;

Tuesday, September 2, 2025

Default Oracle accounts with default password

==========================================
Oracle accounts with default password
==========================================

SELECT * FROM DBA_USERS_WITH_DEFPWD ORDER BY 1;

USERNAME                       PRODUCT
------------------------------ --------------------------------------
APPQOSSYS
DBSFWUSER                      DB Service FireWall USER
DBSNMP
DIP
GGSYS
GSMCATUSER
ORACLE_OCM
OUTLN
REMOTE_SCHEDULER_AGENT         Oracle Scheduler
SYS$UMF                        Unified Manageability Framework
SYSRAC
WMSYS
XDB

=====================
Accounts Details
=====================
APPQOSSYS
Used for storing or managing all data and metadata required by Oracle Quality of Service Management.

DBSFWUSER
The account used to run the DBMS_SFW_ACL_ADMIN package.
DBMS_SFW_ACL_ADMIN package provides API for managing service-level Access Control Lists (ACLs). 

DBSNMP
Used by Management Agent of Oracle Enterprise Manager to monitor and manage the database.

DIP
Used by Directory Integration Platform (DIP) to synchronize the changes in Oracle Internet Directory with the applications in the database.

GGSYS
The internal account used by Oracle GoldenGate. It should not be unlocked or used for a database login.

GSMCATUSER
The account used by Global Service Manager to connect to the Global Data Services catalog.

ORACLE_OCM
This account contains the instrumentation for configuration collection used by the Oracle Configuration Manager.

OUTLN
Centrally manages metadata associated with stored outlines. Supports plan stability, which enables maintenance of the same execution plans for the same SQL statements.

REMOTE_SCHEDULER_AGENT
The account to disable remote jobs on a database. 
This account is created during the remote scheduler agent configuration. 
You can disable the capability of a database to run remote jobs by dropping this user.
SYSRAC
The account used to administer Oracle Real Application Clusters (RAC).

WMSYS
The account used to store the metadata information for Oracle Workspace Manager.

XDB
Used for storing Oracle XML DB data and metadata.

==========================================
These accounts, should be locked by default
==========================================
SELECT DBA_USERS.username, 
       DBA_USERS.account_status 
  FROM DBA_USERS, 
       DBA_USERS_WITH_DEFPWD
 WHERE DBA_USERS.username =  DBA_USERS_WITH_DEFPWD.username
 ORDER BY DBA_USERS.username;

USERNAME                       ACCOUNT_STATUS
------------------------------ --------------------------------
APPQOSSYS                      EXPIRED & LOCKED
DBSFWUSER                      EXPIRED & LOCKED
DBSNMP                         EXPIRED & LOCKED
DIP                            EXPIRED & LOCKED
GGSYS                          EXPIRED & LOCKED
GSMCATUSER                     EXPIRED & LOCKED
ORACLE_OCM                     EXPIRED & LOCKED
OUTLN                          EXPIRED & LOCKED
REMOTE_SCHEDULER_AGENT         EXPIRED & LOCKED
SYS$UMF                        EXPIRED & LOCKED
SYSRAC                         EXPIRED & LOCKED
WMSYS                          EXPIRED & LOCKED
XDB                            EXPIRED & LOCKED

==========================================
To set account password to random password and lock account
==========================================
BEGIN 
  FOR r_user IN (SELECT username FROM DBA_USERS_WITH_DEFPWD WHERE username NOT LIKE '%XS$NULL%') LOOP 
    DBMS_OUTPUT.PUT_LINE('Password for user '||r_user.username||' will be changed.'); 
    EXECUTE IMMEDIATE 'ALTER USER ''||r_user.username||'' IDENTIFIED BY ''||DBMS_RANDOM.STRING('a',16)||''ACCOUNT LOCK PASSWORD EXPIRES'; 
  END LOOP;
END;
/


==========================================
Reference
==========================================