[20180918]文件格式與sql_id.txt

来源:https://www.cnblogs.com/lfree/archive/2018/09/20/9683047.html
-Advertisement-
Play Games

[20180918]文件格式與sql_id.txt--//記錄測試中遇到的一個問題.這是我在探究SQL*Net more data from client遇到的問題.--//就是實際oracle會把windows的腳本文件轉化為linux的文本格式.1.環境:SCOTT@test01p> @ver1 ...


[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字元.



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 前往ORACLE官網下載最新版本的Java JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html,預設下載到Downloads文件夾。 2. 在合適的路徑下創建文件夾用來存儲Java JDK,本例選擇在/o ...
  • 1.數據導出exp、expbd和imp、impbd 區別: exp,imp:既可以在客戶端執行也可以在服務端執行,效率慢於expbd、impbd expbd、impbd:只能夠在服務端執行,impbd只能導入expbd導出的文件,impbd不可以 2.不論你用DOS視窗也好,PLSQL工具也好,最終 ...
  • 關於SQL Server的查詢提示OPTION (OPTIMIZE FOR UNKNOWN) ,它是解決參數嗅探的方法之一。 而且對應的SQL語句會緩存,不用每次都重編譯。關鍵在於它的執行計劃的準確度問題, 最近在優化的時候,和同事對於這個查詢提示(Query Hint)有一點分歧,遂動手實驗驗證、... ...
  • 博客來源於https://baijiahao.baidu.com/s?id=1610581108528334819&wfr=spider&for=pc 一、概述 資料庫鎖定機制簡單來說,就是資料庫為了保證數據的一致性,而使各種共用資源在被併發訪問變得有序所設計的一種規則。對於任何一種資料庫來說都需要 ...
  • 版本信息 ubuntu版本:16.04.1 mysql server版本:5.7.23 安裝 先查看一下apt可獲取的mysql版本 看到結果裡面有這兩個package,我們安裝mysql server就可以了,可以看到提供的mysql server是5.7.23的。 安裝apt提供的mysql 開 ...
  • 一、現象 發運車次調用發車介面時發生異常,後臺拋出資料庫死鎖日誌。 二、原因分析 通過日誌可以看出事務T1等待 heap no 8的行鎖 (X locks 排他鎖) 事務T2持有heap no 8的行鎖,等待heap no 7的行鎖 兩個更新運單sql發生死鎖。 三、代碼追蹤 發車介面:/ltl/l ...
  • 1.1 前言 MySQL對於很多Linux從業者而言,是一個非常棘手的問題,多數情況都是因為對資料庫出現問題的情況和處理思路不清晰。在進行MySQL的優化之前必須要瞭解的就是MySQL的查詢過程,很多的查詢優化工作實際上就是遵循一些原則讓MySQL的優化器能夠按照預想的合理方式運行而已。 今天給大家 ...
  • (1)LIMIT子句(MySql) LIMIT 子句用於規定要返回的記錄的數目,一般和Order By一起使用 經常用於數據的分頁查詢,但是一旦數據量一大,limit的性能就會急速下降 格式:select * from table limit m,n 其中m代表表的某一行數據,n表示的是要查找的多少 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...