Skip Headers
Oracle® XML DB Developer's Guide
10g Release 2 (10.2)

Part Number B14259-02
Go to Documentation Home
Home
Go to Book List
Book List
Go to Table of Contents
Contents
Go to Index
Index
Go to Master Index
Master Index
Go to Feedback page
Contact Us

Go to previous page
Previous
Go to next page
Next
View PDF

28 Administering Oracle XML DB

This chapter describes how to administer Oracle XML DB. It includes information on installing, upgrading, and configuring Oracle XML DB.

This chapter contains these topics:

Installing and Reinstalling Oracle XML DB

You are required to install Oracle XML DB manually under the following conditions:

Installing or Reinstalling Oracle XML DB From Scratch

You can perform a new installation of Oracle XML DB with or without Database Configuration Assistant (DBCA). If Oracle XML DB is already installed, complete the steps in "Reinstalling Oracle XML DB".

Installing a New Oracle XML DB With Database Configuration Assistant

Oracle XML DB is part of the seed database and installed by Database Configuration Assistant (DBCA) by default. No additional steps are required to install Oracle XML DB. However, if you select the Advanced database configuration, then you can configure Oracle XML DB tablespace and FTP, HTTP(S), and WebDAV port numbers.

By default, DBCA performs the following tasks during installation:

  • Creates an Oracle XML DB tablespace for Oracle XML DB Repository

  • Enables all protocol access

  • Configures FTP at port 2100

  • Configures HTTP/WebDAV at port 8080

The Oracle XML DB tablespace holds the data stored in Oracle XML DB Repository, including data stored using:

  • SQL, for example using RESOURCE_VIEW and PATH_VIEW

  • Protocols such as FTP, HTTP(S), and WebDAV

You can store data in tables outside this tablespace and access the data through Oracle XML DB Repository by having REFs to that data stored in the tables in this tablespace.

Caution:

The Oracle XML DB tablespace should not be dropped. If dropped, then it renders all Oracle XML DB Repository data inaccessible.

See Also:

"Anonymous Access to Oracle XML DB Repository using HTTP" for information on allowing unauthenticated access to the repository

Dynamic Protocol Registration of FTP and HTTP(S) Services with Local Listener

Oracle XML DB installation, includes a dynamic protocol registration that registers FTP and HTTP(S) services with the local Listener. You can perform start, stop, and query with lsnrctl. For example:

  • start: lsnrctl start

  • stop: lsnrctl stop

  • query: lsnrctl status

Changing FTP or HTTP(S) Port Numbers

To change FTP and HTTP(S) port numbers, update the tags <ftp-port>, <http-port>, and <http2-port> in file /xdbconfig.xml in the Oracle XML DB Repository.

After updating the port numbers, dynamic protocol registration automatically stops FTP/HTTP(S) service on old port numbers and starts them on new port numbers if the local Listener is up. If local Listener is not up, restart the Listener after updating the port numbers.

See Also:

Chapter 25, "FTP, HTTP(S), and WebDAV Access to Repository Data" for information on configuring protocols
Postinstallation

As explained in the previous section, Oracle XML DB uses dynamic protocol registration to setup FTP and HTTP Listener services with the local Listener. So, make certain that the Listener is up when accessing Oracle XML DB protocols.

Note:

If the Listener is running on a port that is not standard (for example, not 1521), then, in order for the protocols to register with the correct listener, the init.ora file must contain a local_listener entry. This references a TNSNAME entry that points to the correct Listener. After editing the init.ora parameter you must regenerate the SPFILE entry using CREATE SPFILE.

Installing Oracle XML DB Manually Without DBCA

After the database installation, you must run the following SQL scripts in rdbms/admin connecting to SYS to install Oracle XML DB after creating a new tablespace for Oracle XML DB Repository. Here is the syntax for this:

catqm.sql <XDB_password> <XDB_TS_NAME> <TEMP_TS_NAME>
#Create the tables and views needed to run Oracle XML DB

For example:

catqm.sql change_on_install XDB TEMP

Reconnect to SYS again and run the following:

catxdbj.sql          #Load xdb java library

Note:

Make sure that the database is started with Oracle9i release 2 (9.2.0) compatibility or higher, and Java Virtual Machine (JVM) is installed.

