1. 程式人生 > >Oracle配置管理

Oracle配置管理

Oracle配置管理

Oracle客戶端與服務器端的通信機制
Oracle產品安裝完成後,服務器和客戶端都需要進行網絡配置才能實現網絡連接,服務器端配置監聽器,客戶端配置網絡服務名。

oracle net協議
Oracle通過oracle net協議實現客戶端與服務器端的連接及數據傳遞。Oracle net是同時駐留在服務器端和客戶端上的一個軟件層,它封裝了TCP/IP,負責建立與維護客戶端應用程序到數據庫服務器的連接。有協議就要有相應的端口,所以oracle NET有個默認的偵聽端口1521。
..

技術分享圖片
..

客戶端發出的請求首先通過oracle net協議轉換,轉換成可以通過網絡傳輸的信息,通過tcp/ip網絡將請求傳輸到數據庫服務器端,服務器端收到客戶端請求後通過oracle net協議轉換,將請求轉換成數據庫可以解釋執行的本地指令,並在服務器端執行,並將結果通過tcp/ip和oracle net協議傳輸給客戶端顯示。

..

客戶端與服務器端的連接過程
Oracle服務器通過一個名為“oracle net監聽器”的組件接收來自客戶端的連接請求,監聽位於服務器端的一個後臺進程。發送的客戶端連接請求,首先被服務器的監聽器所偵聽,並交給對應的數據庫實例,從而建立起客戶端與服務器的連接。連接建立後,客戶端與服務器端就可以直接進行通信,不需要監聽器參與。要實現監聽器對客戶請求的監聽,需要對監聽器進行配置。
..
Oracle網絡服務名是一個標識符,代表客戶端連接服務器的配置信息。
技術分享圖片
..

客戶端與服務器端的連接過程如下:
1)在服務器端有一個常駐的監聽器,監聽客戶端發出的連接請求。
2)用戶在客戶端使用(企業管理器或sql工具),輸入用戶名、口令及網絡服務名,或在sql命令行中輸入類似“CONNECT username/password@net_service_name”的請求。

3)客戶端查看網絡服務配置文件tnsnames.ora文件,將網絡服務名映射為包含oracle服務器地址、監聽端口和全局數據庫名的連接描述符。
4)客戶端根據連接描述符定位監聽器,並通過網絡連接信息傳遞給監聽器。
5)監聽器查詢監聽配置文件listener.ora,找出所要連接的服務器。
6)客戶端和服務器開始通信。
..

配置和管理Oracle網絡配置的工具常見的有以下幾種:
技術分享圖片
..
1 ) netca方式

技術分享圖片
..

技術分享圖片
..
技術分享圖片
..
技術分享圖片
..
技術分享圖片
..
技術分享圖片
..
技術分享圖片
..
技術分享圖片
..
技術分享圖片

..

查看監聽文件
cat /opt/oracle/product/11.2/db_1/network/admin/listener.ora
.
開啟新的監聽器
lsnrctl start listener1

.
查看監聽器狀態
lsnrctl status listener1
.
netmgr方式
技術分享圖片

添加監聽器即可
.
命令方式
修改vim /opt/oracle/product/11.2/db_1/network/admin/listener.ora
增加新的偵聽器,代碼如下:
技術分享圖片
.
開啟新的監聽器
.
lsnrctl start listener1
.

上面紅框中的代碼the listener supports no services顯示沒有任何服務註冊到該監聽器上,這與監聽和數據庫實例的啟動先後順序有關。

解決方法:監聽啟動和數據庫實例啟動的順序
根據前面的知識,啟動完數據庫實例後,啟動監聽,在連接數據庫時,只有這二者兼備,oracle才能向外提供服務。
監聽和實例啟動順序的先後會對二者之間的工作協調產生影響,具體如下:
..

先啟動監聽,後啟動實例:此時遠程客戶端連接實例是正常的,不會有問題,因為監聽先啟動,在啟動實例時後臺進程PMON會向監聽註冊服務器,當用戶請求服務時,兩者的協調工作已準備就緒。
先啟動實例,後啟動監聽:如果監聽剛啟動,用戶馬上連接實例,可能會報“監聽程序當前無法識別連接描述符中請求的服務”的錯誤,原因在於PMON還沒來得及向監聽註冊實例服務。但是這個問題只會存在很短的一段時間,再連接就不會有問題了,為什麽等一會就好了呢?因為PMON每隔一段時間都會看有無服務需要向監聽註冊,此時若監聽已啟動,PMON就能註冊成功,二者的協調工作就準備就緒了。
有沒有辦法解決很短的一段時間內的這個問題呢?答案是一定的。就是以靜態註冊的方式,即將實例的服務描述添加到listener.ora,這樣只要啟動監聽,對應的服務在監聽中就註冊了。這是只要實例正常啟動完成,就可以對外提供服務器了。在Listener.ora代碼中添加如下代碼即可。

