真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Oracle體系結(jié)構(gòu)和用戶管理

通過博文部署Oracle 12c企業(yè)版數(shù)據(jù)庫已經(jīng)可以部署Oracle數(shù)據(jù)庫了,本篇博文主要介紹Oracle的體系結(jié)構(gòu),包括存儲(chǔ)結(jié)構(gòu)、內(nèi)存結(jié)構(gòu)和進(jìn)程結(jié)構(gòu)進(jìn)行初步了解。對(duì)進(jìn)一步學(xué)習(xí)Oracle數(shù)據(jù)庫有很大的幫助。

成都創(chuàng)新互聯(lián)主營稷山網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都app軟件開發(fā)公司,稷山h5小程序制作搭建,稷山網(wǎng)站營銷推廣歡迎稷山等地區(qū)企業(yè)咨詢

博文大綱:
一、Oracle體系結(jié)構(gòu)
1.Oracle體系結(jié)構(gòu)概述
2.Oracle服務(wù)器
3.Oracle存儲(chǔ)結(jié)構(gòu)
4.Oracle內(nèi)存結(jié)構(gòu)
5.Oracle進(jìn)程結(jié)構(gòu)
二、CDB與PDB的基本操作
三、用戶管理
四、數(shù)據(jù)庫權(quán)限管理
五、導(dǎo)入測試數(shù)據(jù)

一、Oracle體系結(jié)構(gòu)

數(shù)據(jù)庫的體系結(jié)構(gòu)是指數(shù)據(jù)庫的組成、工作過程、以及數(shù)據(jù)庫中數(shù)據(jù)的組織與管理機(jī)制,要了解Oracle數(shù)據(jù)庫的體系結(jié)構(gòu),必須理解Oracle系統(tǒng)的主要組件和重要概念。

1.Oracle體系結(jié)構(gòu)概述

Oracle體系結(jié)構(gòu)包含一系列組件,如圖:
Oracle體系結(jié)構(gòu)和用戶管理
圖中顯示了Oracle體系結(jié)構(gòu)中的主要組件,包括實(shí)例、用戶進(jìn)程、服務(wù)器進(jìn)程、數(shù)據(jù)文件及其他文件,如參數(shù)文件、口令文件和歸檔日志文件等。

從圖中可以看出,實(shí)例和數(shù)據(jù)庫是Oracle數(shù)據(jù)庫體系結(jié)構(gòu)的核心組成部分,也是最重要的兩個(gè)概念。

作為一個(gè)DBA管理者,維護(hù)實(shí)例和數(shù)據(jù)庫本身的正常運(yùn)行是最基本的技能。

(1)實(shí)例

Oracle實(shí)例是后臺(tái)進(jìn)程和內(nèi)存結(jié)構(gòu)的集合,必須啟動(dòng)實(shí)例才能訪問數(shù)據(jù)庫中的數(shù)據(jù)。Oracle實(shí)例啟動(dòng)時(shí),將分配一個(gè)系統(tǒng)全局區(qū)(SGA)并啟動(dòng)一系列Oracle后臺(tái)進(jìn)程。

Oracle實(shí)例有兩種類型:

  • 單進(jìn)程Oracle實(shí)例使用一個(gè)進(jìn)程執(zhí)行Oracle的全部操作,在單進(jìn)程環(huán)境下的Oracle實(shí)例僅允許一個(gè)用戶可存??;
  • 多進(jìn)程Oracle實(shí)例使用多個(gè)進(jìn)程來執(zhí)行Oracle的不同部分,對(duì)于每個(gè)連接的用戶都有一個(gè)進(jìn)程;

(2)數(shù)據(jù)庫

數(shù)據(jù)庫是數(shù)據(jù)的集合,物理上指存儲(chǔ)數(shù)據(jù)庫信息的一組操作系統(tǒng)文件,每個(gè)數(shù)據(jù)庫有一個(gè)邏輯結(jié)構(gòu)和物理結(jié)構(gòu)。

  • 物理結(jié)構(gòu)是指構(gòu)成數(shù)據(jù)庫的一組操作系統(tǒng)文件,主要由三種類型文件組成、數(shù)據(jù)文件、控制文件和重做日志文件;
  • 數(shù)據(jù)庫的邏輯結(jié)構(gòu)是指數(shù)據(jù)庫數(shù)據(jù)的邏輯存儲(chǔ)結(jié)構(gòu)(如表空間、段)和模式對(duì)象(如表、視圖等);

(3)可插拔數(shù)據(jù)庫

從Oracle 12c版本開始,Oracle引入了可插拔數(shù)據(jù)庫的概念,可插拔是為云計(jì)算而生??刹灏蔚慕Y(jié)構(gòu)由一個(gè)容器數(shù)據(jù)庫(CDB)和若干個(gè)可組裝數(shù)據(jù)庫(PDB)組成,每個(gè)PDB對(duì)外可充當(dāng)一個(gè)獨(dú)立的數(shù)據(jù)庫工應(yīng)用程序使用,它可以包含自己的數(shù)據(jù)文件,但是所有的PDB共享CDB的控制文件以及日志文件。所謂的可插拔,意味著PDB可以像USB一樣隨時(shí)插入CDB中,不用了也可以隨時(shí)拔下來。一個(gè)CDB中最多可以插入250個(gè)PDB,在PDB中,seedPDB為模板PDB,它為新創(chuàng)建的PDB提供模板,其他的PDB可以根據(jù)需要?jiǎng)?chuàng)建、刪除??刹灏喂δ芸梢约铀贁?shù)據(jù)庫的部署,給一個(gè)CDB打補(bǔ)丁就可以經(jīng)所有的更新同步到其上的所有PDB中。

