[20180328]不要在sys建立用户对象.txt
--//好几年前遇到的问题,开发安装UTL_DBWS在linux下遇到问题,最后选择winows下安装.
--//随着业务增加,无法支撑,需要数据库组迁移到linux下,也就是我当时的安装笔记:
--//http://blog.itpub.net/267265/viewspace-2099501/
--//但是在迁移中遇到一件我苦笑不得的事情,开发把整个应用建立在sys用户下,无语.好在应用不大,很容易移植.
--//实际上不要在sys下建立任何用对象.通过一个简单的例子加强印象.
1.环境:
SYS@book> @ &r/ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
SYS@book> select count(*) from dba_objects where status = 'INVALID';
COUNT(*)
----------
1
--//仅仅有1个无效对象.
SYS@book> create table SYS.SYSTEM (id number);
Table created.
SYS@book> select count(*) from dba_objects where status = 'INVALID';
COUNT(*)
----------
176
--//建立一个特殊的表system,就导致无效对象增加到176.
--//重新编译看看:
SYS@book> @ /u01/app/oracle/product/11.2.0.4/dbhome_1/rdbms/admin/utlrp.sql
SYS@book> select count(*) from dba_objects where status = 'INVALID';
COUNT(*)
----------
39
--//依旧有39-1个.
SYS@book> drop table sys.system purge ;
Table dropped.
SYS@book> @ /u01/app/oracle/product/11.2.0.4/dbhome_1/rdbms/admin/utlrp.sql
...
SYS@book> select count(*) from dba_objects where status = 'INVALID';
COUNT(*)
----------
1
--//实际上建立在sys下还有许多问题,比如一些oracle特性无效,数据建立在system表空间等等.
--//总之下次拿这个例子来吓唬一下开发...