..

技術分享圖片

客戶端的連接
客戶端連接到數據庫服務器必須知道一些信息,如數據庫服務器的主機名或ip地址,使用的通信協議、端口號、以及對應的數據庫服務名,這些需要在客戶端設置
..
1)在win7上安裝oracle客戶端軟件

Oracle-product-11.2.0-client_lite-network-admin

安裝完成時候會在c:盤下生成oracle文件夾:

..

2)找到c:\oracle\product\11.2.0\client_lite\network\admin\tnsnames.ora文件,並修改,修改結果如下:
技術分享圖片
..
3)註意:需要在hosts文件裏面添加解析
Windosws-System32-arivers-etc
技術分享圖片
..
4)在win7客戶端上打開命名行,執行命令連接
技術分享圖片

..

已經遠程連接到oracle服務器

..

管理控制文件
控制文件是非常重要的文件,主要掌握以下內容:
了解控制文件在數據庫啟動的作用
獲得控制文件信息
查看控制文件中所存內容的信息
存儲多重控制文件
備份和恢復控制文件

..

控制文件在數據庫啟動的作用
對於dna來講,oracle數據庫控制文件是非常重要的文件,他是數據庫創建的時候自動生成的二進制文件,其中記錄了數據庫的狀態信息。其它任何用戶都無法修改控制文件,只有數據庫運行過程中,數據庫實例可以修改控制文件中的信息。控制文件主要包括以下內容:
數據庫名稱,一個控制文件只能屬於一個數據庫。
數據庫創建時間。
數據文件的名稱、位置、聯機、脫機狀態信息。
重做日誌文件的名稱、位置及歸檔信息。
所有表空間信息。
當前日誌序列號。
最近檢查點信息。
..
控制文件在數據庫啟動的mount階段被讀取,數據庫啟動與控制文件的關系如下圖:
技術分享圖片

..

在數據庫啟動時首先使用默認規則找到並打開參數文件,在參數文件中含有控制文件的位置信息,打開控制文件後,會通過控制文件中記錄的各種數據庫文件的位置打開數據庫,從而啟動數據庫到可用位置,所以在數據庫啟動後,在數據庫的運行過程中,數據庫服務器可不斷地修改控制文件中的內容,所以在數據庫被打開的階段,控制文件必須是可讀寫的,但是其他任何用戶都無法修改控制文件,只有數據庫實例可以修改控制文件中的信息。
..

獲得控制文件信息
1)可以從V$CONTROLFILE視圖中查看控制文件信息,包括控制文件名稱。
技術分享圖片
..
還可以從V$PARAMETER視圖中查看
技術分享圖片
..
查看控制文件中所存內容的信息
技術分享圖片
..
從截圖當中可可以看到控制文件中存放了創建數據庫的信息、重做日誌信息、數據文件及歸檔日誌文件記錄等信息。這些有價值的信息用於數據維護和管理,很多數據字典視圖是從控制文件中獲得的信息。
..

存儲多重控制文件
由於控制文件非常重要,所以要求控制文件不能只有一個,通常數據庫中控制文件要多於3個,並且存放在不同的磁盤上,這種使用控制文件的方法也稱為控制文件的多路復用。實現多重的一個方法就是通過復制控制文件到多個位置並修改初始化參數文件中的CONTROL_FILES參數,使之包含所有控制文件名稱。需要註意,當存在多個控制文件時,oracle會同時更新所有的控制文件,但是僅對CONTROL_FILES中所列舉的第一個控制文件進行讀取操作。

..
舉例說明實現多路復用控制文件的方法:
1)數據庫狀態為打開狀態,修改SPFILE中的CONTROL_FILES參數。
技術分享圖片
..
2)關閉數據庫
技術分享圖片
..
3)使用操作系統命令將文件復制到新的位置

技術分享圖片
..
4)重新啟動實例
技術分享圖片
..

備份和恢復控制文件
備份控制文件
有兩種方式備份:一種是備份為二進制文件,另一種是備份為腳本文件,常用的備份為二進制文件的方法(備份二進制文件即對控制文件進行復制)
技術分享圖片
..
恢復控制文件
刪除控制文件control01.ctl(模擬損壞)
技術分享圖片
..
啟動數據庫(報錯)
startup
..
執行命令恢復
alter system set control_files=‘/opt/oracle/oradata/orcl/control03.ctl‘ scope=spfile;
..
查看三個文件都回來了(因為只要有一個文件不丟,就可以執行上面的命令,然後就會生成另外的兩個文件),數據庫也可以啟動。
startup.
..

