6 Migrate Clustered WebCenter Content 12c to New Hosts on an Identical Infrastructure

If you would like to move clusters of WebCenter Content Release 12c to an infrastructure where Operating System and directory structure of WebCenter Content will remain the same as those on the existing infrastructure, then the topics that follow will guide you in accomplishing your goal.

6.1 Things to Consider Before Migrating Clustered WebCenter Content Release 12c

Things to Consider Before Migrating Your WebCenter Content Release 12c

  • The chghost utility does not move binary data or data in a database.
  • The chghost utility does not support environments where SSL only is configured. SSL-only means that either the administration port is enabled or only the SSL port is enabled.
  • The same version of the JDK is installed on the same path on both the old (source) host and the new (target) host.
  • You cannot change the topology, that is, you can't add, remove, or modify managed server, the WebLogic Server domain name, port number, and so on.
  • The paths of both, the source and target instances must be the same. You cannot change them.
  • You move Oracle Fusion Middleware to only the same type of operating system.
  • In a multinode environment, you can move or change the network configuration of each node separately. For example, if the administration server is on Host A and the managed servers are on Host B, you can move or change the network configuration of the administration servers, the managed servers, or both.
  • The versions of Fusion Middleware Infrastructure (WebLogic Server) and WebCenter Content must match between the old host and the new host. Using these instructions, you cannot upgrade to a newer version at the same time you migrate to new hosts.
  • If you are moving the database from one host to another, the database type must remain the same. For example, you cannot change the database type from an Oracle Database to a SQL Server database.
  • For information on migrating Fusion Middleware applications such as BPM, Portal, installed on the same WebLogic domain that you're planning to move, see Moving Oracle Fusion Middleware to a New Host in Administering Oracle Fusion Middleware.

6.2 Migrate Clustered WebCenter Content Release 12c to a New Host

This topic demonstrates through a sample scenario how you can move WebCenter Content release 12c clusters to a new host without using Archiver and ConfigMigrationUtility.

Perform these steps to move WebCenter Content, Refinery, and WebCenter Content user interface to a new host in conjunction with the steps in Moving Oracle Fusion Middleware to a New Host in Administering Oracle Fusion Middleware.
Tasks to Perform Before Migration:
  • Stop all managed servers, the admin server, and the node manager.
  • Back up WebCenter Content's file system.
  • Back up WebCenter Content's database.
  • If JTA Transaction Log Persistence is set to Default Persistent Store, back that up.
  • If JMS Server Persistence is set to JMS File Store, back that up.
  • Download and install a JDK with an appropriate version and platform on the new host.
  • Download installation media for Fusion Middleware Infrastructure and WebCenter Content on the new host.
  • Install Fusion Middleware Infrastructure and WebCenter Content to the same directories on the new host as they exist on the old host or use copyBinary.sh and pasteBinary.sh to clone them from the old system.
  • Install any patches that were installed on the old host to the ORACLE_HOME on the new host. Skip this step if you processed copyBinary.sh and pasteBinary.sh are run to clone the ORACLE_HOME to the new host.
  • If WebCenter Content’s vault and weblayout are on a remote or shared disk, ensure that the file share is mounted on the new host with the same path as on the old host. Also make sure that the appropriate permissions have been granted to the user for accessing the file share.

