Oracle10g新特性——SQL*PLUS的改进
2008-08-30 12:44:26 来源:WEB开发网这一特性对于spool同样适用。在9i中,输入spool res后,如果当前目录下不存在res.lst这个文件,就会创建它,如果已经存在,就会直接覆盖(不会给任何提示),然后将以后直到spool off的所有sqlplus上的信息存储在res.lst中。这样的话,如果原先有一个很重要的res.lst文件可能就无法恢复了。
在10g中,spool命令可以向已经存在的文件中添加内容:
SQL> spool res append
如果忽略掉append子句就和9i中一样,会将已有文件覆盖,或者将append换为replace也会覆盖。而如果使用create子句就会先检查文件是否存在,如果存在,就会报错:
SYS on 2005-08-31 17:25:46 at teng>spool abc create
SP2-0771: 文件 "abc.LST" 已存在。
请使用其它名称或 "SPOOL filename[.ext] REPLACE"
Login.sql
每次登录sqlplus时,会先执行$ORACLE_HOME/sqlplus/glogin.sql或者当前目录的login.sql脚本。但是,会存在各种各样的限制。在9i或以下版本里,假如你的脚本里有如下内容:
set sqlprompt "_connect_identifier >"
当第一次启动并连接到数据库DB1时,提示信息为:
DB1>
然后再连接到另外一个数据库上:
DB1> connect scott/tiger@db2
connected
DB1>
尽管连到了DB2,但提示信息还是DB1。说明这个提示有问题。其实原因很简单,login.sql只是在第一次启动sqlplus时执行,而在每次重新连接时不会执行。所以提示信息没有变。
在10g中,这种限制没有了。脚本不仅在启动sqlplus时执行,还会在每次连接数据库时也会执行:
DB1> connect scott/tiger@db2
connected
DB2>
这样信息就是正确了。
使用原先版本的sqlplus
如果你出于某些原因不想使用这种增强过的sqlplus该怎么办呢?很简单,只要在运行sqlplus时加上-c的选项就可以了:
sqlplus –c 9.2
这样sqlplus的环境就和9.2版本的是一样的了。
轻松使用dual
有多少人经常使用例如以下的语句:
select USER into <some variable> from DUAL
也许有很多。每次调用DUAL都会产生逻辑IO,而这些逻辑IO都可以被数据库避免的。在一些情况下,调用DUAL是为了能达到像“<somevariable> := USER”这样的效果。因为Oracle代码将DUAL看作一张特殊的表,因此一些用于优化普通表的方法可能对它无效。
在10g中,这些担心都不存在了。因为DUAL是一张特殊的表,通过设定10046跟踪事件,”consistent gets”在相当程度上被降低了,查询计划也不一样了。
在9i中:
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
请注意10g中这个新的查询计划:“FAST DUAL”,与9i中的“TABLE ACCESS (FULL) OF 'DUAL'”完全相反。这一改进显著的降低了“consistent reads”,使频繁用到了DUAL表的应用效率更高。
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
赞助商链接