Oracle DBMS_LOGREP_UTIL
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 for log file replication.
AUTHID DEFINER
Data Types SYS.RE$NV_LIST
Dependencies SELECT name FROM dba_dependencies WHERE referenced_name = 'DBMS_LOGREP_UTIL'
UNION
SELECT referenced_name FROM dba_dependencies WHERE name = 'DBMS_LOGREP_UTIL';

Returns 159 objects
Documented No
Exceptions
Error Code Reason
ORA-04052 error occurred when looking up remote object SYS.DBMS_UTILITY@<db_link_name>
ORA-23375 feature is incompatible with database version at <database_name>
ORA-23605 Invalid value "" for parameter <parameter_value>
ORA-26958 LCR identifier version is invalid.
First Available Not known
Security Model Owned by SYS with EXECUTE granted to GSMADMIN_INTERNAL
Source {ORACLE_HOME}/rdbms/admin/prvthlut.plb
Subprograms
ADD_CLOB_TO_TABLE GG_XSTREAM_QTABLE
ARRAY_SUBSTITUTE IS_BUILT_IN_TYPE
BIC IS_FUNCTION_BASED_INDEX
BIS IS_INVOKER_VALID_OGG_USER
BIT IS_MAX_PRIV_USER
BITOR IS_PDB_ENABLED
BOOLEAN_TO_VARCHAR2 IS_ROOT_PDB
BUMP_SCN IS_SES_USER
CANONICALIZE IS_VALID_ROLE
CANONICALIZE_OLD IS_VALID_SYSTEM_PRIV
CANONICAL_CONCAT LCR_CACHE_PURGE
CANON_DBLINK LOAD_DDL_TAB
CHECK_2LEVEL_PRIVILEGE LOAD_STRING_FROM_TAB
CHECK_CAPTURE_PDB_ACCESS LOCAL_NODE
CHECK_DBLINK LOCK_PROCESS
CHECK_LCRID_VERSION MESSAGE_TRACKING_PURGE
CHECK_PROCESS_PRIVILEGES MESSAGE_TRACKING_RESIZE
CHECK_SOURCE_ROOT PARSE_FOR_KEYWORD
COMMA_TO_TABLE PRE_11_2_DB
COMPATIBLE_VARCHAR_TO_INT QUERY_DBA_APPLY
CONVERT_INT_TO_EXT_LCR QUERY_DBA_CAPTURE
DB_VERSION QUERY_DBA_CAPTURE2
DDL_ANNOTATE QUERY_DBA_QUEUES
DROP_UNUSED_RULE_SETS QUERY_DBA_XOUT_ATTACHED_SVR
DUMP_TRACE (2) QUERY_DIFF_APPLY_USER
ENQUOTE_LITERAL RAISE_CONFIG_ERROR
ENQUOTE_NAME RAISE_SYSTEM_ERROR (9)
ENSURE_DB_COMPATIBLE RAISE_SYSTEM_ERROR_3GL
ENSURE_NONNULL RAISE_SYSTEM_WARNING (5)
ENSURE_STREAMS RAISE_SYSTEM_WARNING_3GL
FETCH_CAPTURE_USER RAWS
FETCH_DBA_XOUT_CAPTURE_USER RELEASE_LOCK
FORCE_XSTREAM RELEASE_OBJECT_LOCK
GENERIC_CANONICALIZE RELEASE_RS_LOCKS
GET_CHECKPOINT_SCNS RESET
GET_CONSISTENT_SCN SESS_HAS_ROLE
GET_CONSTRAINT_NAME SET_3X_IDEN
GET_CTNR_TZ_OFFSET_FROM_SYSTEM SET_ALLOCATED_MEMORY
GET_CURRENT_PDB_NAME SET_CCA_MAX_PERCENTAGE
GET_LAST_ENQ_SCN SET_PARAMETER
GET_LOCK SET_STREAMS_AUTO_FILTER
GET_MAX_BYTES_PER_CHAR SET_SUPP_LOGGING
GET_MAX_LENGTH_COMPAT SHORTEN_OBJECT_NAME
GET_NLS_PREFIX START_PROCESS
GET_NLS_SUBSTR STOP_PROCESS
GET_OBJECT_LOCK STRCMP_CS
GET_PDB_SHORT_NAME STREAMS_TRANSACTION_PURGE
GET_PROC_USE_CONTEXT UNCL_TO_NAME
GET_PROC_USE_CONTEXT_INT UNCL_TO_QUOTED_NAME
GET_QUEUE_OID UNLOCK_PROCESS
GET_REAL_CHECKPOINT_SCNS UPDATE_DBNAME_MAPPING
GET_REQ_CKPT_SCN USER_HAS_ROLE
GET_RS_LOCKS WRAP_DQT
GET_RULE_ACTION_CONTEXT WRITE_ERROR
GET_STR_COMPAT WRITE_TRACE
GET_VERSION_NUMBER WRITE_TRACE_APT
GET_VERSION_STRING -
 
