主頁 > 資料庫 > ORACLE各種物件、概念及關系整理(一文讀懂)

ORACLE各種物件、概念及關系整理(一文讀懂)

2020-09-13 14:27:15 資料庫

 

下面是我整理(抄襲)的一些Oracle資料庫相關概念物件的理解,如有疏漏,歡迎指正,至于整理這篇文章的目的:主要是網上的內容太散了,這樣整理一遍可以加深理解,也便于后續查閱,就我的理解:下述內容應該可對10g,11g,12c都適用,更新的版本沒用過,

  Oracle DataBase是一款關系型資料庫管理系統,很多時候,我們會把那個承載我們核心資料的系統籠統地成為資料庫服務器,但從嚴格意義上來講Oracle DataBase是由兩個部分組成: 

其中:

  資料庫指的是用戶存盤資料的一些物理檔案,資料庫 = 物理結構+邏輯結構

  實體是資料庫啟動時初始化的一組行程和記憶體結構,實體 = 后臺行程 + 記憶體

  正因為如此我們一般才會說關閉和啟動實體,加載和卸載資料庫,就是這個道理,從實體和資料庫的概念上來看,我們能知道,實體是暫時的,它不過是一組邏輯劃分的記憶體結構和行程結構,它會隨著資料庫的關閉而消失,而資料庫它其實就是一堆物理檔案,它是永久存在的(除非磁盤損壞),資料庫和實體通常是一對一的,這種結構我們稱為單實體體系結構;當然還有一些復雜的分布式的結構,一個資料庫可以對多個實體,像Oracle的RAC(請自行google或者baidu),即集群模式,

  下圖是對一個oracle資料庫服務,更具體的結構展示:

  當在計算機服務器上啟動Oracle資料庫后,稱服務器上啟動了一個Oracle實體(Instance),Oracle 實體(Instance)是存取和控制資料庫的軟體機制,它包含系統全域區(SGA)和Oracle行程兩部分,SGA是系統為實體分配的一組共享記憶體緩沖區,用于存放資料庫實體和控制資訊,以實作對資料庫中資料的治理和操作,     行程是作業系統中一個極為重要的概念,一個行程執行一組操作,完成一個特定的任務,對Oracle資料庫治理系統來說,行程由用戶行程、服務器行程和后臺行程所組成,     當用戶運行一個應用程式時,系統就為它建立一個用戶行程,服務器行程處理與之相連的用戶行程的請求,它與用戶行程相通訊,為相連的用戶行程的Oracle請求服務,     為了提高系統性能,更好地實作多用戶功能,Oracle還在系統后臺啟動一些后臺行程,用于資料庫資料操作,   下面具體說明Oracle資料庫的相關概念   一、Oracle資料庫實體   這一部分主要參考(抄襲): https://www.cnblogs.com/chengxiao/p/5904783.html https://blog.csdn.net/huay_li/article/details/80545275 https://blog.csdn.net/oChangWen/article/details/51171992   1、 用戶與Oracle資料庫的互動流程   下面這張圖,描述了單實體體系結構大致的互動流程     (1)用戶和用戶行程互動   用戶行程可以是一般的客戶端軟體,像Oracle的sqlplus,sql developer,或者是一些驅動程式等,都屬于用戶行程,   (2)用戶行程和服務器行程互動   服務器行程有時會稱為前臺行程,當然是相對于后臺行程(后面會提到的資料庫寫入器,日志寫入器等)來說的,服務器行程的主要作用就是處理連接到當前實體的用戶行程的請求,對客戶端發來的sql進行執行并回傳執行結果,在專有服務器結構中,用戶行程和服務器行程是一對一的,也就是說,當監聽程式監聽到客戶端來了一個請求,會為其分配一個對應的服務器行程,還有一種結構為共享服務器,這種結構就不是一個用戶行程對應一個服務器行程了,會通過調度程式進行協調處理,關于共享服務器連接,本文在此就不敘述了,   (3)服務器行程和實體行程互動   (4)實體和資料庫行程互動     上面描述了一些我們在進行資料庫連接操作的時候,大致的互動流程是什么樣的,下面,我們就來看看Oracle 的實體記憶體結構   2.實體記憶體結構   (由于資料庫寫入器和日志寫入器和記憶體結構非常相關,而且非常重要,所以記憶體結構和這兩個行程結構會相互配合地進行描述)   Oracle實體記憶體結構由兩部分組成:SGA(系統全域區)和PGA(用戶全域區),SGA是一塊共享的記憶體區域,也是最大的一塊記憶體區域,它包含該實體的資料和控制資訊,SGA在實體啟動時被自動分配,當實體關閉時被識訓,資料庫的所有資料操作都要通過SGA來進行;PGA則是用戶會話專有的記憶體區域,每個會話在服務器端都有一塊專有的記憶體區域就是PGA,本文主要對SGA進行分析描述,SGA組成如下:     (1)資料庫緩沖區快取&資料庫寫入器   緩沖區快取(Buffer Cache)是Oracle用來執行sql 的作業區域,在更新資料時,用戶會話不會直接去更新磁盤上的資料,想想,如果允許這么做,那么頻繁的磁盤IO對于系統性能的影響是毀滅性的,所以,實際的處理流程是這樣的:   對于一條簡單的查詢陳述句——select ename,salary from emp where name='不二';,當用戶提交了該條sql陳述句,該條sql陳述句會由對應的用戶行程(比如我們常用的sql developer)發送給服務器,監聽程式監聽到該條請求,Oracle會為其建立一個對應的服務器行程,然后服務器行程會先掃描緩沖區中有沒有包含關鍵行("不二")的資料塊,如果有,這就算一次快取命中了,然后相關行會傳輸到PGA進行進一步處理,最終經過格式化后展示給用戶;如果沒有命中,那么服務器行程會首先將對應行復制到緩沖區內,然后再回傳給客戶端,   DML(insert,update,delete)操作同理,加入用戶發送一條update陳述句,服務行程依然先去掃描緩沖區,如果快取命中,則直接更新,資料變臟;如果沒有命中,由服務器行程將對應資料塊先從磁盤上復制到緩沖區內,再進行更新操作,   1)臟緩沖區   如果緩沖區存盤的塊和磁盤上的塊不一致,該緩沖區就叫做“臟緩沖區”,臟緩沖區最侄訓由資料庫寫入器(DBWn)寫入到磁盤中去,   2)資料庫寫入器(DBWn)   資料庫寫入器是Oracle的一個后臺行程,所謂后臺行程是相對于前臺行程(服務器行程)來講的,DBWn的"n"意味著一個實體是可以有多個資料庫寫入器的,   作用:簡而言之,DBWn的作用就是將變臟了的緩沖區從資料庫緩沖區快取中寫入到磁盤中的資料檔案中去,   資料庫緩沖區快取這塊記憶體區域和資料庫寫入器這塊是比較重要的概念,別的資料庫產品像mySql也都有對應的實作,只不過叫法不一樣罷了,了解這塊的時候,要時刻意識到會話是不會直接更新磁盤資料的,會話的更新,插入,洗掉包括查詢等都是先作用到緩沖區上,隨后,DBWn會將其中的臟緩沖區轉儲到磁盤上去,    3)DBWn執行寫入的觸發條件:   DBWn是個比較懶的行程,它會盡可能少的進行寫入,在以下四種情況它會執行寫入:   a.一個服務行程在設定的時間內沒有找到空閑塊(沒有任何可用緩沖區,不得不寫啊)   b.臟緩沖區過多   c.3秒超時(每3秒自動喚醒一次)   d.遇到檢查點,即checkPoint(檢查點),檢查點是個Oracle事件,遇到檢查點,DBWn會執行寫入,比如實體有序關閉的時候會有檢查點,DBWn會將所有臟緩沖區寫入到磁盤上去的,這很容易理解,要保持資料檔案的一致性,   4)注意:   從上述DBWn的幾個寫入時機,我們能意識到,DBWn的寫入不是直接依賴于會話的更新操作的,不是一有臟緩沖區,它就執行寫入,而且,DBWn執行寫入跟commit操作也沒有任何關系,不要以為commit操作的影響結果會實時流入到磁盤中去,   DBWn采用極懶演算法進行寫入,原因我們應該要清楚:頻繁的磁盤IO對系統的壓力很大,如果DBWn很積極地去寫入磁盤,那對系統性能的影響就太大了,換個角度想,如果DBWn很勤快的寫磁盤,那么資料庫緩沖區存在的意義也就不大了,   當然,講到這兒,我們可能會意識到一個問題,DBWn如此懶地進行資料轉儲,如果在某一時刻,資料庫緩沖區快取記憶體在著大量的臟緩沖區(生產環境中,這是常態),也就是有大量的未commit和已commit的資料還在記憶體中,沒有持久化到磁盤中,然后突然系統斷電了,這種情況下,資料是不是就丟掉了?資料當然不會丟失,這就引出了重做日志(redo log)的概念,接下來,我們就來談談對應重做日志的記憶體結構和后臺行程,     (2) 日志緩沖區&日志寫入器   當我們執行一些DML操作(insert,update,delete),資料塊發生改變了,產生的變更向量則會寫入到重做日志檔案中去,有了這些記錄,當系統由于斷電等因素突然宕掉,資料庫緩沖區快取內的大量臟資料還沒來得及寫入到資料檔案中去,在重新啟動的時候,會有一個實體恢復的程序,在此程序中就應用了重做日志記錄來使資料保持一致;或者資料庫遭遇了物理損壞,比如磁盤損壞了,此時可以通過Oracle的備份恢復工具(如RMAN)進行資料恢復,原理就是:提取備份集-->應用重做日志檔案中的變更記錄,   1)日志緩沖區(log buffer)   日志緩沖區是一塊比較小的記憶體區域,它是用來短期存盤,即將寫入到磁盤的重做日志檔案中的變更向量,   日志緩沖區存在的意義依然是為了減少磁盤IO,減少用戶的等待時間,試想下,如果每一次用戶DML操作都要進行等待重做記錄被寫入到磁盤中去,體驗會有多差勁,   2)日志寫入器(LGWR)   作用:日志寫入器(LGWR)就是把日志緩沖區(log buffer)內的內容寫入到聯機的磁盤的重做日志檔案中去,釋放log用戶buffer空間,相比資料庫寫入器(DBWn),日志寫入器就勤快多了,   3)LGWR執行寫入的觸發條件:   a.commit時寫入   前面提過,DBWn的寫入和commit沒有任何關系,如果commit時資料庫沒有任何記錄,那資料就真的丟失了,Oracle 的重做日志就是為了保證資料安全而存在的,用戶commit時(在oracle中稱為快速提交機制(fast commit):把redo log buffer中的記錄寫入日志檔案,寫入一條提交的記錄),會話會先掛起,等待LGWR將這些記錄寫入到磁盤上的重做日志檔案中,才會通知用戶提交完成,所以,LGWR在commit時執行寫入,是為了確保事務永不丟失,   b.3秒超時(每3秒自動喚醒一次)   c.日志緩沖區的占用率達到1/3,或日志數量超過1M,   d.DBWR行程觸發:DBWn將臟緩沖區寫入磁盤前,先檢測他的相關redo記錄是否寫入聯機日志檔案,如果沒有就通知LGWR行程,在Oracle中稱為提前寫機制(write ahead):redo記錄先于資料記錄被寫入磁盤,這個寫入是為了資料回滾考慮的,DBWn完全可能寫入還沒提交的事務(參照上面提到的寫入時機),那如何保證事務回滾呢?(注:DBWR全稱是Database Writer Process,屬于Oracle后臺行程的一種,有的地方也叫DBWn,我想這里是出于DBWR行程個數的原因,DBWR行程在一個Oracle Server中可以最多有20個,本文聚合了很多篇文章,如果遇到DBWR和DBWn,請做同一名詞處理)   首先要知道,DBWn除了寫入實際的資料,還會寫入撤銷資料(可以參考:Oracle閃回技術)簡單說,事務回滾需要撤銷資料,在寫入撤銷資料前,會先寫入針對撤銷資料的日志記錄(有點繞),若用戶要進行事務回滾,就可以應用這些日志記錄來構造撤銷資料,然后進行回滾,     我們對這兩塊最重要的記憶體區域和對應的后臺行程做個總結:   資料庫緩沖區快取和日志緩沖區都是為了提高性能,避免頻繁IO而存在的,日志緩沖區相比資料庫緩沖區快取要小的多,并且不能進行自動管理,對于日志緩沖區的修改需要重啟實體,資料庫緩沖區快取可進行自動管理,作用在資料庫緩沖區快取上的DBWn行程,為了避免頻繁的磁盤IO導致系統性能下降,會盡可能少地執行寫入,且DBWn的寫入和commit操作沒有任何關系;   而作用在日志緩沖區上的LGWR行程,則會非常積極地進行寫入,一般情況下,它幾乎是實時地將重做日志記錄轉儲到磁盤中去,LGWR是Oracle體系結構中最大的瓶頸之一,DML的速度不可能超過LGWR將變更向量寫入磁盤的速度,     (3)共享池    共享池包含共享SQL區和資料字典存盤區,共享SQL區包含執行特定的SQL陳述句所用的資訊,資料字典區用于存放資料字典,它為所有用戶行程所共享, 它是最復雜的SGA結構,它有許多子結構,我們來看看常見的幾個共享池組件:   1)庫快取:庫快取這塊記憶體區域會按已分析的格式快取最近執行的代碼,這樣,同樣的sql代碼多次執行的時候,就不用重復地去進行代碼分析,可以很大程度上提高系統性能,   2)資料字典快取:存盤oracle中的物件定義(表,視圖,同義詞,索引等資料庫物件),這樣在分析sql代碼的時候,就不用頻繁去磁盤上讀取資料字典中的資料了   3)PL/SQL區:快取存盤程序、函式、觸發器等資料庫物件,這些物件都存盤在資料字典中,通過將其快取到記憶體中,可以在重復呼叫的時候提高性能,     (4)大池   大池是個可選的記憶體區域,前面我們提到專有服務器連接和共享服務器連接,如果資料庫采用了共享服務器連接模式,則要使用到大池;RMAN(Oracle的高級備份恢復工具)備份資料也需要大池,     (5) JAVA池   Oracle 的很多選項使用java寫的,Java池用作實體化Java物件所需的堆空間     (6)流池   從重做日志中提取變更記錄的行程和應用變更記錄的行程會用到流池(如實體不正常關閉,譬如斷電導致實體關閉,在重啟時,Oracle會自動執行實體恢復程序,在此程序需要提取重做日志記錄和應用重做日志兩個動作)     以上列舉了Oracle常見的記憶體結構,要注意的是,上面列舉的記憶體區域,除了日志緩沖區是固定的,不能動態調整也不能進行自動管理外,其他記憶體區域都可以進行動態調整,也可以進行自動管理,   3.實體行程結構   oracle中的行程共分為三類:用戶行程、服務行程、后臺行程,其中后臺行程伴隨實體的啟動而啟動,他們主要是維護資料庫的穩定,相當于一個企業中的管理者及內部服務人員,他們并不會直接給用戶提供服務,   下面說說Oracle 的比較常見的后臺行程,不是所有的行程,(DBWn和LGWR較重要,前面已做了了解,在此不再展開)其中DBWn,ARCn可以設定資料庫啟動時的數量,這些行程在系統中可以不止一個,   (1)DBWn 資料庫寫行程:資料庫緩沖區的治理行程,(請參考上面的“資料庫緩沖區快取&資料庫寫入器”中的描述)   在它的治理下,資料庫緩沖區中總保持有一定數量的自由緩沖塊,以確保用戶行程總能找到供其使用的自由緩沖塊,      (2)LGWR 日志檔案寫行程:(請參考上面的“日志緩沖區&日志寫入器”中的描述)   是日志緩沖區的治理行程,負責把日志緩沖區中的日志項寫入磁盤中的日志檔案上,每個實體只有一個LGWR行程,     (3)SMON(System Monitor):安裝和打開資料庫,負責完成自動實體恢復和回收分類(sort)表空間,   作用:   a.負責實體恢復,前滾(Roll Forward)恢復到實體關閉的狀態,使用最后一次檢查點后的日志行程重做,這時包括提交和未提交的事務,打開資料庫,進行回滾(Roll Back):回滾未提交的事務,(oracle承諾commit之后資料不會丟失,現在我們可以大致的了解是如何實作這個承諾,以及在資料的安全性和資料庫性能之間的平衡選擇,)   b.負責清理臨時段,以釋放空間   觸發條件:定期被喚醒或者被其他事務主動喚醒,     (4)PMON(Process Monitor):行程監視器,主要監視服務器行程,前面提到過,專有服務器體系模式下,用戶行程和服務器行程是一對一的關系,如果某個會話發生例外,PMON會銷毀對應的服務器行程,回滾未提交的事務,并回識訓話專有的PGA記憶體區域,   作用:   a.發現用戶行程例外終止,并進行清理,釋放占用資源,(清理例外終止用戶使用的鎖)        b.向監聽程式動態的注冊實體,    觸發條件:定時被喚醒,其他行程也會主動喚醒它,     (5)CKPT(Checkpoint Process):CKPT負責發起檢查點信號,手動設定檢查點的語法:    1 alter system checkpoint;    檢查點可強制DBWn寫入臟緩沖區,當資料庫崩潰后,由于大量臟緩沖區未寫入資料檔案,在重新啟動時,需要由SMON進行實體恢復,實體恢復需要提取和應用重做日志記錄,提取的位置就是從上次檢查點發起的位置開始的(檢查點之前的資料已經被強制寫入到資料檔案中去了),這個位置稱為RBA(redo byte address),CKPT會不斷將這個位置更新到控制檔案中去(以確定實體恢復需要從哪兒開始提取日志記錄),   觸發條件:日志切換(log switch)會觸發檢查點,     (6)MMON(Manageability Monitor)--AWR主要的行程   資料庫的自我監視和自我調整的支持行程,實體在運行中,會收集大量有關實體活動和性能的統計資料,這些資料會收集到SGA中,MMON定期從SGA中捕獲這些統計資料,并將其寫入到資料字典中,便于后續對這些快照進行分析,(默認情況,MMON每隔一個小時收集一次快照)   作用:   a.收集AWR必須的統計資料,把統計資料寫入磁盤,10g中保存在SYSAUX表空間中,   b.生成server--generated報警   觸發條件:每小時把shared pool中的統計資訊寫入磁盤,或者shared pool占用超過15%,     (7)ARCn(archiver process)   歸檔行程,這個行程是可選的,如果資料庫配置為歸檔模式,這個行程就是必須的,所謂歸檔,就是將重做日志檔案永久保存(生產庫一般都會配置為歸檔模式)到歸檔日志檔案中,歸檔日志檔案和重做日志檔案作用是一樣的,只不過重做日志檔案會不斷被重寫,而歸檔日志檔案則保留了關于資料更改的完整的歷史記錄,   作用:發生日志切換時把寫滿的聯機日志檔案拷貝到歸檔目錄中,   觸發條件:日志切換時被LGWR喚醒,   設定:LOG_ARCHIVE_MAX_PROCESSES可以設定oracle啟動的時候ARCn的個數,     (8)manageability monitor light(MMNL):輕量級的MMON   (9)memory manager(MMAN):自動內容管理    作用:每分鐘都檢查AWR性能資訊,并根據這些資訊來決定SGA組件最佳分布,    設定:STATISTICS_LEVEL:統計級別              SGA_TARGET:SGA總大小   (10)job queue coordinator(CJQ0):資料庫定時任務   (11)recover writer(RVWR):作用是為flashback database提供日志記錄,把資料塊的前鏡像寫入日志,   (12)change tarcking writer(CTWR): 作用是跟蹤資料塊的變化,把資料塊地址記錄到 change_tracking file檔案中,RMAN的增量備份將使用這個檔案來確定那些資料塊發生了變化,并進行備份,   (13)LCKn 封鎖行程:用于并行服務器系統,主要完成實體之間的封鎖   4.總結:   至此,Oracle基礎的記憶體結構和行程結構我們已大概了解,來看下完成的行程和記憶體的互動情況,可以根據前面的理解將整個互動流程串聯一下,     二、Oracle資料庫存盤結構   這一部分主要參考(抄襲): https://blogs.oracle.com/database4cn/oracle-v6 https://www.cnblogs.com/chengxiao/p/5904783.html     根據上文描述,Oracle資料庫服務,由實體+資料庫構成,上面講了實體,下面開始介紹資料庫物件(存盤結構——邏輯結構和物理結構)   Oracle資料庫的存盤結構可以分為邏輯存盤結構和物理存盤結構,對于這兩種存盤結構,Oracle是分別進行管理的,   邏輯存盤結構:Oracle內部的組織和管理資料的方式,   物理存盤結構:Oracle外部(作業系統)組織和管理資料的方式——真實存盤資料的地方,   1.邏輯存盤結構:   Oracle在邏輯上將保存的資料劃分為一個個小單元來進行存盤和維護,更高一級的邏輯存盤結構都是由這些基本的小單元組成的,   邏輯結構型別按照尺寸從小到大分可分為:塊(block)-->區(extent)-->段(segment)-->表空間(tablespace),   圖示如下:   我們可以用下面的比喻來描述邏輯結構關系:   塊 :一張張白紙 ---> 區:白紙組成的本子---> 段:多個本子放到一個檔案袋中---> 表空間:檔案柜(存放多個檔案袋)   下面對每一個概念具體介紹:   (1)塊(block):   Oracle用來管理存盤的最小單元,也是最小的邏輯存盤結構,Oracle資料庫在進行輸入輸出時,都是以塊為單位進行讀寫操作的,塊的大小由引數DB_BLOCK_SIZE設定,不同的Oracle版本DB_BLOCK_SIZE的默認值是不同的,我們建議資料塊的尺寸為作業系統塊尺寸的整數倍(1、2、4等),另外,塊的大小是在創建資料庫的時候決定的,之后不能修改,當然,oracle同時也支持不同的表空間擁有不同的資料塊尺寸,下面,我們對塊的結構進行一些介紹,   1)塊的頭部資訊區:   塊頭:包含塊的一般屬性資訊,如,塊的物理地址、塊所屬的段的型別   表目錄:如果塊中存盤的資料是表資料, 則在表目錄中保存塊中所包含的表的相關資訊   行目錄:行記錄的相關資訊 如,ROWID   2)塊的存盤區:主要包含空閑空間和已經使用的空間,Oracle主要是通過下面的兩個引數對這部分空間進行管理的
  • PCTFREE引數:指定塊中必須保留的最小空閑空間比例,當塊中的空閑存盤空間減少到PCTFREE所設定的比例后,Oracle將塊標記為不可用狀態,新的資料行將不能被加入到這個塊,
  • PCTUSED引數:制定一個百分比,當塊中已經使用的存盤空間降低到這個百分比之下時,這個塊才被重新標記為可用狀態,
  注意:以上兩個引數(PCTFREE、PCTUSED)既可以在表空間級別進行設定,也可以在段級別進行設定,段級別的設定優先級更高,     (2)區(extent):   比塊高一級的邏輯存盤結構,由連續的塊組成,它是oracle在進行存盤空間的分配和回收的最小單位(區是磁盤分配的最小單位),在創建具有獨立段結構的資料庫物件時,例如表、索引等,Oracle會為資料庫物件創建一個資料段,并為資料段分配一個‘初始區’,后續區的分配方式,則根據表的空間管理辦法不同,而采用不同的分配方式,例如autoextent,uniform size 或者在創建表或表空間時設定default storage 子句,另外,用戶還能夠通過執行下面的命令來回收表、索引等物件中未使用的區:
