Common workflows and examples

This topic provides runnable dct-toolkit examples for the most common Continuous Data workflows. Many commands require locally valid values — such as VDB names, snapshot IDs, or bookmark IDs — that must be retrieved from your environment before running. Replace <VDB_NAME_OR_ID> with an actual VDB name or ID. Names and IDs are interchangeable in most commands. All commands respect DCT role-based access control.

For help finding and understanding commands, see Find and use commands. For installation and initial configuration, see Install and configure.

Initial setup

Copy
# Configure DCT connection (one-time setup)
                dct-toolkit create_config \
                dctUrl=https://<DCT_IP_OR_HOSTNAME>/dct \
                apiKey=<YOUR_API_KEY> \
                --insecureSSL \
                --unsafeHostnameCheck

                # Verify configuration
            dct-toolkit get_vdbs

Finding VDBs

Copy
# List all VDBs
                dct-toolkit get_vdbs

                # Show specific columns
                dct-toolkit get_vdbs --columns=id,name,database_type,status

                # Get specific VDB details
                dct-toolkit get_vdb_by_id vdb_id=<VDB_NAME_OR_ID>

                # Search VDBs
            dct-toolkit search_vdbs --columns=id,name,status

VDB provisioning

The provision_vdb_by_snapshot command creates a new VDB from a dSource or existing VDB. The required arguments vary by database type. Use the -h flag to review all available parameters for your target database type before running.

Provision an Oracle VDB

Copy
dct-toolkit provision_vdb_by_snapshot oracle \
                name=<NEW_VDB_NAME> \
                source_data_id=<DSOURCE_OR_VDB_NAME_OR_ID> \
                auto_select_repository=true \
            --tags key-1=value-1 --tags key-2=value-2

Provision a Microsoft SQL Server VDB

Copy
dct-toolkit provision_vdb_by_snapshot mssql \
                name=<NEW_VDB_NAME> \
            source_data_id=<DSOURCE_OR_VDB_NAME_OR_ID>

Provision a PostgreSQL or AppData VDB

AppData is the generic term for database types managed through the connector plugin ecosystem, including PostgreSQL.

Copy
dct-toolkit provision_vdb_by_snapshot appdata \
                name=<NEW_VDB_NAME> \
            source_data_id=<DSOURCE_OR_VDB_NAME_OR_ID>

Start and stop

Use for daily or weekly cycles and short-term pauses.

Copy
dct-toolkit start_vdb vdb_id=<VDB_NAME_OR_ID>
                dct-toolkit stop_vdb vdb_id=<VDB_NAME_OR_ID>

                # Check status
            dct-toolkit get_vdb_by_id vdb_id=<VDB_NAME_OR_ID> --columns=name,status

Enable and disable

Use for long-term pauses (weeks or months) and storage optimization. Disabling releases storage; enabling restores it.

Copy
dct-toolkit disable_vdb vdb_id=<VDB_NAME_OR_ID>
                dct-toolkit enable_vdb vdb_id=<VDB_NAME_OR_ID>

                # Enable then start
                dct-toolkit enable_vdb vdb_id=<VDB_NAME_OR_ID>
            dct-toolkit start_vdb vdb_id=<VDB_NAME_OR_ID>

Refresh

From the parent's latest snapshot

First, list available VDBs to identify the VDB name or ID:

Copy
dct-toolkit get_vdbs

Omitting snapshot_id selects the latest snapshot from the parent automatically:

Copy
dct-toolkit refresh_vdb_by_snapshot vdb_id=<VDB_NAME_OR_ID>

From a specific snapshot

A dSource and VDB are compatible if they originate from the same dSource:

Copy
# List available snapshots
                dct-toolkit get_dsource_snapshots dsource_id=<DSOURCE_NAME_OR_ID>
                dct-toolkit get_vdb_snapshots vdb_id=<VDB_NAME_OR_ID>

                # Refresh to specific snapshot
                dct-toolkit refresh_vdb_by_snapshot \
                vdb_id=<VDB_NAME_OR_ID> \
            snapshot_id=<SNAPSHOT_ID>

If the snapshot is incompatible with the specified VDB, the following error is returned: Refresh to an object with a different root container is not supported.

From a timestamp

Timestamps use ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ

