友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
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 的许�
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!