Use the Tidal Tools database analyzer to measure your databases’ cloud migration difficulty.

Not sure how ready you are to move to the cloud? With Tidal Migrations you have the option to analyze the databases associated with your applications.

The analysis will calculate the difficulty of migrating your databases to each target platform, and give details on database features that may complicate the migration.

It is capable of analyzing Oracle, SQL Server, MySQL, and PostgreSQL databases. Providing analysis on migrating a database to a variety of services on AWS, Azure and Google Cloud.

Supported Database Versions

Tidal Tools is able to analyze databases with the following versions:

Oracle SQL Server MySQL PostgreSQL
Oracle Database 8i (8.1) SQL Server 2005 5.5 8.3
Oracle Database 9i Release 2 (9.2) SQL Server 2008 5.6 9.1, 9.2, 9.3, 9.4, 9.5, 9.6
Oracle Database 10g Release 2 (10.2) SQL Server 2008R2 5.7 10
Oracle Database 11g Release 1 (11.1) SQL Server 2012 8.0 11
Oracle Database 11g Release 2 (11.2) SQL Server 2014   12
Oracle Database 12c Release 1 (12.1) SQL Server 2016   13
Oracle Database 12c Release 2 (12.2) SQL Server 2017    
Oracle Database 18c (18.0, 18.1) SQL Server 2019    
Oracle Database 19c (19.0, 19.1, 19.2, 19.3)      

If you have a use case for a different version, definitely let us know at, we are always adding new capabilities.

Migration Complexity

The databases are analyzed to look for patterns and feature usage that may be difficult to migrate due to lack of support or compatibility in their new environment. The databases are analyzed based on their metadata, looking at specific schema objects that are used within your databases as well as the usage of proprietary features that will not be available in the target platforms.

For example, in Oracle databases, the Data Dictionary and AWR repository tables are read and analyzed. The scoring is calculated based on the type of attributes, features or schema objects that are used and the frequency of use throughout the database.

  • Over 100 unique characteristics are considered
  • Feature-fit is executed against all supported cloud data platforms.
  • Migration difficulty score is calculated based on a weighted model

Getting Started

  • Enable the Database Analysis feature for your account: - See the Database Analysis section, under Preferences.
  • tidal login Be sure to have installed and logged in to your Tidal Migrations account via Tidal Tools.
  • Install Docker CE, it is compatible with most OSs, select the one you need. Version 17.12 or later will work with Tidal Tools. Why Docker?
  • You will also need a few authentication and configuration details for the database:
    • id - The id of the database from your Tidal Migrations account. You can find it in the URL bar when looking at a database instance. ex. If you are viewing a database instance in Tidal Migrations, the URL will show in this case 111 is the database instance ID.
    • engine - The database vendor, either Oracle, SQL Server, MySQL, or PostgreSQL, it is not case sensitive.
    • host - The hostname of the server that the database is located on and is accessible via a network connection from your current device and location.
    • port - The port that the host has open and the database can accept connections on, the default for Oracle is 1521, for SQL Server it is 1433, for MySQL it is 3306, and for PostgreSQL the default port is 5432.
    • db_name - The name of the database that will be analyzed, as it is defined within the database engine itself. ie. the value that is used by applications to connect to the database by name.
    • user - A username to authenticate with the database with, see below for more details.
    • password - A password for the corresponding user.
    • name - A common name for your database could be the same or different from db_name, but this value is arbitrary and only for your reference.

Oracle User

You can can create a user with the script and set of permissions defined in this script. You should provide a secure password on the first line.

If you are using a CDB database you will also need to create a second user to access the CDB. You can do that with this script and also provide a secure password at the top:

CREATE USER c##tidal_comm_user IDENTIFIED BY "replace_this_with_secure_password" account unlock;
GRANT CREATE SESSION to c##tidal_comm_user;
GRANT select_catalog_role to c##tidal_comm_user;

SQL Server User

You can can create a user with the script and set of permissions defined in this script. You should provide a secure password near the top.

MySQL Server User

For MySQL you can create a user (tidal) with all the necessary permissions as the following:

CREATE USER 'tidal'@'%' IDENTIFIED BY 'replace_this_with_secure_password';
GRANT SELECT ON sys.* TO 'tidal'@'%';
GRANT SELECT ON performance_schema.* TO 'tidal'@'%';
GRANT SELECT ON mysql.slave_master_info TO tidal;
GRANT SELECT ON mysql.slave_relay_log_info TO tidal;
GRANT SELECT ON mysql.user TO tidal;

Use the commands from the following sections according to the MySQL version used.

MySQL 5.x

GRANT SELECT ON mysql.proc TO tidal;

MySQL 8.x

GRANT SHOW_ROUTINE ON *.* TO 'tidal'@'%';
GRANT SELECT ON mysql.user TO 'tidal'@'%';