在Oracle 12c之前的版本中,實(shí)例和數(shù)據(jù)庫只能是一對(duì)一或多對(duì)一的關(guān)系,即只能是一個(gè)實(shí)例對(duì)應(yīng)一個(gè)數(shù)據(jù)庫,或者多個(gè)實(shí)例對(duì)應(yīng)一個(gè)數(shù)據(jù)庫。單子啊Oracle 12c版本中,通過引入CDB和PDB,一個(gè)實(shí)例可以對(duì)應(yīng)多個(gè)可插拔數(shù)據(jù)庫。

可插拔數(shù)據(jù)庫的使用場景:
(1)企業(yè)中有多個(gè)應(yīng)用均需要使用Oracle數(shù)據(jù)庫,他們僅使用非常少量的硬件資源,但是又不得不為他們創(chuàng)建多個(gè)實(shí)例;
(2)一些不是特別重要的數(shù)據(jù)庫,打包需要DBA花費(fèi)大量的精力去維護(hù);
(3)為了更好的利用硬件資源以及減少管理開銷,有必要將大量的部門級(jí)應(yīng)用整合到少數(shù)幾個(gè)Oracle關(guān)系型數(shù)據(jù)庫中,以便部署和管理;

通過一個(gè)集中化的平臺(tái)部署多個(gè)數(shù)據(jù)庫,同時(shí)又共享一個(gè)數(shù)據(jù)庫實(shí)例,可以大大降低成本,即更少的實(shí)例損耗和耕地的存儲(chǔ)技術(shù)。

如果在生產(chǎn)環(huán)境中只需要一個(gè)數(shù)據(jù)庫,并不想使用可插拔數(shù)據(jù)庫,可以在安裝過程中取消勾選“創(chuàng)建為容器數(shù)據(jù)庫”復(fù)選框,從而將安裝一個(gè)普通數(shù)據(jù)庫。

2.Oracle服務(wù)器

Oracle服務(wù)器也是非常重要的概念,它主要由實(shí)力和數(shù)據(jù)庫文件組成,也就是常說的數(shù)據(jù)庫管理系統(tǒng)(DBMS)。
Oracle服務(wù)器的組成如圖:
Oracle體系結(jié)構(gòu)和用戶管理
Oracle服務(wù)器除了維護(hù)實(shí)例和數(shù)據(jù)庫文件外,還在用戶建立與服務(wù)器的連接時(shí)啟動(dòng)服務(wù)器進(jìn)程并分配PGA。

3.Oracle存儲(chǔ)結(jié)構(gòu)

Oracle的存儲(chǔ)結(jié)構(gòu)分為物理結(jié)構(gòu)和邏輯結(jié)構(gòu),這兩種存儲(chǔ)結(jié)構(gòu)既相互獨(dú)立又相互聯(lián)系。如圖:
Oracle體系結(jié)構(gòu)和用戶管理

  • 物理結(jié)構(gòu)主要描述Oracle數(shù)據(jù)庫的外部存儲(chǔ)結(jié)構(gòu),即在操作系統(tǒng)中如何組織、管理數(shù)據(jù);
  • 邏輯結(jié)構(gòu)主要描述Oracle數(shù)據(jù)庫的內(nèi)部存儲(chǔ)結(jié)構(gòu),即從邏輯概念上描述在Oracle數(shù)據(jù)庫中如何組織、管理數(shù)據(jù);

(1)Oracle物理結(jié)構(gòu)

物理結(jié)構(gòu)是Oracle數(shù)據(jù)庫創(chuàng)建后使用的操作系統(tǒng)物理文件,Oracle數(shù)據(jù)庫的物理文件分為以下兩類:

1)主要文件

(1)數(shù)據(jù)文件:數(shù)據(jù)文件的擴(kuò)展名通常是.dbf,是物理存儲(chǔ)Oracle數(shù)據(jù)庫數(shù)據(jù)的文件。

數(shù)據(jù)文件的特點(diǎn):

  • 每個(gè)數(shù)據(jù)文件只與一個(gè)數(shù)據(jù)庫相聯(lián)系;
  • 一個(gè)表空間可包含一個(gè)或多個(gè)數(shù)據(jù)文件;
  • 一個(gè)數(shù)據(jù)文件只能屬于一個(gè)表空間;

(2)重做日志文件:重做日志文件的擴(kuò)展名是.log,它記錄了對(duì)數(shù)據(jù)的所有更改信息,并提供了一種數(shù)據(jù)恢復(fù)機(jī)制,確保在系統(tǒng)崩潰或其他意外出現(xiàn)后重新恢復(fù)數(shù)據(jù)庫。

在Oracle數(shù)據(jù)庫中,重做日志文件是成組使用的,每個(gè)重做日志文件組可以有一個(gè)多多個(gè)重做日志文件。在工作過程中,多個(gè)重做日志文件組之間循環(huán)使用,當(dāng)一個(gè)重做日志文件組寫滿后,會(huì)轉(zhuǎn)向下一個(gè)日志文件組。重做日志文件用于記錄數(shù)據(jù)庫變化,是用戶的事務(wù)處理日志。

(3)控制文件:控制文件的擴(kuò)展名是.ctl,是一個(gè)二進(jìn)制文件??刂莆募写鎯?chǔ)的信息很多,其中包括數(shù)據(jù)文件和重做日志文件的名稱和位置??刂莆募菙?shù)據(jù)庫啟動(dòng)及運(yùn)行所必須的文件。當(dāng)Oracle讀寫數(shù)據(jù)時(shí),要根據(jù)控制文件 的信息查找數(shù)據(jù)文件。

由于控制文件的重要性,一個(gè)數(shù)據(jù)庫至少要有兩份控制文件。Oracle 12c默認(rèn)包含兩個(gè)控制文件,各個(gè)控制文件內(nèi)容相同,從而可以避免因?yàn)橐粋€(gè)控制文件的損壞而導(dǎo)致無法啟動(dòng)數(shù)據(jù)庫的情況發(fā)生。

