溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

oracle相關(guān)概念

發(fā)布時(shí)間:2020-07-21 05:32:09 來源:網(wǎng)絡(luò) 閱讀:410 作者:huihuiwan 欄目:關(guān)系型數(shù)據(jù)庫


SQL 語句:結(jié)構(gòu)化查詢語言: Structured  Query Language


oracle數(shù)據(jù)庫有三級(jí)結(jié)構(gòu):

   關(guān)系模式,稱為“基本表”

   存儲(chǔ)模式(內(nèi)模式)稱為 “存儲(chǔ)文件”

   子模式 稱為視圖(view)元組稱為行(row),屬性稱為列(column)


oracle 體系

    “實(shí)例”(instance),數(shù)據(jù)庫文件,

     用戶進(jìn)程(user process)和服務(wù)器進(jìn)程(server process)

     其它文件,如:參數(shù)文件(parameter file),密碼文件和歸檔日志文件(archived log file)

     物理結(jié)構(gòu)文件是指數(shù)據(jù)庫文件:由 數(shù)據(jù)文件,控制文件和重做日志文件組成。     


Instance:實(shí)例 

    包括內(nèi)存區(qū)(SGA)和后臺(tái)進(jìn)程。啟動(dòng)實(shí)例就是啟動(dòng)這些進(jìn)程和內(nèi)存。

    一個(gè)實(shí)例對(duì)應(yīng)一個(gè)數(shù)據(jù)庫,一個(gè)數(shù)據(jù)庫可以有多個(gè)實(shí)例。


三種連接方式:

    連接是指用戶進(jìn)程與數(shù)據(jù)庫服務(wù)器之間的通訊途徑,一個(gè)連接可以有多個(gè)會(huì)話。

    過程是: 用戶進(jìn)程 連接 服務(wù)器進(jìn)程 再連接 數(shù)據(jù)庫實(shí)例

    1、Host-Based方式:服務(wù)器和客戶端在同一臺(tái)主機(jī)上,用戶直接連接數(shù)據(jù)庫服務(wù)器。

    2、C/S方式:客戶端通過網(wǎng)絡(luò)遠(yuǎn)程管理數(shù)庫服務(wù)器。

    3、三層訪問方式:用戶先訪問應(yīng)用服務(wù)器,由應(yīng)用服務(wù)器連接數(shù)據(jù)庫服務(wù)器。


SGA 內(nèi)存結(jié)構(gòu)

    共享池:

    共享SQL或者PL/SQL代碼,由庫高速緩存和數(shù)據(jù)字典高速緩存組成。

    重做日志高速緩沖區(qū):

    當(dāng)用戶執(zhí)行了INSERT,UPDATE,DELETE等操作后,數(shù)據(jù)發(fā)生了變化,

    這些變化了的數(shù)據(jù)寫入數(shù)據(jù)庫高速緩存之前會(huì)先寫入重做日志緩沖區(qū),

    同時(shí)變化之前的數(shù)據(jù)也放入重做日志高速緩存,

    這樣在數(shù)據(jù)恢復(fù)時(shí),oralce就知道那些需要前滾,那些需要后滾。