PostgreSQL Server User

Use the following commands to create a user (tidal) on PostgreSQL server.

CREATE USER tidal WITH PASSWORD 'replace_this_with_secure_password';

DO $$ DECLARE comm_rec RECORD;
    FOR comm_rec IN
		SELECT 'GRANT REFERENCES ON ALL TABLES IN SCHEMA '||schema_name||' TO tidal' AS comm FROM information_schema.schemata
        EXECUTE comm_rec.comm;
$$ LANGUAGE plpgsql;


For PostgreSQL versions higher than 9 the following GRANTs should be also applied:

GRANT SELECT ON pg_catalog.pg_config TO tidal;
GRANT EXECUTE ON function pg_catalog.pg_config TO tidal;
GRANT SELECT ON pg_catalog.pg_proc TO tidal;
GRANT SELECT ON pg_catalog.pg_namespace TO tidal;

For PostgreSQL versions 10 and above the following GRANTs should be also applied:

GRANT SELECT ON pg_catalog.pg_hba_file_rules TO tidal;
GRANT SELECT ON pg_catalog.pg_roles TO tidal;
GRANT pg_read_all_settings TO tidal;
GRANT pg_read_all_stats TO tidal;

After creating the user you will need to add the appropriate entry to the pg_hba.conf. For example:

host    all         tidal   md5

To apply the configuration changes to the running PostgreSQL server you will need to run pg_ctl restart.

Perform the analysis

With your user and password, you can define all these values in a YAML configuration file.

The simplest way is to use tidal analyze db init and answer the questions. Or you can create the file manually:


  - id: 111
    engine: Oracle
    host: ''
    port: 1521
    db_name: 'orcl'
    user: 'tidal'
    password: 'yoursecurepassword1234!'
    name: 'My-Test-DB'
  • You’re all set! You can now analyze the database with:
tidal analyze db databases.yaml

Try it out!

Running offline

If you need to run the command from a computer without any internet access, either no download access to download the docker image necessary or no outbound access to upload the results of the analysis to the API then this is for you.

First you will need to setup Tidal Tools on a machine with internet access. Next you can run:

tidal backup

This will create a tar file called tidal-snapshot_DATE.tar

Moving to the air-gapped machine you will need to install Tidal Tools and Docker and transfer the tar file above, then run:

tidal restore tidal-snapshot_DATE.tar

This will load the docker image and all of existing Tidal Tools configurations from the original machine. You can now run the database analysis without any external network connectivity, except to your database host itself:

tidal analyze db --offline databases.yaml

This will output a zip file called, that can then be uploaded to the application for a given database in order to complete the analysis:

tidal analyze db --upload

You should recieve confirmation that the upload has completed and can navigate to Tidal Migrations to see the results.

Why Docker?

You need to install Docker in order to complete the database analysis. This is because the analysis uses several system dependent software libraries, so by using Docker the analysis can use those libraries without you requiring to install the correct dependencies with the correct versions.

What about security?

The entire analysis takes place locally on your machine. The only data that is captured and sent from the analysis are the results of the analysis and metadata. No application data, source code, files or the contents of any files on your machine are ever copied or sent anywhere.

Advanced Configuration

Oracle Standard Edition

To use Oracle features included only in the Oracle Standard Edition (SE) license, you can set the analyze_workload property to false in your configuration file. For example:

  - id: 111
    analyze_workload: false
    engine: Oracle
    host: ''
    port: 1521
    db_name: 'orcl'
    user: 'tidal'
    password: 'yoursecurepassword1234!'
    name: 'My-Test-DB'


If you are getting errors when trying to perform the analysis, it can help if you confirm that you do have network connectivity to the database.

Two commands you can use for this are:

  1. dig your_db_host - This should return a DNS record, usually an A record, with an IP address. This means you are able to resolve the hostname of the database. If there is no IP address then you either need to adjust the hostname or you need to configure or adjust the DNS server for your operating system.

  2. nc -vzn -w 10 your_db_host db_port This command should return Connected to your_db_host:db_port if it is able to connect. If it returns Connection Timed Out this means that it is not able to reach your database on this port. This could mean that you do not have the correct network connectivity to the database and may need to adjust firewalls or other network access. Or you are you not providing the correct port that is open and listening for requests on the database.

CDB Configuration

You will need these additional values added to your configuration file to connect to a CDB database.

  - id: 111
    engine: Oracle
    host: ''
    port: 1521
    db_name: 'orcl'
    user: 'tidal'
    password: 'yoursecurepassword1234!'
    name: 'My-Test-DB'
    dbidtype: 'dbid'
    ispdb: false
      name: 'cdbname'
      user: 'c##tidal_comm_user'
      password: 'your_secure_password'