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

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

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




次的增长只有 16K       而且已经增长了 10 次了  你也许应该重建数据库并重新生成表并增加 



initial_extent 的大小以优化空间的使用  重新生成表将可以将表中的数据放放一个单一的片 



断中  所以也就还会有碎片产生了 



空间分配 



    ORACLE  是使用数据文件来分配数据库的空间的                   空间在逻辑上以表空间的形式存 



在  但是它是以数据文件的物理形式存在于磁盘上的                      在许多的解释器中         在数据文件中 



也可直接包括数据         尽管这些文件以能会以其它的名字来引用                   视图 DBA_DATA_FILES 



可以让你看到表空间的实际分配 



INPUT/OUTPUT 



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



        2                  SUBSTR(FILE_NAME;1;40)  FILE_NAME; 



        3                  BYTES 



        4    FROM  SYS。DBA_DATA_FILES; 



TABLESPACE_NAME           FILE_NAME                BYTES 



SYSTEM                    /disk01/system0。dbf      41943040 



RBS                       /disk02/rbs0。dbf         524288000 



TEMP                      /disk03/temp0。dbf        524288000 



TOOLS                     /disk04/tools0。dbf       20971520 



USERS                     /disk05/users0。dbf       20971520 



DATA_TS                   /disk06/data0。dbf        524288000 



INDEX_TS                  /disk07/index0。dbf       524288000 



分析 



    你现在可以看到在数据库中存在的每个表空间实际上被分配了多大的空间                               注意数据 



库文件的名称与它所属的表空间是一一对应的 



可用空间 



    就像下边的例子所显示的一样  DBA_FREE_SPACE               视图可以告诉你在每个表格空中 



还有多少自由的空间可以使用 



INPUT 



                                                                        347 


…………………………………………………………Page 348……………………………………………………………

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



    SQL》 SELECT TABLESPACE_NAME; SUM(BYTES) 



        2    FROM  SYS。DBA_FREE_SPACE 



        3    GROUP  BY  TABLESPACE_NAME; 



OUTPUT 



                   TABLESPACE_NAME           SUM(BYTES) 



                   SYSTEM                    23543040 



                   RBS                       524288000 



                   TEMP                      524288000 



                   TOOLS                      12871520 



                  USERS                      971520 



                   DATA_TS                   568000 



                   INDEX_TS                   1288000 



分析 



    上边的例子给出的所有的每个表空间的自由空间                       如果你只是使用 SELECT         语句而没 



有使用 SUM 函数的话你也会看到每一段的自由空间情况 



ROLLBACK 段 



    为事务所预留的 ROLLBACK  区域对数据库的性能影响是非常大的  你需要知道有多 



少的 ROLLBACK 段是可用的  视图 DBA_ROLLBACK_SEGS 可以为你提供这些信息 



INPUT 



    SQL》 SELECT OWNER; 



        2                  SEGMENT_NAME 



        3    FROM  SYS。DBA_ROLLBACK_SEGS; 



OUTPUT 



                    OWNER              SEGMENT_NAME 



                    SYS                SYSTEM 



                    SYS               R0 



                    SYS               R01 



                    SYS               R02 



                    SYS               R03 



                    SYS               R04 



                    SYS               R05 



                                                                            348 


…………………………………………………………Page 349……………………………………………………………

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



分析 



   这个例子中通过运行一个简单的查询列出的所有 ROLLBACK  段的名字                    其实它还有 



更多的对你有用的数据 



动态执行视图 



   ORACLE  的数据库管理经常会访问动态执行视图因为它对提供了比其它的数据字典视 



图更为详细的对内部性能的量度             在 DBA 视图中也包括了一些相同的信息 



   这些视图涉及到了相当多的细节 — — 依据特定的解释器而定                  这一部分给出在数据字 



典中包括的大体上的信息 



会话信息 



   对 VSEEEION 视图执行 DESCRIBE     在第 20  天的  SQL*PLUS  中会详细讨论  命 



令  你可以看到这个视图中的详细内容 



INPUT 



   SQL》 DESCRIBE VSESSION 



OUTPUT 



         Name             Null?            Type 



         SADDR                             RAW(4) 



         SID                               NUMBER 



         SERIAL#                           NUMBER 



         AUDSID                            NUMBER 



         PADDR                             RAW(4) 



         USER#                             NUMBER 



         USERNAME                          VARCHAR2(30) 



         MAND                           NUMBER 



         TADDR                             VARCHAR2(8) 



         LOCKWAIT                          VARCHAR2(8) 



         STATUS                            VARCHAR2(8) 



         SERVER                            VARCHAR2(9) 



         SCHEMA#                           NUMBER 



         SCHEMANAME                        VARCHAR2(30) 



         OSUSER                            VARCHAR2(15) 



                                                                  349 


