MINI MINI MANI MO
Rem
Rem $Header: rdbms/admin/execaq.sql /main/19 2016/03/22 06:48:14 raeburns Exp $
Rem
Rem execaq.sql
Rem
Rem Copyright (c) 2006, 2016, Oracle and/or its affiliates.
Rem All rights reserved.
Rem
Rem NAME
Rem execaq.sql - Execute AQ packages to create required queues
Rem
Rem DESCRIPTION
Rem
Rem
Rem NOTES
Rem
Rem
Rem
Rem BEGIN SQL_FILE_METADATA
Rem SQL_SOURCE_FILE: rdbms/admin/execaq.sql
Rem SQL_SHIPPED_FILE: rdbms/admin/execaq.sql
Rem SQL_PHASE: EXECAQ
Rem SQL_STARTUP_MODE: NORMAL
Rem SQL_IGNORABLE_ERRORS: NONE
Rem SQL_CALLING_FILE: rdbms/admin/catpexec.sql
Rem END SQL_FILE_METADATA
Rem
Rem MODIFIED (MM/DD/YY)
Rem raeburns 02/29/16 - Bug 22820096: remove ALTER TABLE UPGRADE
Rem raeburns 11/11/15 - RTI 18745976: move ALTER TABLE for
Rem sys.aq_event_table
Rem devghosh 03/27/14 - bug17709018: grant on unflushed_dequeues
Rem surman 12/29/13 - 13922626: Update SQL metadata
Rem gravipat 11/06/13 - 17709031: Use create_cdbview procedure to create
Rem cdb views
Rem surman 03/27/12 - 13615447: Add SQL patching tags
Rem gravipat 12/05/11 - Create cdbview using CDB$VIEW function
Rem gagarg 09/11/11 - create cdb view
Rem maba 06/13/11 - added recreate DBMS_AQJMS synonym
Rem shbose 05/05/09 - Bug 7530052: Delete entries for
Rem AQ$_<queue table>_F from ku_noexp_tab table
Rem gagarg 08/28/08 - Create AQ_SRVNTFN_TABLE dynamically in emon
Rem coordinator
Rem jhan 05/21/07 - add trace_level and dequeue_timeout parameters
Rem jawilson 04/03/07 - add propagation job class
Rem jawilson 11/10/06 - event-based job changes to propagation program
Rem jawilson 09/28/06 - remove instance-bound job classes
Rem jhan 08/09/06 - Add exception handle for Queue Creation
Rem jawilson 06/02/06 - propagation using new dbms scheduler
Rem absaxena 06/02/06 - grant select on DBA_SUBSCR_REGISTRATIONS
Rem rburns 05/19/06 - execute queue packages
Rem rburns 05/19/06 - Created
Rem
@@?/rdbms/admin/sqlsessstart.sql
-- This synonym becomes invalid for some reason, so recreate here
CREATE OR REPLACE PUBLIC SYNONYM dbms_aqjms_internal
FOR sys.dbms_aqjms_internal;
CREATE OR REPLACE PUBLIC SYNONYM dbms_aqjms
FOR sys.dbms_aqjms;
--
-- Create and grant privileges to all the AQ system-defined roles
-- Notes: The upgrade script should have revoked all privileges from
-- the role and have the privileges granted here.
--
BEGIN
dbms_aqadm.grant_system_privilege(privilege => 'MANAGE_ANY', grantee => 'AQ_ADMINISTRATOR_ROLE', admin_option => TRUE);
END;
/
BEGIN
dbms_aqadm.grant_system_privilege(privilege => 'ENQUEUE_ANY', grantee => 'AQ_ADMINISTRATOR_ROLE', admin_option => TRUE);
END;
/
BEGIN
dbms_aqadm.grant_system_privilege(privilege => 'DEQUEUE_ANY',grantee => 'AQ_ADMINISTRATOR_ROLE', admin_option => TRUE);
END;
/
BEGIN
dbms_rule_adm.grant_system_privilege(privilege => dbms_rule_adm.CREATE_EVALUATION_CONTEXT_OBJ, grantee => 'AQ_ADMINISTRATOR_ROLE', grant_option => TRUE);
END;
/
BEGIN
dbms_rule_adm.grant_system_privilege(privilege => dbms_rule_adm.CREATE_RULE_SET_OBJ, grantee => 'AQ_ADMINISTRATOR_ROLE', grant_option => TRUE);
END;
/
BEGIN
dbms_rule_adm.grant_system_privilege(privilege => dbms_rule_adm.CREATE_RULE_OBJ, grantee => 'AQ_ADMINISTRATOR_ROLE', grant_option => TRUE);
END;
/
GRANT SELECT ON DBA_QUEUE_TABLES TO aq_administrator_role
/
GRANT SELECT ON DBA_QUEUES TO aq_administrator_role
/
GRANT SELECT ON DBA_QUEUE_SCHEDULES TO aq_administrator_role
/
GRANT SELECT ON sys.v_$aq TO aq_administrator_role
/
GRANT SELECT ON sys.gv_$aq TO aq_administrator_role
/
GRANT SELECT ON sys.aq$_propagation_status TO aq_administrator_role
/
GRANT EXECUTE ON sys.dbms_aqadm TO aq_administrator_role
/
GRANT EXECUTE ON sys.dbms_aq TO aq_administrator_role
/
GRANT EXECUTE ON sys.dbms_aq_import_internal TO aq_administrator_role
/
GRANT EXECUTE ON sys.dbms_rule_eximp TO aq_administrator_role
/
GRANT EXECUTE ON sys.dbms_aqin TO aq_administrator_role
/
GRANT EXECUTE ON sys.dbms_aqjms_internal TO aq_administrator_role
/
GRANT SELECT ON SYS.AQ$Internet_Users TO aq_administrator_role
/
GRANT EXECUTE ON sys.dbms_transform TO aq_administrator_role
/
GRANT EXECUTE ON sys.dbms_aqelm TO aq_administrator_role
/
GRANT select ON DBA_AQ_AGENTS to aq_administrator_role
/
GRANT select ON DBA_AQ_AGENT_PRIVS to aq_administrator_role
/
GRANT select ON DBA_QUEUE_SUBSCRIBERS TO aq_administrator_role
/
GRANT select ON DBA_SUBSCR_REGISTRATIONS TO aq_administrator_role
/
GRANT SELECT ON SYS.AQ$_UNFLUSHED_DEQUEUES TO aq_administrator_role
/
GRANT EXECUTE ON sys.dbms_aq TO aq_user_role
/
GRANT EXECUTE ON sys.dbms_aqin TO aq_user_role
/
GRANT EXECUTE ON sys.dbms_aqjms_internal TO aq_user_role
/
GRANT EXECUTE ON sys.dbms_transform TO aq_user_role
/
GRANT SELECT ON SYS.AQ$_UNFLUSHED_DEQUEUES TO aq_user_role
/
--
-- Create the global AQ user role
--
DECLARE
ent_sec_enabled VARCHAR2(64);
BEGIN
SELECT value INTO ent_sec_enabled FROM v$option
WHERE lower(parameter) LIKE '%enterprise user security%';
IF (instr(lower(ent_sec_enabled), 'true') > 0) THEN
execute immediate 'CREATE ROLE global_aq_user_role identified globally';
END IF;
END;
/
GRANT EXECUTE ON sys.dbms_aqadm TO system WITH GRANT OPTION
/
GRANT EXECUTE ON sys.dbms_aq TO system WITH GRANT OPTION
/
GRANT EXECUTE ON sys.dbms_aqelm TO system WITH GRANT OPTION
/
--
-- Grant dbms_aq_import_internal
--
GRANT EXECUTE ON sys.dbms_aq_import_internal TO SYSTEM WITH GRANT OPTION
/
GRANT EXECUTE ON sys.dbms_aq_import_internal TO imp_full_database
/
GRANT EXECUTE ON sys.dbms_aq_import_internal TO exp_full_database
/
--
-- Grant execute right to EXECUTE_CATALOG_ROLE
--
GRANT EXECUTE ON sys.dbms_aqadm TO execute_catalog_role
/
GRANT EXECUTE ON sys.dbms_aq_import_internal TO execute_catalog_role
/
GRANT EXECUTE ON sys.dbms_aq TO execute_catalog_role
/
GRANT EXECUTE ON sys.dbms_rule_eximp TO execute_catalog_role
/
GRANT EXECUTE ON sys.dbms_aqin TO execute_catalog_role
/
GRANT EXECUTE ON sys.dbms_aqjms_internal TO execute_catalog_role
/
GRANT EXECUTE ON sys.dbms_aqelm TO execute_catalog_role
/
-- permissions for types created for pl/sql notification
GRANT EXECUTE ON msg_prop_t TO PUBLIC
/
GRANT EXECUTE ON aq$_descriptor TO PUBLIC
/
GRANT EXECUTE ON aq$_ntfn_descriptor TO PUBLIC
/
GRANT EXECUTE ON aq$_reg_info TO PUBLIC
/
GRANT EXECUTE ON aq$_reg_info_list TO PUBLIC
/
GRANT EXECUTE ON aq$_post_info TO PUBLIC
/
GRANT EXECUTE ON aq$_post_info_list TO PUBLIC
/
GRANT EXECUTE ON aq$_ntfn_msgid_array TO PUBLIC
/
GRANT EXECUTE ON dbms_aq_inv TO PUBLIC
/
--
-- Grant 'MANAGE_ANY' to imp_full_database
-- Note: 'select any table' privilege is needed for full database export
-- 'manage any queue' privilege is needed for full database import
--
GRANT EXECUTE ON sys.dbms_aqadm TO imp_full_database
/
BEGIN
dbms_aqadm.grant_system_privilege(privilege => 'MANAGE_ANY', grantee => 'IMP_FULL_DATABASE', admin_option => FALSE);
END;
/
-- Grant Enqueue, Dequeue and Manage ANY privilege to SYS
BEGIN
dbms_aqadm.grant_system_privilege(privilege => 'MANAGE_ANY', grantee => 'SYS', admin_option => TRUE);
END;
/
BEGIN
dbms_aqadm.grant_system_privilege(privilege => 'ENQUEUE_ANY', grantee => 'SYS', admin_option => TRUE);
END;
/
BEGIN
dbms_aqadm.grant_system_privilege(privilege => 'DEQUEUE_ANY',grantee => 'SYS', admin_option => TRUE);
END;
/
-- Grant rule privileges to SYS
BEGIN
dbms_rule_adm.grant_system_privilege(privilege => dbms_rule_adm.CREATE_ANY_EVALUATION_CONTEXT, grantee => 'SYS', grant_option => TRUE);
END;
/
BEGIN
dbms_rule_adm.grant_system_privilege(privilege => dbms_rule_adm.ALTER_ANY_EVALUATION_CONTEXT, grantee => 'SYS', grant_option => TRUE);
END;
/
BEGIN
dbms_rule_adm.grant_system_privilege(privilege => dbms_rule_adm.DROP_ANY_EVALUATION_CONTEXT, grantee => 'SYS', grant_option => TRUE);
END;
/
BEGIN
dbms_rule_adm.grant_system_privilege(privilege => dbms_rule_adm.EXECUTE_ANY_EVALUATION_CONTEXT, grantee => 'SYS', grant_option => TRUE);
END;
/
BEGIN
dbms_rule_adm.grant_system_privilege(privilege => dbms_rule_adm.CREATE_ANY_RULE_SET, grantee => 'SYS', grant_option => TRUE);
END;
/
BEGIN
dbms_rule_adm.grant_system_privilege(privilege => dbms_rule_adm.ALTER_ANY_RULE_SET, grantee => 'SYS', grant_option => TRUE);
END;
/
BEGIN
dbms_rule_adm.grant_system_privilege(privilege => dbms_rule_adm.DROP_ANY_RULE_SET, grantee => 'SYS', grant_option => TRUE);
END;
/
BEGIN
dbms_rule_adm.grant_system_privilege(privilege => dbms_rule_adm.EXECUTE_ANY_RULE_SET, grantee => 'SYS', grant_option => TRUE);
END;
/
BEGIN
dbms_rule_adm.grant_system_privilege(privilege => dbms_rule_adm.CREATE_ANY_RULE, grantee => 'SYS', grant_option => TRUE);
END;
/
BEGIN
dbms_rule_adm.grant_system_privilege(privilege => dbms_rule_adm.ALTER_ANY_RULE, grantee => 'SYS', grant_option => TRUE);
END;
/
BEGIN
dbms_rule_adm.grant_system_privilege(privilege => dbms_rule_adm.DROP_ANY_RULE, grantee => 'SYS', grant_option => TRUE);
END;
/
BEGIN
dbms_rule_adm.grant_system_privilege(privilege => dbms_rule_adm.EXECUTE_ANY_RULE, grantee => 'SYS', grant_option => TRUE);
END;
/
BEGIN
dbms_rule_adm.grant_system_privilege(privilege => dbms_rule_adm.CREATE_EVALUATION_CONTEXT_OBJ, grantee => 'SYS', grant_option => TRUE);
END;
/
BEGIN
dbms_rule_adm.grant_system_privilege(privilege => dbms_rule_adm.CREATE_RULE_SET_OBJ, grantee => 'SYS', grant_option => TRUE);
END;
/
BEGIN
dbms_rule_adm.grant_system_privilege(privilege => dbms_rule_adm.CREATE_RULE_OBJ, grantee => 'SYS', grant_option => TRUE);
END;
/
-- queue table for storing events incase ksr channel memory consumption
-- above high watermark
-- (Design Specification for Publish/Subscribe notification framework
-- enhancement, RDBMS, Version 8.2)
-- create aq_event_table queue table
BEGIN
dbms_aqadm.create_queue_table(queue_table => 'SYS.AQ_EVENT_TABLE', queue_payload_type =>'SYS.AQ$_EVENT_MESSAGE', sort_list =>'ENQ_TIME', comment => 'CREATING AQ_EVENT_TABLE QUEUE TABLE', compatible=>'8.0.0');
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -24001 THEN NULL;
ELSE RAISE;
END IF;
END;
/
-- create the aq_event_table_q queue
BEGIN
dbms_aqadm.create_queue(queue_name => 'AQ_EVENT_TABLE_Q', queue_table => 'SYS.AQ_EVENT_TABLE', comment => 'CREATING AQ_EVENT_TABLE_Q QUEUE');
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -24006 THEN NULL;
ELSE RAISE;
END IF;
END;
/
-- start the queue aq_event_table_q
BEGIN
dbms_aqadm.start_queue(queue_name => 'SYS.AQ_EVENT_TABLE_Q');
END;
/
-- Create aq$_<QT>_P and aq$_<QT>_D for buffered queue tables
BEGIN
DBMS_AQADM_SYS.create_spilled_tables_iots;
END;
/
-- Create the propagation notification table and queue
BEGIN
BEGIN
dbms_aqadm.create_queue_table(
QUEUE_TABLE => 'SYS.AQ_PROP_TABLE',
QUEUE_PAYLOAD_TYPE => 'SYS.AQ$_NOTIFY_MSG',
MULTIPLE_CONSUMERS => TRUE,
COMMENT => 'Queue Table for Notification in AQ Prop. Scheduling');
dbms_aqadm_sys.create_queue(
QUEUE_NAME => 'SYS.AQ_PROP_NOTIFY',
QUEUE_TABLE => 'SYS.AQ_PROP_TABLE',
COMMENT => 'Queue for Notifying events in AQ Prop. Scheduling');
dbms_aqadm.start_queue(
QUEUE_NAME => 'SYS.AQ_PROP_NOTIFY',
ENQUEUE => TRUE, DEQUEUE => TRUE);
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -24001 THEN NULL;
ELSE RAISE;
END IF;
END;
END;
/
-- Create AQ Propagation program
BEGIN
BEGIN
DBMS_SCHEDULER.CREATE_PROGRAM(
program_name => 'AQ$_PROPAGATION_PROGRAM',
program_type => 'STORED_PROCEDURE',
program_action => 'SYS.DBMS_AQADM_SYS.aq$_propagation_procedure',
number_of_arguments => 10,
enabled => FALSE,
comments => 'AQ propagation program');
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -27477 THEN NULL;
ELSE RAISE;
END IF;
END;
DBMS_SCHEDULER.DEFINE_METADATA_ARGUMENT(
program_name => 'AQ$_PROPAGATION_PROGRAM',
metadata_attribute => 'job_owner',
argument_position => 1);
DBMS_SCHEDULER.DEFINE_METADATA_ARGUMENT(
program_name => 'AQ$_PROPAGATION_PROGRAM',
metadata_attribute => 'job_name',
argument_position => 2);
DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT(
program_name => 'AQ$_PROPAGATION_PROGRAM',
argument_position => 3,
argument_name => 'source_queue',
argument_type => 'VARCHAR2');
DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT(
program_name => 'AQ$_PROPAGATION_PROGRAM',
argument_position => 4,
argument_name => 'destination',
argument_type => 'VARCHAR2');
DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT(
program_name => 'AQ$_PROPAGATION_PROGRAM',
argument_position => 5,
argument_name => 'duration',
argument_type => 'NUMBER');
DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT(
program_name => 'AQ$_PROPAGATION_PROGRAM',
argument_position => 6,
argument_name => 'latency',
argument_type => 'NUMBER');
DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT(
program_name => 'AQ$_PROPAGATION_PROGRAM',
argument_position => 7,
argument_name => 'http_batch_size',
argument_type => 'NUMBER');
DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT(
program_name => 'AQ$_PROPAGATION_PROGRAM',
argument_position => 8,
argument_name => 'idle_timeout',
argument_type => 'NUMBER',
default_value => dbms_prvtaqip.DEFAULT_IDLE_TIMEOUT);
DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT(
program_name => 'AQ$_PROPAGATION_PROGRAM',
argument_position => 9,
argument_name => 'dequeue_timeout',
argument_type => 'NUMBER',
default_value => dbms_prvtaqip.DEFAULT_DEQUEUE_TIMEOUT);
DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT(
program_name => 'AQ$_PROPAGATION_PROGRAM',
argument_position => 10,
argument_name => 'trace_level',
argument_type => 'NUMBER',
default_value => dbms_prvtaqip.DEFAULT_TRACE_LEVEL);
DBMS_SCHEDULER.ENABLE('AQ$_PROPAGATION_PROGRAM');
END;
/
-- Create job class for propagation jobs
BEGIN
BEGIN
DBMS_SCHEDULER.CREATE_JOB_CLASS(
job_class_name => 'AQ$_PROPAGATION_JOB_CLASS',
comments => 'Default job class for AQ propagation jobs');
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -27477 THEN NULL;
ELSE RAISE;
END IF;
END;
END;
/
INSERT INTO noexp$(owner, name, obj_type)
VALUES ('SYS', 'AQ$_PROPAGATION_JOB_CLASS', 68)
/
-- Bug 7530052: Insert entries for AQ$_<queue table>_F from
-- ku_noexp_tab table. This is valid only during downgrade to this release
-- from a release greated than 11.2
DECLARE
CURSOR qt_cur IS
SELECT qt.schema, qt.name
FROM system.aq$_queue_tables qt;
ins_stmt VARCHAR2(500);
BASE_TABLE_DOES_NOT_EXIST exception;
PRAGMA EXCEPTION_INIT(BASE_TABLE_DOES_NOT_EXIST, -942);
BEGIN
FOR qt_rec IN qt_cur LOOP
BEGIN
-- Add _F view into ku_noexp_tab table only if entry not already there
ins_stmt := 'INSERT INTO sys.ku_noexp_tab ( obj_type, schema, name )' ||
' SELECT ''VIEW'', :1, :2 FROM dual ' ||
' WHERE NOT EXISTS ' ||
' (SELECT 1 FROM sys.ku_noexp_tab ' ||
' WHERE schema = :3 AND name = :4 AND obj_type = ''VIEW'')';
EXECUTE IMMEDIATE ins_stmt USING
qt_rec.schema, 'AQ$_'||qt_rec.name||'_F', qt_rec.schema,
'AQ$_'||qt_rec.name||'_F';
EXCEPTION
WHEN BASE_TABLE_DOES_NOT_EXIST THEN
NULL;
WHEN OTHERS THEN
RAISE;
END;
END LOOP;
END;
/
COMMIT
/
--
-- _CDB view support for V$AQ1
--
create or replace view "_DBA_QUEUE_STATS1" as
select q.name QUEUE_NAME, q.EVENTID, q.USAGE, t.SCHEMA, t.name TABLE_NAME,
t.FLAGS, t.TIMEZONE
from system.aq$_queues q, system.aq$_queue_tables t
where q.table_objno = t.objno
/
execute CDBView.create_cdbview(false, 'SYS', '_DBA_QUEUE_STATS1', '_CDB_QUEUE_STATS1')
/
--
-- _CDB view support for V$RULE
--
create or replace view "_DBA_RULES1" as
select u.name rule_owner, o.name rule_name, r.condition, o.obj#
from sys.rule$ r, sys.obj$ o, sys.user$ u
where o.obj# = r.obj# and u.user# = o.owner#
/
execute CDBView.create_cdbview(false, 'SYS', '_DBA_RULES1', '_CDB_RULES1')
/
@?/rdbms/admin/sqlsessend.sql
OHA YOOOO