1. 程式人生 > >足球與oracle系列(6):伴隨建庫的亞洲盃——加油中國隊

足球與oracle系列(6):伴隨建庫的亞洲盃——加油中國隊

原創作品,出自 “深藍的blog” 部落格,歡迎轉載,轉載時請務必註明以下出處,否則追究版權法律責任。

        黑龍江的建庫之旅,讓北漂的我有了一段喘息和舒緩的平坦期。更高興的是在緊張的工作之餘,就在未留意間,亞洲盃開賽了。

       今天帶著一種期待中國隊下一個亞洲盃對手的心態,看了A組的這場韓國對澳大利亞的焦點戰。讓我沒有想到的是,先佔據主動權的竟然是韓國隊,雖然澳大利亞失球后將老將卡希爾派上了場,並且之後也開始了一股又一股潮水般的反撲,但最終也沒能改變結果。隨著巴林的主裁判吹響比賽結束的哨聲,韓國隊以1:0的比分戰勝了奪冠大熱門澳大利亞隊。“演雜”了的澳大利亞人敗給了我們的“亞洲”本土球隊,雖然有一絲欣慰,但另一方面,也就意味著在八強淘汰賽中,澳大利亞將成為我們的下一個對手。面對這隻被視為最俱實力與主場優勢的球隊,我們將有一場硬仗要打了。

       繁雜的工作中,腦海中略過一絲絲的閃光點,想想這中國隊的比賽與oracle技術或多或少有著那麼一點點的聯絡與對應。

點滴一:

建庫基礎操作:表空間、使用者、建表

足球比賽要素:戰術、球員、配合

1-1 表空間

CREATE TABLESPACE TBS_HYL_PERSON

    LOGGING

    DATAFILE '+OCR_DATA/HYL/TBS_HYL_PERSON ' SIZE 1000M AUTOEXTEND

    ON NEXT 100M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL

    SEGMENT SPACE MANAGEMENT AUTO;

--常用的建立表空間的sql

映射出中國隊的打法體系,使用雙後腰對後防的保護,在先前的兩場比賽裡,充分得到了體現,有沒有點規劃表空間佈局的意思,如下面:

對映到資料庫中的表空間規劃,有沒有點相近的地方,如下面:

1-2 使用者

CREATE USER hyl IDENTIFIED BY hyl

DEFAULT TABLESPACE TBS_HYL_PERSON

TEMPORARY TABLESPACE TBS_HYL_TEMP;

--常見的建立使用者的sql,預設表空間設定為TBS_HYL_PERSON,臨時表空間設定為TBS_HYL_TEMP

對映到中國隊,教練佩蘭和我們的小夥子們,像下面這樣中國隊的陣容:

圍繞在佩蘭主教練身邊的中國小夥子們,團結協作正是勝利的保障,回想起某一個大型應用系統下,那多使用者互相訪問、管理的場景,有沒有點相近,就像下面:

1-3 建表

create table TB_HYL_USER

(id varchar2(32),

name varchar2(32),

id_no number,

loadtime date default sysdate

)

tablespace TBS_HYL_PERSON

  pctfree 10

  initrans 1

  maxtrans 255

  storage

  (

    initial 64K

    next 8K

    minextents 1

    maxextents unlimited

  );

對於建表,我們在業務系統裡,會針對不同的業務設計不同的表空間,同樣在中國隊的比賽中,小夥子們也會有不同的進球方式,如任意球、角球、點球、直塞球、二過一、單刀球、世界波球等等。

點滴二:

建庫資料處理:常用的型別轉換、垃圾資料處理、重複資料處理

實戰的關注點:穩固戰術體系以慢制動、減少失誤、找準時機掌握比賽節奏以動制動

2-1 ORA-01861文字與格式字串不匹配

現象:Oracle插入時間時,報錯:ORA-01861:文字與格式字串不匹配

這個報錯往往出現在插入時間資料時,由於源端資料是諸如“2008/07/28”這種格式之類,在向DATE型別插入資料時,往往會報此類錯誤。

解決方法很簡單,使用to_date對其進行轉換即可,語法如:to_date('欄位名','yyyy-mm-dd hh24:mi:ss')

對映:足球比賽上,想想這種格式轉換關係,當對手的節奏變快時,我們中國隊採用的是掌握主動權的方式,通過控球將節奏壓下來。皮球就這樣在經過中國小夥子一次一次轉換之後,把比賽節奏成功的拉回到我們適應的節奏下。這就是穩固的戰術體系,以慢制動。

