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
This package allow the user to refresh snapshots and purge logs providing API supporting the refreshing of snapshot (materialized view)
that are not part of the same refresh group and purging of MV snapshot logs.
dbms_mview is a synonym for dbms_snapshot which is the name of the actual package.
GRANT execute ON sys.RewriteMessage TO PUBLIC;
GRANT execute ON sys.RewriteArrayType TO PUBLIC;
GRANT execute ON sys.ExplainMVMessage TO PUBLIC;
GRANT execute ON sys.ExplainMVArrayType TO PUBLIC;
GRANT execute ON dbms_snapshot TO uwclass;
Estimates the size of a materialized view that you might create, in bytes and rows
dbms_snapshot.estimate_mview_size(
stmt_id IN VARCHAR2,
select_clause IN VARCHAR2,
num_rows OUT NUMBER,
num_bytes OUT NUMBER);
set serveroutput on
DECLARE
out_rows NUMBER;
out_bytes NUMBER;
BEGIN
dbms_snapshot.estimate_mview_size('abc',
'SELECT srvr_id FROM servers s WHERE EXISTS (SELECT srvr_id
FROM serv_inst i WHERE s.srvr_id = i.srvr_id)', out_rows, out_bytes);
Explains what is possible with a materialized view or potential materialized view
Overload 1
dbms_snapshot.explain_mview(
mv IN VARCHAR2,
stmt_id IN VARCHAR2:= NULL);
Note: You must run the utlxmv.sql script to create MV_CAPABILITIES_TABLE in the current schema prior to calling EXPLAIN_MVIEW except when you direct output to a VARRAY.
The script is found in the admin directory.
SQL> @?/rdbms/admin/utlxmv.sql
desc mv_capabilities_table
CREATE MATERIALIZED VIEW mv_complex
TABLESPACE uwdata
REFRESH COMPLETE
START WITH SYSDATE
NEXT SYSDATE + 1
AS SELECT s.srvr_id, i.installstatus, COUNT(*)
FROM servers s, serv_inst i
WHERE s.srvr_id = i.srvr_id
GROUP BY s.srvr_id, i.installstatus;
exec dbms_snapshot.explain_mview('MV_COMPLEX');
SELECT capability_name, possible
FROM mv_capabilities_table;
Overload 2
dbms_snapshot.explain_mview(
mv IN CLOB,
stmt_id IN VARCHAR2 := NULL);
TRUNCATE TABLE mv_capabilities_table;
DECLARE
mv CLOB := 'CREATE MATERIALIZED VIEW mv_rewrite TABLESPACE uwdata
REFRESH ON DEMAND ENABLE QUERY REWRITE AS SELECT s.srvr_id,
i.installstatus, COUNT(*) FROM servers s, serv_inst i
WHERE s.srvr_id = i.srvr_id GROUP BY s.srvr_id, i.installstatus';
BEGIN
dbms_snapshot.explain_mview(mv);
END;
/
SELECT capability_name, possible
FROM mv_capabilities_table;
Overload 3
dbms_snapshot.explain_mview(
mv IN VARCHAR2,
msg_array IN OUT sys.ExplainMVArrayType);
desc sys.ExplainMVArrayType
CREATE TABLE test (
explaincol sys.ExplainMVArrayType);
DECLARE
mv VARCHAR2(512) :=
'CREATE MATERIALIZED VIEW mv_rewrite TABLESPACE uwdata
REFRESH ON DEMAND ENABLE QUERY REWRITE AS SELECT s.srvr_id,
i.installstatus, COUNT(*) FROM servers s, serv_inst i
WHERE s.srvr_id = i.srvr_id GROUP BY s.srvr_id, i.installstatus';
rset sys.ExplainMVArrayType;
BEGIN
dbms_snapshot.explain_mview(mv, rset);
INSERT INTO test
VALUES
(rset);
END;
/
SELECT * FROM test;
Overload 4
dbms_snapshot.explain_mview(
mv IN CLOB,
msg_array IN OUT sys.ExplainMVArrayType);
desc sys.ExplainMVArrayType
CREATE TABLE test (
explaincol sys.ExplainMVArrayType);
DECLARE
mv CLOB := 'CREATE MATERIALIZED VIEW mv_rewrite TABLESPACE uwdata
REFRESH ON DEMAND ENABLE QUERY REWRITE AS SELECT s.srvr_id,
i.installstatus, COUNT(*) FROM servers s, serv_inst i
WHERE s.srvr_id = i.srvr_id GROUP BY s.srvr_id, i.installstatus';
rset sys.ExplainMVArrayType;
BEGIN
dbms_snapshot.explain_mview(mv, rset);
Explains why a query failed to rewrite or why the optimizer chose to rewrite a query with a particular materialized view
Overload 1
dbms_snapshot.explain_rewrite(
query IN VARCHAR2,
mv IN VARCHAR2 := NULL,
statement_id IN VARCHAR2 := NULL);
Note: To obtain the output into a table, you must run the utlxrw.sql script before calling EXPLAIN_REWRITE. This script creates a table named REWRITE_TABLE in the current schema.
SQL> @?/rdbms/admin/utlxrw.sql
desc rewrite_table
DECLARE
SQLstr VARCHAR2(4000) := 'SELECT s.srvr_id, i.installstatus, COUNT(*)
FROM servers s, serv_inst i
WHERE s.srvr_id = i.srvr_id
GROUP BY s.srvr_id, i.installstatus';
BEGIN
dbms_snapshot.explain_rewrite(SQLstr, 'UWCLASS.MV_COMPLEX');
END;
/
SELECT query, message
FROM rewrite_table;
TRUNCATE TABLE rewrite_table;
DECLARE
SQLstr VARCHAR2(4000) := 'SELECT COUNT(*) FROM serv_inst
WHERE srvr_id = 2 AND installstatus = ''I''';
BEGIN
dbms_snapshot.explain_rewrite(SQLstr, 'UWCLASS.MV_COMPLEX');
END;
/
SELECT query, message
FROM rewrite_table;
Overload 2
dbms_snapshot.explain_rewrite(
query IN CLOB,
mv IN VARCHAR2 := NULL,
statement_id IN VARCHAR2 := NULL);
TBD
Overload 3
dbms_snapshot.explain_rewrite(
query IN VARCHAR2,
mv IN VARCHAR2 := NULL,
msg_array IN OUT sys.RewriteArrayType);
TBD
Overload 4
dbms_snapshot.explain_rewrite(
query IN CLOB,
mv IN VARCHAR2 := NULL,
msg_array IN OUT sys.RewriteArrayType);
Explain Rewrite user interface using a table for output for implementation in OEM
dbms_snapshot.explain_rewrite_sqlid(
query IN VARCHAR2, -- SQL to explain
mv IN VARCHAR2 := NULL, -- fully qualified MV name
statement_id IN VARCHAR2 := NULL, -- a unique identifier for the explain statement
sqlid IN VARCHAR2 := NULL); -- OEM SQL_ID of the query
Returns a partition marker from a rowid, and is used for Partition Change Tracking (PCT)
dbms_snapshot.pmarker(rid IN ROWID) RETURN NUMBER PARALLEL_ENABLE;
CREATE MATERIALIZED VIEW mv_complex
TABLESPACE uwdata
REFRESH COMPLETE
START WITH SYSDATE
NEXT SYSDATE + 1
AS SELECT s.srvr_id, i.installstatus, COUNT(*)
FROM servers s, serv_inst i
WHERE s.srvr_id = i.srvr_id
GROUP BY s.srvr_id, i.installstatus;
SELECT rowid FROM mv_complex;
SELECT dbms_snapshot.pmarker('AAATxjAAEAAAAJtAAS') FROM dual;
Refreshes one or more materialized views that are not members of the same refresh group
Overload 1
dbms_snapshot.refresh(
list IN VARCHAR2,
method IN VARCHAR2 := NULL,
rollback_seg IN VARCHAR2 := NULL,
push_deferred_rpc IN BOOLEAN := TRUE,
refresh_after_errors IN BOOLEAN := FALSE,
purge_option IN BINARY_INTEGER := 1, -- valid values 0, 1, 2
parallelism IN BINARY_INTEGER := 0,
heap_size IN BINARY_INTEGER := 0,
atomic_refresh IN BOOLEAN := TRUE,
nested IN BOOLEAN := FALSE,
out_of_place IN BOOLEAN := FALSE,
skip_ext_data IN BOOLEAN := FALSE);
BEGIN
FOR mvRec IN (
SELECT owner, mview_name
FROM dba_mviews
WHERE refresh_mode = 'DEMAND'
AND owner NOT IN (
SELECT username
FROM dba_users
WHERE oracle_maintained = 'Y')) LOOP
dbms_snapshot.refresh(mvRec.owner ||'.'|| mvRec.mview_name);
END LOOP;
END mv_force_refresh;
/
PL/SQL procedure successfully completed.
Refreshes one or more materialized views that are not members of the same refresh group
Overload 2
dbms_snapshot.refresh(
tab IN dbms_utility.uncl_array,
method IN VARCHAR2 := NULL,
rollback_seg IN VARCHAR2 := NULL,
push_deferred_rpc IN BOOLEAN := TRUE,
refresh_after_errors IN BOOLEAN := FALSE,
purge_option IN BINARY_INTEGER := 1,
parallelism IN BINARY_INTEGER := 0,
heap_size IN BINARY_INTEGER := 0,
atomic_refresh IN BOOLEAN := TRUE,
nested IN BOOLEAN := FALSE,
out_of_place IN BOOLEAN := FALSE,
skip_ext_data IN BOOLEAN := FALSE);
Refreshes all materialized views that do not reflect changes to their master table or master materialized view
dbms_snapshot.refresh_all_mviews(
number_of_failures OUT BINARY_INTEGER,
method IN VARCHAR2 := NULL,
rollback_seg IN VARCHAR2 := NULL,
refresh_after_errors IN BOOLEAN := FALSE,
atomic_refresh IN BOOLEAN := TRUE,
out_of_place IN BOOLEAN := FALSE,
skip_ext_data IN BOOLEAN := FALSE);
DECLARE
outVal BINARY_INTEGER;
BEGIN
dbms_snapshot.refresh_all_mviews(outVal);
dbms_output.put_line(outVal);
END;
/
Refreshes all table-based materialized views that depend on a specified master table or master materialized view, or list of master tables or master materialized views
Overload 1
dbms_snapshot.refresh_dependent(
number_of_failures OUT BINARY_INTEGER,
list IN VARCHAR2,
method IN VARCHAR2 := NULL,
rollback_seg IN VARCHAR2 := NULL,
refresh_after_errors IN BOOLEAN := FALSE,
atomic_refresh IN BOOLEAN := TRUE,
nested IN BOOLEAN := FALSE,
out_of_place IN BOOLEAN := FALSE,
skip_ext_data IN BOOLEAN := FALSE);
TBD
Refreshes all table-based materialized views that depend on a specified master table or master materialized view, or list of master tables or master materialized views
Overload 2
dbms_snapshot.refresh_dependent(
number_of_failures OUT BINARY_INTEGER,
tab IN dmbs_utility.uncl_array,
method IN VARCHAR2 := NULL,
rollback_seg IN VARCHAR2 := NULL,
refresh_after_errors IN BOOLEAN := FALSE,
atomic_refresh IN BOOLEAN := TRUE,
nested IN BOOLEAN := FALSE,
out_of_place IN BOOLEAN := FALSE,
skip_ext_data IN BOOLEAN := FALSE);
Internal Procedure ONLY. DO NOT USE DIRECTLY. The added parameter 'resources' for internal parallel resource load balancing
dbms_snapshot.refresh_mv(
pipename IN VARCHAR2,
mv_index IN BINARY_INTEGER,
owner IN VARCHAR2,
name IN VARCHAR2,
method IN VARCHAR2,
rollseg IN VARCHAR2,
atomic_refresh IN BINARY_INTEGER,
out_of_place IN BINARY_INTEGER,
skip_ext_data IN BINARY_INTEGER,
env IN BINARY_INTEGER,
resources IN BINARY_INTEGER DEFAULT 0,
refresh_id IN NUMBER);
Enables the administration of individual materialized views
Overload 1
dbms_snapshot.register_mview(
mviewowner IN VARCHAR2,
mviewname IN VARCHAR2,
mviewsite IN VARCHAR2,
mview_id IN DATE,
flag IN BINARY_INTEGER,
qry_txt IN VARCHAR2,
rep_type IN BINARY_INTEGER := dbms_snapshot.reg_unknown);
See PURGE_MVIEW_FROM_LOG Overload 2 Above
Enables the administration of individual materialized views
Overload 2
dbms_snapshot.register_mview(
mviewowner IN VARCHAR2,
mviewname IN VARCHAR2,
mviewsite IN VARCHAR2,
mview_id IN BINARY_INTEGER,
flag IN BINARY_INTEGER,
qry_txt IN VARCHAR2,
rep_type IN BINARY_INTEGER := dbms_snapshot.reg_unknown);
Internal Procedure ONLY. DO NOT USE DIRECTLY. Deprecated as of 19c.
Overload 1
dbms_snapshot.register_snapshot(
snapowner IN VARCHAR2,
snapname IN VARCHAR2,
snapsite IN VARCHAR2,
snapshot_id IN DATE,
flag IN BINARY_INTEGER,
qry_txt IN VARCHAR2,
rep_type IN BINARY_INTEGER := dbms_snapshot.reg_unknown);
Deprecated
Deprecated as of 19c.
Overload 2
dbms_snapshot.register_snapshot(
snapowner IN VARCHAR2,
snapname IN VARCHAR2,
snapsite IN VARCHAR2,
snapshot_id IN BINARY_INTEGER,
flag IN BINARY_INTEGER,
qry_txt IN VARCHAR2,
rep_type IN BINARY_INTEGER := dbms_snapshot.reg_unknown);
Enables the administration of individual materialized views once invoked at a master site or master materialized view site to unregister a materialized view
dbms_snapshot.unregister_mview(
mviewowner IN VARCHAR2,
mviewname IN VARCHAR2,
mviewsite IN VARCHAR2);