大池(large pool)和Java-------可選的內(nèi)存區(qū)

         大池 :在共享服務(wù)器環(huán)境下,oracle在共享池中分配額外的空間用于存儲(chǔ)用戶進(jìn)程和服務(wù)器進(jìn)程之間的會(huì)話信息,但是用戶進(jìn)程區(qū)域UGA的大部分將在大池中分配,這樣就減輕了共享池的負(fù)擔(dān)。在大規(guī)模的輸入和輸出及備份過程也需要大池作為緩存空間。

        流池(streaming  pool------------流內(nèi)存,數(shù)據(jù)共享,可以通過參數(shù)動(dòng)態(tài)調(diào)整。

 

SGA   PGA    UGA

PGA:進(jìn)程全局區(qū),存儲(chǔ)了服務(wù)器進(jìn)程或單獨(dú)的后臺(tái)進(jìn)程的數(shù)據(jù)信息和控制信息。它隨著服務(wù)器進(jìn)程的創(chuàng)建而被分配內(nèi)存,隨著進(jìn)程的終止而釋放內(nèi)存。與SGA不同,它不是一個(gè)共享區(qū)域,而是服務(wù)器進(jìn)程專有的區(qū)域,在專有的服務(wù)器(與共享服務(wù)器相對(duì)的概念)配置中包括如下組件:排序區(qū),會(huì)話信息,游標(biāo)狀態(tài),堆棧區(qū)。

UGA:用戶全局區(qū),它是共享服務(wù)器模式下的概念,指用戶的會(huì)話狀態(tài),這部分內(nèi)存會(huì)話總可以訪問,UGA存儲(chǔ)在每個(gè)共享服務(wù)器都可以訪問SGA中,這樣任何服務(wù)器都可以使用用戶會(huì)話的數(shù)據(jù)和其它信息。而在專有服務(wù)器模式下,永華會(huì)話狀態(tài)不需要共享,用戶進(jìn)程和服務(wù)器進(jìn)程是一一對(duì)應(yīng)的關(guān)系,所以,UGA總是在PGA中分配。

 

后臺(tái)進(jìn)程:

系統(tǒng)監(jiān)控進(jìn)程(SMON):數(shù)據(jù)庫實(shí)例恢復(fù)。分三步:前滾----打開數(shù)據(jù)庫-----回滾未提交的事物。

進(jìn)程監(jiān)控進(jìn)程(PMON:在進(jìn)程失敗獲知連接異常發(fā)生時(shí)該進(jìn)程負(fù)責(zé)一些清理工作。

回滾沒有提交的事務(wù),釋放進(jìn)程占用的SGA資源,監(jiān)視其它oracle進(jìn)程,監(jiān)視其它oracle的后臺(tái)進(jìn)程,向oracle TNS監(jiān)聽器注冊(cè)剛啟動(dòng)的實(shí)例。

數(shù)據(jù)庫寫進(jìn)程(DBWR:臟數(shù)據(jù)是指用戶更改了的但沒有提交的數(shù)據(jù)庫中的數(shù)據(jù),因?yàn)閿?shù)據(jù)庫的數(shù)據(jù)文件與數(shù)據(jù)庫高速緩存中的數(shù)據(jù)不一致,稱為臟數(shù)據(jù)。寫進(jìn)程的作用就是把臟數(shù)據(jù)在特定的條件下寫入到數(shù)據(jù)文件中。

為什么不直接提交臟數(shù)據(jù)呢?為了減少I/O次數(shù)。當(dāng)臟數(shù)據(jù)達(dá)到一定數(shù)量或條件時(shí)才一次性提交臟數(shù)據(jù)。

歸檔日志進(jìn)程(ARCH:它是可選進(jìn)程,不是在實(shí)例啟動(dòng)時(shí)自動(dòng)啟動(dòng),作用是把寫滿的重做日志文件的數(shù)據(jù)寫入到一個(gè)歸檔日志中,這個(gè)歸檔日志用作介質(zhì)故障時(shí)的數(shù)據(jù)庫恢復(fù)。

校驗(yàn)點(diǎn)進(jìn)程:校驗(yàn)點(diǎn)是一個(gè)事件。


SQL語句的介紹

按照功能可以分為五類:

數(shù)據(jù)查詢語句:select

數(shù)據(jù)操作語句(DML):

INSERT 向表中添加紀(jì)錄,UPDATE更新表中的數(shù)據(jù),通常和WHERE條件語句一起使用。

DELETE語句刪除表中的數(shù)據(jù)。

數(shù)據(jù)定義語句(DDL):

 CREATE :創(chuàng)建數(shù)據(jù)庫對(duì)象,如:表、索引、視圖等。

 ALTER: 改變系統(tǒng)參數(shù),如改變SGA的大小等

 DROP:刪除一個(gè)對(duì)象,如刪除一個(gè)表,索引或者序列號(hào)

 RENAME:重命名一個(gè)對(duì)象。

 TRUNCATE:截?cái)嘁粋€(gè)表

事務(wù)控制語句

 COMMIT:用于提交由DML語句操作的事務(wù)。

 ROLLBACK: 用于回滾DML語句改變不了的數(shù)據(jù)。

數(shù)據(jù)控制語句(DCL:

 GRANT: 用于授予用戶訪問某對(duì)象的特權(quán)

 REVOKE:用于回收用戶訪問某對(duì)象的特權(quán)

 

空值(NULL)與空值處理函數(shù):

空值是特殊的值,不能說它不存在,也不能說它為零??罩当硎疽活悰]有定義的值,具有不確定性。當(dāng)然對(duì)于控制的運(yùn)算也具有特殊性,因?yàn)椴淮_定性的值是無法和一類具有確定性的值進(jìn)行邏輯或算數(shù)運(yùn)算的,oracle提供了一類空值處理函數(shù),通過這些函數(shù)實(shí)現(xiàn)空值(NULL)的運(yùn)算。

 

