核心技能部分
1. 客戶機/服務器模式結構(C/S結構)
基于客戶機/服務器結構的Oracle網絡如圖2.1.1所示。
圖2.1.1 Oracle 應用C/S結構
當客戶機需要服務器的數據時,可以通過連接服務器來獲取??蛻魴C向服務器發送SQL數據庫請求,服務器接受并執行傳送給它的SQL語句,然后把執行結果和產生的消息文本返回給客戶機。
2. 基于因特網的應用模式結構
基于因特網(B/S)的結構如圖2.1.2所示。
圖2.1.2 基于B/S的應用結構
在基于B/S的模式中,客戶機需要安裝WEB瀏覽器,數據庫請求通過應用程序服務器發送到數據庫服務器,數據庫服務器接受并執行發送給它的SQL語句,然后把執行結果和消息文本,通過應用程序服務器返回給客戶機。最后數據庫操作結果通過瀏覽器展現個客戶機。
在學習如何具體配置Oracle數據庫網絡連接之前,有幾個Oracle網絡連接相關的基本概念需要我們先理解。
1. 數據庫實例名
數據庫實例名是用于和操作系統進行聯系的標識,就是說數據庫和操作系統之間的交互用的是數據庫實例名。數據庫名和實例名可以相同也可以不同。在一般情況下,數據庫名和實例名是一對一的關系。關于數據庫實例的講解,后面會有專門介紹。在此,只提出數據庫實例名的概念。
2. 全局數據庫名
Oracle數據庫系統是一個大型分布式數據庫系統,為了保證分布式網絡環境下每個數據庫名稱的唯一性,Oracle使用域名結構命名網絡資源。采用這種命名方法時,一個數據庫的全局名稱由其數據庫名和該數據庫所在的域名組成。如圖2.1.3所示。
圖2.1.3 公司部門結構及域名組織
三個數據庫名稱都是orcl,如果三個數據庫進行數據維護互相訪問的時候,數據庫名稱就會發生沖突。有了全局數據庫名后,公司數據庫的全局數據庫名是orcl.comp,銷售部的數據庫全局數據庫名是orcl.sales.comp,同理,開發部數據庫全局數據庫名是orcl.dev.comp。如此一來,數據庫名稱就不會發生混淆了。
3. 監聽程序
客戶機與Oracle數據庫服務器通信時,網絡連接是通過監聽程序建立的。監聽程序也叫監聽器。監聽器是運行在服務器端的一個單獨的服務進程。其職責是監聽網絡上客戶機對服務器的連接請求,并管理客戶機和服務器之間的網絡通信。每次客戶機請求與服務器進行網絡會話時,監聽器會接受到該請求,并把該請求傳送給服務器。監聽器將客戶機提供的信息與自己保存的配置文件信息進行比較,如果協議匹配、主機匹配、端口匹配、數據庫匹配,監聽器就授權客戶機連接到服務器,否則拒絕客戶機的連接請求。如入2.1.4所示。
圖2.1.4 監聽器的作用
因此,在客戶機上建立與服務器的連接過程,實際上就是建立和監聽器的連接過程。
4. 服務名
服務名是數據庫服務器在客戶端的名稱,從Oracle9i版本開始,引入了一個新的概念,即數據庫服務名。如果數據庫有域名,則數據庫服務名就是全局數據庫名;否則,數據庫服務名與數據庫名相同。
理解以上幾個概念后,現在開始學習Oracle網絡配置的具體操作。
在Oracle產品安裝完成后,客戶端為了與數據庫服務器連接實現數據訪問,必須進行網絡連接配置。Oracle網絡配置分為兩種——服務器端配置和客戶端配置,配置的結果由配置文件來保存。配置文件包含以下3個:
(1)監聽程序的配置文件(listener.ora):服務器端配置的目的就是配置該文件,該文件存儲于服務器端,默認位置“%ORACLE_HOME%/NETWORK/ADMIN“。在安裝了Oracle 11g之后,listener.ora文件的格式和內容如圖2.1.5所示。
圖2.1.5 配置文件Iistener.ora的格式和內容
(2)本地網絡服務名的配置文件(tnsnames.ora):當采用本地命名方法時,就必須在客戶端保存tnsnames.ora配置文件,客戶端配置的目的就是配置該文件,默認位置為“%ORACLE_HOME%/network/admin”。在安裝了Oracle 11g之后,tnsnames.ora文件的格式和內容如圖2.1.6所示。
圖2.1.6 配置文件tnsnames.ora
(3)命名方法配置文件(sqlnet.ora):如果需要配置命名方法,則還要在客戶端和服務器端配置一致的文件。Oracle 11g默認采用本地命名方法。sqlnet.ora文件的格式和內容如圖2.1.7所示。
圖2.1.7 配置文件sqlnet.ora
listener.ora、tnsnames.ora和sqlnet.ora這3個文件是關系oracle網絡配置的3個主要文件,都是放在$ORACLE_HOME/network/admin目錄下。其中listener.ora和數據庫服務器端相關,而tnsnames.ora和sqlnet.ora這2個文件不僅僅關系到服務器端,主要的還是和客戶端關系緊密。
Oracle網絡配置分為客戶端網絡配置和服務器端網絡配置兩個部分。安裝Oracle數據庫的時候,可以選擇只安裝客戶端,這樣只涉及配置客戶端,用以能夠正確連接到Oracle數據庫服務器。有時候,Oracle服務器A需要訪問別的服務器B,那么服務器A也是作為客戶端,需要正確配置才能夠正確使用。
(1)Oracle網絡連接服務器端配置
服務器端配置主要是服務器端的監聽程序的配置。監聽程序的配置信息包括監聽的網絡協議、端口號、主機名等信息。一般情況下,在安裝Oracle 11g數據庫時會自動地在配置文件listener.ora中配置一個默認監聽程序。該監聽程序的名稱為LISTENER,通信協議為TCP/ip,端口號為1521。但一個服務器可以有多個監聽程序,分別監聽不同的協議和端口號。如果某個監聽程序的配置不再適應實際情況,就需要對其進行重新編輯或配置。以下將在服務器端介紹如何使用Oracle Net Manager來配置監聽程序,步驟如下:
第一步,執行【開始】→【程序】→【Oracle–OraDb11g_homel】→【配置和移植工具】→【Net Manager】命令,將彈出“Oracle Net Manager”窗口,在窗口中進行相應的修改,如圖2.1.8所示。
圖2.1.8 Oracle Net Manager窗口
第二步,修改服務器端監聽程序配置后需要保存配置,將其保存到listener.ora配置文件中。當客戶端連接Oracle數據庫時,如果服務器端OracleOraDb11g_homeTNSListener服務進程沒有啟動,將會出現錯誤提示,如圖2.1.9所示。
圖2.1.9 服務器監聽器未啟動時報錯
(2)Oracle網絡連接客戶端配置
Oracle 11g安裝程序會自動地創建一個默認的tnsnames.ora文件。如果一臺計算機上只安裝了Oracle 11g 客戶端軟件,則該計算機只能作為客戶端,不會產生默認的tnsnames.ora文件。以下講解客戶端如何使用Oracle Net Manager來配置監聽程序,步驟如下:
第一步,進入【Oracle Net Manager】窗口,選中【服務命名】,點擊【創建】按鈕,將出現如圖2.1.10所示【Net服務名向導】窗口,在其中輸入需要創建的網絡服務名的名稱,單擊【下一步】按鈕。
圖2.1.10 修改網絡服務名配置
第二步,在出現的Net服務名向導的“協議”窗口中選中“TCP/IP(Internet協議)”選項,如圖2.1.11所示,單擊【下一步】按鈕。
圖2.1.11 選擇通信協議
第三步,執行以上操作后將出現如圖2.1.12所示的界面,按照向導要求輸入主機名、端口號等信息,單擊【下一步】按鈕。
圖2.1.12 輸入被訪問主機名和端口號
第四步,執行以上操作后將出現如圖2.1.13所示的界面,按照向導要求輸入全局數據庫名等信息,單擊【下一步】按鈕。
圖2.1.13 輸入全數據庫名
第五步,在如圖2.1.14所示的“測試”窗口中,為了檢查新創建的網絡服務名是否有效,可以單擊圖中的【測試】按鈕進行測試。如果測試成功,將顯示測試窗口,如圖2.1.15所示。
圖2.1.14 測試新創建的網絡服務名
圖2.1.15 測試成功
第六步,測試成功后,將在tnsnames.ora文件中添加一條關于新創建的網絡服務名的配置,如圖2.1.16所示。
圖2.1.16 在配置文件tnsnames.ora中新增的網絡服務名
SQL Plus使用新配置的客戶端網絡服務名訪問Oracle數據庫,效果如圖2.1.17所示。
圖2.1.17 使用新建的網絡服務名“myorcl”成功登陸
我們在第一章學習了如何啟動Oracle數據庫,為了更好的掌握Oracle數據庫的使用,需要進一步學習Oracle的啟動過程,還需要了解Oracle數據庫啟動之后的狀態,包括內存分布,進程作用等。
Oracle通過數據庫實例來加載和管理數據庫,每個運行的Oracle數據庫都對應一個Oracle實例(Instance),也可以稱為例程。當數據庫服務器上的一個數據庫啟動時,Oracle將為其分配一塊內存區間,叫做系統全局區(SGA),然后啟動多個進程。SGA和Oracle進程結合在一起,就是一個Oracle實例。為了區分不同的實例,每個Oracle實例都有一個系統標識符SID,通常SID與數據庫同名。
實例啟動后,Oracle把它與指定的數據庫聯系在一起,這個過程叫做“裝載數據庫”,此時數據庫就處于就緒狀態,有權限的用戶可以訪問該數據庫了。Oracle也可以把多個實例和一個數據庫關聯起來,服務更多的客戶使用數據庫的請求,從而提高數據庫效率。
Oracle數據庫實例支持4種狀態,包括打開(OPEN)、關閉(CLOSE)、已裝載(MOUNT)和已啟動(NOMOUNT)。下面分別對這4種狀態進行說明。
? 打開。啟動實例,裝載并打開數據庫。該模式是默認的啟動模式,它允許任何有效用戶連接到數據庫,并執行數據訪問操作。
? 關閉。將Oracle實例從允許用戶訪問數據的狀態轉換為不可使用狀態。
? 已裝載。啟動實例并裝載數據庫,但不打開數據庫。該模式用戶數據庫的數據文件的恢復操作等。不允許用戶訪問數據庫數據。
? 已啟動。啟動實例,但不裝載數據庫。該模式用于對控制文件進行管理或重新創建數據庫等,不允許用戶訪問數據庫數據。
下面我們通過SQL Plus管理工具來體驗上述狀態,需要注意,實例的啟動、關閉屬于Oracle數據庫管理操作,需要SYS用戶登錄才能進行操作。首先通過shutdown immediate關閉實例。如圖2.1.18所示。
圖2.1.18 正確關閉數據庫
(1)啟動實例,但不裝載數據庫,執行命令startup nomount,如圖2.1.19所示。
圖2.1.19 啟動實例,但不裝載數據庫
從圖中我們可以看到SGA(System Global Area)大小為535662592字節,約511M。
(2)啟動實例,并裝載數據庫,執行命令startup mount,如圖2.1.20所示。
圖2.1.20 啟動實例,并裝載數據庫
從圖中我們可以看到除了SGA的分配,還有數據庫裝載完畢的提示信息。
(3)啟動數據庫實例,并裝載數據庫,執行命令startup open,open參數可以省略,如圖2.1.21所示。
圖2.1.21 啟動實例,并打開數據庫
如果Oracle數據庫是打開的,在數據庫維護工作的時候,往往還需要把數據庫關閉才能進行。那么如何正確的關閉數據庫呢?
(1)正常關閉數據庫實例,可以執行shutdown normal命令,命令執行情況如下。
? 提交shutdown normal命令后,Oracle數據庫不再接受新的連接。
? 數據庫會一直等待當前數據庫的用戶都斷開連接后,再關閉數據庫實例。因此通常此種關閉方式需要等待很長的時間。一般不采用此種方式關閉數據庫實例。
(2)立即關閉數據庫實例,可以執行shutdown immediate命令,命令執行情況如下。
? 數據庫不再接受新的連接,也不允許開始新的事務,所有未提交的事務都將被撤銷。
? 數據庫不會等待所有在線用戶斷開連接,只要事務撤銷完畢,就立即關閉數據庫。
(3)以事務處理方式關閉數據庫實例,可以執行shutdown transactional命令,命令執行情況如下。
? 數據庫不允許新的連接,也不允許開始新的事務,但是會等待已有事務提交后才關閉數據庫。
? 數據庫不會等待所有在線用戶斷開連接,只要事務提交完畢,就立即關閉數據庫。
(4)強制關閉數據庫實例,可以執行shutdown abort命令,命令執行情形如下。
? 數據庫不再接受新的連接,也不允許開始新的事務,所有未提交的事務都將被終止。
? 立即切斷所有在線用戶連接。
以上4種關閉方式中,第4種是破壞性的關閉方式,除用在知道立即斷電或者有突發情況外,很少用到。第2種關閉方式是使用最頻繁的,執行效果如前圖2.1.18所示。其余情況請自行測試,仔細觀察執行效果。
Oracle數據庫的體系結構是從全局的角度來分析和考察數據庫的組成、工作過程與原理以及數據在數據庫中的組織與管理機制。總的來說Oracle由Oracle實例和Oracle數據庫組成。Oracle實例由進程和SGA組成。Oracle數據庫由數據庫數據文件、控制文件和日志文件組成。體系結構如圖2.1.22所示。
圖2.1.22 Oracle體系結構圖
進程是操作系統中的一個概念,是一個可以獨立調度的活動,用于完成指定的任務。Oracle 11g進程結構中包含3種不同類型的進程。
1. 用戶進程
用戶進程是在客戶機內存上運行的程序,它向服務器進程發出數據處理請求。當客戶端運行一個應用程序、準備向數據庫服務器發送請求時,將會創建用戶進程。例如,用戶啟動SQL Plus工具時,系統會自動建立一個用戶進程。與用戶進程相關的兩個概念是連接和會話。
(1)連接。
用戶需要訪問數據庫時,首先必須連接到數據庫服務器,建立連接的步驟如下:
1) 啟動一個類似于SQL Plus的應用程序,產生一個用戶進程。
2) 輸入用戶名、口令、主機字符串,登錄到Oracle服務器。
3) Oracle服務器接收到連接請求后,將在服務器端產生一個服務器進程,負責與該用戶進程進行通話。
(2)會話。
會話是用戶與數據庫之間特定的路徑或連接。當用戶啟動了一個基于Oracle的客戶端應用程序并輸入正確的用戶名、口令成功登錄到數據庫之后,Oracle就為該用戶創建一個會話。此會話在用戶使用數據庫期間一直存在,直到該用戶退出應用程序或出現了非正常的中斷為止。會話是通過連接來實現的,一個連接可以支持多個會話,但同一時刻一個連接只對應一個會話。
2. 服務器進程
為了給客戶端的用戶進程提供服務,Oracle會在客戶端成功連接Oracle數據庫時,在服務器端創建相應的服務器進程,客戶端的進程與服務器端的進程是一一對應的。用戶進程必須通過服務器進程才能方問數據庫。服務器進程主要完成以下任務:
(1)解析并執行用戶所提交的SQL語句。
(2)搜索SGA區的數據庫緩存,決定是否讀取數據文件,如果數據塊不在SGA區的數據庫緩存中,則將其從數據文件中讀入。
(3)將查詢或執行后形成的數據返回給用戶。
3. 后臺進程
在同一時刻,Oracle可以處理上百個并發的請求,進行復雜的數據操作,為了提高系統性能并協調多個用戶,Oracle使用一些附加的線程,稱為后臺進程。后臺進程存在于操作系統中,在Oracle實例啟動時自動啟動。后臺進程主要完成以下任務:
(1)在內存和外存之間進行I/O操作。
(2)監視各個進程的狀態。
(3)協調各個進程的任務。
(4)維護系統的性能。
(5)保證系統的可靠性。
Oracle 11g主要后臺數據庫進程見表2-1-1。
表2-1-1 主要的數據庫后臺進程
名稱 | 主要作用 | 是否可選 |
系統監控進程(SMON) | 在數據庫系統啟動時執行恢復性工作的強制性進程,對有故障的CPU或實例進行恢復 | 必選 |
進程監控進程(PMON) | 用于恢復失敗的數據庫用戶的強制性進程,獲取失敗用戶的標識,釋放該用戶占用的所有數年據庫資源,然后回滾中止的事務 | 必選 |
數據寫入進程(DBWR) | 主要管理數據緩沖區和字典緩沖區的內容,分批將修改后的數據塊寫回數據庫文件,系統可以擁有多個該進程 | 必選 |
日志寫入進程(LGWR) | 將內存中的日志內容寫入到日志文件中 | 必選 |
檢查點進程(CKPT) | 對全部數據文件和控制文件的標題進行修改,標識該檢查點,用于減少實例恢復所需要的時間 | 必選 |
歸檔進程(ARCH) | 當數據庫服務器以歸檔方式運行時,調用該進程完成日志歸檔備份 | 可選 |
恢復進程(RECO) | 用于分布式數據庫中的失敗處理,只有在數年據庫中運行分布式先項時才能使用該進程。當分布在多個地的數據沒有保持同步時,將調用該進程來解決 | 可選 |
鎖進程(LCKn) | 當用戶在并行服務器模式下,將出現多個鎖進程以確保數據的一致性 | 可選 |
調度進程(Dnnn) | 多線程服務器的可選進程,每個調度進程負責從所連接的用戶進程到可用服務器進程的路由請求,并將響應返回到合適的用戶進程 | 可選 |
不同的數據版本,后臺進程略有不同。
內存結構是Oracle數據庫體系結構中最重要的一部分,內存也是影響數據庫性能的第一因素。內存的大小、速度直接影響數據庫的運行速度。特別是當用戶逐年增加時,如果內存不足,例程分配不到足夠的內存,就會使有些用戶連接不到數據庫或連接、查詢的速度明顯下降。按照對內存的使用方法的不同,Oracle數據庫的內存可以分為SGA(System Global Area,系統全局區)和PGA(PRogram Global Area,程序全局區)
1. 系統全局區(System Global Area,SGA)
SGA是例程內存結構的主要組成部分,每個Oracle實例都只有一個SGA。當多個用戶同時連接到一個例程時,所有的用戶進程、服務器進程都共享SGA。它是不同用戶進程與服務器進程進行通信的中心。數據庫的各種操作都主要在SGA中進行,可以將SGA看作是Oracle的心臟。當啟動Oracle實例時,系統就分配一個SGA;當終止Oracle實例時,就釋放SGA占用的內存。根據功能的不同,系統全局區又分為4個部分:數據緩沖區、數據字典緩沖區、重做日志緩沖區和SQL共享池。
(1)數據緩沖區(Data Buffer Cache)
用于存儲近期從數據中讀取出來的數據塊。用戶進程查看的數據首先駐留在數據緩沖區中,如果用戶進程需要的信息不在該區內,才訪問物理磁盤驅動器讀取數據塊,然后放入該區供其他用戶進程或服務器進程使用。其大小受物理容量的限制,通常為數據庫大小的1%~2%。
(2)重做日志緩沖區(Redo Log Buffer)
當執行INSERT、UPDATE、DELETE等操作時,Oracle都會為這些操作生成重做記錄,以便在可能出現的數據庫恢復過程中回滾事務。但是為了加快訪問速度和工作效率,重做記錄并不直接寫入重做日志文件中,而是首先存入SGA的重做日志緩沖區內,當重做日志緩沖區的重做記錄達到一定數量或達到某個時間點時,再分批寫入重做日志文件中。
(3)SQL共享池(Shared SQL Pool)
SQL共享池是程序的高速緩沖區,存放所有通過SQL語法分析準備執行的SQL語句,主要由數據字典緩存(Dictionary cache)和庫緩存(Library cache)組成。
2. 程序全局區(Program Global Area,PGA)
當用戶進程連接到Oracle實例時,就會創建一個對應的會話,該會話使用一個服務器進程來完成客戶端與Oracle實例的通信。每個服務器進程都有一個自己的PGA。PGA由Oracle為服務器進程分配,專門作為當前用戶會話的內存區。該內存區是非共享的,只有服務器進程本身才能訪問它自己的PGA區。而SGA區則是所有服務器進程都能共享、可寫的內存區。
數據庫的邏輯結構主要從數據庫使用者的角度來考察數據庫的組成,如圖2.1.23所示。
圖2.1.23 Oracle數據庫邏輯結構圖
由圖2.1.23可知,Oracle數據庫的邏輯結構共有6層,以下介紹其中5個層次。
1. 數據塊(Data Block)
數據塊是最小的數據管理單位,即Oracle中所有的I/O操作都以塊為單位。數據塊的大小是操作系統大小的整數倍,通常為2KB或4KB。
2. 數據區間(Data Extent)
數據區間由物理上連續存放的數據塊構成,它是Oracle存儲分配的最小單位,一個或多個數據塊組成一個數據區間。
3. 數據段(Data Segment)
若干個數據區間構成數據段,Oracle 11g中包含4種數據段:
(1)數據段:存放數據。
(2)索引段:存儲索引數據。
(3)回滾段:存儲需要撤銷的信息。
(4)臨時段:當SQL語句需要臨時空間時,將建立臨時段。一旦執行完畢,臨時段占用的空間將歸還給系統。
4. 表空間(Table Space)
為了提高數據庫服務器管理和運行的效率,Oracle 11g使用“表空間”的虛擬概念來管理邏輯對象,用戶可以將不同性質的邏輯對象存放在不同的表空間下。在Windows操作系統中,使用文件夾來分類管理各種文件,我們可以將“表空間”理解為Oracle數據庫的文件夾。每個表空間由一個或多個數據文件組成,一個數據文件只能與一個表空間相聯系。用戶建立的數據庫對象應該被存放在各種具有典型意義的表空間中,從而更好地管理數據庫。Oracle 11g數據庫服務器安裝完畢后,將自動建立6個默認的表空間,見表2-1-2。
表2-1-2 Oracle數據庫服務器上的默認表空間
名稱 | 主要作用 |
EXAMPLE | 示例表空間,存放示例信息 |
SYSAUX | SYSTEM表空間的輔助空間,用以減少SYSTEM表空間的負荷 |
SYSTEM | 存儲數據字典,包括表、視圖、存儲過程的定義等 |
TEMP | 存儲SQL語句處理的表和索引的信息 |
UNDOTBSI | 回滾表空間,存放數據庫恢復信息 |
USERS | 用戶表空間,存放用戶私有信息 |
5. 數據庫(Database)
若干個表空間構成邏輯上的數據庫。一個數據庫服務器上可以有多個數據庫,一個數據庫可以有多個表空間,一個表空間可以有多個表,一個表可以有多個段,一個段可以有多個區間,一個區間可以有多個數據塊。
數據庫的物理結構主要是從數據庫設計者的角度上來考察數據庫的組成,Oracle 11g數據庫的物理結構如圖2.1.24所示。
圖2.1.24 Oracle數據庫的物理結構
1. 物理塊
物理塊是操作系統分配的基本存儲單位,邏輯結構中的數據塊由若干個物理塊構成。
2. 物理文件
每個物理文件由若干個物理塊組成,物理文件包括數據文件、控制文件和日志文件。
(1)數據文件
數據文件是實際存儲插入到數據庫表中的實際數據的操作系統文件。數據以Oracle特有的格式被寫入數據文件。數據文件的大小與它們所存儲的數據量的大小直接相關。寫入數據后,數據文件會由于自動分配新區而增大,但刪除數據卻不會減少,只能使其有更多的空閑區。
(2)重做日志文件
對于操作數據庫而言,內存的速度比硬盤的速度快成千上萬倍,所以出于性能上的考慮,當用戶對數據庫進行修改時,Oracle實際上先在內存中進行修改,經過一段時間后,再集中將內存中的修改結果成批的寫入數據文件中。但如果在將內存中的修改結果寫入數據文件之前發生了故障,這些修改結果就會丟失。為了避免出現這種錯誤,需要一種機制時刻將這些修改結果保存下來,以便在故障發生之后還能重現當時的數據庫操作。在Oracle中就是使用重做日志文件來隨時保存這些修改結果。
(3)控制文件
控制文件是二進制文件,但它是數據庫中的關鍵性文件,因為它存儲了數據庫的名稱、數據文件和重做日志的名稱、位置、聯機/脫機狀態和大小,用于在發生磁盤故障或用戶錯誤時恢復數據庫的信息。另外,在“裝載”數據庫時,Oracle將讀取控制文件中的信息,以便判斷數據庫的狀態,獲取數據庫的物理結構信息及物理文件的使用權。因此,控制文件對于數據庫的成功“裝載”以及其后的“打開”都至關重要。Oracle 11g中某個數據庫的物理文件如圖2.1.25所示。
圖2.1.25 Oracle 11g中的物理文件
在Oracle中新建數據表與在SQLServer中新建數據表不一樣,數據表是按照表空間來進行管理的。也就是說,建表前,需要新建表空間。
通過前面的學習可知:Oracle將數據邏輯地存放在表空間里,而物理地存放在數據文件里。表空間只能屬于一個數據庫,一個數據庫一般都有多個表空間。每個表空間都是由一個或者多個操作系統的數據文件組成,但一個操作系統數據文件只能屬于一個表空間。
Oracle可以使用CREATE TABLESPACE命令創建表空間。示例2.1演示了如何創建名為MY_MOBILE的表空間。
示例2.1
CREATE TABLESPACE MY_MOBILE
DATAFILE 'D:/app/Administrator/oradata/orcl/MY_MOBILE.DBF'
SIZE 100M
AUTOEXTEND ON NEXT 32M MAXSIZE UNLIMITED
LOGGING
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
以上創建表空間語句具體解釋如下:
? 表空間名稱:“MY_MOBILE”
? 與表空間關聯的數據文件的位置及名稱為:“D:/app/Administrator/oradata /orcl/MY_MOBILE.DBF”。
? 文件初始大小為100MB
? 文件大小可自動擴展,每次擴展32MB,允許文件擴展的最大限度為無限制。
? Oracle生成表空間中數據庫對象的任何創建或更改都需要記入日志。
? 表空間中的數據區間管理采用本地化管理方式
? 表空間中段的管理方式為自動管理方式。
以上創建表空間涉及配置項比較多,其實讓大多數配置項采用默認值即可,這樣創建表空間的語句就可以簡化,如示例2.2所示。
示例2.2
CREATE TABLESPACE MY_MOBILE
DATAFILE 'D:/app/Administrator/oradata/orcl/MY_MOBILE.DBF'
SIZE 100M;
同一數據庫中可以同時有多個用戶,每個用戶管理自己的數據庫對象.比如數據庫表、索引、視圖等。
Oracle中的CREATE USER命令用于創建新用戶。每個用戶都有一個默認表空間和一個臨時表空間。如果沒有指定,Oracle就將SYSTEM設為默認表空間,將TEMP設為臨時表空間。
語法
CREATE USER <用戶名> IDENTIFIED BY <密碼> [DEFAULT TABLESPACE <默認表空間>] [TEMPORARYTABLESPACE <臨時表空間>] |
說明如下:
? <用戶名>是新用戶的登錄名,用戶名必須是一個標識符,不區分大小寫。
? <密碼>是用戶口令,口令必須是一個標識符,不區分大小寫。
? DEFAULT或TEMPORARY TABLESPACE為用戶確定默認表空間或臨時表空間
示例2.3演示了如何創建名稱為“mm”的用戶。
示例2.3
CREATE USER mm
IDENTIFIED BY oracle
DEFAULT TABLESPACE MY_MOBILE
這段語句是用來創建一個名稱為“mm”的用戶,口令為“oracle”,默認表空間為“MY_MOBILE”,執行結果如圖2.1.26所示。
圖2.1.26 成功創建用戶“mm”
只創建用戶還不行,必須賦予相應權限才可以連接和訪問數據庫。權限指的是執行特定類型的SQL命令或訪問其他對象的權利。例如:連接數據庫、創建表,執行存儲過程都需要一些權限。若沒有任何權限,新創建的用戶將無法登錄 Oracle數據庫。
Oracle用戶權限有兩種類型:系統權限和對象權限。
? 系統權限允許用戶執行某些數據庫操作。例如,創建表空間就是一個系統權限。
? 對象權限允許用戶對某一特定對象(如表.視圖、序列等)執行特定的操作。
權限設置非常復雜,權限的類型很多,數據庫中用戶通常也很多,為DBA有效的管理權限帶來了困難。為了簡化權限管理,引入了角色的概念。
角色是具有名稱的一組權限的組合,可以使用角色為用戶授權。可以把角色理解為日常生活中的職務,一個人獲取了某項職務,就自動具有該職務的所有權限,一個人被撤銷了某職務,也就不再擁有相應權限。
Oracle中的常用系統預定義角色如下。
? CONNECT:臨時用戶,特別是那些不需要創建表的用戶,通常賦予該角色。
? RESOURCE:更為可靠和正式的數據庫用戶可以授予該角色,可以創建表、觸發器、過程等。
? DBA:數據庫管理員角色,擁有管理數據庫的最高權限。一個具有DBA角色的用戶可以撤銷任何別的用戶甚至別的DBA權限,這是很危險的,所以不要把該角色輕易授予一些不是很重要的用戶。
GRANT命令用于為用戶分配權限或角色,而REVOKE命令用于為用戶撤銷權限和角色
語法
GRANT [<權限> | <角色>] TO <用戶>; REVOKE [<權限> | <角色>] FROM <用戶>; |
示例2.4演示了如何給用戶mm分配角色和對象權限
示例2.4
#把CONNECT、RESOURCE角色授予用戶mm
GRANT CONNECT,RESOURCE TO mm;
#撤銷用戶mm的RESOURCE角色
REVOKE RESOURCE FROM mm;
#以下代碼演示另一個用戶SCOTT授予用戶mm操作EMP表的對象權限
#允許用戶查看EMP表中的記錄
GRANT SELECT ON EMP TO mm;
#允許用戶更新EMP表中的記錄
GRANT UPDATE on EMP TO mm;
經過授予權限或角色后,用戶mm即可與數據庫建立連接并進行相應操作。
至此,我們已經為“我的移動”應用創建了專門的表空間“MY_MOBILE”,創建了專門的開發用戶“mm”,并授予“mm”用戶CONNECT和RESOURCE權限。如果用戶新建數據表,表數據將存儲在操作系統文件“D:/app/Administrator/oradata/orcl/MY_MOBILE.DB
F”中。然而,如果隨著系統開發的進展,已有的數據如何導出來以備下次使用呢?同樣導出的數據如何再次導入到Oracle中呢?
Oracle引入了數據泵 (Data Pump)技術,即expdp和impdp實用程序。在Oracle以前的版本中,通常使用exp和imp實用程序進行導出、導入數據。現在,除了繼續使用exp和imp之外,還可以使用expdp和impdp來導出、導人數據。由于expdp和impdp的速度優于exp和imp,所以 Oracle建議使用expdp和impdp。
導出數據是指將數據庫中的數據導出到一個操作系統文件中,導入數據是指將導出文件中的數據導入到數據庫中。數據庫、導出文件與導入導出之間的關系如圖2.1.27所示。
圖 2.1.27所示 數據庫、導出文件、導出導入直接的關系
使用expdp和impdp實用程序時,其導出文件只能存放在DIRECTORY (目錄)對象指定的操作系統目錄中,不能直接指定操作系統目錄。
目錄對象是數據庫中的一個對象,它是使用 CREATE DIRECTORY語句創建的對象,而不是操作系統中的某個目錄,但是它指向操作系統中的某個目錄。為了能夠訪問操作系統目錄,還必須賦予其讀、寫權限,創建目錄并授權的示例如圖2.1.28所示。
圖2.1.28 創建目錄并授權給用戶MM
隨著“我的移動”數據的增加,如果我們需要把數據復制到其它Oracle數據庫中,以便開發或者備份數據,就可以使用Oracle內置的實用工具expdp來完成。
現在退出SQL Plus登錄,確保操作系統目錄存在的前提下,就可把用戶MM的數據導出,以備下次使用,如圖2.1.29所示。
圖2.1.29 成功按用戶(方案)導出數據
使用expdp導出的數據可以使用impdp導入。并且導入方式由導出方式決定,即如果是按表模式導出,則必須以表模式導入;如果是按方案模式導出,則必須以方案模式導入等。在上一節中,我們按用戶(方案)導出了“我的移動”數據,那么按用戶(方案)導入數據如圖2.1.30所示。
圖2.1.30 成功導入mm用戶(方案)數據
在導入數據的時候需要注意,在新的Oracle數據庫中,需要事先建立MM用戶并授予相關權限。如果是在相同的Oracle數據庫中測試impdp導入數據,需要把MM用戶擁有的表、序列等已有數據庫對象刪除。
? 本章總結
? Oracle進程分為用戶進程、服務器進程和后臺進程
? 監聽程序是客戶端與Oracle服務器之間通信的中介
? Oracle內存可分為系統全局區(SGA)和程序全局區(PGA)
? 系統全局區中包括數據緩沖區、數據字典區、重做日志緩沖區、SQL共享區
? Oracle數據庫的物理文件包括數據文件,重做日志文件,控制文件
? Oracle實例是后臺進程和內存結構的集合,為應用程序提供對數據庫中數據的管理和維護功能
? SYS用戶是Oracle中的超級用戶,SYSTEM是Oracle中默認的管理員,它擁有DBA權限,SCOTT是Oracle數據庫的一個示范帳戶
? Oracle包含3個用于網絡連接配置的文件,分別是監聽程序的配置文件(listener.ora)、本地網絡服務名的配置文件(tnsnames.ora)、命名方法配置文件(sqlnet.ora)
? 使用GRANT,REVOKE語句授予權限或角色給用戶
? Oracle可以使用impdp,expdp進行數據導入和導出
任務實訓部分
訓練技能點
? 使用Oracle創建一個數據庫實例BookShop
需求說明
自己手動創建一個新的數據庫實例,命名為BookShop
實現步驟
(1) 啟動相關服務
(2) 檢查并測試網絡配置
(3) 使用DBCA工具創建數據庫實例BookShop
訓練技能點
? 使用CREATE TABLESPACE語句創建表空間
需求說明
啟動BookShop數據庫實例,并通過SQL Plus連接該數據庫實例,然后使用CREATE TABLESPACE語句創建一個名為MyBook的表空間,并關聯BookShop的數據文件,其他參數自定。
實現步驟
(1) 確定BookShop數據庫實例的服務已經啟動
(2) 打開SQL Plus連接BookShop數據庫實例
(3) 使用CREATE TABLESPACE語句創建MyBook表空間
訓練技能點
? 使用CREATE USER命令創建用戶
? 使用GRANT命令分配權限
需求說明
啟動BookShop數據庫實例后創建一個名字和密碼都是“sm”的新的用戶,并指定其對應的默認表空間和臨時表空間分別是MyBook和temp,最后使用GRANT命令為sm用戶分配一個CONNECT的角色。
實現步驟
(1) 打開SQL Plus連接BookShop數據庫實例
(2) 使用CREATE USER命令創建用戶
(3) 使用GRANT命令設置角色
(4) 用sm用戶登錄進行測試
訓練技能點
? 使用impdb導入數據
? 使用expdb導出數據
需求說明
上一章的實訓任務部分我們創建了一個聯系人表,現在使用expdb命令把此表導出,然后使用impdb命令把此表導入到BookShop中
實現步驟
(1) 打開SQL Plus連接orcl數據庫實例
(2) 使用expdb導出聯系人表
(3) 使用sm登錄BookShop數據庫實例
(4) 使用impdb導入聯系人表
鞏固練習
一、選擇題
1. 下列()用于在客戶端配置網絡服務名。
A. tnsnames.ora
B. listener.ora
C. sqlnet.ora
D. tnsname.ora
2. Oracle數據庫的物理文件包括()
A. 數據文件(.dbf)
B. 重做日志文件(.log)
C. 控制文件(.ctl)
D. 緩存文件
3. 下列()屬于系統全局區(SGA)。
A. 數據緩沖區
B. 重做日志緩沖區
C. SQL共享池
D. 數據連接池
4. 下列關于Oracle數據庫說法正確的是()。
A. 在物理上以表空間形式存在
B. 在邏輯上表現為數據文件、日志文件和控制文件
C. 必須首先創建數據庫,然后才能使用Oracle
D. 可以在安裝的同時創建數據庫,也可以安裝后單獨創建數據庫
5. exp支持三種導出方式,下面()說法錯誤。
A. 表方式導出一個指定表,包括表的定義、數據和索引等
B. 用戶方式導出屬于一個用戶的所有對象,包括表、視圖、序列等
C. 全數據庫方式導出數據庫中的所有對象,只有DBA可以選擇這種方式
D. 默認方式是表方式
二、上機練習
(1) 為BookShop數據庫實例創建一個新的用戶zy,密碼是四個0,初始大小100MB,其他參數自定。
(2) 為新用戶zy設置connect、resource角色。
(3) 使用zy登錄并向聯系人表中插入一行測試數據。
擴展進階
1、查閱互聯網或者其它Oracle書籍,完成impdp、expdp除按用戶(方案)之外的導入導出方式。
2、查閱互聯網或者其它Oracle書籍,完成imp、exp使用工具的使用。
|
新聞熱點
疑難解答