㈠ 教你設計大型Oracle資料庫
本文教你如何設計大型Oracle資料庫 希望對大家有所幫助
一 概論
超大型系統的特點為
處理的用戶數一般都超過百萬 有的還超過千萬 資料庫的數據量一般超過 TB;
系統必須提供實時響應功能 系統需不停機運行 要求系統有很高的可用性及可擴展性
為了能達到以上要求 除了需要性能優越的計算機和海量存儲設備外 還需要先進的資料庫結構設計和優化的應用系統
一般的超大型系統採用雙機或多機集群系統 下面以資料庫採用Oracle 並行伺服器為例來談談超大型資料庫設計方法
確定系統的ORACLE並行伺服器應用劃分策略迅盯
資料庫物理結構的設計
系統硬碟的劃分及分配
備份及恢復策略的考慮
二 Oracle並行伺服器應用劃分策略
Oracle並行伺服器允許不同節點上的多個INSTANCE實例同時訪問一個資料庫 以提高系統的可用性 可擴展性及性能 Oracle並行伺服器中的每個INSTANCE實例都可將共享資料庫中的表或索引的數據塊讀入本地的緩沖區中 這就意味著一個數據塊可存在於多個INSTANCE實例的SGA區中 那麼保持這些緩沖區的數據的一致性就很嘩亮重要 Oracle使用 PCM( Parallel Cache Management)鎖維護緩沖區的一致性 Oracle同時通過I DLM(集成的分布式鎖管理器)實現PCM 鎖 並通過專門的LCK進程實現INSTANCE實例間的數據一致
考慮這種情況 INSTANCE 對BLOCK X塊修改 這時INSTANCE 對BLOCK X塊也需要修改 Oracle並行伺服器利用PCM鎖機制 使BLOCK X從INSTANCE 的SGA區寫入資料庫數據文件中 又從數據文件中把BLOCK X塊讀入INSTANCE 的SGA區中 發生這種情況即為一個PING PING使原來 個MEMORY IO可以完成的工作變成 個DISK IO和 個 MEMORY IO才能夠完成 如果系統中有過多的PING 將大大降低系統的性能
Oracle並行伺服器中的每個PCM鎖可管理多個數據塊 PCM鎖管理的數據塊的個數與分配給一個數據文件的PCM鎖的個數及該數據文件的大小有關 當INSTANCE 和INSTANCE 要操作不同的BLOCK 如果這些BLOCK 是由同一個PCM鎖管理的 仍然會發生PING 這些PING稱為FALSE PING 當多個INSTANCE訪問相同的BLOCK而產生的PING是TRUE PING
合理的應用劃分使不同的應用訪問不同的數據 可避免或減少TRUE PING;通過給FALSE PING較多的數據文件分配更多的PCM鎖可減少 FALSE PING的次數 增加PCM鎖不能減少TRUE PING
所以 Oracle並行伺服器設計的目的是使系統交易處理合理的分布在INSTANCE實例間 以最小化PING 同時合理的分配PCM鎖 減少FALSE PING 設計的關鍵是找出可能產生的沖突 從而決定應用劃分的策略 應用劃分有如下四種方法
根據功能模塊劃分 不同的節點運行不同的應用
根據用戶劃分 不同類型的用戶運行在不同的節點上
根據數據劃分 不同的節點訪問不同的數據或索引
根據時間劃分 不同的應用在不同的時間段運行
應用劃分的兩個重要原則是使PING最小化及使各節點的負載大致均衡
三 資料庫物理結構的設計
資料庫物理結構設計包括確定表及索引的物理存儲參數 確定及分配數據畝蘆和庫表空間 確定初始的回滾段 臨時表空間 redo log files等 並確定主要的初始化參數 物理設計的目的是提高系統的性能 整個物理設計的參數可以根據實際運行情況作調整
表及索引數據量估算及物理存儲參數的設置
lishixin/Article/program/Oracle/201311/18944
㈡ oracle中游標的作用有哪些什麼情況下使用
存儲過程中查詢語句如何返回多行結果?我們知道,如果存儲過程中查詢語句有多行結果輸出,會報錯。若想讓存儲過程中的查詢語句返回多行結果不報錯,則需要使用游標來實現。本例主要也是用來熟悉存儲過程中游標的簡單使用方法:
SET SERVEROUTPUT ON;
create or replace procere proc_salary is
--定義變數
v_empno emp.empno%TYPE;
v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
--定義游標
CURSOR emp_cursor IS SELECT empno, ename, sal from emp;
BEGIN--循環開始
LOOP
IF NOT emp_cursor%ISOPEN THEN
OPEN emp_cursor; END IF;
FETCH emp_cursor INTO v_empno, v_ename, v_sal;
--退出循環的條件
EXIT WHEN emp_cursor%NOTFOUND OR emp_cursor%NOTFOUND IS NULL;
dbms_output.put_line('員工編號為' || v_empno || '的' || v_ename || '薪水為:' || v_sal);
END LOOP;END;
/
㈢ oracle 一個游標可存多大的數據量
游標和指針我理解是一個意思的
它只是用來描述取得內存中數據的方式
就像導航一樣,GPS會給你地圖上的位置,而能不能跑到,取決與你的車里有多少油
例如:
在資料庫中查詢 取到一個結果集 你能不能取到那些數據,取決於你的機器 假如結果集中有一個CLOB類型欄位 而你的機器,內存+硬碟總共250M 沒可能看到數據,對吧
修改最大游標: alter system set open_cursor=800, scope=both;
只要你能接受性能,隨便你改,另外 open_cursor是整形 改得越大,性能越受影響
以下來自「賓士M888」的回答
1、plsql是面向過程的語言,這類語言還有c,cobol等,這類語言的共同點是一次只能處理一條數據,而資料庫sql返回的對象是一個集合,這樣直接用plsql程序操作就會出現問題。
2、在這種環境下就出現了游標,游標實際是一個內存地址,只想的是sql查詢出的結果集,當需要的時候再根據游標一條一條取數據【fetch】,直到全部數據取完。
就像chsoftstar說的那樣 出現游標無法取數的問題,很大可能是寫錯了,具體什麼原因,還得樓主自己查找了