Best Practices from Oracle Development's A‑Team

ICS to OIC Migration

Abhay Kumar
Cloud Solutions Architect


Oracle Integration Cloud (OIC) and Integration Cloud Service (ICS) are iPaaS offerings from Oracle. ICS was released back in 2015 has now been superseded by OIC. Customers on ICS can choose to be on ICS or migrate to OIC to take advantage of new features and services built into OIC. The comparison of ICS and OIC is out-of-scope of this blog post.

This blog post describes migration steps from ICS to OIC. Customers who have a implemented ICS can make use of this blog post to migrate from ICS to OIC.

Migration from ICS to OIC

Currently ICS has a feature to export one ICS integration flow/interface at a time from ICS UI. After a flow is exported from ICS, this flow can then be imported into OIC using import functionality on OIC UI. This should allow an integration flow to migrate from ICS to OIC. However, this approach is cumbersome when there are many flows in ICS that are to be migrated to OIC since every flow needs to be exported and imported one by one.

Thankfully there is Clone Utility provided for bulk export of all the integrations, connections, packages, libraries and other artifacts from ICS to OIC. The Clone Utility is a bunch of  REST APIs in ICS and OIC. ICS provides REST APIs to bulk export ICS artifacts and OIC provides REST APIs to import these exported artifacts.


  1. 1. Existing ICS service with Admin role access to the service.
  2. 2. Provisioned OIC service with Admin role access to the service.
  3. 3. The Clone Utility feature is NOT Generally Available(GA) yet. A feature flag has to be enabled on OIC to enable this feature. To turn on the feature flag, one should open a SR with Oracle support.
  4. 4. Access to create and update a container on Oracle Storage Cloud

What can be Exported?

The clone utility helps export all ICS/OIC artifacts expect the agent and agent groups. The agent and agent groups need to be created manually. Here are the list of items the clone utility exports and imports -

  1. 1. All integration flows of all patterns
  2. 2. All connections including url, username and password credentials
  3. 3. All packages
  4. 4. All Libraries
  5. 5. All certificates configured in ICS
  6. 6. All Lookups

High Level Steps

The following picture provides the high-level steps involved.



Detailed Steps


The first step is to create storage container or to use an existing storage container. A storage container is needed to host the archive file that is contains all ICS artifacts.

The first thing needed is to identify the storage url which will be used in the REST API call in the next step. Oracle offers 2 flavors of storage offerings. The first one is called Oracle Storage Cloud Classic and the other one is called Oracle Object Cloud. While there are many differences between these storage offerings, one of the main difference is that the Oracle Storage Cloud Classic is on Oracle’s traditional IaaS offering Oracle Cloud Infrastructure Classic (OCI-Classic) while Oracle Object Cloud is on the new IaaS infrastructure Oracle Cloud Infrastructure (OCI).

We will be using Oracle Storage Cloud Classic for this blog.

Follow the steps below to identify storage url location.

  1. Navigate to myservices dashboard
  2. In the dashboard click on Storage Classic as shown. If the Storage Classic is not shown click on Customize Dashboard and make the Storage Classic visible on the dashboard.


  1. Storage url will be the one highlighted in the picture below.

The storage url in this case is https://Storage-<some identifier>.us.storage.oraclecloud.com/v1/Storage-<some identifier>

Copy this url into notepad because you will need this in the next step.


Go to Myservices and click on Storage Classic. This will lead you to the Storage Container management screen. Create a new container or use an existing container. For this blog post "testContainer" has been created.


The second step is to export all artifacts from ICS using the API below. ExportArtifacts REST API, exports all artifacts such as connections, integrations, packages and libraries. The Agent is not exported and has to be configured manually.


curl -k -v -x POST -u admin_user:admin_pwd H "Content-Type:application/json" -d '{"storageInfo":{"storageUrl":"https://Storage URL","storageUser":"username","storagePassword":"password"}}' https://ICSServer:port/icsapis/v2/clonepod/exportArtifacts



To construct the request get the url that was copied in STEP1 and append the container name from STEP2.

For example – https://Storage-<some identifier>.us.storage.oraclecloud.com/v1/Storage-https://Storage-<some identifier>/testContainer

Note : You will also need the StorageUser and StoragePassword. Note that the StorageUser maybe different from the ICS User!




"storageUrl":"https://Storage-https://Storage-<some identifier>.us.storage.oraclecloud.com/v1/Storage-https://Storage-<some identifier>/testContainer",








"archiveFilename": "archive_Local_Suite_Instance-7c4b9cb1-3557-421e-9c9b-d0d25035c134.zip",

"jobID": "7c4b9cb1-3557-421e-9c9b-d0d25035c134",

"location": "https://Storage-<some identifier>.us.storage.oraclecloud.com/v1/Storage-<some identifier>/testContainer",

