按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
之相对比 USER_CATALOG 则用于显示当前用户的表 用 DBA_CATALOG 视图 DBA 可
以快速地查看所有的表
下边的查询给出了对于特定的数据库都存在哪种类型的对象
技巧 出于测试的目的你可以使用 ROWNUM 来限制查询返回特定数目的行 它与 ROWID
一样可以在任何数据库表和视图中使用
INPUT/OUTPUT
SQL》 SELECT DISTINCT(OBJECT_TYPE)
2 FROM SYS。DBA_OBJECTS;
341
…………………………………………………………Page 342……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
OBJECT_TYPE OBJECT_TYPE
CLUSTER PROCEDURE
DATABASE LINK SEQUENCE
FUNCTION SYNONYM
INDEX TABLE
PACKAGE TRIGGER
PACKAGE BODY VIEW
分析
在上边的查询中 DISTINCT 功能可以让存在于数据库中的对象只出现一次 在数据库
的设计和开发时使用这个查询来发现数据库中都有哪些对象是非常好的
DBA_TABLES 视图给出了关于数据库表和大多数与存储有关的数据库对象的信息
INPUT/OUTPUT
SQL》 SELECT SUBSTR(OWNER;1;8) OWNER;
2 SUBSTR(TABLE_NAME;1;25) TABLE_NAME;
3 SUBSTR(TABLESPACE_NAME;1;30) TABLESPACE_NAME
4 FROM SYS。DBA_TABLES
5 WHERE OWNER = 'JSMITH';
OWNER TABLE_NAME TABLESPACE_NAME
JSMITH MAGAZINE_TBL USERS
JSMITH HOBBY_TBL USERS
JSMITH ADDRESS_TBL SYSTEM
JSMITH CUSTOMER_TBL USERS
分析
除了 ADDRESS_TBL 以外 所有的表都在 USER 表空间中 ADDRESS_TBL 是在系
统表空间中的 因为这是唯一的一个你可能存储于系统表空间中的表 作为 DBA 需要知
道这件事 这个查询对你的帮助不小
JSMITH 应该马上把这个表移到其它符合条件的表空间中去
DBA_SYNONYMS 给出了所有存在于数据库中的同义字的清单 DBA_SYNONYMS
给出了所有数据库用户的同义字清单 与 USER_SYNONYMS 不同 — — 它只是给出了当前
用户私有的同义字
INPUT/OUTPUT
SQL》 SELECT SYNONYM_NAME;
342
…………………………………………………………Page 343……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
2 SUBSTR(TABLE_OWNER;1;10) TAB_OWNER;
3 SUBSTR(TABLE_NAME;1;30) TABLE_NAME
4 FROM SYS。DBA_SYNONYMS
5 WHERE OWNER = 'JSMITH';
SYNONYM_NAME TAB_OWNER TABLE_NAME
TRIVIA_SYN VJOHNSON TRIVIA_TBL
分析
下边的例子表时 JSMITH 有对 VJOHNSON 所有的 TRIVIA_TBL 表有一个名字叫
TRIVIA_SYN 的同义字
现在假设你想得到所有的 JSMITH 的表和索引的清单 你也许会写出像下边这样的查
询 它使用了 DBA_INDEXS
INPUT/OUTPUT
SQL》 SELECT SUBSTR(TABLE_OWNER;1;10) TBL_OWNER;
2 SUBSTR(TABLE_NAME;1;30) TABLE_NAME;
3 SUBSTR(INDEX_NAME;1;30) INDEX_NAME
4 FROM SYS。DBA_INDEXES
5 WHERE OWNER = 'JSMITH'
6 AND ROWNUM 《 5
7 ORDER BY TABLE_NAME;
TBL_OWNER TABLE_NAME INDEX_NAME
JSMITH ADDRESS_TBL ADDR_INX
JSMITH CUSTOMER_TBL CUST_INX
JSMITH HOBBY_TBL HOBBY_PK
JSMITH MAGAZINE_TBL MAGAZINE_INX
分析
像上边这样一个很容易的查询可以给出一个计划 工程 和与之相中所使用的表
INPUT/OUTPUT
SQL》 SELECT SUBSTR(TABLE_NAME;1;15) TABLE_NAME;
2 SUBSTR(INDEX_NAME;1;30) INDEX_NAME;
3 SUBSTR(COLUMN_NAME;1;15) COLUMN_NAME;
4 COLUMN_POSITION
343
…………………………………………………………Page 344……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
5 FROM SYS。DBA_IND_COLUMNS
6 WHERE TABLE_OWNER = 'JSMITH'
7 AND ROWNUM 《 10
8 ORDER BY 1;2;3
TABLE_NAME INDEX_NAME COLUMN_NAME COLUMN_POSITION
ADDRESS_TBL ADDR_INX PERS_ID 1
ADDRESS_TBL ADDR_INX NAME 2
ADDRESS_TBL ADDR_INX CITY 3
CUSTOMER_TBL CUST_INX CUST_ID 1
CUSTOMER_TBL CUST_INX CUST_NAME 2
CUSTOMER_TBL CUST_INX CUST_ZIP 3
HOBBY_TBL HOBBY_PK SAKEY 1
MAGAZINE_TBL MAGAZINE_INX ISSUE_NUM 1
MAGAZINE_TBL MAGAZINE_INX EDITOR 2
现在你已经选择一在每一个表中的索引过的列并根据索引出现的次序进行了排序 你
已经学习了表 但是如何才能更好地把握表呢 表空间比表和索引之类的对象更高级 表
空间是 ORACLE 为数据库分配空间的机制 要分配空间 你必须知道当前有多少空间可供
使用 你可以对 DBA_TABLESPACES 视图执行一个查询来查看所有的表空间以及它们的
状态 如下例所示
INPUT/OUTPUT
SQL》 SELECT TABLESPACE_NAME; STATUS
2 FROM SYS。DBA_TABLESPACES
TABLESPACE_NAME STATUS
SYSTEM ONLINE
RBS ONLINE
TEMP ONLINE
TOOLS ONLINE
USERS ONLINE
DATA_TS ONLINE
INDEX_TS ONLINE
分析
上边的例子告诉了你当前有多少表空间处于在线状态 也就是说它对于你来说是可用
的 如果它是离线状态 那么在它之中的数据库对象 也就是表 将是不可访问的
344
…………………………………………………………Page 345……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
那么对于 JSMITH 来说有多少配额可供他访问呢 也就是说 对于 JSMITH 来说他可
以使用多少空间来存储数据库对象呢
INPUT/OUTPUT
SQL》 SELECT TABLESPACE_NAME;
2 BYTES;
3 MAX_BYTES
4 FROM SYS。DBA_TS_QUOTAS
5 WHERE USERNAME = 'JSMITH'
TABLESPACE_NAME BYTES MAX_BYTES
DATA_TS 134111232 …1
INDEX_TS 474390528 …1
分析
JSMITH 对于可供他访问和使用的表空间是没有限制的 在这种情况下空间的使用是
本着先入为主的原则进行的 举例来说 如果 JSMITH 在 DATA_TS 中使用了所有的表空
间 那么其它的用户就不能在这里创建对象了
数据库的生长
在这一部分有两个视图可以对管理数据库的生长情况进行控制 它 们 是
DBA_SEGMENTS 和 DBA_EXTENTS DBA_SEGMENTS 提供了关于每一段或数据对象
如存储分配 空间使用和扩展的信息 每次当表和索引的增长超过了预先的指定就会开始
下一次的扩展 采用这种方法增长的表通常会有碎片的产生 DBA_EXTENTS 则给出