Copy
# Check available time range
                dct-toolkit get_snapshot_timeflow_range snapshot_id=<SNAPSHOT_ID>

                # Refresh to specific time
                dct-toolkit refresh_vdb_by_timestamp \
                vdb_id=<VDB_NAME_OR_ID> \
            timestamp="2025-10-16T14:30:00Z"

By default, each snapshot provides a single timestamp. To enable a continuous range of provisionable timestamps, LogSync (Point-in-Time Recovery) must be enabled on the VDB or dSource. If the requested timestamp falls outside the available range, the following error is returned: Cannot find provisionable point <timestamp> for source <VDB_ID>

From a bookmark

Copy
# List bookmarks for a VDB
                dct-toolkit get_bookmarks_by_vdb vdb_id=<VDB_NAME_OR_ID>

                # Refresh to bookmark
                dct-toolkit refresh_vdb_from_bookmark \
                vdb_id=<VDB_NAME_OR_ID> \
            bookmark_id=<BOOKMARK_NAME_OR_ID>

From a sibling VDB's snapshot

Copy
# Get sibling's snapshots
                dct-toolkit get_vdb_snapshots vdb_id=<SIBLING_VDB_NAME_OR_ID>

                # Refresh using sibling's snapshot
                dct-toolkit refresh_vdb_by_snapshot \
                vdb_id=<TARGET_VDB> \
            snapshot_id=<SIBLINGS_SNAPSHOT_ID>

Snapshot management

Copy
# Take manual snapshot
                dct-toolkit snapshot_vdb vdb_id=<VDB_NAME_OR_ID>
                dct-toolkit snapshot_dsource dsource_id=<DSOURCE_NAME_OR_ID>

                # List snapshots
                dct-toolkit get_vdb_snapshots vdb_id=<VDB_NAME_OR_ID>
                dct-toolkit get_dsource_snapshots dsource_id=<DSOURCE_NAME_OR_ID>

                # Sort by most recent
                dct-toolkit get_vdb_snapshots vdb_id=<VDB_NAME_OR_ID> sort=-timestamp

                # View snapshot details
                dct-toolkit get_snapshot_by_id snapshot_id=<SNAPSHOT_ID>

                # Set retention (days)
                dct-toolkit update_snapshot snapshot_id=<SNAPSHOT_ID> retention=90

                # Remove retention limit (keep forever)
                dct-toolkit unset_snapshot_retention snapshot_id=<SNAPSHOT_ID>

                # Delete snapshot
            dct-toolkit delete_snapshot snapshot_id=<SNAPSHOT_ID>

Bookmark management

Copy
# Create bookmark - single VDB
                dct-toolkit create_bookmark \
                name=<BOOKMARK_NAME> \
                vdb_ids=<VDB_NAME_OR_ID>

                # Create bookmark - multiple VDBs
                dct-toolkit create_bookmark \
                name=<BOOKMARK_NAME> \
                vdb_ids=<VDB1> \
                vdb_ids=<VDB2>

                # List all bookmarks
                dct-toolkit get_bookmarks

                # List bookmarks for a VDB
                dct-toolkit get_bookmarks_by_vdb vdb_id=<VDB_NAME_OR_ID>

                # View bookmark details
                dct-toolkit get_bookmark_by_id bookmark_id=<BOOKMARK_NAME_OR_ID>

                # Make bookmark public (shareable)
                dct-toolkit update_bookmark \
                bookmark_id=<BOOKMARK_NAME_OR_ID> \
                bookmark_type=PUBLIC

                # Add tags to bookmark
                dct-toolkit create_bookmark_tags \
                bookmark_id=<BOOKMARK_ID> \
                tags='Team=QA' 'Sprint=24'

                # Delete bookmark
            dct-toolkit delete_bookmark bookmark_id=<BOOKMARK_NAME_OR_ID>

VDB Group management

VDB Groups allow multiple VDBs to be acted on together. They are the DCT equivalent of a Delphix Self-Service multi-VDB container.

Copy
# Create a VDB Group
                dct-toolkit create_vdb_group \
                vdb_ids=<VDB_1_NAME_OR_ID> \
                vdb_ids=<VDB_2_NAME_OR_ID> \
                name=<VDB_GROUP_NAME>

                # Add tags for organization or access control
                dct-toolkit create_vdb_groups_tags \
                vdb_group_id=<VDB_GROUP_NAME_OR_ID> \
                tags='<KEY_1>=<VALUE_1>' '<KEY_2>=<VALUE_2>'

                # Confirm configuration
            dct-toolkit get_vdb_groups