1 -- 相關表:DBA_EXTENTS 、USER_EXTENTS
2 select * from dba_extents;
3 select * from user_extents;
4 
5 --回收表、索引等物件中未使用的區
6 alter table table_name deallocate unused;
  (3)段(segment):   由多個區組成,這些區可以是連續的,也可以是不連續的,當用戶在資料庫中創建各種具有實際存盤結構的物件時(保存有資料的物件),比如表、索引等,Oracle將為這些物件創建“段”, 一般一個物件只擁有一個段,在創建段時,可以為它指定PCTFREE、PCTUSED等引數來控制其中的塊的存盤空間管理方式,也可以為它指定INITIAL、NEXT、PCTINCREASE等存盤引數,以指定其中區的分配方式,如果沒有為段指定這些引數,段將自動繼承表空間的相應引數,不同型別的資料庫物件擁有不同型別的段:
  • 資料段:保存用戶的資料(表中的記錄),每個表都有一個對應的資料段,其名稱和資料表的名字相同
  • 索引段:用來存盤系統、用戶的索引資訊(索引中的索引條目)
  • 臨時段:在執行查詢等操作時,Oracle可能會需要使用到一些臨時存盤空間,用于臨時保存決議過的查詢陳述句以及在排序程序中產生的臨時資料,如:order by陳述句的排序以及一些匯總等,
  • 回滾段:用來存盤用戶資料修改前的值,回滾段與事務是一對多的關系,一個事務只能使用一個回滾段,而一個回滾段可存放一個或多個事務的回退資料,
  概括來說:每建立一張表,往往對應一個段,如果是磁區表,那么各個磁區又獨立成段,在表上建一個索引,則又會有一個對應的索引段,