ADD_CLOB_TO_TABLE
Likely doing something wrong here and while no exception is raised ... nothing seems to be altered. dbms_logrep_util.add_clob_to_table(
text     IN     CLOB;
tab      IN OUT dbms_sql.varchar2s,
tab_len  IN OUT NUMBER,
line_len IN     NUMBER)
RETURN NUMBER;
DECLARE
 cText     CLOB := 'A,B,C';
 sql_table dbms_sql.varchar2s;
 tLen      NUMBER;
 retVal    NUMBER;
BEGIN
  sql_table(1) := 'Line 1';
  sql_table(2) := 'Line 2';
  tLen := 5;
  retVal := dbms_logrep_util.add_clob_to_table(cText, sql_table, tLen, 60);
  dbms_output.put_line(TO_CHAR(retVal));
  dbms_output.put_line(sql_table(1));
  dbms_output.put_line(sql_table(2));
END;
/
Line 1
Line 2

PL/SQL procedure successfully completed.
 
BIS
Undocumented

Demo code found in $ORACLE_HOME/rdbms/admin/ e1102000.sql
dbms_logrep_util.bis(
flag       IN NUMBER,
bit_offset IN NUMBER)
RETURN NUMBER;
UPDATE sys.streams$_privileged_user
SET privs = dbms_logrep_util.bis(privs, dbms_streams_adm_utl.privs_local_offset),
                                 flags = dbms_logrep_util.bis(0, 1)
WHERE user# IN (SELECT u.user# FROM sys.user$ u WHERE u.name = user_names_xs(i));
 
BITOR
Undocumented dbms_logrep_util.bitor(
flag  IN NUMBER,
value IN NUMBER)
RETURN NUMBER;
SELECT dbms_logrep_util.bitor(42, 1);

DBMS_LOGREP_UTIL.BITOR(42,1)
----------------------------
                          43
 
BOOLEAN_TO_VARCHAR2
Returns "Y" for TRUE and "N" for FALSE dbms_logrep_util.boolean_to_varchar2(b IN BOOLEAN) RETURN VARCHAR2;
BEGIN
  dbms_output.put_line(dbms_logrep_util.boolean_to_varchar2(TRUE));
  dbms_output.put_line(dbms_logrep_util.boolean_to_varchar2(FALSE));
END;
/
Y
N

PL/SQL procedure successfully completed.
 
CANONICALIZE
Undocumented

Overload 1
dbms_logrep_util.canonicalize(
object_name IN  VARCHAR2,
canon_name  OUT VARCHAR2,
is_dbname   IN  BOOLEAN);
DECLARE
 retVal VARCHAR2(30);
BEGIN
  dbms_logrep_util.canonicalize('TAB$', retVal, FALSE);
  dbms_output.put_line(retVal);
END;
/
TAB$

PL/SQL procedure successfully completed.
Overload 2 dbms_logrep_util.canonicalize(
object_name IN VARCHAR2,
is_dbname   IN BOOLEAN)
RETURN VARCHAR2;
DECLARE
 retVal VARCHAR2(30);
BEGIN
  retVal := dbms_logrep_util.canonicalize('TAB$', FALSE);
  dbms_output.put_line(retVal);
END;
/
TAB$

PL/SQL procedure successfully completed.
 
CANONICAL_CONCAT
Returns the schema and object names concatenated with a period (.) separator and within double quotes dbms_logrep_util.canonical_concat(
canon_schema IN VARCHAR2,
canon_name   IN VARCHAR2)
RETURN VARCHAR2;
SELECT dbms_logrep_util.canonical_concat('UWCLASS', 'AIRPLANES');

DBMS_LOGREP_UTIL.CANONICAL_CONCAT('UWCLASS', 'AIRPLANES')
---------------------------------------------------------
"UWCLASS"."AIRPLANES"


