修复方法:不能直接修改子计划的SUB_PLAN属性,需要先删除该plan,然后重新创建plan语句中不带SUB_PLAN子句。SQL示例:先执行 DROP PLAN plan_name; 然后 CREATE PLAN plan_name ... (不带SUB_PLAN);远程处理方案:使用DBMS_RESOURCE_MANAGER_PRIVS包的ADMINISTER_RESOURCE_MANAGER权限,通过PL/SQL块远程连接目标数据库执行删除和重建plan的操作,避免本地登录限制。
来源1
ORA-56700: plan string is a subplan, SUB_PLAN attribute cannot be modified. Cause: User attempted to modify SUB_PLAN attribute of a subplan. Action: Delete the plan and recreate it without the SUB_PLAN clause.
来源2
要修改子计划的SUB_PLAN属性,会报错ORA-56700,因为子计划的SUB_PLAN属性是不可修改的。解决办法是删除这个plan,然后重新创建plan语句,但新语句中不要带SUB_PLAN子句。比如:先drop plan test_subplan; 再create plan test_subplan 'CPU_P1' 100;
来源3
远程修复脚本:使用数据库链接或JDBC连接,执行以下PL/SQL:BEGIN DBMS_RESOURCE_MANAGER.DROP_PLAN('your_plan_name'); DBMS_RESOURCE_MANAGER.CREATE_PLAN('your_plan_name', 'description'); END; / 确保有ADMINISTER_RESOURCE_MANAGER权限。
来源4
在子计划中SUB_PLAN属性无法更改,必须drop plan plan_name; 然后create plan plan_name 'directive1' 50, 'directive2' 50; 不指定subplan。
来源5
远程方案:通过dblink创建远程连接,@remote_db执行drop和create plan语句。例:BEGIN EXECUTE IMMEDIATE 'DROP PLAN subplan1@dblink' AT dblink; END;
来源6
错误ORA-56700表示plan是子计划,无法改SUB_PLAN。处理:1. 查询DBA_RSRC_PLANS确认是subplan。2. DROP PLAN plan_name; 3. CREATE PLAN plan_name ... 无SUB_PLAN。
来源7
FAQ:
Q: 为什么子计划SUB_PLAN不能改?
A: Oracle设计如此,子计划属性固定,需重建。
Q: 没有权限怎么远程改?
A: 用有权限的账户通过代理用户或dblink执行。
Q: drop plan后数据丢吗?
A: 只删计划定义,消费者组等不受影响,可重建。
Q: 怎么查所有子计划?
A: SELECT plan, sub_plan FROM dba_rsrc_plans WHERE sub_plan IS NOT NULL;