1 --相關表:DBA_SEGMENTS 、 USER_SEGMENTS
2 select * from dba_segments;
3 select * from user_segments;
  (4)表空間(tablespace):   最高級的邏輯存盤結構,一個Oracle資料庫是由多個表空間組成的, 但一個表空間只隸屬于一個資料庫,一個表空間可以有多資料檔案,但是一個資料檔案只能屬于一個表空間,一個表空間就是一片磁盤區域,他由一個或者多個磁盤檔案組成,一個表空間可以容納許多表、索引或者簇等,每個表空間有一個預制的磁盤區域稱為初始區間(initial extent)用完這個區間后再用下一個,直到用完表空間,這時候需要對表空間進行擴展,增加資料檔案或者擴大已經存在的資料檔案,在創建資料庫時會自動創建一些默認的表空間,例如 SYSTEM表空間,SYSAUX表空間等,通過使用表空間,Oracle將所有相關的邏輯結構和物件組合在一起,我們可以在表空間級別指定存盤引數,也可以在段級別指定,下面我們列出常見的表空間,和他們所存盤的資訊:
  • 資料表空間:或稱為用戶表空間,用于存盤用戶資料的普通表空間,
  • 系統表空間:默認的表空間,用于保存資料字典(一組保存資料庫自身資訊的內部系統表和視圖,及用于Oracle內部使用的其他一些物件),保存所有的PL/SQL程式的源代碼和決議代碼,包括存盤程序和函式、包、資料庫觸發器等,保存資料庫物件(表、視圖、序列)的定義,
  • 回滾表空間:用于存放回滾段,每個實體最多只能使用一個撤銷表空間,undo表空間的4個常見作用:
1)事務回滾,我們對資料進行DML操作的時候,如果撤銷修改,就會通過undo表空間記錄的修改前資料把資料恢復到修改前,有些存盤程序中通過exception捕捉例外的時候經常會有一句rollback,也是這個作用,對當前事務的資料操作進行回滾恢復, 2)資料庫恢復,資料庫例外關閉,重新啟動的時候依據undo表空間的記錄回退未提交的事務,將資料庫恢復, 3)讀一致性,在一個會話操作資料未提交的時候,通過undo表空間保證其他人訪問的資料的一致性(就是未修改的樣子), 4)閃回查詢,這是個很有趣的功能,可以查看某個時間點時候的資料,經常,算了,也不經常,主要用于誤操作、誤刪資料等的恢復, 綜上所述,這些東西日常來說基本都不用管,
  • 臨時表空間:存盤SQL執行程序中產生的臨時資料,創建Oracle資料庫的時候可以設定一個叫sort_area_size的引數,默認值為65536,排序的時候會首先使用這部分記憶體,如果不足就會使用臨時表空間,
  表空間的模式,也可以稱為狀態,可以設定表空間的online(聯機)或者offline(脫機),Read/write(讀/寫) 或者 Read-only(只讀)    表空間可以自動或手動脫機,例如,您可以將表空間脫機,以進行維護或備份與恢復,資料庫在遇到某些錯誤時會自動將一個表空間脫機,比如資料庫寫行程 (DBWn)多次試圖寫入資料檔案但均遭遇失敗時,當用戶試圖訪問一個脫機表空間中的表時,將收到一個錯誤,   ※安裝Oracle時,表空間的一些默認配置:   1)Oracle Database 11g r2在用dbca資料庫管理助手創建資料庫的時候,默認會創建三個永久表空間(SYSTEM、SYSAUX、USERS),一個臨時表空間(TEMP),一個撤銷表空間(UNDOTBS1),   2)Oracle資料庫有幾個預設表空間,其中SYSTEM和SYSAUX 表空間是一個Oracle資料庫必須有的,系統必須表空間SYSTEM,SYSAUX,TEMP,UNDOTBS1     ※各類表空間的操作方法,以及實踐:   1)查詢表空間  1 select * from dba_tablespaces;      2)創建資料表空間