Postinstallation

After the manual installation, carry out these tasks:

  1. Add the following dispatcher entry to the init.ora file:

    dispatchers="(PROTOCOL=TCP) (SERVICE=<sid>XDB)"
    
    
  2. Restart the database and listener to enable Oracle XML DB protocol access.

See Also:

"Anonymous Access to Oracle XML DB Repository using HTTP" for information on allowing unauthenticated access to the repository

Reinstalling Oracle XML DB

Caution:

All user data stored in Oracle XML DB Repository is lost if you drop user XDB.

To reinstall Oracle XML DB follow these steps:

  1. Remove the dispatcher by removing the Oracle XML DB dispatcher entry from the init.ora file as follows:

    dispatchers="(PROTOCOL=TCP) (SERVICE=<sid>XDB)"
    
    

    If the server parameter file is used, run the following command when the instance is up and while logged in as SYS:

    ALTER SYSTEM RESET dispatchers scope=spfile sid='*';
    
    
  2. Drop user XDB and tablespace XDB by connecting to SYS and running the following SQL script:

    @?/rdbms/admin/catnoqm.sql
    ALTER TABLESPACE <XDB_TS_NAME> offline;
    DROP TABLESPACE <XDB_TS_NAME> including contents;
    
    
  3. Re-create tablespace XDB.

  4. Execute catnoqm.sql.

  5. Shut down, then restart the database instance.

  6. Execute catqm.sql.

  7. Execute catxdbj.sql.

  8. Install Oracle XML DB manually as described in "Installing Oracle XML DB Manually Without DBCA".

Upgrading an Existing Oracle XML DB Installation

The following considerations apply to all upgrades to Oracle Database 10g:

See Also:

Upgrading Oracle XML DB from Release 9.2 to Release 10g

All Oracle XML DB upgrade tasks are handled automatically when you use Database Upgrade Assistant to upgrade your database from any version of Oracle9i release 2 to Oracle Database 10g.

Note:

In Oracle Database 10g, configuration of Oracle XML DB is validated against the configuration XML schema, http://xmlns.oracle.com/xdb/xdbconfig.xsd. Existing, invalid configuration documents must be validated before upgrading to release 10g.

See Also:

Oracle Database Upgrade Guide for details about using Database Upgrade Assistant

Privileges for Nested XMLType Tables When Upgrading to Oracle Database 10g

In Oracle9i release 2 (9.2), when you granted privileges on an XMLType table, they were not propagated to nested tables deeper than one level. In Oracle Database 10g, these privileges are propagated to all levels of nested tables.

When you upgrade from Oracle9i release 2 (9.2) to Oracle Database 10g with these nested tables, the corresponding nested tables (in Oracle Database 10g) will not have the right privileges propagated and users will not be able to access data from these tables. A typical error encountered is, ORA-00942:table or view not found. The workaround is to reexecute the original GRANT statement in Oracle Database 10g. This ensures that all privileges are propagated correctly.

Upgrading an Existing LCR XML Schema

This section applies only to the upgrade of an existing Oracle9i release 2 (9.2) database with Oracle XML DB where the LCR XML schema has been loaded. It applies if you upgrade directly from 9.2 to Oracle Database 10g (either 10.1 or 10.2). It does not apply if you have previously upgraded from 9.2 to 10.1 and are now upgrading from 10.1 to 10.2.

Use this query to check if your 9.2 database has the LCR XML schema loaded:

SELECT count(*) FROM XDB.XDB$SCHEMA s
  WHERE s.xmldata.schema_url =
        'http://xmlns.oracle.com/streams/schemas/lcr/streamslcr.xsd';

If this query returns 0, the existing LCR XML schema is not registered, and you can skip the rest of this section.

As part of the upgrade process, an existing LCR XML schema is dropped (through a call to PL/SQL procedure DBMS_XMLSCHEMA.deleteSchema), and the new version of the LCR XML schema is registered. The call to deleteSchema fails if the LCR XML schema has any dependent objects. These objects could be XMLType XML schema-based tables, columns, or other XML schemas that reference the LCR XML schema.

