问题描述
源库pdb中可能存在目标库cdb中没有的c##用户,需要进行删除操作,怎么做?
专家解答
注意:一定要当即处理,如果留到后续处理需要变更窗口停库影响业务连续性。
处理方法:
(1)在目标库cdb和refresh pdb中找出多余的c##用户(有多少要处理多少)
(2)alter session set container=enmo_newdb;
drop user c##user1;
如果顺利,这里就直接删掉了,如果失败执行后续步骤(3)
(3)删除pdb上下文组件(context component)
cd $ORACLE_HOME/rdbms/admin
$ORACLE_HOME/perl/bin/perl catcon.pl -n 1 -c 'enmo_newdb' -e -b catnoctx_pdbs -d $ORACLE_HOME/ctx/admin catnoctx.sql
然后再drop user c##user1;
如果顺序,c##user1则被删除。如果失败遇到以下错误:
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-65047: Object SYS.OJDS_CONTEXT is invalid or compiled with errors in root.
执行后续步骤(4)
(4)在CDB中创建OJDS对象(如果存在则需要清理后重建),OJDS全称是Oracle Java Directory Service组件
(4.1)清理步骤:
alter session set "_ORACLE_SCRIPT"=true;
drop user OJVMSYS cascade;
drop synonym ojds$node_number$;
drop synonym ojds$bindings$;
drop synonym ojds$inode$;
drop synonym ojds$attributes$;
drop synonym ojds$refaddr$;
drop synonym ojds$permissions$;
drop synonym ojds$shared$obj$seq$;
drop synonym ojds$shared$obj$;
drop public synonym ojds_namespace;
drop package ojds_namespace;
drop trigger OJDS$ROLE_TRIGGER$;
delete from duc$ where OWNER = 'SYS' and PACK = 'OJDS_CONTEXT' and PROC = 'USER_DROPPED';
drop package ojds_context;
commit;
alter session set "_ORACLE_SCRIPT"=false;
(4.2)创建步骤:
alter session set "_ORACLE_SCRIPT"=true;
grant resource,unlimited tablespace to OJVMSYS identified by XXXX;
alter user OJVMSYS account lock password expire default tablespace sysaux;
alter session set "_ORACLE_SCRIPT"=false;
@?/javavm/install/jvm_ojds.sql
(5)重启一个节点的pdb(主备模式的话,可以重启没有业务的那个节点pdb)
alter pluggable database enmo_newdb close immediate;
alter pluggable database enmo_newdb open;
(6)删除c##user1用户
alter session set container=enmo_newdb;
drop user c##user1;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




