Oracle DBMS_INTERNAL_LOGSTDBY
Version 26ai

General Information
Library Note Morgan's Library Page Header
The best Oracle News for FY2026

Oracle Database 26ai is now availble. If you haven't you downloaded already: Why?
Purpose Internal support utilities for Data Guard Logical Standby Databases
AUTHID DEFINER
Dependencies SELECT name FROM dba_dependencies WHERE referenced_name = 'DBMS_INTERNAL_LOGSTDBY' UNION
SELECT referenced_name FROM dba_dependencies WHERE name = 'DBMS_INTERNAL_LOGSTDBY'
ORDER BY 1;


Returns 55 objects
Documented No
First Available 12.1
Security Model Owned by SYS with EXECUTE granted to AUDSYS
Source {ORACLE_HOME}/rdbms/admin/prvtlsis.plb
Subprograms
APPLY_GET GUARD_BYPASS_CHK PREPARE_FOR_NEW_PRIMARY
APPLY_IS_OFF GUARD_BYPASS_OFF PRIMARY_DBID
APPLY_SET GUARD_BYPASS_ON PRINTLOB
APPLY_STOP_NOWAIT GUARD_CHECK PURGE_LOGS
APPLY_UNSET HIST_READ_RECORD REBUILD
AUDDEL HIST_SYNCH REPAIR_LSBY
AUDINS HIST_WRITE_RECORD_CANCEL REPLACE_DICTIONARY
AUDUPD HIST_WRITE_RECORD_CURRENT REPORT_ERROR
BUILD HIST_WRITE_RECORD_FUTURE RETRIEVE_STATEMENT
CANCEL_FUTURE HIST_WRITE_RECORD_PREVIOUS SEQUENCE_UPDATE
CAPTURE_SCN HSTDEL SEQUPD
CHECK_SKIP_LIKE HSTINS SET_EXPORT_SCN
CLEAR_LOGICAL_INSTANTIATION HSTUPD SET_LOGICAL_INSTANTIATION
DATA_ONLY_PREREQ INSTANTIATE_TAB_LOG SET_TABLESPACE
DISABLE_LOGICAL_REPLICATION INSTANTIATE_TAB_PREREQ SET_TABLE_SCN
DUMP_XDAT IS_LSBY_SUPPORTABLE SKIP_SUPPORT
ENABLE_LOGICAL_REPLICATION IS_PDB_ROOT SKIP_TRANSACTION
END_STREAM JOBDEL UNLOCK_LSBY_CON
END_STREAM_SHARED JOBINS UNLOCK_LSBY_META
ENQUOTE_QUALIFIED_COL_NAME JOBUPD UNSKIP_TRANSACTION
ESCAPE_ENQUOTE_LITERAL LOCK_LSBY_CON UPCASE_NAME
ESCAPE_QUOTES LOCK_LSBY_META UPDATE_DYNAMIC_LSBY_OPTION
FGADEL LSBY_LOCK_TABLE VALIDATE_SET
FGAINS LSBY_UNLOCK_TABLE VALIDATE_SKIP_ACTION
FGAUPD MATCHED_PRIMARY VALIDATE_SKIP_AUTHID
FLUSH_SRLS NEED_SCN VERIFY_NOSESSION
GET_DB_ROLE PARDEL VERIFY_SESSION
GET_EXPORT_DML_SCN PARINS VERIFY_SESSION_LOGAUTODELETE
GET_OBJ_NUM PARUPD WAIT_FOR_SAFE_SCN
GET_SAFE_SCN  60  
 
APPLY_IS_OFF
Disables apply dbms_internal_logstdby.apply_is_off;
exec dbms_internal_logstdby.apply_is_off;

PL/SQL procedure successfully completed.
 
APPLY_STOP_NOWAIT
Immediate apply stop dbms_internal_logstdby.apply_stop_nowait;
exec dbms_internal_logstdby.apply_stop_nowait;

PL/SQL procedure successfully completed.
 
BUILD
Turns on supplemental logging and ensures supplemental logging is enabled properly and builds the LogMiner dictionary: Takes several minutes dbms_internal_logstdby.build;
exec dbms_internal_logstdby.build;

PL/SQL procedure successfully completed.
 