2-2時間類欄位出現垃圾值

這個其實很簡單,如果你在檢視資料時足夠細心,就會發現諸如2098年這類垃圾資料。所以我們要對其進行處理,如果是單純的時間超過,這個倒是比較好解決,如用以下指令,將其查找出來:

SQL> select dengjishijian from table1 where dengjishijian>to_date(20150101,yyyy-mm-dd);

--假設今天的時間是201511日,這樣很容易查看出時間超出當前的時間點的垃圾時間值

        除了這個比較簡單的情況外,有時我們也會遇到諸如“20130241”這類格式的資料,明顯2月份不會有41日,這也是垃圾資料,或有時出現了“2103111日”之類存在中文的,在做資料抽取時有時也需要處理才可以成功的插入到DATE型別的欄位下。我們可以編寫一個簡單的儲存過程,用來查找出這些垃圾欄位,舉個例子如下:

編寫儲存過程:

create or replace function isdate(p_in varchar2,f_in varchar2)

return varchar is

       scrub_dt date;

begin

       scrub_dt := to_date(p_in,f_in);

       return 'Y';

exception when others then

        return 'N';

end;

/

SQL> select start_date from FLUSH_TEST_DATE where isdate(start_date,'yyyymmddhh24miss') = 'N';

--執行這條語句,便可以查看出不符合數字日期格式的資料這裡的N正是呼叫了儲存過程中,把不符合日期格式的欄位丟擲來。

對映:在足球比賽中,失誤是在所難免的,但我們要儘量減少失誤,並且在某個失誤之後通過團隊的其它成員來彌補一個球員失誤帶來的致命後果。同樣,就像資料庫中的垃圾資料一樣,垃圾資料的產生有時產生是不可避免的,但這就需要我們靈活、正確處理才可以了。

2-3  完全重複資料

如果發現庫裡有重複資料,一定要同業務研發相關人員確認好後再做處理。

有時如果拋離開了業務,很可能錯誤理解重複資料的意義,因為也許產生的重複資料是有意義的。

在確認要刪除重複資料時,我們可以採取諸如下面這種方法用來查詢,舉例如:

SQL> select * from table_test where count_id in(select count_id from table_test group by count_id having count(count_id)>1);

--這個sql中的子查詢使用having作為條件查詢出某個欄位重複大於1count_id,然後再通過這個count_id,把滿足count_id欄位相同的資料查詢出來

對映:有時候資料庫中會出現完全重複的資料,這個有可能是資料來源於另外的資料庫,重複抽取造成的,這就需要我們做出判斷,並將重複資料儘快清除才可以,要以動制動。在中國隊的比賽中,我們也是這樣的,不能永遠都以慢制動,有時候需要以動制動,對抗烏茲別克的那場比賽,當烏茲別克以一球領先,並且想要控制住比賽節奏的時候,中國隊的小夥子利用速度衝出一次次有威脅的進攻,並且最後成功扭轉乾坤,這便是我們不只是會以慢制動,我們也可以以動制動。O(_)O哈哈~

點滴三:

上線業務的優化:關聯欄位索引建立

中國長遠的目標:為2018年俄羅斯世界盃預選賽練兵

建立索引

create index idx_TB_HYL_USER_id on TB_HYL_USER (id);

create index idx_TB_HYL_USER_DM4 on TB_HYL_USER (SUBSTR(HYL_USER_DM,0,4));

--對於長數字程式碼,例如地區編碼之類的,我們可以通過擷取欄位來建立索引

       在業務應用中,往往存在著大量關聯查詢的sql語句,這時我們就要結合業務系統,儘快作出判斷,如果有條件先做一次測試,然後及時的在生產庫上建立相關索引,來緩解業務中的壓力。這是一項必要做的準備。

對映:資料庫的優化向來都是大事,可以幫助業務系統起死回生,而我們這支年輕的國字號球隊同樣需要作出優化,建立起成型的打法體系,讓球員們形成默契,這需要教練員的戰術規劃,需要小夥子們努力,我們期待著。。。

         中國隊這次亞洲盃的表現,真可以說是讓人眼前一亮,這些年輕的小夥子們,在這屆盃賽上,讓球迷們又重拾了對於國家隊的期待。原本這種期待一直都存在著,只是苦於中國隊過往的表現總是讓球迷們失望,而這一次,希望我們的中國小夥子們放下包袱,不要被過往輿論的壓力所影響,勇往直前,真希望可以看到他們在澳大利亞會師決賽。