If the deleteSchema call succeeds and the new XML schema is registered, no further action is required to upgrade the XML LCR schema. You can determine whether or not the new schema was successfully registered by running this query:

SELECT count(*)
  FROM XDB.XDB$ELEMENT e, XDB.XDB$SCHEMA s
  WHERE s.xmldata.schema_url =
        'http://xmlns.oracle.com/streams/schemas/lcr/streamslcr.xsd'
    AND ref(s) = e.xmldata.property.parent_schema
    AND e.xmldata.property.name = 'extra_attribute_values';

If this query returns 1, then no further action is required: the database has the most current version of the LCR XML schema. You can skip the rest of this section.

If the query returns 0, then the LCR XML schema upgrade failed because of objects that depend on the schema. You need to upgrade the LCR XML schema and its dependent objects using the copyEvolve procedure available in the Oracle Database 10g version of Oracle XML DB, as follows:

  1. Set event 22830 to level 8 your Oracle Database 10g database session.

  2. Call PL/SQL procedure DBMS_XMLSCHEMA.copyEvolve. See Chapter 8, "XML Schema Evolution" for details.

Using Oracle Enterprise Manager to Administer Oracle XML DB

Oracle Enterprise Manager is a graphical tool supplied with Oracle Database that lets you perform database administration tasks easily. You can use it to perform the following tasks related to Oracle XML DB:

See Also:

The online help available with Oracle Enterprise Manager, for information on using Enterprise Manager to perform these tasks

Configuring Oracle XML DB Using xdbconfig.xml

Oracle XML DB is managed internally through a configuration file, /xdbconfig.xml, which is stored as a resource in Oracle XML DB Repository. As an alternative to using Oracle Enterprise Manager to configure Oracle XML DB, you can configure it directly using the Oracle XML DB configuration file.

The configuration file can be modified at runtime. Simply updating the configuration file creates a new version of this repository resource. At the start of each session, the current version of the configuration file is bound to that session. The session uses this configuration-file version for its duration, unless you make an explicit call to refresh the session to the latest version.

Oracle XML DB Configuration File, xdbconfig.xml

The configuration of Oracle XML DB is defined and stored in an Oracle XML DB Repository resource, /xdbconfig.xml, which conforms to the Oracle XML DB configuration XML schema: http://xmlns.oracle.com/xdb/xdbconfig.xsd. To configure or reconfigure Oracle XML DB, update file /xdbconfig.xml. Its structure is described in the following sections.

See Also:

"xdbconfig.xsd: XML Schema for Configuring Oracle XML DB" for a complete listing of the Oracle XML DB configuration XML schema

<xdbconfig> (Top-Level Element)

Element <xdbconfig> is the top-level element. Its structure is as follows:

<xdbconfig> 
    <sysconfig> ... </sysconfig> 
    <userconfig> ... </userconfig> 
</xdbconfig>

Element <sysconfig> defines system-specific, built-in parameters. Element <userconfig> allows users to store new custom parameters.

<sysconfig> (Child of <xdbconfig>)

Element <sysconfig> is a child of <xdbconfig>. Its structure is as follows:

<sysconfig> 
    general parameters
    <protocolconfig> ... </protocolconfig> 
</sysconfig> 

Element <sysconfig> includes as content several general parameters that apply to all of Oracle XML DB, such as the maximum age of an access control list (ACL) and whether or not Oracle XML DB is case sensitive. Child <protocolconfig> contains protocol-specific parameters.

<userconfig> (Child of <xdbconfig>)

Element <userconfig> is a child of <xdbconfig>. It contains any parameters that you may want to add.

<protocolconfig> (Child of <sysconfig>)

Element <protocolconfig> is a child of <sysconfig>. Its structure is as follows:

<protocolconfig> 
  <common> ... </common> 
  <ftpconfig> ... </ftpconfig> 
  <httpconfig> ... </httpconfig> </protocolconfig> 

Under <common>, Oracle Database stores parameters that apply to all protocols, such as MIME-type information. Parameters that are specific to protocols FTP and HTTP(S) are in elements <ftpconfig> and <httpconfig>, respectively.

See Also:

Chapter 25, "FTP, HTTP(S), and WebDAV Access to Repository Data", Table 25-1, Table 25-2, and Table 25-3, for a list of protocol configuration parameters

