友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
富士康小说网 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

SQL 21日自学通(V3.0)(PDF格式)-第44部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!



为权威的信息 



   你可以使用 USER_SYS_PRIVS   来查看系统的权限       切记   系统权限是指你对于特定 



数据库的整体权限  这些权限并不针对任何一个对象或对象集 



INPUT 



   SQL》  SELECT  *    FROM  USER_SYS_PRIVS; 



OUTPUT 



         USERNAME         PRIVILEGE              ADM 



         JSMITH           UNLIMITED    TABLESPACE NO 



         JSMITH           CREATE    SESSION      NO 



分析 



   JSMITH 已经被赋予了两种系统级权限  除了获准的任务以外               请注意第二部分      创 



建会话  CREATE  SESSION  它包括在 ORACLE 的标准任务 CONNECT       这将会在下边 



的例子中提到 



   你可以使用 USER_ROLE_PRIVS  视图来查看你在数据库中被允许的任务信息              数据库 



任务与系统任务非常相似         当任务为权限所许可之后        可以将任务许可给该用户  切记 



在任务中可能会有对象级权限 



INPUT/OUTPUT 



   SQL》 SELECT * FROM USER_ROLE_PRIVS; 



     USERNAME    GRANTED_ROLE   ADM    DEF    OS_ 



     JSMITH      CONNECT        NO     YES    NO 



     JSMITH      RESOURCE       NO     YES    NO 



分析 



   USER_ROLE_PRIVS 视图可以让你查看允许你执行的任务            在早些时候曾经说过 



CONNECT  包含着系统权限 CREATE  SESSION   与其它的权限一样  RESOURCE  也有为 



数不多的权限  你可以查看一下给予用户的缺省任务               用户不能将这些任务再给予其它的 



用户  这对于 ADM  来说非常重要       而且该任务也不能为操作系统所允许            参见第 12  天 



的  数据库安全 



你可以访问哪些东西 



   现在你也许会问      我可以访问哪些内容呢        我已经知道了我是谁  我也知道了我的权 



                                                             332 


…………………………………………………………Page 333……………………………………………………………

SQL 21  日自学通(V1。0)                                         翻译人   笨猪 



限  但是我在哪里可以将到我的数据  你可以通常查看在数据字典中的不同的可用用户视 



图来回答这个问题  这一部分的内容对于一些视图来说很有帮助 



   也许最为基本的用户视图就是 USER_CATALOG            了  它是一个表  视图      同义字和当 



前所有的次序的简明目录 



INPUT 



   SQL》 SELECT * FROM USER_CATALOG; 



OUTPUT 



       TABLE_NAME             TABLE_TYPE 



       MAGAZINE_TBL           TABLE 



       MAG_COUNTER            SEQUENCE 



       MAG_VIEW               VIEW 



       SPORTS                 TABLE 



分析 



   这个例子中给出了为你所有的所有表和相关对象的清单                    出于简明的目的你也可以使 



用 USER_CATALOG 中的公共同义字  那就是         试一下 SELECT * FROM CAT 



   另外一个有用的视图是 ALL_CATALOG          它可以让你看到其他人拥有的表 



INPUT/OUTPUT 



   SQL》 SELECT * FROM ALL_CATALOG; 



       OWNER            TABLE_NAME       TABLE_TYPE 



       SYS              DUAL             TABLE 



       PUBLIC           DUAL              SYNONYM 



       JSMITH           MAGAZINE_TBL     TABLE 



       JSMITH           MAG_COUNTER       SEQUENCE 



       JSMITH           MAG_VIEW         VIEW 



       JSMITH           SPORTS           TABLE 



       VJOHNSON         TEST1            TABLE 



       VJOHNSON         HOBBIES          TABLE 



       VJOHNSON         CLASSES          TABLE 



       VJOHNSON         STUDENTS         VIEW 



分析 



   作为用户你可以会拥有比上表更多的对象               系统表会加入许多的表          我们可以很容易 



在将这个清单简化  ALL_CATALOG 视图与 the  USER_CATALOG  视图一样  但是它显示 