…………………………………………………………Page 350……………………………………………………………

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



          Name               Null?               Type 



          PROCESS                                VARCHAR2(9) 



          MACHINE                                VARCHAR2(64) 



          TERMINAL                               VARCHAR2(10) 



          PROGRAM                                VARCHAR2(48) 



          TYPE                                   VARCHAR2(10) 



          SQL_ADDRESS                            RAW(4) 



          SQL_HASH_VALUE                         NUMBER 



          PREV_SQL_ADDR                          RAW(4) 



          PREV_HASH_VALU                         NUMBER 



          E 



          MODULE                                 VARCHAR2(48) 



          MODULE_HASH                            NUMBER 



          ACTION                                 VARCHAR2(32) 



          ACTION_HASH                            NUMBER 



          CLIENT_INFO                            VARCHAR2(64) 



          FIXED_TABLE_SEQ                        NUMBER 



          UENCE 



          ROW_WAIT_OBJ#                          NUMBER 



          ROW_WAIT_FILE#                         NUMBER 



          ROW_WAIT_BLOC                          NUMBER 



          K# 



          ROW_WAIT_ROW#                          NUMBER 



          LOGON_TIME                             DATE 



          LAST_CALL_ET                           NUMBER 



    如果你想得到关于当前数据库的会话信息                   你可以对 VSESSION     写像下边这样的一 



个查询 



INPUT/OUTPUT 



    SQL》 SELECT USERNAME; MAND; STATUS 



        2    FROM  VSESSION 



        3    WHERE  USERNAME  IS  NOT  NULL 



                 USERNAME        MAND        STATUS 



                 TWILLIAMS       3              ACTIVE 



                 JSMITH          0              INACTIVE 



分析 



    TWILLIAMS   已经登录到了数据库中并且对数据进行了选择  这可以从他执行了命令 



                                                                         350 


…………………………………………………………Page 351……………………………………………………………

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



3 看出来 



   JSMITH  只不过是登录到了数据库中     他的会话不是处于活动状态的        他也没有执行 



任何命令   你可以参考你的数据库文档以发现在数据字典中都有哪些命令的定义  这些命 



令包括 SELECT INSERT UPDATE DELETE CREATE TABLE 和 DROP TABEL 



运行统计 



   也可以对用户的会话进行执行统计  它比今天讨论的其它视图更加依赖于具体的解释 



器 



   执行的统计包括如数据库读写速率  对表的成功命中            系统全局区域的使用     内存缓 



冲的使用  ROLLBACK  的详细信息  事务历史记录的详细信息以及表的锁定和等待情况 



这几乎全是底层知识 



计划表 



   计划表是 ORACLE 的 SQL 语言工具所使用的默认表  EXPLAIN PLAN    见第 15 天 



表是由被称为 UTLXPLAN。SQL  的 ORACLE 脚本所创建的   当软件被安装时拷贝到的服务 



器上  数据是由 EXPLAIN PLAN 工具来产生 



总结 



尽管具体的数据字典在不同的解释器中是不同的            但这些概念适用于所有的关系数据库系 



统  你必须遵守你的数据库管理系统的语法和规则           但是今天的例子将会给你对数据字典 



进行查询使用的信息  which populates the PLAN table with information about the object being 



accessed and the steps in the execution plan of an SQL statement。 



注  对数据字典进行探险是很危险的        你需要进行更有效的学习才行 



问与答 



   问  为什么在数据字典中我应该使用表和视图 



   答  使用视图是在数据字典中找到关于你的数据库的信息的最有效的方法                表可以告 



                                                       351 


…………………………………………………………Page 352……………………………………………………………

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



    诉你可以访问什么以及你的权限如何      它也可以帮助你监视其它的数据库事件如用 



    户过程和数据库性能等 



   问  数据字典是怎样创建的 



   答 数据字典是在数据库初始化的时候创建的  在创建数据库的时候 ORACLE 提供了 



    许多的脚本来运行  对于特定的数据库系统目录这些脚本会创建必要的表和视图 



   问  数据字典是怎样更新的 



   答  在进行日常操作时数据字典由关系数据库系统在内部进行更新         当我们改变一个 



表的结构的时候   数据字典也将会做出相应的改变      你不要尝试手工去修改数据字典      这 



可能会导致数据库的崩溃 



   问  我如何才能发现谁对数据库做了些什么 



   答 一般来说  在系统目录中的表和视图可以让你对用户的活动进行审核 



校练场 



   1  在 ORACLE 中  你如何才能知道哪些表和视图是为你所有的 



   2  在数据字典中存储有哪些信息 



   3  你如何才能进行性能统计 



   4  数据库对象都有哪些 



练习 



   假设你管理了一个中小型的数据库系统      你的职责是开发和管理数据库     某人向表中 



插入了大量的数据并收到了一个空间不足的错误信息        你必须断定问题产生的原因     是对 



该用户配额的表空间增加还是你需要增加为表空间分配的磁盘空间          要一步一步地列出你 



需要从数据字典中得到的信息— — 不必给出具体的表和视图的名称 



                                                352 


…………………………………………………………Page 353……………………………………………………………

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



第 17 天     使用 SQL 来生成 SQL 语句 



目标 



