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
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));
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
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
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
exec dbms_logrep_util.ensure_db_compatible(12, 11);
*
ORA-23375: feature is incompatible with database version at ASRA23AI.SUB06101709240. ASRAVCN.ORACLEVCN.COM
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
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
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
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';
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;
/ A Valid GG 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
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
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;