1 CREATE TABLESPACE "ts_test"                      --表空間名WEIXIN
2     LOGGING                                     --啟動重做日志
3     DATAFILE 'D:\app\oradata\orcl\ts_test.dbf' --指定對應的資料檔案,可以一個或者多個
4     SIZE 512M                                   --資料檔案大小
5     AUTOEXTEND ON                               --資料檔案自動擴展
6     NEXT 1024K                                  --一次擴展的大小
7     MAXSIZE UNLIMITED                           --資料檔案最大容量:無限
8     EXTENT MANAGEMENT LOCAL                     --表空間本地管理
9     SEGMENT SPACE MANAGEMENT AUTO ;             --存盤管理方式,AUTO為自動方式
    3)創建臨時表空間
1 CREATE TEMPORARY TABLESPACE tmp_ts_test
2   TEMPFILE  'D:\app\oradata\orcl\tmp_ts_test.DBF'
3   SIZE 100M;
     4)回滾段表空間
1 create undo tablespace undo_ts_test
2     datafile  'D:\app\oradata\orclundo_ts_test.DBF'
3     size  100M;
  5)新建用戶,并將先前建的表空間 ts_test 和臨時表空間 tmp_ts_test 作為testuser用戶的默認使用空間,
 1 --創建新用戶,同時指定表空間和臨時表空間
 2 CREATE USER testuser         --創建用戶testuser
 3     PROFILE "DEFAULT"            --忽略對profile中的一些資源限制(什么鬼,不明白)
 4     IDENTIFIED BY "pwd123456"       --密碼為weixin
 5     default tablespace ts_test  --默認表空間ts_test,即資料默認存此表空間
 6     temporary tablespace tmp_ts_test  --臨時表空間
 7     QUOTA 500m ON ts_test    --用戶在表空間中的限額
 8     ACCOUNT UNLOCK;              --解鎖用戶
 9 