控制文件中記錄了以下信息:

  • 數(shù)據(jù)文件的位置及大??;
  • 重做日志文件的位置及大小;
  • 數(shù)據(jù)庫名稱及創(chuàng)建時(shí)間;
  • 日志序列號(hào);
2)其他文件

其他文件有參數(shù)文件、歸檔日志文件、口令文件等。

(2)邏輯結(jié)構(gòu)

數(shù)據(jù)庫的邏輯結(jié)構(gòu)是從邏輯的角度分析數(shù)據(jù)庫的組成的。Oracle數(shù)據(jù)庫的邏輯結(jié)構(gòu)包括表空間、段、區(qū)、塊和模式等。如圖:
Oracle體系結(jié)構(gòu)和用戶管理

1)表空間

每個(gè)Oracle數(shù)據(jù)庫都是由若干個(gè)表空間構(gòu)成的,用戶在數(shù)據(jù)庫中建立的所有內(nèi)容都被存儲(chǔ)到表空間中。一個(gè)表空間可以由多個(gè)數(shù)據(jù)文件,但一個(gè)數(shù)據(jù)文件只能屬于一個(gè)表空間。與數(shù)據(jù)文件這種物理結(jié)構(gòu)不同,表空間屬于數(shù)據(jù)庫的邏輯結(jié)構(gòu)。

在每個(gè)數(shù)據(jù)庫中,都有一個(gè)名為“SYSTEM”的表空間,即系統(tǒng)表空間,還會(huì)有SYSAUX、UNDO、USERS等表空間,這些都是在創(chuàng)建數(shù)據(jù)庫時(shí)自動(dòng)創(chuàng)建的。管理員可以創(chuàng)建自定義的表空間并分配給指定用戶,也可以為表空間增加和刪除數(shù)據(jù)文件。

表空間基本有以下三類:
(1)永久性表空間:一般保持基表、試圖、過程和索引等的數(shù)據(jù)。SYSTEM、SYSAUX、USERS表空間是默認(rèn)安裝的;
(2)臨時(shí)性表空間:只用于保存系統(tǒng)中短期活動(dòng)的數(shù)據(jù),如排序數(shù)據(jù)等;
(3)撤銷表空間:用來幫助回退未提交的事務(wù)數(shù)據(jù),已提交的數(shù)據(jù)在這里是不可以恢復(fù)的;

一般不需要?jiǎng)?chuàng)建臨時(shí)性表空間和撤銷表空間,除非要把他們轉(zhuǎn)移到其他磁盤中以提高性能。

表空間的目的如下:

  • 對(duì)不同用戶分配不同的表空間,對(duì)不同的模式對(duì)象分配不同的表空間,方便對(duì)用戶操作和對(duì)模式對(duì)象的管理;
  • 可以將不同數(shù)據(jù)文件創(chuàng)建不同的磁盤中,有利于管理磁盤空間、提高I/O性能、備份和恢復(fù)數(shù)據(jù)等;

一般在完成Oracle系統(tǒng)的安裝并創(chuàng)建Oracle實(shí)例后,Oracle系統(tǒng)自動(dòng)啊盡力SYSTEM、SYSAUX、USRS等多個(gè)表空間。

下面詳細(xì)介紹一下這幾種表空間:

  • SYSTEM表空間:用于存放Oracle系統(tǒng)內(nèi)部表和數(shù)據(jù)字典的數(shù)據(jù),如表名、列名、用戶名等。不建議將用戶創(chuàng)建的表,索引等對(duì)象存放到SYSTEM表空間中;
  • SYSAUX表空間:作為SYSTEM的輔助表空間,用于存放各種數(shù)據(jù)庫工具用戶的數(shù)據(jù);還用于存放各種模式的對(duì)象數(shù)據(jù),如智能代理用戶DBSNMP等,這些模式在數(shù)據(jù)庫安裝完成后就建立了相應(yīng)的對(duì)象并都存放在SYSAUX表空間中;
  • USERS表空間:通常作為用戶使用的表空間,可以在這個(gè)表空間上創(chuàng)建各種對(duì)象,如表、索引等;
  • TEMP表空間:Oracle系統(tǒng)用于存放臨時(shí)數(shù)據(jù)的特殊表空間。比如:當(dāng)操作中需要進(jìn)行排序時(shí),Oracle系統(tǒng)就將排序的數(shù)據(jù)臨時(shí)存放在該表空間內(nèi)。排序處理完成后即可釋放排序數(shù)據(jù)所占用的空間,因此成為臨時(shí)表空間;

除了Oracle系統(tǒng)默認(rèn)創(chuàng)建的表空間外,用戶可根據(jù)應(yīng)用系統(tǒng)的模式及其所要存儲(chǔ)的對(duì)象類型創(chuàng)建多個(gè)表空間,以區(qū)分用戶數(shù)據(jù)和系統(tǒng)數(shù)據(jù)。

創(chuàng)建表空間數(shù)據(jù)數(shù)據(jù)定義語言,語法如下:
Oracle體系結(jié)構(gòu)和用戶管理
語法中:

  • tablespacename:表空間名稱;
  • DATAFILE:指定組成表空間的一個(gè)或多個(gè)數(shù)據(jù)文件,當(dāng)有多個(gè)數(shù)據(jù)文件時(shí)使用逗號(hào)進(jìn)行分隔;
  • filename:表空間中數(shù)據(jù)文件的路徑和名稱;
  • SIZE:指定文件的大小,單位可以是K,也可以是M;
  • AUTOEXTEND:用來啟動(dòng)或禁用數(shù)據(jù)文件的自動(dòng)擴(kuò)展。若設(shè)置為ON時(shí),則表示空間用盡會(huì)自動(dòng)擴(kuò)展;若設(shè)置為OFF時(shí),很容易出現(xiàn)表空間剩余容量為0,造成數(shù)據(jù)不能存儲(chǔ)到數(shù)據(jù)庫中的情況出現(xiàn)。