-- also see catprp.sql
 
CHECK_LCRID_VERSION
Returns and exception if the LCR version identifier is invalid dbms_logrep_util.check_lcrid_version(lcrid_version IN NUMBER) RETURN NUMBER;
SELECT dbms_logrep_util.check_lcrid_version(2);

DBMS_LOGREP_UTIL.CHECK_LCRID_VERSION(2)
---------------------------------------
                                     2


SELECT dbms_logrep_util.check_lcrid_version(3);
*
ORA-26958: LCR identifier version is invalid.
 
CHECK_SOURCE_ROOT
Perhaps I am misunderstanding this proc but it appears to not care what I enter as source_root_name ... it returns it unchanged as well as the value TRUE dbms_logrep_util.canonical_concat(
source_db_name         IN     VARCHAR2,
source_root_name       IN OUT VARCHAR2,
include_root_condition    OUT BOOLEAN);
DECLARE
 srn VARCHAR2(60) := 'CDB$ROOT';
 irc BOOLEAN;
BEGIN
  dbms_logrep_util.check_source_root('PDBDEV', srn, irc);
  dbms_output.put_line(srn);
  IF irc THEN
    dbms_output.put_line('TRUE');
  ELSE
    dbms_output.put_line('FALSE');
  END IF;
END;
/
CDB$ROOT
TRUE

PL/SQL procedure successfully completed.
 
COMMA_TO_TABLE
Loads an array built from dbms_utility.uncl_array from values in a comma delimited list

Overload 1
dbms_logrep_util.comma_to_table(
list          IN  VARCHAR2,
tablen        OUT NUMBER,
tab           OUT dbms_utility.uncl_array,
allow_3X_iden IN  BOOLEAN);
DECLARE
 sql_tab dbms_utility.uncl_array;
 lenOut  NUMBER;
BEGIN
  dbms_logrep_util.comma_to_table('A,B,C', lenOut, sql_tab, TRUE);
  dbms_output.put_line(TO_CHAR(lenOut));
  dbms_output.put_line(sql_tab(1));
  dbms_output.put_line(sql_tab(2));
  dbms_output.put_line(sql_tab(3));
END;
/
3
A
B
C

PL/SQL procedure successfully completed.
Loads an array built from dbms_utility.lname_array from values in a comma delimited list

Overload 2
dbms_logrep_util.comma_to_table(
list          IN  VARCHAR2,
tablen        OUT BINARY_INTEGER,
tab           OUT dbms_utility.lname_array,
allow_3X_iden IN  BOOLEAN);
DECLARE
 sql_tab dbms_utility.lname_array;
 lenOut  NUMBER;
BEGIN
  dbms_logrep_util.comma_to_table('A,B,C', lenOut, sql_tab, TRUE);
  dbms_output.put_line(TO_CHAR(lenOut));
  dbms_output.put_line(sql_tab(1));
  dbms_output.put_line(sql_tab(2));
  dbms_output.put_line(sql_tab(3));
END;
/
3
A
B
C

PL/SQL procedure successfully completed.
 
COMPATIBLE_VARCHAR_TO_INT
Undocumented dbms_logrep_util.compatible_varchar_to_int(compat_var IN VARCHAR2) RETURN BINARY_INTEGER;
SQL> show parameter compatible

NAME               TYPE        VALUE
------------------ ----------- --------
compatible         string      23.0.0.0
noncdb_compatible  boolean     FALSE



SELECT dbms_logrep_util.compatible_varchar_to_int('19.0.0');
*
ORA-21560: argument at position kn11cmpat_var2_ub4:compat_var is null, invalid or out of range
ORA-06512: at "SYS.DBMS_LOGREP_UTIL", line 1596
 
DB_VERSION
Returns the database version from the database pointed to by a db link dbms_logrep_util.db_version(canon_dblink IN VARCHAR2) RETURN BINARY_INTEGER;
SELECT dbms_logrep_util.db_version('TESTLINK');
*
PLS-00352: Unable to access another database 'TESTLINK';
 
DDL_ANNOTATE (new 23ai data types)
Undocumented dbms_logrep_util.ddl_annotate(
ddl_text   IN  CLOB,
annotation OUT CLOB);
DECLARE
 outVal VARCHAR2(256);
BEGIN
  dbms_logrep_util.ddl_annotate('CREATE TABLE t(testcol DATE)', outVal);
  dbms_output.put_line(outVal);
