什麼是OPS OPS(Oracle Parallel Server)可以讓位於不同系統的多個實例同時訪問同一個數據庫
並行服務器可以有效地提高系統的可用性和對多系統的訪問性能
但是
如果你的數據沒有做很好的分割
性能可能還會下降
安裝OPS時
多個實例mount同一數據庫文件
實例間的通訊由分布式鎖管理器(DLM)來管理
需要注意的是分布式鎖管理器與你所使用的硬件和操作系統有著密切的關系
為了確定多個企圖同時修改同一數據的實例
Oracle使用了十個後台進程
LCK
LCK
來鎖定某一實例所使用的資源
OPS主要用於UNIX/LINUX集群環境中
OPS的優點 )高可用性
)加快事務響應時間
可用於決策支持系統
)增大交易連接數
可用於聯機事務處理系統
所有的應用都是適合OPS嗎? 可以根據功能或數據進行分割的應用最適合OPS
那些有
熱數據
(經常被多實例同時訪問的數據)的應用並不適合使用OPS
OPS需要特殊的硬件嗎? OPS要求服務器之間互連並共享磁盤子系統
所有可以做成集群的系統都可以
常用的有UNIX/LINUX和NT等
如何設置OPS? )關閉數據庫
)啟用OPS選項
在UNIX中通過重新連接Oracle軟件的方式來完成
)使Oracle軟件在所有節點上都有效
可以通過復制軟件到其他節點或共享磁盤的方式來完成
)每個實例要有自己的Redo log file
所以要增加必要的log文件
ALTER DATABASE ADD LOGFILE THREAD
GROUP G
(
RAW_FILE
) SIZE
k
GROUP G
(
RAW_FILE
) SIZE
k
GROUP G
(
RAW_FILE
) SIZE
k;
ALTER DATABASE ENABLE PUBLIC THREAD
;
)每個實例要有自己的回滾段
所以要增加必要的回滾段
CREATE ROLLBACK SEGMENT RB
TABLESPACE RBS;
)編輯初始化參數文件initSID
ora文件
添加如下幾項
PARALLEL_SERVER = TRUE
INSTANCE_NUMBER =
THREAD =
ROLLBACK_SEGMENTS = (r
r
r
r
)
)創建OPS所需的數據字典
即運行CATPARR
SQL
)在所有的節點上啟動實例
如何確定一個數據庫是運行在並行狀態? show parameter parallel_server
如何跟蹤活動的實例? SELECT * FROM SYS
V_$ACTIVE_INSTANCES;
SELECT * FROM SYS
V_$THREAD;
如何確定每個實例使用了多少個PCM鎖? select count(*)
Number of hashed PCM locks
from v$lock_element where bitand(flags
) !=
/
select count(*)
Number of fine grain PCM locks
from v$lock_element where bitand(flags
) =
/
如何查看每個數據文件分配了多少個PCM鎖以及ping率? col file_name format a
col tablespace format a
col blocking format
col nlocks format
col start_lk format
select l
file_id ||
|| l
file_name file_name
l
ts_name
TABLESPACE
start_lk
nlocks
blocking
frequency
PING COUNT
from sys
file_ping p
sys
file_lock l
where l
file_id = p
file_id
order by l
file_id
/
什麼是pinging? Pinging是進程
用於協調多實例對同一數據塊的讀寫操作
OPS性能優化的一個挑戰就是要最小化pinging
如何監控PCM鎖的活動情況? 查看當前實例活動PCM鎖的總數
select * from sys
v$lock_activity;
查看每個數據庫對象的PCM鎖活動狀況
col table format a
select file#
kind||
||username||
||name
TABLE
sum(xnc) pings
from sys
v$false_ping p
sys
dba_users u
where u
user_id = p
owner#
group by file#
kind||
||username||
||name
xnc
order by xnc desc
/
如何設置一個對所有OPS實例通用的SQL*Net連接串? )首先要求所有節點上的SID相同
如果不相同可以按如下操作進行更改
關閉數據庫的所有實例
將ORACLE_SID環境變量設成一致
復制原來的初始化文件initOLDSID
ora為initCOMMON
ora
重起所有實例
)編輯本地TNSNAMES
ora
如下例
PHOENIX =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =
)(PORT =
))
(ADDRESS = (PROTOCOL = TCP)(HOST =
)(PORT =
))
)
(CONNECT_DATA =
(SERVICE_NAME = ora
)
)
)
From:http://tw.wingwit.com/Article/program/Oracle/201311/17315.html