SQL Server
- Choose Microsoft SQL Server when adding a server (SQL Server 2012 and newer on Windows, Linux and in containers; tested with SQL Server 2022 on Linux). SQL logins or Windows authentication (
DOMAIN\user, NTLM), named instances through the SQL Server Browser, always-encrypted connections. No client tool: DumpCat speaks TDS itself (go-mssqldb, BSD-3-Clause). - Check shows the version and edition, the service account, the recovery model of every database, what the account may not do, and whether SQL Server reads the server's backup folder.
- The backup folder:
BACKUP DATABASEwrites on the SQL Server host, so every file passes through a folder both SQL Server and DumpCat reach — the same path when DumpCat runs on the SQL Server host, otherwise a share or mount, entered as SQL Server sees it and as DumpCat sees it, or the agent (below). DumpCat reads each.bakinto the usual compression, encryption and SHA-256 pipeline, uploads it to every storage of the job and deletes it; restores pass through it the other way. The connection test writes a file through one path and has SQL Server read it through the other. - Through the agent, nothing shared: an agent started with
--allow-mssql-dirand SQL Server's backup folder (install.sh --agent … --allow 127.0.0.1:1433 --allow-mssql-dir /var/opt/mssql/backup, Windows-AllowMSSQLDir) reads the.bak/.trnfiles SQL Server writes there and streams them over its connection, and writes the files of restores there. Full, differential and log backups, restores, drills and point-in-time recovery then work for a SQL Server host behind NAT or without SMB, with As DumpCat sees it left empty; compression, encryption and SHA-256 stay on the DumpCat side. The agent only touches regulardumpcat-*files directly in that one folder, never replaces a file, and on Linux runs as the folder's owner (mssql) with write access to that folder only. The Agents page has a SQL Server folder column and a SQL Server option in the install dialog; the server form fills the folder in from the agent, and Check says how DumpCat reaches it. - One method, native backup: full backups on the job's schedule, differential backups on its second schedule (or Run → Differential backup),
WITH CHECKSUM,COMPRESSIONwhere the edition has it (then DumpCat stores the file without compressing it again),RESTORE VERIFYONLYon the server before each file is read, copy-only jobs, databases backed up in parallel, extraBACKUP … WITHoptions for admins. A differential whose base moved (a full backup taken by another tool) becomes a full backup, and says why. - Restores go through the target's backup folder: every file is checked there first (
RESTORE HEADERONLYmust show the backup set the catalog recorded,RESTORE VERIFYONLYmust pass), thenRESTORE DATABASE … WITH MOVEinto the instance's data and log folders under the new name, a differential on top of its full backup. A database that exists is only overwritten with Replace existing databases (WITH REPLACE, after closing its sessions); system databases never. Orphaned users and an unknown owner are listed in the log. - Restore drills restore the full backup and the differential under temporary names, run
DBCC CHECKDBon every copy, compare the tables and their row counts (sys.partitions, read right after the backup) and run the assertions in a transaction that is rolled back. - Point-in-time recovery: with log archiving on, DumpCat runs
BACKUP LOGfor every database of the job on a schedule (every 15 minutes by default; Back up the log now on the archive page) and archives each log backup with its LSNs and the marked transactions it holds. Recovery to a time (STOPAT, converted to the server's time zone), a marked transaction (STOPATMARK) or an LSN (decimal or00000025:00000080:0001), or the latest log backup: the backup is restoredWITH NORECOVERY, the log backups follow until one reaches the target. The plan checks the LSN chain first: a log backup taken by another tool is reported as a gap that recovery cannot cross, databases in the SIMPLE recovery model are named and refused.
Everything else
- A backup can be a differential: it belongs to the chain of its full backup for retention, deletion, restores, drills and point-in-time recovery, and imported catalogs keep the link. The API and MCP take
type: differential(an incremental schedule is a differential one for SQL Server jobs). - Servers have
backup_dirandbackup_dir_local(store migration 11), in the API and in MCP'screate_server/update_server; jobs havecopy_only,native_compressionandverify_only. Agents reportcaps.mssql(dir,user,error) inGET /api/agents, and a SQL Server'sGET /api/servers/{id}/infohasbackup_dir_via. - Agent:
--allow-mssql-dir/DUMPCAT_AGENT_MSSQL_DIR(an agent without it, or from before 1.8.0, keeps working for everything else; DumpCat names it when a SQL Server behind it needs the folder). - The server list no longer shows a TLS badge for servers with TLS disabled.