由sqlplus中的一个小细节所做的折腾(r5笔记第11天)
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)
- Andrew Ng机器学习课程笔记--week6(精度&召回率)
- Andrew Ng机器学习课程笔记--week5(下)
- silverlight: "[HtmlPage_NotEnabled] 调试资料字符串不可用"的解决
- Andrew Ng机器学习课程笔记--week5(上)
- Silverlight Telerik控件学习:带CheckBox复选框的树形TreeView控件
- Andrew Ng机器学习课程笔记--week4(神经网络)
- javascript:FF/Chrome 与 IE 动态加载元素的区别
- 腾讯云发布企业级微服务中间件TSF,助企业构建亿级互联网应用架构
- java学习:字符串比较“==”与“equals”的差异及与c#的区别
- 纯C语言程序员写的编程新手入门基础小游戏之最炫酷推箱子
- Oracle BIEE (Business Intelligence) 11g 11.1.1.6.0 学习(2)RPD资料档案库创建
- Oracle BIEE (Business Intelligence) 11g 11.1.1.6.0 学习(3)创建一个简单的分析
- 请查收!这里有一封信鸽传给您的信
- Oracle BIEE (Business Intelligence) 11g 11.1.1.6.0 学习(4)创建多维钻取分析
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 8086汇编语言——循环的使用
- axios api
- 中秋节到了,送你一个Python做的Crossin牌“月饼”
- Matlab系列之符号运算(上)(祝大家双节快乐~)
- qiankun vue3.0 保持组件状态 keep-alive 的使用
- 基于消息传递的并发模型
- 30行Python代码实现3D数据可视化
- Erlang入门路线
- unix domain socket
- 分享我的k8s快速学习过程
- 搭建Hadoop3集群
- 使用Python语言写Hadoop MapReduce程序
- Hadoop3单机和伪分布式模式安装配置
- Matlab系列之符号运算(下)
- Hadoop、MapReduce、HDFS介绍