This guide covers advanced VDB refresh techniques for precise control over when and how virtual databases are updated. Estimated time: 15 minutes.
Prerequisites
-
Familiarity with basic VDB operations (see Getting started with VDB operations)
-
Access to VDBs with LogSync enabled for timestamp-based operations
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. |