oracle 命名空间详解.docx

上传人:b****6 文档编号:5956402 上传时间:2023-01-02 格式:DOCX 页数:16 大小:22.20KB
下载 相关 举报
oracle 命名空间详解.docx_第1页
第1页 / 共16页
oracle 命名空间详解.docx_第2页
第2页 / 共16页
oracle 命名空间详解.docx_第3页
第3页 / 共16页
oracle 命名空间详解.docx_第4页
第4页 / 共16页
oracle 命名空间详解.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

oracle 命名空间详解.docx

《oracle 命名空间详解.docx》由会员分享,可在线阅读,更多相关《oracle 命名空间详解.docx(16页珍藏版)》请在冰豆网上搜索。

oracle 命名空间详解.docx

oracle命名空间详解

一.初识Namespace

           Oracle通过namespace来管理schemaobject的名字,关于Namespace的定义,在官网文档上没有找到一个详细的定义,在网上搜到一些相关信息:

SchemaObjectNamespaces

           Anamespacedefinesagroupofobjecttypes,withinwhichallnamesmustbeuniquelyidentified—byschemaandname.Objectsindifferentnamespacescansharethesamename.

           TheOracledatabaseusesnamespacestoresolveschemaobjectreferences.WhenyourefertoanobjectinaSQLstatement,OracleconsidersthecontextoftheSQLstatementandlocatestheobjectintheappropriatenamespace.Afterlocatingtheobject,Oracleperformstheoperationspecifiedbythestatementontheobject.Ifthenamedobjectcannotbefoundintheappropriatenamespace,thenOraclereturnsanerror.

           Becausetablesandviewsareinthesamenamespace,atableandaviewinthesameschemacannothavethesamename.However,tablesandindexesareindifferentnamespaces.Therefore,atableandanindexinthesameschemacanhavethesamename.

           Eachschemainthedatabasehasitsownnamespacesfortheobjectsitcontains.Thismeans,forexample,thattwotablesindifferentschemasareindifferentnamespacesandcanhavethesamename.

--以上解释提到了几点:

           1.每个用户都有自己对应的namespace来保存自己的对象

           2.表和视图存放在同一个namespace,所以对于同一个用户的表和视图不能重名,但是表和索引是存放在不同的namespace,所以可以重名。

           开始时,我们提到Oracle通过schema和name来保证namespace中对象的唯一性。

在obj$字典里owner#对应用户的ID。

通过如下SQL,我们可以查看他们之间的对应关系:

           

/*Formattedon2011/7/2115:

41:

26(QP5v5.163.1008.3004)*/

SELECTusername,user_id

 FROMdba_users