4.Oracle內(nèi)存結(jié)構(gòu)

內(nèi)存結(jié)構(gòu)是Oracle數(shù)據(jù)庫體系中最為重要的一部分,內(nèi)存也是影響數(shù)據(jù)庫性能的第一要素。

Oacle內(nèi)存存儲(chǔ)的主要內(nèi)容:

  • 程序代碼;
  • 已經(jīng)連接的會(huì)話的相關(guān)信息,包括當(dāng)前所有活動(dòng)會(huì)話和非活動(dòng)會(huì)話;
  • 程序運(yùn)行時(shí)必需的相關(guān)信息,如查詢計(jì)劃;
  • Oracle進(jìn)程之間通信和共享的信息,如鎖;

照內(nèi)存使用方式不同,Oracle數(shù)據(jù)庫的內(nèi)存也可以分為以下幾種:

  • SGA:所有用戶都可以訪問的實(shí)例的共享內(nèi)存區(qū)域。數(shù)據(jù)塊、事務(wù)處理日志、數(shù)據(jù)字典信息等都存儲(chǔ)在SGA中;
  • PGA:一類非共享的內(nèi)存,專用于特定的服務(wù)器進(jìn)程,并且只能夠由這個(gè)進(jìn)程訪問;
  • UGA:為用戶進(jìn)程存儲(chǔ)會(huì)話狀態(tài)的內(nèi)存區(qū)域。根據(jù)用戶數(shù)據(jù)庫時(shí)配置為專用服務(wù)器模式,還是配置為共享服務(wù)器模式,UGA可以作為SGA或PGA的一部分。它為用戶會(huì)話存儲(chǔ)數(shù)據(jù)。

重點(diǎn)介紹一下SGA和PGA:

(1)SGA

Oracle實(shí)例的SGA同來存儲(chǔ)數(shù)據(jù)庫信息,并由多個(gè)數(shù)據(jù)庫進(jìn)程共享。當(dāng)數(shù)據(jù)庫實(shí)例啟動(dòng)時(shí),SGA的內(nèi)存被自動(dòng)分配。SAG是數(shù)據(jù)庫中占用服務(wù)器內(nèi)存最大的一個(gè)區(qū)域,也是影響數(shù)據(jù)庫性能的一個(gè)重要指標(biāo)。

SGA按其作用不同,可以分為以下幾個(gè)部分:

1)共享池

共享池是對(duì)SQL、PL/SQL程序進(jìn)行語法分析、編譯、執(zhí)行時(shí)用到的內(nèi)存區(qū)域。

共享池由庫緩存和數(shù)據(jù)字典緩存組成:

  • 庫緩存含有最近執(zhí)行的SQL、PL/SQL語句的分析碼和執(zhí)行計(jì)劃;
  • 數(shù)據(jù)字典緩存含有從數(shù)據(jù)字典中得到的表、索引、列定義、權(quán)限信息和其他一些數(shù)據(jù)庫對(duì)象的定義,如果Oracle緩存了這些信息,那么無疑是縮短了查詢的響應(yīng)時(shí)間;
2)數(shù)據(jù)緩沖區(qū)

數(shù)據(jù)緩沖區(qū)用于存儲(chǔ)從磁盤數(shù)據(jù)文件中讀入的數(shù)據(jù),供所有用戶共享。修改數(shù)據(jù)時(shí),首先要從數(shù)據(jù)文件中取出數(shù)據(jù),存儲(chǔ)于數(shù)據(jù)緩沖區(qū)中。修改的數(shù)據(jù),插入的數(shù)據(jù)都被存儲(chǔ)于數(shù)據(jù)緩沖區(qū)中,修改完成和其他條件滿足時(shí),數(shù)據(jù)才被寫入數(shù)據(jù)文件中。

Oracle服務(wù)器進(jìn)程在處理一個(gè)查詢時(shí),首先查找內(nèi)存中是否存在所需的數(shù)據(jù)塊。如果在數(shù)據(jù)緩沖區(qū)中沒有找到需要的塊,服務(wù)器進(jìn)程就從數(shù)據(jù)文件中讀取此塊,并保存在緩沖區(qū)中。當(dāng)后續(xù)的請(qǐng)求需要讀取這些塊時(shí),便可以在內(nèi)存中找到,因此這些請(qǐng)求不需要從磁盤中讀取,從而提高了讀取速度。數(shù)據(jù)緩沖區(qū)的大小對(duì)數(shù)據(jù)庫的讀取速度有直接的影響。

3)重做日志緩沖區(qū)

當(dāng)用戶執(zhí)行了如INSERT、UPDATE、DELETE、CREATE、ALTER、DROP等操作時(shí),數(shù)據(jù)發(fā)生了變化,這些變化了的數(shù)據(jù)在寫入數(shù)據(jù)緩存之前先要寫入重做日志緩沖區(qū),同時(shí)變化之前的數(shù)據(jù)也放入重做日志緩存,這樣在數(shù)據(jù)恢復(fù)時(shí)Oracle就知道哪些資源需要提交,哪些資源需要撤回。相對(duì)于數(shù)據(jù)緩沖區(qū),日志緩沖區(qū)對(duì)數(shù)據(jù)庫的性能影響較小。

4)大池

在SGA中,大池是一個(gè)可選的緩沖區(qū),管理員可以根據(jù)需要對(duì)其今進(jìn)行配置。在大規(guī)模輸入、輸出及備份過程中也需要大池作為緩沖空間,如大數(shù)據(jù)操作、數(shù)據(jù)庫備份與恢復(fù)之類的操作。

5)Java池

在SGA中,Java池也是一個(gè)可選的緩沖區(qū),但是在安裝Java或者使用Java程序時(shí)必須設(shè)置Java池,用于編譯Java語言編寫的指令。

(2)PGA

