Magic Number_咖啡寶貝???_0xCAFEBABE


最近由於在研究如何去撰寫Trigger avoid without where-clause

使用Xmind繪製





針對一些改善方案要去研究如何去寫這段防範 Trigger

說實在的  根本沒捨麼碰過!!!!
所以算是一項全新挑戰


爬到了
Enforce Where clause on every update statement
https://www.sqlservercentral.com/Forums/Topic1076396-145-1.aspx



這篇英文文章
下方有一位十分英明的大大Gianluca Sartori

寫的一段SQL 剛好是覺得可以派的上用場的

只不過.......

只能說 程度不太夠  還真不太能知道Gianluca Sartori大大在寫捨麼

勉強可以知道一些判斷邏輯、流程和變數使用

只不過突然看到一個感覺有點詭異的數字內容
0xCAFEBABE(「cafe babe」)
這個 字面直翻的  "咖啡寶貝"  到底是捨麼?????

T-SQL 區塊

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
CREATE TRIGGER MyTrigger
   ON  MyTable
   FOR INSERT,DELETE,UPDATE
AS 
BEGIN

   SET NOCOUNT ON;

   DECLARE @program_name nvarchar(128)

   SELECT @program_name = program_name 
   FROM sys.dm_exec_sessions 
   WHERE session_id = @@spid

   -- Is it SSMS? 
   IF @program_name LIKE '%Management%Studio%' 
   BEGIN
      IF CONTEXT_INFO() IS NULL OR CONTEXT_INFO() <> 0xCAFEBABE
      BEGIN
         -- Accidental update? No, thanks.
         RAISERROR('No updates allowed here!!',16,1)
         ROLLBACK
         RETURN
      END
      ELSE
      BEGIN
         -- Explicit update, let through and reset CONTEXT_INFO.
         SET CONTEXT_INFO 0x0
      END
   END

END

GO




後來查詢了一下 wiki 得知
是一種常見、有名的 magic number其中之一
Mach-O格式的文檔之中常會用來作為
通用二進位目標(Universal binary)文件之標註用途

在JAVA中也用於所有class文件開頭

0xCAFEBABE 
是十進制的這個數字 3405691582
轉為十六進位後的結果




Mach-O格式的文檔
是指捨麼呢???
其實簡單來說
就是一種用於Mac OS作業系統環境的執行檔案文件格式


其層級上就跟
Linux 或 Unix的 ELF格式  (Executable and Linking Format)
是有點類似的
算是一種目的檔格式

於 Mach-O(Mach Object File Format) 的整個格式架構上
共細分成三個區塊
1.Header
2.Load commands
3.Data

為了提升效能,目的檔
通常儲存格是會避免文字格式,而是儲存為二進位格式。
主要就在於文字格式會造成IO讀取會讓效能變差~~~~

ELF可用來記錄目的檔 (object file)執行檔 (executable file)動態連結檔 (share object)
等等


那我在猜測可能是跟MS SQL Server底層運作機制有關
【T-SQL进阶】02.理解SQL查询的底层原理

於此篇有位對岸的大大很棒的分享了一些知識

當中有探討到事實上於MS SQL 底層
有一個 Buffer Pool
主要保有 所有緩存(命令執行計畫、資料緩存..etc)

他的示意圖畫的十分清楚值得學習
有興趣可以去看看


這邊摘習了關於T-SQL於用戶端的SSMS(SQL Server Management Studio)
執行的底層運作

會先傳至Server之網路介面
網路介面  和  用戶端介面 有一協議層
從客戶端下達指令去執行時
會先將此段 T-SQL 語句轉為 一種 TDS(Tabular Data Stream)的表格式資料流
客戶端發送TDS封包給協議層
協議層接收到TDS包後再去解壓
並遞送到關鍵引擎(包含三部分:命令解析器、查詢分析器、查詢執行器)中
分析封包裡包含了什麼指令請求
在此階段
命令解析器
會先去檢語法是否有錯 若有則回傳警訊
若無錯誤才繼續往下執行並將SQL語句轉為查詢樹給查詢分析器
查詢分析器到Buffer Pool檢查是否已經有曾經執行過的對應T-SQL執行計畫緩存
若有找到則直接從執行計畫緩存中讀取並傳給查詢執行器
沒有則在查詢執行器 中做優化並產出執行計畫存入Buffer Pool
(這也是為何同一段SQL語法  第一次下跟第二次下會發現第二次比較快的原因)
查詢執行器執行查詢
將執行計劃透過OLE DB介面傳給儲存引擎的資料訪問方法
資料訪問方法 則在去生出SQL Server可操作資料的執行程式碼並傳至緩衝區管理器
緩衝區管理器  在去讀取數據
之後在一層一層回推返回指令下達之結果給用戶端




參考連結:

Enforce Where clause on every update statement
https://www.sqlservercentral.com/Forums/Topic1076396-145-1.aspx


Hexspeak
https://zh.wikipedia.org/wiki/Hexspeak

通用二進位
https://zh.wikipedia.org/wiki/通用二进制

java魔法之0xCAFEBABE
https://leokongwq.github.io/2016/12/31/java-magic-0xCAFEBABE.html


Java Magic. Part 2: 0xCAFEBABE
http://mishadoff.com/blog/java-magic-part-2-0xcafebabe/

Why do we need a magic number in the beginning of the .class file?

编程中的「魔数」(magic number)是什么意思?平时我们能接触到哪些魔数?
https://www.zhihu.com/question/22018894/answer/151085970


mach-o文件格式分析
http://turingh.github.io/2016/03/07/mach-o文件格式分析/

趣探 Mach-O:文件格式分析
https://www.jianshu.com/p/54d842db3f69


Mach-O 文件格式探索
http://www.th7.cn/Program/IOS/201710/1260116.shtml


【T-SQL进阶】02.理解SQL查询的底层原理
http://www.cnblogs.com/jackson0714/p/SQL_Query_Mechanism.html


[MS-TDS]: Tabular Data Stream Protocol

https://msdn.microsoft.com/zh-tw/library/dd304523.aspx


sys.dm_exec_sessions (Transact-SQL)

https://docs.microsoft.com/zh-tw/sql/relational-databases/system-dynamic-management-views/sys-dm-exec-sessions-transact-sql


CONTEXT_INFO (Transact-SQL)

https://docs.microsoft.com/zh-tw/sql/t-sql/functions/context-info-transact-sql


SET CONTEXT_INFO (Transact-SQL)

https://docs.microsoft.com/zh-tw/sql/t-sql/statements/set-context-info-transact-sql


sys.dm_exec_sessions – Day 30 – One DMV a Day

http://www.sqlservergeeks.com/sys-dm_exec_sessions/






留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

(2021年度)駕訓學科筆試準備題庫歸納分析_法規是非題