或者:
如果control01.ctl丟失,可以直接使用control02.ctl將control01.ctl替換,或者復制一份改名為control01.ctl即可。
..

管理重做日誌文件
重做日誌文件也稱聯機重做日誌,目的是恢復數據。
在數據庫運行過程中,用戶更改的數據會暫時存放在數據庫的高速緩沖區中。為了提高寫數據庫的速度,並不是一旦有數據變化,就把變化的數據寫到數據庫文件中。頻繁的讀寫磁盤會使數據庫系統效率降低,所以,要等到數據庫高速緩沖區中的數據達到一定的量或滿足一定條件時,DBWR進程才會將變化了的數據寫到數據文件中。這種情況下,如果DBWR把變化了的更改寫到數據文件之前發生了宕機,那麽數據庫高速緩沖區中的數據就會全部丟失。如果在數據庫服務器重啟動後無法恢復這部分用戶更改的數據,顯然是不可以的。
重做日誌就是把變化了的數據首先保存起來,其中LGWR進程負責把用戶更改的數據先寫到重做日誌文件中,這樣數據庫重新啟動時,數據庫系統從重做日誌文件中讀取這些變化了的數據,將用戶更改的數據提交到數據庫中,寫入數據文件。

..
為了提高磁盤效率和防止重做日誌文件損壞,oracle引入了一種重做日誌文件結構,如圖:
技術分享圖片
..
上圖可以看出有3個重做日誌組,每組包含兩個重做日誌成員。當第一個日誌組寫滿之後,就會停止寫入,而轉向第二個日誌組,第二個寫滿後,轉向第三個日之組,第三個寫滿就向第一個日誌組寫入,oracle以這種循環方式使用重做日誌組。
Oracle規定每個數據庫至少有兩個日誌組,每組至少包含一個或者多個日誌成員。
使用新的重做日誌之前,DBWR進程需要將所有的數據更改寫到數據文件中。如果數據庫處於歸檔模式下,當發生日之組切換時,歸檔進程ARCH會把當前已滿的重做日誌文件中的數據復制到歸檔日誌中。
..
讀取重做日誌文件信息
數據字典視圖V$LOG記錄了當前數據庫的日誌組號、日誌序列號,每個日誌文件的大小,每個日誌組的成員數量,是否存檔以及日誌組的當前狀態。
使用V$LOG查看重做日誌文件
技術分享圖片
..
上圖中輸出結果有3個日誌組,每個日誌組分別有一個日誌文件。日誌組3位當前正在使用的重做日誌組,成為當前日誌組。
..
數據字典視圖V$LOGFILE記錄了當前日誌組號,該日誌組的狀態、類型和日誌組成員信息。
技術分享圖片
..
創建重做日誌組
增加重做日誌成員,並把每個日誌組的重做日誌成員分布在不同的磁盤上,提高磁盤效率和防止重做日誌文件的損壞。
技術分享圖片

..
語法:
ALTER DATABASE [database_name]
ADD LOGFILE [GROUP group_number]
Filename [SIZE size_integer [K\M]] [REUSE]

實例:
技術分享圖片
..
技術分享圖片
上圖中的兩個重做日誌文件是同一組,且這兩個重做日誌成員處於聯機狀態。
註意:日誌文件大小一般在10M-50M比較合適。
..
刪除重做日誌組
刪除文件組的限制條件如下:
當前日誌組不可刪除
要刪除當前日誌組需要先對當前日誌組進行切換
使用命令為alter system switch logfile;
活動的日誌組不可刪除
沒有歸檔的日誌組不可刪除(前提是已運行在歸檔模式下)
技術分享圖片
..
添加刪除重做日誌文件

技術分享圖片
..
技術分享圖片
..
技術分享圖片
..

上圖中發現新添加的redo11.log是無效狀態,是因為三個日誌組的日誌成員還沒有寫滿,所以redo11.log是無效狀態,只要做兩次強制日誌切換就可以發現是ONLINE狀態了,方法如下:
技術分享圖片
..
多執行幾次,再次查看文件:
技術分享圖片
發現redo11.log已經在線。
..
刪除重做日誌文件redo11.log
技術分享圖片
提示不能刪除,是因為redo03.log當前正在使用,狀態為current。
強制切換之後就可以刪除了。
..
技術分享圖片
..
技術分享圖片
..