PGA不是實(shí)例的一部分,它包含單個(gè)服務(wù)器進(jìn)程或單個(gè)后臺(tái)進(jìn)程所需的數(shù)據(jù)和控制信息。PGA是在用戶進(jìn)程連接到數(shù)據(jù)庫并創(chuàng)建一個(gè)會(huì)話時(shí)自動(dòng)分配的,該分區(qū)保留了每個(gè)與Oracle數(shù)據(jù)庫連接的用戶進(jìn)程所需的內(nèi)存。在一個(gè)用戶結(jié)束會(huì)話后,PGA將被釋放。

5.Oracle進(jìn)程結(jié)構(gòu)

Oracle中有幾種不同類型的進(jìn)程:

  • 用戶進(jìn)程:在數(shù)據(jù)庫用戶請(qǐng)求連接Oracle服務(wù)器時(shí)啟動(dòng);
  • 服務(wù)器進(jìn)程:在用戶建立會(huì)話并連接Oracle實(shí)例時(shí)啟動(dòng);
  • 后臺(tái)進(jìn)程:在Oracle實(shí)例啟動(dòng)時(shí)啟動(dòng);

用戶進(jìn)程是一個(gè)需要與Oracle服務(wù)器進(jìn)程交互的程序。當(dāng)數(shù)據(jù)庫用戶運(yùn)行一個(gè)應(yīng)用程序準(zhǔn)備向數(shù)據(jù)庫服務(wù)器發(fā)送請(qǐng)求時(shí),即創(chuàng)建了用戶進(jìn)程。例如:用戶啟動(dòng)數(shù)據(jù)庫工具Sqlplus時(shí),系統(tǒng)將自動(dòng)建立一個(gè)用戶進(jìn)程。

服務(wù)器進(jìn)程用于處理連接到實(shí)例的用戶進(jìn)程的請(qǐng)求。當(dāng)用戶建立與數(shù)據(jù)庫的連接時(shí),即產(chǎn)生服務(wù)器進(jìn)程。服務(wù)器進(jìn)程和用戶進(jìn)程通信并為所連接的用戶請(qǐng)求服務(wù)。服務(wù)器進(jìn)程直接與Oracle數(shù)據(jù)庫交互,實(shí)現(xiàn)調(diào)用和返回結(jié)果的目的。服務(wù)器進(jìn)程及可以處理一個(gè)用戶進(jìn)程的請(qǐng)求,也可以處理多個(gè)用戶進(jìn)程的請(qǐng)求。

在Oracle數(shù)據(jù)庫中,為了使系統(tǒng)性能更好地協(xié)調(diào)多個(gè)用戶,實(shí)例系統(tǒng)中使用的一些附加進(jìn)程,稱為后臺(tái)進(jìn)程。這些后臺(tái)進(jìn)程存在于操作系統(tǒng)中,在實(shí)例啟動(dòng)時(shí)自動(dòng)啟動(dòng)。其中有五個(gè)進(jìn)程是必須要啟動(dòng)的,否則數(shù)據(jù)庫實(shí)例無法啟動(dòng)。這五個(gè)進(jìn)程分別是:

(1)PMON(進(jìn)程監(jiān)控)進(jìn)程

PMON進(jìn)程在用戶連接意外中斷后執(zhí)行資源清理工作,包括以下任務(wù):

  • 釋放所有當(dāng)前掛起的鎖;
  • 回滾用戶當(dāng)前事務(wù)處理;
  • 釋放用戶當(dāng)前使用的資源;
  • 監(jiān)控服務(wù)器進(jìn)程和其他后臺(tái)進(jìn)程,出現(xiàn)故障時(shí)重啟它們;

(2)SMON(系統(tǒng)監(jiān)控)進(jìn)程

SMON進(jìn)程執(zhí)行以下任務(wù):

  • 在實(shí)例啟動(dòng)時(shí)執(zhí)行實(shí)例恢復(fù)。實(shí)例恢復(fù)包括三個(gè)步驟:
    (1)前滾以恢復(fù)未寫入的數(shù)據(jù)文件但已記入聯(lián)機(jī)日志文件的數(shù)據(jù);
    (2)打開數(shù)據(jù)庫,以便用戶能登錄并訪問數(shù)據(jù);
    (3)回滾為提交的事務(wù)處理;
  • 整理數(shù)據(jù)文件的自由空間;
  • 釋放不再使用的臨時(shí)段;

(3)DBWR(數(shù)據(jù)寫入)進(jìn)程

DBWR進(jìn)程執(zhí)行以下任務(wù):

  • 管理數(shù)據(jù)緩沖區(qū),以便能找到空閑的緩沖區(qū)讀入數(shù)據(jù)文件的數(shù)據(jù);
  • 將所有修改后的緩沖區(qū)數(shù)據(jù)寫入數(shù)據(jù)文件;
  • 使用LRU算法經(jīng)最近使用過的塊保留在內(nèi)存中;
  • 通過延遲寫入優(yōu)化磁盤I/O讀寫;

(4)LGWR(日志寫入)進(jìn)程

LGWR進(jìn)程負(fù)責(zé)將重做日志緩沖區(qū)中的日志數(shù)據(jù)寫入日志文件組。數(shù)據(jù)庫在運(yùn)行時(shí),如果對(duì)數(shù)據(jù)進(jìn)行修改,則產(chǎn)生日志信息,日志信息首先產(chǎn)生于重做日志緩沖區(qū)中。此緩沖器按照“先進(jìn)先出”的原則進(jìn)行操作,當(dāng)日志信息滿足一定條件是,由LGWR進(jìn)程將日志數(shù)據(jù)寫入日志文件。系統(tǒng)通常有多個(gè)日志文件,日志寫入進(jìn)程以循環(huán)的方式將數(shù)據(jù)寫入文件。

(5)CKPT(檢查點(diǎn))進(jìn)程

