| name | manage-backup-schedule-lifecycle |
| description | Manage backup schedule lifecycle with PAUSE, RESUME, and DROP SCHEDULES commands. Use when user asks to "pause backups", "stop schedule", "resume backups", "delete schedule", or needs to manage automated backup schedules for maintenance or decommissioning. |
| metadata | {"domain":"Backup and Restore","bloom_level":"Apply","version":"1.0.0","cockroachdb_version":"v26.1.0+"} |
Manage Backup Schedule Lifecycle
Control backup schedule lifecycle with PAUSE, RESUME, and DROP commands for maintenance and operations.
Schedule Lifecycle
Create → ACTIVE → PAUSE → RESUME → DROP
PAUSE SCHEDULES
Purpose: Temporarily stop backups without deleting schedule
PAUSE SCHEDULES 123;
PAUSE SCHEDULES 123, 456, 789;
PAUSE SCHEDULES (
SELECT id FROM [SHOW SCHEDULES]
WHERE label LIKE '%dev%'
);
When to Pause
- Cluster maintenance windows
- Storage system maintenance
- Cost optimization (temporarily disable dev backups)
- Investigating backup failures
- Before cluster upgrade
What Happens
Immediate:
- schedule_status changes to PAUSED
- No new backup jobs scheduled
- Currently running backup continues
Ongoing:
- Schedule remains in system
- Can be resumed anytime
- Configuration preserved
RESUME SCHEDULES
Purpose: Restart paused schedules
RESUME SCHEDULES 123;
RESUME SCHEDULES 123, 456;
RESUME SCHEDULES (
SELECT id FROM [SHOW SCHEDULES]
WHERE label LIKE '%dev%'
AND schedule_status = 'PAUSED'
);
After Resume
- schedule_status returns to ACTIVE
- next_run calculated based on CRON
- Backups resume normally
DROP SCHEDULES
Purpose: Permanently remove schedule
DROP SCHEDULES 123;
DROP SCHEDULES 123, 456, 789;
DROP SCHEDULES (
SELECT id FROM [SHOW SCHEDULES]
WHERE label LIKE '%old%'
);
⚠️ Warning:
- Cannot be undone
- Must recreate schedule if needed
- Does NOT delete existing backups (backups remain in storage)
Common Patterns
Pattern 1: Maintenance Window
PAUSE SCHEDULES (
SELECT id FROM [SHOW SCHEDULES]
WHERE label LIKE '%prod%'
);
RESUME SCHEDULES (
SELECT id FROM [SHOW SCHEDULES]
WHERE label LIKE '%prod%'
AND schedule_status = 'PAUSED'
);
Pattern 2: Pause Dev During Business Hours
PAUSE SCHEDULES (
SELECT id FROM [SHOW SCHEDULES]
WHERE label LIKE '%dev%'
);
RESUME SCHEDULES (
SELECT id FROM [SHOW SCHEDULES]
WHERE label LIKE '%dev%'
);
Pattern 3: Replace Schedule
DROP SCHEDULES (
SELECT id FROM [SHOW SCHEDULES]
WHERE label = 'Old Daily Backup'
);
CREATE SCHEDULE new_hourly_backup
FOR BACKUP INTO 'nodelocal://1/backups/new'
RECURRING '@hourly'
WITH SCHEDULE OPTIONS label = 'New Hourly Backup';
Verify Operations
After PAUSE
SELECT id, label, schedule_status
FROM [SHOW SCHEDULES]
WHERE id = 123;
After RESUME
SELECT id, label, schedule_status, next_run
FROM [SHOW SCHEDULES]
WHERE id = 123;
After DROP
SELECT * FROM [SHOW SCHEDULES] WHERE id = 123;
Operational Workflows
Planned Maintenance
#!/bin/bash
echo "Current schedules:"
cockroach sql --execute="SHOW SCHEDULES;"
echo "Pausing all backup schedules..."
cockroach sql --execute="
PAUSE SCHEDULES (SELECT id FROM [SHOW SCHEDULES]);
"
echo "Maintenance window - backups paused"
echo "Resuming backup schedules..."
cockroach sql --execute="
RESUME SCHEDULES (
SELECT id FROM [SHOW SCHEDULES]
WHERE schedule_status = 'PAUSED'
);
"
echo "Backups resumed"
Cost Optimization
PAUSE SCHEDULES (
SELECT id FROM [SHOW SCHEDULES]
WHERE label LIKE '%dev%' OR label LIKE '%test%'
);
RESUME SCHEDULES (
SELECT id FROM [SHOW SCHEDULES]
WHERE schedule_status = 'PAUSED'
);
Troubleshooting
Cannot Resume Schedule
Check schedule exists:
SHOW SCHEDULES WHERE id = 123;
If deleted: Must recreate schedule
Schedule Won't Pause
Check if already paused:
SELECT schedule_status FROM [SHOW SCHEDULES] WHERE id = 123;
If already paused: No error, idempotent operation
Backups Still Running After Pause
Normal: Currently executing backup completes
Verify no new jobs:
SELECT job_id, created
FROM [SHOW JOBS]
WHERE job_type = 'BACKUP'
AND description LIKE '%schedule_name%'
ORDER BY created DESC
LIMIT 5;
Best Practices
- Communicate before pausing production backups
- Document pause reason in change tickets
- Set calendar reminders to resume paused schedules
- Verify resume with SHOW SCHEDULES after maintenance
- Don't drop schedules casually - pause instead if temporary
- Test pause/resume in dev before production use
- Monitor for forgotten paused schedules with alerts
Comparison: Pause vs Drop
| Aspect | PAUSE | DROP |
|---|
| Reversible | Yes (RESUME) | No (must recreate) |
| Config preserved | Yes | No |
| Use case | Temporary | Permanent |
| Existing backups | Unchanged | Unchanged |
| Best for | Maintenance | Decommission |
Bulk Operations
Pause All Schedules
PAUSE SCHEDULES (SELECT id FROM [SHOW SCHEDULES]);
Resume All Paused
RESUME SCHEDULES (
SELECT id FROM [SHOW SCHEDULES]
WHERE schedule_status = 'PAUSED'
);
Drop All Dev Schedules
DROP SCHEDULES (
SELECT id FROM [SHOW SCHEDULES]
WHERE label LIKE '%dev%'
);
Related Skills
create-automated-backup-schedules - Create schedules to manage
monitor-scheduled-backups-with-show-schedules - Monitor schedule status
modify-backup-schedule-frequency - Change schedule parameters