Oracle DBMS_INTERNAL_LOGSTDBY
Version 26ai

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

Oracle Database 26ai will be available on generic Linux platforms in January and soon on AIX and Windows
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