部落客QQ:819594300
有什麼疑問的朋友可以聯系部落客,部落客會幫你們解答,謝謝支援!
前言:我們前面學習了安裝oracle以及建立資料庫,如果想要将用戶端與伺服器連接配接起來,這就需要學習資料庫的連接配接配置。在資料庫的啟動過程中需要打開控制檔案,并利用控制檔案打開資料檔案、重做日志檔案,進而打開資料庫。本次文檔給大家介紹連接配接配置,此外還有日志檔案的原理及操作,以及如何使用和操作資料字典視圖。
一、Oracle用戶端與伺服器端的通信機制
Oracle産品安裝完成後,伺服器和用戶端都需要進行網絡配置才能實作網絡連接配接,伺服器端配置監聽器,用戶端配置網絡服務名。
1、oracle net協定
Oracle通過oracle net協定實作用戶端與伺服器端的連接配接及資料傳遞。Oracle net是同時駐留在伺服器端和用戶端上的一個軟體層,它封裝了TCP/IP,負責建立與維護用戶端應用程式到資料庫伺服器的連接配接。有協定就要有相應的端口,是以oracle NET有個預設的偵聽端口1521。
<a href="https://s1.51cto.com/wyfs02/M01/97/18/wKiom1ko-DaxDwJgAAESYfyr50o053.jpg" target="_blank"></a>
用戶端發出的請求首先通過oracle net協定轉換,轉換成可以通過網絡傳輸的資訊,通過tcp/ip網絡将請求傳輸到資料庫伺服器端,伺服器端收到用戶端請求後通過oraclenet協定轉換,将請求轉換成資料庫可以解釋執行的本地指令,并在伺服器端執行,并将結果通過tcp/ip和oracle net協定傳輸給用戶端顯示
2、用戶端與伺服器端的連接配接過程
Oracle伺服器通過一個名為“oracle net監聽器”的元件接收來自用戶端的連接配接請求,監聽位于伺服器端的一個背景程序。發送的用戶端連接配接請求,首先被伺服器的監聽器所偵聽,并交給對應的資料庫執行個體,進而建立起用戶端與伺服器的連接配接。連接配接建立後,用戶端與伺服器端就可以直接進行通信,不需要監聽器參與。要實作監聽器對客戶請求的監聽,需要對監聽器進行配置。
Oracle網絡服務名是一個辨別符,代表用戶端連接配接伺服器的配置資訊。
<a href="https://s4.51cto.com/wyfs02/M02/97/19/wKioL1ko-Dfz6EpuAAF8xXwJ2kY645.jpg" target="_blank"></a>
用戶端與伺服器端的連接配接過程如下:
1)在伺服器端有一個常駐的監聽器,監聽用戶端發出的連接配接請求。
2)使用者在用戶端使用(企業管理器或sql工具),輸入使用者名、密碼及網絡服務名,或在sql指令行中輸入類似
“CONNECT username/password@net_service_name”的請求。
3)用戶端檢視網絡服務配置檔案tnsnames.ora檔案,将網絡服務名映射為包含oracle伺服器位址、監聽端口和全局資料庫名的連接配接描述符。
4)用戶端根據連接配接描述符定位監聽器,并通過網絡連接配接資訊傳遞給監聽器。
5)監聽器查詢監聽配置檔案listener.ora,找出所要連接配接的伺服器。
6)用戶端和伺服器開始通信。
3、配置和管理Oracle網絡配置的工具常見的有以下幾種:
<a href="https://s4.51cto.com/wyfs02/M01/97/19/wKioL1ko-DiyZLtSAAMF09hrxaU548.jpg" target="_blank"></a>
1)netca方式
<a href="https://s5.51cto.com/wyfs02/M02/97/18/wKiom1ko-DmxDEruAAIaLqIQqyY108.jpg" target="_blank"></a>
<a href="https://s5.51cto.com/wyfs02/M00/97/18/wKiom1ko-DmSDeLLAAJjScAyLcc925.jpg" target="_blank"></a>
<a href="https://s1.51cto.com/wyfs02/M02/97/19/wKioL1ko-DqS2txDAAJN0QJJtxY638.jpg" target="_blank"></a>
<a href="https://s5.51cto.com/wyfs02/M00/97/18/wKiom1ko-DuS-3EEAAJpn8nEai0454.jpg" target="_blank"></a>
<a href="https://s5.51cto.com/wyfs02/M00/97/19/wKioL1ko-DuiLAbkAAJ-LlQad0Q444.jpg" target="_blank"></a>
<a href="https://s4.51cto.com/wyfs02/M01/97/18/wKiom1ko-DzCwNZ2AAIEPy0h3Js672.jpg" target="_blank"></a>
<a href="https://s5.51cto.com/wyfs02/M01/97/19/wKioL1ko-D2x9Q_UAAJEWEdTqv8216.jpg" target="_blank"></a>
<a href="https://s5.51cto.com/wyfs02/M02/97/18/wKiom1ko-D6Sq2NXAAIg1CPwobs711.jpg" target="_blank"></a>
<a href="https://s4.51cto.com/wyfs02/M00/97/18/wKiom1ko-D7zYCKnAAKIOY9CP18542.jpg" target="_blank"></a>
檢視監聽檔案:
<a href="https://s5.51cto.com/wyfs02/M00/97/19/wKioL1ko-D-z4TH7AAFUutUQnyI010.jpg" target="_blank"></a>
開啟新的監聽器:
<a href="https://s1.51cto.com/wyfs02/M01/97/18/wKiom1ko-EDAl0J2AADc-Vj4Zco762.jpg" target="_blank"></a>
檢視監聽器狀态:
<a href="https://s1.51cto.com/wyfs02/M01/97/19/wKioL1ko-EDBuyyBAAH3Yr_QivA088.jpg" target="_blank"></a>
2)netmgr方式
<a href="https://s1.51cto.com/wyfs02/M01/97/18/wKiom1ko-EDjvKvqAAIPdB1Ovfs400.jpg" target="_blank"></a>
3)指令方式
修改vim/opt/oracle/product/11.2/db_1/network/admin/listener.ora
增加新的偵聽器,代碼如下:
<a href="https://s1.51cto.com/wyfs02/M02/97/18/wKiom1ko-EHR5IrpAABnady-4wo145.jpg" target="_blank"></a>
<a href="https://s1.51cto.com/wyfs02/M01/97/19/wKioL1ko-EHyb3I-AAI2jyB7s9I747.jpg" target="_blank"></a>
<a href="https://s5.51cto.com/wyfs02/M02/97/19/wKioL1ko-EKhQrZNAALhnDlpYkg837.jpg" target="_blank"></a>
<a href="https://s4.51cto.com/wyfs02/M00/97/18/wKiom1ko-ESS0GeLAAKm0t_7TfA097.jpg" target="_blank"></a>
<a href="https://s4.51cto.com/wyfs02/M02/97/18/wKiom1ko-Eag_vBuAAPoAHNuU6A356.jpg" target="_blank"></a>
解決方法:監聽啟動和資料庫執行個體啟動的順序
根據前面的知識,啟動完資料庫執行個體後,啟動監聽,在連接配接資料庫時,隻有這二者兼備,oracle才能向外提供服務。
監聽和執行個體啟動順序的先後會對二者之間的工作協調産生影響,具體如下:
先啟動監聽,後啟動執行個體:此時遠端用戶端連接配接執行個體是正常的,不會有問題,因為監聽先啟動,在啟動執行個體時背景程序PMON會向監聽注冊伺服器,當使用者請求服務時,兩者的協調工作已準備就緒。
先啟動執行個體,後啟動監聽:如果監聽剛啟動,使用者馬上連接配接執行個體,可能會報“監聽程式目前無法識别連接配接描述符中請求的服務”的錯誤,原因在于PMON還沒來得及向監聽注冊執行個體服務。但是這個問題隻會存在很短的一段時間,再連接配接就不會有問題了,為什麼等一會就好了呢?因為PMON每隔一段時間都會看有無服務需要向監聽注冊,此時若監聽已啟動,PMON就能注冊成功,二者的協調工作就準備就緒了。
有沒有辦法解決很短的一段時間内的這個問題呢?答案是一定的。就是以靜态注冊的方式,即将執行個體的服務描述添加到listener.ora,這樣隻要啟動監聽,對應的服務在監聽中就注冊了。這時隻要執行個體正常啟動完成,就可以對外提供伺服器了。在Listener.ora代碼中添加如下代碼即可。
<a href="https://s2.51cto.com/wyfs02/M02/97/19/wKioL1ko-EbheZ1AAACDY5USUmQ793.jpg" target="_blank"></a>
<a href="https://s2.51cto.com/wyfs02/M00/97/18/wKiom1ko-EbBFXWQAABo2C2X_Gg578.jpg" target="_blank"></a>
<a href="https://s2.51cto.com/wyfs02/M00/97/19/wKioL1ko-EeSrDFpAAKJTa2qxUM958.jpg" target="_blank"></a>
<a href="https://s5.51cto.com/wyfs02/M00/97/19/wKioL1ko-EejM91KAAFRD5YW6dA350.jpg" target="_blank"></a>
4、用戶端的連接配接
<a href="https://s5.51cto.com/wyfs02/M01/97/18/wKiom1ko-Eiz8tl9AAAvnDdOoYY245.jpg" target="_blank">1)安裝</a>
安裝時一路下一步即可,安裝完成時候會在c:盤下生成oracle檔案夾。
<a href="https://s5.51cto.com/wyfs02/M01/97/18/wKiom1ko-EiBfUqLAAFOeNvDlnk158.jpg" target="_blank"></a>
2)找到
c:\oracle\product\11.2.0\client_lite\network\admin\tnsnames.ora檔案,并修改,修改結果如下:
<a href="https://s5.51cto.com/wyfs02/M01/97/19/wKioL1ko-EnyTVGCAAMOzPYsDIo787.jpg" target="_blank"></a>
3)注意:需要在hosts檔案裡面添加解析
<a href="https://s4.51cto.com/wyfs02/M01/97/19/wKioL1ko-Eqwpy92AAGJ-GvNBtE313.jpg" target="_blank"></a>
<a href="https://s4.51cto.com/wyfs02/M02/97/18/wKiom1ko-EuBYDw1AAComdWSwAA309.jpg" target="_blank"></a>
如果遇到一下錯誤情況:
<a href="https://s1.51cto.com/wyfs02/M02/97/18/wKiom1ko-EvB2I3RAAC4IW8pkdQ355.jpg" target="_blank"></a>
解決辦法是:
<a href="https://s1.51cto.com/wyfs02/M02/97/19/wKioL1ko-Ezz40EoAAMzOzrwy9w363.jpg" target="_blank"></a>
4)在win7用戶端上打開命名行,執行指令連接配接
<a href="https://s3.51cto.com/wyfs02/M01/97/18/wKiom1ko-JXS8pYgAAF5UkPfOFY486.jpg" target="_blank"></a>
<a href="https://s1.51cto.com/wyfs02/M00/97/19/wKioL1ko-J2iZlhWAAJQ3KsuuOE302.jpg" target="_blank"></a>
已經遠端連接配接到oracle伺服器
二、管理控制檔案
控制檔案是非常重要的檔案,主要掌握以下内容:
了解控制檔案在資料庫啟動的作用
獲得控制檔案資訊
檢視控制檔案中所存内容的資訊
存儲多重控制檔案
備份和恢複控制檔案
1、控制檔案在資料庫啟動的作用
對于dna來講,oracle資料庫控制檔案是非常重要的檔案,他是資料庫建立的時候自動生成的二進制檔案,其中記錄了資料庫的狀态資訊。其它任何使用者都無法修改控制檔案,隻有資料庫運作過程中,資料庫執行個體可以修改控制檔案中的資訊。控制檔案主要包括以下内容:
資料庫名稱,一個控制檔案隻能屬于一個資料庫。
資料庫建立時間。
資料檔案的名稱、位置、聯機、脫機狀态資訊。
重做日志檔案的名稱、位置及歸檔資訊。
所有表空間資訊。
目前日志序列号。
最近檢查點資訊。
控制檔案在資料庫啟動的mount階段被讀取,資料庫啟動與控制檔案的關系如下圖:
<a href="https://s4.51cto.com/wyfs02/M01/97/18/wKiom1ko-KGCcSRKAAEpVDLJXsA552.jpg" target="_blank"></a>
在資料庫啟動時首先使用預設規則找到并打開參數檔案,在參數檔案中含有控制檔案的位置資訊,打開控制檔案後,會通過控制檔案中記錄的各種資料庫檔案的位置打開資料庫,進而啟動資料庫到可用位置,是以在資料庫啟動後,在資料庫的運作過程中,資料庫伺服器可不斷地修改控制檔案中的内容,是以在資料庫被打開的階段,控制檔案必須是可讀寫的,但是其他任何使用者都無法修改控制檔案,隻有資料庫執行個體可以修改控制檔案中的資訊。
2、獲得控制檔案資訊
1)可以從V$CONTROLFILE視圖中檢視控制檔案資訊,包括控制檔案名稱。
<a href="https://s2.51cto.com/wyfs02/M00/97/18/wKiom1ko-KSRU3BgAAFZmFVPpEU920.jpg" target="_blank"></a>
2)還可以從V$PARAMETER視圖中檢視
<a href="https://s1.51cto.com/wyfs02/M00/97/19/wKioL1ko-KbRdiTRAADrOiIgZxA464.jpg" target="_blank"></a>
3、檢視控制檔案中所存内容的資訊
<a href="https://s1.51cto.com/wyfs02/M02/97/18/wKiom1ko-KuDPiGOAAGZJRjVbOI520.jpg" target="_blank"></a>
從截圖當中可可以看到控制檔案中存放了建立資料庫的資訊、重做日志資訊、資料檔案及歸檔日志檔案記錄等資訊。這些有價值的資訊用于資料維護和管理,很多資料字典視圖是從控制檔案中獲得的資訊。
4、存儲多重控制檔案
由于控制檔案非常重要,是以要求控制檔案不能隻有一個,通常資料庫中控制檔案要多于3個,并且存放在不同的磁盤上,這種使用控制檔案的方法也稱為控制檔案的多路複用。實作多重的一個方法就是通過複制控制檔案到多個位置并修改初始化參數檔案中的CONTROL_FILES參數,使之包含所有控制檔案名稱。需要注意,當存在多個控制檔案時,oracle會同時更新所有的控制檔案,但是僅對CONTROL_FILES中所列舉的第一個控制檔案進行讀取操作。
舉例說明實作多路複用控制檔案的方法:
1)資料庫狀态為打開狀态,修改SPFILE中的CONTROL_FILES參數。
<a href="https://s1.51cto.com/wyfs02/M02/97/19/wKioL1ko-K2QOc1FAACgknI8SbU659.jpg" target="_blank"></a>
2)關閉資料庫
<a href="https://s4.51cto.com/wyfs02/M02/97/19/wKioL1ko-K7CkNGtAABXBhsOHdI155.jpg" target="_blank"></a>
3)使用作業系統指令将檔案複制到新的位置
<a href="https://s1.51cto.com/wyfs02/M01/97/18/wKiom1ko-LLTPJY8AAE6Fo96yiI135.jpg" target="_blank"></a>
5、備份和恢複控制檔案
1、備份控制檔案
有兩種方式備份:一種是備份為二進制檔案,另一種是備份為腳本檔案,常用的備份為二進制檔案的方法(備份二進制檔案即對控制檔案進行複制)
<a href="https://s5.51cto.com/wyfs02/M00/97/18/wKiom1ko-LfRAXVKAAHw8WyXI1g261.jpg" target="_blank"></a>
6、備份和恢複控制檔案
<a href="https://s5.51cto.com/wyfs02/M00/97/19/wKioL1ko-LjhPlTdAABouDrTXsE485.jpg" target="_blank"></a>
<a href="https://s1.51cto.com/wyfs02/M01/97/18/wKiom1ko-LvCnKReAADcg6z9Znc118.jpg" target="_blank"></a>
2、恢複控制檔案(為了實驗更有說服性,先關閉oracle資料庫)
<a href="https://s4.51cto.com/wyfs02/M01/97/19/wKioL1ko-L2xyZmaAADBcItAFEQ633.jpg" target="_blank"></a>
1)删除控制檔案control01.ctl(模拟損壞)
<a href="https://s1.51cto.com/wyfs02/M02/97/18/wKiom1ko-L-iJoDFAAB3Oiad-2c248.jpg" target="_blank"></a>
2)啟動資料庫(報錯)
<a href="https://s4.51cto.com/wyfs02/M02/97/19/wKioL1ko-MKBRU_AAAD-cYbijb8749.jpg" target="_blank"></a>
3)執行指令恢複
<a href="https://s2.51cto.com/wyfs02/M02/97/19/wKioL1ko-MTAQmBpAAC3FVtcaJQ841.jpg" target="_blank"></a>
4)執行完上面的恢複指令,oracle資料庫自動啟動,此時的控制檔案是control03.ctl,control01.ctl沒有恢複回來,我們可以手動拷貝一份control03.ctl,手動改成名字叫control01.ctl即可。
<a href="https://s1.51cto.com/wyfs02/M00/97/18/wKiom1ko-MajvyjRAABrXGypz_U176.jpg" target="_blank"></a>
或者:(以下是最簡單的做法)
如果control01.ctl丢失,可以直接使用control03.ctl将control01.ctl替換,或者複制一份改名為control01.ctl即可。
三、管理重做日志檔案
重做日志檔案也稱聯機重做日志,目的是恢複資料。
在資料庫運作過程中,使用者更改的資料會暫時存放在資料庫的高速緩沖區中。為了提高寫資料庫的速度,并不是一旦有資料變化,就把變化的資料寫到資料庫檔案中。頻繁的讀寫磁盤會使資料庫系統效率降低,是以,要等到資料庫高速緩沖區中的資料達到一定的量或滿足一定條件時,DBWR程序才會将變化了的資料寫到資料檔案中。這種情況下,如果DBWR把變化了的更改寫到資料檔案之前發生了當機,那麼資料庫高速緩沖區中的資料就會全部丢失。如果在資料庫伺服器重新開機動後無法恢複這部分使用者更改的資料,顯然是不可以的。
重做日志就是把變化了的資料首先儲存起來,其中LGWR程序負責把使用者更改的資料先寫到重做日志檔案中,這樣資料庫重新啟動時,資料庫系統從重做日志檔案中讀取這些變化了的資料,将使用者更改的資料送出到資料庫中,寫入資料檔案。
為了提高磁盤效率和防止重做日志檔案損壞,oracle引入了一種重做日志檔案結構,如圖:
<a href="https://s5.51cto.com/wyfs02/M00/97/1A/wKioL1ko-MzyPjdBAAHj6s_Ze80695.jpg" target="_blank"></a>
上圖可以看出有3個重做日志組,每組包含兩個重做日志成員。當第一個日志組寫滿之後,就會停止寫入,而轉向第二個日志組,第二個寫滿後,轉向第三個日之組,第三個寫滿就向第一個日志組寫入,oracle以這種循環方式使用重做日志組。
Oracle規定每個資料庫至少有兩個日志組,每組至少包含一個或者多個日志成員。
使用新的重做日志之前,DBWR程序需要将所有的資料更改寫到資料檔案中。如果資料庫處于歸檔模式下,當發生日之組切換時,歸檔程序ARCH會把目前已滿的重做日志檔案中的資料複制到歸檔日志中。
1、讀取重做日志檔案資訊
資料字典視圖V$LOG記錄了目前資料庫的日志組号、日志序列号,每個日志檔案的大小,每個日志組的成員數量,是否存檔以及日志組的目前狀态。
1)使用V$LOG檢視重做日志檔案的資訊
<a href="https://s3.51cto.com/wyfs02/M01/97/18/wKiom1ko-NHTlec7AAL4GghXQNc442.jpg" target="_blank"></a>
使用V$LOGFILE檢視重做日志組資訊
<a href="https://s2.51cto.com/wyfs02/M00/97/18/wKiom1ko-Njzqsh_AAIH4pfnSFQ003.jpg" target="_blank"></a>
3)建立重做日志組
增加重做日志成員,并把每個日志組的重做日志成員分布在不同的磁盤上,提高磁盤效率和防止重做日志檔案的損壞。
<a href="https://s4.51cto.com/wyfs02/M01/97/1A/wKioL1ko-NyyZo9nAAFAJ0RLg2o707.jpg" target="_blank"></a>
文法:
ALTER DATABASE [database_name]
ADD LOGFILE[GROUP group_number]
Filename[SIZE size_integer [K\M]] [REUSE]
解釋:database_name:資料庫執行個體名
group_number:日志組編号
Filename:日志檔案路徑及名稱
<a href="https://s2.51cto.com/wyfs02/M02/97/18/wKiom1ko-OPQjwCUAAKq_TadO7A881.jpg" target="_blank"></a>
4)删除重做日志組
删除檔案組的限制條件如下:
目前日志組不可删除
要删除目前日志組需要先對目前日志組進行切換
使用指令為alter system switch logfile;
活動的日志組不可删除
沒有歸檔的日志組不可删除(前提是已運作在歸檔模式下)
<a href="https://s4.51cto.com/wyfs02/M00/97/1A/wKioL1ko-OaBC0OYAADeLbiKS0s158.jpg" target="_blank"></a>
5)添加/删除重做日志檔案
<a href="https://s1.51cto.com/wyfs02/M01/97/18/wKiom1ko-OnQtCOPAAEYQ6p1YvU331.jpg" target="_blank"></a>
<a href="https://s1.51cto.com/wyfs02/M01/97/1A/wKioL1ko-O7wHHWmAAF849W1pqw994.jpg" target="_blank"></a>
<a href="https://s2.51cto.com/wyfs02/M02/97/18/wKiom1ko-PWxd1p-AAJ5p4QL6X0444.jpg" target="_blank"></a>
上圖中發現新添加的redo33.log是無效狀态,是因為三個日志組的日志成員還沒有寫滿,是以redo33.log是無效狀态,隻要做兩次強制日志切換就可以發現是ONLINE狀态了,方法如下:
<a href="https://s2.51cto.com/wyfs02/M02/97/1A/wKioL1ko-PzD3X-AAAJ9K4p1XME729.jpg" target="_blank"></a>
發現redo033.log已經線上。
删除重做日志檔案redo033.log
<a href="https://s5.51cto.com/wyfs02/M01/97/18/wKiom1ko-P-zNP9SAADPS055VM4733.jpg" target="_blank"></a>
如果删除不了,估計是組3是目前被使用的狀态(即組3是currrnt狀态),需要執行altersystem switch logfile後再删即可!
6)日志切換和檢查點事件
日志切換就是停止目前日志組,轉而寫另外一個新的日志組,系統可以自動切換,也可以手工切換,當發生日志切換時,系統會在背景完成檢查點的操作,以減少執行個體的恢複時間。
檢查點是一個事件,用于減少執行個體恢複的時間,當檢查點發生時,它會觸發DBWR程序,把資料高速緩沖中變化了的資料寫入資料檔案,同時檢查點程序更新控制檔案和資料檔案頭部,以使它們保持一緻。檢查點其實是一個背景程序,用來保證所有修改過的資料庫緩沖區的東西都寫入資料庫檔案。
檢查點時間越頻繁,則一旦資料庫發生故障,需要資料庫恢複的重用日志中的資料就越少(因為在恢複時,就不必檢查恢複檢查點之前的重用日志中的資料),是以就減少執行個體恢複的時間。
啟動時間:
每隔三秒(或更加頻繁)
發生日志切換
立即選項關閉例程時
手動請求
負責以下事項:
使用檢查點資訊更新資料檔案标題
使用檢查點資訊更新控制檔案
在完成檢查點向DBWn發出信号
<a href="https://s4.51cto.com/wyfs02/M00/97/1A/wKioL1ko-QWjwG8wAAG-dxIa-gw391.jpg" target="_blank"></a>
強制日志切換指令如下:
<a href="https://s1.51cto.com/wyfs02/M01/97/1A/wKioL1ko-QbRKSuHAACWNV_zzeI143.jpg" target="_blank"></a>
強制産生檢查點事件(手動)指令如下:
<a href="https://s2.51cto.com/wyfs02/M02/97/18/wKiom1ko-QiD_jKzAACVghIvZHo538.jpg" target="_blank"></a>
四、管理歸檔日志檔案
1、歸檔日志介紹
Oracle資料庫有兩種運作方式,歸檔(ARCHIVELOG)方式和非歸檔(NO ARCHIVELOG)方式。在非歸檔方式下,日志切換時直接覆寫以前的重做日志檔案,不産生歸檔日志。資料庫在歸檔方式下運作,在日志切換後,ARCH程序會對自己寫滿的重做日志檔案進行存檔。預設情況下,oracle采用非歸檔的運作方式,主要因為歸檔方式會給系統帶來一定的性能問題,隻有當資料庫運作在歸檔方式時,ARCH程序才存在,ARCH程序是oracle的可選背景程序,将日志存檔,以便儲存對資料庫做的所有修改,這樣,及時在資料檔案磁盤損壞的情況下,資料庫管理者也能将對資料庫恢複至故障發生時的狀态。
1)歸檔程序
是可選的背景程序
為資料庫設定ARCHIVELOG(歸檔)模式時會自動歸檔聯機重做日志檔案
保留對資料庫所有更改的記錄
2)歸檔日志檔案
資料庫在允許覆寫重做日志資訊之前生成聯機重做日志組的副本。
這些副本又稱為“歸檔日志”。
<a href="https://s2.51cto.com/wyfs02/M01/97/19/wKiom1ko-RDTnQGPAAJhcLBL-uY405.jpg" target="_blank"></a>
2、配置資料庫歸檔日志步驟:
查詢資料庫歸檔方式,确定目前不處于歸檔方式
關閉資料庫并啟動資料庫到MOUNT狀态
将資料庫設定位歸檔模式,并驗證
<a href="https://s5.51cto.com/wyfs02/M00/97/1A/wKioL1ko-TaxNMJ0AAK6W57W-cY927.jpg" target="_blank"></a>
<a href="https://s5.51cto.com/wyfs02/M01/97/19/wKiom1ko-T2TDCKYAAISFvDjeac887.jpg" target="_blank"></a>
使用alter database archivelog指令将資料庫設定為歸檔模式
3、擷取歸檔日志資訊
資料字典視圖可幫助使用者擷取資料庫配置資訊。
使用者通過使用V$ARCHIVE_DEST和V$ARCHIVE_LOG視圖擷取歸檔日志資訊。
V$ARCHIVE_DEST:顯示目前所有歸檔日志存儲位置及其狀态。
V$ARCHIVE_LOG:顯示曆史歸檔日志資訊(即已歸檔的日志檔案的資訊)。
如何檢視所有有效的歸檔日志檔案存儲目錄:
<a href="https://s5.51cto.com/wyfs02/M01/97/1A/wKioL1ko-UKRSy0YAAGlX2oh01M887.jpg" target="_blank"></a>
說明:擷取已歸檔的日志檔案的資訊,歸檔程序會在每次日志切換後将聯機重做日志檔案複制到一個歸檔日志檔案,進而生成一串連續的且能用于恢複一個備份的日志檔案。這些日志檔案的名稱和位置由若幹初始化參數控制。
<a href="https://s3.51cto.com/wyfs02/M02/97/19/wKiom1ko-UvBGhRTAAKkckEXUCA779.jpg" target="_blank"></a>
五、資料字典
1、資料字典定義
資料字典是oracle存儲關鍵資訊的表和視圖的集合。是資料庫的說明,包含資料庫中所有對象的名稱和屬性。Oracle程序會在SYS模式中維護這些表和視圖,也就是說資料字典的所有者為SYS使用者,資料存放在SYSTEM表空間中。
資料字典描述了實際資料是如何組織的,如一個表的建立者資訊,建立時間資訊,所屬表空間資訊,使用者通路權限資訊等。對他們可以像處理其他資料庫表或視圖一樣進行查詢,但不能進行任何修改。
Oracle資料字典通常是在建立和安裝資料時被建立的。
Oracle資料字典是oracle資料庫系統工作的基礎。
沒有資料字典的支援,oracle資料庫系統就不能進行任何工作。
2、資料字典的構成
資料字典分為資料字典表和資料字典視圖。資料字典中的表不可以直接被通路,但是可以通路資料字典中的視圖。資料字典視圖分為兩類:靜态資料字典視圖和動态資料字典視圖。
<a href="https://s3.51cto.com/wyfs02/M02/97/1A/wKioL1ko-VCDONFzAAF3SX1ZN_g316.jpg" target="_blank"></a>
1)資料字典表
資料字典表中的資料是oracle系統存放的系統資料,而普通表存放的是使用者的資料。為了友善的差別這些表,這些表的名稱都是用$結尾,這些表屬于SYS使用者。
為了友善對資料字典表的查詢,oracle對這些資料字典都分别建立了使用者視圖,這樣既容易記住,還隐藏了資料字典表之間的關系。
2)靜态資料字典視圖
靜态資料字典中的視圖分為3類,他們分别由3個字首構成:USER_*、ALL_*、DBA_*。
USER_*:該視圖存儲了目前使用者所擁有的對象的資訊(既所有在該使用者模式下的對象)。
ALL_*:該視圖存儲了目前使用者能夠通路的對象的資訊,(與USER_*相比,ALL_*并不需要擁有該對象,隻需要具有通路該對象的權限即可)。
DBA_*:該視圖存儲了資料庫中所有對象的資訊,(前提是目前使用者具有通路權限,一般來說必須具有管理者權限)。
3、常用的資料字典視圖
1)user_tables:描述目前使用者擁有的所有表的資訊,主要包括表名、表空間名、簇名等。
通過此視圖可以清楚地了解目前使用者擁有的表有哪些。
2)查詢該使用者有哪些索引
SELECT index_name FROM user_indexes;
<a href="https://s4.51cto.com/wyfs02/M00/97/19/wKiom1ko-VXjp_E-AAGNGp5C0Ts695.jpg" target="_blank"></a>
3)查詢該使用者擁有哪些視圖
<a href="https://s4.51cto.com/wyfs02/M02/97/1A/wKioL1ko-VfzJjIUAADSW8BZybM344.jpg" target="_blank"></a>
4)查詢該使用者擁有哪些資料庫對象,包括表、視圖、存儲過程、觸發器、包、索引、序列等。
SELECT object_name FROM user_objects;
<a href="https://s3.51cto.com/wyfs02/M00/97/1A/wKioL1ko-VnTxr_rAAB_HrRDZAY631.jpg" target="_blank"></a>
5)查詢目前使用者的資訊,主要包括目前使用者名、賬戶id、賬戶狀态、建立時間等。
SELECT * FROM user_users;
<a href="https://s2.51cto.com/wyfs02/M01/97/19/wKiom1ko-V6CpnfOAAFcZESIYdo915.jpg" target="_blank"></a>
6)查詢目前使用者能夠通路的所有表、過程、函數等。
<a href="https://s2.51cto.com/wyfs02/M01/97/1A/wKioL1ko-V_jMth2AACejQe9UJs993.jpg" target="_blank"></a>
7)DICTIONARY 資料字典視圖包含資料字典中一切對象的名稱和說明
SELECT * FROM dictionary;
<a href="https://s5.51cto.com/wyfs02/M00/97/19/wKiom1ko-WOSPfiUAAEtlWPft1c779.jpg" target="_blank"></a>
8)使用資料字典不需要記住所有的資料視圖。隻需要按照如下步驟操作:
了解資料字典大概分成3類,(user_*、all_*、dba_*),常用的是user_*,可以通過下面語句查詢具體視圖的描述。
<a href="https://s2.51cto.com/wyfs02/M00/97/1A/wKioL1ko-WXR3OTCAACfnVCe8r8658.jpg" target="_blank"></a>
然後根據查詢結果找到需要的資料字典視圖,例如:想知道表就可以查詢user_table,想知道視圖就可以查詢user_view,想知道存儲過程就可以查詢user_procedure,想知道表中列的情況就可以查詢user_tab_columns
六、動态資料字典視圖及使用
1、概念
除了靜态資料字典中的3類視圖,其他的字典視圖中主要是V$視圖,之是以這樣命名是因為他們都是以V$或GV$開頭的,這些視圖會不斷地進行更新,可以反映出目前執行個體和資料庫的運作狀況。動态性能表用于記錄目前資料庫的活動,隻存在于資料庫運作期間,實際的資訊都取自記憶體和控制檔案,dba可以使用動态視圖來監視和維護資料庫。下面列舉幾個dba維護資料庫中經常使用的幾個動态資料字典視圖。
2、列舉常用動态資料字典視圖
1)查詢和日志檔案相關的資訊
<a href="https://s4.51cto.com/wyfs02/M00/97/19/wKiom1ko-WmSJ_MYAAEkfigGmz0314.jpg" target="_blank"></a>
上圖中列出了所有和日志檔案相關的動态資料字典視圖,如果想了解日志檔案的詳細資訊,可以使用v$log視圖和v$logfile視圖
2)檢視日志組狀态資訊
<a href="https://s4.51cto.com/wyfs02/M00/97/1A/wKioL1ko-W2TpAt2AAFtpHviTCQ639.jpg" target="_blank"></a>
3)檢視重做日志檔案資訊
<a href="https://s5.51cto.com/wyfs02/M02/97/19/wKiom1ko-XLD2OgSAAGsNfOwQkE743.jpg" target="_blank"></a>
4)查詢目前正在使用的重做日志檔案的資訊。
<a href="https://s1.51cto.com/wyfs02/M01/97/19/wKiom1ko-XXAF9IiAADQPu0t34A367.jpg" target="_blank"></a>
從結果中可以看出,目前資料庫正在使用的日志組為group 2,資料庫運作在非歸檔模式,該日志組有一個日志成員,存儲目錄為/opt/oracle/oradata/orcl/redo02.log。
5)通過v$instance視圖檢視執行個體資訊
<a href="https://s5.51cto.com/wyfs02/M01/97/1A/wKioL1ko-XmxXxN0AAFDg2Flnw0561.jpg" target="_blank"></a>
上圖中結果說明,當然執行個體名為orcl,主機名為oracleserver,版本号為11.2.0.1.0,執行個體啟動時間為2016年12月14日,狀态為allowed。
6)檢視目前資料庫的資訊
<a href="https://s2.51cto.com/wyfs02/M01/97/1A/wKioL1ko-dHDBYTzAAGFlHNK5C8688.jpg" target="_blank"></a>
資料庫名為orcl,建立時間為2016年12月14日,該資料庫運作在歸檔模式。
動态資料字典視圖很好地反映了目前資料庫的運作狀态資訊,對于資料庫性能調優和判斷系統瓶頸提供了資訊支援。通過動态資料字典視圖還可以檢視控制檔案的資訊、資料檔案的資訊和表空間的資訊。
本文轉自Mr大表哥 部落格,原文連結: http://blog.51cto.com/zpf666/1930160 如需轉載請自行聯系原作者