<httpconfig> (Child of <protocolconfig>)

Element <httpconfig> is a child of <protocolconfig>. Its structure is as follows:

<httpconfig>
  ...
  <webappconfig>
    ...
    <servletconfig>
      ...
      <servlet-list>
        <servlet> ... </servlet>
        ...
      </servlet-list>
    </servletconfig>
  </webappconfig>
  ...
  <plsql> ... </plsql>
</httpconfig>

Element <httpconfig> has the following child elements, in addition to others:

  • <webappconfig> – used to configure Web-based applications. This includes Web application-specific parameters, such as icon name, display name for the application, and a list of servlets.

    Element <servletconfig> is a child of <webappconfig> that is used to define servlets. It has child <servlet-list>, which has child <servlet> (see "<servlet> (Descendent of <httpconfig>)").

  • <plsql> – used in connection with Oracle HTML DB. This element is managed by PL/SQL package DBMS_EPG and must not be changed by hand.

See Also:

%%% For 11g: Use conditionalized text (condition X) hidden now %%%

<servlet> (Descendent of <httpconfig>)

Element <servlet> is a descendent of <httpconfig> – see "<httpconfig> (Child of <protocolconfig>)". It is used to configure servlets, including Java servlets.

An optional <plsql> element, child of <servlet>, is used in connection with Oracle HTML DB. It is managed by PL/SQL package DBMS_EPG and must not be changed by hand.

See Also:

%%% For 11g: Use conditionalized text (condition X) hidden now %%%

Oracle XML DB Configuration File Example

The following is a sample Oracle XML DB configuration file:

Example 28-1 Oracle XML DB Configuration File

