首页 > Linux操作系统 > Linux操作系统 > Oracle9i流环境清除(二)
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'')'
--------------------------------------------------------------------------------------------
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;
no rows selected
然后清除掉已经没有作用的RULE_SET:RULESET$_144。
SQL> EXEC DBMS_RULE_ADM.DROP_RULE_SET('RULESET$_144', TRUE)
PL/SQL procedure successfully completed.
SQL> SELECT * FROM USER_RULE_SETS WHERE RULE_SET_NAME = 'RULESET$_144';
no rows selected
检查RULE,发现规则并没有被清除掉,这时候可以通过关联SYS.STREAMS$_RULES将已经没有使用的RULE删除掉,不过为了保险起见,可以等到删除CAPTURE信息的时候,再将所有的RULE一起删除掉。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-69506/,如需转载,请注明出处,否则将追究法律责任。