[20180918]文件格式与sql_id.txt
[20180918]文件格式与sql_id.txt
--//记录测试中遇到的一个问题.这是我在探究SQL*Net more data from client遇到的问题.
--//就是实际oracle会把windows的脚本文件转化为linux的文本格式.
1.环境:
SCOTT@test01p> @ver1
PORT_STRING VERSION BANNER CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0 12.1.0.1.0 Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production 0
--//unix与dos的文本格式存在区别,就是每行的结尾windows是0x0d 0x0a.而linux是0x0a.
D:\temp\test>cat dept_dos.txt
select
*
from
dept;
D:\temp\test>cat dept_unix.txt
select
*
from
dept;
--//这样看上去2个文件一样的实际上.实际上1个dos格式,1个unix格式.
D:\temp\test>ls -l dept*
-rw-rw-rw- 1 user group 24 Sep 19 22:58 dept_dos.txt
-rw-rw-rw- 1 user group 20 Sep 19 23:01 dept_unix.txt
--//unix格式的对应文件少4个字节.正好4行.
2.测试:
SCOTT@test01p> @ dept_dos.txt
DEPTNO DNAME LOC
---------- -------------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS DALLAS
SCOTT@test01p> @ dpc '' ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID 3knyh7z401k69, child number 0
-------------------------------------
select * from dept
Plan hash value: 3383998547
---------------------------------------------------------------------------
| Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 3 (100)| |
| 1 | TABLE ACCESS FULL| DEPT | 4 | 80 | 3 (0)| 00:00:01 |
---------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
1 - SEL$1 / DEPT@SEL$1
--//sql_id=3knyh7z401k69.
SCOTT@test01p> @ dept_unix.txt
DEPTNO DNAME LOC
---------- -------------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS DALLAS
SCOTT@test01p> @ dpc '' ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID 3knyh7z401k69, child number 0
-------------------------------------
select * from dept
Plan hash value: 3383998547
---------------------------------------------------------------------------
| Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 3 (100)| |
| 1 | TABLE ACCESS FULL| DEPT | 4 | 80 | 3 (0)| 00:00:01 |
---------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
1 - SEL$1 / DEPT@SEL$1
--//sql_id=3knyh7z401k69.
--//可以发现sql_id一样的.如果你使用一些网络抓包软件tcpdump,也可以验证这个问题.
SCOTT@test01p> select sql_id,hash_value,sql_text,executions from v$sql where sql_id='3knyh7z401k69';
SQL_ID HASH_VALUE SQL_TEXT EXECUTIONS
------------- ---------- ------------------ ----------
3knyh7z401k69 3355494601 select * from dept 2
--//这样执行2次.
SCOTT@test01p> select distinct name,hash_value,full_hash_value from V$DB_OBJECT_CACHE where hash_value='3355494601';
NAME HASH_VALUE FULL_HASH_VALUE
-------------------- ---------- --------------------------------
select * from dept 3355494601 de2b693a53b60a083953d03fc800c8c9
SCOTT@test01p> select dump(sql_text,16) c70 from v$sql where sql_id='3knyh7z401k69';
C70
----------------------------------------------------------------------
Typ=1 Len=18: 73,65,6c,65,63,74,20,2a,20,66,72,6f,6d,20,64,65,70,74
--//注这里看到也是不一致的.里面有空格.可以在toad观察sql_fulltext.
--//建立文件aaa.txt ,xxd查看如下:
00000000: 7365 6c65 6374 0a2a 0a66 726f 6d0a 6465 select.*.from.de
00000010: 7074 00 pt.
--//在vim下执行:set binary,保存文件aaa.txt
D:\temp\test>cat aaa.txt | md5sum |sed "s/ -//" | D:\tools\Vim\vim80\xxd -r -p | od -t x4 | sed -n -e "s/^0000000 //" -e "s/ //gp"
de2b693a53b60a083953d03fc800c8c9
--//在linux下执行:
# echo -n -e 'select\n*\nfrom\ndept\0' |md5sum |sed "s/ -//" | xxd -r -p | od -t x4 | sed -n -e "s/^0000000 //" -e "s/ //gp"
de2b693a53b60a083953d03fc800c8c9
--//full_hash_value=de2b693a53b60a083953d03fc800c8c9一致.
--//再次验证oracle把执行文本转化为linux格式.也就是0x0d0x0a变成了0x0a.
3.上班在linux测试环境重复测试看看:
SCOTT@book> @ ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
$ unix2dos dept_dos.txt
unix2dos: converting file dept_dos.txt to DOS format ...
$ xxd -c 16 dept_dos.txt
0000000: 7365 6c65 6374 0d0a 2a0d 0a66 726f 6d0d select..*..from.
0000010: 0a64 6570 743b 0d0a .dept;..
--//注意看现在是dos格式.
SCOTT@book> @ dept_dos.txt
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SCOTT@book> @ &r/dpc '' ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID 3knyh7z401k69, child number 0
-------------------------------------
select * from dept
Plan hash value: 3383998547
---------------------------------------------------------------------------
| Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 3 (100)| |
| 1 | TABLE ACCESS FULL| DEPT | 4 | 80 | 3 (0)| 00:00:01 |
---------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
1 - SEL$1 / DEPT@SEL$1
--//sql_id=3knyh7z401k69,与前面一样.
--//通过tcpdump抓包看看.
# tcpdump -l -i eth0 -s 0 -A port 1521 and host 192.168.98.6 -nn -w t.txt
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
^C5 packets captured
6 packets received by filter
0 packets dropped by kernel
# xxd -c 16 t.txt
0000000: d4c3 b2a1 0200 0400 0000 0000 0000 0000 悦..............
0000010: ffff 0000 0100 0000 34f7 a25b 63d9 0600 ......4..[c?.
0000020: 4901 0000 4901 0000 a0d3 c1f4 713c 0cda I...I....恿魆<.?
0000030: 41b6 4e07 0800 4500 013b 2aa2 4000 7f06 A.N...E..;*.@...
0000040: 8875 c0a8 6206 c0a8 644e c9b9 05f1 87fc .u?b.?dN?.??
0000050: 15d1 73b5 7d4c 5018 3f02 0666 0000 0113 .裺祡LP.?..f....
0000060: 0000 0600 0000 0000 1169 20fe ffff ffff .........i ?
0000070: ffff ff01 0000 0002 0000 0003 5e21 6180 .........^!a.
0000080: 0000 0000 0000 feff ffff ffff ffff 1200 ......?..
0000090: 0000 feff ffff ffff ffff 0d00 0000 feff ..?....?
00000a0: ffff ffff ffff feff ffff ffff ffff 0000 ?..
00000b0: 0000 0100 0000 0000 0000 0000 0000 0000 ................
00000c0: 0000 0000 0000 0000 0000 0000 0000 feff ..............?
00000d0: ffff ffff ffff 0000 0000 0000 0000 feff ........?
00000e0: ffff ffff ffff feff ffff ffff ffff feff ??
00000f0: ffff ffff ffff 0000 0000 0000 0000 feff ........?
0000100: ffff ffff ffff feff ffff ffff ffff 0000 ?..
0000110: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0000120: 0000 0000 0000 0000 0000 1273 656c 6563 ...........selec
~~~~~~~~~~~~~~
0000130: 740a 2a0a 6672 6f6d 0a64 6570 7401 0000 t.*.from.dept...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0000140: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0000150: 0000 0000 0000 0000 0001 0000 0000 0000 ................
0000160: 0000 8000 0000 0000 0000 0000 0000 0000 ................
--//注意前面的0x12=18表示sql语句长度.
$ xxd -c 32 dept_dos.txt
0000000: 7365 6c65 6374 0d0a 2a0d 0a66 726f 6d0d 0a64 6570 743b 0d0a select..*..from..dept;..
--//上下对比就明白在传输到服务端时已经丢弃了0x0d字符.
[20180918]文件格式与sql_id.txt的更多相关文章
- [20191101]通过zsh计算sql语句的sql_id.txt
[20191101]通过zsh计算sql语句的sql_id.txt 1.简单介绍以及测试使用zsh遇到的问题:--//前段时间写的,链接http://blog.itpub.net/267265/vie ...
- [20191011]通过bash计算sql语句的sql_id.txt
[20191011]通过bash计算sql语句的sql_id.txt --//当我知道如何通过bash计算sql语句的full_hash_value ,就很想通过bash编程计算sql_id.当时受限 ...
- Hadoop MapReduce执行过程详解(带hadoop例子)
https://my.oschina.net/itblog/blog/275294 摘要: 本文通过一个例子,详细介绍Hadoop 的 MapReduce过程. 分析MapReduce执行过程 Map ...
- Oracle 之SQL_Loader
SQL*LOADER是ORACLE的数据加载工具,通常用来将操作系统文件迁移到ORACLE数据库中.SQL*LOADER是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径(DIRECT,PAR ...
- PHP-CS-Fixer:格式化你的PHP代码
简介 良好的代码规范可以提高代码可读性,团队沟通维护成本.最推荐大家遵守的是 php-fig(PHP Framework Interop Group) 组织定义的 PSR-1 . PSR-2 两个.不 ...
- opencv人脸检测分类器训练小结
这两天在初学目标检测的算法及步骤,其中人脸检测作为最经典的算法,于是进行了重点研究.该算法最重要的是建立人脸检测分类器,因此我用了一天的时间来学习分类器的训练.这方面的资料很多,但是能按照一个资料运行 ...
- iOS 9之SFSafariViewController
金田( github 示例源码) 有时候需要在App内部打开一个网页,例如为了展示公司官网,产品列表信息,Facebook,微博等.以前都是使用 UIWebView,iOS 8引入了WKWebView ...
- Mysql 使用 select into outfile
Mysql支持将查询结果到处 默认语法 select .. from table into outfile "filepath\filename.txt"; 如果在执行的过程中遇 ...
- Open-Falcon 监控系统监控 MySQL/Redis/MongoDB 状态监控
背景: Open-Falcon 是小米运维部开源的一款互联网企业级监控系统解决方案,具体的安装和使用说明请见官网:http://open-falcon.org/,是一款比较全的监控.而且提供各种API ...
随机推荐
- 用dos命令导出一个文件夹里面所有文件的名字(装逼利器)
首先,当然是在相关的文件夹打开dos命令窗口. 然后,输入如下命令:dir/b >a.txt 如果你非常了解dos命令,那么你一定会觉得这个东西简单到爆,而且我的理解和猜想都有些无知. 但如果你 ...
- Java并发编程之AQS
一.什么是AQS AQS(AbstractQueuedSynchronize:队列同步器)是用来构建锁或者其他同步组件的基础框架,很多同步类都是在它的基础上实现的,比如常用的ReentrantLock ...
- 【转载】ucos临界段
其实很简单: 临界段就是不可中断的程序段,比如从UART中读取当前传递回来的值,如果有UART中断,此时这个值又会改变.同样临界段就是保护这类全局变量,如在读取时间节拍时,不应该被时钟更新时钟 ...
- Disruptor 为什么这么快?
为什么Disruptor不使用队列来实现RingBuffer 队列有两个指针,一个指向队头,一个指向队尾.如果有超过一个生产者想要往队列里放东西,尾指针就将成为一个冲突点,因为有多个线程要更新它. ...
- Go语言远程执行ssh命令简单封装(支持带交互命令)
使用包:golang.org/x/crypto/ssh 以下封装一个发送命令的Cli结构体 type Cli struct { IP string //IP地址 Username string //用 ...
- python三大神器之pip
pip是一款管理python各类包和库的工具,非常好用.下文介绍常用的一些命令. ● 安装:pip install 库名 也可以指定版本:pip install 库名=版本 ● 卸载:pip unin ...
- win10创建Ubuntu子系统
有很多学弟们问我怎么安装Linux系统,刚开始是准备推荐VM的,但是突然想到window有个新功能,在win10中包含了Linux子系统,所以就写了这个教程,一是来给学弟们一个教程,顺便也体验一下这个 ...
- Linux下的java虚拟机性能监控与故障处理命令
java包中提供了很多监控JVM的工具类,作为java程序员必须得掌握常用的几个工具,下面是几个常用的JVM性能监控与故障处理工具的介绍与使用. 1.jstack 该命令用于生成当前时刻虚拟机的线程快 ...
- Perl的浅拷贝和深度拷贝
首先是深.浅拷贝的概念: 浅拷贝:shallow copy,只拷贝第一层的数据.Perl中赋值操作就是浅拷贝 深拷贝:deep copy,递归拷贝所有层次的数据,Perl中Clone模块的clone方 ...
- scala的安装及使用
前提你的集群机器已经安装好jdk1.7.0_79.hadoop-2.7.3: 配置中使用了master01.slave01.slave02.slave03: 文中的所有操作都是在之前的文章http:/ ...