<xdbconfig xmlns="http://xmlns.oracle.com/xdb/xdbconfig.xsd" 
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                 xsi:schemaLocation="http://xmlns.oracle.com/xdb/xdbconfig.xsd 
                                    http://xmlns.oracle.com/xdb/xdbconfig.xsd">
   <sysconfig>
      <acl-max-age>900</acl-max-age>
      <acl-cache-size>32</acl-cache-size> 
      <invalid-pathname-chars>,</invalid-pathname-chars>
      <case-sensitive>true</case-sensitive>       
      <call-timeout>300</call-timeout>
      <max-link-queue>65536</max-link-queue> 
      <max-session-use>100</max-session-use>
      <persistent-sessions>false</persistent-sessions> 
      <default-lock-timeout>3600</default-lock-timeout>
      <xdbcore-logfile-path>/sys/log/xdblog.xml</xdbcore-logfile-path>
      <xdbcore-log-level>0</xdbcore-log-level>
      <resource-view-cache-size>1048576</resource-view-cache-size> 
    
      <protocolconfig> 
          <common>
             <extension-mappings>
                <mime-mappings>
                  <mime-mapping>
                    <extension>au</extension>
                    <mime-type>audio/basic</mime-type>
                  </mime-mapping>
                  <mime-mapping>
                    <extension>avi</extension>
                    <mime-type>video/x-msvideo</mime-type>
                  </mime-mapping>
                  <mime-mapping>
                    <extension>bin</extension>
                    <mime-type>application/octet-stream</mime-type>
                  </mime-mapping>
                </mime-mappings> 

                <lang-mappings>
                  <lang-mapping>
                    <extension>en</extension>
                    <lang>english</lang>
                  </lang-mapping>
                </lang-mappings>

                <charset-mappings>
                </charset-mappings>

                <encoding-mappings>
                  <encoding-mapping>
                    <extension>gzip</extension>
                    <encoding>zip file</encoding>      
                  </encoding-mapping>
                  <encoding-mapping>
                    <extension>tar</extension>
                    <encoding>tar file</encoding>        
                  </encoding-mapping>
                </encoding-mappings>
             </extension-mappings>

             <session-pool-size>50</session-pool-size>
             <session-timeout>6000</session-timeout>
          </common>

          <ftpconfig>
            <ftp-port>2100</ftp-port>
            <ftp-listener>local_listener</ftp-listener>
            <ftp-protocol>tcp</ftp-protocol>
            <logfile-path>/sys/log/ftplog.xml</logfile-path>
            <log-level>0</log-level>
            <session-timeout>6000</session-timeout>
            <buffer-size>8192</buffer-size> 
          </ftpconfig>

          <httpconfig>
            <http-port>8080</http-port>
            <http-listener>local_listener</http-listener>
            <http-protocol>tcp</http-protocol>
            <max-http-headers>64</max-http-headers> 
            <session-timeout>6000</session-timeout>
            <server-name>XDB HTTP Server</server-name>
            <max-header-size>16384</max-header-size>
            <max-request-body>2000000000</max-request-body>
            <logfile-path>/sys/log/httplog.xml</logfile-path>
            <log-level>0</log-level>    
            <servlet-realm>Basic realm="XDB"</servlet-realm>
            <webappconfig>
              <welcome-file-list>
                <welcome-file>index.html</welcome-file>
                <welcome-file>index.htm</welcome-file>
              </welcome-file-list>
              <error-pages>
              </error-pages>
              <servletconfig> 
                <servlet-mappings>
                  <servlet-mapping>
                    <servlet-pattern>/oradb/*</servlet-pattern>
                    <servlet-name>DBURIServlet</servlet-name>
                  </servlet-mapping>
                </servlet-mappings>
                               
                <servlet-list>
                  <servlet>
                    <servlet-name>DBURIServlet</servlet-name>
                    <display-name>DBURI</display-name>
                    <servlet-language>C</servlet-language>
                    <description>Servlet for accessing DBURIs</description>
                    <security-role-ref>
                      <role-name>authenticatedUser</role-name>
                      <role-link>authenticatedUser</role-link>
                    </security-role-ref>
                  </servlet>
                </servlet-list>
              </servletconfig>
            </webappconfig>
          </httpconfig> 
      </protocolconfig>
    <xdbcore-xobmem-bound>1024</xdbcore-xobmem-bound> 
    <xdbcore-loadableunit-size>16</xdbcore-loadableunit-size> 
   </sysconfig>

</xdbconfig>

Oracle XML DB Configuration API

You can access the Oracle XML DB configuration file, xdbconfig.xml, the same way you access any other XML schema-based resource in the hierarchy. It can be accessed using FTP, HTTP(S), WebDAV, Oracle Enterprise Manager, or any of the resource and Document Object Model (DOM) APIs for Java, PL/SQL, or C (OCI).

For convenience, there is a PL/SQL API provided as part of the DBMS_XDB package for configuration access. It exposes the following functions:

  • cfg_get – Returns the configuration information for the current session.

  • cfg_refresh – Refreshes the session configuration information using the current configuration file. Typical uses of cfg_refresh include the following:

    • You have modified the configuration and now want the session to pick up the latest version of the configuration information.

    • It has been a long running session, the configuration has been modified by a concurrent session, and you want the current session to pick up the latest version of the configuration information.

  • cfg_update – Updates the configuration information, writing the configuration file. A COMMIT is performed.

Example 28-2 Updating the Configuration File Using cfg_update() and cfg_get()

This example updates parameters ftp-port and http-port in the configuration file.

DECLARE
  v_cfg XMLType;
BEGIN
  SELECT updateXML(DBMS_XDB.cfg_get(), 
                   '/xdbconfig/descendant::ftp-port/text()',
                   '2121', 
                   '/xdbconfig/descendant::http-port/text()', 
                   '19090')
    INTO v_cfg FROM DUAL;
  DBMS_XDB.cfg_update(v_cfg);
  COMMIT; 
END;
/ 

If you have many parameters to update, then it can be easier to use FTP, HTTP(S), or Oracle Enterprise Manager to update the configuration, rather than cfg_update.

Configuring Default Namespace to Schema Location Mappings

Oracle XML DB identifies schema-based XMLType instances by pre-parsing the input XML document. If the appropriate xsi:schemaLocation or xsi:noNamespaceSchemaLocation attribute is found, the specified schema location URL is used to lookup the registered schema. If the appropriate xsi: attribute is not found, the XML document is considered to be non-schema-based.Oracle XML DB provides a mechanism to configure default schema location mappings. If the appropriate xsi: attribute is not specified in the XML document, the default schema location mappings will be used. Element schemaLocation-mappings of the Oracle XML DB configuration XML schema, xdbconfig.xsd, can be used to specify the mapping between (namespace, element) pairs and the default schema location. If the element value is empty, the mapping applies to all global elements in the specified namespace. If the namespace value is empty, it corresponds to the null namespace.

The definition of the schemaLocation-mappings element is as follows:

<element name="schemaLocation-mappings"
          type="xdbc:schemaLocation-mapping-type" minOccurs="0"/> 
 <complexType name="schemaLocation-mapping-type"><sequence>
      <element name="schemaLocation-mapping"
               minOccurs="0" maxOccurs="unbounded">
      <complexType><sequence>
        <element name="namespace" type="string"/>
        <element name="element" type="string"/>
        <element name="schemaURL" type="string"/>
      </sequence></complexType>
      </element></sequence> 
 </complexType> 

The schema location used depends on mappings in the Oracle XML DB configuration file for the namespace used and the root document element. For example, assume that the document does not have the appropriate xsi: attribute to indicate the schema location. Consider a document root element R in namespace N. The algorithm for identifying the default schema location is as follows:

  1. If the Oracle XML DB configuration file has a mapping for N and R, the corresponding schema location is used.

  2. If the configuration file has a mapping for N, but not R, the schema location for N is used.

  3. If the document root R does not have any namespace, the schema location for R is used.

For example, suppose that your Oracle XML DB configuration file includes the following mapping:

<schemaLocation-mappings>
         <schemaLocation-mapping>
            <namespace>http://www.oracle.com/example</namespace>
            <element>root</element>
            <schemaURL>http://www.oracle.com/example/sch.xsd</schemaURL>
         </schemaLocation-mapping>
         <schemaLocation-mapping>
            <namespace>http://www.oracle.com/example2</namespace>
            <element></element>
            <schemaURL>http://www.oracle.com/example2/sch.xsd</schemaURL>
         </schemaLocation-mapping>
         <schemaLocation-mapping>
           <namespace></namespace>
           <element>specialRoot</element>
           <schemaURL>http://www.oracle.com/example3/sch.xsd</schemaURL>
         </schemaLocation-mapping>
      </schemaLocation-mappings>
 

The following schema locations are used:

  • Namespace = http://www.oracle.com/exampleRoot Element = rootSchema URL = http://www.oracle.com/example/sch.xsd

    This mapping is used when the instance document specifies:

    <root xmlns="http://www.oracle.com/example">
    
    
  • Namespace = http://www.oracle.com/example2Root Element = null (any global element in the namespace) Schema URL = http://www.oracle.com/example2/sch.xsd

    This mapping is used when the instance document specifies:

    <root xmlns="http://www.oracle.example2">
    
    
  • Namespace = null (i.e null namespace) Root Element = specialRootSchema URL = http://www.oracle.com/example3/sch.xsd

    This mapping is used when the instance document specifies:

    <specialRoot>
    

Note:

This functionality is available only on the server side, that is, when XML is parsed on the server. If XML is parsed on the client side, the appropriate xsi: attribute is still required.

Configuring XML File Extensions

Oracle XML DB Repository treats certain files as XML documents, based on their file extensions. When such files are inserted into the repository, Oracle XML DB pre-parses them to identify the schema location (or uses the default mapping if present) and inserts the document into the appropriate default table. By default, the following extensions are considered as XML file extensions: xml, xsd, xsl, xlt. In addition, Oracle XML DB provides a mechanism for applications to specify other file extensions as XML file extensions. The xml-extensions element is defined in the configuration schema, http://xmlns.oracle.com/xdb/xdbconfig.xsd, as follows:

<element name="xml-extensions"
          type="xdbc:xml-extension-type" minOccurs="0"/> 
 
 <complexType name="xml-extension-type"><sequence>
      <element name="extension" type="xdbc:exttype"
               minOccurs="0" maxOccurs="unbounded">
      </element></sequence> 
  </complexType> 

For example, the following fragment from the Oracle XML DB configuration file, xdbconfig.xml, specifies that files with extensions vsd, vml, and svgl should be treated as XML files:

<xml-extensions>
   <extension>vsd</extension>
   <extension>vml</extension>
   <extension>svgl</extension>
 </xml-extensions>