Oracle数据库教程
原文連接:https://www.w3cschool.cn/oraclejc/oraclejc-eswu2qqq.html
Oracle數(shù)據(jù)庫(kù)教程
- Oracle數(shù)據(jù)庫(kù)是什么?
- 數(shù)據(jù)文件(dbf)
- 表空間
- 用戶
- 數(shù)據(jù)庫(kù)和實(shí)例
- 1 Oracle數(shù)據(jù)庫(kù)
- 1.1 物理存儲(chǔ)結(jié)構(gòu)
- 1.2 邏輯結(jié)構(gòu)
- 2 Oracle實(shí)例
- 主要的Oracle數(shù)據(jù)庫(kù)的后臺(tái)進(jìn)程
- Oracle基礎(chǔ)知識(shí)
- 查詢數(shù)據(jù)
- 排序數(shù)據(jù)
- 過(guò)濾數(shù)據(jù)
- 連接表
- 分組數(shù)據(jù)
- 子查詢
- 設(shè)置操作符
- 修改數(shù)據(jù)
- 數(shù)據(jù)定義
- 數(shù)據(jù)類型
- 約束
Oracle數(shù)據(jù)庫(kù)是什么?
Oracle Database,又名 Oracle RDBMS,簡(jiǎn)稱 Oracle。Oracle 數(shù)據(jù)庫(kù)系統(tǒng)是美國(guó) Oracle 公司(甲骨文)提供的以分布式數(shù)據(jù)庫(kù)為核心的一組軟件產(chǎn)品,是目前最流行的客戶/服務(wù)器(client/server)或B/S體系結(jié)構(gòu)的數(shù)據(jù)庫(kù)之一,比如 SilverStream 就是基于數(shù)據(jù)庫(kù)的一種中間件。Oracle 數(shù)據(jù)庫(kù)是目前世界上使用最為廣泛的數(shù)據(jù)庫(kù)管理系統(tǒng),作為一個(gè)通用的數(shù)據(jù)庫(kù)系統(tǒng),它具有完整的數(shù)據(jù)管理功能;作為一個(gè)關(guān)系型數(shù)據(jù)庫(kù),它是一個(gè)完備關(guān)系的產(chǎn)品;作為分布式數(shù)據(jù)庫(kù)它實(shí)現(xiàn)了分布式處理功能,但它的所有知識(shí),只要在一種機(jī)型上學(xué)習(xí)了 Oracle 知識(shí),便能在各種類型的機(jī)器上使用它。
數(shù)據(jù)文件(dbf)
數(shù)據(jù)文件是數(shù)據(jù)庫(kù)的物理存儲(chǔ)單位。數(shù)據(jù)庫(kù)的數(shù)據(jù)是存儲(chǔ)在表空間中的,真正是在某一個(gè)或者多個(gè)數(shù)據(jù)文件中,而一個(gè)表空間可以由一個(gè)或多個(gè)數(shù)據(jù)文件組成,一個(gè)數(shù)據(jù)文件只能屬于一個(gè)表空間。一旦數(shù)據(jù)文件被加入到某個(gè)表空間后,就不能刪除這個(gè)文件,如果要?jiǎng)h除某個(gè)數(shù)據(jù)文件,只能刪除其所屬于的表空間才行。
表空間
表空間是 Oracle 對(duì)物理數(shù)據(jù)庫(kù)上相關(guān)數(shù)據(jù)文件(ORA 或者 DBF 文件)的邏輯映射。一個(gè)數(shù)據(jù)庫(kù)在邏輯上被劃分成一到若干個(gè)表空間,每個(gè)表空間包含了在邏輯上相關(guān)聯(lián)的一組結(jié)構(gòu)。每個(gè)數(shù)據(jù)庫(kù)至少有一個(gè)表空間(稱之為 system 表空間)。每個(gè)表空間由同一磁盤上的一個(gè)或多個(gè)文件組成,這些文件叫數(shù)據(jù)庫(kù)文件(datafile)。一個(gè)數(shù)據(jù)文件只能屬于一個(gè)表空間。
用戶
用戶是在實(shí)例下建立的。不同實(shí)例中可以建相同名字的用戶。注:表的數(shù)據(jù),是由用戶放入某一個(gè)表空間的,而這個(gè)表空間會(huì)隨機(jī)把這些表數(shù)據(jù)放到一個(gè)或者多個(gè)數(shù)據(jù)文件中。由于 Oracle 的數(shù)據(jù)庫(kù)不是普通的概念,oracle 是由用戶和表空間對(duì)數(shù)據(jù)進(jìn)行管理和存放的。但是表不是由表空間去查詢的,而是由用戶去查的。因?yàn)椴煌脩艨梢栽谕粋€(gè)表空間建立同一個(gè)名字的表!這里區(qū)分就是用戶了!scott 與 hr 就是初始的普通用戶,這些用戶下面都默認(rèn)存在了表結(jié)構(gòu)。
DDL(數(shù)據(jù)庫(kù)定義語(yǔ)言):create,drop
DML(數(shù)據(jù)庫(kù)操作語(yǔ)言):insert,update,delete
DQL(數(shù)據(jù)查詢語(yǔ)言):select
DCL(數(shù)據(jù)庫(kù)控制語(yǔ)言):grant,revoke
ORACLE 數(shù)據(jù)庫(kù)系統(tǒng)能夠在業(yè)內(nèi)獨(dú)占鰲頭并不是空穴來(lái)風(fēng),下面我們來(lái)細(xì)數(shù)一下 ORACLE 數(shù)據(jù)庫(kù)的優(yōu)勢(shì)所在:
- 數(shù)據(jù)的大量性
- 數(shù)據(jù)的保存的持久性
- 數(shù)據(jù)的共享性
- 數(shù)據(jù)的可靠性
- 信息準(zhǔn)則—關(guān)系型 DBMS 的所有信息都應(yīng)在邏輯上用一種方法,即表中的值顯式地表示
- 保證訪問(wèn)的準(zhǔn)則
- 視圖更新準(zhǔn)則—只要形成視圖的表中的數(shù)據(jù)變化了,相應(yīng)的視圖中的數(shù)據(jù)同時(shí)變化
- 數(shù)據(jù)物理性和邏輯性獨(dú)立準(zhǔn)則
ORACLE 數(shù)據(jù)庫(kù)自第5版起提供了分布式處理能力,到第7版有比較完善的分布式數(shù)據(jù)庫(kù)功能了,一個(gè)ORACLE 分布式數(shù)據(jù)庫(kù)由 oraclerdbms、sqlNet、SQLCONNECT 和其他非 ORACLE 的關(guān)系型產(chǎn)品構(gòu)成。
數(shù)據(jù)庫(kù)和實(shí)例
Oracle 數(shù)據(jù)庫(kù)服務(wù)器由一個(gè)數(shù)據(jù)庫(kù)和至少一個(gè)數(shù)據(jù)庫(kù)實(shí)例組成。 數(shù)據(jù)庫(kù)是一組存儲(chǔ)數(shù)據(jù)的文件,而數(shù)據(jù)庫(kù)實(shí)例則是管理數(shù)據(jù)庫(kù)文件的內(nèi)存結(jié)構(gòu)。此外,數(shù)據(jù)庫(kù)是由后臺(tái)進(jìn)程組成。
數(shù)據(jù)庫(kù)和實(shí)例是緊密相連的,所以我們一般說(shuō)的 Oracle 數(shù)據(jù)庫(kù),通常指的就是實(shí)例和數(shù)據(jù)庫(kù)。
下圖說(shuō)明了 Oracle 數(shù)據(jù)庫(kù)服務(wù)器體系結(jié)構(gòu):
在這種體系結(jié)構(gòu)中,Oracle 數(shù)據(jù)庫(kù)服務(wù)器包括兩個(gè)主要部分:文件(Oracle 數(shù)據(jù)庫(kù))和內(nèi)存(Oracle 實(shí)例)。
1 Oracle數(shù)據(jù)庫(kù)
Oracle 數(shù)據(jù)庫(kù)的一個(gè)基本任務(wù)是存儲(chǔ)數(shù)據(jù),以下部分簡(jiǎn)要地介紹 Oracle 數(shù)據(jù)庫(kù)的物理和邏輯存儲(chǔ)結(jié)構(gòu)。
1.1 物理存儲(chǔ)結(jié)構(gòu)
物理存儲(chǔ)結(jié)構(gòu)是存儲(chǔ)數(shù)據(jù)的純文件。當(dāng)執(zhí)行一個(gè) CREATE DATABASE 語(yǔ)句來(lái)創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)時(shí),將創(chuàng)建下列文件:
- 數(shù)據(jù)文件:數(shù)據(jù)文件包含真實(shí)數(shù)據(jù),例如銷售訂單和客戶等。邏輯數(shù)據(jù)庫(kù)結(jié)構(gòu)(如表和索引)的數(shù)據(jù)被物理存儲(chǔ)在數(shù)據(jù)文件中。
- 控制文件:每個(gè) Oracle 數(shù)據(jù)庫(kù)都有一個(gè)包含元數(shù)據(jù)的控制文件。元數(shù)據(jù)用來(lái)描述包括數(shù)據(jù)庫(kù)名稱和數(shù)據(jù)文件位置的數(shù)據(jù)庫(kù)物理結(jié)構(gòu)。
- 聯(lián)機(jī)重做日志文件:每個(gè) Oracle 數(shù)據(jù)庫(kù)都有一個(gè)聯(lián)機(jī)重做日志,里面包含兩個(gè)或多個(gè)聯(lián)機(jī)重做日志文件。聯(lián)機(jī)重做日志由重做條目組成,能夠記錄下所有對(duì)數(shù)據(jù)所做的更改。
除這些文件外,Oracle 數(shù)據(jù)庫(kù)還包括如參數(shù)文件、網(wǎng)絡(luò)文件、備份文件以及用于備份和恢復(fù)的歸檔重做日志文件等重要文件。
1.2 邏輯結(jié)構(gòu)
Oracle 數(shù)據(jù)庫(kù)使用邏輯存儲(chǔ)結(jié)構(gòu)對(duì)磁盤空間使用情況進(jìn)行精細(xì)控制。以下是 Oracle 數(shù)據(jù)庫(kù)中的邏輯存儲(chǔ)結(jié)構(gòu):
- 數(shù)據(jù)塊(Data Blocks):Oracle 將數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)塊中。數(shù)據(jù)塊也被稱為邏輯塊,Oracle 塊或頁(yè),對(duì)應(yīng)于磁盤上的字節(jié)數(shù)。
- 范圍(Extents):范圍是用于存儲(chǔ)特定類型信息的邏輯連續(xù)數(shù)據(jù)塊的具體數(shù)量。
- 段(Segements):段是分配用于存儲(chǔ)用戶對(duì)象(例如表或索引)的一組范圍。
- 表空間(Tablespaces):數(shù)據(jù)庫(kù)被分成稱為表空間的邏輯存儲(chǔ)單元。 表空間是段的邏輯容器。 每個(gè)表空間至少包含一個(gè)數(shù)據(jù)文件。
下圖說(shuō)明了表空間中的段,范圍和數(shù)據(jù)塊:
下圖顯示了邏輯和物理存儲(chǔ)結(jié)構(gòu)之間的關(guān)系:
2 Oracle實(shí)例
Oracle 實(shí)例是客戶端應(yīng)用程序(用戶)和數(shù)據(jù)庫(kù)之間的接口。Oracle 實(shí)例由三個(gè)主要部分組成:系統(tǒng)全局區(qū) (SGA),程序全局區(qū) (PGA) 和后臺(tái)進(jìn)程。如下圖所示 :
SGA 是實(shí)例啟動(dòng)時(shí)分配的共享內(nèi)存結(jié)構(gòu),關(guān)閉時(shí)釋放。 SGA 是一組包含一個(gè)數(shù)據(jù)庫(kù)實(shí)例的數(shù)據(jù)和控制信息的共享內(nèi)存結(jié)構(gòu)。
不同于所有進(jìn)程都可用的 SGA,PGA 是會(huì)話開(kāi)始時(shí)為每個(gè)會(huì)話分配的私有內(nèi)存區(qū),當(dāng)會(huì)話結(jié)束時(shí)釋放。
主要的Oracle數(shù)據(jù)庫(kù)的后臺(tái)進(jìn)程
- PMON 是 Oracle 數(shù)據(jù)庫(kù)中最活躍的一個(gè)進(jìn)程,是調(diào)節(jié)所有其他進(jìn)程的進(jìn)程監(jiān)視器。PMON 能夠清理異常連接的數(shù)據(jù)庫(kù)連接,并自動(dòng)向偵聽(tīng)器進(jìn)程注冊(cè)數(shù)據(jù)庫(kù)實(shí)例。
- SMON 是執(zhí)行系統(tǒng)級(jí)清理操作的系統(tǒng)監(jiān)視進(jìn)程。它有兩個(gè)主要職責(zé),包括在發(fā)生故障的情況下自動(dòng)恢復(fù)實(shí)例,例如斷電和清理臨時(shí)文件。
- DBWn 是數(shù)據(jù)庫(kù)編寫器。Oracle 在內(nèi)存中執(zhí)行每個(gè)操作而不是磁盤。因?yàn)樵趦?nèi)存中的處理速度比在磁盤上快。DBWn 進(jìn)程從磁盤讀取數(shù)據(jù)并將其寫回到磁盤。 一個(gè) Oracle 實(shí)例有許多數(shù)據(jù)庫(kù)編寫器,如:DBW0,DBW1,DBW2等等。
- CKPT 是檢查點(diǎn)過(guò)程。 在 Oracle 中,磁盤上的數(shù)據(jù)稱為塊,內(nèi)存中的數(shù)據(jù)稱為緩沖區(qū)。 當(dāng)該塊寫入緩沖區(qū)并更改時(shí),緩沖區(qū)變臟,需要將其寫入磁盤。CKPT 進(jìn)程使用檢查點(diǎn)信息更新控制和數(shù)據(jù)文件頭,并向臟盤寫入臟緩沖區(qū)的信號(hào)。 請(qǐng)注意,Oracle 12c 允許全面和增量檢查點(diǎn)。
-
LGWR 是日志寫入過(guò)程,是可恢復(fù)架構(gòu)的關(guān)鍵。 在數(shù)據(jù)庫(kù)中發(fā)生的每一個(gè)變化都被寫出到一個(gè)名為 redo 日志文件中用于恢復(fù)目的。 而這些變化是由 LGWR 進(jìn)程編寫和記錄的。 LGWR 進(jìn)程首先將更改寫入內(nèi)存,然后將磁盤寫入重做日志,然后將其用于恢復(fù)。
-
ARCn 是歸檔進(jìn)程,它將重做日志的內(nèi)容復(fù)制到歸檔重做日志文件。存檔程序進(jìn)程可以有多個(gè)進(jìn)程,如:ARC0,ARC1 和 ARC3,允許存檔程序?qū)懭攵鄠€(gè)目標(biāo),如 D:驅(qū)動(dòng)器,E:驅(qū)動(dòng)器或其他存儲(chǔ)。
-
MMON 是收集性能指標(biāo)的可管理性監(jiān)控流程。
-
MMAN 是自動(dòng)管理 Oracle 數(shù)據(jù)庫(kù)內(nèi)存的內(nèi)存管理器。
-
LREG 是監(jiān)聽(tīng)器注冊(cè)過(guò)程,它使用 Oracle Net Listener 在數(shù)據(jù)庫(kù)實(shí)例和調(diào)度程序進(jìn)程上注冊(cè)信息。
Oracle基礎(chǔ)知識(shí)
查詢數(shù)據(jù)
- Select語(yǔ)句:查詢單個(gè)表中的數(shù)據(jù)
排序數(shù)據(jù)
- Order By語(yǔ)句:按升序或降序?qū)Σ樵兘Y(jié)果集進(jìn)行排序
過(guò)濾數(shù)據(jù)
- Distinct:消除查詢輸出中的重復(fù)行。
- Where:為查詢返回結(jié)果集中的行記錄指定過(guò)濾條件
- AND:組合兩個(gè)或兩個(gè)以上的布爾條件
- OR:組合兩個(gè)或兩個(gè)以上的布爾條件
- FETCH:使用行限制子句限制查詢返回的行數(shù)
- IN:確定值是否與列表或子查詢中的任何值相匹配
- Between:基于一系列值(區(qū)間值)過(guò)濾數(shù)據(jù)
- Like:根據(jù)特定模式執(zhí)行匹配
連接表
- inner join:從表中查詢具有與其他表匹配的行記錄
- left join:左連接,選擇左表中具有,但右表中不具有的行記錄
- right join:右連接,從右表查詢具有,但左表中不具有的行記錄
- cross join:從多個(gè)表中構(gòu)建笛卡爾乘積
- Self join:將表連接到自身,以查詢分層數(shù)據(jù)或比較同一個(gè)表中的行記錄
分組數(shù)據(jù)
- Group by:將行分組為子組,并為每個(gè)分組應(yīng)用聚合函數(shù)
- Having:如何過(guò)濾分組中的行記錄
子查詢
- 子查詢:使用子查詢執(zhí)行高級(jí)數(shù)據(jù)選擇技術(shù)
- 相關(guān)子查詢:依賴于外部查詢返回的值的子查詢
- Exist和Not Exist:檢查子查詢返回的行是否存在
- ANY,SOME和ALL:將值與列表或子查詢進(jìn)行比較
設(shè)置操作符
使用集合運(yùn)算符合并兩個(gè)或多個(gè)獨(dú)立查詢的結(jié)果集的步驟。
- Union:將兩個(gè)查詢結(jié)果合并為一個(gè)結(jié)果
- Intersect:實(shí)現(xiàn)兩個(gè)獨(dú)立查詢的結(jié)果交集
- Minus:從一個(gè)結(jié)果集中減去另一個(gè)結(jié)果(求差集)
修改數(shù)據(jù)
如何更改Oracle數(shù)據(jù)庫(kù)的數(shù)據(jù)內(nèi)容。用于修改數(shù)據(jù)的SQL命令被稱為數(shù)據(jù)操縱語(yǔ)言(DML)。
- INSERT - 學(xué)習(xí)如何在表中插入一行。
- INSERT INTO SELECT - 從查詢結(jié)果中將數(shù)據(jù)插入到表中。
- INSERT ALL - 討論多重插入語(yǔ)句,將多行插入到一個(gè)或多個(gè)表中。
- UPDATE - 演示如何更新表的存在的數(shù)據(jù)值。
- DELETE - 演示如何從表中刪除一行或多行。
- MERGE - 使用單個(gè)語(yǔ)句逐步完成插入,更新和刪除操作。
數(shù)據(jù)定義
本節(jié)介紹如何管理數(shù)據(jù)庫(kù)和表的最重要的數(shù)據(jù)庫(kù)對(duì)象。
- CREATE TABLE - 演示如何在數(shù)據(jù)庫(kù)中創(chuàng)建新表。
- IDENTITY列 - 了解如何使用IDENTITY子句來(lái)定義表的標(biāo)識(shí)列。
- ALTER TABLE - 演示如何改變表的結(jié)構(gòu)。
- ALTER TABLE ADD列 - 顯示如何將一個(gè)或多個(gè)列添加到現(xiàn)有表。
- ALTER TABLE MODIFY列 - 演示如何更改表中現(xiàn)有列的定義。
- DROP COLUMN - 了解如何使用各種語(yǔ)句從表中刪除一列或多列。
- DROP TABLE - 演示如何從數(shù)據(jù)庫(kù)中刪除表。
- TRUNCATE TABLE - 更快,更有效地刪除表中的所有數(shù)據(jù)。
- RENAME TABLE - 學(xué)習(xí)如何重命名表和處理其依賴對(duì)象的過(guò)程。
數(shù)據(jù)類型
內(nèi)置Oracle數(shù)據(jù)類型
- NUMBER - 介紹數(shù)字?jǐn)?shù)據(jù)類型,并展示如何使用它為表定義數(shù)字列。
- FLOAT - Oracle中的浮點(diǎn)數(shù)據(jù)類型。
- CHAR - 固定長(zhǎng)度的字符串類型。
- NCHAR - 演示如何存儲(chǔ)固定長(zhǎng)度的Unicode字符數(shù)據(jù),并解釋CHAR和NCHAR數(shù)據(jù)類型之間的區(qū)別
- VARCHAR2 - 可變長(zhǎng)度字符
- NVARCHAR2 - 在數(shù)據(jù)庫(kù)中存儲(chǔ)可變長(zhǎng)度的Unicode字符。
- DATE - 討論日期和時(shí)間數(shù)據(jù)類型,并說(shuō)明如何有效地處理日期時(shí)間數(shù)據(jù)。
- TIMESTAMP - 如何以小數(shù)秒精度存儲(chǔ)日期和時(shí)間。
- INTERVAL - 介紹區(qū)間數(shù)據(jù)類型,主要用來(lái)存儲(chǔ)時(shí)間段。
- TIMESTAMP WITH TIME ZONE - 了解如何使用時(shí)區(qū)數(shù)據(jù)存儲(chǔ)日期時(shí)間。
約束
- 主鍵:使用主鍵約束管理主鍵
- 外鍵:使用外鍵約束強(qiáng)制表之間的關(guān)系
- NOT NULL約束:確保列不接受NULL值
- UNIQUE約束:確保存儲(chǔ)在一列或一組列中的數(shù)據(jù)在整個(gè)表內(nèi)的行之間是唯一的
- CHECK約束:在將數(shù)據(jù)存儲(chǔ)到表中之前添加用于檢查數(shù)據(jù)的邏輯的過(guò)程
總結(jié)
以上是生活随笔為你收集整理的Oracle数据库教程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Linux/windows系统定时任务调
- 下一篇: MSSS攝影大賽計劃書(第三版)