我本地以SYSDBA的身份登录了ORACLE,
更新了user$这张表具体某个用户的NAME字段,就是改名
但发现改了之后,新用户名可以登录了,对应的附属对象也已存在,
但原用户名还是可以正常登录;
这是为什么?

解决方案 »

  1.   

    正式环境不建议通过此种非常规方式来达到更名的效果。
    最好通过建新用户、exp/imp、删除老用户来完成。测试环境可试试重启数据库再确认一下。
      

  2.   

    alter system flush shared_pool;
    试试,手动修改数据字典表的操作实在是……不推荐。
      

  3.   

    我本地以SYSDBA的身份登录了ORACLE,
    ================================
    本地以 sysdba 身份登陆 sqlplus,根本就不检测提供的 username/password 部分,而是以当前操作系统用户的身份登陆,只要当前的操作系统用户属于dba(linux)或 ora_dba (windows) 组,就可以以 sysdba 身份登陆。可以试验一下输入任意的用户名密码,甚至不存在的用户名。然后用 show user 命令查看当前登录用户,应该都是 sys。
      

  4.   

    直接修改user$,需要刷新shared pool后生效 ,然后再测试,你这样修改,后果自负
      

  5.   

    还没有真正的生效,commit一下。
      

  6.   

    网上查了下刷新shared pool的方法,可以了,追问下,这样的原理是什么?
      

  7.   


    原理大概是这样,因为数据字典对象全部都是在数据库打开的时候读入到shared pool内存池。你修改了数据字典但是并不会刷新shared pool内存池中的对象,所以就需要手工刷新。
      

  8.   

    ALTER SYSTEM FLUSH SHARED_POOL;