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