This guide covers advanced VDB refresh techniques for precise control over when and how virtual databases are updated. Estimated time: 15 minutes.

Prerequisites

Refresh from a specific snapshot

Use this when you need to refresh to a known snapshot rather than the latest one — for example, to return to a known good state, test historical data, or avoid data introduced after a particular point.

# List dSource snapshots
				dct-toolkit get_dsource_snapshots dsource_id=<DSOURCE_NAME_OR_ID>

				# List VDB snapshots
				dct-toolkit get_vdb_snapshots vdb_id=<VDB_NAME_OR_ID>

				# Sort by most recent
				dct-toolkit search_snapshots dataset_name=<DATASET_NAME> sort=-timestamp --columns=id,timestamp,consistency

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

Refresh from a timestamp

Timestamp refreshes restore to any point in time, not just snapshots. This requires LogSync (Point-in-Time Recovery) to be enabled on the dSource.

# Verify LogSync is enabled
				dct-toolkit search_dsources --columns=id,name,database_type,logsync_enabled

				# Check available timeflow range for a snapshot
				dct-toolkit get_snapshot_timeflow_range snapshot_id=<SNAPSHOT_ID>

				# Refresh to a specific timestamp (ISO 8601 format, always use Z suffix)
			dct-toolkit refresh_vdb_by_timestamp vdb_id=<VDB_NAME_OR_ID> timestamp="2025-10-15T14:30:00Z"

If the timestamp falls outside the available range, the following error is returned: Cannot find provisionable point <timestamp> for source <VDB_ID>. Use get_snapshot_timeflow_range to check what range is available.

Refresh from a bookmark

Bookmarks are named, shareable points in time — ideal for team coordination and release milestones.

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

				# Search all bookmarks
				dct-toolkit search_bookmarks --columns=id,name,creation_date,bookmark_type

				# Filter for public bookmarks
				dct-toolkit search_bookmarks bookmark_type=PUBLIC --columns=id,name,creation_date,vdb_ids

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

Parent vs sibling refreshes

Every VDB has a parent — the direct source from which it receives data. VDBs sharing the same root dSource are siblings and can share snapshots, timestamps, and bookmarks within DCT's permission model.

# View a VDB's parent and root parent
			dct-toolkit search_vdbs name=<VDB_NAME> --columns=name,parent_id,root_parent_id

If parent_id and root_parent_id are the same, the parent is a dSource. To be compatible for cross-refresh, two VDBs must share the same root_parent_id.

Refresh from a sibling VDB

# Get sibling's latest snapshot
				dct-toolkit get_vdb_snapshots vdb_id=<SIBLING_VDB_NAME_OR_ID> sort=-timestamp

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

Workflow examples

Weekly QA process

# Monday: refresh DEV and QA from latest production
				dct-toolkit refresh_vdb_by_snapshot vdb_id=Oracle_DEV
				dct-toolkit refresh_vdb_by_snapshot vdb_id=Oracle_QA

				# Friday: QA passes, create and share baseline
				dct-toolkit create_bookmark name="QA_Pass_Week_42" vdb_ids=Oracle_QA
				dct-toolkit update_bookmark bookmark_id="QA_Pass_Week_42" bookmark_type=PUBLIC

				# Following Monday: refresh team VDBs to QA baseline
				dct-toolkit refresh_vdb_from_bookmark vdb_id=Oracle_DEV bookmark_id="QA_Pass_Week_42"
			dct-toolkit refresh_vdb_from_bookmark vdb_id=Oracle_UAT bookmark_id="QA_Pass_Week_42"

Reproduce a production bug

# Check available timeflow range
				dct-toolkit get_dsource_snapshots dsource_id=Oracle_PROD sort=-timestamp
				dct-toolkit get_snapshot_timeflow_range snapshot_id=<RECENT_SNAPSHOT_ID>

				# Refresh DEV to 30 minutes before the bug was reported
			dct-toolkit refresh_vdb_by_timestamp vdb_id=Oracle_DEV timestamp="2025-10-15T15:15:00Z"

Cascading environment refresh

# Refresh QA from production's latest
				dct-toolkit refresh_vdb_by_snapshot vdb_id=Oracle_QA

				# Get QA's new snapshot ID
				QA_SNAPSHOT=$(dct-toolkit search_snapshots dataset_id=<QA_VDB_ID> sort=-timestamp -jp='$.items[0].id' --json | tr -d '"')

				# Refresh TEST from QA's snapshot
			dct-toolkit refresh_vdb_by_snapshot vdb_id=Oracle_TEST snapshot_id=$QA_SNAPSHOT

Release management

# Before release: create and share pre-release baseline
				dct-toolkit create_bookmark name="Pre_Release_v2.5.0" vdb_ids=Oracle_PROD
				dct-toolkit update_bookmark bookmark_id="Pre_Release_v2.5.0" bookmark_type=PUBLIC

				# After release: create release baseline
				dct-toolkit create_bookmark name="Release_v2.5.0" vdb_ids=Oracle_PROD
				dct-toolkit update_bookmark bookmark_id="Release_v2.5.0" bookmark_type=PUBLIC

				# Hotfix team: refresh to release baseline
				dct-toolkit refresh_vdb_from_bookmark vdb_id=Oracle_HOTFIX bookmark_id="Release_v2.5.0"

				# If rollback is needed
			dct-toolkit refresh_vdb_from_bookmark vdb_id=Oracle_PROD bookmark_id="Pre_Release_v2.5.0"

Troubleshooting

Error Resolution
Refresh to an object with a different root container is not supported Both VDBs must share the same root_parent_id. Check with get_vdb_by_id --columns=root_parent_id.
Cannot find provisionable point The timestamp is outside the available range. Use get_snapshot_timeflow_range to check valid ranges.
Bookmark not found The bookmark may be private or not accessible to your account. Use get_bookmarks_by_vdb to list accessible bookmarks.
Last updated
Oct 8, 2026