《防不勝防:一個空格在數據庫里可能引發的N重血案》要點:
本文介紹了防不勝防:一個空格在數據庫里可能引發的N重血案,希望對您有用。如果有疑問,可以聯系我們。
作者:楊廷琨(網名 Yangtingkun);云和恩墨 CTO,Oracle ACE Director,ACOUG 核心專家.
編輯手記:在Oracle DBA的職業生涯中,無數看似簡單的一個疏忽就能夠導致致命的故障和數據損失,一個空格看似很小,可是如果在腳本運行環境中,就絕對不容輕視.
你可能還記得我們分享過的一個真實案例:一個空格引發的血案.
今天我們來看另外一個和空格有關的案例,基于11.2.0.3版本的測試:
這是一個 11.2.0.3 的 sqlplus 客戶端,那么以下這個簡單的查詢結果是什么?
好,我承認是在故弄玄虛,結果就是簡單到不能再簡單的1,那么問題來了,上面第二個查詢的結果是什么?
不要扔磚,雖然結果還是意料之內的,但是見證奇跡的時刻馬上就要到了,這第三個查詢的結果是什么?
這個結果是不是很2 ?
這個語句和上面第二個語句只是相差了一個空格,結果是完全不同的.對于第二個語句而言,注釋并沒有對語句產生任何的影響;而對于第三個語句,實際上 Oracle 并沒有把這個語句作為包含注釋的語句看待,實際上 sqlplus 運行的是/,也就是將緩存中的語句再運行一次,而完全忽略了/之后的內容.
可能有些人認為這個 bug 對于系統的影響不大,而如果在數據庫中運行 .sql 文件,或者通過 shell 調用 sql 腳本,那么這個問題出現的可能性就大大增加了.
考慮一下極端的情況,這個問題可能帶來哪些危害.最明顯的莫過于使得上一個運行的 SQL 重復執行.
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/4494.html