ACE Director Alum Daniel Morgan, founder of Morgan's Library, is scheduling
complimentary technical Workshops on Database Security for the first 30
Oracle Database customers located anywhere in North America, EMEA, LATAM, or
APAC that send an email to
asra_us@oracle.com. Request a Workshop for
your organization today.
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';
161 separate 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>
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));
SELECT dbms_logrep_util.check_lcrid_version(3) FROM dual;
SELECT dbms_logrep_util.check_lcrid_version(3) FROM dual
*
ERROR at line 1:
ORA-26958: LCR identifier version is invalid.
ORA-06512: at "SYS.DBMS_LOGREP_UTIL", line 581
ORA-06512: at "SYS.DBMS_LOGREP_UTIL", line 635
ORA-06512: at "SYS.DBMS_LOGREP_UTIL", line 4072
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;
/
exec dbms_logrep_util.ensure_db_compatible(12, 11);
*
ERROR at line 1:
ORA-23375: feature is incompatible with database version at ORABASE1
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
ORA-06512: at "SYS.DBMS_LOGREP_UTIL", line 4031
ORA-06512: at line 1
DECLARE
pval VARCHAR2(10);
pname VARCHAR2(10) := 'TEST_NAME';
BEGIN
dbms_logrep_util.ensure_nonnull(pval, pname, NULL);
END;
/
begin
*
ERROR at line 1:
ORA-23605: invalid value "" for parameter TEST_NAME
ORA-06512: at "SYS.DBMS_LOGREP_UTIL", line 569
ORA-06512: at "SYS.DBMS_LOGREP_UTIL", line 623
ORA-06512: at "SYS.DBMS_LOGREP_UTIL", line 2773
ORA-06512: at line 2
dbms_logrep_util.get_consistent_scn(consistent_scn OUT NUMBER)
RETURN BOOLEAN;
conn sys@pdbdev as sysdba
DECLARE
retVal BOOLEAN;
BEGIN
IF dbms_logrep_util.get_consistent_scn(retVal) THEN
dbms_output.put_line('T: ' || TO_CHAR(retVal);
ELSE
dbms_output.put_line('F');
END IF;
END;
/
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
SELECT owner, index_name
FROM dba_indexes
WHERE index_type LIKE 'FUNCTION-BASED DOMAIN';
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
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;
/
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
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
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)
FROM dual;
-- from trace file
Trace file C:\U01\ORABASE19\diag\rdbms\orabasexix\orabasexix\trace\orabasexix_ora_7724.trc
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
Build label: RDBMS_19.3.0.0.0DBRU_WINDOWS.X64_190528
Windows NT Version V6.2
ORACLE_HOME = C:\u01\orahome19\WINDOWS.X64_193000_db_home
Node name : PERRITO5
CPU : 4 - type 86642 physical cores
Process Affinity : 0x0000000000000000
Memory (Avail/Total): Ph:10205M/16239M, Ph+PgF:8682M/18671M
Instance name: orabasexix
Redo thread mounted by this instance: 1
Oracle process number: 0
Windows thread id: 7724, image:
*** 2020-09-28T20:52:12.541587-05:00 (CDB$ROOT(1))
Required IPC RDMAV_FORK_SAFE environment not set
Required IPC RDMAV_HUGEPAGES_SAFE environment not set WT_TEST0: exception, sql code = 0, error message: ORA-0000: normal, successful completion