给你所有的你可以访问的表  视图           顺序    和同义字 



                                                                  333 


…………………………………………………………Page 334……………………………………………………………

SQL 21  日自学通(V1。0)                                                   翻译人    笨猪 



INPUT 



    SQL》 SELECT SUBSTR(OBJECT_TYPE;1;15) OBJECT_TYPE; 



        2                  SUBSTR(OBJECT_NAME;1;30)  OBJECT_NAME; 



        3                  CREATED; 



        4                  STATUS 



        5    FROM  USER_OBJECTS 



        6    ORDER  BY  1; 



OUTPUT 



        OBJECT_TYPE      OBJECT_NAME        CREATED      STATUS 



        INDEX           MAGAZINE_INX        14…MAR…97    VALID 



        INDEX            SPORTS_INX         14…MAR…97    VALID 



        INDEX           HOBBY_INX           14…MAR…97    VALID 



        TABLE           MAGAZINE_TBL        01…MAR…97    VALID 



        TABLE            SPORTS             14…MAR…97    VALID 



        TABLE           HOBBY_TBL           16…MAR…97    VALID 



分析 



    你可以使用 USER_OBJECTS         视图来获得关于用户所拥有对象的通用信息如名字                         类 



型  数据的创建        数据的更新以及对象的状态  在上一个查询中                      我们对每一个数据对象 



的创建进行了确认 



INPUT/OUTPUT 



    SQL》 SELECT TABLE_NAME; INITIAL_EXTENT; NEXT_EXTENT 



        2    FROM  USER_TABLES; 



      TABLE_NAME           INITIAL_EXTENT      NEXT EXTENT 



      MAGAZINE_TBL         1048576             540672 



      SPORTS               114688              114688 



分析 



    从 USER_TABLES    中可以选择非常多的有用信息  就看你想要知道什么                         大部分的数 



据都是由存储信息组成 



注   注意最初的和最大的输出值是字节                  在一些解释器中你可能会看到在列之间加以空格 



以更具可读性  见第 19 天的  事务处理 SQL                和第 20 天的     SQL*PLUS 



    ALL_TABLES  与 USER_TABLES     的关系与 ALL_CATALOG 和 USER_CATALOG  关系 



                                                                             334 


…………………………………………………………Page 335……………………………………………………………

SQL 21  日自学通(V1。0)                                                  翻译人    笨猪 



一样    也就是说  ALL_TABLES       可以让你查看所有的你可以访问的表  而不只是你所拥有 



的表  ALL_TABLES  也可以包括在其它用户目录中存在的表 



INPUT/OUTPUT 



    SQL》 SELECT SUBSTR(OWNER;1;15) OWNER; 



        2                  SUBSTR(TABLE_NAME;1;25)  TABLE_NAME; 



        3                  SUBSTR(TABLESPACE_NAME;1;13)  TABLESPACE 



        4    FROM  ALL_TABLES; 



          OWNER         TABLE_NAME         TABLESPACE 



          SYS           DUAL               SYSTEM 



          JSMITH        MAGAZINE_TBL       USERS 



          SMITH         SPORTS             USERS 



         VJOHNSON       TEST1              USERS 



         VJOHNSON       HOBBIES            USERS 



         VJOHNSON       CLASSES            USERS 



分析 



    你又一次选择了只是你想得到的信息                  在 ALL_TABLES     的许多附加列中也包含着有 



用的信息 



    作为一个数据库用户           你可以通过查询 USER_SEGMENTS            视图来监视你的表和索引 



的增长情况       如同它的名字一样           USER_SEGMENTS    给你了关于每个段的信息              如存储 



信息等等      一个段可以会由一个表  索引  ROLLBACK  簇                 临时表或缓存组成           下边的 



例子告诉了你如何从这个视图中获得有用的信息 