"status": "Starting"





To check the status of t export job use the API below.


curl -k -v -X GET -u admin_user:admin_password https://ICSServer/icsapis/v2/clonepod/exportStatus




When the export job is running you will see a status as RUNNIG.


{"status": "COMPLETED"}

When export job successfully completes then you will see a status as COMPLETED. When the status is COMPLETE you must see a archive file generated in the storage. To check the archive file navigate to storage cloud and click on the container used on STEP3. In our case the container is called testContainer. Here you can see the archive file generated. The archive file name got in the response in STEP3 should match the archive file in the storage container.


{"status": "FAILED"}

Sometimes you may see a status as FAILED when export job fails. The REST APIs offers little help to diagnose the problem as detailed information on why the export job failed is not part of the response. At this time the only way to triage the problem is to download the ICS log files from ICS UI. You will have to specifically look for Admin server logs to diagnose the problem. Even after reviewing the logs if you are unable to identify the problem please raise support ticket with Oracle.


Once you have ensured that the ICS archive file was successfully generated, this archive file can be imported into OIC using the importServiceInstanceArchive API.


This API has 3 modes that are self-explanatory.  See below commands for the 3 modes.

  1. ImportActivateMode
  2. In this mode all integrations/flows are imported and after successfully importing the integrations/flows are activated.
  3. curl -k -v -X POST -u admin_user:admin_password -H "Content-Type:application/json" -d '{"archiveFile":"Archive File Name From Export Command","importActivateMode":"ImportActivate","storageInfo":{"storageUrl":"https://Storage-<some identifier>.us.storage.oraclecloud.com/v1/Storage-<some identifier>/testContainer","storageUser":"username","storagePassword":"password"}}' https://OICSserver/ic/api/common/v1/importServiceInstanceArchive
  4. ImportOnly
  5. In this mode all integrations/flows are only imported but not activated.
    1. curl -k -v -X POST -u admin_user:admin_password -H "Content-Type:application/json" -d '{"archiveFile":"Archive File Name From Export Command","
    2. importOnly":"ImportActivate","storageInfo":{"storageUrl":"https://Storage-<some identifier>.us.storage.oraclecloud.com/v1/Storage-<some identifier>/testContainer","storageUser":"username","storagePassword":"password"}}' https://OICSserver/ic/api/common/v1/importServiceInstanceArchive
  6. ActivateOnly
  7. This mode can be used if the ImportOnly mode was used and all integrations/flows need to be activated.
  8. curl -k -v -X POST -u admin_user:admin_password -H "Content-Type:application/json" -d '{"archiveFile":"Archive File Name From Export Command","activateOnly":"ImportActivate","storageInfo":{"storageUrl":"https://Storage-<some identifier>.us.storage.oraclecloud.com/v1/Storage-<some identifier>/testContainer","storageUser":"username","storagePassword":"password"}}' https://OICServer/ic/api/common/v1/importServiceInstanceArchive


"jobId": "1583",
"status": "NOT_STARTED"

The response message from the importServiceInstanceArchive API has 2 values JobID and Status. Keep the JobID handy as you will need this ID to check status of the import job in the next step.


To check the status of import use the JobID got in the previous step. Use the command below.


curl -k -v -X GET -u admin_user:admin_password https://OICServer/ic/api/common/v1/importServiceInstanceArchive/JobID



"jobId": "1583",
"status": "RUNNING"


"jobId": "1583",
"status": "COMPLETED"


Things to Remember

  1. 1. The Clone Utility does not export the Agent configurations. The Agent configurations like Agent Groups will have to be manually recreated and connectivity tests have to be performed with the Agents running on-prem.
  2. 2. If you had whitelisted ICS IP addresses to connect to Oracle SaaS applications or thirdparty applications, these whitelistings must to change to reflect OIC's IP Addresses. An Oracle Support Ticket needs to be raised to get the OIC IP addresses.
  3. 3. The password rules have changed between ICS and OIC. ICS allowed minimum 8 character passwords while OIC allows a minimum of 12 character passwords. This should not be an issue unless there are integrations where ICS calls ICS. In this case the connection password has to be manually updated after import.
  4. 4. Clone Utility can not only be used to migrate from ICS to OIC but also can come in handy Test to Production (T2P) or Production to Test (P2T) kind of scenarios.


ICS and OIC provided Clone Utility can be used to export ICS artifacts into OIC. The REST APIs provided by the Clone Utility have the capability to migrate all artifacts from ICS to OIC. Not only can the Clone Utility help migrate from ICS to OIC, this can help clone an existing OIC environments typically in T2P or P2T scenario.



Be the first to comment

Comments ( 0 )
Please enter your name.Please provide a valid email address.Please enter a comment.CAPTCHA challenge response provided was incorrect. Please try again.Captcha