CKPT進(jìn)程是確保數(shù)據(jù)緩沖區(qū)中所有修改過的數(shù)據(jù)塊都寫入數(shù)據(jù)文件的機(jī)制。當(dāng)檢查點(diǎn)完成后,CKPT進(jìn)程負(fù)責(zé)更新數(shù)據(jù)文件頭和控制文件、保存檢查點(diǎn)信息,以保證數(shù)據(jù)庫日志文件和數(shù)據(jù)文件同步。在數(shù)據(jù)庫恢復(fù)時(shí)只需要找到CKPT保存的最后一次檢查點(diǎn),就可以根據(jù)它確定日志文件中恢復(fù)數(shù)據(jù)的開始位置,然后重新執(zhí)行其之后的日志記錄即可。

(6)ARCn進(jìn)程

ARCn進(jìn)程即歸檔日志進(jìn)程,是一個(gè)可選進(jìn)程,只有在打開日志歸檔時(shí)才有該進(jìn)程。該進(jìn)程的主要作用是發(fā)生日志切換時(shí)將寫滿的聯(lián)機(jī)日志文件復(fù)制到歸檔目錄。

二、CDB與PDB的基本操作

與之前版本的Oracle不同,Oracle 12c可以作為單個(gè)數(shù)據(jù)庫使用,也可根據(jù)企業(yè)需要,提供若干個(gè)可插拔PDB數(shù)據(jù)庫。每個(gè)PDB可以由不同的DBA維護(hù)。

下面簡單介紹一下CDB與PDB的基本維護(hù):

[oracle@oracle ~]$ sqlplus sys as sysdba                          //以sys用戶登錄數(shù)據(jù)庫

SQL*Plus: Release 12.2.0.1.0 Production on 星期六 11月 30 15:26:41 2019

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

輸入口令: ******
已連接到空閑例程。

SQL> startup;                                    //啟動(dòng)數(shù)據(jù)庫
ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area 2466250752 bytes
Fixed Size          8795760 bytes
Variable Size         671091088 bytes
Database Buffers     1778384896 bytes
Redo Buffers            7979008 bytes
數(shù)據(jù)庫裝載完畢。
數(shù)據(jù)庫已經(jīng)打開。
SQL> show  con_name;                   //查詢當(dāng)前所在的容器

CON_NAME
------------------------------
CDB$ROOT                                      //表示當(dāng)前在CDB下
SQL> show pdbs;                             //查詢數(shù)據(jù)庫中的所有容器  

    CON_ID CON_NAME           OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
     2 PDB$SEED           READ ONLY  NO                  //創(chuàng)建PDB數(shù)據(jù)庫模板                
     3 ORCLPDB            MOUNTED                           //狀態(tài)為mounted(并沒有open)
SQL> alter pluggable database orclpdb open;             //CDB下將可插拔數(shù)據(jù)庫orclpdb打開
//如果沒有將PDB打開就已經(jīng)切換到PDB中,可以使用“shutdown immediate”關(guān)閉PDB數(shù)據(jù)庫、“startup”啟動(dòng)PDB數(shù)據(jù)庫
插接式數(shù)據(jù)庫已變更。

SQL> alter session set container=orclpdb;         //CDB下切換會(huì)話到PDB中

會(huì)話已更改。

SQL> show con_name;                             //再次查看當(dāng)前位置已經(jīng)位于orclpdb中

CON_NAME
------------------------------
ORCLPDB
SQL> alter session set container=cdb$root;                        //回到CDB數(shù)據(jù)庫

會(huì)話已更改。

SQL> show con_name;

CON_NAME
------------------------------
CDB$ROOT

以上是從CDB切換到PDB中,反之,一樣。

連接到可插拔數(shù)據(jù)庫PDB有兩種方法:

  • 第一種方法就是首選登錄到CDB數(shù)據(jù)庫,再切換到PDB數(shù)據(jù)庫;
  • 第二種方法就是登錄時(shí)直接登錄到PDB數(shù)據(jù)庫;

第二種是實(shí)現(xiàn)方法如下:

[oracle@oracle ~]$ vim /u01/app/oracle/product/12.2.0/dbhome_1/network/admin/tnsnames.ora 
LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = oracle)(PORT = 1521))

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oracle)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
----------------------------------------------------                  //分界線,以上不需要進(jìn)行修改
lzj =                                                                          //根據(jù)上面的模板,進(jìn)行編寫,這個(gè)名字可以自定義
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oracle)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orclpdb)                                       //這里需要指定PDB數(shù)據(jù)庫名稱
    )
  )
[oracle@oracle ~]$ sqlplus sys@lzj as sysdba                       //登錄數(shù)據(jù)庫時(shí)需指定剛才定義的名稱

SQL*Plus: Release 12.2.0.1.0 Production on 星期六 11月 30 15:48:50 2019

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

輸入口令: ******

連接到: 
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> show con_name;                                    //查看進(jìn)行驗(yàn)證

CON_NAME
------------------------------
ORCLPDB

三、用戶管理

在創(chuàng)建一個(gè)新數(shù)據(jù)庫時(shí),Oracle將創(chuàng)建一些默認(rèn)數(shù)據(jù)庫用戶,比如:SYS、SYSTEM等用戶。

簡單介紹一下Oracle數(shù)據(jù)庫的用戶:

(1)SYS

SYS用戶是Oracle中的一個(gè)超級(jí)用戶,主要用來維護(hù)系統(tǒng)信息和管理實(shí)例。數(shù)據(jù)庫中所有數(shù)據(jù)字典和視圖都存儲(chǔ)在SYS模式中。數(shù)據(jù)字典存儲(chǔ)了用來管理數(shù)據(jù)庫對(duì)象的所有信息,是Oracle數(shù)據(jù)庫中非常重要的系統(tǒng)信息。SYS用戶只能以SYSOPER或SYSDBA角色登錄數(shù)據(jù)庫系統(tǒng)。

(2)SYSTEM

