在Oracle
哪个工具是DBA每天最常用的?除了很多DBA使用图形界面的工具外,使用最多的就是SQL Plus这个命令行方式的工具了。
尽管在oracle
我当前是以哪个用户登录的?当前身份是什么?在长时间使用9i的sqlplus后,很多DBA会犯这种“迷糊”。你需要通过查询语句来解决这些迷惑。在
SQL> set sqlprompt "_user _privilege>
"
通过以上设置,你的sqlplus提示标识就成了以下格式了:
SYS AS
SYSDBA>
这就表明当前的登录帐号是SYS,身份是SYSDBA。请注意在上面语句中使用了两个特殊的预定义道德变量:_user和_privilege,分别定义了当前用户和这个用户的登录
身份(权限)。现在我们再增加一些其他内容。比如我除了想知道以上信息外,还想知道当前的登录时间:
SQL> set sqlprompt "_user _privilege on
_date>"
SYS AS SYSDBA on
31-8月
-05>
再增加一个连接信息看,这样就可以指出你登录的是哪个服务器的:
SQL>set sqlprompt "_user on _date at _connect_identifier>"
SYS on 31-8月 -05 at teng>
但是前面的当前时间信息只有日期,如果需要精确到当前的确切时间呢:
SYS on 31-8月 -05 at teng>alter session set nls_date_format='yyyy-mm-dd
hh24:mi:ss';
会话已更改。
SYS on 2005-08-31 16:20:15 at
teng>
你只要将上面的内容存在$ORACLE_HOME/sqlplus/glogin.sql中,那每次登录的提示信息都是你所需要的了。
自从internal的登录方式在9i当中不再被支持后,很多DBA就抱怨:如何可以不输入sys用户的密码来维护系统的安全?答案就是在操作系统提示符下用双引号的方法进入:
$sqlplus “/as sysdba”
需要多输一对双引号也引起了不少抱怨。而在
$sqlplus / as sysdba
在9i中,当你在sqlplus进行操作时,你会希望将一些有用的语句存下来以便以后使用,这时你可以使用save命令。Save命令会将从最后一次执行save开始以后的所有脚本存下来,这样就会将你执行过的脚本存成分散的文件。如:
SQL> select 1 ...
SQL> save
1
Created file
1.sql
SQL> select 2 ...
SQL> save
2
Created file
2.sql
SQL> select 3 ...
SQL> save
3
Created file
3.sql
这样存下来1.sql、2.sql、3.slq三个脚本,三个脚本的内容分别为select 1 …、select 2 …、select 3 …。这样的话你就需要手工将他们再合成一个脚本以便以后使用。
在sqlplus
SQL> select 1 ...
SQL> save myscript
Created file myscript.sql
SQL> select 2 ...
SQL> save myscript append
Append file myscript sql
SQL> select 3 ...
SQL> save myscript append
Append file myscript.sql
这样,所有的脚本都被存储在myscript.sql这个脚本中了。
这一特性对于spool同样适用。在9i中,输入spool res后,如果当前目录下不存在res.lst这个文件,就会创建它,如果已经存在,就会直接覆盖(不会给任何提示),然后将以后直到spool off的所有sqlplus上的信息存储在res.lst中。这样的话,如果原先有一个很重要的res.lst文件可能就无法恢复了。
在
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"
每次登录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时执行,而在每次重新连接时不会执行。所以提示信息没有变。
在
DB1> connect
scott/tiger@db2
connected
DB2>
这样信息就是正确了。
如果你出于某些原因不想使用这种增强过的sqlplus该怎么办呢?很简单,只要在运行sqlplus时加上-c的选项就可以了:
sqlplus –c
9.2
这样sqlplus的环境就和9.2版本的是一样的了。
有多少人经常使用例如以下的语句:
select USER into
也许有很多。每次调用DUAL都会产生逻辑IO,而这些逻辑IO都可以被数据库避免的。在一些情况下,调用DUAL是为了能达到像“<somevariable> := USER”这样的效果。因为Oracle代码将DUAL看作一张特殊的表,因此一些用于优化普通表的方法可能对它无效。
在
在9i中:
Rows Execution Plan
-------
---------------------------------------------------
0 SELECT STATEMENT GOAL: CHOOSE
1
TABLE ACCESS (FULL) OF 'DUAL'
在
Rows Execution Plan
-------
---------------------------------------------------
0 SELECT STATEMENT MODE: ALL_ROWS
0
FAST DUAL
请注意
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9650775/viewspace-920389/ ,如需转载,请注明出处,否则将追究法律责任。