SQL 21日自学通(V3.0)(PDF格式)-第91部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
SQL》 select sysdate TODAY
2 from dual;
输出
TODAY
15…MAY…97
488
…………………………………………………………Page 489……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
SQL》
The Use of DISTINCT When Selecting Multiple Columns
输入
SQL》 select distinct(city); distinct(zip)
2 from address_tbl;
输出
select distinct(city); distinct(zip)
*
ERROR at line 1:
ORA…00936: missing expression
SQL》
分析
CITY 可能比州代码更多 作为一个规则 你应该使用 DISTINCT 命令来选择唯一值
Dropping an Unqualified Table
无论何时你删除表时都要使用工程或所有人的名字 以避免在数据库中表的名字会重
复 如果你使用了所有者或工程的名字 那么错误就不会发生
删除一个表的语法是非常危险的
语法
SQL》 drop table people_tbl;
下边的句子会更安全 因为它使用了所有人来限定所要删除的表
语法
SQL》 drop table ron。people_tbl;
警告 在删除表时进行资格限定是一个好习惯 尽管有时这一步工作可能不是必需的 再
你没有进行你所连接的数据进行用户验证时千万不要删除表
489
…………………………………………………………Page 490……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
The Use of Public Synonyms in a Multischema Database
同义字对于用户来说会更容易 但是 公共的同义字可能会把你不想让所有的人
都看到的表打开 所以在使用公共同义字 尤其是在多工程情况下使用公共同义字要
非常小心
The Dreaded Cartesian Product
输入
SQL》 select a。ssn; p。last_n
2 from address_tbl a;
3 people_tbl p;
输出
SSN LAST_NAME
303785523 SMITH
313507927 SMITH
490552223 SMITH
312667771 SMITH
420001690 SMITH
303785523 JONES
313507927 JONES
490552223 JONES
312667771 JONES
420001690 JONES
303785523 OSBORN
313507927 OSBORN
490552223 OSBORN
312667771 OSBORN
420001690 OSBORN
303785523 JONES
313507927 JONES
490552223 JONES
312667771 JONES
420001690 JONES
这个错误会在你没有在 WHERE 子句连接表的时候产生 注意选择了多少行 在前边
490
…………………………………………………………Page 491……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
的表是 4 行 所以你可能想要返回的是 4 行而不是 16 行 由于没有在 WHERE 中使用联
接 所以第一个表的中每一行都会分别与第二个表中的每一行相匹配 结果就是 4 乘 4 行
了 不幸的是你的许多表可能不只是 4 行 而是成千上万行 在这种情况下; 在这种情况
下不会返回数以亿计的结果 而是你的查询看起来像是停止了反应 Failure to 坚
坚持标准的输入
坚持使用标准的输入方法是一个公认的好习惯 没有输入员对数据的经常检查 你将
会使数据库在非常危险的情况下运行 一个好的办法就是对使用 SQL 创建的 QA 报表的质
量进行控制 让它们在一定的时间内运行 在数据提交之前尽可能地更正错误
Failure to Enforce File System Structure Conventions
在非标准的文件系统下工作会浪费你大量的时间 你应该检查你的解释器 看一看它
向你推荐的文件系统
Allowing Large Tables to Take Default Storage Parameters
存储参数的定义随解释器的不同而不同 但是它们通常是比较小的 当在默认的存储
空间中生成大的动态表时 常会导致碎片的产生 这使数据库的性能受到了很大的影响
在表设计时进行较好的计划可以避免这一问题 下边的例子使用的是 ORACLE 的存储参
数
INPUT:
SQL》 create table test_tbl
2 (ssn number(9) not null;
3 name varchar2(30) not null)
4 storage
5 (initial extent 100M
6 next extent 20M
7 minextents 1
8 maxextents 121
9 pctincrease 0};
491
…………………………………………………………Page 492……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
Placing Objects in the System Tablespace
下边的例子给出了一个在系统表空间中创建的表 尽管语句并没有返回任何错误 但
是它将会在以后导致问题
输入
SQL》 create table test_tbl
2 (ssn number(9) not null;
3 name varchar2(30) not null)
4 tablespace SYSTEM
5 storage
6 (initial extent 100M
7 next extent 20M
8 minextents 1
9 maxextents 121
10 pctincrease 0};
下边的例子更正了这个所谓的错误
输入
SQL》 create table test_tbl
2 (ssn number(9) not null;
3 name varchar2(30) not null)
4 tablespace linda_ts
5 (initial extent 100M
6 next extent 20M
7 minextents 1
8 maxextents 121
9 pctincrease 0};
分析
在 Oracle 中 系统表空间是由系统对象如数据字典所使用的 如果你在这个空间中
放置了动态表 由于它们会增大 你的运行将是危险的 至少它要占用自由空间 这会可
能导致你的数据库崩溃 这时数据库可能是无法恢复的 所以你应该将应用程序和用户表
492
…………………………………………………………Page 493……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
保存在指定的表空间中
Failure to press Large Backup Files
如果你导出文件很大且没有压缩的话 你需要存储的文件可能会超过磁盘空间的大小
一定要压缩导出文件 如果你是在磁盘上存有历史记录文件而不是在磁带上 这些文
件可以被压缩以节省磁盘空间
Failure to Budget System Resources
你应该在创建你的数据库时对你的系统进行预先估测 没有进行估测的结果将会使你
的数据库性能极差 你应该知道数据库是使用事务 数据仓库还是只有查询 数据库
的功能对 ROLLBACK 的大小有直接的影响 而数据库的用户数则对 USERS 和 TEMP
表空间的大小有影响 你是否有足够的空间来存贮你的大型表呢 表和索引应该被存
储在不同的磁盘上以减少磁盘访问冲突 你也应该将数据表空间和历史记录文件分布
于不同的设备以减少磁盘访问量 这都是在估测系统资源时要考虑的内容
Preventing Problems with Your Data
你的数据处理中心应该有系统备份功能 如果你的数据库是中小型的 你可以使用
EXPORT 命令来将数据预先导出并确保数据备份 你应该将导出的备份文件存储于另
一个安全的地点 由于这些文件很大 所以它可能要占用较多的磁盘空间
Searching for Duplicate Records in Your Database
如果你的数据库进行了很好的预先规划 那就不会出现冗余记录问题 你应该通过使
用约束 外部关键字和唯一值索引来避免冗余记录
总结
错误的类型很多 — — 可能有几百个 — — 会出现你的工作道路上和你的数据中 幸运的
是大多数错误和过失不会造成灾难而且容易处理 但是 其中一些可能是非常严重的
493
…………………………………………………………Page 494……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
所以你认真对待它 如果你不深究它可能会复杂化 如果你犯了错误 你应该明确的
采用你所学习的经验
技巧 我们更喜欢从数据库的文档中找错误信息 尤其是对于偶然发现的一些不常见
的错误。 错误文件和故障排查的价值是不可估量的
注 今天我们给出了在 PERSONAL ORACLE 7 中的一些常见的错误及解决方案 对
于更详细的内容你要参阅你的数据库相关文档
问与答
问 如果我每个错误都可以处理 那我还担心什么呢
答 对 大多数错误很容易处理 但是如果你删除了一个在使用环境中的表呢 你也
许需要几个小时或几天才能恢复它 这段时间数据库不能工作 为了修复它你耽搁了
许多人的时间 你的老板会高兴吗
问 有什么建议可以避免错误
答 只要是人 你就不可能避免所有的错误 但是 你通过练习并汲取经验你可以避
免它们中的大多数 从而使你的工作更轻松
校练场
1。 一个用户打电话说 “ 我不能登录数据库了 昨天还能呢 你能帮帮我吗 你该如
何做
2。 为什么表在存储子句中有表空间项
练习
1。 如果你以 SYSTEM 身份登录了数据库 你想删除你的计划中的一个名字叫HISTORY
的表 如果你的用户 ID 是 JSMITH 那么正确的语法是怎样的
2。 更正下边语句的错误
INPUT:
SQL》 selec