SYSTEM用戶是Oracle中默認(rèn)的數(shù)據(jù)庫管理員,它擁有DBA權(quán)限。該用戶模式中存儲(chǔ)了Oracle管理工具使用的內(nèi)部表和視圖。通常通過SYSTEM用戶管理Oracle數(shù)據(jù)庫的用戶、權(quán)限和存儲(chǔ)等,不建議在SYSTEM模式中創(chuàng)建用戶表。SYSTEM用戶不能以SYSOPER或SYSDBA角色登錄數(shù)據(jù)庫系統(tǒng),只能使用默認(rèn)方式(數(shù)據(jù)庫身份驗(yàn)證的方式)登錄。

(3)自定義用戶

Oracle 12c支持創(chuàng)建自定義用戶,由于PDB的引入,自定義用戶范疇和之前版本有所不同。在CDB模式下,用戶分為兩種:公用用戶和本地用戶。公用用戶可以在CDB和PDB中使用,而本地用戶只能在PDB中使用。在CDB環(huán)境中,不允許創(chuàng)建本地用戶。Oracle規(guī)定,在CDB中創(chuàng)建公用用戶是,用戶名必須以c##開頭。

通常情況下,出于安全考慮,對(duì)于不同用戶的數(shù)據(jù)表需要不同的訪問權(quán)限,因此,就需要?jiǎng)?chuàng)建不同的用戶。Oracle中的CREATE USER命令用于創(chuàng)建新用戶。每個(gè)用戶都有一個(gè)默認(rèn)空間和一個(gè)臨時(shí)表空間。如果沒有指定,Oracle就將USERS設(shè)為默認(rèn)表空間,將TEMP設(shè)為臨時(shí)表空間。

創(chuàng)建用戶的語法如下:
Oracle體系結(jié)構(gòu)和用戶管理
在語法中:
Oracle體系結(jié)構(gòu)和用戶管理

SQL> create user c##lzj
  2  identified by 123456;                            //創(chuàng)建用戶

用戶已創(chuàng)建。

SQL> alter user c##lzj identified by 654321;     //修改用戶密碼

用戶已更改。

SQL> drop user c##lzj cascade;                 //刪除用戶

用戶已刪除。
//刪除用戶時(shí),不帶 cascade則表示只刪除用戶,帶上 cascade則表示刪除用戶即用戶模式對(duì)象

四、數(shù)據(jù)庫權(quán)限管理

權(quán)限是執(zhí)行某種類型的SQL語句揮著存取其他用戶數(shù)據(jù)庫對(duì)象的權(quán)利。在Oracle中,權(quán)限分為系統(tǒng)權(quán)限和對(duì)象權(quán)限兩類。

1.系統(tǒng)權(quán)限

系統(tǒng)權(quán)限是指在數(shù)據(jù)庫中執(zhí)行某種系統(tǒng)級(jí)別的操作,或者針對(duì)某一類的對(duì)象執(zhí)行某種操作的權(quán)限。如圖:
Oracle體系結(jié)構(gòu)和用戶管理
常見的系統(tǒng)權(quán)限如下:

  • CREATE SESSION:連接到數(shù)據(jù)庫;
  • CREATE TABLE:創(chuàng)建表;
  • CREATE VIEW:創(chuàng)建視圖;
  • CREATE SEQUENCE:創(chuàng)建序列;

一個(gè)新用戶創(chuàng)建完成后,首選要授予其CREATE SESSION權(quán)限,使其可以登錄到數(shù)據(jù)庫。

2.對(duì)象權(quán)限

對(duì)象權(quán)限是指針對(duì)某個(gè)特定的模式對(duì)象執(zhí)行操作的權(quán)力。如圖:
Oracle體系結(jié)構(gòu)和用戶管理
Oracle數(shù)據(jù)庫用戶有兩種獲取權(quán)限的途徑:①直接向用戶授予權(quán)限;②將權(quán)限授予角色,再將角色授予一個(gè)或多個(gè)用戶。使用角色能夠更加方便和高效地對(duì)權(quán)限進(jìn)行管理。所以數(shù)據(jù)庫管理員通過使用角色向用戶授予權(quán)限,而不是直接向用戶授予權(quán)限。在Oracle數(shù)據(jù)庫系統(tǒng)中預(yù)定義了很多角色,其中最常用的主要有CONNECT角色、RESOURCE角色、DBA角色等。

Oracle中常用的系統(tǒng)預(yù)定義角色如下:

  • CONNECT:擁有連接數(shù)據(jù)庫的權(quán)限;
  • RESOURCE:擁有創(chuàng)建表、觸發(fā)器、過程等權(quán)限;
  • DBA:數(shù)據(jù)庫管理員角色,擁有管理數(shù)據(jù)庫的最高權(quán)限;

新創(chuàng)建的用戶必須授予一定的權(quán)限才可對(duì)數(shù)據(jù)庫進(jìn)行相關(guān)的操作。

SQL> grant connect,resource to c##lzj;

授權(quán)成功。

SQL> revoke connect,resource from c##lzj;

撤銷成功。

數(shù)據(jù)庫用戶安全設(shè)計(jì)原則如下:

  • 數(shù)據(jù)庫用戶去哪先按照最小分配原則;
  • 數(shù)據(jù)庫用戶可分為管理、應(yīng)用、維護(hù)、備份四類用戶;
  • 不允許使用sys和system用戶建立數(shù)據(jù)庫應(yīng)用對(duì)象;
  • 禁止對(duì)普通用戶授予dba權(quán)限;
  • 對(duì)查詢用戶只能開放查詢權(quán)限;
  • 對(duì)新建用戶初次登錄數(shù)據(jù)庫時(shí)強(qiáng)制修改密碼;

一般程序開發(fā)人員只要授予 connect和resource兩個(gè)角色即可。注意:授予這兩個(gè)角色就包含了授予用戶無限制使用默認(rèn)表空間的權(quán)限。

在PDB模式下創(chuàng)建用戶lzj,并對(duì)其授權(quán),具體操作:

