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

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2015-04-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏乐沙弥的世界

使用pt-table-checksum校验MySQL主从复制

pt-table-checksum是一个基于MySQL数据库主从架构在线数据一致性校验工具。其工作原理在主库上运行, 通过对同步的表在主从段执行checksum...

2322
来自专栏数据和云

案发现场:被注入的软件及 ORA-600 16703 灾难的恢复

最近帮助一个客户恢复数据库,遇到了如下这个问题。让我们再一次惊醒于数据安全,如果不做好防范,问题总是会来得猝不及防。

2544
来自专栏CSDN技术头条

MySQL 5.7 X Plugin:流水线技术vs.并行查询技术

本文将以MySQL 5.7 X Plugin为例,对比分析流水线(pipelining)和并行查询技术。 另一篇博文《MySQL 5.7 X Plugin支持异...

3866
来自专栏乐沙弥的世界

Oracle 基于用户管理恢复的处理

Oracle支持多种方式来管理数据文件的备份与恢复来保证数据库的可靠与完整。除了使用RMAN工具以及第三方备份与恢复工具之外,基于

592
来自专栏数据和云

Oracle数据库的初始化与跟踪学习方法

编辑说明:《Oracle性能优化与诊断案例精选》出版以来,收到很多读者的来信和评论,我们会通过连载的形式将书中内容公布出来,希望书中内容能够帮助到更多的读者朋友...

3959
来自专栏乐沙弥的世界

基于同一主机配置Oracle 11g Data Guard(logical standby)

      Oracle Data Guard逻辑备库是利用主库的一个备份首先建立一个物理备库,然后再将其转换为逻辑备库。这之后主库将日志传递到备库,备库利用l...

891
来自专栏乐沙弥的世界

启用用户进程跟踪

仅仅需要标识该会话并为该会话启用跟踪(专用模式为一对一模式,即一个用户进程对应一个服务器进程)

922
来自专栏乐沙弥的世界

Oracle OWI 等待事件视图(v$session_wait/v$session_event/v$system_event)

    通常情况下,用户提交一条SQL语句,总会存在这样或那样的等待事件。也就是说由于所需资源被占用导致进程不得不处于等待状态。Oracle为我们提供了获取这些...

1003
来自专栏「3306 Pai」社区

浅析ProxySQL用户管理

对于读写分离特别重要,保证了同一个事务中所有的语句都会路由到同一组示例,防止出现同一个事务中,上下文数据不一致的情况。例如,在不开启这个属性的情况下:

3011
来自专栏杨建荣的学习笔记

分分钟搭建MySQL Group Replication测试环境(r11笔记第82天)

最近看了下MySQL 5.7中的闪亮特性Group Replication,也花了不少做了些测试,发现有些方面的表现确实不赖。当然要模拟这么一套环境还是需...

3787

扫码关注云+社区

领取腾讯云代金券