CANCEL_FUTURE
This is totally undocumented and I have no idea what it does but the name was just too good to allow for resistance and the syntax mindlessly simple dbms_internal_logstdby.cancel_future;
exec dbms_internal_logstdby.cancel_future;

PL/SQL procedure successfully completed.
 
CAPTURE_SCN
Undocumented dbms_internal_logstdby.capture_scn;
exec dbms_internal_logstdby.capture_scn;
*
ORA-16287: operation not permitted due to active apply state
 
CLEAR_LOGICAL_INSTANTIATION
Clears instantiation dbms_internal_logstdby.clear_logical_instantiation;
exec dbms_internal_logstdby.clear_logical_instantiation;

PL/SQL procedure successfully completed.
 
DISABLE_LOGICAL_REPLICATION
Poorly named ... returns the current logical replication state dbms_internal_logstdby.disable_logical_replication RETURN BOOLEAN;
See ENABLE_LOGICAL_REPLICATION below
 
DUMP_XDAT
Undocumented dbms_internal_logstdby.dump_xdat;
exec dbms_internal_logstdby.dump_xdat;
 
ENABLE_LOGICAL_REPLICATION
Enables logical replication dbms_internal_logstdby.enable_logical_replication(repl_state IN BOOLEAN);
DECLARE
 retVal BOOLEAN := dbms_internal_logstdby.disable_logical_replication;
BEGIN
  IF retVal THEN
    dbms_output.put_line('TRUE');
  ELSE
    dbms_output.put_line('FALSE');
  END IF;
END;
/
TRUE

PL/SQL procedure successfully completed.


exec dbms_internal_logstdby.enable_logical_replication(TRUE);

PL/SQL procedure successfully completed.

DECLARE
 retVal BOOLEAN := dbms_internal_logstdby.disable_logical_replication;
BEGIN
  IF retVal THEN
    dbms_output.put_line('TRUE');
  ELSE
    dbms_output.put_line('FALSE');
  END IF;
END;
/
TRUE

PL/SQL procedure successfully completed.

exec dbms_internal_logstdby.enable_logical_replication(FALSE);

PL/SQL procedure successfully completed.

DECLARE
 retVal BOOLEAN := dbms_internal_logstdby.disable_logical_replication;
BEGIN
  IF retVal THEN
    dbms_output.put_line('TRUE');
  ELSE
    dbms_output.put_line('FALSE');
  END IF;
END;
/
FALSE

PL/SQL procedure successfully completed.
 
GET_DB_ROLE
Returns the current database role

It would be interesting to know why anyone chose to do this with a proc rather than a function.
dbms_internal_logstdby.get_db_role(dbrole OUT VARCHAR2);
DECLARE
 lDBRole VARCHAR2(30);
BEGIN
  dbms_internal_logstdby.get_db_role(lDBRole);
  dbms_output.put_line(lDBRole);
END;
/
PRIMARY

PL/SQL procedure successfully completed.
 
GET_OBJ_NUM
Return the object number for the identified table

Faster than querying DBA_OBJECTS
dbms_internal_logstdby.get_obj_num(
table_owner IN  VARCHAR2,
table_name  IN  VARCHAR2,
dblink      IN  VARCHAR2,
objno       OUT NUMBER);
conn / as sysdba

SELECT object_id
FROM dba_objects
WHERE object_name = 'OBJ$';

 OBJECT_ID
----------
        18


Elapsed: 00:00:00.03

set serveroutput on

DECLARE
 objid obj$.obj#%TYPE;
BEGIN
  dbms_internal_logstdby.get_obj_num(USER, 'OBJ$', NULL, objid);
  dbms_output.put_line(TO_CHAR(objid));
END;
/
18

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.01
 
GET_SAFE_SCN
Appears to return the current SCN dbms_internal_logstdby.get_safe_scn(safe_scn OUT NUMBER);
DECLARE
 scnVal NUMBER;
BEGIN
  dbms_internal_logstdby.get_safe_scn(scnVal);
  dbms_output.put_line('Safe SCN: ' || TO_CHAR(scnVal));

  dbms_output.put_line('Curr SCN" ' || TO_CHAR(dbms_flashback.get_system_change_number));
END;
/
Safe SCN: 18758626
Curr SCN" 18758626

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.02
 
GUARD_BYPASS_OFF
Disable Data Guard Bypass dbms_internal_logstdby.guard_bypass_off;
exec dbms_internal_logstdby.guard_bypass_off;