10 --通常建完用戶后會給用戶授予一些基本的權限
11 Grant connect, resource to testuser;
12 
13 --或者直接給用戶賦予dba權限(只是測驗,生產請不要這么做)
14 --with admin option 表示在獲得權限的同時也獲得了將這個權限授予其他用戶的能力,
15 GRANT "DBA" TO "testuser" WITH ADMIN OPTION;   
  oracle的安全策略方面默認一個用戶的密碼有效期為180天,我們可以直接把這個有效期調成永久,  1 ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;      6)如果表空間不足,可以有兩種方法:   第一種,增加資料檔案:
1 ALTER TABLESPACE ts_test(表空間名)  
2     ADD DATAFILE  '......'(資料檔案全路徑名)
3     SIZE 1000M;
  第二種,把表空間設定為自動擴展:
1 ALTER DATABASE DATAFILE   '.......'(資料檔案全路徑名)  
2     autoextend on;  (在創建表空間時,就可以加上這個關鍵字,表示該表空間自動擴展)
    7)洗掉表空間
1 drop tablespace ts_test
2   including contents and datafile;
  如果表空間有資料,不增加 including contents 將無法洗掉成功,增加 and datafiles 關鍵字在linux 及 unix 下可自動洗掉資料檔案,而在windows 環境下需要手動洗掉     8)UNDO 表空間和 TEMP 表空間在資料庫建好是必然已經創建好了,不過,它們都可以新建,并且用戶都可以指定新建的空間,   9)oracle 可以為不同的用戶指定不同的臨時表空間,而且可以為同一用戶的不同session 設定不同的臨時表空間(臨時表空間組),從而級訓IO 競爭,   2. oracle物理存盤結構:   Oracle資料庫邏輯上由一個或多個表空間組成,每個表空間在物理上由一個或多個資料檔案組成,而每個資料檔案由資料塊構成的,所以,邏輯上資料存放在表空間中,而物理上存盤在表空間所對應的資料檔案中,我們可以用這張圖來描述資料檔案和表空間的關系,   或者用下面這張圖理解下:   (1)構成Oracle資料庫物的物理檔案組織結構:   ※基礎檔案:   1)控制檔案:   控制檔案雖小,但作用重大,它存放資料庫的基本資訊,它包含指向資料庫其余部分的指標(包括重做日志檔案,資料檔案,歸檔日志檔案等的位置),存盤重要的序列號和時間戳,存盤RMAN備份的詳細資訊,控制檔案一旦受損,那實體會立馬終止,一般對控制檔案的保護采用多路復用機制,就是冗余多份在不同物理位置,   2)重做日志檔案   重做日志檔案的作用為:存放對資料的改變,重做日志按時間順序存盤應用于資料庫的一連串的變更向量(包含聯機重做日志檔案和歸檔日志檔案),由SMON在資料庫啟動時自動執行的實體恢復和磁盤損壞所要求的提取備份恢復都會應用到重做日志進行相應的資料恢復   重做日志檔案也建議進行多路復用,一個資料庫至少要有兩組重做日志檔案,一組供LGWR進行寫入,日志檔案是固定大小,業務高峰期會很快寫滿,寫滿之后會切換到第二組上,在配置為歸檔模式的資料庫中,這時由歸檔行程(ARCn)開始將第一組的內容進行歸檔備份,如此回圈地進行寫入和歸檔,需要注意的是,在歸檔行程還未對當前組的日志歸檔完畢前,是不允許LGWR對其進行重寫的,   3)資料檔案   資料檔案存盤著實際的資料,它是具體的存盤資料的物理檔案,是一個物理概念,DBWn會將資料庫緩沖區中的內容寫入到這類檔案中去,資料檔案的大小和數量是不受限制的,Oracle從10g開始,創建一個資料庫至少需要兩個資料檔案,一個用于SYSTEM表空間,該表空間用來存盤資料字典;一個用于SYSAUX表空間,這個表空間用來存盤一些資料字典的輔助資料,   資料檔案由一個個的Oracle塊組成,這是Oracle的I/O基礎單元,與作業系統塊是不同的概念,Oracle塊要比作業系統塊大,這當然有出于性能的一些考慮,但我們考慮這樣一種情況,當用戶使用作業系統命令進行資料檔案的備份的時候(假設1個Oracle塊=8個作業系統塊),已經復制了4個作業系統塊,然后CPU被DBWn搶占了,DBWn又重新對這個Oracle塊進行了更新,這時,當復制命令又得到了CPU時間去復制剩余的4個塊的時候,就造成了整個Oracle塊的資料不一致,所以,這也是在執行這種備份(用戶自行備份)的時候,需要做一些額外處理,比如將表空間置為備份模式的原因,當然,使用RMAN是不存在這樣的問題的,RMAN的備份機制是肯定可以得到資料一致的塊的,(這塊內容作了解即可) 對于資料檔案的保護,一般可進行定期備份,或者使用RAID也可以,     ※外部檔案:   所謂外部檔案,意味著這些檔案從嚴格意義上來講并不屬于Oracle資料庫的一部分,   1)實體引數檔案   這個檔案存盤了資料庫所需的一些引數設定,比如各個記憶體區域的大小,可允許的最大行程數,最大會話數,控制檔案的位置,資料庫的名稱等等,引數檔案也是實體啟動時首先要加載的檔案,   2)口令檔案   一般稱為外部口令檔案,一般的用戶名和口令是存放在資料字典中,不會存放在這個檔案中在一些特殊場景下,比如實體還未啟動,這時,我可能需要以管理員的身份登入系統去執行一些恢復或者啟動操作,然而此時,資料字典由于實體還沒啟動是不存在的,這時就需要外部口令檔案進行用戶身份的驗證,   3)歸檔日志檔案   ARCn將聯機重做日志檔案會備份歸檔到這類檔案中去,歸檔日志檔案保留了資料更改的完整歷史資訊,   三、Oracle資料庫的啟動流程   這一部分主要參考(抄襲): https://blog.csdn.net/huay_li/article/details/80545275 https://www.jianshu.com/p/4d388f148737     Oracle  的啟動需要經歷四個狀態,SHUTDOWN 、NOMOUNT 、MOUNT 、OPEN、   1.資料庫流程詳解   (1)startup nomount   啟動實體(不加載資料庫),這個程序,會讀取組態檔(spfile / pfile)檔案的相關引數來創建實體,也就是一系列的行程,啟動完成后實體是 STARTED 狀態,   (2)alter database mount;   加載(關聯)資料庫,這個程序的時候,實體讀取控制檔案,關聯到對應的資料庫,此時實體為MOUNTED狀態,   (3)alter database open;   打開資料庫,實體連接到資料檔案,這個時候其他用戶就可以訪問到資料庫進行讀寫操作了,此時實體的狀態是OPEN,   所以,我們打開的程序中實體的狀態就是:Deaded(idle)>>Started >> Mounted >> Open,     2.資料庫啟動流程實踐   一般一臺機子上都會建立多個資料庫的,那么怎么啟動自己想啟動的那個實體呢?答案是:通過oracle_sid控制,oracle_sid是資料庫在作業系統的一個唯一標識,在演示資料庫啟動流程前,我們先設定oracle_sid,然后再啟動實體,   (1)準備作業如下:   1)設定要啟動的資料庫,可以不設,使用安裝時默認啟動的那個資料庫即可
