Oracle 10g 的神奇之旅开放你的服务大门(oracle10g服务号)

Oracle 10g的神奇之旅:开放你的服务大门

Oracle 10g是Oracel公司推出的一款高性能、高可用、高安全的数据库管理系统。它是Oracle数据库家族最为出色的一个版本,被广泛运用于企业级应用系统的建设中。本文主要介绍Oracle 10g数据库的一项重要特性——服务(Service)管理,并通过实际案例演示如何开放你的服务大门,让其它系统接入Oracle 10g数据库中所提供的服务。

服务的概念

在Oracle 10g数据库中,服务是一个很重要的概念。服务就是Oracle数据库提供给外界的一种访问方式,通过服务,可以将数据库中的特定功能和操作暴露给其他系统使用,以满足不同运维需求。例如,一个Oracle数据库可以提供不止一个服务,每个服务都会对应一个唯一的服务名称,也被称为服务标识符(Service Name)。在服务的实现上,Oracle 10g支持两种不同的方式:静态服务和动态服务。

静态服务

静态服务在Oracle 10g中也叫做基于TCP/IP的服务。实际上,所有的服务都是围绕着TCP/IP协议展开的。静态服务需要通过在数据库中创建一个监听器(Listener)来实现。这个监听器可以监听一个或多个端口号,并提供服务名到监听器端口的映射,这样在客户端访问服务时,客户端通过服务名可以找到监听器所在的端口号。建立静态服务有下面的代码:

“`PL/SQL

listener.ora文件中的配置信息:

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

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

)

)

tnsnames.ora文件中的配置信息:

MYDB =

(DESCRIPTION =

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

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = mydb)

)

)

sqlnet.ora文件中的配置信息:

NAMES.DEFAULT_DOMN = mydb.com


动态服务

动态服务也叫做基于HTTP的服务,它将数据库服务封装成HTTP请求,并借助Oracel HTTP Server(OHS)将请求转发到Oracle数据库中的PL/SQL程序。这种服务方式的好处在于可以通过Web方式访问数据库中的服务,同时也可以将PL/SQL程序通过Web方式发布,使得应用程序更加易用。与静态服务不同,动态服务并不需要监听器,而是将TCP/IP部分交给了OHS处理。建立动态服务也有相应的代码:

```PL/SQL
BEGIN
DBMS_EPG.drop_dad('mydad');
DBMS_EPG.create_dad('mydad',17781);
END;

服务应用实例

本节通过实际案例演示如何在Oracle 10g中开放你的服务大门。

案例1:利用静态服务实现跨网络共享

假设有两个Oracle数据库实例,一个在A服务器上,一个在B服务器上,现在要在A服务器上为B服务器上的Oracle数据库开放服务。则需要在A服务器上创建一个监听器,并指向B服务器上的服务。具体操作如下:

1. 在B服务器上的listener.ora文件中添加如下配置:

“`PL/SQL

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = mydb)

(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

)

)


2.在B服务器上的tnsnames.ora文件中添加如下配置:

```PL/SQL
mydb =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = BServer)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = mydb)
)
)

3. 在A服务器上的listener.ora文件中添加如下配置:

“`PL/SQL

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = mydb)

(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

(GLOBAL_DBNAME = BServer)

)

)


4.在A服务器上的tnsnames.ora文件中添加如下配置:

```PL/SQL
mydb =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = AServer)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = mydb)
)
)

5. 在A服务器上的sqlnet.ora文件中添加如下配置:

“`PL/SQL

NAMES.DEFAULT_DOMN = mydb.com


完成上述配置后,B服务器上的Oracle数据库上有了一个服务名为mydb,便可以在A服务器上通过mydb服务访问B服务器上的Oracle数据库了。

案例2:利用动态服务实现Web方式访问

假设有一个通过Oracle数据库实现的客户管理系统,现在需要将客户信息以Web方式访问。具体操作如下:

1. 在Oracle 10g数据库中创建一个PL/SQL程序,代码如下:

```PL/SQL
CREATE OR REPLACE PROCEDURE get_customer_info(P_ID NUMBER, P_NAME OUT VARCHAR2) AS
BEGIN
SELECT CUSTOMER_NAME INTO P_NAME FROM CUSTOMER WHERE CUSTOMER_ID = P_ID;
END;

2. 在Oracle 10g数据库中创建一个动态服务,命名为mydad,端口号为17781,代码如下:

“`PL/SQL

BEGIN

DBMS_EPG.drop_dad(’mydad’);

DBMS_EPG.create_dad(’mydad’,17781);

END;


3. 在Oracle 10g数据库中创建一个服务,将get_customer_info PL/SQL程序封装成服务,在动态服务中显示该服务,代码如下:

```PL/SQL
BEGIN
DBMS_SERVICE.create_service(’get_customer_info’, ‘SYS.ANONYMOUS_BLOCK’, ‘pls=’ || DBMS_METADATA.CURSOR_TO_XML(DBMS_METADATA.OPEN(DBMS_METADATA.PARAMETER_TRANSFORM(DBMS_METADATA.DATA_OBJECT,’SYS.ANONYMOUS_BLOCK’))), ‘get_customer_info’);
DBMS_SERVICE.show_service_status(’get_customer_info’);
END;

结果如下:

——————————————————————————–
Service : get_customer_info
Edition :
Execution Mode : ROUND-ROBIN
Flover Method : NONE
Flover Type : NONE
Preferred Instance :
Avlable Instances : PL/SQL Service
Execution Type : STATELESS
Preferred Instances :
Maximum Retries : 0
Sessions : UNLIMITED
Importance : MEDIUM
DTP : OFF
AQ Avlable : OFF

State : RUNNING
Status : OK
Metadata Objective : PL/SQL Service
Database User : SYS
Service Created date : 2007-03-23 06:05:50
Service Last Modified date : 2007-03-23 06:05:50
End Point : http://localhost:7777/pls/get_customer_info/get_customer_info

4. 在Oracle HTTP Server(OHS)中创建一个虚拟主机,将请求转发到Oracle 10g数据库中,代码如下:

“`XML

ServerName localhost

RewriteEngine on

RewriteRule ^/get_customer_info/(.*) http://localhost:17781/$1 [P,L]

ErrorLog logs/myerror_car.log

CustomLog logs/myaccess_car.log combined


完成上述步骤后,客户管理系统便可以通过Web方式通过刚刚创建的动态服务获取客户信息了。

结论

服务是Oracle 10g的一项重要特性,拥有了服务的管理能力,可以大大提高应用系统的灵活性、可维护性和安全性。通过本文案例的演示,我们可以看到,服务也是Oracle 10g中一个非常有力的功能,允许用户非常容易地开发和部署应用程序,从而为企业提供更为便捷的管理方式和更加出色的应用性能。

数据运维技术 » Oracle 10g 的神奇之旅开放你的服务大门(oracle10g服务号)