INPUT/OUTPUT 



    SQL》 SELECT SUBSTR(SEGMENT_NAME;1;30) SEGMENT_NAME; 



        2                  SUBSTR(SEGMENT_TYPE;1;8)  SEG_TYPE; 



        3                  SUBSTR(TABLESPACE_NAME;1;25)  TABLESPACE_NAME; 



        4                  BYTES;  EXTENTS 



        5    FROM  USER_SEGMENTS 



        6    ORDER  BY  EXTENTS  DESC 



    SEGMENT_NAME        SEG_TYPE      TABLESPACE_NAME      BYTES    EXTENTS 



    MAGAZINE_TBL        TABLE         USERS                4292608   7 



    SPORTS_INX          INDEX         USERS                573440   4 



                                                                            335 


…………………………………………………………Page 336……………………………………………………………

SQL 21  日自学通(V1。0)                                             翻译人    笨猪 



    SPORTS            TABLE        USERS               344064  2 



    MAGAZINE_INX      INDEX        USERS               1589248 1 



分析 



    上边的输出是按 EXTENTS        递减的原则进行了排序的           段增长最多的将会出现于第一 



个行中 



    现在你已经知道了都有哪些表是你可以访问的                   你也许会想知道对于每个表你都可以 



做什么    你的查询是否受限         或你有权限更新表的内容吗            ALL_TAB_PRIVS  视图可以告 



诉你作为一个数据库用户你在每一个可以使用的表中的权限 



INPUT/OUTPUT 



    SQL》 SELECT SUBSTR(TABLE_SCHEMA;1;10) OWNER; 



        2                  SUBSTR(TABLE_NAME;1;25)  TABLE_NAME; 



        3                  PRIVILEGE 



        4    FROM  ALL_TAB_PRIVS; 



       OWNER       TABLE_NAME       PRIVILEGE 



       SYS         DUAL              SELECT 



       JSMITH      MAGAZINE_TBL      SELECT 



       JSMITH      MAGAZINE_TBL     INSERT 



       JSMITH      MAGAZINE_TBL     UPDATE 



       JSMITH      MAGAZINE_TBL     DELETE 



       JSMITH      SPORTS            SELECT 



       JSMITH      SPORTS           INSERT 



       JSMITH      SPORTS           UPDATE 



       JSMITH      SPORTS           DELETE 



       VJOHNSON    TEST1             SELECT 



       VJOHNSON    TEST1            INSERT 



       VJOHNSON    TEST1            UPDATE 



       VJOHNSON    TEST1            DELETE 



       VJOHNSON    HOBBIES           SELECT 



       VJOHNSON    CLASSES           SELECT 



分析 



    如你所见     你可以操纵在一些表中的数据             然后对于其它的一些表你则只拥有只读访 



问权限 



    当你创建一个对象的时候  如果你不想把它存于默认的地点你通常需要知道你可以把 



                                                                      336 


…………………………………………………………Page 337……………………………………………………………

SQL 21  日自学通(V1。0)                                              翻译人   笨猪 



它存放于何处  ORACLE       的表空间的分散的  它们中的每一个都可以存储对象                     每一个表 



空间都被分配了一定数据的磁盘空间  这要根据你的系统的可用性而定                            磁盘空间通常是 



从数据管理员处获得的 



    下面的查询是从一个叫 USER_TABLESPACES           的视图中进行查询的  它会给出你访问 



的表空间  分配对象的初始大小和它们的下一个大小以及它们的状态 



INPUT/OUTPUT 



    SQL》 SELECT SUBSTR(TABLESPACE_NAME;1;30) TABLESPACE_NAME; 



        2                  INITIAL_EXTENT; 



        3                  NEXT_EXTENT; 



        4                  PCT_INCREASE; 



        5                  STATUS 



        6    FROM  USER_TABLESPACES 



TABLESPACE_NAME     INITIAL_EXTENT   NEXT_EXTENT     PCT_INCREASE    STATUS 



SYSTEM              32768             16384          1               ONLINE 



RBS                 2097152          2097152         1               ONLINE 



TEMP                114688            114688         1               ONLINE 



TOOLS               32768             16384          1               ONLINE 



USERS               32768             16384          1               ONLINE 



分析 



    这在当你创建一个需要存储空间的对象如表和索引时                      这个查询是非常有用的           当表 



或查询建立以后        如果没有在 DDL      中指定它的初始和后续存储参数  这些表和索引会采 