1 C:\Users\anand>set oracle_sid=orcl
  2)和資料庫建立連接(其實一般這樣就可以使用了)
1 C:\Users\anand>sqlplus / as sysdba
2 SQL*Plus: Release 11.2.0.1.0 Production on 星期六 6月 2 10:58:17 2018
3 Copyright (c) 1982, 2010, Oracle.  All rights reserved.
4 連接到:
5 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
6 With the Partitioning, OLAP, Data Mining and Real Application Testing options
    (2)測驗資料庫啟動流程   1)啟動實體(不加載資料庫)
1 SQL> startup nomount
2 ORACLE 例程已經啟動,
3 
4 Total System Global Area 1068937216 bytes
5 Fixed Size                  2182592 bytes
6 Variable Size             624951872 bytes
7 Database Buffers          436207616 bytes
8 Redo Buffers                5595136 bytes
  2)加載(關聯)資料庫
1 SQL> alter database mount;
2 
3 資料庫已更改,
  3)打開資料庫
1 SQL> alter database open;
2 
3 資料庫已更改,
  4)驗證
1 SQL> select status from v$instance;
2 
3 STATUS
4 ------------
5 OPEN

 

四、ORACLE 的用戶、SCHEMA、資料庫、表空間、資料檔案的相互關系   這一部分主要參考(抄襲): https://blog.csdn.net/kanon_lgt/article/details/4269135  
  在進入抽象的概念之前,可以先看下網上的這段比喻:   “我們可以把Database(這里應該指的是某一個sid對應的資料庫)看作是一個大倉庫,倉庫分了很多很多的房間,Schema就是其中的房間,一個Schema代表一個房間,Table可以看作是每個Schema中的床,Table(床)被放入每個房間中,不能放置在房間之外,那豈不是晚上睡覺無家可歸了,然后床上可以放置很多物品,就好比 Table上可以放置很多列和行一樣,資料庫中存盤資料的基本單元是Table,現實中每個倉庫放置物品的基本單位就是床, User就是每個Schema的主人,(所以Schema包含的是Object,而不是User),user和schema是一一對應的,每個user在沒有特別指定下只能使用自己schema(房間)的東西,如果一個user想使用其他schema(房間)的東西,那就要看那個schema(房間)的user(主人)有沒有給你這個權限了,或者看這個倉庫的老大(DBA)有沒有給你這個權限了,換句話說,如果你是某個倉庫的主人,那么這個倉庫的使用權和倉庫中的所有東西都是你的(包括房間),你有完全的操作權,可以扔掉不用的東西從每個房間,也可以放置一些有用的東西到某一個房間,你還可以給每個User分配具體的權限,也就是他到某一個房間能做些什么,是只能看(Read-Only),還是可以像主人一樣有所有的控制權(R/W),這個就要看這個User所對應的角色Role了,”
    這些Oracle資料庫中具體的概念在前面已經介紹過了,下面再簡述一下:   (1)資料庫:   Oracle資料庫是資料的物理存盤,這就包括(資料檔案ORA或者DBF、控制檔案、聯機日志、引數檔案),其實Oracle資料庫的概念和其它資料庫不一樣,這里的資料庫是一個作業系統只有一個庫,可以看作是Oracle就只有一個大資料庫,   (2)實體:     一個Oracle實體(Oracle Instance)有一系列的后臺行程(Backguound Processes)和記憶體結構(Memory Structures)組成,一個資料庫可以有n個實體,     
  資料庫和實體的關系:   ORACLE實體與ORACLE資料庫,這個是比較混淆的一個概念,在很多觀念下,包括我以前也會認為一個實體等價于一個資料庫,其實這個應該說是在大部分情況下可以認為:一個實體對應一個資料庫, 實體是一個Instance,而資料是對外屏蔽的一些轉換后檔案組合(學習過第四代資料庫就知道,如果你做過裸機檔案也會明白原理),資料庫不是對外直接開放的,開放的規則是通過實體(Instance),Instance是一段記憶體,這個記憶體中包含很多個不同的版塊(主體上的分就是SGA和PGA了), 我們一切操作都是交給實體的,而不是直接操作資料庫檔案系統,為什么要有中間這個程序,ORACLE考慮到:安全、緩沖、效率、擴展性等問題;而為什么是大部分情況下這樣說, 因為ORACLE還有集群的概念,對于ORACLE RAC真正集群使用后你會更加深刻認識實體和資料庫之間的關系,它使用多個分布于不同主機上的實體,對同一個裸機檔案系統上的資料庫進行操作,所以此時實體和資料庫就不是一對一了,而是多對一,但是一個實體只能用一個資料庫這是肯定的,
    (3)用戶(user)   用戶是在實體下建立的,不同實體可以建相同名字的用戶,        具體的創建用戶的方法是這樣的(再寫一遍):