分組函數(shù):

AVGSUM函數(shù)

MAXMIN函數(shù),可以操作的字符類型有數(shù)字型,字符型和日期型

COUNT函數(shù) 返回經(jīng)過計(jì)算得到的返回的行數(shù),包括空行和重復(fù)的行

GROUP BY 句子

HAVING 子句:在分組函數(shù)中,不能使用WHERE子句限制分組函數(shù),所以Oracle設(shè)計(jì)了HAVING 子句對(duì)分組函數(shù)的某些限制。


分組函數(shù)的嵌套使用

 

簡(jiǎn)單查詢之SELECT語句的用法

  SELECT * | {[DISTINCT] column | expression [alias] , .......}  FROM  talbe;

   | 表示或的關(guān)系,[] 表示可選

   SELECT   選擇一個(gè)列或多個(gè)列

   *選擇表中所有的列

   DISTINCT去掉列種重復(fù)的值

   Column | expression選擇列的名字或表達(dá)式

   Alias為指定的列設(shè)置不同的標(biāo)題

   FROM table 指定要選擇的列所在的表,即對(duì)那個(gè)表進(jìn)行數(shù)據(jù)檢索

 

SQL> SELECT * FROM  SCOTT.EMP;     查詢SCOTT用戶中EMP表中所用的數(shù)據(jù)

SQL> SELECT deptno,loc from scott.dept   查詢這個(gè)表中deptno, loc 這兩列

SQL>SELECT * FROM  dept  WHERE is NULL  查詢這個(gè)表中為空值的行

 

別名機(jī)制:

在使用SELECT語句時(shí),SQL*PLUS 使用選擇的列名作為列標(biāo)題,并且采用大寫的方式,由于表中的列名是數(shù)據(jù)庫開發(fā)人員或程序員設(shè)計(jì)的,是為了編程的需要。但是這樣的列標(biāo)題可能不具備描述性質(zhì)而難以理解,Oracle提供了列別名更改列標(biāo)題的顯示方式。

 

創(chuàng)建Oracle數(shù)據(jù)庫方式

1、使用DBCA(數(shù)據(jù)庫配置助手)

2、使用CREATE DATABASE 指令

3、在安裝數(shù)據(jù)庫軟件時(shí)創(chuàng)建數(shù)據(jù)庫

 

臨時(shí)表:

臨時(shí)表是特殊的表,它只對(duì)當(dāng)前用戶的當(dāng)前會(huì)話有效,創(chuàng)建臨時(shí)表的目的就是使得某些操作的效率更高,臨時(shí)表中的數(shù)據(jù)只對(duì)當(dāng)前的會(huì)話的用戶有效,是當(dāng)前會(huì)話的私有數(shù)據(jù),當(dāng)前會(huì)話只操作自己的數(shù)據(jù),沒有數(shù)據(jù)鎖的爭(zhēng)用,這極大提高了歷史表操作的效率。

對(duì)表中的數(shù)據(jù)可以進(jìn)行:維護(hù)列,修改列,刪除列

    刪除表和截?cái)啾淼膮^(qū)別:是否保留表結(jié)構(gòu)。

 

oracle 數(shù)據(jù)字典

    數(shù)據(jù)字典是在數(shù)據(jù)庫的創(chuàng)建過程中創(chuàng)建的,它是由oracle數(shù)據(jù)庫服務(wù)器管理,存儲(chǔ)在系統(tǒng)表空間中,它是一個(gè)集合,這個(gè)集合由只讀表和視圖組成,提供所有和數(shù)據(jù)庫相關(guān)的信息。數(shù)據(jù)字典由兩大類組成。

基表:基表無法讀取,必須通過數(shù)據(jù)字典視圖才轉(zhuǎn)化為可讀的表。

數(shù)據(jù)字典視圖:是可讀的數(shù)據(jù)字典,也是DBA經(jīng)常使用的數(shù)據(jù)字典。它由以下兩種對(duì)象組成:

  靜態(tài)數(shù)據(jù)字典表:它基于基表而創(chuàng)建,容易閱讀,通過使用一個(gè)名為catalog.sql腳本文件創(chuàng)建。如 user_tables,dba_objects

  動(dòng)態(tài)性能視圖:它在數(shù)據(jù)庫運(yùn)行期間存在,它讀取內(nèi)存或控制文件的內(nèi)容,提供了數(shù)據(jù)的動(dòng)態(tài)性能信息。如:v$logfil, v$database , v$instance 等等。

 