用这些数值的默认值  相同的概念也可以应用于 PCT  INCREASE                   它是一个 ORACLE  参 



数用以指定当一个对象的大小在增长时为它分配空间的百分比                          如果当表和索引在创建是 



没有指定这个数值         数据库服务程序会为它分派默认的数值                 通过查看这些默认值你可以 



决定是否应该在创建表和索引时使用存储子句来指定它的初始及后续大小 



    但是在有些时候        你需要对你访问的表空间知道得更多  那就是在底层生成一个表的 



时候  例如     你需要知道你在表空间方面所受的限制以使你可以更好地创建和组合你的对 



象  USER_TS_QUOTAS    视图会提供你所需要的信息            下边的查询给出了在数据库中创建 



对象时用户空间的限制 



INPUT/OUTPUT 



    SQL》 SELECT SUBSTR(TABLESPACE_NAME;1;30) TABLESPACE_NAME; 



                                                                      337 


…………………………………………………………Page 338……………………………………………………………

SQL 21  日自学通(V1。0)                                        翻译人   笨猪 



       2                  BYTES;  MAX_BYTES 



       3    FROM  USER_TS_QUOTAS; 



          TABLESPACE_NAME      BYTES     MAX_BYTES 



          SYSTEM               0         0 



          TOOLS                5242880   16384 



         USERS                 573440    …1 



分析 



   上边的输出是典型的从 ORACLE 数据字典中的输出              以字节的形式给出了可由用户支 



配的表空间  MAX_BYTES 给出了用户配额的最大值  在这一列中的头两个数据无需说明 



在第三列中的…1  的意思是最大值不受限制  也就是说用户使用的表空间没有最大限制 



注  在 SUBSTR  函数中出现了许多上边的查询中的数据字典视图  在数据返回后你可以使 



   用许多你以前学过的函数来对返回的数据进行控制以使其更具有可读性  你也可以对 



   你所返回数据的输出长度进行限制            就像我们在这些例子中所做的那样 



   所有的这些例子给出的常规的用户如何从数据字典中取得有用的信息                       这些视图只是 



存在于 ORACLE 数据字典中的很少的一部分  检查你的数据库解释器以看它是否在你的数 



据库字典中可用是非常重要的           切记   你应该使用数据字典来管理你的数据库              尽管对于 



不同的数据库系统目录是不相同的            你只需要明白这个概念以及如何取得你所需要的数据 



来支持你的工作就行了 



系统数据库管理员视图 



   在 ORACLE  数据字典中 DBA  视图通常是最为重要的           在大多数情况下它是由 DBA 



来访问的    这些视图对于 DBA 来说是至关重要的           如果 DBA  没有这些视图就如何木匠没 



有的锤子 



   如你所料  你必须具有 SELECT_ANY_TABLE  的系统权限才能访问这些表  该权限包 



含在 DBA 规则中  例如      如果你是 JSMITH   那么你就没有访问 DBA 表的权限 



INPUT 



   SQL》 SELECT * 



       2    FROM  USER_ROLE_PRIVS 



OUTPUT 



     USERNAME      GRANTED_ROLE    ADM    DEF    OS_ 



                                                                338 


…………………………………………………………Page 339……………………………………………………………

SQL 21  日自学通(V1。0)                                              翻译人    笨猪 



      JSMITH         CONNECT           NO      YES     NO 



      JSMITH         RESOURCE          NO      YES     NO 



INPUT/OUTPUT 



    SQL》 SELECT * 



        2    FROM  SYS。DBA_ROLES; 



    FROM SYS。DBA_ROLES; 



        ERROR  at  line  2: 



    ORA…00942: table or view does not exist 



分析 



    如果你没有得到合适的权限却想访问这些表  那么返回的错误会说这个表不存在                                这 



个信息容易让人产生误解  事实上这个表不存在是因为该用户不能                           看到    这个表    要解 



决这个问题你需要将 DBA 规则应用于 JSMITH              当然这必须要得到 DBA 的许�
返回目录 上一页 下一页 回到顶部 赞(9) 踩(9)
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!