日誌切換和檢查點事件
日誌切換就是停止當前日誌組,轉而寫另外一個新的日誌組,系統可以自動切換,也可以手工切換,當發生日誌切換時,系統會在後臺完成檢查點的操作,以減少實例的恢復時間。
檢查點是一個事件,用於減少實例恢復的時間,當檢查點發生時,它會觸發DBWR進程,把數據高速緩沖中變化了的數據寫入數據文件,同時檢查點進程更新控制文件和數據文件頭部,以使它們保持一致。檢查點其實是一個後臺進程,用來保證所有修改過的數據庫緩沖區的東西都寫入數據庫文件。
檢查點時間越頻繁,則一旦數據庫發生故障,需要數據庫恢復的重用日誌中的數據就越少(因為在恢復時,就不必檢查恢復檢查點之前的重用日誌中的數據),所以就減少實例恢復的時間。
啟動時間:
每隔三秒(或更加頻繁)
發生日誌切換
立即選項關閉例程時
手動請求
負責以下事項:
使用檢查點信息更新數據文件標題
使用檢查點信息更新控制文件
在完成檢查點向DBWn發出信號
..

技術分享圖片
強制日誌切換命令如下:

技術分享圖片
強制產生檢查點事件(手動)命令如下:
技術分享圖片
..
管理歸檔日誌文件

歸檔日誌介紹
Oracle數據庫有兩種運行方式,歸檔(ARCHIVELOG)方式和非歸檔(NO ARCHIVELOG)方式。在非歸檔方式下,日誌切換時直接覆蓋以前的重做日誌文件,不產生歸檔日誌。數據庫在歸檔方式下運行,在日誌切換後,ARCH進程會對自己寫滿的重做日誌文件進行存檔。默認情況下,oracle采用非歸檔的運行方式,主要因為歸檔方式會給系統帶來一定的性能問題,只有當數據庫運行在歸檔方式時,ARCH進程才存在,ARCH進程是oracle的可選後臺進程,將日誌存檔,以便保存對數據庫做的所有修改,這樣,及時在數據文件磁盤損壞的情況下,數據庫管理員也能將對數據庫恢復至故障發生時的狀態。
歸檔進程
是可選的後臺進程
為數據庫設置ARCHIVELOG(歸檔)模式時會自動歸檔聯機重做日誌文件
保留對數據庫所有更改的記錄
歸檔日誌文件
數據庫在允許覆蓋重做日誌信息之前生成聯機重做日誌組的副本。
這些副本又稱為“歸檔日誌”。

..

技術分享圖片

..

配置數據庫歸檔日誌步驟:
查詢數據庫歸檔方式,確定當前不處於歸檔方式
關閉數據庫並啟動數據庫到MOUNT狀態
將數據庫設置位歸檔模式,並驗證
SQL>archive log list;
SQL>shutdown immediate;
SQL>startup mount;
SQL>alter database archivelog;
SQL>alter database open;
SQL>archive log list;

..
1)查詢數據庫歸檔方式,確定當前不處於歸檔方式。
技術分享圖片
..
2)關閉數據庫並啟動數據庫到mount模式。
技術分享圖片
..
3)使用alter database archivelog命令將數據庫設置為歸檔模式,並驗證歸檔模式是否改變。
技術分享圖片
..

獲取歸檔日誌信息
數據字典視圖可幫助用戶獲取數據庫配置信息。用戶通過使用V$ARCHIVE_DEST和V$ARCHIVE_LOG視圖獲取歸檔日誌信息。
V$ARCHIVE_DEST:顯示當前所有歸檔日誌存儲位置及其狀態。
V$ARCHIVE_LOG:顯示歷史歸檔日誌信息。
如何查看所有有效的歸檔日誌文件存儲目錄:
技術分享圖片
..

獲取已歸檔的日誌文件的信息,歸檔進程會在每次日誌切換後將聯機重做日誌文件復制到一個歸檔日誌文件,從而生成一串連續的且能用於恢復一個備份的日誌文件。這些日誌文件的名稱和位置由若幹初始化參數控制。
技術分享圖片
..

數據字典
數據字典定義
數據字典是oracle存儲關鍵信息的表和視圖的集合。是數據庫的說明,包含數據庫中所有對象的名稱和屬性。Oracle進程會在SYS模式中維護這些表和視圖,也就是說數據字典的所有者為SYS用戶,數據存放在SYSTEM表空間中。
..