END;
/
*
ORA-222: invalid LOB locator specified
 
ENQUOTE_LITERAL
Enquote a string literal. Add leading and trailing single quotes to a string literal

We recommend using DBMS_ASSERT instead.
dbms_logrep_util.enquote_literal(str IN VARCHAR2) RETURN VARCHAR2;
set serveroutput on

DECLARE
 table_name user_tables.table_name%TYPE := 'SERVERS';
BEGIN
  dbms_output.put_line(table_name);
  table_name := dbms_logrep_util.enquote_literal(table_name);
  dbms_output.put_line(table_name);
END;
/
SERVERS
'SERVERS'

PL/SQL procedure successfully completed.
 
ENQUOTE_NAME
This function encloses a name in double quotes

We recommend using DBMS_ASSERT instead.
dbms_logrep_util.enquote_name(
str        IN VARCHAR2,
capitalize IN BOOLEAN DEFAULT TRUE)
RETURN VARCHAR2;
set serveroutput on

DECLARE
 table_name user_tables.table_name%TYPE := 'SERVERS';
BEGIN
dbms_output.put_line(table_name);
  table_name := dbms_logrep_util.enquote_name(table_name);
  dbms_output.put_line(table_name);
END;
/
SERVERS
"SERVERS"

PL/SQL procedure successfully completed.
 
ENSURE_DB_COMPATIBLE
Returns an exception if the minimum compatible version is not compatible with the current (locally) installed version dbms_logrep_util.ensure_db_compatible(
min_compat   IN NUMBER,
local_compat IN NUMBER);
exec dbms_logrep_util.ensure_db_compatible(12, 18);

PL/SQL procedure successfully completed.

exec dbms_logrep_util.ensure_db_compatible(12, 11);
*
ORA-23375: feature is incompatible with database version at ASRA23AI.SUB06101709240. ASRAVCN.ORACLEVCN.COM
 
ENSURE_NONNULL
Ensures a variable is not null by  raising an exception if it is dbms_logrep_util.enquote_name(
parameter_value  IN VARCHAR2,
parameter_name   IN VARCHAR2,
proc_use_context IN VARCHAR2);
DECLARE
 pval  VARCHAR2(10) := 'TEST_VALUE';
 pname VARCHAR2(10) := 'TEST_NAME';
BEGIN
  dbms_logrep_util.ensure_nonnull(pval, pname, NULL);
END;
/

PL/SQL procedure successfully completed.

DECLARE
 pval  VARCHAR2(10);
 pname VARCHAR2(10) := 'TEST_NAME';
BEGIN
  dbms_logrep_util.ensure_nonnull(pval, pname, NULL);
END;
/
*
ORA-23605: invalid value "" for parameter TEST_NAME
 
ENSURE_STREAMS
Undocumented dbms_logrep_util.ensure_streams;
exec dbms_logrep_util.ensure_streams;

PL/SQL procedure successfully completed.
 
GET_CONSISTENT_SCN
Undocumented dbms_logrep_util.get_consistent_scn(consistent_scn OUT NUMBER) RETURN BOOLEAN;
DECLARE
  outVal BOOLEAN;
