Oracle 10G 最佳20位新特性:SQL*Plus Rel 10.1
2008-12-17 13:06:06 来源:WEB开发网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
注意提示符。虽然您现在和 DB2 连接在一起,但提示符仍是 DB1,。很明显,提示符是不正确的。原因很简单:在连接时没有执行 login.sql 文件,只在 SQL*Plus 启动时执行了该文件。后来的连接没有重新执行该文件,使得提示符没有改变。
Connected
DB1>
在 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 的主要工具。
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
- ››Oracle中在pl/sql developer修改表的两种方式
更多精彩
赞助商链接