祝福中國隊,在亞洲盃上可以走的更遠,希望2018年,中國隊,我們期待,在俄羅斯,可以一同預見~~~~

深藍記於2015117

宣告:

        這不是單純的技術文件,既然學來幾招 oracle簡單招式,就忍不了在人前賣弄幾下。純為茶餘飯後與數朋庫友的插科打諢,只為輕鬆中帶有一絲的詼諧,IT技術也能用來調侃一番,還蠻耐人尋味。

        同時近來數月oracle知識點忘記了不少,為了把知識點重現,點滴間偶出靈感乍現,以一種自由的形式將其釋出,由於本人學藝不精,文中列舉的例子或故事,其中必然會有與技術聯絡牽強之處,望大家海涵。只當是一部小菜鳥的雜記,不要把這當做單純的技術文章喔,親!看過、笑過,就好。

         歡迎拍磚,這將是我成長的最大動力。

原創作品,出自 “深藍的blog” 部落格,歡迎轉載,轉載時請務必註明以下出處,否則追究版權法律責任。

篇章連結:

相關推薦

足球oracle系列6伴隨亞洲——加油中國隊

原創作品,出自 “深藍的blog” 部落格,歡迎轉載,轉載時請務必註明以下出處,否則追究版權法律責任。         黑龍江的建庫之旅,讓北漂的我有了一段喘息和舒緩的平坦期。更高興的是在緊張的工

pythonzmq系列6

現在,你已經熟練的掌握了REQ/REP模式,它是一個一對多的模式,一個REP對應多個REQ。         但是現實工作中,我們會遇到這樣的難題,一個REP無法滿足REQ的提問,因為REQ太多了,雖然可以增加一個REP,但是,這樣做會帶來很多問題。兩個R

arcgis jsapi介面入門系列6樣式

symbol: function () { //線樣式 //樣式詳情請看官方文件 let style = { //線顏色,支援多種格式:

python快速學習系列6面向物件程式設計OOP

一、面向物件程式設計: 1.比設計模式更重要的是設計原則: 1)面向物件設計的目標: ·可擴充套件:新特性很容易新增到現有系統中,基本不影響系統原有功能 ·可修改:當修改某一部分程式碼時,不會影響到其他不相關的部分 ·可替代:用具有相同介面的程式碼去替換系統中某一部分程式碼時,系統不受影

解讀ASP.NET 5 & MVC6系列6Middleware詳解

在第1章專案結構分析中,我們提到Startup.cs作為整個程式的入口點,等同於傳統的Global.asax檔案,即:用於初始化系統級的資訊(例如,MVC中的路由配置)。本章我們就來一一分析,在這裡如何初始化這些系統級的資訊。 新舊版本之間的Pipeline區別 ASP.NET 5和之前版本的最大區別是對HT

MVC之前的那點事兒系列6動態註冊HttpModule

文章內容 通過前面的章節,我們知道HttpApplication在初始化的時候會初始化所有配置檔案裡註冊的HttpModules,那麼有一個疑問,能否初始化之前動態載入HttpModule,而不是隻從Web.config裡讀取? 答案是肯定的, ASP.NET MVC3釋出的時候提供了一個Microsof

ASP.NET AJAX入門系列6UpdateProgress控制元件簡單介紹