BEGIN
  IF dbms_logrep_util.get_consistent_scn(outVal) THEN
    dbms_output.put_line('T: ' || TO_CHAR(outVal);
  ELSE
    dbms_output.put_line('F');
  END IF;
END;
/
F

PL/SQL procedure successfully completed.
 
GET_CTNR_TZ_OFFSET_FROM_SYSTEM (new 23ai)
Undocumented dbms_logrep_util.get_ctnr_tz_offset_from_system RETURN NUMBER;
SELECT dbms_logrep_util.get_ctnr_tz_offset_from_system;

GET_CTNR_TZ_OFFSET_FROM_SYSTEM
------------------------------
                          -.25
 
GET_CURRENT_PDB_NAME
Returns the name of the current PDB dbms_logrep_util.get_current_pdb_name RETURN VARCHAR2;
SELECT dbms_logrep_util.get_current_pdb_name;

GET_CURRENT_PDB_NAME
---------------------
CDB$ROOT
 
GET_LAST_ENQ_SCN
Undocumented dbms_logrep_util..get_last_enq_scn(capture_name IN VARCHAR2) RETURN NUMBER;
See the source code in catcap.sql for the view _SXGG_DBA_CAPTURE
 
GET_MAX_BYTES_PER_CHAR
Returns the maximum number of bytes per character in the database's character set dbms_logrep_util.get_max_bytes_per_char RETURN NUMBER;
SELECT dbms_logrep_util.get_max_bytes_per_char;

GET_MAX_BYTES_PER_CHAR
----------------------
                     4
 
GET_MAX_LENGTH_COMPAT
Undocumented dbms_logrep_util.get_max_length_compat RETURN NUMBER;
SELECT dbms_logrep_util.get_max_length_compat;

GET_MAX_LENGTH_COMPAT
---------------------
                  128
 
GET_NLS_PREFIX
Substrings the first n characters of any string. Works with character sets ... also works with any other string tested.

It is always fascinating when developers at Oracle reinvent the wheel.
dbms_logrep_util.get_nls_prefix(
s   IN VARCHAR2,
len IN NUMBER)
RETURN VARCHAR2;
SELECT dbms_logrep_util.get_nls_prefix('AL32UTF8', 4);

DBMS_LOGREP_UTIL.GET_NLS_PREFIX('AL32UTF8',4)
----------------------------------------------
AL32


SELECT dbms_logrep_util.get_nls_prefix('Antidisestablishmentarianism', 4);

DBMS_LOGREP_UTIL.GET_NLS_PREFIX('ANTIDISESTABLISHMENTARIANISM',4)
------------------------------------------------------------------
Anti
 
GET_NLS_SUBSTR
Another absolutely brilliant reinvention of the wheel dbms_logrep_util.get_nls_substr(
s      IN      VARCHAR2,
offset IN  OUT NUMBER,
len    IN      NUMBER);
RETURN VARCHAR2;
SELECT SUBSTR('AL32UTF8', 3, 4);

SUBS
----
32UT


SELECT 3+4;

 3+4
----
   7


DECLARE
 retVal VARCHAR2(30);
 oSet   NUMBER := 3;
BEGIN
  retVal := dbms_logrep_util.get_nls_substr('AL32UTF8', oSet, 4);
  dbms_output.put_line(retVal);
  dbms_output.put_line(TO_CHAR(oSet));
END;
/
32UT
7
 
GET_PDB_SHORT_NAME (new 23ai parameter)
Returns the database name stripped of domain information dbms_logrep_util.get_pdb_shortname(
canon_dbname  IN OUT VARCHAR2,
global_dbname IN     VARCHAR2)
RETURN VARCHAR2;
SELECT global_name FROM global_name;

DECLARE
 ioVal  dbms_id := 'ASRA23AI';
 gnVal  VARCHAR2(128);
 retVal VARCHAR2(32);
BEGIN
  SELECT global_name INTO gnVal FROM global_name;
  retVal := dbms_logrep_util.get_pdb_short_name(ioVal, gnVal);
END;
/
*
ORA-01403: no data found
 
GET_REQ_CKPT_SCN
Undocumented dbms_logrep_util..get_req_ckpt_scn(
logmnr_sid  IN NUMBER,
applied_scn IN NUMBER)
RETURN NUMBER;
See the source code in catcap.sql for the view _SXGG_DBA_CAPTURE
 
GET_STR_COMPAT
Undocumented dbms_logrep_util..get_str_compat RETURN BINARY_INTEGER;
SELECT dbms_logrep_util.get_str_compat;

GET_STR_COMPAT
--------------
           112


-- also see the source code in catstrc.sql for the view DBA_STREAMS_UNSUPPORTED
 
GET_VERSION_NUMBER
Overload 1 dbms_logrep_util.get_version_number(version IN VARCHAR2) RETURN BINARY_INTEGER;
SELECT dbms_logrep_util.get_version_number('23.4.0.0')

DBMS_LOGREP_UTIL.GET_VERSION_NUMBER('23.4.0.0')
-----------------------------------------------
                                       23040000
Overload 2 dbms_logrep_util.get_version_number(version IN dbms_utility.db_version_array)
RETURN BINARY_INTEGER;
TBD
 
IS_BUILT_IN_TYPE
Undocumented dbms_logrep_util.is_built_in_type(type_name IN VARCHAR2) RETURN BOOLEAN;
BEGIN
  IF dbms_logrep_util.is_built_in_type('ADR_HOME_T') THEN
    dbms_output.put_line('Found');
  ELSE
    dbms_output.put_line('Not Found');
  END IF;
END;
/
Not Found

PL/SQL procedure successfully completed.
 
IS_FUNCTION_BASED_INDEX
Returns TRUE if the identified index is function based dbms_logrep_util.is_function_based_index(
canon_sname IN VARCHAR2,
canon_oname IN VARCHAR2)
RETURN BOOLEAN;
SELECT owner, index_name
FROM dba_indexes
WHERE index_type = 'FUNCTION-BASED NORMAL'
AND rownum < 6;

OWNER                     INDEX_NAME
------------------------- ------------------------------
SYS                       I_PDBSYNC3
SYS                       I_WRI$_OPTSTAT_TAB_OBJ#_ST
SYS                       I_WRI$_OPTSTAT_IND_OBJ#_ST
SYS                       I_WRI$_OPTSTAT_IND_ST
SYS                       I_WRI$_OPTSTAT_AUX_ST


BEGIN
  IF dbms_logrep_util.is_function_based_index('SYS', 'I_PDBSYNC3') THEN
    dbms_output.put_line('I_PDBSYNC3 is an FBI');
  ELSE
    dbms_output.put_line('I_PDBSYNC3 is not an FBI');
  END IF;
END;
/
I_PDBSYNC3 is an FBI

PL/SQL procedure successfully completed.

SELECT owner, index_name
FROM dba_indexes
WHERE index_type LIKE 'FUNCTION-BASED DOMAIN';

OWNER                     INDEX_NAME
------------------------- ------------------------------
XDB                       XDBHI_IDX


BEGIN
  IF dbms_logrep_util.is_function_based_index('XDB', 'XDBHI_IDX') THEN
    dbms_output.put_line('XDBHI_IDX is an FBI');
  ELSE
    dbms_output.put_line('XDBHI_IDX is not an FBI');
  END IF;
END;
/
XDBHI_IDX is an FBI

PL/SQL procedure successfully completed.
 
IS_INVOKER_VALID_OGG_USER
Returns TRUE if the user is a valid GoldenGate user dbms_logrep_util.is_invoker_valid_ogg_user(canon_user_name IN VARCHAR2) RETURN BOOLEAN;
BEGIN
  IF dbms_logrep_util.is_invoker_valid_ogg_user(USER) THEN
    dbms_output.put_line('A Valid GG User');
  ELSE
    dbms_output.put_line('Not A Valid GG User');
  END IF;
END;
/
A Valid GG User

PL/SQL procedure successfully completed.
 
IS_MAX_PRIV_USER
Returns TRUE if a user has maximum privileges ... whatever that means dbms_logrep_util.is_max_priv_user(canon_user_name IN VARCHAR2) RETURN BOOLEAN;
BEGIN
  IF dbms_logrep_util.is_max_priv_user('SYS') THEN
    dbms_output.put_line('SYS is a max priv user');
  ELSE
    dbms_output.put_line('SYS is not a max priv user');
  END IF;
  IF dbms_logrep_util.is_max_priv_user('XDB') THEN
    dbms_output.put_line('XDB is a max priv user');
  ELSE
    dbms_output.put_line('XDB is not a max priv user');
  END IF;
END;
/
SYS is a max priv user
XDB is not a max priv user

PL/SQL procedure successfully completed.
 
IS_PDB_ENABLED
Returns TRUE if a database is a Container database dbms_logrep_util.is_pdb_enabled RETURN BOOLEAN;
BEGIN
  IF dbms_logrep_util.is_pdb_enabled THEN
    dbms_output.put_line('Enabled');
  ELSE
    dbms_output.put_line('Not Enabled');
  END IF;
END;
/
Enabled

PL/SQL procedure successfully completed.
 
IS_ROOT_PDB
Returns TRUE if the current container is CDB$ROOT dbms_logrep_util.is_root_pdb RETURN BOOLEAN;
BEGIN
  IF dbms_logrep_util.is_root_pdb THEN
    dbms_output.put_line('Root Container');
  ELSE
    dbms_output.put_line('Some Other Container');
  END IF;
END;
/
Root Container

PL/SQL procedure successfully completed.
 
IS_SES_USER
Returns 1 if the canon_user_name matches the current user logon dbms_logrep_util.is_ses_user(canon_user_name IN VARCHAR2) RETURN BINARY_INTEGER;
SQL> sho user
USER is "SYS"

SELECT dbms_logrep_util.is_ses_user('SYSTEM');

DBMS_LOGREP_UTIL.IS_SES_USER('SYSTEM')
-------------------------------------
                                    0
 
IS_VALID_ROLE
Returns TRUE if the role named is valid dbms_logrep_util.is_valid_role(canon_role_in IN VARCHAR2) RETURN BOOLEAN;
BEGIN
  IF dbms_logrep_util.is_valid_role('RESOURCE') THEN
    dbms_output.put_line('True');
  ELSE
    dbms_output.put_line('False');
  END IF;
END;
/
TRUE

PL/SQL procedure successfully completed.
 
IS_VALID_SYSTEM_PRIV
Returns TRUE if the system privilege named is valid dbms_logrep_util.is_valid_system_priv(canon_privilege_in IN VARCHAR2) RETURN BOOLEAN;
BEGIN
  IF dbms_logrep_util.is_valid_system_priv('UNDER ANY TABLE') THEN
    dbms_output.put_line('True');
  ELSE
    dbms_output.put_line('False');
  END IF;
END;
/
True

PL/SQL procedure successfully completed.
 
LCR_CACHE_PURGE
Undocumented dbms_logrep_util.lcr_cache_purge;
exec dbms_logrep_util.lcr_cache_purge;

PL/SQL procedure successfully completed.
 
LOCAL_NODE
In a stand-alone database returns the database name from v$database dbms_logrep_util.local_node RETURN VARCHAR2;
SQL> SELECT name FROM v$database;

NAME
----------
ASRA23AI


SELECT dbms_logrep_util.local_node;

LOCAL_NODE
-----------
ASRA23AI.SUB6101709240,ASRAVCN.ORACLEVCN.COM
 
MESSAGE_TRACKING_PURGE
Undocumented dbms_logrep_util.message_tracking_purge;
exec dbms_logrep_util.message_tracking_purge;

PL/SQL procedure successfully completed.
 
RAWS
Undocumented dbms_logrep_util.raws(bit_offset IN NUMBER) RETURN RAW;
SELECT dbms_logrep_util.raws(42);

DBMS_LOGREP_UTIL.RAWS(42)
--------------------------
80
 
RESET
Undocumented dbms_logrep_util.reset;
exec dbms_logrep_util.reset;

PL/SQL procedure successfully completed.
 
SESS_HAS_ROLE
Returns 1 if the current session has been assigned the named role dbms_logrep_util.sess_has_role(canon_role_name IN VARCHAR2) RETURN BINARY_INTEGER;
SELECT dbms_logrep_util.sess_has_role('RESOURCE');

DBMS_LOGREP_UTIL.SESS_HAS_ROLE('RESOURCE')
------------------------------------------
                                         0
 
SET_3X_IDEN
Undocumented dbms_logrep_util.set_3x_iden(enable IN BOOLEAN);
exec dbms_logrep_util.set_3x_iden(TRUE);

PL/SQL procedure successfully completed.
 
SET_SUPP_LOGGING
Couldn't get this to fail with any value from 0 to 99 ... thought I knew what it would do ... but never found any system changes. dbms_logrep_util.set_supp_logging(
canon_schema_name IN VARCHAR2,
level             IN BINARY_INTEGER,
append            IN BOOLEAN);
exec dbms_logrep_util.set_supp_logging('SYS', 0, TRUE);

