Oracle的文档上给出了流环境的配置过程,但是没有给出如何才能彻底清除流环境。
这篇文章介绍一下流环境中传播环境的清除过程。
Oracle9i流环境清除(一):http://yangtingkun.itpub.net/post/468/414098
首先确保所有于PROPAGATION相关的JOB已经停止,而且流应用过程已经根据上一篇的文章进行了清除。
检查一下系统中的传播配置:
SQL> SELECT PROPAGATION_NAME, RULE_SET_NAME FROM ALL_PROPAGATION;
PROPAGATION_NAME RULE_SET_NAME
------------------------------ ------------------------------
DATA_TO_REPORT RULESET$_144
SQL> SELECT RULE_SET_NAME, RULE_SET_EVAL_CONTEXT_OWNER, RULE_SET_EVAL_CONTEXT_NAME FROM USER_RULE_SETS
2 WHERE RULE_SET_NAME = 'RULESET$_144';
RULE_SET_NAME RULE_SET_EVAL_CONTEXT_OWNER RULE_SET_EVAL_CONTEXT_NAME
------------------------------ ------------------------------ ------------------------------
RULESET$_144 SYS STREAMS$_EVALUATION_CONTEXT
SQL> SELECT RULE_NAME FROM USER_RULES;
RULE_NAME
------------------------------
CAT_AREA_QUALITY_DEFINE143
CAT_AREA_QUALITY_DEFINE166
CAT_BUYER146
.
.
.
USER_DISTRICT165
USER_DISTRICT188
44 rows selected.
SQL> SELECT STREAMS_NAME, RULE_NAME FROM SYS.STREAMS$_RULES WHERE STREAMS_NAME = 'DATA_TO_REPORT';
STREAMS_NAME RULE_NAME
------------------------------ ------------------------------
DATA_TO_REPORT CAT_AREA_QUALITY_DEFINE143
DATA_TO_REPORT CAT_BUYER_DISTRICT145
DATA_TO_REPORT CAT_BUYER146
.
.
.
DATA_TO_REPORT PLT_PLAT164
DATA_TO_REPORT USER_DISTRICT165
22 rows selected.
有了清除APPLY的经验,PROPAGATION的清除就比较简单了。
首先使用DBMS_STREAMS_ADM包来去掉流环境中配置的PROPAGATION规则:
SQL> SELECT 'EXEC DBMS_STREAMS_ADM.REMOVE_RULE(''' || RULE_NAME || ''', ''PROPAGATION'', ''DATA_TO_REPORT'')'
2 FROM SYS.STREAMS$_RULES
3 WHERE STREAMS_NAME = 'DATA_TO_REPORT';
'EXECDBMS_STREAMS_ADM.REMOVE_RULE('''||RULE_NAME||''',''PROPAGATION'',''DATA_TO_REPORT'')'
--------------------------------------------------------------------------------------------
IXDBA.NET技术社区
EXEC DBMS_STREAMS_ADM.REMOVE_RULE('CAT_AREA_QUALITY_DEFINE143', 'PROPAGATION', 'DATA_TO_REPORT')
EXEC DBMS_STREAMS_ADM.REMOVE_RULE('CAT_BUYER_DISTRICT145', 'PROPAGATION', 'DATA_TO_REPORT')
.
.
.
EXEC DBMS_STREAMS_ADM.REMOVE_RULE('PLT_PLAT164', 'PROPAGATION', 'DATA_TO_REPORT')
EXEC DBMS_STREAMS_ADM.REMOVE_RULE('USER_DISTRICT165', 'PROPAGATION', 'DATA_TO_REPORT')
22 rows selected.
SQL> EXEC DBMS_STREAMS_ADM.REMOVE_RULE('CAT_AREA_QUALITY_DEFINE143', 'PROPAGATION', 'DATA_TO_REPORT')
PL/SQL procedure successfully completed.
利用SQL生成脚本,然后通过REMOVE_RULE过程进行删除。这里需要注意,REMOVE_RULE过程中的RULE_TYPE类型应该为PROPAGATION,而不是文档上给出的PROPAGATE。
确认所有流配置的PROPAGATION规则已经被清除掉了。
SQL> SELECT STREAMS_NAME, RULE_NAME FROM SYS.STREAMS$_RULES WHERE STREAMS_NAME = 'DATA_TO_REPORT';
no rows selected
下面清除掉PROPAGATION:
SQL> EXEC DBMS_PROPAGATION_ADM.DROP_PROPAGATION('DATA_TO_REPORT')
PL/SQL procedure successfully completed.
SQL> SELECT * FROM ALL_PROPAGATION;