SQL> select name from v$pdbs;                        //查詢所有的可插拔數(shù)據(jù)庫

NAME
--------------------------------------------------------------------------------
PDB$SEED
ORCLPDB

SQL> alter session set container=orclpdb;                 //切換到可插拔數(shù)據(jù)庫orclpdb

會(huì)話已更改。

SQL> show con_name;                                    //查詢當(dāng)前所在的數(shù)據(jù)庫容器

CON_NAME
------------------------------
ORCLPDB

SQL> create user lzj identified by 123456;                //在PDB創(chuàng)建用戶(不需要添加c##)

用戶已創(chuàng)建。

SQL> alter user lzj identified by 654321;                   //修改用戶密碼:

用戶已更改。

SQL> grant connect to lzj;                        //對(duì)用戶進(jìn)行授權(quán)

授權(quán)成功。

SQL> alter session set container=cdb$root;                      //切換到CDB容器

會(huì)話已更改。

SQL> show con_name;                            //查看當(dāng)前的容器

CON_NAME
------------------------------
CDB$ROOT

五、導(dǎo)入測試數(shù)據(jù)

在Oracle 12c以前的版本中,安裝完成之后默認(rèn)會(huì)scott用戶,該用戶模式下存放了用于測試的表,而Oracle 12c安裝完成之后默認(rèn)沒有scott用戶。為了以后測試方便,下面介紹如何在Oracle 12c中導(dǎo)入測試數(shù)據(jù)的方法。

下載test.sql腳本,然后執(zhí)行以下操作:

[oracle@oracle ~]$ ll                       //準(zhǔn)備腳本測試文件
總用量 8
-rw-r--r-- 1 oracle oinstall 7658 6月  15 2017 test.sql
[oracle@oracle ~]$ sqlplus / as sysdba                       

SQL*Plus: Release 12.2.0.1.0 Production on 星期六 11月 30 17:19:15 2019

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

連接到: 
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> create user c##scott identified by scott default tablespace users temporary tablespace temp quota unlimited on users;
//創(chuàng)建用戶c##scott

用戶已創(chuàng)建。

SQL> grant connect,resource to c##scott;                  //用戶授權(quán)

授權(quán)成功。

SQL> @test.sql                      //導(dǎo)入腳本文件,不帶路徑表示當(dāng)前目錄下
…………………………             //創(chuàng)建過程省略
SQL> conn c##scott/scott;                         //切換用戶c##scott
已連接。 
SQL> show user;                               //查看當(dāng)前用戶
USER 為 "C##SCOTT"
SQL> col tname for a10;              //格式化輸出,讓一行中顯示所有的列,調(diào)整tname列的寬度為10
SQL> select * from tab;                     //查詢當(dāng)前用戶下的所有的表

TNAME      TABTYPE        CLUSTERID
---------- --------------------- ----------
BONUS      TABLE
DEPT       TABLE
EMP    TABLE
SALGRADE   TABLE
SQL> desc emp;                            //查詢emp表的結(jié)構(gòu)
 名稱                                    是否為空? 類型
 ----------------------------------------- -------- ----------------------------
 EMPNO                     NOT NULL NUMBER(4)
 ENAME                          VARCHAR2(10)
 JOB                            VARCHAR2(9)
 MGR                            NUMBER(4)
 HIREDATE                       DATE
 SAL                            NUMBER(7,2)
 COMM                           NUMBER(7,2)
 DEPTNO                         NUMBER(2)
SQL> col empno for 9999;              //格式化輸出,empno列為數(shù)字,9999代表寬度為4
 SQL> select * from emp;                        //根據(jù)實(shí)際情況,自行修改,怎么好看怎么來

EMPNO ENAME JOB      MGR HIREDATE          SAL   COMM     DEPTNO
----- ----- ----- ---------- ---------- ---------- ---------- ----------
 7369 SMITH CLERK       7902 17-12月-80        800                    20
 7499 ALLEN SALES       7698 20-2月 -81       1600        300         30
        MAN

 7521 WARD  SALES       7698 22-2月 -81       1250        500         30
        MAN

 7566 JONES MANAG       7839 02-4月 -81       2975                    20
        ER

 7654 MARTI SALES       7698 28-9月 -81       1250       1400         30

EMPNO ENAME JOB      MGR HIREDATE          SAL   COMM     DEPTNO
----- ----- ----- ---------- ---------- ---------- ---------- ----------
      N     MAN

 7698 BLAKE MANAG       7839 01-5月 -81       2850                    30
        ER

 7782 CLARK MANAG       7839 09-6月 -81       2450                    10
        ER

 7788 SCOTT ANALY       7566 19-4月 -87       3000                    20
        ST

EMPNO ENAME JOB      MGR HIREDATE          SAL   COMM     DEPTNO
----- ----- ----- ---------- ---------- ---------- ---------- ----------
 7839 KING  PRESI            17-11月-81       5000                    10
        DENT

 7844 TURNE SALES       7698 08-9月 -81       1500          0         30
      R     MAN

 7876 ADAMS CLERK       7788 23-5月 -87       1100                    20
 7900 JAMES CLERK       7698 03-12月-81        950                    30
 7902 FORD  ANALY       7566 03-12月-81       3000                    20
        ST

EMPNO ENAME JOB      MGR HIREDATE          SAL   COMM     DEPTNO
----- ----- ----- ---------- ---------- ---------- ---------- ----------
 7934 MILLE CLERK       7782 23-1月 -82       1300                    10
      R

已選擇 14 行。
SQL> select * from c##scott.emp;                   //如果使用的是非c##scott用戶,需要指定用戶.表名

———————— 本文至此結(jié)束,感謝閱讀 ————————


文章名稱:Oracle體系結(jié)構(gòu)和用戶管理
當(dāng)前網(wǎng)址:http://weahome.cn/article/jdiphj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部