PL/SQL procedure successfully completed.

exec dbms_logrep_util.set_supp_logging('SYS', 99, TRUE);

PL/SQL procedure successfully completed.
 
SHORTEN_OBJECT_NAME
Another reinvention of the SUBSTRING function. And as can be seen from the 2nd demo at right doesn't even check to see if the resulting string is a valid object name dbms_logrep_util.shorten_object_name(
object_name IN VARCHAR2,
limit       IN NUMBER)
RETURN VARCHAR2;
SELECT dbms_logrep_util.shorten_object_name('OBNOXIOUSLYNAMEDTABLE', 9);

DBMS_LOGREP_UTIL.SHORTEN_OBJECT_NAME('OBNOXIOUSLYNAMEDTABLE',9)
---------------------------------------------------------------
OBNOXIOUS


SELECT dbms_logrep_util.shorten_object_name('OBNO XIOUSLYNAMEDTABLE', 9);

DBMS_LOGREP_UTIL.SHORTEN_OBJECT_NAME('OBNOXIOUSLYNAMEDTABLE',9)
---------------------------------------------------------------
OBNO XIOU
 
STRCMP_CS
String Comparison but clearly from the two examples at right I remain far from impressed.

Perhaps the "CS" hints at some deeper mystery
dbms_logrep_util.strcmp_cs(
str1 IN VARCHAR2,
str2 IN VARCHAR2)
RETURN BINARY_INTEGER;
SELECT dbms_logrep_util.strcmp_cs('Morgan', 'Mogen');

