Oracle DBMS_LOGREP_UTIL
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 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