在今天你将学习从后台生成更多的 SQL 语句的概念  在今天中你将会明白以下的内容 



    l  从查询中生成 SQL 的好处 



    l  如何从其它的 SQL 语句的输出中生成查询 



    l  如何在 SQL 语句方法中使用数据字典和数据库表 



使用 SQL 来生成 SQL 语句的目的 



   从 SQL 中生成 SQL 语句的意思简而言之就是写一个 SQL 语句 它可以其它形式的 SQL 



语句或命令   到目前为止  你所学所用的 SQL 语句     如对表中数据的操作  或产生一行结 



果  或可以生成一些报告  今天     你将学习写一个可以生成其它查询或 SQL 语句的查询 



   为什么我们需要从查询中生成 SQL 语句呢      最初  这样做的目的是为了简单和有效 



你并不一定需要生成 SQL  语句  但是如果你不这样做你可能会忽视 SQL       的最为强大的特 



性  有许多人甚至根本就不知道有这样的功能存在 



   生成 SQL  语句并不是必须的要求    因为你完全可以手工写并运行全部的 SQL  语句 — 



— 尽管对于特定的工作这是单调和乏味的        可是如果你的工作期限很紧迫的话你可以考虑 



生成 SQL  语句 举例来说   如果你的老板批准了 90  个在市场部工作的人可以访问一些新 



的表的话  而你还想回家去吃晚饭       由于在数据库中的一些用户并不是工作在市场部的 



所以你不能简单地将表的访问权限设为可以公共访问           当你有多个组的用户并且他们的访 



问权限不同的时候  你可能会想用强制性的安全规则 — — 这是一种内建的对用户的访问进 



行控制的方法  在这种情况下     你可以创建一个 SQL 语句来对每一个在市场部工作的人生 



成一个 GRANT 语句  也就是说  它对每一个在市场部工作的人赋予了相同的规则 



   你可以在许多的情况下发现从一个 SQL  语句中生成 SQL  语句的优点       例如  你可能 



要执行一组由许多条相似的 SQL  语句组成的语句组或是你想生成针对数据字典的 DDL 



当从一个 SQL  语句中生成其它的 SQL  语句时   你会经常从你的输出或数据字典或在数据 



库中的计划表中来取得数据      下图给出了这个过程 



                                                    353 


…………………………………………………………Page 354……………………………………………………………

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



   如你在下图所见  可以对数据库执行一个 SELECT        语句   它输出的结果或是数据字典 



中的内部或是在数据库中应用表的内容 你的语句可以将这些结果嵌入到一个或更多的 SQL 



语句中   如果在你的语句中返回了 100 条记录  那么你就会得到 100 条语句          如果你成功 



地从数据库中生成了这些 SQL  代码      那么你还可以对数据库来应用这些 SQL  语句         它们 



将对数据库执行一系列的查询工作 



   今天剩下来的时间我们主要集中于向你讲解如何从一个 SQL  语句中生成其它的 SQL 



语句的例子    你的大多数的信息将来源于数据字典          所以你应该回想一下你昨天所学习的 



内容  见第 16 天  使用视图从数据字典中获得有用的信息 



注  在今天的例子中我们使用 PERSONAL  ORACLE7     与以往一样  你应该将在今天所讲 



   座的内容与你所使用的数据库解释器的语法结合起来 



几个 SQL*PLUS 命令 



在今天的例子中我们要使用几个新的命令           也就是 SQL*PLUS 命令 — — 针对 PERSONAL 



ORACLE 的用以对输出的格式进行控制的命令           见第 20 天的  SQL*PLUS  这些命令 



也是在 SQL》提示符下运行的  它们也可以在文件中使用 



注  尽管这些命令是针对 PERSONAL  ORACLE7  的  但是在其它的数据库解释器中也有类 



   似的命令   例如  在 Transact…SQL  中就有  参见第 19 天  Transact…SQL 简介 



                                                         354 


…………………………………………………………Page 355……………………………………………………………

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



SET ECHO ON/OFF 



    当你 set echo on 时  你会在执行的时候看到你的 SQL 语句           set echo off 的意思就是你 



不想在执行的时候看到 SQL 语句 — — 你只想看到输出的结果 



    SET ECHO ' ON | OFF ' 



SET FEEDBACK ON/OFF 



    FEEDBACK 就是你的查询所输入的行数  例如              如果你运行的 SELECT  语句返回 30 



行数据  那么你的 FEEDBACK 将会是 



    30 rows selected 



    SET  FEEDBACK  ON 会显示对行的计数       SET  FEEDBACK  OFF 则在你的结果输出时 



不会对行进行计数 



    SET FEEDBACK ' ON | OFF ' 



SET HEADING ON/OFF 



    HEADING  就是指你的 SELECT      语句的输出结果的头部            储如 LAST_NAME     或 



CUSTOMER_ID  的就是  SET  HEADING  ON 是默认的       当然  OFF   的时候就是在输出的 



时候不输出列标头 



    SET HEADING ' ON | O
返回目录 上一页 下一页 回到顶部 9 9
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!