DBMS_LOGREP_UTIL.STRCMP_CS('MORGAN','MOGEN')
--------------------------------------------
                                           1


SELECT dbms_logrep_util.strcmp_cs('Morgan', 'Quantum Fluctuations');

DBMS_LOGREP_UTIL.STRCMP_CS('MORGAN','QUANTUMFLUCTUATIONS')
----------------------------------------------------------
                                                         1
 
STREAMS_TRANSACTION_PURGE
Undocumented dbms_logrep_util.streams_transaction_purge;
exec dbms_logrep_util.streams_transaction_purge;

PL/SQL procedure successfully completed.
 
UNCL_TO_NAME
Converts a uncl_array to a name_array dbms_logrep_util.uncl_to_name(
uncl IN  dbms_utility.uncl_array,
name OUT dbms_utility.name_array);
DECLARE
 uArray dbms_utility.uncl_array;
 nArray dbms_utility.name_array;
BEGIN
  uArray(1) := 'Dan';
  uArray(2) := 'Morgan';
  dbms_logrep_util.uncl_to_name(uArray, nArray);
  dbms_output.put_line(nArray(1));
  dbms_output.put_line(nArray(2));
END;
/
Dan
Morgan

PL/SQL procedure successfully completed.
 
UNCL_TO_QUOTED_NAME
Converts a uncl_array to quoted_name_array dbms_logrep_util.uncl_to_quoted_name(
uncl IN  dbms_utility.uncl_array,
name OUT dbms_utility.quoted_name_array);
DECLARE
 uArray dbms_utility.uncl_array;
 qArray dbms_utility.quoted_name_array;
