Oracle LogMiner to Binary Log Reader Migration Quickstart Guide
This guide describes the steps to migrate Oracle connections from the LogMiner incremental sync method to Binary Log Reader.
For more information about the migration process and related details, see our LogMiner migration FAQs.
Ensure your connection meets the migration prerequisites by April 15, 2026, so that it is migrated before May 15, 2026.
Prerequisites
- Supported Oracle version (11g R2–21c)
Check migration readiness
- Open the Status tab on the connection details page
- Review any warnings or required setup steps
Complete prerequisites
Database setup
The required database permissions and setup steps differ based on your Oracle deployment. This includes required database permissions, redo log access configuration, and additional setup such as ASM or TDE (if applicable).
Follow the Binary Log Reader setup instructions for your Oracle deployment:
Generic Oracle
Enable Binary Log Reader
To enable Binary Log Reader, do the following:
Connect to your Oracle database as a user with administrative privileges.
If
ARCHIVELOGmode is not enabled on your database, enableARCHIVELOGmode. For multitenant container databases, execute these commands at the CDB level (ALTER SESSION SET CONTAINER=CDB$ROOT).We recommend that you set
ARCHIVE_LAG_TARGETto a non-zero value to reduce the lag in changes being synced.- Enabling
ARCHIVELOGmode requires the Oracle instance to be briefly taken offline. To learn more, see Oracle's Managing Archived Redo Log Files documentation.
SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN;- Enabling
Configure Oracle RMAN to retain backups and archive logs for at least 24 hours. We recommend retaining data for seven days.
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;(Recommended) Set the
DB_RECOVERY_FILE_DEST_SIZEparameter to a value that matches your available disk space, because expired and obsolete log and backup files can quickly fill your disk. For more information, see Oracle's DB_RECOVERY_FILE_DEST_SIZE documentation.Enable database-level minimal supplemental logging. For multitenant container databases, execute this command at the CDB level.
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;If you are also enabling supplemental logging at the table-level for
PRIMARY KEYcolumns or forALLcolumns on tables that include a primary key, enable it only after the table is created. Do not include the supplemental logging clause within theCREATE TABLEstatement, as Oracle may not properly log the primary key columns in such cases. Instead, create the table first and then enable supplemental logging using anALTER TABLEcommand. For example,CREATE TABLE "<schema>"."<table>" ... (<columns>, ...); ALTER TABLE "<schema>"."<table>" ADD SUPPLEMENTAL LOG DATA (<PRIMARY KEY | ALL>) COLUMNS;Grant the following
SELECTpermissions to the Fivetran user. For multitenant container databases, execute these commands at the PDB level (ALTER SESSION SET CONTAINER=<PDB>).GRANT SELECT ON SYS.V_$PDBS TO <username>; GRANT SELECT ON SYS.COL$ TO <username>; GRANT SELECT ON SYS.V_$DATABASE TO <username>; GRANT SELECT ON SYS.V_$ARCHIVED_LOG TO <username>; GRANT SELECT ON SYS.V_$TRANSACTION TO <username>; GRANT SELECT ON SYS.V_$PARAMETER TO <username>; GRANT SELECT ON SYS.V_$ENCRYPTED_TABLESPACES TO <username>; GRANT SELECT ON SYS.V_$TABLESPACE TO <username>; GRANT SELECT ON SYS.V_$LOG TO <username>; GRANT SELECT ON SYS.V_$LOGFILE TO <username>;(Optional) Grant the Fivetran user permission to capture from partitioned tables. For multitenant container databases, execute these commands at the PDB level (
ALTER SESSION SET CONTAINER=<PDB>).GRANT SELECT ON SYS.TABPART$ TO <username>; GRANT SELECT ON SYS.TABCOMPART$ TO <username>; GRANT SELECT ON SYS.TABSUBPART$ TO <username>;Configure redo log file access (archived and online redo) based on how your Oracle database stores logs.
See the archived redo sections below for the corresponding online redo setup requirements.
If your Oracle database is not configured with the fast recovery area, the archive log directory may remain constant (for example,
/u01/app/oracle/product/19c/dbhome_1). If your archive log directory remains constant, you must manually create a DIRECTORY object so Fivetran can access log files without requiring dynamic directory management.Run the following commands to create the
DIRECTORYobject. For multitenant container databases, execute these commands at the PDB level.CREATE DIRECTORY FIVETRAN_LOGDIR AS '<your-archive-log-directory-full-path>'; GRANT READ ON DIRECTORY FIVETRAN_LOGDIR to <username>;Similarly, apply the corresponding commands for online redo log support:
CREATE DIRECTORY FIVETRAN_ONLINE_LOGDIR AS '<your-online-redo-directory-full-path>'; GRANT READ ON DIRECTORY FIVETRAN_ONLINE_LOGDIR TO <username>;Apply the above for each unique online redo path if multiple members are configured in redo log groups with different paths. For example, if two members have two different paths, such as
/opt/oracle/oradata/ORCLCDB/redo01.logand/opt/oracle/redo_member2/redo01_b.log, then you must create twoDIRECTORYobjects and grant read access to both:CREATE DIRECTORY FIVETRAN_ONLINE_LOGDIR1 AS '/opt/oracle/oradata/ORCLCDB'; GRANT READ ON DIRECTORY FIVETRAN_ONLINE_LOGDIR1 TO <username>; CREATE DIRECTORY FIVETRAN_ONLINE_LOGDIR2 AS '/opt/oracle/redo_member2'; GRANT READ ON DIRECTORY FIVETRAN_ONLINE_LOGDIR2 TO <username>;If your Oracle database is configured with the fast recovery area, the archive log directory changes dynamically each day (for example,
/u01/app/oracle/fast_recovery_area/ORCLCDB/archivelog/2025_01_25). To avoid manually creatingDIRECTORYobjects ahead of time, grant the Fivetran user permission to create and drop them dynamically for each sync. Choose one of the following methods:Method 1: Grant direct privileges
Grant the Fivetran user permission to create and drop
DIRECTORYobjects. For multitenant container databases, execute these commands at the PDB level.GRANT CREATE ANY DIRECTORY TO <username>; GRANT DROP ANY DIRECTORY TO <username>;You don't need to take any additional steps for online redo support.
Method 2: Install a predefined package
If you prefer not to grant direct privileges, you can use the following stored procedure package (
FIVETRAN_BFILE) to controlDIRECTORYobject creation and deletion. Ensure to replace<username>with your Fivetran username. Connect as theSYSuser (or another user withDBAprivileges) to create the package. For multitenant container databases, execute these commands at the PDB level.CREATE OR REPLACE PACKAGE FIVETRAN_BFILE AUTHID DEFINER AS PROCEDURE dir_create(dirobj_name VARCHAR2, directory_name VARCHAR2); PROCEDURE dir_remove(dirobj_name VARCHAR2); END FIVETRAN_BFILE; / CREATE OR REPLACE PACKAGE BODY FIVETRAN_BFILE AS FUNCTION normalize_path(p_path VARCHAR2) RETURN VARCHAR2 IS v_path VARCHAR2(4000); BEGIN v_path := TRIM(p_path); IF v_path IS NULL THEN RAISE_APPLICATION_ERROR(-20001, 'Directory path must not be null'); END IF; IF INSTR(v_path, '..') > 0 THEN RAISE_APPLICATION_ERROR(-20003, 'Directory path must not contain ..'); END IF; IF INSTR(v_path, CHR(0)) > 0 THEN RAISE_APPLICATION_ERROR(-20004, 'Directory path contains invalid characters'); END IF; RETURN v_path; END normalize_path; PROCEDURE dir_create(dirobj_name VARCHAR2, directory_name VARCHAR2) IS v_obj VARCHAR2(128); v_path VARCHAR2(4000); v_user VARCHAR2(256); BEGIN v_obj := DBMS_ASSERT.SIMPLE_SQL_NAME(TRIM(dirobj_name)); v_path := normalize_path(directory_name); EXECUTE IMMEDIATE 'CREATE OR REPLACE DIRECTORY ' || v_obj || ' AS ' || DBMS_ASSERT.ENQUOTE_LITERAL(v_path); v_user := SYS_CONTEXT('USERENV', 'SESSION_USER'); EXECUTE IMMEDIATE 'GRANT READ ON DIRECTORY ' || v_obj || ' TO ' || DBMS_ASSERT.SIMPLE_SQL_NAME(v_user); END; PROCEDURE dir_remove(dirobj_name VARCHAR2) IS v_obj VARCHAR2(128); BEGIN v_obj := DBMS_ASSERT.SIMPLE_SQL_NAME(TRIM(dirobj_name)); EXECUTE IMMEDIATE 'DROP DIRECTORY ' || v_obj; END; END FIVETRAN_BFILE; / CREATE OR REPLACE PUBLIC SYNONYM PKG_FIVETRAN_BFILE FOR SYS.FIVETRAN_BFILE; GRANT EXECUTE ON PKG_FIVETRAN_BFILE TO <username>;Optional: restrict to specific base directories
If you want additional security, you can limit
DIRECTORYobject creation to only your archive log base paths. Add theis_allowed_pathfunction to the package body and call it insidedir_create. Replace the example paths with the actual parent directories where your archive logs reside.CREATE OR REPLACE PACKAGE BODY FIVETRAN_BFILE AS FUNCTION normalize_path(p_path VARCHAR2) RETURN VARCHAR2 IS -- (same as above) END normalize_path; FUNCTION is_allowed_path(p_path VARCHAR2) RETURN BOOLEAN IS BEGIN RETURN p_path = '/u01/app/oracle/fast_recovery_area/example_path' OR p_path LIKE '/u01/app/oracle/fast_recovery_area/example_path/%' OR p_path = '+RECO/ORACLE/ARCHIVELOG/example_path/' OR p_path LIKE '+RECO/ORACLE/ARCHIVELOG/example_path/%'; END is_allowed_path; PROCEDURE dir_create(dirobj_name VARCHAR2, directory_name VARCHAR2) IS v_obj VARCHAR2(128); v_path VARCHAR2(4000); v_user VARCHAR2(256); BEGIN v_obj := DBMS_ASSERT.SIMPLE_SQL_NAME(TRIM(dirobj_name)); v_path := normalize_path(directory_name); IF NOT is_allowed_path(v_path) THEN RAISE_APPLICATION_ERROR(-20005, 'Directory path ' || v_path || ' is not in the allowed list'); END IF; EXECUTE IMMEDIATE 'CREATE OR REPLACE DIRECTORY ' || v_obj || ' AS ' || DBMS_ASSERT.ENQUOTE_LITERAL(v_path); v_user := SYS_CONTEXT('USERENV', 'SESSION_USER'); EXECUTE IMMEDIATE 'GRANT READ ON DIRECTORY ' || v_obj || ' TO ' || DBMS_ASSERT.SIMPLE_SQL_NAME(v_user); END; PROCEDURE dir_remove(dirobj_name VARCHAR2) IS v_obj VARCHAR2(128); BEGIN v_obj := DBMS_ASSERT.SIMPLE_SQL_NAME(TRIM(dirobj_name)); EXECUTE IMMEDIATE 'DROP DIRECTORY ' || v_obj; END; END FIVETRAN_BFILE; /If your Oracle database uses a fast recovery area, archive logs rotate into date-stamped subdirectories (for example,
.../archivelog/2025_01_25). TheLIKE '/your/base/path/%'clause inis_allowed_pathcovers all subdirectories automatically, so you only need to add the top-level path.You don't need to take any additional steps for online redo support.
(Optional) If your Oracle database uses TDE, grant the following permissions to the Fivetran database user. For multitenant (CDB/PDB) environments, grant them at the CDB level to a CDB-level user instead.
GRANT SELECT ON SYS.V_$ENCRYPTION_WALLET to <username>;If column-level encryption is used:
GRANT SELECT ON SYS.ENC$ to <username>;Additionally, you must make the TDE wallet file path accessible through BFILE. Use one of the redo log directory-access methods from step 8, such as pre-created
DIRECTORYobjects for fixed paths, dynamic directory creation withCREATE ANY DIRECTORYandDROP ANY DIRECTORY, or thePKG_FIVETRAN_BFILEpackage.(Optional) If you want to capture redo logs stored in Automatic Storage Management (ASM), do the following.
Fivetran does not read archived redo logs directly from ASM (for example,
+RECO/DBNAME/ARCHIVELOG). During log capture, we copy archived redo logs from ASM to an intermediate staging directory on the database host file system and read them from there. You must create this staging directory regardless of whether ASM uses a Fast Recovery Area (FRA). For more information about how Binary Log Reader works with ASM, see our Automatic Storage Management (ASM) documentation.Create a staging directory on the database host file system (for example,
/u01/app/oracle/fivetran) to stage archived redo logs copied from ASM. The operating system user (for example,oracle) must have read and write permissions on this staging directory.Create an Oracle
DIRECTORYobject that references this staging directory, and grant the Fivetran database user read and write access to it. For multitenant container databases, execute these commands at the PDB level.- Do not specify an ASM disk group path in the
staging_directory_path. - You don't need to use the exact name
FIVETRAN_ASM_STG_DIR, but we recommend using a name prefixed withFIVETRAN_ASM_STG_DIRfor easier identification during troubleshooting.
CREATE DIRECTORY FIVETRAN_ASM_STG_DIR AS '<staging_directory_path>'; GRANT READ, WRITE ON DIRECTORY FIVETRAN_ASM_STG_DIR TO <username>;- Do not specify an ASM disk group path in the
Grant the following permissions to the Fivetran database user. These permissions are required for us to access and copy archived redo logs from ASM to the staging directory. For multitenant container databases, execute these commands at the PDB level.
GRANT EXECUTE ON SYS.DBMS_FILE_TRANSFER TO <username>; GRANT EXECUTE ON SYS.UTL_FILE TO <username>;
Set the
DB_BLOCK_CHECKSUMparameter toTYPICALorFULL. Binary Log Reader requires block checksums to verify the integrity of redo log data blocks.ALTER SYSTEM SET DB_BLOCK_CHECKSUM = TYPICAL;Grant
EXECUTEprivilege on theDBMS_RANDOMpackage to the Fivetran user if the user does not already have this privilege. This privilege is typically granted to users through thePUBLICrole. Binary Log Reader requires this privilege to improve the performance of large table imports.For multitenant container databases, execute this command at the PDB level.
GRANT EXECUTE ON SYS.DBMS_RANDOM TO <username>;
Oracle RAC
Enable Binary Log Reader
To enable Binary Log Reader, do the following:
Connect to your Oracle RAC database as a user with administrative privileges.
If
ARCHIVELOGmode is not enabled on your database, enableARCHIVELOGmode. For multitenant container databases, execute these commands at the CDB level (ALTER SESSION SET CONTAINER=CDB$ROOT).We recommend that you set
ARCHIVE_LAG_TARGETto a non-zero value to reduce the lag in changes being synced.Enabling
ARCHIVELOGmode requires the Oracle instance to be briefly taken offline. To learn more, see Oracle's Managing Archived Redo Log Files documentation.The database host configured in the connection must have access to the archived logs of all other nodes in the cluster.
Shut down all database instances.
$ srvctl stop database -d <db_unique_name>Start the database in mount mode.
$ srvctl start database -d <db_unique_name> -o mountEnable archive logging.
$ sqlplus / as sysdba sql> ALTER DATABASE ARCHIVELOG; sql> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=<SHARED_LOCATION>' SCOPE=SPFILE; sql> EXIT;<SHARED_LOCATION>could be any of the following:- Automatic Storage Management disks
- Flash Recovery Area
- NFS
- Shared storage
Stop the database.
$ srvctl stop database -d <db_unique_name>Restart all database instances.
$ srvctl start database -d <db_unique_name>Verify that archiving is enabled.
sql> archive log list;
The database host configured in the connection must have access to the archived logs of all other nodes in the cluster.
Configure Oracle RMAN to retain backups and archive logs for at least 24 hours. We recommend retaining data for seven days.
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;(Recommended) Set the
DB_RECOVERY_FILE_DEST_SIZEparameter to a value that matches your available disk space, because expired and obsolete log and backup files can quickly fill your disk. For more information, see Oracle's DB_RECOVERY_FILE_DEST_SIZE documentation.Enable database-level minimal supplemental logging. For multitenant container databases, execute this command at the CDB level.
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;If you are also enabling supplemental logging at the table-level for
PRIMARY KEYcolumns or forALLcolumns on tables that include a primary key, enable it only after the table is created. Do not include the supplemental logging clause within theCREATE TABLEstatement, as Oracle may not properly log the primary key columns in such cases. Instead, create the table first and then enable supplemental logging using anALTER TABLEcommand. For example,CREATE TABLE "<schema>"."<table>" ... (<columns>, ...); ALTER TABLE "<schema>"."<table>" ADD SUPPLEMENTAL LOG DATA (<PRIMARY KEY | ALL>) COLUMNS;Grant the following
SELECTpermissions to the Fivetran user. For multitenant container databases, execute these commands at the PDB level (ALTER SESSION SET CONTAINER=<PDB>).GRANT SELECT ON SYS.V_$PDBS TO <username>; GRANT SELECT ON SYS.COL$ TO <username>; GRANT SELECT ON SYS.V_$DATABASE TO <username>; GRANT SELECT ON SYS.V_$ARCHIVED_LOG TO <username>; GRANT SELECT ON SYS.V_$TRANSACTION TO <username>; GRANT SELECT ON SYS.V_$PARAMETER TO <username>; GRANT SELECT ON SYS.V_$ENCRYPTED_TABLESPACES TO <username>; GRANT SELECT ON SYS.V_$TABLESPACE TO <username>; GRANT SELECT ON SYS.V_$LOG TO <username>; GRANT SELECT ON SYS.V_$LOGFILE TO <username>;(Optional) Grant the Fivetran user permission to capture from partitioned tables. For multitenant container databases, execute these commands at the PDB level (
ALTER SESSION SET CONTAINER=<PDB>).GRANT SELECT ON SYS.TABPART$ TO <username>; GRANT SELECT ON SYS.TABCOMPART$ TO <username>; GRANT SELECT ON SYS.TABSUBPART$ TO <username>;Configure redo log file access (archived and online redo) based on how your Oracle database stores logs.
See the archived redo sections below for the corresponding online redo setup requirements.
If your Oracle database is not configured with the fast recovery area, the archive log directory may remain constant (for example,
/u01/app/oracle/product/19c/dbhome_1). If your archive log directory remains constant, you must manually create a DIRECTORY object so Fivetran can access log files without requiring dynamic directory management.Run the following commands to create the
DIRECTORYobject. For multitenant container databases, execute these commands at the PDB level.CREATE DIRECTORY FIVETRAN_LOGDIR AS '<your-archive-log-directory-full-path>'; GRANT READ ON DIRECTORY FIVETRAN_LOGDIR to <username>;Similarly, apply the corresponding commands for online redo log support:
CREATE DIRECTORY FIVETRAN_ONLINE_LOGDIR AS '<your-online-redo-directory-full-path>'; GRANT READ ON DIRECTORY FIVETRAN_ONLINE_LOGDIR TO <username>;Apply the above for each unique online redo path if multiple members are configured in redo log groups with different paths. For example, if two members have two different paths, such as
/opt/oracle/oradata/ORCLCDB/redo01.logand/opt/oracle/redo_member2/redo01_b.log, then you must create twoDIRECTORYobjects and grant read access to both:CREATE DIRECTORY FIVETRAN_ONLINE_LOGDIR1 AS '/opt/oracle/oradata/ORCLCDB'; GRANT READ ON DIRECTORY FIVETRAN_ONLINE_LOGDIR1 TO <username>; CREATE DIRECTORY FIVETRAN_ONLINE_LOGDIR2 AS '/opt/oracle/redo_member2'; GRANT READ ON DIRECTORY FIVETRAN_ONLINE_LOGDIR2 TO <username>;If your Oracle database is configured with the fast recovery area, the archive log directory changes dynamically each day (for example,
/u01/app/oracle/fast_recovery_area/ORCLCDB/archivelog/2025_01_25). To avoid manually creatingDIRECTORYobjects ahead of time, grant the Fivetran user permission to create and drop them dynamically for each sync. Choose one of the following methods:Method 1: Grant direct privileges
Grant the Fivetran user permission to create and drop
DIRECTORYobjects. For multitenant container databases, execute these commands at the PDB level.GRANT CREATE ANY DIRECTORY TO <username>; GRANT DROP ANY DIRECTORY TO <username>;You don't need to take any additional steps for online redo support.
Method 2: Install a predefined package
If you prefer not to grant direct privileges, you can use the following stored procedure package (
FIVETRAN_BFILE) to controlDIRECTORYobject creation and deletion. Ensure to replace<username>with your Fivetran username. Connect as theSYSuser (or another user withDBAprivileges) to create the package. For multitenant container databases, execute these commands at the PDB level.CREATE OR REPLACE PACKAGE FIVETRAN_BFILE AUTHID DEFINER AS PROCEDURE dir_create(dirobj_name VARCHAR2, directory_name VARCHAR2); PROCEDURE dir_remove(dirobj_name VARCHAR2); END FIVETRAN_BFILE; / CREATE OR REPLACE PACKAGE BODY FIVETRAN_BFILE AS FUNCTION normalize_path(p_path VARCHAR2) RETURN VARCHAR2 IS v_path VARCHAR2(4000); BEGIN v_path := TRIM(p_path); IF v_path IS NULL THEN RAISE_APPLICATION_ERROR(-20001, 'Directory path must not be null'); END IF; IF INSTR(v_path, '..') > 0 THEN RAISE_APPLICATION_ERROR(-20003, 'Directory path must not contain ..'); END IF; IF INSTR(v_path, CHR(0)) > 0 THEN RAISE_APPLICATION_ERROR(-20004, 'Directory path contains invalid characters'); END IF; RETURN v_path; END normalize_path; PROCEDURE dir_create(dirobj_name VARCHAR2, directory_name VARCHAR2) IS v_obj VARCHAR2(128); v_path VARCHAR2(4000); v_user VARCHAR2(256); BEGIN v_obj := DBMS_ASSERT.SIMPLE_SQL_NAME(TRIM(dirobj_name)); v_path := normalize_path(directory_name); EXECUTE IMMEDIATE 'CREATE OR REPLACE DIRECTORY ' || v_obj || ' AS ' || DBMS_ASSERT.ENQUOTE_LITERAL(v_path); v_user := SYS_CONTEXT('USERENV', 'SESSION_USER'); EXECUTE IMMEDIATE 'GRANT READ ON DIRECTORY ' || v_obj || ' TO ' || DBMS_ASSERT.SIMPLE_SQL_NAME(v_user); END; PROCEDURE dir_remove(dirobj_name VARCHAR2) IS v_obj VARCHAR2(128); BEGIN v_obj := DBMS_ASSERT.SIMPLE_SQL_NAME(TRIM(dirobj_name)); EXECUTE IMMEDIATE 'DROP DIRECTORY ' || v_obj; END; END FIVETRAN_BFILE; / CREATE OR REPLACE PUBLIC SYNONYM PKG_FIVETRAN_BFILE FOR SYS.FIVETRAN_BFILE; GRANT EXECUTE ON PKG_FIVETRAN_BFILE TO <username>;Optional: restrict to specific base directories
If you want additional security, you can limit
DIRECTORYobject creation to only your archive log base paths. Add theis_allowed_pathfunction to the package body and call it insidedir_create. Replace the example paths with the actual parent directories where your archive logs reside.CREATE OR REPLACE PACKAGE BODY FIVETRAN_BFILE AS FUNCTION normalize_path(p_path VARCHAR2) RETURN VARCHAR2 IS -- (same as above) END normalize_path; FUNCTION is_allowed_path(p_path VARCHAR2) RETURN BOOLEAN IS BEGIN RETURN p_path = '/u01/app/oracle/fast_recovery_area/example_path' OR p_path LIKE '/u01/app/oracle/fast_recovery_area/example_path/%' OR p_path = '+RECO/ORACLE/ARCHIVELOG/example_path/' OR p_path LIKE '+RECO/ORACLE/ARCHIVELOG/example_path/%'; END is_allowed_path; PROCEDURE dir_create(dirobj_name VARCHAR2, directory_name VARCHAR2) IS v_obj VARCHAR2(128); v_path VARCHAR2(4000); v_user VARCHAR2(256); BEGIN v_obj := DBMS_ASSERT.SIMPLE_SQL_NAME(TRIM(dirobj_name)); v_path := normalize_path(directory_name); IF NOT is_allowed_path(v_path) THEN RAISE_APPLICATION_ERROR(-20005, 'Directory path ' || v_path || ' is not in the allowed list'); END IF; EXECUTE IMMEDIATE 'CREATE OR REPLACE DIRECTORY ' || v_obj || ' AS ' || DBMS_ASSERT.ENQUOTE_LITERAL(v_path); v_user := SYS_CONTEXT('USERENV', 'SESSION_USER'); EXECUTE IMMEDIATE 'GRANT READ ON DIRECTORY ' || v_obj || ' TO ' || DBMS_ASSERT.SIMPLE_SQL_NAME(v_user); END; PROCEDURE dir_remove(dirobj_name VARCHAR2) IS v_obj VARCHAR2(128); BEGIN v_obj := DBMS_ASSERT.SIMPLE_SQL_NAME(TRIM(dirobj_name)); EXECUTE IMMEDIATE 'DROP DIRECTORY ' || v_obj; END; END FIVETRAN_BFILE; /If your Oracle database uses a fast recovery area, archive logs rotate into date-stamped subdirectories (for example,
.../archivelog/2025_01_25). TheLIKE '/your/base/path/%'clause inis_allowed_pathcovers all subdirectories automatically, so you only need to add the top-level path.You don't need to take any additional steps for online redo support.
(Optional) If your Oracle database uses TDE, grant the following permissions to the Fivetran database user. For multitenant (CDB/PDB) environments, grant them at the CDB level to a CDB-level user instead.
GRANT SELECT ON SYS.V_$ENCRYPTION_WALLET to <username>;If column-level encryption is used:
GRANT SELECT ON SYS.ENC$ to <username>;Additionally, you must make the TDE wallet file path accessible through BFILE. Use one of the redo log directory-access methods from step 8, such as pre-created
DIRECTORYobjects for fixed paths, dynamic directory creation withCREATE ANY DIRECTORYandDROP ANY DIRECTORY, or thePKG_FIVETRAN_BFILEpackage.(Optional) If you want to capture redo logs stored in Automatic Storage Management (ASM), do the following.
Fivetran does not read archived redo logs directly from ASM (for example,
+RECO/DBNAME/ARCHIVELOG). During log capture, we copy archived redo logs from ASM to an intermediate staging directory on the database host file system and read them from there. You must create this staging directory regardless of whether ASM uses a Fast Recovery Area (FRA). For more information about how Binary Log Reader works with ASM, see our Automatic Storage Management (ASM) documentation.Create a staging directory on the database host file system (for example,
/u01/app/oracle/fivetran) to stage archived redo logs copied from ASM. The operating system user (for example,oracle) must have read and write permissions on this staging directory.You must create the staging directory using the same absolute path on all RAC nodes.
Create an Oracle
DIRECTORYobject that references this staging directory, and grant the Fivetran database user read and write access to it. For multitenant container databases, execute these commands at the PDB level.- Do not specify an ASM disk group path in the
staging_directory_path. - You don't need to use the exact name
FIVETRAN_ASM_STG_DIR, but we recommend using a name prefixed withFIVETRAN_ASM_STG_DIRfor easier identification during troubleshooting.
CREATE DIRECTORY FIVETRAN_ASM_STG_DIR AS '<staging_directory_path>'; GRANT READ, WRITE ON DIRECTORY FIVETRAN_ASM_STG_DIR TO <username>;- Do not specify an ASM disk group path in the
Grant the following permissions to the Fivetran database user. These permissions are required for us to access and copy archived redo logs from ASM to the staging directory. For multitenant container databases, execute these commands at the PDB level.
GRANT EXECUTE ON SYS.DBMS_FILE_TRANSFER TO <username>; GRANT EXECUTE ON SYS.UTL_FILE TO <username>;
Set the
DB_BLOCK_CHECKSUMparameter toTYPICALorFULL. Binary Log Reader requires block checksums to verify the integrity of redo log data blocks.ALTER SYSTEM SET DB_BLOCK_CHECKSUM = TYPICAL;Grant
EXECUTEprivilege on theDBMS_RANDOMpackage to the Fivetran user if the user does not already have this privilege. This privilege is typically granted to users through thePUBLICrole. Binary Log Reader requires this privilege to improve the performance of large table imports.For multitenant container databases, execute this command at the PDB level.
GRANT EXECUTE ON SYS.DBMS_RANDOM TO <username>;
Amazon RDS for Oracle
Enable Binary Log Reader
To enable Binary Log Reader, do the following:
If
ARCHIVELOGmode is not enabled on your database, enableARCHIVELOGmode.ARCHIVELOGmode is enabled automatically when automated backups are enabled by setting the backup retention period to a value greater than0. For more information, see Amazon RDS automated backups documentation.We recommend that you set the ARCHIVE_LAG_TARGET to a low value. The default value is 300 seconds (5 minutes). This setting reduces the lag in changes being synced.
Retain redo log files for at least 24 hours. We recommend retaining data for seven days.
BEGIN rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours', 24); END;Enable minimal supplemental logging by executing the following SQL statement. Minimal supplemental logging ensures that Fivetran has sufficient information to process the redo operations associated with DML changes.
To learn about minimal supplemental logging, read Oracle's database-level supplemental logging documentation.
BEGIN rdsadmin.rdsadmin_util.alter_supplemental_logging(p_action => 'ADD'); END;Execute the following commands to ensure the log files can be read.
BEGIN rdsadmin.rdsadmin_master_util.create_archivelog_dir; rdsadmin.rdsadmin_master_util.create_onlinelog_dir; END;GRANT READ ON DIRECTORY ARCHIVELOG_DIR TO <username>;Grant the Fivetran user permission to run incremental syncs.
BEGIN rdsadmin.rdsadmin_util.grant_sys_object('V_$PDBS','<username>','SELECT'); rdsadmin.rdsadmin_util.grant_sys_object('COL$','<username>','SELECT'); rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE','<username>','SELECT'); rdsadmin.rdsadmin_util.grant_sys_object('V_$ARCHIVED_LOG','<username>','SELECT'); rdsadmin.rdsadmin_util.grant_sys_object('V_$TRANSACTION','<username>','SELECT'); rdsadmin.rdsadmin_util.grant_sys_object('V_$PARAMETER','<username>','SELECT'); rdsadmin.rdsadmin_util.grant_sys_object('V_$TABLESPACE','<username>','SELECT'); rdsadmin.rdsadmin_util.grant_sys_object('V_$ENCRYPTED_TABLESPACES','<username>','SELECT'); END;(Optional) Grant the Fivetran user permission to capture from partitioned tables:
BEGIN rdsadmin.rdsadmin_util.grant_sys_object('TABPART$','<username>','SELECT'); rdsadmin.rdsadmin_util.grant_sys_object('TABCOMPART$','<username>','SELECT'); rdsadmin.rdsadmin_util.grant_sys_object('TABSUBPART$','<username>','SELECT'); END;Grant
EXECUTEprivilege on theDBMS_RANDOMpackage to the Fivetran user if the user does not already have this privilege. This privilege is typically granted to users through thePUBLICrole. Binary Log Reader requires this privilege to improve the performance of large table imports.GRANT EXECUTE ON SYS.DBMS_RANDOM TO <username>;
Connection setup
Update the connection settings with the required configuration details for your environment. Skip this step if you are not using Pluggable Database (PDB), Transparent Data Encryption (TDE), or Automatic Storage Management (ASM).
On the Setup tab of the connection details page, click Edit connection to modify the settings.
PDB service name
If you use a multitenant database (CDB/PDB) and want to replicate PDB tables, enter the PDB service name in the SID/Service Name field.
TDE settings
If your database uses TDE, set the Using TDE Encryption toggle to ON.
Then enter the following details, as applicable:
- TDE Wallet Password: Required only for a password-based software wallet
- CDB User and CDB Password: For multitenant (CDB) databases, provide CDB-level credentials; leave blank for non-CDB databases
- CDB SID/Service Name: For multitenant databases, enter the CDB root service name (not the PDB); leave blank for non-CDB databases
- Local Auto-Login Wallet User Name/Host Name: Required only for local Auto-Login wallets
ASM settings
If you want Fivetran to read redo logs stored in ASM, set the Using ASM toggle to ON.
In the ASM Staging Directory Path field, enter a directory path to store temporary files used during change capture. Do not use a symbolic link for the staging directory.
Validate eligibility
Run a sync to re-check eligibility and ensure no warnings remain in the Status tab. If no warnings appear, the connection is ready for migration.
Wait for automatic migration
The migration typically happens within a few days. It runs during a sync cycle and completes almost instantly. After the prerequisites are met, no action is required from your side to trigger the migration.
Verify after migration
Ensure tables are syncing as expected and monitor the connection for 24 to 48 hours.
For additional information or to resolve issues, see our LogMiner migration FAQs or create a Fivetran Support ticket with details about your connection and the issue you are experiencing.