WHEREuser_idIN(SELECTDISTINCTowner#FROMobj$);

USERNAME                    USER_ID

-----------------------------------

SYS                               0

SYSTEM                            5

DBSNMP                           24

SYSMAN                           58

DAVE                             61

OUTLN                            11

MDSYS                            46

ORDSYS                           43

CTXSYS                           36

EXFSYS                           34

DMSYS                            35

WMSYS                            25

XDB                              38

ORDPLUGINS                       44

SI_INFORMTN_SCHEMA               45

OLAPSYS                          47

SCOTT                            54

ORACLE_OCM                       55

TSMSYS                           21

19rowsselected.

 

一个小示例验证以上结论:

SYS@anqing2(rac2)>createtableanqing(idnumber);

Tablecreated.

SYS@anqing2(rac2)>createindexanqingonanqing(id);

Indexcreated.

SYS@anqing2(rac2)>createviewanqingasselect*fromanqing;

createviewanqingasselect*fromanqing

           *

ERRORatline1:

ORA-00955:

nameisalreadyusedbyanexistingobject

 

以下类型的对象使用同一个namespace:

•Tables

•Views

•Sequences

•Privatesynonyms

•Stand-aloneprocedures

•Stand-alonestoredfunctions

•Packages

•Materializedviews

•User-definedtypes

 

如下类型的对象使用自己的namespace:

•Indexes

•Constraints

•Clusters

•Databasetriggers

•Privatedatabaselinks

•Dimensions

 

以下Nonschemaobjects使用自己的namespace:

•Userroles

•Publicsynonyms

•Publicdatabaselinks

•Tablespaces

•Profiles

•Parameterfiles(PFILEs)andserverparameterfiles(SPFILEs)

以上信息随Oracle版本不同,可能有出入。

 

二.深入研究Namespace

           先执行如下SQL,查看每个namespace对应名称和它所包含的对象的个数:

/*Formattedon2011/7/2114:

24:

47(QP5v5.163.1008.3004)*/

 SELECTnamespace,object_type,COUNT(*)

   FROM(SELECTnamespace,

                DECODE(o.type#,

                       0,'NEXTOBJECT',

                       1,'INDEX',

                       2,'TABLE',

                        3,'CLUSTER',

                       4,'VIEW',

                       5,'SYNONYM',

                       6,'SEQUENCE',

                       7,'PROCEDURE',

                       8,'FUNCTION',

                       9,'PACKAGE',

                       11,'PACKAGEBODY',

                       12,'TRIGGER',

                       13,'TYPE',

                       14,'TYPEBODY',

                       19,'TABLEPARTITION',

                       20,'INDEXPARTITION',

                       21,'LOB',

                       22,'LIBRARY',

                       23,'DIRECTORY',

                       24,'QUEUE',

                       28,'JAVASOURCE',

                       29,'JAVACLASS',

                        30,'JAVARESOURCE',

                       32,'INDEXTYPE',

                       33,'OPERATOR',

                       34,'TABLESUBPARTITION',

                       35,'INDEXSUBPARTITION',

                       40,'LOBPARTITION',

                       41,'LOBSUBPARTITION',

                       42,'MATERIALIZEDVIEW',

                       43,'DIMENSION',

                       44,'CONTEXT',

                       46,'RULESET',

                        47,'RESOURCEPLAN',

                       48,'CONSUMERGROUP',

                       51,'SUBSCRIPTION',

                       52,'LOCATION',

                       55,'XMLSCHEMA',

                       56,'JAVADATA',

                        57,'SECURITYPROFILE',

                       59,'RULE',

                       62,'EVALUATIONCONTEXT',

                       'UNDEFINED')

                  object_type

           FROMsys.obj$o)

GROUPBYnamespace,object_type;

NAMESPACEOBJECT_TYPE         COUNT(*)

--------------------------------------

       4INDEX                   2253

       2TYPEBODY                175

      51UNDEFINED                  6

      21CONTEXT                    5

        9DIRECTORY                  6

       1SYNONYM                20122

       1PACKAGE                  859

       1VIEW                    3684

       1PROCEDURE                 98

       3TRIGGER                  164

      38EVALUATIONCONTEXT        12

       1SEQUENCE                 138

       2PACKAGEBODY             804

       1INDEXTYPE                 10

       1TYPE                    1953

      24RESOURCEPLAN              3

       4INDEXPARTITION          144

      25XMLSCHEMA                25

       1TABLE                   1619

       8LOB                      541

      10QUEUE                     23

      23RULESET                  15

       8LOBPARTITION              1

      36RULE                       4

       1JAVACLASS             16450

       1NEXTOBJECT                1

       1FUNCTION                 268

       1UNDEFINED                660

       1LIBRARY                  154

       32JAVADATA                298

       5CLUSTER                   10

      24CONSUMERGROUP             5

       1TABLEPARTITION          124

       1OPERATOR                  57

      14JAVARESOURCE            775

35rowsselected.

 

           通过这个查询结果,我们可以看到一些对象使用相同的namespace。

第一列的数字代表的就是namespace。

关于type#的定义,在Oracle的obj$基表创建的定义SQL有明确的说明。

 

           先在$ORACLE_HOME/RDBMS/admin/bin下查找sql.bsq脚本。

sql.bsq主要记录了ORACLE中的系统字典表的定义,比如过tab$,col$,obj$等,通过查询这个文件可以知道数据字典表的定义.在sql.bsq里面保存了相关的脚本信息,其中就有dcore.bsq脚本,在该脚本里就可以找到obj$表的定义SQL:

 

/*Formattedon2011/7/2114:

42:

51(QP5v5.163.1008.3004)*/

CREATETABLEobj$                                          /*objecttable*/

  obj#      NUMBERNOTNULL,                            /*objectnumber*/

  dataobj#  NUMBER,                          /*datalayerobjectnumber*/

  owner#    NUMBERNOTNULL,                        /*ownerusernumber*/

  name      VARCHAR2("M_IDEN")notnull,                 /*objectname*/

namespace   numbernotnull,        /*namespaceofobject(seeKQD.H):

*/

/*1=TABLE/PROCEDURE/TYPE,2=BODY,3=TRIGGER,4=INDEX,5=CLUSTER,*/

                                                /*8=LOB,9=DIRECTORY,*/

 /*10=QUEUE,11=REPLICATIONOBJECTGROUP,12=REPLICATIONPROPAGATOR,*/

                                    /*13=JAVASOURCE,14=JAVARESOURCE*/

                                               /*58=(DataMining)MODEL*/

 subname      varchar2("M_IDEN"),              /*subordinatetothename*/

 type#        numbernotnull,                /*objecttype(seeKQD.H):

*/

 /*1=INDEX,2=TABLE,3=CLUSTER,4=VIEW,5=SYNONYM,6=SEQUENCE,*/

            /*7=PROCEDURE,8=FUNCTION,9=PACKAGE,10=NON-EXISTENT,*/

             /*11=PACKAGEBODY,12=TRIGGER,13=TYPE,14=TYPEBODY,*/

     /*19=TABLEPARTITION,20=INDEXPARTITION,21=LOB,22=LIBRARY,*/

                                            /*23=DIRECTORY,24=QUEUE,*/

   /*25=IOT,26=REPLICATIONOBJECTGROUP,27=REPLICATIONPROPAGATOR,*/

   /*28=JAVASOURCE,29=JAVACLASS,30=JAVARESOURCE,31=JAVAJAR,*/

                /*32=INDEXTYPE,33=OPERATOR,34=TABLESUBPARTITION,*/

                                                /*35=INDEXSUBPARTITION*/

                                               /*82=(DataMining)MODEL*/

                               /*92=OLAPCUBEDIMENSION, 93=OLAPCUBE*/

                  /*94=OLAPMEASUREFOLDER,95=OLAPCUBEBUILDPROCESS*/

 ctime        datenotnull,                      /*objectcreationtime*/

 mtime        datenotnull,                     /*DDLmodificationtime*/

 stime        datenotnull,         /*specificationtimestamp(version)*/

 status       numbernotnull,           /*statusofobject(seeKQD.H):

*/

                                    /*1=VALID/AUTHORIZEDWITHOUTERRORS,*/

                        /*2=VALID/AUTHORIZEDWITHAUTHORIZATIONERRORS,*/

                           /*3=VALID/AUTHORIZEDWITHCOMPILATIONERRORS,*/

                       /*4

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1