BEGIN
  uArray(1) := 'Dan';
  uArray(2) := 'Morgan';
  dbms_logrep_util.uncl_to_quoted_name(uArray, qArray);
  dbms_output.put_line(qArray(1));
  dbms_output.put_line(qArray(2));
END;
/
Dan
Morgan

PL/SQL procedure successfully completed.
 
USER_HAS_ROLE
Returns 1 if the named user has the named role dbms_logrep_util.user_has_role(
canon_user_name IN VARCHAR2,
canon_role_name IN VARCHAR2)
RETURN BINARY_INTEGER;
SELECT grantee
FROM dba_role_privs
WHERE granted_role = 'RESOURCE'
ORDER BY 1;

GRANTEE
------------------------------
DB_DEVELOPER_ROLE
LOGSTDBY_ADMINISTRATOR
SYS

SELECT dbms_logrep_util.user_has_role('SYS', 'RESOURCE');

DBMS_LOGREP_UTIL.USER_HAS_ROLE('SYS','RESOURCE')
------------------------------------------------
                                               1
 
WRITE_ERROR
  dbms_logrep_util.write_error(
header      IN VARCHAR2,
write_alert IN BOOLEAN);
exec dbms_logrep_util.write_error('WT_TEST0', TRUE);

PL/SQL procedure successfully completed.

-- errors were written to trace files and documented in the alert log.
 
WRITE_TRACE
Write a message to a trace file
Overload 1
dbms_logrep_util.write_trace(
message     IN VARCHAR2,
event_level IN BINARY_INTEGER,
time_info   IN BOOLEAN,
wrap        IN BOOLEAN)
exec dbms_logrep_util.write_trace('WT_TEST0', 2, TRUE, FALSE);

PL/SQL procedure successfully completed.
Overload 2 dbms_logrep_util.write_trace(
message     IN CLOB,
event_level IN BINARY_INTEGER,
time_info   IN BOOLEAN,
wrap        IN BOOLEAN)
exec dbms_logrep_util.write_trace('WT_TEST0', 3, TRUE, TRUE);

PL/SQL procedure successfully completed.

Related Topics
Built-in Functions
Built-in Packages
DBMS_LOGREP_DEFPROC_UTL
DBMS_LOGREP_EXP
DBMS_LOGREP_IMP
DBMS_LOGREP_IMP_INTERNAL
DBMS_LOGREP_UTIL_INVOK
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