PL/SQL procedure successfully completed.
 
GUARD_BYPASS_ON
Enable Data Guard Bypass dbms_internal_logstdby.guard_bypass_on;
exec dbms_internal_logstdby.guard_bypass_on;

PL/SQL procedure successfully completed.
 
GUARD_CHECK
Undocumented dbms_internal_logstdby.guard_check;
exec dbms_internal_logstdby.guard_check;

PL/SQL procedure successfully completed.
 
IS_LSBY_SUPPORTABLE
Is Logical Standby Supported dbms_internal_logstdby.is_lsdby_supportable(
owner      IN VARCHAR2,
table_name IN VARCHAR2)
RETURN BOOLEAN;
BEGIN
  IF dbms_internal_logstdby.is_lsby_supportable(USER, 'OBJ$') THEN
    dbms_output.put_line('Logical Standby Supportable');
  ELSE
    dbms_output.put_line('Not Logical Standby Supportable');
  END IF;
END;
/
Not Logical Standby Supportable

PL/SQL procedure successfully completed.
 
IS_PDB_ROOT
Returns TRUE if the current container is CDB$ROOT otherwise appears to exit without returning FALSE dbms_internal_logstdby.is_pdb_root RETURN BOOLEAN;
conn / as sysdba

BEGIN
  IF dbms_internal_logstdby.is_pdb_root THEN
    dbms_output.put_line('Current container is CDB$ROOT');
  ELSE
    dbms_output.put_line('Current container is ' || SYS_CONTEXT('USERENV','CON_NAME'));
  END IF;
END;
/
Current container is CDB$ROOT

PL/SQL procedure successfully completed.


ALTER SESSION SET CONTAINER = PDBDEV;

BEGIN
  IF dbms_internal_logstdby.is_pdb_root THEN
    dbms_output.put_line('Current container is CDB$ROOT');
  ELSE
    dbms_output.put_line('Current container is ' || SYS_CONTEXT('USERENV','CON_NAME'));
  END IF;
END;
/

PL/SQL procedure successfully completed.

-- unfortunately another example of Oracle doing EXCEPTION WHEN OTHERS THEN NULL
 
REPLACE_DICTIONARY
Undocumented dbms_internal_logstdby.replace_dictionary;
exec dbms_internal_logstdby.replace_dictionary;

PL/SQL procedure successfully completed.
 
SET_LOGICAL_INSTANTIATION
Undocumented dbms_internal_logstdby.set_logical_instantiation;
exec dbms_internal_logstdby.set_logical_instantiation;

PL/SQL procedure successfully completed.
 
UNLOCK_LSBY_META
Undocumented dbms_internal_logstdby.unlock_lsby_meta;
exec dbms_internal_logstdby.unlock_lsby_meta;

PL/SQL procedure successfully completed.
 
UPCASE_NAME
Apparently the UPPER function was inadequate for someone dbms_internal_logstdby.upcase_name(
inname        IN  VARCHAR2,
quoted_name   OUT VARCHAR2,
unquoted_name OUT VARCHAR2);
DECLARE
 qname   dbms_id;
 unqname dbms_id;
BEGIN
  dbms_internal_logstdby.upcase_name('uwclass.test', qname, unqname);
  dbms_output.put_line(qname);
  dbms_output.put_line(unqname);
END;
/
"UWCLASS.TEST"
UWCLASS.TEST

PL/SQL procedure successfully completed.
 
VERIFY_NOSESSION
Undocumented dbms_internal_logstdby.verify_nosession;
SQL> exec dbms_internal_logstdby.verify_nosession;

PL/SQL procedure successfully completed.
 
VERIFY_SESSION
Undocumented dbms_internal_logstdby.verify_session;
exec dbms_internal_logstdby.verify_session;
*
ORA-16100: not a valid Logical Standby database

Related Topics
Built-in Functions
Built-in Packages
Data Guard
DBMS_DG
DBMS_DRS
DBMS_LOGSTDBY
DBMS_LOGSTDBY_CONTEXT
LOGSTDBY_INTERNAL
What's New In 21c
What's New In 26ai

Morgan's Library Page Footer
This site is maintained by Daniel Morgan. Last Updated: This site is protected by copyright and trademark laws under U.S. and International law. © 1998-2026 Daniel A. Morgan All Rights Reserved