由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)

时间: 2024-11-02 06:25:05

由sqlplus中的一个小细节所做的折腾的相关文章

js浏览器-javascript中的一个小问题(浏览器问题)

问题描述 javascript中的一个小问题(浏览器问题) 求助 javascript中的一个小问题< html> <head> <title>Ajax 简单的服务器请求 <script type=""text/javascript""> var xmlobj; function CreateXMLHttpRequest() { if(window.ActiveXObject) //如果当前浏览器支持ActiveXOb

代码-如何解决Android中的一个小问题?

问题描述 如何解决Android中的一个小问题? 我在写android代码时候如下一段代码: public void cc(){ String aa=getHtml();//有点耗时 ......... } 在执行过程之中,程序还未等aa返回值时,就执行下面代码.如何让aa执行完后再执行下面代码. 解决方案 你可以这样的 public void cc(){ String aa=getHtml(); if(aa!=null){ //这里放下面执行的代码,这样就能等你上面执行完再执行下面的了,你看行

关于delphi7开发中的一个小问题

问题描述 关于delphi7开发中的一个小问题 大家好,因为我是刚刚接触delphi7的开发,我现在有一个需求,比如adoquery1连接了 数据库A表显示数据到dbgrid上,我现在要点击一个button,然后从dbgrid上抽数据处理后再通过 adoquery2 将数据插入数据库的B表,请问能直接拖两组adoquery, 然后在button的click事件里面编码实现么,如果可以的话,能吧主要的代码写下么,谢谢啦! 解决方案 1.在窗体中,设置二组adoquery和datasource分别绑

javascript中的一个小问题

问题描述 javascript中的一个小问题 function clickButton() { dynamicInsert(""dynamic.js""); show(); } <input type=""button"" value=""OK""> 这个是html界面中的一个按钮,点击的时候动态载入一段脚本 /***动态的插入一个脚本*/function dynamicIn

c++ 编程问题-C++类中的一个小问题,求大神指教

问题描述 C++类中的一个小问题,求大神指教 请问下面两段输出结果一样的代码在内存层面上有什么不同,有点搞不清. 代码1: 1 #include 2 using namespace std; 3 struct Test{ 4 int a; 5 Test(int a){ 6 Test::a=a; 7 } 8 }; 9 int main(){ 10 Test t(100); 11 cout<<t.a<<endl; 12 } 代码2: 1 #include 2 using namespa

android-Android中调用一个小的计时程序?

问题描述 Android中调用一个小的计时程序? 这个程序有对应的Timer_layout.xml,这个布局文件以include的方式放在另外一个xml文件中, 现在想在MainActivity中调用Timer.java中的按钮计时方法,请问怎么调用呀? public class Timer extends Activity implements View.OnClickListener{ <声明部分> protected void onCreate(Bundle savedInstanceS

c语言-C语言中的一个小问题。。

问题描述 C语言中的一个小问题.. short为16位,long为32位,int为16位是什么意思啊?各位大神帮忙解释一下! 解决方案 上面几位回答的都挺好的,简单的说你可以把他们都理解为存储数字的容器.long肯定能装下最多的,int就少, 除此之外, 就是能不能处理小数点后面数字的问题了,集体情况你可已在写代码的时候试一下,加深印象, 解决方案二: 就是说这种编译器下每种数据类型占用存储的大小.16位就是2个字节. 你可以用sizeof(类型)*8得到.每个编译器不同. 比如你这个int是1

分享站长做BBS论坛的优化的一个小细节

农民工大概有两天没有写原创文章了,昨天和群里的朋友在YY交流了一下,主要都是热心的朋友帮忙解答站一排论坛最近被百度降权的讨论.这里先感谢一下长沙的西风对站一排的大力支持.我也根据自己的一些实战经历想分享一下论坛优化的一些看法.同时针对最近不少站长朋友的论坛被降权,笔者今天想说说关于做论坛的一些优化的小细节. 对于这次百度最新推出的算法我不做过多的说明,个人觉得其中的一点对我们做论坛的朋友是值得关注的--大量 无价值翻页. 具体公布内容如下: 大网站由于内容过多势必会有一些翻页机制,而有些翻页由于

关于jquery ajax 调用带参数的webservice返回XML数据一个小细节_jquery

后来在一个不起眼的小站找到一个帖子,某个人的一个建议提醒了我. 我原来的代码是这样写的: 错误代码 复制代码 代码如下: $.ajax({ type: "post", url: "_service.asmx/getDataFromATable", data:" { tablename: temp }", dataType: "XML" ... WS是这样写的: webservice 复制代码 代码如下: [WebMethod]