數據字典描述了實際數據是如何組織的,如一個表的創建者信息,創建時間信息,所屬表空間信息,用戶訪問權限信息等。對他們可以像處理其他數據庫表或視圖一樣進行查詢,但不能進行任何修改。
Oracle數據字典通常是在創建和安裝數據時被創建的。
Oracle數據字典是oracle數據庫系統工作的基礎。
沒有數據字典的支持,oracle數據庫系統就不能進行任何工作。

..

數據字典的構成
數據字典分為數據字典表和數據字典視圖。數據字典中的表不可以直接被訪問,但是可以訪問數據字典中的視圖。數據字典視圖分為兩類:靜態數據字典視圖和動態數據字典視圖。
..

技術分享圖片

數據字典表
數據字典表中的數據是oracle系統存放的系統數據,而普通表存放的是用戶的數據。為了方便的區別這些表,這些表的名稱都是用$結尾,這些表屬於SYS用戶。
為了方便對數據字典表的查詢,oracle對這些數據字典都分別建立了用戶視圖,這樣既容易記住,還隱藏了數據字典表之間的關系。
..
靜態數據字典視圖
靜態數據字典中的視圖分為3類,他們分別由3個前綴構成:USER*、ALL、DBA_
USER*:該視圖存儲了當前用戶所擁有的對象的信息(既所有在該用戶模式下的對象)。
ALL
:該視圖存儲了當前用戶能夠訪問的對象的信息,(與USER_相比,ALL*並不需要擁有該對象,只需要具有訪問該對象的權限即可)。
DBA
*:該視圖存儲了數據庫中所有對象的信息,(前提是當前用戶具有訪問權限,一般來說必須具有管理員權限)。

..

常用的數據字典視圖
user_tables:描述當前用戶擁有的所有表的信息,主要包括表名、表空間名、簇名等。
通過此視圖可以清楚地了解當前用戶擁有的表有哪些.
SELECT table_name, tablespace_name FROM user_tables;

..
技術分享圖片
..
顯示結果:
技術分享圖片
..
查詢該用戶有哪些索引
SELECT index_name FROM user_indexes;
技術分享圖片
顯示結果如下:
技術分享圖片

3)查詢該用戶擁有哪些視圖
技術分享圖片

..
顯示結果如下:
技術分享圖片

查詢該用戶擁有哪些數據庫對象,包括表、視圖、存儲過程、觸發器、包、索引、序列等。
SELECT object_name FROM user_objects;
技術分享圖片
..
查詢結果如下:
技術分享圖片

查詢當前用戶的信息,主要包括當前用戶名、賬戶id、賬戶狀態、創建時間等。
SELECT * FROM user_users;
技術分享圖片
查詢結果,我只顯示用戶名和id了。
..

查詢當前用戶能夠訪問的所有表、過程、函數等。
技術分享圖片
..

技術分享圖片
DICTIONARY 數據字典視圖包含數據字典中一切對象的名稱和說明
SELECT * FROM dictionary;
..
技術分享圖片

..

輸出結果如下所示。
技術分享圖片
..
使用數據字典不需要記住所有的數據視圖。只需要按照如下步驟操作:
了解數據字典大概分成3類,(user*、all、dba_),常用的是user_*,可以通過下面語句查詢具體視圖的描述。
..
技術分享圖片
然後根據查詢結果找到需要的數據字典視圖,例如:向知道表就可以查詢user_table,想知道視圖就可以查詢user_view,想知道存儲過程就可以查詢user_procedure,想知道表中列的情況就可以查詢user_tab_columns.
..
動態數據字典視圖及使用

概念
除了靜態數據字典中的3類視圖,其他的字典視圖中主要是V$視圖,之所以這樣命名是因為他們都是以V$或GV$開頭的,這些視圖會不斷地進行更新,可以反映出當前實例和數據庫的運行狀況。動態性能表用於記錄當前數據庫的活動,只存在於數據庫運行期間,實際的信息都取自內存和控制文件,dba可以使用動態視圖來監視和維護數據庫。下面列舉幾個dba維護數據庫中經常使用的幾個動態數據字典視圖。
..

列舉常用動態數據字典視圖
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年11月27日,狀態為allowed。
..
6)查看當前數據庫的信息
技術分享圖片
..
數據庫名為orcl,創建時間為2016年11月18日,該數據庫運行在歸檔模式。

動態數據字典視圖很好地反映了當前數據庫的運行狀態信息,對於數據庫性能調優和判斷系統瓶頸提供了信息支持。通過動態數據字典視圖還可以查看控制文件的信息、數據文件的信息和表空間的信息。

Oracle配置管理