To migrate clusters of WebCenter Content, Inbound Refinery, WebCenter Content user interface, and Oracle HTTP Server:

  1. Create an input file with the following code on the new host at a location such as /tmp/myinputfile.txt. You'll need this during migration.
    [ARGUMENTS]
    [SERVER_HOST_MAPPING]
    #pattern source_host_name=target_host_name
    sourcenode1.domain.com=targetnode1.domain.com
    sourcenode2.domain.com=targetnode2.domain.com
  2. On each of the new hosts, create a wallet directory and wallet:
    1. mkdir /tmp/mywalletdir
    2. ORACLE_HOME/oracle_common/common/bin/configWallet.sh -walletDir /tmp/mywalletdir weblogic
    3. Provide the password for the weblogic user when prompted
  3. Create the ORACLE_HOME/user_projects/domains directory on the new hosts.
  4. Create the ORACLE_HOME/user_projects/applications directory on the new hosts.
  5. If you relocated the search directory or the archives directory, create them on the new hosts and make sure that they are accessible.
  6. For each node, run rsync for the domain:

    Run from sourcenode1:

    rsync -avzh ORACLE_HOME/user_projects/domains/DOMAINNAME
          USER@targetnode1.domain.com:/ORACLE_HOME/user_projects/domains

    Run from sourcenode2:

    rsync -avzh ORACLE_HOME/user_projects/domains/DOMAINNAME
          USER@targetnode2.domain.com:/ORACLE_HOME/user_projects/domains
  7. For each node, run rsync for the application:

    Run from sourcenode1:

    rsync -avzh ORACLE_HOME/user_projects/applications/DOMAINNAME
          USER@targetnode1.domain.com:/ORACLE_HOME/user_projects/applications

    Run from sourcenode2:

    rsync -avzh ORACLE_HOME/user_projects/applications/DOMAINNAME
          USER@targetnode2.domain.com:/ORACLE_HOME/user_projects/applications
  8. To make sure chghost.sh runs correctly, first set an environment variable on targetnode1.domain.com:
    export CHGHOST_JAVA_OPTIONS="-Dchghost.ignore.validation.port=true
          -Dchghost.temporary.port.range=18000-20000"

    If you skip this step, you would encounter messages such as the ones below and chghost.sh will fail.

    INFO: Checking if ports are unique across all server or not ...
    Oct 31, 2019 9:52:58 AM oracle.glcm.fmw.chghost.framework.input.ChghostInputValidation
          isValidServerPortsSEVERE:
    [CHGHOST-20218-ERROR] Server ports validation failed.
    [CHGHOST-20218-CAUSE] The port 16225 was used for multiple servers.
    [CHGHOST-20218-ACTION] Provide different free ports for servers.
    Oct 31, 2019 9:52:58 AM oracle.glcm.fmw.chghost.framework.input.ChghostInputValidation
          isValidServerPortsSEVERE:
    [CHGHOST-20218-ERROR] Server ports validation failed.
    [CHGHOST-20218-CAUSE] The port 16250 was used for multiple servers.
    [CHGHOST-20218-ACTION] Provide different free ports for servers.
    Oct 31, 2019 9:52:58 AM oracle.glcm.fmw.chghost.framework.input.ChghostInputValidation
          isValidServerPortsSEVERE:
    [CHGHOST-20218-ERROR] Server ports validation failed.
    [CHGHOST-20218-CAUSE] The port 16200 was used for multiple servers.
    [CHGHOST-20218-ACTION] Provide different free ports for servers.
    Oct 31, 2019 9:52:58 AM oracle.glcm.fmw.chghost.framework.execute.ChangeHostExecute
          executeINFO: Server port validation falied
  9. Run chghost.sh on targetnode1.domain.com. The following sample code should be run as a single command. Here it's split into multiple lines for clarity.
    ORACLE_HOME/oracle_common/bin/chghost.sh
    -chgHostInputFile /refresh/ucmshare/myinputfile.txt
    -javaHome JDK_INSTALL_LOCATION
    -domainLoc ORACLE_HOME/user_projects/domains/DOMAINNAME
    -domainAdminUserName weblogic
    -walletDir /refresh/home/mywalletdir
    -logDir /tmp
  10. On targetnode1.domain.com, recreate the boot.properties files in the DOMAINHOME/servers/SERVERNAME/security directories if desired for the admin server and any managed servers. They are no longer available after chghost.sh is run.
  11. To make sure chghost.sh runs correctly, first set an environment variable on targetnode2.domain.com:
    export CHGHOST_JAVA_OPTIONS="-Dchghost.ignore.validation.port=true
          -Dchghost.temporary.port.range=18000-20000"
  12. Edit the following .xml files to prevent occurences of java.lang.NullPointerExceptions on targetnode2.domain.com at the time of running the chghost.sh script.
    1. MW_HOME/oracle_common/plugins/chghost/libovd_chghost_metadata.xml:

      Before:

      <chghost-metadata component-id="LIBOVD">
           <file-list>    
                <file-entry location="%DOMAIN_HOME%/config/fmwconfig/ovd/*/adapters.os_xml">        
                      <replace-pattern-ref ref="hostReplacePattern"/>      
                </file-entry>
           </file-list>
                 <replace-pattern-list>    
                      <replace-pattern id="hostReplacePattern" regex=".*host.*"/>
                 </replace-pattern-list>
      </chghost-metadata>

      After:

      <chghost-metadata component-id="LIBOVD">
            <file-list>    
                 <file-entry location="%DOMAIN_HOME%/config/fmwconfig/ovd/*/adapters.os_xml" update-in-managed-mode="false">        
                     <replace-pattern-ref ref="hostReplacePattern"/>       
                 </file-entry>
            </file-list>
            <replace-pattern-list>    
                    <replace-pattern id="hostReplacePattern" regex=".*host.*"/>
            </replace-pattern-list>
      </chghost-metadata>
    2. MW_HOME/oracle_common/plugins/chghost/opss_chghost_metadata.xml:

      Before:

      <?xml version="1.0"?>
      <chghost-metadata component-id="OPSS">
      <file-list>
      <file-entry location="%DOMAIN_HOME%/config/fmwconfig/jps-config.xml">
                 <replace-host-type>DATABASE_MAPPING</replace-host-type>
                 <replace-host-type>LDAP_MAPPING</replace-host-type>
      </file-entry>
      
      <file-entry location="%DOMAIN_HOME%/config/fmwconfig/jps-config-jse.xml">
                <replace-host-type>DATABASE_MAPPING</replace-host-type>
                <replace-host-type>LDAP_MAPPING</replace-host-type>
      </file-entry>
      
      </file-list>
      </chghost-metadata>

      After:

      <?xml version="1.0"?>
      <chghost-metadata component-id="OPSS">
      <file-list>
      <file-entry location="%DOMAIN_HOME%/config/fmwconfig/jps-config.xml" update-in-managed-mode="false">
                 <replace-host-type>DATABASE_MAPPING</replace-host-type>
                 <replace-host-type>LDAP_MAPPING</replace-host-type>
      </file-entry>
      
      <file-entry location="%DOMAIN_HOME%/config/fmwconfig/jps-config-jse.xml" update-in-managed-mode="false">
                <replace-host-type>DATABASE_MAPPING</replace-host-type>
                <replace-host-type>LDAP_MAPPING</replace-host-type>
      </file-entry>
      
      </file-list>
      </chghost-metadata>
    1. MW_HOME/ohs/plugins/chghost/ohs_chghost_metadata.xml:

      Before:

      <?xml version="1.0"?>
      <chghost-metadata component-id="OHS">
      <file-list>
          <!-- All file-entry location are w.r.to DOMAIN_HOME -->
      <file-entry location="%DOMAIN_HOME%/config/fmwconfig/components/OHS/*/*/*.*">
      <replace-pattern-ref ref="id1"/>
      <replace-pattern-ref ref="id2"/>
      <replace-pattern-ref ref="id3"/>
      <replace-pattern-ref ref="id4"/>
      <replace-pattern-ref ref="id5"/>
      <replace-pattern-ref ref="id6"/>
      <replace-pattern-ref ref="id7"/>
      </file-entry>
      <file-entry location="%DOMAIN_HOME%/config/fmwconfig/components/OHS/*/*.*">
      <replace-pattern-ref ref="id1"/>
      <replace-pattern-ref ref="id2"/>
      <replace-pattern-ref ref="id3"/>
      <replace-pattern-ref ref="id4"/>
      <replace-pattern-ref ref="id5"/>
      <replace-pattern-ref ref="id6"/>
      <replace-pattern-ref ref="id7"/>
      </file-entry>
      </file-list>
      <replace-pattern-list>
      <replace-pattern id="id1" regex=".*Listen.*"/>
      <replace-pattern id="id2" regex=".*VirtualHost.*"/>
      <replace-pattern id="id3" regex=".*ServerName.*"/>
      <replace-pattern id="id4" regex=".*WebLogicHost.*"/>
      <replace-pattern id="id5" regex=".*ServerAdmin.*"/>
      <replace-pattern id="id6" regex=".*WebLogicCluster.*"/>
      <replace-pattern id="id7" regex=".*Allow.*"/>
      </replace-pattern-list>
      </chghost-metadata>

      After:

      <?xml version="1.0"?>
      <chghost-metadata component-id="OHS">
      <file-list>
          <!-- All file-entry location are w.r.to DOMAIN_HOME -->
      <file-entry location="%DOMAIN_HOME%/config/fmwconfig/components/OHS/*/*/*.*" update-in-managed-mode="false">
      <replace-pattern-ref ref="id1"/>
      <replace-pattern-ref ref="id2"/>
      <replace-pattern-ref ref="id3"/>
      <replace-pattern-ref ref="id4"/>
      <replace-pattern-ref ref="id5"/>
      <replace-pattern-ref ref="id6"/>
      <replace-pattern-ref ref="id7"/>
      </file-entry>
      <file-entry location="%DOMAIN_HOME%/config/fmwconfig/components/OHS/*/*.*" update-in-managed-mode="false">
      <replace-pattern-ref ref="id1"/>
      <replace-pattern-ref ref="id2"/>
      <replace-pattern-ref ref="id3"/>
      <replace-pattern-ref ref="id4"/>
      <replace-pattern-ref ref="id5"/>
      <replace-pattern-ref ref="id6"/>
      <replace-pattern-ref ref="id7"/>
      </file-entry>
      </file-list>
      <replace-pattern-list>
      <replace-pattern id="id1" regex=".*Listen.*"/>
      <replace-pattern id="id2" regex=".*VirtualHost.*"/>
      <replace-pattern id="id3" regex=".*ServerName.*"/>
      <replace-pattern id="id4" regex=".*WebLogicHost.*"/>
      <replace-pattern id="id5" regex=".*ServerAdmin.*"/>
      <replace-pattern id="id6" regex=".*WebLogicCluster.*"/>
      <replace-pattern id="id7" regex=".*Allow.*"/>
      </replace-pattern-list>
      </chghost-metadata>

      If these changes are not made, errors similar to those below will occur, and you'll need to edit these XMLs and rerun the chghost.sh script:

      INFO: Invoking file fixing for chghost metadata registration file /refresh/home/Oracle/Middleware/Oracle_Home2/oracle_common/plugins/chghost/opss_chghost_metadata.xml
      java.lang.NullPointerException
          at oracle.glcm.fmw.chghost.framework.plugin.impl.chghost.ChghostMetadataPluginExecutorImpl.replaceInFile(ChghostMetadataPluginExecutorImpl.java:152)
          at oracle.glcm.fmw.chghost.framework.plugin.impl.chghost.ChghostMetadataPluginExecutorImpl.executeChghostPlugin(ChghostMetadataPluginExecutorImpl.java:142)
          at oracle.glcm.fmw.chghost.framework.plugin.impl.chghost.ChghostMetadataPluginExecutorImpl.executePlugin(ChghostMetadataPluginExecutorImpl.java:119)
          at oracle.glcm.fmw.chghost.framework.process.helper.PluginExecutionHelper.executePluginInfoObject(PluginExecutionHelper.java:140)
          at oracle.glcm.fmw.chghost.framework.process.PluginExecution.executeAllPlugins(PluginExecution.java:86)
          at oracle.glcm.fmw.chghost.framework.execute.ChangeHostExecute.execute(ChangeHostExecute.java:130)
          at oracle.glcm.fmw.chghost.Chghost.executeChghostCommand(Chghost.java:277)
          at oracle.glcm.fmw.chghost.Chghost.main(Chghost.java:301)
      INFO: Invoking file fixing for chghost metadata registration file /refresh/home/Oracle/Middleware/Oracle_Home2/ohs/plugins/chghost/ohs_chghost_metadata.xml
      java.lang.NullPointerException
          at oracle.glcm.fmw.chghost.framework.plugin.impl.chghost.ChghostMetadataPluginExecutorImpl.replaceInFile(ChghostMetadataPluginExecutorImpl.java:152)
          at oracle.glcm.fmw.chghost.framework.plugin.impl.chghost.ChghostMetadataPluginExecutorImpl.executeChghostPlugin(ChghostMetadataPluginExecutorImpl.java:142)
          at oracle.glcm.fmw.chghost.framework.plugin.impl.chghost.ChghostMetadataPluginExecutorImpl.executePlugin(ChghostMetadataPluginExecutorImpl.java:119)
          at oracle.glcm.fmw.chghost.framework.process.helper.PluginExecutionHelper.executePluginInfoObject(PluginExecutionHelper.java:140)
          at oracle.glcm.fmw.chghost.framework.process.PluginExecution.executeAllPlugins(PluginExecution.java:86)
          at oracle.glcm.fmw.chghost.framework.execute.ChangeHostExecute.execute(ChangeHostExecute.java:130)
          at oracle.glcm.fmw.chghost.Chghost.executeChghostCommand(Chghost.java:277)
          at oracle.glcm.fmw.chghost.Chghost.main(Chghost.java:301)
  13. Run chghost.sh on targetnode2.domain.com. Note that this script has two more parameters that didn't exist when you ran this script on targetnode1.domain.com. These parameters inform the script about the admin server's location and that the script needs to work with managed servers on this target. Run the following sample as a single command. Here it's split into multiple lines for clarity.
    ORACLE_HOME/oracle_common/bin/chghost.sh
    -chgHostInputFile /refresh/ucmshare/myinputfile.txt
    -javaHome JDK_INSTALL_LOCATION
    -domainLoc ORACLE_HOME/user_projects/domains/DOMAINNAME
    -domainAdminUserName weblogic
    -walletDir /refresh/home/mywalletdir
    -logDir /tmp
    -adminURL t3://targetnode1.domain.com:7001
    -managed
  14. On targetnode2.domain.com, recreate the boot.properties files in the DOMAINHOME/servers/SERVERNAME/security directories if desired for any managed servers. They are no longer available after chghost.sh is run.
  15. On targetnode2.domain.com, open the DOMAINHOME/config/fmwconfig/components/OHS/ohs_2/mod_wl_ohs.conf file and update it to include the new hosts for targetnode1.domain.com and targetnode2.domain.com.
  16. On targetnode2.domain.com, do the same in the DOMAINHOME/config/fmwconfig/components/OHS/instances/ohs_2/mod_wl_ohs.conf file.
  17. Go to the DOMAINHOME/data/providers directory on the shared file system of WebCenter Content.
  18. Verify that the providers to any refineries have the updated host name in the HttpServerAddress. If any providers contain an incorrect value, correct them as necessary.
  19. Verify for any refinery that its DOMAINHOME/ucm/ibr/config/config.cfg on the local file system has the correct HttpServerAddress value for the new host.
  20. Start the node manager on targetnode1.domain.com and targetnode2.domain.com.
  21. Log in to the Admin Server console and start the managed servers.
  22. Log in to WebCenter Content and verify that the providers work as expected.
  23. Adjust your load balancer's configuration for the new backend hosts for WebCenter Content.
  24. If your load balancer has changed, log into the Fusion Middleware Control and edit the PropConnectionUrl mBean value used for establishing the connection from the WebCenter Content user interface to the WebCenter Content so that this value uses the new address for your load balancer.
    1. From the menu in the upper left corner of the page, select the WCCADF_server1 managed server and go WebLogic Server - System MBean Browser.
    2. Navigate to Application Defined MBeans > oracle.adf.share.connections > Server: WCCADF_server1 > Application: Oracle WebCenter Content - Web UI > ADFConnections > ADFConnections > WccConnection > WccAdfServerConnection.
    3. Update the value for PropConnectionUrl and click Apply.
    4. Go to Application Defined MBeans > oracle.adf.share.connections > Server: WCCADF_server1 > Application: Oracle WebCenter Content - Web UI > ADFConnections > ADFConnections.
    1. On the Operations tab, click Save and then click Invoke.
  25. Update the SocketHostAddressSecurityFilter configuration setting on WebCenter Content and Inbound Refinery to use the new IP addresses, or update the SocketHostNameSecurityFilter configuration setting on both to use the new host names.
  26. If your load balancer's address has changed, update the HttpServerAddress value in the DOMAINHOME/ucm/cs/config/config.cfg file on WebCenter Content's shared file system.
  27. Restart all managed servers.
  28. Update other applications that connect to WebCenter Content for uninterrupted operations.
  29. If you're using SSL, update your SSL certificates with the new host names by importing them into the keystores of the new JDKs.
  30. Run IdcAnalyze to verify that everything works.