跳轉到內容

RAC 攻擊 - Oracle 叢集資料庫實戰 / 排程程式測試

來自華夏公益教科書,開放的書籍,為開放的世界


在 RAC 中,PL/SQL 可以執行在任何一個節點上,在設計流程時必須考慮到這一點。我們將透過兩個簡單的測試來簡要了解這一特性。

首先,我們來看看排程程式。請注意,此實驗室依賴於在 並行查詢測試 中建立的 PXTEST 服務。



  1. 以 oracle 身份登入節點 collabn1 並確認 pxtest 服務在例項 RAC2 上執行。collabn1:/home/oracle[RAC1]$ srvctl status service -d RAC -s pxtest 服務 pxtest 正在例項(s) RAC2 上執行 collabn1:/home/oracle[RAC1]$
  2. 關閉服務。collabn1:/home/oracle[RAC1]$ srvctl stop service -d RAC -s pxtest collabn1:/home/oracle[RAC1]$
  3. sh 身份登入 RAC1 服務,並建立一個作業類別和一個 PL/SQL 過程,我們可以從作業中執行。請注意,服務名稱區分大小寫!collabn1:/home/oracle[RAC1]$ sqlplus sh/sh@RAC1 exec dbms_scheduler.create_job_class('TESTOFF1',service=>'pxtest'); create or replace procedure traceme(id varchar2) as x number; begin execute immediate 'alter session set tracefile_identifier=||id||'; dbms_session.session_trace_enable(true,true); select count(*) into x from sh.customers; dbms_session.session_trace_disable(); end; /
  4. 安排作業立即執行,並使用與 PXTEST 服務繫結的作業類別。檢查它是否已執行。連續多次查詢 user_schedule_jobs 表。發生了什麼事?select job_name, schedule_type, job_class, enabled, auto_drop, state from user_scheduler_jobs; begin dbms_scheduler.create_job('TESTJOB1','PLSQL_BLOCK', job_action=>'traceme(scheduler01);', job_class=>'TESTOFF1',enabled=>true); end; / select job_name, schedule_type, job_class, enabled, auto_drop, state from user_scheduler_jobs;
  5. 啟動 PXTEST 服務並再次檢查作業狀態。確保連續多次查詢 user_schedule_jobs 表。(耐心等待至少一分鐘。) 作業是否已執行?如果是,那麼是在哪個節點上執行的?host srvctl start service -d RAC -s pxtest select job_name, schedule_type, job_class, enabled, auto_drop, state from user_scheduler_jobs; host ssh collabn2 ls -sh /u01/app/oracle/diag/rdbms/rac/RAC2/trace/*scheduler01.trc host ssh collabn1 ls -sh /u01/app/oracle/diag/rdbms/rac/RAC1/trace/*scheduler01.trc
  6. 修改 PXTEST 服務以在兩個節點上執行並停止它。SQL> host srvctl modify service -d RAC -s pxtest -n -i RAC1,RAC2 SQL> host srvctl stop service -d RAC -s pxtest
  7. 提交 20 個作業來執行程式,然後啟用服務。(這樣所有作業都應該幾乎同時被安排。) 它們在哪個節點(s) 上執行?begin FOR i IN 10..29 LOOP dbms_scheduler.create_job('TESTJOB'||i,'PLSQL_BLOCK', job_action=>'traceme(scheduler'||i||');', job_class=>'TESTOFF1',enabled=>true); END LOOP; end; / select job_name, schedule_type, job_class, enabled, auto_drop, state from user_scheduler_jobs; SQL> host srvctl start service -d RAC -s pxtest select job_name, schedule_type, job_class, enabled, auto_drop, state from user_scheduler_jobs; host ssh collabn2 ls -sh /u01/app/oracle/diag/rdbms/rac/RAC2/trace/*scheduler*.trc host ssh collabn1 ls -sh /u01/app/oracle/diag/rdbms/rac/RAC1/trace/*scheduler*.trc


華夏公益教科書