Job management

Copy
# Run command asynchronously
                dct-toolkit <COMMAND> --no-wait

                # List recent jobs
                dct-toolkit get_jobs \
                --columns=id,status,type,target_name \
                sort=-start_time

                # Get job details
                dct-toolkit get_job_by_id job_id=<JOB_ID>

                # Monitor job status
            dct-toolkit get_job_by_id job_id=<JOB_ID> --columns=status,percent_complete

Output formatting

Copy
# Default table format
                dct-toolkit get_vdbs

                # JSON format
                dct-toolkit get_vdbs --json

                # CSV format
                dct-toolkit get_vdbs --csv

                # Select specific columns
                dct-toolkit get_vdbs --columns=id,name,status

                # Sort output
                dct-toolkit get_vdbs sort=name          # Ascending
                dct-toolkit get_vdbs sort=-name         # Descending

                # JSON path filtering
            dct-toolkit get_vdbs -jp='$.items[*].id' --json

Account and access management

Full user management requires familiarity with DCT's attribute-based access control (ABAC) model. The DCT UI provides a more complete experience for initial access control configuration. The examples below cover account creation and the most common tag-based access pattern.

Create an account

The tags argument can be used to assign the account to an Access Group at creation time:

Copy
dct-toolkit create_account \
                email=<EMAIL> \
                username=<USERNAME> \
                password=<PASSWORD> \
                tags=<KEY>=<VALUE> \
            --generate_api_key

Accounts can also be manually assigned to Access Groups using add_access_group_accounts_ids.

Assign access using tags

Tags are the recommended mechanism for managing object access at scale. Initial framework configuration is best done through the UI; once set up, tags can be applied to objects from the CLI.

Copy
# Review a VDB's current tags
                dct-toolkit get_vdb_by_id vdb_id=<VDB_NAME_OR_ID>

                # Add tags to a VDB
                dct-toolkit create_vdb_tags \
                vdb_id=<VDB_NAME_OR_ID> \
                tags='<KEY_1>=<VALUE_1>' '<KEY_2>=<VALUE_2>'

                # Add tags to an environment
            dct-toolkit create_environment_tags environmentId=<envId> tags purpose=testing key1=value1

Environment variables

Copy
# Set custom config file location
            export DCT_TOOLKIT_CONFIG_FILE=/path/to/config

Common workflows

Daily refresh routine

Copy
# Morning: start and refresh
                dct-toolkit start_vdb vdb_id=Oracle_DEV
                dct-toolkit refresh_vdb_by_snapshot vdb_id=Oracle_DEV

                # Evening: stop to save resources
            dct-toolkit stop_vdb vdb_id=Oracle_DEV

QA approval process

Copy
# Create and share QA baseline
                dct-toolkit create_bookmark name="QA_Pass_Sprint_24" vdb_ids=Oracle_QA
                dct-toolkit update_bookmark bookmark_id="QA_Pass_Sprint_24" bookmark_type=PUBLIC

                # Refresh team VDB to baseline
            dct-toolkit refresh_vdb_from_bookmark vdb_id=Oracle_DEV bookmark_id="QA_Pass_Sprint_24"

Pre-deployment backup

Copy
# Take snapshot and create bookmark before deployment
                dct-toolkit snapshot_vdb vdb_id=Oracle_PROD
                dct-toolkit create_bookmark name="Pre_Deploy_v2.5" vdb_ids=Oracle_PROD

                # If rollback is needed
            dct-toolkit refresh_vdb_from_bookmark vdb_id=Oracle_PROD bookmark_id="Pre_Deploy_v2.5"

Storage optimization

Copy
# Disable unused VDB
                dct-toolkit disable_vdb vdb_id=Oracle_UAT

                # Re-enable when needed
                dct-toolkit enable_vdb vdb_id=Oracle_UAT
            dct-toolkit start_vdb vdb_id=Oracle_UAT

Troubleshooting

Error Resolution
VDB is not in a running state Run dct-toolkit start_vdb vdb_id=<VDB_NAME_OR_ID> first.
Cannot find provisionable point Check available timeflow with dct-toolkit get_snapshot_timeflow_range snapshot_id=<SNAPSHOT_ID>.
Refresh to an object with a different root container is not supported The snapshot and VDB must share the same root parent. Check both with --columns=root_parent_id and confirm they match.

Related topics