1 --創建新用戶,同時指定表空間和臨時表空間(建議創建的時候指明表空間名)
2 CREATE USER testuser         --創建用戶testuser
3     PROFILE "DEFAULT"            --忽略對profile中的一些資源限制(什么鬼,不明白)
4     IDENTIFIED BY "pwd123456"       --密碼為weixin
5     default tablespace ts_test  --默認表空間ts_test,即資料默認存此表空間
6     temporary tablespace tmp_ts_test  --臨時表空間
7     QUOTA 500m ON ts_test    --用戶在表空間中的限額
8     ACCOUNT UNLOCK;              --解鎖用戶
    ※關于profile的說明(使用profile檔案實作用戶口令限制與資源限制)   Proflie是口令限制,資源限制的命名集合.建立oracle資料庫時,oracle會自動建立名為DEFAULT的PROFILE,初始化的DEFAULT沒有進行任何口令和資源限制.使用PROFILE有以下一些主要事項:   a,建立PROFILE時,如果只設定了部分口令或資源限制選項,其他選項會自動使用默認值(DEFAULT的相應選項)   b,建立用戶時,如果不指定PROFILE選項,oracle會自動將DEFAULT分配給相應的資料庫用戶.   c,一個用戶只能分配一個PROFILE.如果要同時管理用戶的口令和資源,那么在建立PROFILE時應該同時指定口令和資源選項.   d,使用PROFILE管理口令時,口令管理選項總是處于被激活狀態,但如果使用PROFILE管理資源,必須要激活資源限制.      ※關于profile使用的實踐   1)查看當前存在的profile檔案
1 select distinct profile from dba_profiles;
2 --查看指定profile檔案中各資源的限制情況:
3 select resource_name,limit from dba_profiles where profile='DEFAULT';
  2)修改現在profile檔案中資源選項:
1 alter profile default limit FAILED_LOGIN_ATTEMPTS 1 PASSWORD_LOCK_TIME 3;
  3)創建一個新的profile檔案:
1 CREATE PROFILE lock_accout LIMIT FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 10;
  4)讓用戶使用新的profile檔案:
1 alter user testuser profile lock_accout;
  5)查看用戶當前使用的profile檔案
select username,profile from dba_users;
  6)使用profile檔案限制用戶對資源的使用;
1 --必須先激活資源限制:
2 alter system set resource_limit=TRUE scope=memory;
3 --對資源限制做修改:
4 alter profile lock_accout limit cpu_per_session 5000;
  7)洗掉profile
1 drop profile lock_accout;
  8)洗掉profile并將使用當前profile的用戶profile改為default
1 drop profile lock_accout cascade;
  9)以下列出所有profile相關引數內容以便于參考:
FAILED_LOGIN_ATTEMPTS:用于指定聯系登陸的最大失敗次數.   PASSWORD_LOCK_TIME:用于指定帳戶被鎖定的天數. PASSWORD_LIFE_TIME:用于指定口令有效期 PASSWORD_GRACE_TIME:用于指定口令寬限期. PASSWORD_REUSE_TIME:用于指定口令可重用時間. PASSWORD_REUSE_MAX;用于指定在重用口令之前口令需要改變的次數. PASSWORD_VERIFY_FUNCTION;是否校驗口令(校驗將值改為VERIFY_FUNCTION) CPU_PER_SESSION:用于指定每個會話可以占用的最大CPU時間. LOGICAL_READS_PER_SESSON:用于指定會話的最大邏輯讀取次數. PRIVATE_SGA:用于指定會話在共享池中可以分配的最大總計私有空間.需要注意,該選項只使用與共享服務器模式. COMPOSITE_LIMIT:用于指定會話的總計資源消耗(單位:服務單元). CPU_PER_CALL:限制每次呼叫(決議,執行或提取資料)可占用的最大CPU時間(單位:百分之一秒) LOGICAL_READS_PER_CALL:用于限制每次呼叫的最大邏輯I/O次數. SESSIONS_PER_USER:用于指定每個用戶的最大并發會話個數. CONNECT_TIME:用于指定會話的最大連接時間. IDLE_TIME:用于指定會話的最大空閑時間.
  (4)schema:       在Oracle中,一般一個用戶就對應一個schema,該用戶的schema名等于用戶名,并作為該用戶預設schema,用戶是不能創建schema的,schema在創建用戶的時候創建,并可以指定用戶的各種表空間(這點與PostgreSQL是不同,PostgreSQL是可以創建schema并指派給某個用戶),當前連接到資料庫上的用戶創建的所有資料庫物件默認都屬于這個schema(在不指明schema的情況下),比如若用戶scott連接到資料庫,然后create table test(id int not null)創建表,那么這個表被創建在了scott這個schema中;但若這樣create table testuser.test(id int not null)的話,這個表被創建在了testuser這個schema中,當然前提是權限允許(即testuser用戶給scott用戶在其schema下創建資料表的權限),由此來看,schema是一個邏輯概念,       但一定要注意一點:schema并不是在創建user時就創建的,而是在該用戶創建了第一個物件之后才將schema真正創建的,只有user下存在物件,他對應的schema才會存在,如果user下不存在任何物件了,schema也就不存在了;     (5)表空間:   表空間是一個用來管理資料存盤邏輯概念,表空間只是和資料檔案(ORA或者DBF檔案)發生關系,資料檔案是物理的,一個表空間可以包含多個資料檔案,而一個資料檔案只能隸屬一個表空間,     (6)資料檔案(dbf、ora):   資料檔案是資料庫的物理存盤單位,資料庫的資料在邏輯上是存盤在表空間中的,但真正落地是在某一個或者多個資料檔案中,而一個表空間可以由一個或多個資料檔案組成,一個資料檔案只能屬于一個表空間,一旦資料檔案被加入到某個表空間后,就不能洗掉這個檔案,如果要洗掉某個資料檔案,只能洗掉其所屬于的表空間才行,
   表的資料,是由用戶放入某一個表空間的,而這個表空間會隨機把這些表資料放到一個或者多個資料檔案中,   由于oracle的資料庫不是普通的概念,oracle是有用戶和表空間對資料進行管理和存放的,但是表不是有表空間去查詢的,而是由用戶去查的,因為不同用戶可以在同一個表空間建立同一個名字的表!這里區分就是用戶了!
  下圖也許有助于理解上述名稱之間的關系:   參考: https://blog.csdn.net/kanon_lgt/article/details/4269135 https://blog.csdn.net/Huay_Li/article/details/80575538 https://blog.csdn.net/huay_li/article/details/80545275 https://blog.csdn.net/u013933870/article/details/51700979 https://blog.csdn.net/oChangWen/article/details/51171992 https://blogs.oracle.com/database4cn/oracle-v6 https://www.jianshu.com/p/4d388f148737 https://www.cnblogs.com/fnng/archive/2012/07/24/2607482.html https://blog.51cto.com/tianzt/528873 https://wenku.baidu.com/view/047cd4621ed9ad51f01df24a?pcf=2

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/25073.html

標籤:Oracle

上一篇:RAC修改字符集

下一篇:Oracle:row_number()、rank()、dense_rank()

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more