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
# 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
# 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
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
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.
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.
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.
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:
dct-toolkit get_vdbs
Omitting snapshot_id selects the latest snapshot from the parent automatically:
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:
# 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
# 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
# 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
# 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
# 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
# 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.
# 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
# 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
# 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:
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.
# 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
# Set custom config file location
export DCT_TOOLKIT_CONFIG_FILE=/path/to/config
Common workflows
Daily refresh routine
# 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
# 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
# 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
# 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. |