====== Microsoft SQL Server Backup ====== **SQL Backup Background**: https://wiki.ahsay.com/doku.php?id=public:microsoft_sql_database **Download SQL Server Management Studio**: https://msdn.microsoft.com/library/mt238290.aspx In general, it is **simpler and easier to restore a complete backup** (single file) than a differential or log backup (multiple file). If your backup window and storage permit, you might choose to implement full, complete, single file backups every night. ===== Database Restore ===== **[[https://blog.sqlauthority.com/2010/03/21/sql-server-fix-error-3117-the-log-or-differential-backup-cannot-be-restored-because-no-files-are-ready-to-rollforward |Log vs. Differential Restores]]** Many MSSQL backup systems (like Ahsay) **will only restore the files required for you to perform the actual database recovery**. It is convenient to use the **Microsoft SQL Server Management Studio** to perform the actual database recovery. When performing a recovery, it is important to **order the files properly** for a successful recovery. ==== MSSQL Management Studio ==== **Restore a Database Backup Using SSMS**: https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/restore-a-database-backup-using-ssms?view=sql-server-ver15 ==== Transact-SQL ==== |RESTORE DATABASE database_name FROM full_database_backup WITH NORECOVERY |complete database backup | |RESTORE DATABASE database_name FROM differential_backup WITH NORECOVERY |differential database backup | |RESTORE DATABASE database_name FROM log_backup WITH NORECOVERY |oldest log backup | |RESTORE DATABASE database_name FROM log_backup WITH NORECOVERY |next chronological log backup | |... |in chronological order | |RESTORE DATABASE database_name FROM log_backup WITH NORECOVERY |last log backup | |RESTORE DATABASE database_name WITH RECOVERY |recover the database | ===== Database Recovery Models ===== ==== Script ==== Set all databases to the FULL recovery model. Replace the three occurrences of "full" with "simple" if desired. USE master GO -- Declare a variable to store the value [database name] returned by FETCH. DECLARE @dbname sysname, @cmd varchar(1000) -- Declare a cursor to iterate through the list of databases DECLARE db_recovery_cursor CURSOR FOR SELECT name from sysdatabases -- Open the cursor OPEN db_recovery_cursor -- Perform the first fetch and store the value in a variable. FETCH NEXT FROM db_recovery_cursor INTO @dbname -- loop through cursor until no more records fetched WHILE @@FETCH_STATUS = 0 BEGIN IF (SELECT DATABASEPROPERTYEX(@dbname,'RECOVERY')) <> 'full' and @dbName <> 'tempdb' BEGIN -- create the alter database command for each database SET @cmd = 'ALTER DATABASE "' + @dbname + '" SET RECOVERY full' -- alter each database setting the recovery model to full EXEC(@cmd) PRINT @dbname END FETCH NEXT FROM db_recovery_cursor INTO @dbname END -- close the cursor and deallocate memory used by cursor CLOSE db_recovery_cursor DEALLOCATE db_recovery_cursor