您好,登錄后才能下訂單哦!
博主QQ:819594300
博客地址:http://zpf666.blog.51cto.com/
有什么疑問的朋友可以聯系博主,博主會幫你們解答,謝謝支持!
前言:我們前面學習了安裝oracle以及創建數據庫,如果想要將客戶端與服務器連接起來,這就需要學習數據庫的連接配置。在數據庫的啟動過程中需要打開控制文件,并利用控制文件打開數據文件、重做日志文件,從而打開數據庫。本次文檔給大家介紹連接配置,此外還有日志文件的原理及操作,以及如何使用和操作數據字典視圖。
一、Oracle客戶端與服務器端的通信機制
Oracle產品安裝完成后,服務器和客戶端都需要進行網絡配置才能實現網絡連接,服務器端配置監聽器,客戶端配置網絡服務名。
1、oracle net協議
Oracle通過oracle net協議實現客戶端與服務器端的連接及數據傳遞。Oracle net是同時駐留在服務器端和客戶端上的一個軟件層,它封裝了TCP/IP,負責建立與維護客戶端應用程序到數據庫服務器的連接。有協議就要有相應的端口,所以oracle NET有個默認的偵聽端口1521。
客戶端發出的請求首先通過oracle net協議轉換,轉換成可以通過網絡傳輸的信息,通過tcp/ip網絡將請求傳輸到數據庫服務器端,服務器端收到客戶端請求后通過oraclenet協議轉換,將請求轉換成數據庫可以解釋執行的本地指令,并在服務器端執行,并將結果通過tcp/ip和oracle net協議傳輸給客戶端顯示
2、客戶端與服務器端的連接過程
Oracle服務器通過一個名為“oracle net監聽器”的組件接收來自客戶端的連接請求,監聽位于服務器端的一個后臺進程。發送的客戶端連接請求,首先被服務器的監聽器所偵聽,并交給對應的數據庫實例,從而建立起客戶端與服務器的連接。連接建立后,客戶端與服務器端就可以直接進行通信,不需要監聽器參與。要實現監聽器對客戶請求的監聽,需要對監聽器進行配置。
Oracle網絡服務名是一個標識符,代表客戶端連接服務器的配置信息。
客戶端與服務器端的連接過程如下:
1)在服務器端有一個常駐的監聽器,監聽客戶端發出的連接請求。
2)用戶在客戶端使用(企業管理器或sql工具),輸入用戶名、口令及網絡服務名,或在sql命令行中輸入類似
“CONNECT username/password@net_service_name”的請求。
3)客戶端查看網絡服務配置文件tnsnames.ora文件,將網絡服務名映射為包含oracle服務器地址、監聽端口和全局數據庫名的連接描述符。
4)客戶端根據連接描述符定位監聽器,并通過網絡連接信息傳遞給監聽器。
5)監聽器查詢監聽配置文件listener.ora,找出所要連接的服務器。
6)客戶端和服務器開始通信。
3、配置和管理Oracle網絡配置的工具常見的有以下幾種:
1)netca方式
查看監聽文件:
開啟新的監聽器:
查看監聽器狀態:
2)netmgr方式
3)命令方式
修改vim/opt/oracle/product/11.2/db_1/network/admin/listener.ora
增加新的偵聽器,代碼如下:
開啟新的監聽器:
解決方法:監聽啟動和數據庫實例啟動的順序
根據前面的知識,啟動完數據庫實例后,啟動監聽,在連接數據庫時,只有這二者兼備,oracle才能向外提供服務。
監聽和實例啟動順序的先后會對二者之間的工作協調產生影響,具體如下:
先啟動監聽,后啟動實例:此時遠程客戶端連接實例是正常的,不會有問題,因為監聽先啟動,在啟動實例時后臺進程PMON會向監聽注冊服務器,當用戶請求服務時,兩者的協調工作已準備就緒。
先啟動實例,后啟動監聽:如果監聽剛啟動,用戶馬上連接實例,可能會報“監聽程序當前無法識別連接描述符中請求的服務”的錯誤,原因在于PMON還沒來得及向監聽注冊實例服務。但是這個問題只會存在很短的一段時間,再連接就不會有問題了,為什么等一會就好了呢?因為PMON每隔一段時間都會看有無服務需要向監聽注冊,此時若監聽已啟動,PMON就能注冊成功,二者的協調工作就準備就緒了。
有沒有辦法解決很短的一段時間內的這個問題呢?答案是一定的。就是以靜態注冊的方式,即將實例的服務描述添加到listener.ora,這樣只要啟動監聽,對應的服務在監聽中就注冊了。這時只要實例正常啟動完成,就可以對外提供服務器了。在Listener.ora代碼中添加如下代碼即可。
4、客戶端的連接
1)安裝
安裝時一路下一步即可,安裝完成時候會在c:盤下生成oracle文件夾。
2)找到
c:\oracle\product\11.2.0\client_lite\network\admin\tnsnames.ora文件,并修改,修改結果如下:
3)注意:需要在hosts文件里面添加解析
如果遇到一下錯誤情況:
解決辦法是:
4)在win7客戶端上打開命名行,執行命令連接
已經遠程連接到oracle服務器
二、管理控制文件
控制文件是非常重要的文件,主要掌握以下內容:
了解控制文件在數據庫啟動的作用
獲得控制文件信息
查看控制文件中所存內容的信息
存儲多重控制文件
備份和恢復控制文件
1、控制文件在數據庫啟動的作用
對于dna來講,oracle數據庫控制文件是非常重要的文件,他是數據庫創建的時候自動生成的二進制文件,其中記錄了數據庫的狀態信息。其它任何用戶都無法修改控制文件,只有數據庫運行過程中,數據庫實例可以修改控制文件中的信息。控制文件主要包括以下內容:
數據庫名稱,一個控制文件只能屬于一個數據庫。
數據庫創建時間。
數據文件的名稱、位置、聯機、脫機狀態信息。
重做日志文件的名稱、位置及歸檔信息。
所有表空間信息。
當前日志序列號。
最近檢查點信息。
控制文件在數據庫啟動的mount階段被讀取,數據庫啟動與控制文件的關系如下圖:
在數據庫啟動時首先使用默認規則找到并打開參數文件,在參數文件中含有控制文件的位置信息,打開控制文件后,會通過控制文件中記錄的各種數據庫文件的位置打開數據庫,從而啟動數據庫到可用位置,所以在數據庫啟動后,在數據庫的運行過程中,數據庫服務器可不斷地修改控制文件中的內容,所以在數據庫被打開的階段,控制文件必須是可讀寫的,但是其他任何用戶都無法修改控制文件,只有數據庫實例可以修改控制文件中的信息。
2、獲得控制文件信息
1)可以從V$CONTROLFILE視圖中查看控制文件信息,包括控制文件名稱。
2)還可以從V$PARAMETER視圖中查看
3、查看控制文件中所存內容的信息
從截圖當中可可以看到控制文件中存放了創建數據庫的信息、重做日志信息、數據文件及歸檔日志文件記錄等信息。這些有價值的信息用于數據維護和管理,很多數據字典視圖是從控制文件中獲得的信息。
4、存儲多重控制文件
由于控制文件非常重要,所以要求控制文件不能只有一個,通常數據庫中控制文件要多于3個,并且存放在不同的磁盤上,這種使用控制文件的方法也稱為控制文件的多路復用。實現多重的一個方法就是通過復制控制文件到多個位置并修改初始化參數文件中的CONTROL_FILES參數,使之包含所有控制文件名稱。需要注意,當存在多個控制文件時,oracle會同時更新所有的控制文件,但是僅對CONTROL_FILES中所列舉的第一個控制文件進行讀取操作。
舉例說明實現多路復用控制文件的方法:
1)數據庫狀態為打開狀態,修改SPFILE中的CONTROL_FILES參數。
2)關閉數據庫
3)使用操作系統命令將文件復制到新的位置
5、備份和恢復控制文件
1、備份控制文件
有兩種方式備份:一種是備份為二進制文件,另一種是備份為腳本文件,常用的備份為二進制文件的方法(備份二進制文件即對控制文件進行復制)
6、備份和恢復控制文件
1、備份控制文件
有兩種方式備份:一種是備份為二進制文件,另一種是備份為腳本文件,常用的備份為二進制文件的方法(備份二進制文件即對控制文件進行復制)
2、恢復控制文件(為了實驗更有說服性,先關閉oracle數據庫)
1)刪除控制文件control01.ctl(模擬損壞)
2)啟動數據庫(報錯)
3)執行命令恢復
4)執行完上面的恢復命令,oracle數據庫自動啟動,此時的控制文件是control03.ctl,control01.ctl沒有恢復回來,我們可以手動拷貝一份control03.ctl,手動改成名字叫control01.ctl即可。
或者:(以下是最簡單的做法)
如果control01.ctl丟失,可以直接使用control03.ctl將control01.ctl替換,或者復制一份改名為control01.ctl即可。
三、管理重做日志文件
重做日志文件也稱聯機重做日志,目的是恢復數據。
在數據庫運行過程中,用戶更改的數據會暫時存放在數據庫的高速緩沖區中。為了提高寫數據庫的速度,并不是一旦有數據變化,就把變化的數據寫到數據庫文件中。頻繁的讀寫磁盤會使數據庫系統效率降低,所以,要等到數據庫高速緩沖區中的數據達到一定的量或滿足一定條件時,DBWR進程才會將變化了的數據寫到數據文件中。這種情況下,如果DBWR把變化了的更改寫到數據文件之前發生了宕機,那么數據庫高速緩沖區中的數據就會全部丟失。如果在數據庫服務器重啟動后無法恢復這部分用戶更改的數據,顯然是不可以的。
重做日志就是把變化了的數據首先保存起來,其中LGWR進程負責把用戶更改的數據先寫到重做日志文件中,這樣數據庫重新啟動時,數據庫系統從重做日志文件中讀取這些變化了的數據,將用戶更改的數據提交到數據庫中,寫入數據文件。
為了提高磁盤效率和防止重做日志文件損壞,oracle引入了一種重做日志文件結構,如圖:
上圖可以看出有3個重做日志組,每組包含兩個重做日志成員。當第一個日志組寫滿之后,就會停止寫入,而轉向第二個日志組,第二個寫滿后,轉向第三個日之組,第三個寫滿就向第一個日志組寫入,oracle以這種循環方式使用重做日志組。
Oracle規定每個數據庫至少有兩個日志組,每組至少包含一個或者多個日志成員。
使用新的重做日志之前,DBWR進程需要將所有的數據更改寫到數據文件中。如果數據庫處于歸檔模式下,當發生日之組切換時,歸檔進程ARCH會把當前已滿的重做日志文件中的數據復制到歸檔日志中。
1、讀取重做日志文件信息
數據字典視圖V$LOG記錄了當前數據庫的日志組號、日志序列號,每個日志文件的大小,每個日志組的成員數量,是否存檔以及日志組的當前狀態。
1)使用V$LOG查看重做日志文件的信息
2)數據字典視圖V$LOGFILE記錄了當前日志組號,該日志組的狀態、類型和日志組成員信息。
使用V$LOGFILE查看重做日志組信息
3)創建重做日志組
增加重做日志成員,并把每個日志組的重做日志成員分布在不同的磁盤上,提高磁盤效率和防止重做日志文件的損壞。
語法:
ALTER DATABASE [database_name]
ADD LOGFILE[GROUP group_number]
Filename[SIZE size_integer [K\M]] [REUSE]
解釋:database_name:數據庫實例名
group_number:日志組編號
Filename:日志文件路徑及名稱
4)刪除重做日志組
刪除文件組的限制條件如下:
當前日志組不可刪除
要刪除當前日志組需要先對當前日志組進行切換
使用命令為alter system switch logfile;
活動的日志組不可刪除
沒有歸檔的日志組不可刪除(前提是已運行在歸檔模式下)
5)添加/刪除重做日志文件
上圖中發現新添加的redo33.log是無效狀態,是因為三個日志組的日志成員還沒有寫滿,所以redo33.log是無效狀態,只要做兩次強制日志切換就可以發現是ONLINE狀態了,方法如下:
發現redo033.log已經在線。
刪除重做日志文件redo033.log
如果刪除不了,估計是組3是當前被使用的狀態(即組3是currrnt狀態),需要執行altersystem switch logfile后再刪即可!
6)日志切換和檢查點事件
日志切換就是停止當前日志組,轉而寫另外一個新的日志組,系統可以自動切換,也可以手工切換,當發生日志切換時,系統會在后臺完成檢查點的操作,以減少實例的恢復時間。
檢查點是一個事件,用于減少實例恢復的時間,當檢查點發生時,它會觸發DBWR進程,把數據高速緩沖中變化了的數據寫入數據文件,同時檢查點進程更新控制文件和數據文件頭部,以使它們保持一致。檢查點其實是一個后臺進程,用來保證所有修改過的數據庫緩沖區的東西都寫入數據庫文件。
檢查點時間越頻繁,則一旦數據庫發生故障,需要數據庫恢復的重用日志中的數據就越少(因為在恢復時,就不必檢查恢復檢查點之前的重用日志中的數據),所以就減少實例恢復的時間。
啟動時間:
每隔三秒(或更加頻繁)
發生日志切換
立即選項關閉例程時
手動請求
負責以下事項:
使用檢查點信息更新數據文件標題
使用檢查點信息更新控制文件
在完成檢查點向DBWn發出信號
強制日志切換命令如下:
強制產生檢查點事件(手動)命令如下:
四、管理歸檔日志文件
1、歸檔日志介紹
Oracle數據庫有兩種運行方式,歸檔(ARCHIVELOG)方式和非歸檔(NO ARCHIVELOG)方式。在非歸檔方式下,日志切換時直接覆蓋以前的重做日志文件,不產生歸檔日志。數據庫在歸檔方式下運行,在日志切換后,ARCH進程會對自己寫滿的重做日志文件進行存檔。默認情況下,oracle采用非歸檔的運行方式,主要因為歸檔方式會給系統帶來一定的性能問題,只有當數據庫運行在歸檔方式時,ARCH進程才存在,ARCH進程是oracle的可選后臺進程,將日志存檔,以便保存對數據庫做的所有修改,這樣,及時在數據文件磁盤損壞的情況下,數據庫管理員也能將對數據庫恢復至故障發生時的狀態。
1)歸檔進程
是可選的后臺進程
為數據庫設置ARCHIVELOG(歸檔)模式時會自動歸檔聯機重做日志文件
保留對數據庫所有更改的記錄
2)歸檔日志文件
數據庫在允許覆蓋重做日志信息之前生成聯機重做日志組的副本。
這些副本又稱為“歸檔日志”。
2、配置數據庫歸檔日志步驟:
查詢數據庫歸檔方式,確定當前不處于歸檔方式
關閉數據庫并啟動數據庫到MOUNT狀態
將數據庫設置位歸檔模式,并驗證
使用alter database archivelog命令將數據庫設置為歸檔模式
3、獲取歸檔日志信息
數據字典視圖可幫助用戶獲取數據庫配置信息。
用戶通過使用V$ARCHIVE_DEST和V$ARCHIVE_LOG視圖獲取歸檔日志信息。
V$ARCHIVE_DEST:顯示當前所有歸檔日志存儲位置及其狀態。
V$ARCHIVE_LOG:顯示歷史歸檔日志信息(即已歸檔的日志文件的信息)。
如何查看所有有效的歸檔日志文件存儲目錄:
說明:獲取已歸檔的日志文件的信息,歸檔進程會在每次日志切換后將聯機重做日志文件復制到一個歸檔日志文件,從而生成一串連續的且能用于恢復一個備份的日志文件。這些日志文件的名稱和位置由若干初始化參數控制。
五、數據字典
1、數據字典定義
數據字典是oracle存儲關鍵信息的表和視圖的集合。是數據庫的說明,包含數據庫中所有對象的名稱和屬性。Oracle進程會在SYS模式中維護這些表和視圖,也就是說數據字典的所有者為SYS用戶,數據存放在SYSTEM表空間中。
數據字典描述了實際數據是如何組織的,如一個表的創建者信息,創建時間信息,所屬表空間信息,用戶訪問權限信息等。對他們可以像處理其他數據庫表或視圖一樣進行查詢,但不能進行任何修改。
Oracle數據字典通常是在創建和安裝數據時被創建的。
Oracle數據字典是oracle數據庫系統工作的基礎。
沒有數據字典的支持,oracle數據庫系統就不能進行任何工作。
2、數據字典的構成
數據字典分為數據字典表和數據字典視圖。數據字典中的表不可以直接被訪問,但是可以訪問數據字典中的視圖。數據字典視圖分為兩類:靜態數據字典視圖和動態數據字典視圖。
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;
3)查詢該用戶擁有哪些視圖
4)查詢該用戶擁有哪些數據庫對象,包括表、視圖、存儲過程、觸發器、包、索引、序列等。
SELECT object_name FROM user_objects;
5)查詢當前用戶的信息,主要包括當前用戶名、賬戶id、賬戶狀態、創建時間等。
SELECT * FROM user_users;
6)查詢當前用戶能夠訪問的所有表、過程、函數等。
7)DICTIONARY 數據字典視圖包含數據字典中一切對象的名稱和說明
SELECT * FROM dictionary;
8)使用數據字典不需要記住所有的數據視圖。只需要按照如下步驟操作:
了解數據字典大概分成3類,(user_*、all_*、dba_*),常用的是user_*,可以通過下面語句查詢具體視圖的描述。
然后根據查詢結果找到需要的數據字典視圖,例如:想知道表就可以查詢user_table,想知道視圖就可以查詢user_view,想知道存儲過程就可以查詢user_procedure,想知道表中列的情況就可以查詢user_tab_columns
六、動態數據字典視圖及使用
1、概念
除了靜態數據字典中的3類視圖,其他的字典視圖中主要是V$視圖,之所以這樣命名是因為他們都是以V$或GV$開頭的,這些視圖會不斷地進行更新,可以反映出當前實例和數據庫的運行狀況。動態性能表用于記錄當前數據庫的活動,只存在于數據庫運行期間,實際的信息都取自內存和控制文件,dba可以使用動態視圖來監視和維護數據庫。下面列舉幾個dba維護數據庫中經常使用的幾個動態數據字典視圖。
2、列舉常用動態數據字典視圖
1)查詢和日志文件相關的信息
上圖中列出了所有和日志文件相關的動態數據字典視圖,如果想了解日志文件的詳細信息,可以使用v$log視圖和v$logfile視圖
2)查看日志組狀態信息
3)查看重做日志文件信息
4)查詢當前正在使用的重做日志文件的信息。
從結果中可以看出,當前數據庫正在使用的日志組為group 2,數據庫運行在非歸檔模式,該日志組有一個日志成員,存儲目錄為/opt/oracle/oradata/orcl/redo02.log。
5)通過v$instance視圖查看實例信息
上圖中結果說明,當然實例名為orcl,主機名為oracleserver,版本號為11.2.0.1.0,實例啟動時間為2016年12月14日,狀態為allowed。
6)查看當前數據庫的信息
數據庫名為orcl,創建時間為2016年12月14日,該數據庫運行在歸檔模式。
動態數據字典視圖很好地反映了當前數據庫的運行狀態信息,對于數據庫性能調優和判斷系統瓶頸提供了信息支持。通過動態數據字典視圖還可以查看控制文件的信息、數據文件的信息和表空間的信息。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。