Oracle XML 数据库,简称‘XDB',提供了 Oracle XML DB 协议服务器来访问它的层级仓库(hierarchical repository)。它支持标准的互联网协议,FTP,WebDAV,以及 HTTP(S)。这些协议可以提供直接访问 XDB,无需安装额外的软件和使用连接 SQL * Plus 需要的用户名和密码。 这些协议在使用 FTP,HTTP 和 WebDAV 访问 XDB 库,同样方式访问一个正常的服务器时不仅仅是必要的。当使用的数据库组件或者数据库功能需要使用数据库的 HTTP 协议的情况下,他们中的一些甚至是至关重要的,如 Oracle Application Express(又名APEX)或原生 XML 数据库的 Webservices 请仔细阅读,了解如何配置 FTP 和 HTTP - 最常被使用到的部分。 下面的文章将概述 - 验证 XDB 安装,且不存在无效的对象
- 确保 FTP 和 HTTP 端口配置正确
- 需要设置的数据库参数
- XDB DISPATCHERS 程序运行验证
- 测试连接
验证 XDB 安装,且不存在无效的对象 首先,XDB 需要先安装才能接受这些类型的连接。可以通过对dba_registry - 例如: select comp_name, status, version from DBA_REGISTRY where comp_id='XDB'; 如果查询返回如下结果,即证明 XDB 是安装成功并且有效的: COMP_NAME STATUS VERSION -------------------------------- ---------------- ----------------- Oracle XML Database VALID 11.2.0.3.0 假如 XDB 还没有被安装上,请参考以下的文档: Note 1292089.1 Master Note for Oracle XML Database (XDB) Installation. 此外,还建议检查任何无效 SYS 和 XDB 对象 - 例如: select object_name, object_type from dba_objects where owner in ('SYS','XDB') and status='INVALID'; 一旦确认和验证过 XDB 是有效的,安装成功,且在 XDB 或者 SYS 中都不存在无效的对象,数据库则可以被配置来接受上面提到的协议的连接了。 确保 FTP 和 HTTP 端口配置正确 使用下面的命令检查和/或更改端口的协议: HTTP : select dbms_xdb.gethttpport from dual; FTP: select dbms_xdb.getftpport from dual; 如果这些查询返回值为0,即端口没有设置;如果设置,该查询应该返回 http 和 ftp 端口的端口号。 使用 DBMS_XDB 包更改或设置端口: HTTP: call dbms_xdb.sethttpport(<n>) FTP: call dbms_xdb.setftpport(<m>) 其中<n>和<m>是你希望使用的端口号。 注意事项: - 如果以上步骤是通过 Oracle 数据库 12c 执行的,使用 dbms_xdb_config 来替代 dbms_xdb 包来执行相同名字的功能(function)
- 如果数据库是通过数据库配置助手(DBCA)创建的,并且 XDB 是已安装的组件之一,这些端口在数据库创建时可能被设置为以下值,除非有特殊指定。
- 8080 对应 http 协议
- 2100 对应 ftp 协议
- 不需要强制将两个值都设置上,设置真正需要的即可。
- 建议避免使用 HTTP 默认端口 80 和 HTTP 安全默认端口 443,以避免冲突。
需要设置的数据库参数 有一些数据库参数是需要设置的。取决于启动数据库的参数文件类型选择上,需要添加的参数或者选择添加到文本参数文件 init.ora(本文从现在开始称其为 init.ora),或添加到服务器参数文件(本文从现在开始称其为 spfile)。 注意事项: - 牢记,在更改 init.ora 之后需要重启数据库。
- 参数可以通过一个 DBA 用发起的 SQL 会话连接添加到 spfile 中。
SHARED_SERVERS DISPATCHERS 仅在共享服务器模式被启用的情况下工作。因此,首先需要检查的是 SHARED_SERVERS 数据库参数值:它必须等于或者大于1才能工作。可以通过 SQL * Plus 命令来验证当前 SHARED_SERVERS 值 show parameter SHARED_SERVERS 如果这个参数的值需要改变,以确保一个大于0的值,要么添加到 init.ora 文件或加到 spfile 中: INIT.ORA: shared_servers=<number> SPFILE: alter system set shared_servers=<number> scope=both;DISPATCHERS XDB 协议注册到监听必须要有 DISPATCHERS。与端口的情况类似,该参数在通过 DBCA 创建数据库时应该已经被设置成(PROTOCOL=TCP)(SERVICE=<SID>XDB),其中<SID> 是指数据库对应的ORACLE_SID。 下面的 SQL * Plus 命令可以用来确定 DISPATCHERS 参数是否已经被设置: show parameter DISPATCHERS 下面是更改参数文件中参数值的语法: 非 RAC 环境: INIT.ORA: DISPATCHERS="(PROTOCOL=TCP)(SERVICE=<SID>XDB)" SPFILE: alter system set DISPATCHERS="(PROTOCOL=TCP)(SERVICE=<SID>XDB)" scope=both; RAC 环境: INIT.ORA: <instance id>.DISPATCHERS="(PROTOCOL=TCP) (SERVICE=<instance id>XDB)" SPFILE: alter system set DISPATCHERS="(PROTOCOL=TCP)(SERVICE=<DB_NAME>XDB)" scope=both sid='<SID#>'; 注意事项: 该参数需要被添加到RAC数据库的每一个实例中。例如,一个 RAC 数据库包含有三个实例,则必须要添加三行带有不同<instance id>或者<SID#> ,比如: INIT.ORA: ORCL1.DISPATCHERS="(PROTOCOL=TCP) (SERVICE=ORCL1XDB)" ORCL2.DISPATCHERS="(PROTOCOL=TCP) (SERVICE=ORCL2XDB)" ORCL3.DISPATCHERS="(PROTOCOL=TCP) (SERVICE=ORCL3XDB)" SPILE: alter system set DISPATCHERS="(PROTOCOL=TCP)(SERVICE=ORCLXDB)" scope=both sid='ORCL1'; alter system set DISPATCHERS="(PROTOCOL=TCP)(SERVICE=ORCLXDB)" scope=both sid='ORCL2'; alter system set DISPATCHERS="(PROTOCOL=TCP)(SERVICE=ORCLXDB)" scope=both sid='ORCL3'; LOCAL_LISTENER 当满足这些条件中的至少一个时,该参数是必需的: - 有不止一个监听器在服务器上运行
- 监听运行在1521以外的端口上
运行下面的 SQL * Plus 命令,以确定是否已经设置 LOCAL_LISTENER 参数: show parameter local_listener下面是改变参数文件中的该参数值的语法: INIT.ORA:LOCAL_LISTENER = "(ADDRESS=(PROTOCOL=TCP)(HOST=<hostname>)(port=<port>))" SPFILE: alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=<hostname>)(port=<port>))' scope=both; 其中<hostname>和<port>需要更改为实际值。 如果有不止一块网卡,或者当网络(DNS 等)的主机名有计划的更改时,hostname 应该被替换成实际的正确网卡的 TCP/IP 地址。 重启监听和数据库使得变更生效,或者在不启动的情况下,使用以下 sql 语句来注册数据库实例到监听上: alter system register; 验证 XDB DISPATCHERS 运行情况 配置完成后,是时候来验证监听运行情况了。执行以下 OS 命令: lsnrctl status <LISTENER> 其中,如果使用监听名不是'LISTENER',则<LISTENER>部分必须改成真实的监听名。否则,只需要执行: lsnrctl status 以下是一个输出的样本: Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=mypc.oracle.com)(PORT=1522))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=mypc.oracle.com)(PORT=8080))(Presentation=HTTP)(Session=RAW)) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=mypc.oracle.com)(PORT=2100))(Presentation=FTP)(Session=RAW)) Services Summary... Service "ORCL" has 1 instance(s). Instance "ORCL", status READY, has 1 handler(s) for this service... Service "ORCLXDB" has 1 instance(s). Instance "ORCL", status READY, has 1 handler(s) for this service... The command completed successfully 请注意,在 Endpoints Summary 中,应该有2个 endpoints,一个用于 FTP,另一个用于 HTTP。并且,它们每个端口必须是与 DBMS_XDB 包中配置的端口相一致,因为这些端口将被用于访问 XDB 仓库。
Services Summary 部分会显示一条 XDB dispatcher 的信息。通过 SERVICE 参数传给 DISPATCHERS 的参数值所提供的名字来进行标示。 测试连接 HTTP 对于 HTTP 协议,打开一个浏览器并输入以下 URL http://<host>:<http port> 例如 http://mypc.oracle.com:8080
当需要使用用户名和密码时,使用数据库的用户和对应的密码,例如 xdb 或者 system,与通过 SQL*Plus 连接一样。如果 http 协议设置正确,XDB 仓库的 (root) 资源列表将被显示出来,例如
Index of / Name | Last modified | Size | OLAP_XDS/ | Sat, 30 Oct 2011 13:23:59 GMT | - | home/ | Sat, 30 Oct 2011 13:22:20 GMT | - | images/ | Sat, 30 Oct 2011 13:56:17 GMT | - | olap_data_security/ | Sat, 30 Oct 2011 13:23:59 GMT | - | public/ | Sat, 30 Oct 2011 13:16:12 GMT | - | sys/ | Sat, 30 Oct 2011 13:17:21 GMT | - | xdbconfig.xml | Mon, 25 Jun 2013 15:45:48 GMT | 0 | xds/ | Sat, 30 Oct 2011 13:23:59 GMT | - |
FTP 对于 FTP 协议,使用 FTP 客户端并使用之前设定的 FTP 端口号连接到服务器端,例如 X:\app\product\11.2.0.3\dbhome_1\BIN>ftp ftp> open mypc.oracle.com 2100 Connected to mypc.oracle.com. 220- mypc Unauthorised use of this FTP server is prohibited and may be subject to civil and criminal prosecution. 220 szireddu-it FTP Server (Oracle XML DB/Oracle Database) ready. User (mypc.oracle.com:(none)): system 331 pass required for SYSTEM Password: 230 SYSTEM logged in ftp> ls 200 PORT Command successful 150 ASCII Data Connection OLAP_XDS home images olap_data_security public sys xdbconfig.xml xds 226 ASCII Transfer Complete ftp: 77 bytes received in 0.00Seconds 77000.00Kbytes/sec.
请注意:对于 Oracle 数据库 12c,username 必须使用大写字母。 更多信息/参考文献 : - Document 1083991.1 Master Note for Oracle XML DB Protocols: FTP HTTP HTTPS WebDAV, APEX and Native Database Web Services
可以在XML Database社区版块提问和加入讨论。My Oracle Support的社区提供了一个协作的环境,在那里你可以获取最���的产品和支持信息,了解最佳实践,参与与同行和Oracle专家广泛网络间的讨论和知识交流。 |