按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
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 条语句 如果你成功