WEB开发网
开发学院数据库Oracle Oracle 10G 最佳20位新特性:SQL*Plus Rel 10.1 阅读

Oracle 10G 最佳20位新特性:SQL*Plus Rel 10.1

 2008-12-17 13:06:06 来源:WEB开发网   
核心提示: Login.sql 是用于登录的,是吗?记得文件 login.sql 和 glogin.sql 吗?本来在任何时候当调用 SQL*Plus 时,Oracle 10G 最佳20位新特性:SQL*Plus Rel 10.1(4),都将运行当前目录中的 login.sql 文件,但是,但是,对许

Login.sql 是用于登录的,是吗?

记得文件 login.sql 和 glogin.sql 吗?本来在任何时候当调用 SQL*Plus 时,都将运行当前目录中的 login.sql 文件。但是,有一个严重的局限。在 Oracle9i 和更低版本中,假定在文件中有下面这一行。

set sqlprompt "_connect_identifier >"

当您首先启动 SQL*Plus 与数据库 DB1 连接时,提示符显示:

DB1>

现在,如果您从提示符中与另一个数据库 DB2 连接:

  DB1> connect scott/tiger@db2
  Connected
  DB1>
  注意提示符。虽然您现在和 DB2 连接在一起,但提示符仍是 DB1,。很明显,提示符是不正确的。原因很简单:在连接时没有执行 login.sql 文件,只在 SQL*Plus 启动时执行了该文件。后来的连接没有重新执行该文件,使得提示符没有改变。

在 Oracle Database 10g 中,消除了该局限。文件 login.sql 不仅在 SQL*Plus 启动时执行,而且在连接时也执行。因此在 10g 中,如果您当前与数据库 DB1 连接,后来改变了连接,则提示符将改变。

  SCOTT at DB1> connect scott/tiger@db2
  SCOTT at DB2> connect john/meow@db3
  JOHN at DB3>

不希望改变!

如果由于某些原因,您不想使用这些增强的 SQL*Plus,那该怎么办?很简单,用 -c 选项来调用它:

sqlplus -c 9.2

SQL*Plus 环境将和旧的 9.2 版一样运转。

自由地使用 DUAL

您认为有多少开发人员(还有 DBA)经常使用这条命令?

select USER into from DUAL

可能非常多。对 DUAL 的每次调用创建逻辑 I/O — 数据库没有逻辑 I/O 也可以工作。在某些情况下必须调用 DUAL,如在行 := USER 中。因为 Oracle 代码将 DUAL 当作一个专用的表,所以调整表的某些想法可能不适用或不贴切。

Oracle Database 10g 使得所有这些担心完全消失了:因为 DUAL 是一个专用的表,所以持续获得显著地减少了,并且与从事件 10046 跟踪中看到的优化计划不同。

在 Oracle9i 中

  Rows   Execution Plan
  ------- ---------------------------------------------------
  0 SELECT STATEMENT  GOAL:CHOOSE
  1  TABLE ACCESS (FULL) OF 'DUAL'
    
  在 10g 中
  Rows   Execution Plan
  ------- ---------------------------------------------------
  0 SELECT STATEMENT  MODE:ALL_ROWS
  0  FAST DUAL

注意新的 FAST DUAL 优化计划的使用,与 Oracle9i 中的 DUAL 的 FULL TABLE SCAN 相反。这一改进显著地减少了持续读取,从而为频繁使用 DUAL 表的应用程序带来好处。

注意:从技术角度看,这些 DUAL 改进是在 SQL 优化器中实施的,但是,对许多用户而言,SQL*Plus 是用于处理 SQL 的主要工具。

上一页  1 2 3 4 

Tags:Oracle 最佳 特性

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接