{    // Introducing delay for demonstration.    System.Threading.Thread.Sleep(3000);    Label1.Text ="Page refreshed at "+        DateTime.Now.ToString();}

eShopOnContainers學習系列數據連接健康檢查

技術分享 負載 star bsp 方法 containe 需要 正常 連接 項目裏使用數據庫的時候,我們有時候需要知道數據庫當前的健康狀態,特別是當數據庫連接不上的時候能夠立馬獲悉。eShopOnContainers裏存在著大量的服務健康、連接健康的檢查,數據庫連接是其中之

Exchange 2016國內版O365混合部署6混合後的操作和驗證

分享圖片 In 報告 mailbox inf 通訊錄 png 完成後 動手 雲端和本地統一的通訊錄: AAD Connect 目錄同步後,登錄O365管理員界面查看用戶,可以看到本地的兩個用戶已經同步上來了,同步類型顯示已與AD同步。 登錄一個雲端用戶的郵箱,在收件人處輸

Python從菜鳥到高手6獲取用戶輸入、函數註釋

依次 都是 正弦 .cn 應該 asc pri 控制臺 html 1. 獲取用戶輸入   要編寫一個有實際價值的程序,就需要與用戶交互。當然,與用戶交互有很多方法,例如,GUI(圖形用戶接口)就是一種非常好的與用戶交互的方式,不過我們先不討論GUI的交互

詳解SVM系列線性可分支援向量機硬間隔最大化

支援向量機概覽(support vector machines SVM) 支援向量機是一種二類分類模型。它的基本模型是定義在特徵空間上的間隔最大(間隔最大區別於感知機)線性分類器(核函式可以用非線性的分類)。 支援向量機的學習策略是間隔最大化可形式化為一個求解凸二次規劃的問題。 也等

深度學習框架Keras學習系列線性代數基礎numpy使用Linear Algebra Basis and Numpy

又開一個新坑~~ 因為確實很有必要好好地趁著這個熱潮來研究一下深度學習,畢竟現在深度學習因為其效果突出,熱潮保持高漲不退,上面的政策方面現在也在向人工智慧領域傾斜,但是也有無數一知半解的人跟風吹捧,於是希望藉此教程,讓自己和讀者一起藉助keras,從上到下逐漸

深入JavaScript系列JS記憶體

一、記憶體是什麼 我們現在常用的計算機都屬於 馮·諾依曼體系計算機, 計算機硬體由 控制器、運算器、儲存器、輸入裝置、輸出裝置 五大部分組成。 我們通常所說的記憶體就是 儲存器。 常用的記憶體都是易失性儲存器(需要通過不斷加電重新整理來保持資料,一旦斷電就會導致資料丟失),所以需要一種容量大、低成

解讀ASP.NET 5 & MVC6系列8SessionCaching

在之前的版本中,Session存在於System.Web中,新版ASP.NET 5中由於不在依賴於System.Web.dll庫了,所以相應的,Session也就成了ASP.NET 5中一個可配置的模組(middleware)了。 配置啟用Session ASP.NET 5中的Session模組存在於Micr

解讀ASP.NET 5 & MVC6系列10ControllerAction

我們知道在MVC5和之前的版本,兩個框架的生命週期是不一樣的,在新版MVC6中,MVC Controller/Web API Controller已經合二為一了,本章我們主要講解Controller和Action的定義與使用,以及在MVC框架中,如何根據路由查詢相應的Controller和Action。 Co

java基礎鞏固系列持有物件之間的使用關係Iterable、Collection、List、Queue、Set、Map、Stack

總:Java提供了一套比較完整的容器類,基本型別是:List、Set、Queue、Map,這些物件型別稱為集合類。 一、介面繼承關係: Iterable介面,在java.lang包中,Collection、List、Queue、Set介面繼承Iterable介面 可以

深入JavaScript系列原型原型鏈

說到JavaScript的原型和原型鏈,相關文章已有不少,但是大都晦澀難懂。本文將換一個角度出發,先理解原型和原型鏈是什麼,有什麼作用,再去分析那些令人頭疼的關係。 一、引用型別皆為物件 原型和原型鏈都是來源於物件而服務於物件的概念,所以我們要先明確一點: JavaScript中一切引用型別都是物件,物

解讀ASP.NET 5 & MVC6系列3專案釋出部署

本章我們將講解ASP.NET5專案釋出部署相關的內容,示例專案以我們前一章建立的BookStore專案為例。 釋出前的設定 由於新版ASP.NET5支援多版本DNX執行環境的釋出和部署,所以在部署之前,我們需要設定部署的目標DNX(即之前的KRE)。 步驟:右鍵BookStore專案->屬性->A

解讀ASP.NET 5 & MVC6系列4核心技術環境配置

asp.net 5是下一代的asp.net,該版本進行了全部重寫以適用於跨平臺,新新版本中,微軟引入瞭如下工具與命令:DNVM、DNX、DNU。 DNVM(.NET Version Manager):由於要實現跨平臺的目錄,微軟提供了DNVM功能,DNVM是ASP.NET最底層的內容,他是一組Powershe

解密SVM系列matlab下libsvm的簡單使用分類迴歸

本節簡單介紹一下libsvm的使用方法。關於libsvm似乎曾經使用過,那個時候主要用libsvm進行。當時還翻譯過關於 介紹與分類實驗 下載下來的libsvm其實包含好多個平臺的工具箱軟體,c++,matlab,java,python都有。他們的函