三種主要的靜態(tài)數(shù)據(jù)字典表:dba_XXX , all_XXX , user_xx

查詢?cè)撚脩羲鶕碛械臄?shù)據(jù)庫對(duì)象信息:

user_tables , user_indexes (索引), user_views(視圖)

動(dòng)態(tài)性能視圖以V$開頭,它只存在于運(yùn)行的數(shù)據(jù)庫中,它是一組虛表。

    V$instance  , V$database  , V$controlfile  , V$log , V$logfil

 

 

視圖的概念:

視圖是一個(gè)虛表,不占用存儲(chǔ)空間,不存儲(chǔ)數(shù)據(jù),數(shù)據(jù)字典中只有視圖的定義,視圖可以通過DML語言操作,但是有一定的限制,因?yàn)椴僮饕晥D最終還是操作創(chuàng)建視圖的底層表。

如:我們?yōu)槊恳粋€(gè)部門創(chuàng)建一個(gè)視圖,這樣不同的部門只要使用視圖就可以完成查詢,而不再使用多表連接和WHERE條件語句來限制查詢的部門。

 

例子:create or replace view research_view

      (employee_name,job,hiredate,salary,dep_name)

      as

      select e.ename,e.job,e.hiredate,e.sal , d.dname

      from  dept  d,emp e

      where  e.deptno  = d.deptno

      and  d.deptno = 20

      with  read  only;

使用視圖的WITH子句:with read only 子句

刪除視圖:drop  view  emp_view;

驗(yàn)證是否刪除成功:select 語句

 

事務(wù)的概念:

 事務(wù)的由來:銀行取款的例子

   如果用戶A要給用戶B從銀行轉(zhuǎn)賬10000元,此時(shí)我們考慮ATM機(jī)的行為,把ATM機(jī)的行為作為一個(gè)事務(wù)。ATM機(jī)的實(shí)施步驟如下:

  從用戶A的賬號(hào)減少1萬元

  從用戶B的賬戶增加一萬元。

  上述兩個(gè)步驟必須都成功執(zhí)行,如果兩個(gè)步驟任何一個(gè)出現(xiàn)了問題,我們說ATM機(jī)沒有正確的完成這次轉(zhuǎn)賬行為。誰也不希望在自己的賬戶上白白丟失一萬元。此時(shí)ATM機(jī)的兩個(gè)執(zhí)行步驟是不可分割的行為,要么執(zhí)行成功,要么不執(zhí)行(回滾所有更改的數(shù)據(jù)),ATM機(jī)的兩個(gè)操作在邏輯上就可以看作是一個(gè)完整的事務(wù)。

事務(wù)是一組邏輯工作單元,它有一條或多條SQL語句組成。一個(gè)事務(wù)可以在操作的數(shù)據(jù)庫對(duì)象上執(zhí)行一個(gè)或多個(gè)操作,事務(wù)可以作為程序的部分功能而執(zhí)行。


事務(wù)開始于一條可執(zhí)行的SQL語句,繼續(xù)執(zhí)行事務(wù)主體,然后結(jié)束以下的一種情況發(fā)生:

1、顯示提交COMMIT:當(dāng)事務(wù)遇到COMMIT指令時(shí),將結(jié)束事務(wù)并永久保存所有更改的數(shù)據(jù)到數(shù)據(jù)庫文件中。

2、顯示回滾ROLLBACK:當(dāng)事務(wù)遇到這個(gè)指令時(shí),也結(jié)束事務(wù)的執(zhí)行,但是此時(shí)它回滾所有更改的數(shù)據(jù)到其原始值,即取消所有更改。

3、DDL語句:一旦用戶在使用數(shù)據(jù)定義語言時(shí),如CREATE、DROP等,則之前的所有DML語言操作都作為事務(wù)的一部分而提交,此時(shí)稱為隱式提交。

4、正常結(jié)束程序,如果oracle 數(shù)據(jù)庫應(yīng)用程序正常結(jié)束,如使用 SQL*PLUS工具更改了數(shù)據(jù),而正常退出該工具程序,則oralce自動(dòng)提交事務(wù)。

5、非正常結(jié)束程序:當(dāng)程序崩潰或意外中止時(shí),所有數(shù)據(jù)更改都被回滾,類似于顯示回滾操作的結(jié)果,這里是隱式回滾的,因?yàn)闆]有用戶參與。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI