由sqlplus中的一个小细节所做的折腾

简介: sqlplus是Oracle DBA每天都要用到烂的工具了。如果没有sqlplus还真不知道怎么和oracle对话了。转念一想,自己已经很久没使用过toad了。 我们知道在sqlplus登录的时候我们可以定义一些通用的设置,在每次登录sqlplus的时候都可以生效。
sqlplus是Oracle DBA每天都要用到烂的工具了。如果没有sqlplus还真不知道怎么和oracle对话了。转念一想,自己已经很久没使用过toad了。
我们知道在sqlplus登录的时候我们可以定义一些通用的设置,在每次登录sqlplus的时候都可以生效。
$ORACLE_HOME/sqlplus/admin/gloin.sql的内容是下面的形式,
--
-- Copyright (c) 1988, 2005, Oracle.  All Rights Reserved.
--
-- NAME
--   glogin.sql
--

在10g和11g中,其实还是有明显的差别的,10g中glogin.sql已经自定义了一堆的设置。但是在11g中缺是空空如也,除了简单的几个注释外,再没有内容了,不过话说过来,在11g中这些设置已经作为默认设置,不需要再自定义了。

[oracle@oel1 admin]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.3.0 - Production on Sun Apr 19 21:14:45 2015
Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.
一般大家对于glogin的额外设置是:
set feedback on
define _editor=vi  
set serveroutput on size 1000000  
set trimspool on  
set long 5000  
set linesize 300  
set pagesize 9999  
column plan_plus_exp format a80  
column global_name new_value gname  
set termout off  
define gname=idle  
column global_name new_value gname  
select lower(user) || '@' || substr(global_name, 1, decode( dot, 0, length(global_name),  
dot-1) ) global_name  
from (select global_name,instr(global_name,'.') dot from global_name );  
set sqlprompt '&gname> '  
set termout on 

简单实用一把,还是很不错的。
[ora11g@oel1 admin]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Sun Apr 19 21:18:55 2015
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
idle> exit
[ora11g@oel1 admin]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Sun Apr 19 21:19:07 2015
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
sys@TEST11G> 

