- {{% includeMarkdown "./standalone-oracle.md" %}}
+
-1. Create `ybvoyager_metadata` schema or user, and tables for voyager to use during migration as follows:
+{{< tabpane text=true >}}
- ```sql
- CREATE USER ybvoyager_metadata IDENTIFIED BY "password";
- GRANT CONNECT, RESOURCE TO ybvoyager_metadata;
- ALTER USER ybvoyager_metadata QUOTA UNLIMITED ON USERS;
-
- CREATE TABLE ybvoyager_metadata.ybvoyager_import_data_event_channels_metainfo (
- migration_uuid VARCHAR2(36),
- channel_no INT,
- last_applied_vsn NUMBER(19),
- num_inserts NUMBER(19),
- num_updates NUMBER(19),
- num_deletes NUMBER(19),
- PRIMARY KEY (migration_uuid, channel_no)
- );
-
- CREATE TABLE ybvoyager_metadata.ybvoyager_imported_event_count_by_table (
- migration_uuid VARCHAR2(36),
- table_name VARCHAR2(250),
- channel_no INT,
- total_events NUMBER(19),
- num_inserts NUMBER(19),
- num_updates NUMBER(19),
- num_deletes NUMBER(19),
- PRIMARY KEY (migration_uuid, table_name, channel_no)
- );
- ```
+ {{% tab header="Standalone Oracle Container Database" %}}
+
+ 1. Ensure that your database log_mode is `archivelog` as follows:
+
+ ```sql
+ SELECT LOG_MODE FROM V$DATABASE;
+ ```
+
+ ```output
+ LOG_MODE
+ ------------
+ ARCHIVELOG
+ ```
+
+ If log_mode is NOARCHIVELOG (that is, not enabled), run the following command:
+
+ ```sql
+ sqlplus /nolog
+ SQL>alter system set db_recovery_file_dest_size = 10G;
+ SQL>alter system set db_recovery_file_dest = '/oradata/recovery_area' scope=spfile;
+ SQL> connect / as sysdba
+ SQL> Shutdown immediate
+ SQL> Startup mount
+ SQL> Alter database archivelog;
+ SQL> Alter database open;
+ ```
+
+ 1. Create the tablespaces as follows:
+
+ 1. Connect to Pluggable database (PDB) as sysdba and run the following command:
+
+ ```sql
+ CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/logminer_tbs.dbf'
+ SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
+ ```
+
+ 1. Connect to Container database (CDB) as sysdba and run the following command:
+
+ ```sql
+ CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/logminer_tbs.dbf'
+ SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
+ ```
+
+ 1. Run the following commands from CDB as sysdba:
+
+ ```sql
+ CREATE USER c##ybvoyager IDENTIFIED BY password
+ DEFAULT TABLESPACE logminer_tbs
+ QUOTA UNLIMITED ON logminer_tbs
+ CONTAINER=ALL;
+
+ GRANT CREATE SESSION TO c##ybvoyager CONTAINER=ALL;
+ GRANT SET CONTAINER TO c##ybvoyager CONTAINER=ALL;
+ GRANT SELECT ON V_$DATABASE to c##ybvoyager CONTAINER=ALL;
+ GRANT FLASHBACK ANY TABLE TO c##ybvoyager CONTAINER=ALL;
+ GRANT SELECT ANY TABLE TO c##ybvoyager CONTAINER=ALL;
+ GRANT SELECT_CATALOG_ROLE TO c##ybvoyager CONTAINER=ALL;
+ GRANT EXECUTE_CATALOG_ROLE TO c##ybvoyager CONTAINER=ALL;
+ GRANT SELECT ANY TRANSACTION TO c##ybvoyager CONTAINER=ALL;
+ GRANT LOGMINING TO c##ybvoyager CONTAINER=ALL;
+
+ GRANT CREATE TABLE TO c##ybvoyager CONTAINER=ALL;
+ GRANT LOCK ANY TABLE TO c##ybvoyager CONTAINER=ALL;
+ GRANT CREATE SEQUENCE TO c##ybvoyager CONTAINER=ALL;
+
+ GRANT EXECUTE ON DBMS_LOGMNR TO c##ybvoyager CONTAINER=ALL;
+ GRANT EXECUTE ON DBMS_LOGMNR_D TO c##ybvoyager CONTAINER=ALL;
+
+ GRANT SELECT ON V_$LOG TO c##ybvoyager CONTAINER=ALL;
+ GRANT SELECT ON V_$LOG_HISTORY TO c##ybvoyager CONTAINER=ALL;
+ GRANT SELECT ON V_$LOGMNR_LOGS TO c##ybvoyager CONTAINER=ALL;
+ GRANT SELECT ON V_$LOGMNR_CONTENTS TO c##ybvoyager CONTAINER=ALL;
+ GRANT SELECT ON V_$LOGMNR_PARAMETERS TO c##ybvoyager CONTAINER=ALL;
+ GRANT SELECT ON V_$LOGFILE TO c##ybvoyager CONTAINER=ALL;
+ GRANT SELECT ON V_$ARCHIVED_LOG TO c##ybvoyager CONTAINER=ALL;
+ GRANT SELECT ON V_$ARCHIVE_DEST_STATUS TO c##ybvoyager CONTAINER=ALL;
+ GRANT SELECT ON V_$TRANSACTION TO c##ybvoyager CONTAINER=ALL;
+
+ GRANT SELECT ON V_$MYSTAT TO c##ybvoyager CONTAINER=ALL;
+ GRANT SELECT ON V_$STATNAME TO c##ybvoyager CONTAINER=ALL;
+ ```
+
+ 1. Enable supplemental logging in the database as follows:
+
+ ```sql
+ ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
+ ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
+ ```
+
+ 1. Create `ybvoyager_metadata` schema or user, and tables for voyager to use during migration as follows:
+
+ ```sql
+ CREATE USER ybvoyager_metadata IDENTIFIED BY "password";
+ GRANT CONNECT, RESOURCE TO ybvoyager_metadata;
+ ALTER USER ybvoyager_metadata QUOTA UNLIMITED ON USERS;
+
+ CREATE TABLE ybvoyager_metadata.ybvoyager_import_data_event_channels_metainfo (
+ migration_uuid VARCHAR2(36),
+ channel_no INT,
+ last_applied_vsn NUMBER(19),
+ num_inserts NUMBER(19),
+ num_updates NUMBER(19),
+ num_deletes NUMBER(19),
+ PRIMARY KEY (migration_uuid, channel_no)
+ );
+
+ CREATE TABLE ybvoyager_metadata.ybvoyager_imported_event_count_by_table (
+ migration_uuid VARCHAR2(36),
+ table_name VARCHAR2(250),
+ channel_no INT,
+ total_events NUMBER(19),
+ num_inserts NUMBER(19),
+ num_updates NUMBER(19),
+ num_deletes NUMBER(19),
+ PRIMARY KEY (migration_uuid, table_name, channel_no)
+ );
+ ```
1. Create a writer role for the source schema for Voyager to be able to write the changes from the target YugabyteDB database to the source database (in case of a fall-back):
@@ -155,38 +246,206 @@ Create a new database user, and assign the necessary user permissions.
GRANT _writer_role TO c##ybvoyager;
```
-
-
- {{% includeMarkdown "./rds-oracle.md" %}}
-
-1. Create `ybvoyager_metadata` schema or user, and tables for voyager to use during migration as follows:
+ {{% /tab %}}
+
+ {{% tab header="RDS Oracle" %}}
+
+ 1. Ensure that your database log_mode is `archivelog` as follows:
+
+ ```sql
+ SELECT LOG_MODE FROM V$DATABASE;
+ ```
+
+ ```output
+ LOG_MODE
+ ------------
+ ARCHIVELOG
+ ```
+
+ If log_mode is NOARCHIVELOG (that is, not enabled), run the following command:
+
+ ```sql
+ exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',24);
+ ```
+
+ 1. Connect to your database as an admin user, and create the tablespaces as follows:
+
+ ```sql
+ CREATE TABLESPACE logminer_tbs DATAFILE SIZE 25M AUTOEXTEND ON MAXSIZE UNLIMITED;
+ ```
+
+ 1. Run the following commands connected to the admin or privileged user:
+
+ ```sql
+ CREATE USER ybvoyager IDENTIFIED BY password
+ DEFAULT TABLESPACE logminer_tbs
+ QUOTA UNLIMITED ON logminer_tbs;
+
+ GRANT CREATE SESSION TO YBVOYAGER;
+ begin rdsadmin.rdsadmin_util.grant_sys_object(
+ p_obj_name => 'V_$DATABASE',
+ p_grantee => 'YBVOYAGER',
+ p_privilege => 'SELECT');
+ end;
+ /
+
+ GRANT FLASHBACK ANY TABLE TO YBVOYAGER;
+ GRANT SELECT ANY TABLE TO YBVOYAGER;
+ GRANT SELECT_CATALOG_ROLE TO YBVOYAGER;
+ GRANT EXECUTE_CATALOG_ROLE TO YBVOYAGER;
+ GRANT SELECT ANY TRANSACTION TO YBVOYAGER;
+ GRANT LOGMINING TO YBVOYAGER;
+
+ GRANT CREATE TABLE TO YBVOYAGER;
+ GRANT LOCK ANY TABLE TO YBVOYAGER;
+ GRANT CREATE SEQUENCE TO YBVOYAGER;
+
+
+ begin rdsadmin.rdsadmin_util.grant_sys_object(
+ p_obj_name => 'DBMS_LOGMNR',
+ p_grantee => 'YBVOYAGER',
+ p_privilege => 'EXECUTE',
+ p_grant_option => true);
+ end;
+ /
+
+ begin rdsadmin.rdsadmin_util.grant_sys_object(
+ p_obj_name => 'DBMS_LOGMNR_D',
+ p_grantee => 'YBVOYAGER',
+ p_privilege => 'EXECUTE',
+ p_grant_option => true);
+ end;
+ /
+
+ begin rdsadmin.rdsadmin_util.grant_sys_object(
+ p_obj_name => 'V_$LOG',
+ p_grantee => 'YBVOYAGER',
+ p_privilege => 'SELECT');
+ end;
+ /
+
+ begin
+ rdsadmin.rdsadmin_util.grant_sys_object(
+ p_obj_name => 'V_$LOG_HISTORY',
+ p_grantee => 'YBVOYAGER',
+ p_privilege => 'SELECT');
+ end;
+ /
+
+ begin
+ rdsadmin.rdsadmin_util.grant_sys_object(
+ p_obj_name => 'V_$LOGMNR_LOGS',
+ p_grantee => 'YBVOYAGER',
+ p_privilege => 'SELECT');
+ end;
+ /
+
+ begin
+ rdsadmin.rdsadmin_util.grant_sys_object(
+ p_obj_name => 'V_$LOGMNR_CONTENTS',
+ p_grantee => 'YBVOYAGER',
+ p_privilege => 'SELECT');
+ end;
+ /
+
+ begin
+ rdsadmin.rdsadmin_util.grant_sys_object(
+ p_obj_name => 'V_$LOGMNR_PARAMETERS',
+ p_grantee => 'YBVOYAGER',
+ p_privilege => 'SELECT');
+ end;
+ /
+
+ begin
+ rdsadmin.rdsadmin_util.grant_sys_object(
+ p_obj_name => 'V_$LOGFILE',
+ p_grantee => 'YBVOYAGER',
+ p_privilege => 'SELECT');
+ end;
+ /
+
+ begin
+ rdsadmin.rdsadmin_util.grant_sys_object(
+ p_obj_name => 'V_$ARCHIVED_LOG',
+ p_grantee => 'YBVOYAGER',
+ p_privilege => 'SELECT');
+ end;
+ /
+
+ begin
+ rdsadmin.rdsadmin_util.grant_sys_object(
+ p_obj_name => 'V_$ARCHIVE_DEST_STATUS',
+ p_grantee => 'YBVOYAGER',
+ p_privilege => 'SELECT');
+ end;
+ /
+
+ begin
+ rdsadmin.rdsadmin_util.grant_sys_object(
+ p_obj_name => 'V_$TRANSACTION',
+ p_grantee => 'YBVOYAGER',
+ p_privilege => 'SELECT');
+ end;
+ /
+
+ begin
+ rdsadmin.rdsadmin_util.grant_sys_object(
+ p_obj_name => 'V_$MYSTAT',
+ p_grantee => 'YBVOYAGER',
+ p_privilege => 'SELECT');
+ end;
+ /
+
+ begin
+ rdsadmin.rdsadmin_util.grant_sys_object(
+ p_obj_name => 'V_$STATNAME',
+ p_grantee => 'YBVOYAGER',
+ p_privilege => 'SELECT');
+ end;
+ /
+ ```
+
+ 1. Enable supplemental logging in the database as follows:
+
+ ```sql
+ exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');
+
+ begin
+ rdsadmin.rdsadmin_util.alter_supplemental_logging(
+ p_action => 'ADD',
+ p_type => 'ALL');
+ end;
+ /
+ ```
+
+ 1. Create `ybvoyager_metadata` schema or user, and tables for voyager to use during migration as follows:
- ```sql
- CREATE USER ybvoyager_metadata IDENTIFIED BY "password";
- GRANT CONNECT, RESOURCE TO ybvoyager_metadata;
- ALTER USER ybvoyager_metadata QUOTA UNLIMITED ON USERS;
-
- CREATE TABLE ybvoyager_metadata.ybvoyager_import_data_event_channels_metainfo (
- migration_uuid VARCHAR2(36),
- channel_no INT,
- last_applied_vsn NUMBER(19),
- num_inserts NUMBER(19),
- num_updates NUMBER(19),
- num_deletes NUMBER(19),
- PRIMARY KEY (migration_uuid, channel_no)
- );
-
- CREATE TABLE ybvoyager_metadata.ybvoyager_imported_event_count_by_table (
- migration_uuid VARCHAR2(36),
- table_name VARCHAR2(250),
- channel_no INT,
- total_events NUMBER(19),
- num_inserts NUMBER(19),
- num_updates NUMBER(19),
- num_deletes NUMBER(19),
- PRIMARY KEY (migration_uuid, table_name, channel_no)
- );
- ```
+ ```sql
+ CREATE USER ybvoyager_metadata IDENTIFIED BY "password";
+ GRANT CONNECT, RESOURCE TO ybvoyager_metadata;
+ ALTER USER ybvoyager_metadata QUOTA UNLIMITED ON USERS;
+
+ CREATE TABLE ybvoyager_metadata.ybvoyager_import_data_event_channels_metainfo (
+ migration_uuid VARCHAR2(36),
+ channel_no INT,
+ last_applied_vsn NUMBER(19),
+ num_inserts NUMBER(19),
+ num_updates NUMBER(19),
+ num_deletes NUMBER(19),
+ PRIMARY KEY (migration_uuid, channel_no)
+ );
+
+ CREATE TABLE ybvoyager_metadata.ybvoyager_imported_event_count_by_table (
+ migration_uuid VARCHAR2(36),
+ table_name VARCHAR2(250),
+ channel_no INT,
+ total_events NUMBER(19),
+ num_inserts NUMBER(19),
+ num_updates NUMBER(19),
+ num_deletes NUMBER(19),
+ PRIMARY KEY (migration_uuid, table_name, channel_no)
+ );
+ ```
1. Create a writer role for the source schema for Voyager to be able to write the changes from the target YugabyteDB database to the source database (in case of a fall-back):
@@ -220,7 +479,250 @@ Create a new database user, and assign the necessary user permissions.
GRANT _writer_role TO ybvoyager;
```
+ {{% /tab %}}
+
+{{< /tabpane >}}
+
+
+
+{{< tabpane text=true >}}
+
+ {{% tab header="Standalone PostgreSQL" %}}
+
+1. yb_voyager requires `wal_level` to be logical. You can check this using following the steps:
+
+ 1. Run the command `SHOW wal_level` on the database to check the value.
+
+ 1. If the value is anything other than logical, run the command `SHOW config_file` to know the path of your configuration file.
+
+ 1. Modify the configuration file by uncommenting the parameter `wal_level` and set the value to logical.
+
+ 1. Restart PostgreSQL.
+
+1. Check that the replica identity is FULL (`f`) for all tables on the database.
+
+ 1. Check the replica identity using the following query:
+
+ ```sql
+ SELECT n.nspname, relname, relreplident
+ FROM pg_class c JOIN pg_namespace n on c.relnamespace = n.oid
+ WHERE n.nspname in () and relkind = 'r';
+ --- SCHEMA_LIST used is a comma-separated list of schemas, for example, SCHEMA_LIST 'abc','public', 'xyz'.
+ ```
+
+ 1. Change the replica identity of all tables if the tables have an identity other than FULL (`f`), using the following query:
+
+ ```sql
+ DO $$
+ DECLARE
+ r Record;
+ BEGIN
+ FOR r IN (SELECT table_schema, '"' || table_name || '"' as t_name FROM information_schema.tables WHERE table_schema IN () AND table_type = 'BASE TABLE')
+ LOOP
+ EXECUTE 'ALTER TABLE ' || r.table_schema || '.' || r.t_name || ' REPLICA IDENTITY FULL';
+ END LOOP;
+ END $$;
+ --- SCHEMA_LIST used is a comma-separated list of schemas, for example, SCHEMA_LIST 'abc','public', 'xyz'.
+ ```
+
+1. Create user `ybvoyager` for the migration using the following command:
+
+ ```sql
+ CREATE USER ybvoyager PASSWORD 'password' REPLICATION;
+ ```
+
+1. Switch to the database that you want to migrate as follows:
+
+ ```sql
+ \c
+ ```
+
+1. Grant the `USAGE` permission to the `ybvoyager` user on all schemas of the database as follows:
+
+ ```sql
+ SELECT 'GRANT USAGE ON SCHEMA ' || schema_name || ' TO ybvoyager;' FROM information_schema.schemata; \\gexec
+ ```
+
+ The preceding `SELECT` statement generates a list of `GRANT USAGE` statements which are then executed by `psql` because of the `\\gexec` switch. The `\\gexec` switch works for PostgreSQL v9.6 and later. For earlier versions, you'll have to manually execute the `GRANT USAGE ON SCHEMA schema_name TO ybvoyager` statement, for each schema in the source PostgreSQL database.
+
+1. Grant `SELECT` permission on all the tables and sequences as follows:
+
+ ```sql
+ SELECT 'GRANT SELECT ON ALL TABLES IN SCHEMA ' || schema_name || ' TO ybvoyager;' FROM information_schema.schemata; \\gexec
+
+ SELECT 'GRANT SELECT ON ALL SEQUENCES IN SCHEMA ' || schema_name || ' TO ybvoyager;' FROM information_schema.schemata; \\gexec
+ ```
+
+1. Create a replication group as follows:
+
+ ```sql
+ CREATE ROLE replication_group;
+ ```
+
+1. Add the original owner of the table to the group as follows:
+
+ ```sql
+ GRANT replication_group TO ;
+ ```
+
+1. Add the user `ybvoyager` to the replication group as follows:
+
+ ```sql
+ GRANT replication_group TO ybvoyager;
+ ```
+
+1. Transfer ownership of the tables to the role `replication_group` as follows:
+
+ ```sql
+ DO $$
+ DECLARE
+ r Record;
+ BEGIN
+ FOR r IN (SELECT table_schema, '"' || table_name || '"' as t_name FROM information_schema.tables WHERE table_schema IN ())
+ LOOP
+ EXECUTE 'ALTER TABLE ' || r.table_schema || '.' || r.t_name || ' OWNER TO replication_group';
+ END LOOP;
+ END $$;
+ --- SCHEMA_LIST used is a comma-separated list of schemas, for example, SCHEMA_LIST 'abc','public', 'xyz'.
+ ```
+
+1. Grant `CREATE` privilege on the source database to `ybvoyager` as follows:
+
+ ```sql
+ GRANT CREATE ON DATABASE TO ybvoyager; --required to create a publication.
+ ```
+
+ The `ybvoyager` user can now be used for migration.
+
+1. Provide write privileges on all tables in the schemas to the Voyager user to be able to write the changes from target YugabyteDB to the source database (in case of a fall-back).
+
+ ```sql
+ SELECT 'GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA ' || schema_name || ' TO ybvoyager;' FROM information_schema.schemata where schema_name IN () ; \\gexec
+ --- SCHEMA_LIST used is a comma-separated list of schemas, for example, SCHEMA_LIST 'abc','public', 'xyz'.
+ ```
+
+ {{% /tab %}}
+
+ {{% tab header="RDS PostgreSQL" %}}
+
+1. yb_voyager requires `wal_level` to be logical. This is controlled by a database parameter `rds.logical_replication` which needs to be set to 1. You can check this using following the steps:
+
+ 1. Run the command `SHOW rds.logical_replication` on the database to check whether the parameter is set.
+
+ 1. If the parameter is not set, you can change the parameter value to 1 from the RDS console of the database; navigate to **Configuration** > **Parameter group** > `rds.logical_replication`.
+
+ 1. If the `rds.logical_replication` errors out (after the change), create a new parameter group with the value as 1, and assign it to the database instance from the **Modify** option on the RDS console.
+
+ 1. Restart RDS.
+
+1. Check that the replica identity is FULL (`f`) for all tables on the database.
+
+ 1. Check the Replica identity for all the tables on the database as follows:
+
+ ```sql
+ SELECT n.nspname, relname, relreplident
+ FROM pg_claspg_class c JOIN pg_namespace n on c.relnamespace = n.oids
+ WHERE n.nspname in () and relkind = 'r';
+ --- SCHEMA_LIST used is a comma-separated list of schemas, for example, SCHEMA_LIST 'abc','public', 'xyz'.
+ ```
+
+ 1. Change the replica identity of all tables if the tables have an identity other than FULL (`f`), using the following query:
+
+ ```sql
+ DO $$
+ DECLARE
+ r Record;
+ BEGIN
+ FOR r IN (SELECT table_schema, '"' || table_name || '"' as t_name FROM information_schema.tables WHERE table_schema IN () AND table_type = 'BASE TABLE')
+ LOOP
+ EXECUTE 'ALTER TABLE ' || r.table_schema || '.' || r.t_name || ' REPLICA IDENTITY FULL';
+ END LOOP;
+ END $$;
+ --- SCHEMA_LIST used is a comma-separated list of schemas, for example, SCHEMA_LIST 'abc','public', 'xyz'.
+ ```
+
+1. Create user `ybvoyager` for the migration using the following command:
+
+ ```sql
+ CREATE USER ybvoyager PASSWORD 'password';
+ GRANT rds_replication to ybvoyager;
+ ```
+
+1. Switch to the database that you want to migrate as follows:
+
+ ```sql
+ \\c
+ ```
+
+1. Grant the `USAGE` permission to the `ybvoyager` user on all schemas of the database as follows:
+
+ ```sql
+ SELECT 'GRANT USAGE ON SCHEMA ' || schema_name || ' TO ybvoyager;' FROM information_schema.schemata; \\gexec
+ ```
+
+ The preceding `SELECT` statement generates a list of `GRANT USAGE` statements which are then executed by `psql` because of the `\\gexec` switch. The `\\gexec` switch works for PostgreSQL v9.6 and later. For older versions, you'll have to manually execute the `GRANT USAGE ON SCHEMA schema_name TO ybvoyager` statement, for each schema in the source PostgreSQL database.
+
+1. Grant `SELECT` permission on all the tables and sequences as follows:
+
+ ```sql
+ SELECT 'GRANT SELECT ON ALL TABLES IN SCHEMA ' || schema_name || ' TO ybvoyager;' FROM information_schema.schemata; \\gexec
+
+ SELECT 'GRANT SELECT ON ALL SEQUENCES IN SCHEMA ' || schema_name || ' TO ybvoyager;' FROM information_schema.schemata; \\gexec
+ ```
+
+1. Create a replication group as follows:
+
+ ```sql
+ CREATE ROLE replication_group;
+ ```
+
+1. Add the original owner of the table to the group as follows:
+
+ ```sql
+ GRANT replication_group TO ;
+ ```
+
+1. Add the user `ybvoyager` to the replication group as follows:
+
+ ```sql
+ GRANT replication_group TO ybvoyager;
+ ```
+
+1. Transfer ownership of the tables to the role as follows:
+
+ ```sql
+ DO $$
+ DECLARE
+ r Record;
+ BEGIN
+ FOR r IN (SELECT table_schema, '"' || table_name || '"' as t_name FROM information_schema.tables WHERE table_schema IN ())
+ LOOP
+ EXECUTE 'ALTER TABLE ' || r.table_schema || '.' || r.t_name || ' OWNER TO replication_group';
+ END LOOP;
+ END $$;
+ --- SCHEMA_LIST used is a comma-separated list of schemas, for example, SCHEMA_LIST 'abc','public', 'xyz'.
+ ```
+
+1. Grant `CREATE` privilege on the source database to `ybvoyager` as follows:
+
+ ```sql
+ GRANT CREATE ON DATABASE TO ybvoyager; --required to create a publication.
+ ```
+
+ The `ybvoyager` user can now be used for migration.
+
+1. Provide write privileges on all tables in the schemas to the Voyager user to be able to write the changes from target YugabyteDB to the source database (in case of a fall-back):
+
+ ```sql
+ SELECT 'GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA ' || schema_name || ' TO ybvoyager;' FROM information_schema.schemata where schema_name IN () ; \\gexec
+ --- SCHEMA_LIST used is a comma-separated list of schemas, for example, SCHEMA_LIST 'abc','public', 'xyz'.
+ ```
+
+ {{% /tab %}}
+
+{{< /tabpane >}}
+
If you want yb-voyager to connect to the source database over SSL, refer to [SSL Connectivity](../../reference/yb-voyager-cli/#ssl-connectivity).
@@ -546,25 +1048,7 @@ yb-voyager import schema --export-dir
\
--post-snapshot-import true
```
-If any of the CREATE INDEX DDLs fail in the preceding command, drop the INVALID indexes on the target database using:
-
-```sql
-DO $$
-DECLARE
- index_name text;
-BEGIN
- FOR index_name IN (
- SELECT indexrelid::regclass
- FROM pg_index
- WHERE indisvalid = false
- )
- LOOP
- EXECUTE 'DROP INDEX ' || index_name;
- END LOOP;
-END $$;
-```
-
-and then retry the command with the argument `--ignore-exist` to ignore already created indexes and create new ones instead.
+If any of the CREATE INDEX DDLs fail in the preceding command, retry the command with the argument `--ignore-exist` to ignore already created indexes and create new ones instead.
```sh
# Replace the argument values with those applicable for your migration.
@@ -650,29 +1134,82 @@ For more details, refer to the GitHub issue [#360](https://github.com/yugabyte/y
{{< /warning >}}
-1. Disable triggers and foreign-key constraints on the source database to ensure that changes from the target YugabyteDB database can be imported correctly to the source database using the following PL/SQL commands on the source schema as a privileged user:
+1. Disable triggers and foreign-key constraints on the source database to ensure that changes from the target YugabyteDB database can be imported correctly to the source database using the following PL/SQL commands on the source schema as a privileged user:
- ```sql
+{{< tabpane text=true >}}
+
+ {{% tab header="Oracle" %}}
+
+Use the following PL/SQL commands to disable triggers, and disable referential constraints on the source:
+
+ ```sql
--disable triggers
- BEGIN
- FOR R IN (SELECT owner, object_name FROM all_objects WHERE owner=UPPER('') and object_type ='TABLE' MINUS SELECT owner, table_name from all_nested_tables where owner = UPPER(''))
- LOOP
- EXECUTE IMMEDIATE 'ALTER TABLE '||R.owner||'."'||R.object_name||'" DISABLE ALL TRIGGERS';
- END LOOP;
- END;
+ BEGIN
+ FOR R IN (SELECT owner, object_name FROM all_objects WHERE owner=UPPER('') and object_type ='TABLE' MINUS SELECT owner, table_name from all_nested_tables where owner = UPPER(''))
+ LOOP
+ EXECUTE IMMEDIATE 'ALTER TABLE '||R.owner||'."'||R.object_name||'" DISABLE ALL TRIGGERS';
+ END LOOP;
+ END;
/
--disable referential constraints
- BEGIN
- FOR c IN (SELECT table_name, constraint_name
- FROM user_constraints
- WHERE constraint_type IN ('R') AND OWNER = '')
- LOOP
- EXECUTE IMMEDIATE 'ALTER TABLE ' || c.table_name || ' DISABLE CONSTRAINT ' || c.constraint_name;
- END LOOP;
- END;
+ BEGIN
+ FOR c IN (SELECT table_name, constraint_name
+ FROM user_constraints
+ WHERE constraint_type IN ('R') AND OWNER = '')
+ LOOP
+ EXECUTE IMMEDIATE 'ALTER TABLE ' || c.table_name || ' DISABLE CONSTRAINT ' || c.constraint_name;
+ END LOOP;
+ END;
/
- ```
+ ```
+
+ {{% /tab %}}
+
+ {{% tab header="PostgreSQL" %}}
+
+ Use the following PL/SQL commands to disable triggers, and drop foreign-key constraints on the source:
+
+ ```sql
+ --disable triggers
+ DO $$
+ DECLARE
+ r RECORD;
+ BEGIN
+ FOR r IN
+ SELECT table_schema, '"' || table_name || '"' AS t_name
+ FROM information_schema.tables
+ WHERE table_type = 'BASE TABLE'
+ AND table_schema IN ()
+ LOOP
+ EXECUTE 'ALTER TABLE ' || r.table_schema || '.' || r.t_name || ' DISABLE TRIGGER ALL';
+ END LOOP;
+ END $$;
+ --- SCHEMA_LIST used is a comma-separated list of schemas, for example, SCHEMA_LIST 'abc','public', 'xyz'.
+
+ --drop referential constraints
+ DO $$
+ DECLARE
+ fk RECORD;
+ BEGIN
+ FOR fk IN
+ SELECT conname, conrelid::regclass AS table_name
+ FROM pg_constraint
+ JOIN pg_class ON conrelid = pg_class.oid
+ JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace
+ WHERE contype = 'f'
+ AND pg_namespace.nspname IN ()
+ LOOP
+ EXECUTE 'ALTER TABLE ' || fk.table_name || ' DROP CONSTRAINT ' || fk.conname;
+ END LOOP;
+ END $$;
+ --- SCHEMA_LIST used is a comma-separated list of schemas, for example, SCHEMA_LIST 'abc','public', 'xyz'.
+
+ ```
+
+ {{% /tab %}}
+
+{{< /tabpane >}}
### Cutover to the source (Optional)
@@ -709,28 +1246,63 @@ Perform the following steps as part of the cutover process:
1. Re-enable triggers and foreign-key constraints on the source database using the following PL/SQL commands on the source schema as a privileged user:
- ```sql
- --enable triggers
- BEGIN
- FOR R IN (SELECT owner, object_name FROM all_objects WHERE owner=UPPER('') and object_type ='TABLE' MINUS SELECT owner, table_name from all_nested_tables where owner = UPPER(''))
- LOOP
- EXECUTE IMMEDIATE 'ALTER TABLE '||R.owner||'."'||R.object_name||'" ENABLE ALL TRIGGERS';
- END LOOP;
- END;
+{{< tabpane text=true >}}
+
+ {{% tab header="Oracle" %}}
+
+ ```sql
+ --enable triggers
+ BEGIN
+ FOR R IN (SELECT owner, object_name FROM all_objects WHERE owner=UPPER('') and object_type ='TABLE' MINUS SELECT owner, table_name from all_nested_tables where owner = UPPER(''))
+ LOOP
+ EXECUTE IMMEDIATE 'ALTER TABLE '||R.owner||'."'||R.object_name||'" ENABLE ALL TRIGGERS';
+ END LOOP;
+ END;
/
--enable referential constraints
- BEGIN
- FOR c IN (SELECT table_name, constraint_name
- FROM user_constraints
- WHERE constraint_type IN ('R') AND OWNER = '' )
- LOOP
- EXECUTE IMMEDIATE 'ALTER TABLE ' || c.table_name || ' ENABLE CONSTRAINT ' || c.constraint_name;
- END LOOP;
- END;
+ BEGIN
+ FOR c IN (SELECT table_name, constraint_name
+ FROM user_constraints
+ WHERE constraint_type IN ('R') AND OWNER = '' )
+ LOOP
+ EXECUTE IMMEDIATE 'ALTER TABLE ' || c.table_name || ' ENABLE CONSTRAINT ' || c.constraint_name;
+ END LOOP;
+ END;
/
- ```
+ ```
+
+ {{% /tab %}}
+
+ {{% tab header="PostgreSQL" %}}
+
+ Use the following PL/SQL to enable the triggers and create foreign key constraints back before using the source again.
+
+ ```sql
+ --disable triggers
+ DO $$
+ DECLARE
+ r RECORD;
+ BEGIN
+ FOR r IN
+ SELECT table_schema, '"' || table_name || '"' AS t_name
+ FROM information_schema.tables
+ WHERE table_type = 'BASE TABLE'
+ AND table_schema IN ()
+ LOOP
+ EXECUTE 'ALTER TABLE ' || r.table_schema || '.' || r.t_name || ' ENABLE TRIGGER ALL';
+ END LOOP;
+ END $$;
+ --- SCHEMA_LIST used is a comma-separated list of schemas, for example, SCHEMA_LIST 'abc','public', 'xyz'.
+
+ --create referential constraints
+ --you can use schema dump from source which is use to import schema on target YugabyteDB (with the modifications if made in schema migration phase), one copy of the pure form of that dump is stored in `$EXPORT_DIR/temp/schema.sql`.
+ ```
+
+ {{% /tab %}}
+
+{{< /tabpane >}}
1. Verify your migration. After the schema and data import is complete, the automated part of the database migration process is considered complete. You should manually run validation queries on both the source and target databases to ensure that the data is correctly migrated. A sample query to validate the databases can include checking the row count of each table.
diff --git a/docs/content/preview/yugabyte-voyager/migrate/live-fall-forward.md b/docs/content/preview/yugabyte-voyager/migrate/live-fall-forward.md
index 379a9e499b6c..1c759a31c760 100644
--- a/docs/content/preview/yugabyte-voyager/migrate/live-fall-forward.md
+++ b/docs/content/preview/yugabyte-voyager/migrate/live-fall-forward.md
@@ -382,9 +382,10 @@ Create a new database user, and assign the necessary user permissions.
1. Check the replica identity using the following query:
```sql
- SELECT relname, relreplident
- FROM pg_class
- WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = '') AND relkind = 'r';
+ SELECT n.nspname, relname, relreplident
+ FROM pg_class c JOIN pg_namespace n on c.relnamespace = n.oid
+ WHERE n.nspname in () and relkind = 'r';
+ --- SCHEMA_LIST used is a comma-separated list of schemas, for example, SCHEMA_LIST 'abc','public', 'xyz'.
```
1. Change the replica identity of all tables if the tables have an identity other than FULL (`f`), using the following query:
@@ -392,13 +393,14 @@ Create a new database user, and assign the necessary user permissions.
```sql
DO $$
DECLARE
- table_name_var text;
+ r Record;
BEGIN
- FOR table_name_var IN (SELECT table_name FROM information_schema.tables WHERE table_schema = '' AND table_type = 'BASE TABLE')
+ FOR r IN (SELECT table_schema, '"' || table_name || '"' as t_name FROM information_schema.tables WHERE table_schema IN () AND table_type = 'BASE TABLE')
LOOP
- EXECUTE 'ALTER TABLE ' || table_name_var || ' REPLICA IDENTITY FULL';
+ EXECUTE 'ALTER TABLE ' || r.table_schema || '.' || r.t_name || ' REPLICA IDENTITY FULL';
END LOOP;
END $$;
+ --- SCHEMA_LIST used is a comma-separated list of schemas, for example, SCHEMA_LIST 'abc','public', 'xyz'.
```
1. Create user `ybvoyager` for the migration using the following command:
@@ -454,13 +456,14 @@ Create a new database user, and assign the necessary user permissions.
```sql
DO $$
DECLARE
- cur_table text;
+ r Record;
BEGIN
- FOR cur_table IN (SELECT table_name FROM information_schema.tables WHERE table_schema = '')
+ FOR r IN (SELECT table_schema, '"' || table_name || '"' as t_name FROM information_schema.tables WHERE table_schema IN ())
LOOP
- EXECUTE 'ALTER TABLE ' || cur_table || ' OWNER TO replication_group';
+ EXECUTE 'ALTER TABLE ' || r.table_schema || '.' || r.t_name || ' OWNER TO replication_group';
END LOOP;
END $$;
+ --- SCHEMA_LIST used is a comma-separated list of schemas, for example, SCHEMA_LIST 'abc','public', 'xyz'.
```
1. Grant `CREATE` privilege on the source database to `ybvoyager` as follows:
@@ -485,12 +488,13 @@ Create a new database user, and assign the necessary user permissions.
1. Check that the replica identity is FULL (`f`) for all tables on the database.
- 1. Check the Replica identity for all the tables on the database as follows:
+ 1. Check the replica identity using the following query:
```sql
- SELECT relname, relreplident
- FROM pg_class
- WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = '') AND relkind = 'r';
+ SELECT n.nspname, relname, relreplident
+ FROM pg_class c JOIN pg_namespace n on c.relnamespace = n.oid
+ WHERE n.nspname in () and relkind = 'r';
+ --- SCHEMA_LIST used is a comma-separated list of schemas, for example, SCHEMA_LIST 'abc','public', 'xyz'.
```
1. Change the replica identity of all tables if the tables have an identity other than FULL (`f`), using the following query:
@@ -498,13 +502,14 @@ Create a new database user, and assign the necessary user permissions.
```sql
DO $$
DECLARE
- table_name_var text;
+ r Record;
BEGIN
- FOR table_name_var IN (SELECT table_name FROM information_schema.tables WHERE table_schema = '' AND table_type = 'BASE TABLE')
+ FOR r IN (SELECT table_schema, '"' || table_name || '"' as t_name FROM information_schema.tables WHERE table_schema IN () AND table_type = 'BASE TABLE')
LOOP
- EXECUTE 'ALTER TABLE ' || table_name_var || ' REPLICA IDENTITY FULL';
+ EXECUTE 'ALTER TABLE ' || r.table_schema || '.' || r.t_name || ' REPLICA IDENTITY FULL';
END LOOP;
END $$;
+ --- SCHEMA_LIST used is a comma-separated list of schemas, for example, SCHEMA_LIST 'abc','public', 'xyz'.
```
1. Create user `ybvoyager` for the migration using the following command:
@@ -554,18 +559,19 @@ Create a new database user, and assign the necessary user permissions.
GRANT replication_group TO ybvoyager;
```
-1. Transfer ownership of the tables to the role as follows:
+1. Transfer ownership of the tables to the role `replication_group` as follows:
```sql
DO $$
DECLARE
- cur_table text;
+ r Record;
BEGIN
- FOR cur_table IN (SELECT table_name FROM information_schema.tables WHERE table_schema = '')
+ FOR r IN (SELECT table_schema, '"' || table_name || '"' as t_name FROM information_schema.tables WHERE table_schema IN ())
LOOP
- EXECUTE 'ALTER TABLE ' || cur_table || ' OWNER TO replication_group';
+ EXECUTE 'ALTER TABLE ' || r.table_schema || '.' || r.t_name || ' OWNER TO replication_group';
END LOOP;
END $$;
+ --- SCHEMA_LIST used is a comma-separated list of schemas, for example, SCHEMA_LIST 'abc','public', 'xyz'.
```
1. Grant `CREATE` privilege on the source database to `ybvoyager` as follows:
@@ -914,10 +920,9 @@ Because the presence of indexes and triggers can slow down the rate at which dat
Manually, set up the source-replica database with the same schema as that of the source database with the following considerations:
-- The table names on the source-replica database need to be case insensitive (YB Voyager currently does not support case-sensitivity).
- Do not create indexes and triggers at the schema setup stage, as it will degrade performance of importing data into the source-replica database. Create them later as described in [cutover to source-replica](#cutover-to-source-replica-optional).
-- Disable foreign key constraints and check constraints on the source-replica database.
+- For Oracle migrations, disable foreign key constraints and check constraints on the source-replica database.
### Export data from source
@@ -1053,25 +1058,7 @@ yb-voyager import schema --export-dir \
--post-snapshot-import true
```
-If any of the CREATE INDEX DDLs fail in the preceding command, drop the INVALID indexes on the target database using:
-
-```sql
-DO $$
-DECLARE
- index_name text;
-BEGIN
- FOR index_name IN (
- SELECT indexrelid::regclass
- FROM pg_index
- WHERE indisvalid = false
- )
- LOOP
- EXECUTE 'DROP INDEX ' || index_name;
- END LOOP;
-END $$;
-```
-
-and then retry the command with the argument `--ignore-exist` to ignore already created indexes and create new ones instead.
+If any of the CREATE INDEX DDLs fail in the preceding command, retry the command with the argument `--ignore-exist` to ignore already created indexes and create new ones instead.
```sh
# Replace the argument values with those applicable for your migration.
diff --git a/docs/content/preview/yugabyte-voyager/migrate/live-migrate.md b/docs/content/preview/yugabyte-voyager/migrate/live-migrate.md
index d56ed9e857bc..113902638d01 100644
--- a/docs/content/preview/yugabyte-voyager/migrate/live-migrate.md
+++ b/docs/content/preview/yugabyte-voyager/migrate/live-migrate.md
@@ -368,9 +368,10 @@ Create a new database user, and assign the necessary user permissions.
1. Check the replica identity using the following query:
```sql
- SELECT relname, relreplident
- FROM pg_class
- WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = '') AND relkind = 'r';
+ SELECT n.nspname, relname, relreplident
+ FROM pg_class c JOIN pg_namespace n on c.relnamespace = n.oid
+ WHERE n.nspname in () and relkind = 'r';
+ --- SCHEMA_LIST used is a comma-separated list of schemas, for example, SCHEMA_LIST 'abc','public', 'xyz'.
```
1. Change the replica identity of all tables if the tables have an identity other than FULL (`f`), using the following query:
@@ -378,13 +379,14 @@ Create a new database user, and assign the necessary user permissions.
```sql
DO $$
DECLARE
- table_name_var text;
+ r Record;
BEGIN
- FOR table_name_var IN (SELECT table_name FROM information_schema.tables WHERE table_schema = '' AND table_type = 'BASE TABLE')
+ FOR r IN (SELECT table_schema, '"' || table_name || '"' as t_name FROM information_schema.tables WHERE table_schema IN () AND table_type = 'BASE TABLE')
LOOP
- EXECUTE 'ALTER TABLE ' || table_name_var || ' REPLICA IDENTITY FULL';
+ EXECUTE 'ALTER TABLE ' || r.table_schema || '.' || r.t_name || ' REPLICA IDENTITY FULL';
END LOOP;
END $$;
+ --- SCHEMA_LIST used is a comma-separated list of schemas, for example, SCHEMA_LIST 'abc','public', 'xyz'.
```
1. Create user `ybvoyager` for the migration using the following command:
@@ -433,18 +435,19 @@ Create a new database user, and assign the necessary user permissions.
GRANT replication_group TO ybvoyager;
```
-1. Transfer ownership of the tables to the role as follows:
+1. Transfer ownership of the tables to the role `replication_group` as follows:
```sql
DO $$
DECLARE
- cur_table text;
+ r Record;
BEGIN
- FOR cur_table IN (SELECT table_name FROM information_schema.tables WHERE table_schema = '')
+ FOR r IN (SELECT table_schema, '"' || table_name || '"' as t_name FROM information_schema.tables WHERE table_schema IN ())
LOOP
- EXECUTE 'ALTER TABLE ' || cur_table || ' OWNER TO replication_group';
+ EXECUTE 'ALTER TABLE ' || r.table_schema || '.' || r.t_name || ' OWNER TO replication_group';
END LOOP;
END $$;
+ --- SCHEMA_LIST used is a comma-separated list of schemas, for example, SCHEMA_LIST 'abc','public', 'xyz'.
```
1. Grant `CREATE` privilege on the source database to `ybvoyager` as follows:
@@ -471,12 +474,13 @@ Create a new database user, and assign the necessary user permissions.
1. Check that the replica identity is "FULL" for all tables on the database.
- 1. Check the replica identity for all the tables on the database using the following query:
+ 1. Check the replica identity using the following query:
```sql
- SELECT relname, relreplident
- FROM pg_class
- WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = '') AND relkind = 'r';
+ SELECT n.nspname, relname, relreplident
+ FROM pg_class c JOIN pg_namespace n on c.relnamespace = n.oid
+ WHERE n.nspname in () and relkind = 'r';
+ --- SCHEMA_LIST used is a comma-separated list of schemas, for example, SCHEMA_LIST 'abc','public', 'xyz'.
```
1. Change the replica identity of all tables if the tables have an identity other than FULL (`f`), using the following query:
@@ -484,13 +488,14 @@ Create a new database user, and assign the necessary user permissions.
```sql
DO $$
DECLARE
- table_name_var text;
+ r Record;
BEGIN
- FOR table_name_var IN (SELECT table_name FROM information_schema.tables WHERE table_schema = '' AND table_type = 'BASE TABLE')
+ FOR r IN (SELECT table_schema, '"' || table_name || '"' as t_name FROM information_schema.tables WHERE table_schema IN () AND table_type = 'BASE TABLE')
LOOP
- EXECUTE 'ALTER TABLE ' || table_name_var || ' REPLICA IDENTITY FULL';
+ EXECUTE 'ALTER TABLE ' || r.table_schema || '.' || r.t_name || ' REPLICA IDENTITY FULL';
END LOOP;
END $$;
+ --- SCHEMA_LIST used is a comma-separated list of schemas, for example, SCHEMA_LIST 'abc','public', 'xyz'.
```
1. Create user `ybvoyager` for the migration using the following command:
@@ -540,18 +545,19 @@ Create a new database user, and assign the necessary user permissions.
GRANT replication_group TO ybvoyager;
```
-1. Transfer ownership of the tables to the role as follows:
+1. Transfer ownership of the tables to the role `replication_group` as follows:
```sql
DO $$
DECLARE
- cur_table text;
+ r Record;
BEGIN
- FOR cur_table IN (SELECT table_name FROM information_schema.tables WHERE table_schema = '')
+ FOR r IN (SELECT table_schema, '"' || table_name || '"' as t_name FROM information_schema.tables WHERE table_schema IN ())
LOOP
- EXECUTE 'ALTER TABLE ' || cur_table || ' OWNER TO replication_group';
+ EXECUTE 'ALTER TABLE ' || r.table_schema || '.' || r.t_name || ' OWNER TO replication_group';
END LOOP;
END $$;
+ --- SCHEMA_LIST used is a comma-separated list of schemas, for example, SCHEMA_LIST 'abc','public', 'xyz'.
```
1. Grant `CREATE` privilege on the source database to `ybvoyager` as follows:
@@ -896,25 +902,7 @@ yb-voyager import schema --export-dir \
--post-snapshot-import true
```
-If any of the CREATE INDEX DDLs fail in the preceding command, drop the INVALID indexes on the target database using:
-
-```sql
-DO $$
-DECLARE
- index_name text;
-BEGIN
- FOR index_name IN (
- SELECT indexrelid::regclass
- FROM pg_index
- WHERE indisvalid = false
- )
- LOOP
- EXECUTE 'DROP INDEX ' || index_name;
- END LOOP;
-END $$;
-```
-
-and then retry the command with the argument `--ignore-exist` to ignore already created indexes and create new ones instead.
+If any of the CREATE INDEX DDLs fail in the preceding command, retry the command with the argument `--ignore-exist` to ignore already created indexes and create new ones instead.
```sh
# Replace the argument values with those applicable for your migration.
@@ -1018,6 +1006,4 @@ Refer to [end migration](../../reference/end-migration/) for more details on the
- Truncating a table on the source database is not taken into account; you need to manually truncate tables on your YugabyteDB cluster.
- Some Oracle data types are unsupported - User Defined Types (UDT), NCHAR, NVARCHAR, VARRAY, BLOB, CLOB, and NCLOB.
- Case-sensitive table names or column names are partially supported. YugabyteDB Voyager converts them to case-insensitive names. For example, an "Accounts" table in a source Oracle database is migrated as `accounts` (case-insensitive) to a YugabyteDB database.
-- Reserved keywords such as "group", "user", and so on, as table names, or column names are unsupported.
- Tables or column names having more than 30 characters are not supported.
-- For PostgreSQL migrations, multiple schemas, partition tables, and case-sensitive tables are unsupported.
diff --git a/docs/content/preview/yugabyte-voyager/migrate/rds-oracle.md b/docs/content/preview/yugabyte-voyager/migrate/rds-oracle.md
deleted file mode 100644
index 491a4619c5c5..000000000000
--- a/docs/content/preview/yugabyte-voyager/migrate/rds-oracle.md
+++ /dev/null
@@ -1,173 +0,0 @@
-
-
-1. Ensure that your database log_mode is `archivelog` as follows:
-
- ```sql
- SELECT LOG_MODE FROM V$DATABASE;
- ```
-
- ```output
- LOG_MODE
- ------------
- ARCHIVELOG
- ```
-
- If log_mode is NOARCHIVELOG (that is, not enabled), run the following command:
-
- ```sql
- exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',24);
- ```
-
-1. Connect to your database as an admin user, and create the tablespaces as follows:
-
- ```sql
- CREATE TABLESPACE logminer_tbs DATAFILE SIZE 25M AUTOEXTEND ON MAXSIZE UNLIMITED;
- ```
-
-1. Run the following commands connected to the admin or privileged user:
-
- ```sql
- CREATE USER ybvoyager IDENTIFIED BY password
- DEFAULT TABLESPACE logminer_tbs
- QUOTA UNLIMITED ON logminer_tbs;
-
- GRANT CREATE SESSION TO YBVOYAGER;
- begin rdsadmin.rdsadmin_util.grant_sys_object(
- p_obj_name => 'V_$DATABASE',
- p_grantee => 'YBVOYAGER',
- p_privilege => 'SELECT');
- end;
- /
-
- GRANT FLASHBACK ANY TABLE TO YBVOYAGER;
- GRANT SELECT ANY TABLE TO YBVOYAGER;
- GRANT SELECT_CATALOG_ROLE TO YBVOYAGER;
- GRANT EXECUTE_CATALOG_ROLE TO YBVOYAGER;
- GRANT SELECT ANY TRANSACTION TO YBVOYAGER;
- GRANT LOGMINING TO YBVOYAGER;
-
- GRANT CREATE TABLE TO YBVOYAGER;
- GRANT LOCK ANY TABLE TO YBVOYAGER;
- GRANT CREATE SEQUENCE TO YBVOYAGER;
-
-
- begin rdsadmin.rdsadmin_util.grant_sys_object(
- p_obj_name => 'DBMS_LOGMNR',
- p_grantee => 'YBVOYAGER',
- p_privilege => 'EXECUTE',
- p_grant_option => true);
- end;
- /
-
- begin rdsadmin.rdsadmin_util.grant_sys_object(
- p_obj_name => 'DBMS_LOGMNR_D',
- p_grantee => 'YBVOYAGER',
- p_privilege => 'EXECUTE',
- p_grant_option => true);
- end;
- /
-
- begin rdsadmin.rdsadmin_util.grant_sys_object(
- p_obj_name => 'V_$LOG',
- p_grantee => 'YBVOYAGER',
- p_privilege => 'SELECT');
- end;
- /
-
- begin
- rdsadmin.rdsadmin_util.grant_sys_object(
- p_obj_name => 'V_$LOG_HISTORY',
- p_grantee => 'YBVOYAGER',
- p_privilege => 'SELECT');
- end;
- /
-
- begin
- rdsadmin.rdsadmin_util.grant_sys_object(
- p_obj_name => 'V_$LOGMNR_LOGS',
- p_grantee => 'YBVOYAGER',
- p_privilege => 'SELECT');
- end;
- /
-
- begin
- rdsadmin.rdsadmin_util.grant_sys_object(
- p_obj_name => 'V_$LOGMNR_CONTENTS',
- p_grantee => 'YBVOYAGER',
- p_privilege => 'SELECT');
- end;
- /
-
- begin
- rdsadmin.rdsadmin_util.grant_sys_object(
- p_obj_name => 'V_$LOGMNR_PARAMETERS',
- p_grantee => 'YBVOYAGER',
- p_privilege => 'SELECT');
- end;
- /
-
- begin
- rdsadmin.rdsadmin_util.grant_sys_object(
- p_obj_name => 'V_$LOGFILE',
- p_grantee => 'YBVOYAGER',
- p_privilege => 'SELECT');
- end;
- /
-
- begin
- rdsadmin.rdsadmin_util.grant_sys_object(
- p_obj_name => 'V_$ARCHIVED_LOG',
- p_grantee => 'YBVOYAGER',
- p_privilege => 'SELECT');
- end;
- /
-
- begin
- rdsadmin.rdsadmin_util.grant_sys_object(
- p_obj_name => 'V_$ARCHIVE_DEST_STATUS',
- p_grantee => 'YBVOYAGER',
- p_privilege => 'SELECT');
- end;
- /
-
- begin
- rdsadmin.rdsadmin_util.grant_sys_object(
- p_obj_name => 'V_$TRANSACTION',
- p_grantee => 'YBVOYAGER',
- p_privilege => 'SELECT');
- end;
- /
-
- begin
- rdsadmin.rdsadmin_util.grant_sys_object(
- p_obj_name => 'V_$MYSTAT',
- p_grantee => 'YBVOYAGER',
- p_privilege => 'SELECT');
- end;
- /
-
- begin
- rdsadmin.rdsadmin_util.grant_sys_object(
- p_obj_name => 'V_$STATNAME',
- p_grantee => 'YBVOYAGER',
- p_privilege => 'SELECT');
- end;
- /
- ```
-
-1. Enable supplemental logging in the database as follows:
-
- ```sql
- exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');
-
- begin
- rdsadmin.rdsadmin_util.alter_supplemental_logging(
- p_action => 'ADD',
- p_type => 'ALL');
- end;
- /
- ```
diff --git a/docs/content/preview/yugabyte-voyager/migrate/standalone-oracle.md b/docs/content/preview/yugabyte-voyager/migrate/standalone-oracle.md
deleted file mode 100644
index ce7eafe185c6..000000000000
--- a/docs/content/preview/yugabyte-voyager/migrate/standalone-oracle.md
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-1. Ensure that your database log_mode is `archivelog` as follows:
-
- ```sql
- SELECT LOG_MODE FROM V$DATABASE;
- ```
-
- ```output
- LOG_MODE
- ------------
- ARCHIVELOG
- ```
-
- If log_mode is NOARCHIVELOG (that is, not enabled), run the following command:
-
- ```sql
- sqlplus /nolog
- SQL>alter system set db_recovery_file_dest_size = 10G;
- SQL>alter system set db_recovery_file_dest = '/oradata/recovery_area' scope=spfile;
- SQL> connect / as sysdba
- SQL> Shutdown immediate
- SQL> Startup mount
- SQL> Alter database archivelog;
- SQL> Alter database open;
- ```
-
-1. Create the tablespaces as follows:
-
- 1. Connect to Pluggable database (PDB) as sysdba and run the following command:
-
- ```sql
- CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/logminer_tbs.dbf'
- SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
- ```
-
- 1. Connect to Container database (CDB) as sysdba and run the following command:
-
- ```sql
- CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/ORCLCDB/logminer_tbs.dbf'
- SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
- ```
-
-1. Run the following commands from CDB as sysdba:
-
- ```sql
- CREATE USER c##ybvoyager IDENTIFIED BY password
- DEFAULT TABLESPACE logminer_tbs
- QUOTA UNLIMITED ON logminer_tbs
- CONTAINER=ALL;
-
- GRANT CREATE SESSION TO c##ybvoyager CONTAINER=ALL;
- GRANT SET CONTAINER TO c##ybvoyager CONTAINER=ALL;
- GRANT SELECT ON V_$DATABASE to c##ybvoyager CONTAINER=ALL;
- GRANT FLASHBACK ANY TABLE TO c##ybvoyager CONTAINER=ALL;
- GRANT SELECT ANY TABLE TO c##ybvoyager CONTAINER=ALL;
- GRANT SELECT_CATALOG_ROLE TO c##ybvoyager CONTAINER=ALL;
- GRANT EXECUTE_CATALOG_ROLE TO c##ybvoyager CONTAINER=ALL;
- GRANT SELECT ANY TRANSACTION TO c##ybvoyager CONTAINER=ALL;
- GRANT LOGMINING TO c##ybvoyager CONTAINER=ALL;
-
- GRANT CREATE TABLE TO c##ybvoyager CONTAINER=ALL;
- GRANT LOCK ANY TABLE TO c##ybvoyager CONTAINER=ALL;
- GRANT CREATE SEQUENCE TO c##ybvoyager CONTAINER=ALL;
-
- GRANT EXECUTE ON DBMS_LOGMNR TO c##ybvoyager CONTAINER=ALL;
- GRANT EXECUTE ON DBMS_LOGMNR_D TO c##ybvoyager CONTAINER=ALL;
-
- GRANT SELECT ON V_$LOG TO c##ybvoyager CONTAINER=ALL;
- GRANT SELECT ON V_$LOG_HISTORY TO c##ybvoyager CONTAINER=ALL;
- GRANT SELECT ON V_$LOGMNR_LOGS TO c##ybvoyager CONTAINER=ALL;
- GRANT SELECT ON V_$LOGMNR_CONTENTS TO c##ybvoyager CONTAINER=ALL;
- GRANT SELECT ON V_$LOGMNR_PARAMETERS TO c##ybvoyager CONTAINER=ALL;
- GRANT SELECT ON V_$LOGFILE TO c##ybvoyager CONTAINER=ALL;
- GRANT SELECT ON V_$ARCHIVED_LOG TO c##ybvoyager CONTAINER=ALL;
- GRANT SELECT ON V_$ARCHIVE_DEST_STATUS TO c##ybvoyager CONTAINER=ALL;
- GRANT SELECT ON V_$TRANSACTION TO c##ybvoyager CONTAINER=ALL;
-
- GRANT SELECT ON V_$MYSTAT TO c##ybvoyager CONTAINER=ALL;
- GRANT SELECT ON V_$STATNAME TO c##ybvoyager CONTAINER=ALL;
- ```
-
-1. Enable supplemental logging in the database as follows:
-
- ```sql
- ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
- ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
- ```
diff --git a/docs/content/preview/yugabyte-voyager/overview.md b/docs/content/preview/yugabyte-voyager/overview.md
index a03387b8dcac..c21158a2ec28 100644
--- a/docs/content/preview/yugabyte-voyager/overview.md
+++ b/docs/content/preview/yugabyte-voyager/overview.md
@@ -35,7 +35,7 @@ YugabyteDB Voyager has the following features:
- Parallelism of data across tables.
- Support for direct data import from CSV or TEXT format files present on local disk or on any cloud storage.
- Live migration of Oracle databases with fall-forward and fall-back. {{}}
-- Live migration of PostgreSQL databases with fall-forward. {{}}
+- Live migration of PostgreSQL databases with fall-forward and fall-back. {{}}
## Migration types
@@ -44,7 +44,7 @@ You can perform migration by choosing one of the following options:
- [Offline migration](../migrate/migrate-steps/) - Take your applications offline to perform the migration.
- [Live migration](../migrate/live-migrate/) {{}} - Migrate your data while your application is running (currently Oracle and PostgreSQL only).
- [Live migration with fall-forward](../migrate/live-fall-forward/) {{}} - Fall forward to the source-replica database for your live migration (currently Oracle and PostgreSQL only).
-- [Live migration with fall-back](../migrate/live-fall-back/) {{}} - Fall back to the source database for your live migration (currently Oracle only).
+- [Live migration with fall-back](../migrate/live-fall-back/) {{}} - Fall back to the source database for your live migration (currently Oracle and PostgreSQL only).
## Source databases
@@ -52,7 +52,7 @@ YugabyteDB Voyager supports migrating schema and data from your existing RDBMS,
| Source database type | Migration type | Supported versions and flavors | Migration demo videos |
| :--------------------| :------------- |:----------------------------------- | :--------------- |
-| PostgreSQL | Offline and Live| PostgreSQL 9.x - 11.x
[Amazon Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)
[Amazon RDS for PostgreSQL](https://aws.amazon.com/rds/postgresql/)
[Cloud SQL for PostgreSQL](https://cloud.google.com/sql/docs/postgres)
[Azure Database for PostgreSQL](https://azure.microsoft.com/en-ca/services/postgresql/) | [Migrating from PostgreSQL to YugabyteDB](https://www.youtube.com/watch?v=GXjttCbc4dw) |
+| PostgreSQL | Offline and Live | PostgreSQL 9.x - 11.x
[Amazon Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)
[Amazon RDS for PostgreSQL](https://aws.amazon.com/rds/postgresql/)
[Cloud SQL for PostgreSQL](https://cloud.google.com/sql/docs/postgres)
[Azure Database for PostgreSQL](https://azure.microsoft.com/en-ca/services/postgresql/) | [Migrating from PostgreSQL to YugabyteDB](https://www.youtube.com/watch?v=GXjttCbc4dw) |
| MySQL | Offline | MySQL 8.x
MariaDB
[Amazon Aurora MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraMySQL.html)
[Amazon RDS for MySQL](https://aws.amazon.com/rds/mysql/)
[Cloud SQL for MySQL](https://cloud.google.com/sql/docs/mysql) | [Migrating from MySQL to YugabyteDB](https://www.youtube.com/watch?v=tLs0043_z5E) |
| Oracle | Offline and Live |Oracle 11g - 19c
[Amazon RDS for Oracle](https://aws.amazon.com/rds/oracle/) | [Migrating from Oracle to YugabyteDB](https://www.youtube.com/watch?v=Bh2Wz537TGM) |
@@ -62,9 +62,9 @@ The following table shows the target database support for each migration type.
| Migration type | Supported YugabyteDB Versions | Supported products |
| :------------- | :--------------------------- | ------------------ |
-| Offline | v2.16
v2.18
v2.19 | [YugabyteDB](../../deploy/)
[YugabyteDB Anywhere](../../yugabyte-platform/create-deployments/)
[YugabyteDB Managed](../../yugabyte-cloud/cloud-basics/) |
-| Live | v2.16
v2.18
v2.19 | [YugabyteDB](../../deploy/)
[YugabyteDB Anywhere](../../yugabyte-platform/create-deployments/)
[YugabyteDB Managed](../../yugabyte-cloud/cloud-basics/) |
-| Live with fall-forward
Live with fall-back | v2.18.2.x | [YugabyteDB](../../deploy/)
[YugabyteDB Anywhere](../../yugabyte-platform/create-deployments/) |
+| Offline | v2.18.5 or later
v2.20.1 or later
v2.21 | [YugabyteDB](../../deploy/)
[YugabyteDB Anywhere](../../yugabyte-platform/create-deployments/)
[YugabyteDB Managed](../../yugabyte-cloud/cloud-basics/) |
+| Live | v2.18.5 or later
v2.20.1 or later
v2.21| [YugabyteDB](../../deploy/)
[YugabyteDB Anywhere](../../yugabyte-platform/create-deployments/)
[YugabyteDB Managed](../../yugabyte-cloud/cloud-basics/) |
+| Live with fall-forward
Live with fall-back | v2.18.8 or later
v2.20.4 or later | [YugabyteDB](../../deploy/)
[YugabyteDB Anywhere](../../yugabyte-platform/create-deployments/) |
## Learn more
diff --git a/docs/content/preview/yugabyte-voyager/reference/assess-migration.md b/docs/content/preview/yugabyte-voyager/reference/assess-migration.md
new file mode 100644
index 000000000000..8a2c74bc9499
--- /dev/null
+++ b/docs/content/preview/yugabyte-voyager/reference/assess-migration.md
@@ -0,0 +1,56 @@
+---
+title: Assess migration
+headcontent: yb-voyager assess-migration
+linkTitle: Assess migration
+description: YugabyteDB Voyager assess migration reference
+menu:
+ preview_yugabyte-voyager:
+ identifier: assess-migration-voyager
+ parent: yb-voyager-cli
+ weight: 1
+techPreview: /preview/releases/versioning/#feature-availability
+type: docs
+---
+
+[Assess the migration](../../migrate/assess-migration) from source (PostgreSQL) database to YugabyteDB.
+
+## Syntax
+
+```text
+Usage: yb-voyager assess-migration [ ... ]
+```
+
+### Arguments
+
+The valid *arguments* for assess migration are described in the following table:
+
+| Argument | Description/valid options |
+| :------- | :------------------------ |
+| ‑‑assessment‑metadata‑dir | Directory path where assessment metadata like source database metadata and statistics are stored. Optional flag, if not provided, it will be assumed to be present at default path inside the export directory. |
+| -e, --export-dir | Path to the export directory. This directory is a workspace used to store exported schema DDL files, export data files, migration state, and a log file. |
+| -h, --help | Command line help. |
+| --iops-capture-interval | Interval (in seconds) at which Voyager will gather IOPS metadata from the source database for the given schema(s).
Default: 120 |
+| --send-diagnostics | Enable or disable sending [diagnostics](../../diagnostics-report/) information to Yugabyte.
Default: true
Accepted parameters: true, false, yes, no, 0, 1 |
+| --source-db-host | Domain name or IP address of the machine on which the source database server is running.
Default: localhost |
+| --source-db-name | Source database name. |
+| ‑‑source‑db‑password | Password to connect to the source database. If you don't provide a password via the CLI during any migration phase, yb-voyager will prompt you at runtime for a password. Alternatively, you can also specify the password by setting the environment variable `SOURCE_DB_PASSWORD`. If the password contains special characters that are interpreted by the shell (for example, # and $), enclose it in single quotes. |
+| --source-db-port | Source database server port number.
Default: PostgreSQL(5432) |
+| --source-db-schema | Source schema name(s) to export. In case of multiple schemas, use a comma-separated list of schemas: `schema1,schema2,schema3`. |
+| --source-db-type | Source database type (postgresql). |
+| --source-db-user | Username of the source database. |
+| [--source-ssl-cert](../yb-voyager-cli/#ssl-connectivity) | Path to a file containing the certificate which is part of the SSL `` pair. |
+| [--source-ssl-crl](../yb-voyager-cli/#ssl-connectivity) | Path of the file containing source SSL Root Certificate Revocation List (CRL). |
+| [--source-ssl-key](../yb-voyager-cli/#ssl-connectivity) | Path to a file containing the key which is part of the SSL `` pair.|
+| [--source-ssl-mode](../yb-voyager-cli/#ssl-connectivity) | One of `disable`, `allow`, `prefer`(default), `require`, `verify-ca`, or `verify-full`. |
+| [--source-ssl-root-cert](../yb-voyager-cli/#ssl-connectivity) | Path of the file containing source SSL Root Certificate. |
+| --start-clean | Cleans up the project directory for schema or data files depending on the export command.
Default: false
Accepted parameters: true, false, yes, no, 0, 1. |
+| -y, --yes | Assume answer to all prompts during migration.
Default: false |
+
+## Example
+
+```sh
+yb-voyager assess-migration --source-db-type postgresql \
+ --source-db-host hostname --source-db-user username \
+ --source-db-password password --source-db-name dbname \
+ --source-db-schema schema1,schema2 --export-dir /path/to/export/dir
+```
diff --git a/docs/content/preview/yugabyte-voyager/reference/data-migration/export-data.md b/docs/content/preview/yugabyte-voyager/reference/data-migration/export-data.md
index 331882af7e4e..bd14a67c903c 100644
--- a/docs/content/preview/yugabyte-voyager/reference/data-migration/export-data.md
+++ b/docs/content/preview/yugabyte-voyager/reference/data-migration/export-data.md
@@ -73,7 +73,7 @@ The valid *arguments* for export data are described in the following table:
| [--source-ssl-mode](../../yb-voyager-cli/#ssl-connectivity) | One of `disable`, `allow`, `prefer`(default), `require`, `verify-ca`, or `verify-full`. |
| [--source-ssl-root-cert](../../yb-voyager-cli/#ssl-connectivity) | Path to a file containing SSL certificate authority (CA) certificate(s). |
| --start-clean | Starts a fresh data export after clearing all data from the `data` directory.
Default: false
Accepted parameters: true, false, yes, no, 0, 1 |
-| --table-list | Comma-separated list of the tables to export data. By default, table names in the list are case-insensitive. Enclose names in double quotes ("") to make them case-sensitive.
Table names can also be glob patterns containing wildcard characters, such as an asterisk (*) (matches zero or more characters) or question mark (?) (matches one character). To use a glob pattern for table names, enclose the list in single quotes ('').
For example, `--table-list '"Products", order*'`. |
+| --table-list | Comma-separated list of the tables to export data. Table names can also be glob patterns containing wildcard characters, such as an asterisk (*) (matches zero or more characters) or question mark (?) (matches one character). To use a glob pattern for table names, enclose the list in single quotes ('').
For example, `--table-list '"Products", order*'`. |
| --exclude-table-list | Comma-separated list of the tables to exclude during export. Table names follow the same convention as `--table-list`. |
| --table-list-file-path | Path of the file containing the list of table names (comma-separated or line-separated) to export. Table names use the same convention as `--table-list`. |
| ‑‑exclude‑table‑list‑file‑path | Path of the file containing the list of table names (comma-separated or line-separated) to exclude while exporting data. Table names follow the same convention as `--table-list`. |
@@ -189,7 +189,7 @@ The valid *arguments* for export data from target are described in the following
| -e, ‑‑export‑dir | Path to the export directory. This directory is a workspace used to store exported schema DDL files, export data files, migration state, and a log file.|
| -h, --help | Command line help for synchronize. |
| --send‑diagnostics | Enable or disable sending [diagnostics](../../../diagnostics-report/) information to Yugabyte.
Default: true
Accepted parameters: true, false, yes, no, 0, 1 |
-| --table-list | Comma-separated list of the tables to export data. By default, table names in the list are case-insensitive. Enclose names in double quotes ("") to make them case-sensitive.
Table names can also be glob patterns containing wildcard characters, such as an asterisk (*) (matches zero or more characters) or question mark (?) (matches one character). To use a glob pattern for table names, enclose the list in single quotes ('').
For example, `--table-list '"Products", order*'`. |
+| --table-list | Comma-separated list of the tables to export data. Table names can also be glob patterns containing wildcard characters, such as an asterisk (*) (matches zero or more characters) or question mark (?) (matches one character). To use a glob pattern for table names, enclose the list in single quotes ('').
For example, `--table-list '"Products", order*'`. |
| --exclude-table-list | Comma-separated list of the tables to exclude during export. Table names follow the same convention as `--table-list`. |
| --table‑list‑file‑path | Path of the file containing the list of table names (comma-separated or line-separated) to export. Table names use the same convention as `--table-list`. |
| ‑‑exclude‑table‑list‑file‑path | Path of the file containing the list of table names (comma-separated or line-separated) to exclude while exporting data. Table names follow the same convention as `--table-list`. |
diff --git a/docs/content/preview/yugabyte-voyager/reference/data-migration/import-data.md b/docs/content/preview/yugabyte-voyager/reference/data-migration/import-data.md
index 01ca1dfa9f48..fceb41839309 100644
--- a/docs/content/preview/yugabyte-voyager/reference/data-migration/import-data.md
+++ b/docs/content/preview/yugabyte-voyager/reference/data-migration/import-data.md
@@ -53,7 +53,7 @@ The valid *arguments* for import data are described in the following table:
| --batch-size | Size of batches in the number of rows generated for ingestion during import data.
Default: 20000 rows
Example: `yb-voyager import data ... --batch-size 20000` |
| --disable-pb |Use this argument to disable progress bar or statistics during data import.
Default: false
Accepted parameters: true, false, yes, no, 0, 1 |
| --enable‑upsert | Enable UPSERT mode on target tables while importing data.
Default: true
Usage for disabling the mode: `yb-voyager import data ... --enable-upsert false`
Accepted parameters: true, false, yes, no, 0, 1 |
-| --table-list | Comma-separated list of names of source database tables whose data is to be imported. By default, table names in the list are case-insensitive. Enclose names in double quotes ("") to make them case-sensitive.
Table names can also be glob patterns containing wildcard characters, such as an asterisk (*) (matches zero or more characters) or question mark (?) (matches one character). To use a glob pattern for table names, enclose the list in single quotes ('').
For example, `--table-list '"Products", order*'`.
For example, `--table-list '"Products", order*'`.
This argument is unsupported for live migration.|
+| --table-list | Comma-separated list of names of source database tables whose data is to be imported. Table names can also be glob patterns containing wildcard characters, such as an asterisk (*) (matches zero or more characters) or question mark (?) (matches one character). To use a glob pattern for table names, enclose the list in single quotes ('').
For example, `--table-list '"Products", order*'`.
For example, `--table-list '"Products", order*'`.
This argument is unsupported for live migration.|
| --exclude‑table‑list | Comma-separated list of names of source database tables for which data needs to be excluded during import. Table names follow the same convention as `--table-list`.
This argument is unsupported for live migration. |
| --table-list-file‑path | Path of the file containing the list of names of source database tables (comma separated or line separated) to import. Table names use the same convention as `--table-list`. |
| ‑‑exclude‑table‑list‑file‑path | Path of the file containing the list of names of source database tables (comma separated or line separated) to exclude while importing data of those exported tables. Table names follow the same convention as `--table-list`. |
diff --git a/docs/content/preview/yugabyte-voyager/reference/datatype-mapping-oracle.md b/docs/content/preview/yugabyte-voyager/reference/datatype-mapping-oracle.md
index abad513d9989..43eb4a3f9035 100644
--- a/docs/content/preview/yugabyte-voyager/reference/datatype-mapping-oracle.md
+++ b/docs/content/preview/yugabyte-voyager/reference/datatype-mapping-oracle.md
@@ -33,7 +33,7 @@ The following table includes a list of supported data type mappings for migratin
| NVARCHAR2 | VARCHAR | Unsupported in [Live migration](../../migrate/live-migrate/), or [Live migration with fall-forward](../../migrate/live-fall-forward/) |
| RAW | BYTEA |
| LONG RAW | BYTEA |
-| DATE | DATE |
+| DATE | TIMESTAMP |
| TIMESTAMP WITH TIMEZONE | TIMESTAMP WITH TIMEZONE |
| TIMESTAMP WITH LOCAL TIME ZONE | TIMESTAMP WITH TIMEZONE |
| TIMESTAMP | TIMESTAMP |
diff --git a/docs/content/preview/yugabyte-voyager/reference/schema-migration/export-schema.md b/docs/content/preview/yugabyte-voyager/reference/schema-migration/export-schema.md
index 262abb1747e8..df3084374b3b 100644
--- a/docs/content/preview/yugabyte-voyager/reference/schema-migration/export-schema.md
+++ b/docs/content/preview/yugabyte-voyager/reference/schema-migration/export-schema.md
@@ -25,6 +25,8 @@ The valid *arguments* for export schema are described in the following table:
| Argument | Description/valid options |
| :------- | :------------------------ |
+| --assessment-report-path | Path to the generated assessment report file (JSON format) to be used for applying recommendation to exported schema. |
+| --skip-recommendations | Disable applying recommendations in the exported schema suggested by the migration assessment report.
Default: false
Accepted parameters: true, false, yes, no, 0, 1 |
| --comments‑on‑objects | Enable export of comments associated with database objects.
Default: false
Accepted parameters: true, false, yes, no, 0, 1 |
| -e, --export-dir | Path to the export directory. This directory is a workspace used to store exported schema DDL files, export data files, migration state, and a log file.|
| -h, --help | Command line help for schema. |
diff --git a/docs/content/preview/yugabyte-voyager/reference/yb-voyager-cli.md b/docs/content/preview/yugabyte-voyager/reference/yb-voyager-cli.md
index 3abd61cb91f7..4989442d5696 100644
--- a/docs/content/preview/yugabyte-voyager/reference/yb-voyager-cli.md
+++ b/docs/content/preview/yugabyte-voyager/reference/yb-voyager-cli.md
@@ -51,6 +51,7 @@ yb-voyager version
The list of commands for various phases of migration are as follows:
+- [Assess migration](../../reference/assess-migration)
- [Export schema](../../reference/schema-migration/export-schema/)
- [Analyze schema](../../reference/schema-migration/analyze-schema/)
- [Import schema](../../reference/schema-migration/import-schema/)
diff --git a/docs/content/preview/yugabyte-voyager/release-notes.md b/docs/content/preview/yugabyte-voyager/release-notes.md
index b9e6dda1d4ca..b7381f9c2228 100644
--- a/docs/content/preview/yugabyte-voyager/release-notes.md
+++ b/docs/content/preview/yugabyte-voyager/release-notes.md
@@ -13,6 +13,38 @@ type: docs
What follows are the release notes for the YugabyteDB Voyager v1 release series. Content will be added as new notable features and changes are available in the patch releases of the YugabyteDB v1 series.
+## v1.7 - May 16, 2024
+
+### New features
+
+- [Assess Migration](../migrate/assess-migration/) {{}} (for PostgreSQL source only): Introduced the Voyager Migration Assessment feature specifically designed to optimize the database migration process from various source databases, currently supporting PostgreSQL to YugabyteDB. Voyager conducts a thorough analysis of the source database by capturing essential metadata and metrics, and generates a comprehensive assessment report.
+ - The report is created in HTML/JSON formats.
+ - When [export schema](../reference/schema-migration/export-schema/) is run, voyager automatically modifies the CREATE TABLE DDLs to incorporate the recommendations.
+ - Assessment can be done via plain bash/psql scripts for cases where source database connectivity is not available to the client machine running voyager.
+- Support for [live migration](../migrate/live-migrate/) with the option to [fall-back](../migrate/live-fall-back/) for PostgreSQL source databases.
+- Support for [live migration](../migrate/live-migrate/) of partitioned tables and multiple schemas from PostgreSQL source databases.
+- Support for migration of case sensitive table/column names from PostgreSQL databases.
+ - As a result, the table-list flags in [import data](../reference/data-migration/import-data/)/[export data](../reference/data-migration/export-data/) can accept table names in any form (case sensitive/insensitive/quoted/unquoted).
+
+### Enhancements
+
+- Detect and skip (with user confirmation) the unsupported data types before starting live migration from PostgreSQL databases.
+- When migrating partitioned tables in PostgreSQL source databases, voyager can now import data via the root table name, making it possible to change the names or partitioning logic of the leaf tables.
+
+### Bug fixes
+
+- Workaround for a bug in YugabyteDB where batched queries in a transaction were internally retried partially without respecting transaction/atomicity semantics.
+- Fixed a bug in [export data](../reference/data-migration/export-data/) (from PostgreSQL source databases), where voyager was ignoring a partitioned table if only the root table name was specified in the `--table-list` argument.
+- Fixed an issue Voyager was not dropping and recreating invalid indexes in case of restarts of 'post-snapshot-import' flow of import-schema.
+- Fixed a bug in [analyze schema](../reference/schema-migration/analyze-schema/) that reports false-positive unsupported cases for "FETCH CURSOR".
+- Changed the [datatype mapping](../reference/datatype-mapping-oracle/) of `DATE:date` to `DATE:timestamp` in Oracle to avoid time data loss for such columns.
+- Increased maximum retry count of event batch to 50 for import data streaming.
+- Fixed a bug where schema analysis report has an incorrect value for invalid count of objects in summary.
+
+### Known issue
+
+- If you use dockerised version of yb-voyager, commands [get data-migration-report](../reference/data-migration/import-data/#get-data-migration-report) and [end migration](../reference/end-migration/) do not work if you have previously passed ssl-cert/ssl-key/ssl-root-cert in [export data](../reference/data-migration/export-data/) or [import data](../reference/data-migration/import-data/) or [import data to source replica](../reference/data-migration/import-data/#import-data-to-source-replica) commands.
+
## v1.6.5 - February 13, 2024
### New features
diff --git a/docs/static/images/migrate/assess-migration.jpg b/docs/static/images/migrate/assess-migration.jpg
new file mode 100644
index 000000000000..524a52a35dee
Binary files /dev/null and b/docs/static/images/migrate/assess-migration.jpg differ