Services in Oracle Database 10g

來源:互聯網
上載者:User

   基於RAC環境中使用的應用程式,有時候希望某個特定的應用程式僅僅運行在RAC的子節點,或者說為某些應用程式分配一個首要節點。對此,Oracle 10g可以使用services來實現。


一、叢集配置

在使用services之前,需要首先檢查叢集的配置是否正確。  

下面的命令輸出了資料庫ORCL運行於三個不同的節點。  


srvctl config database -d ORCL  

server01 ORCL1 /u01/app/oracle/product/10.1.0/db_1  

server02 ORCL2 /u01/app/oracle/product/10.1.0/db_1  

server03 ORCL3 /u01/app/oracle/product/10.1.0/db_1  


這些配置通常在資料庫建立期間完成。也可以通過下面的命令來完成。  

srvctl add database -d ORCL -o /u01/app/oracle/product/10.1.0/db_1  #添加資料庫ORCL的$ORACLE_HOME到crs  

srvctl add instance -d ORCL -i ORCL1 -n server01                    #為資料庫ORCL添加相應的instance到crs  

srvctl add instance -d ORCL -i ORCL2 -n server02  

srvctl add instance -d ORCL -i ORCL3 -n server03


二、建立service


可以使用srvctl命令,dbca工具以及DBMS_SERVICES包來建立以及修改service。本文僅僅使用srvctl命令列來完成。  

假定有兩個應用程式希望以以下方式運行:  

OLTP :主要運行在節點1和節點2,當節點1和2不可用時,則能夠運行在節點3。  

BATCH :主要運行在節點3,當節點3不可用時,則能夠運行在節點1和2。  


為滿足上面的需求,我們可以建立以下services  

# Set environment.  

export ORACLE_HOME=/u01/app/oracle/product/10.1.0/db_1  

export PATH=$ORACLE_HOME/bin:$PATH  


# Create services.  

srvctl add service -d ORCL -s OLTP_SERVICE -r ORCL1,ORCL2 -a ORCL3  

srvctl add service -d ORCL -s BATCH_SERVICE -r ORCL3 -a ORCL1,ORCL2  


OLTP_SERVICE 能夠運行在所有的RAC節點,因為ORCL3位於可用列表中,但通常情況下則主要運行在節點1和節點2。(-r 表明為可用節點)  

BATCH_SERVICE 能夠運行在所有的RAC節點,因為ORCL1與ORCL2位於可用列表中,通常情況下該service運行在節點3。(-r 表明為可用節點)  


這些services能夠通過以下命令來啟動後停止  

srvctl start service -d ORCL -s OLTP_SERVICE  

srvctl start service -d ORCL -s BATCH_SERVICE  


srvctl stop service -d ORCL -s OLTP_SERVICE  

srvctl stop service -d ORCL -s BATCH_SERVICE


三、Jobs and Services


--Oracle 10g scheduler允許job和job 類連結,從而使得與services相關的job按job 類運行在RAC環境的指定節點。  

--為滿足上述的需求,對此可以建立以下兩個job類。  


-- Create OLTP and BATCH job classes.  

BEGIN  

 DBMS_SCHEDULER.create_job_class(  

   job_class_name => 'OLTP_JOB_CLASS',  

   service        => 'OLTP_SERVICE');  


 DBMS_SCHEDULER.create_job_class(  

   job_class_name => 'BATCH_JOB_CLASS',  

   service        => 'BATCH_SERVICE');  

END;  

/  


-- Make sure the relevant users have access to the job classes.  

GRANT EXECUTE ON sys.oltp_job_class TO my_user;  

GRANT EXECUTE ON sys.batch_job_class TO my_user;  


--可以為存在的job指派到新建立的job類或在建立job時指派到這個job 類  

-- Create a job associated with a job class.  

BEGIN  

 DBMS_SCHEDULER.create_job (  

   job_name        => 'my_user.oltp_job_test',  

   job_type        => 'PLSQL_BLOCK',  

   job_action      => 'BEGIN NULL; END;',  

   start_date      => SYSTIMESTAMP,  

   repeat_interval => 'FREQ=DAILY;',  

   job_class       => 'SYS.OLTP_JOB_CLASS',  

   end_date        => NULL,  

   enabled         => TRUE,  

   comments        => 'Job linked to the OLTP_JOB_CLASS.');  

END;  

/  


--對於上面的這個job與job類的理解是,service可以運行在一個或多個指定的節點以及可用節點,因此可以基於service來建立Job。  

--接下來為這個Job指派到基於service的job類,從而使得這個job也可以運行在指定的一個或多個節點。  


-- Assign a job class to an existing job.  

EXEC DBMS_SCHEDULER.set_attribute('MY_BATCH_JOB', 'JOB_CLASS', 'BATCH_JOB_CLASS');  

--Translator: Robinson  


四、Connections and Services


services的使用不會由於使用了job而受到限制。下面的services能夠添加到tnsnames.ora檔案,且列出每一個應用程式可以使用哪一個節點。  

OLTP =  

 (DESCRIPTION =  

   (LOAD_BALANCE = ON)  

   (FAILOVER = ON)  

   (ADDRESS = (PROTOCOL = TCP)(HOST = server01)(PORT = 1521))  

   (ADDRESS = (PROTOCOL = TCP)(HOST = server02)(PORT = 1521))  

   (ADDRESS = (PROTOCOL = TCP)(HOST = server03)(PORT = 1521))  

   (CONNECT_DATA =  

     (SERVICE_NAME = OLTP_SERVICE)  

     (FAILOVER_MODE =  

       (TYPE = SELECT)  

       (METHOD = BASIC)  

       (RETRIES = 20)  

       (DELAY = 1)  

     )  

   )  

 )  


BATCH =  

 (DESCRIPTION =  

   (LOAD_BALANCE = ON)  

   (FAILOVER = ON)  

   (ADDRESS = (PROTOCOL = TCP)(HOST = server01)(PORT = 1521))  

   (ADDRESS = (PROTOCOL = TCP)(HOST = server02)(PORT = 1521))  

   (ADDRESS = (PROTOCOL = TCP)(HOST = server03)(PORT = 1521))  

   (CONNECT_DATA =  

     (SERVICE_NAME = BATCH_SERVICE)  

     (FAILOVER_MODE =  

       (TYPE = SELECT)  

       (METHOD = BASIC)  

       (RETRIES = 20)  

       (DELAY = 1)  

     )  

   )  

 )  


#上面為應用程式提供了相應的連結標識符,通過相應的串連標識符將串連到指定的service。


oracle視頻教程請關注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.