这个时候我注意到一个细节,很细小的地方,可能是自己敏感了。glogin.sql的时间戳和使用sqlplus的时间戳还是差别很大的。sqlplus中是 1982,2009
--
-- Copyright (c) 1988, 2005, Oracle.  All Rights Reserved.
--
-- NAME
--   glogin.sql
我们来看看是怎么回事。简单string一把sqllplus看看里面大概都有些啥。首先如果是我来写这个部分,肯定不会在代码层写死,肯定是通过配置来做。
如果单纯看下面的相关内容,感觉关联的就是libsqlplus.so了。
[ora11g@oel1 bin]$ strings sqlplus
/lib/ld-linux.so.2
libsqlplus.so
saficxa
afidrv
_Jv_RegisterClasses
__gmon_start__
libclntsh.so.11.1
__intel_new_proc_init
_fini
libnnz11.so
libdl.so.2
libm.so.6
libpthread.so.0
libnsl.so.1
libc.so.6
__libc_start_main
_edata
__bss_start
_end
/u01/app/ora11g/product/11.2.0/dbhome_1/lib
GLIBC_2.0
PTRh`
PPPPPj
[^_]

这个文件在$ORACLE_HOME/lib下面,我们来简单看看。
对于这种二进制文件,有时候查看还是有不少的收获的。
使用vi来查看,找到下面的一段。
^@FMDy Mon dd FMhh24:mi:ss YYYY^@^@^@ on ^@^@^@^@%d.%d.%d.%d.%d^@^@: Release ^@^@ 2009^@^@^@^@%d.%d.%d^@^@^@^@Production^@^ @Copyright (c) 1982, %s, Oracle.  All rights reserved.^@^@^@sqlerror^@^@^@^@continue^@^@^@^@oserror^@WHENEVER OSERROR %s
可以看到1982出现了,2009是通过红色的部分传入的参数。
我们甚至可以为了测试一下,可以简单修改一下这些内容。比如我们修改为1983年吧。
[ora11g@oel1 lib]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Sun Apr 19 21:36:51 2015
Copyright (c) 1983, 2009, Oracle.  All rights reserved.
idle> exit

当然只是为了测试一下而已,不要为了个性而做改动,如果修改不当,很可能会得到如下的错误。
[ora11g@oel1 lib]$ sqlplus /nolog
Segmentation fault

这个时候我们再加把劲,我们知道desc是sqlplus中特有的命令。我们看看是怎么描述的。
^@DEFINE %-15s = %s (NUMBER)
^@DEFINE %-15s = %s (DATE)
^@^@^@DEFINE %-15s = %s (BUFFER)
^@DEFINE %-15s = %s (BINARY_DOUBLE)
^@^@DEFINE %-15s = %s (BINARY_FLOAT)
^@^@^@DESCRIBE^@^@^@^@8.0^@%s(%d)^@^@BYTE^@^@^@^@%s(%d %s)^@^@^@Argument Name^@^@^@Type^@^@^@^@In/Out^@^@Default?^@^@^@^@ RETURNS ^@^@^@ENCRYPT^@NOT NULL^@^@^@^@ %s %8s %s
^@%-*s^@^@^@^@ %%-%2ds %%-%1ds %%s%1s^@ FINAL^@^@%s MEMBER PROCEDURE %s
可以看到输入输出参数的情况和使用desc命令是一致的。
sys@TEST11G> desc cat
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 TABLE_NAME                                            NOT NULL VARCHAR2(30)
 TABLE_TYPE                                                     VARCHAR2(11)



目录
相关文章
|
3月前
|
存储 数据采集 Oracle
oracle connect by很强,但是要慎用,不然有你哭的时候
oracle connect by很强,但是要慎用,不然有你哭的时候
55 0
|
1月前
|
关系型数据库 数据库 C++
嵌入式数据库sqlite3【基础篇】基本命令操作,小白一看就懂(C/C++)
嵌入式数据库sqlite3【基础篇】基本命令操作,小白一看就懂(C/C++)
|
4月前
|
Oracle 关系型数据库 数据库
oracle 重启步骤及踩坑经验
oracle 重启步骤及踩坑经验
115 0
|
11月前
|
SQL 测试技术 数据库
软件测试|SQL数据库相关操作,这篇文章就够了
软件测试|SQL数据库相关操作,这篇文章就够了
91 0
|
Oracle 关系型数据库 Java
惊呆,Oracle的这个坑竟然让我踩上了
惊呆,Oracle的这个坑竟然让我踩上了
惊呆,Oracle的这个坑竟然让我踩上了
|
SQL Oracle 安全
我室友打了一把王者6分钟我搞成了Oracle12c的安装以及如何创建数据库
我室友打了一把王者6分钟我搞成了Oracle12c的安装以及如何创建数据库
131 0
我室友打了一把王者6分钟我搞成了Oracle12c的安装以及如何创建数据库
|
SQL 存储 安全
有了这 4 款工具,老板再也不怕我写烂SQL了 良许Linux 2020-04-13 07:33
对于正在运行的mysql 性能如何?参数设置的是否合理?账号设置的是否存在安全隐患? 是否了然于胸? 俗话说工欲善其事,必先利其器,定期对你的MYSQL数据库进行一个体检,是保证数据库安全运行的重要手段。
100 0
有了这 4 款工具,老板再也不怕我写烂SQL了 良许Linux 2020-04-13 07:33
|
SQL C# UED
懒人小技巧, Toad 常用偷懒方法
懒人小技巧, Toad 常用偷懒方法
210 0
|
SQL Linux 程序员
说了你不信!用 SQL查 Linux日志,真的好用到飞起
说了你不信!用 SQL查 Linux日志,真的好用到飞起
340 0
说了你不信!用 SQL查 Linux日志,真的好用到飞起
|
JavaScript 前端开发 Java
我用ABAP做过的那些无聊的事情
国庆大假马上就要来临了,我们聊点轻松的话题,关于假期。 Jerry的成都同事李贝宁(Li Ben), 《SAP成都研究院李三郎:SCP Application Router简介》的作者,有一次11月份的时候和Jerry一起去德国出差,不解地问到:德国好歹也有八千多万人口,怎么街上冷冷清清的几乎看不到人呢? 对于这个问题Jerry也没有答案。
2233 0