Backup Restore


Tag : SQL,Restore,SQL Server

Här är lite script för att kontrollera hur lång tid det är kvar på backuper och restore, plus lite annat som kan vara bra att veta kring backuper och restore.

-- 1. FÖR ATT KONTROLLERA TID KVAR PÅ BACKUP ELLER RESTORE AV DB. 

SELECT [command], 'EstimatedEndTime' = Dateadd(ms, estimated_completion_time, Getdate()), 'EstimatedSecondsToEnd' = estimated_completion_time / 1000, 'EstimatedMinutesToEnd' = estimated_completion_time / 1000 / 60, 'BackupStartTime' = start_time, 'PercentComplete' = percent_complete FROM sys.dm_exec_requests WHERE [command] IN ( 'BACKUP DATABASE', 'RESTORE DATABASE', 'RESTORE LOG', 'BACKUP LOG' )


-- 2. FÖR ATT LÄSA VAD SOM ÄR BACKUPDIRECTORY:

EXEC master.dbo.Xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'BackupDirectory'


-- 3. För att sätta korrekt BackupDirectory:

EXEC master.dbo.Xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'BackupDirectory', reg_sz, N'P:\DBBackup'


-- 4. DELETE ALL BACKUP/RESTORE HISTORY PRIOR TO A SPECIFIED DATE

USE msdb

go

EXEC Sp_delete_backuphistory '2009-04-02'

go


-- 5. DELETE ALL BACKUP HISTORY FOR A SPECIFIC DATABASE

USE msdb

go

EXEC Sp_delete_database_backuphistory 'test1'

go


-- 6. FÖR ATT KONTROLLERA HUR MYCKET BCK HISTORIKEN ÄR

SELECT * FROM backupfile


-- 7. FÖR ATT KONTROLLERA NÄR SENASTE BACKUPER GÅTT

SELECT CONVERT(CHAR(100), Serverproperty('Servername')) AS Server, msdb.dbo.backupset.database_name, Max(msdb.dbo.backupset.backup_finish_date) AS last_db_backup_date FROM msdb.dbo.backupmediafamily INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id WHERE msdb..backupset.type = 'D' GROUP BY msdb.dbo.backupset.database_name ORDER BY last_db_backup_date DESC

--msdb.dbo.backupset.database_name desc


-- 8. FÖR ATT KONTROLLERA NÄR SENASTE BACKUPER GÅTT LITE ENKLARE ATT LÄSA RESULTATET

SELECT B.NAME AS Database_Name, Isnull(Str(Abs(Datediff(day, Getdate(), Max(backup_finish_date)))), 'NEVER') AS DaysSinceLastBackup, Isnull(CONVERT(CHAR(10), Max(backup_finish_date), 101), 'NEVER') AS LastBackupDate FROM master.dbo.sysdatabases B LEFT OUTER JOIN msdb.dbo.backupset A ON A.database_name = B.NAME AND A.type = 'D' GROUP BY B.NAME ORDER BY B.NAME


-- 9. FÖR ATT KONTROLLERA NÄR DB SENAST BLEV RESTORED

DECLARE @dbname SYSNAME, @days INT

SET @dbname = NULL --substitute for whatever database name you want SET @days = -30 --previous number of days, script will default to 30

SELECT rsh.destination_database_name AS [Database], rsh.user_name AS [Restored By], CASE WHEN rsh.restore_type = 'D' THEN 'Database' WHEN rsh.restore_type = 'F' THEN 'File' WHEN rsh.restore_type = 'G' THEN 'Filegroup' WHEN rsh.restore_type = 'I' THEN 'Differential' WHEN rsh.restore_type = 'L' THEN 'Log' WHEN rsh.restore_type = 'V' THEN 'Verifyonly' WHEN rsh.restore_type = 'R' THEN 'Revert' ELSE rsh.restore_type END AS [Restore Type], rsh.restore_date AS [Restore Started], bmf.physical_device_name AS [Restored From], rf.destination_phys_name AS [Restored To] FROM msdb.dbo.restorehistory rsh INNER JOIN msdb.dbo.backupset bs ON rsh.backup_set_id = bs.backup_set_id INNER JOIN msdb.dbo.restorefile rf ON rsh.restore_history_id = rf.restore_history_id INNER JOIN msdb.dbo.backupmediafamily bmf ON bmf.media_set_id = bs.media_set_id WHERE rsh.restore_date >= Dateadd(dd, Isnull(@days, -30), Getdate()) --want to search for previous days AND destination_database_name = Isnull(@dbname, destination_database_name ) --if no dbname, then return all ORDER BY rsh.restore_history_id DESC

go


-- 10. BACKUP AV SAMTLIGA ANVÄNDAR DATABASER

DECLARE @name VARCHAR(50) -- database name
DECLARE @path VARCHAR(256) -- path for backup files
DECLARE @fileName VARCHAR(256) -- filename for backup
DECLARE @fileDate VARCHAR(20) -- used for file name -- specify database backup directory SET @path = 'P:\DBBackup\'

-- specify filename format SELECT @fileDate = CONVERT(VARCHAR(20), Getdate(), 112)

DECLARE db_cursor CURSOR FOR   SELECT NAME   FROM master.dbo.sysdatabases   WHERE NAME NOT IN ( 'master', 'model', 'msdb', 'tempdb' ) -- exclude these databases OPEN db_cursor

FETCH next FROM db_cursor INTO @name

WHILE @@FETCHSTATUS = 0   BEGIN       SET @fileName = @path + @name + '' + @fileDate + '.BAK'

      BACKUP DATABASE @name TO DISK = @fileName

      FETCH next FROM db_cursor INTO @name   END

CLOSE db_cursor

DEALLOCATE db_cursor

About

Det här är min digitala anteckningsbok för allt som har med databaser, automatisering och teknik att göra.
Här samlar jag alla de där skripten, lösningarna och knepen jag byggt på mig under åren – främst inom SQL Server och PowerShell.
Istället för att de ska ligga och damma i en glömd mapp delar jag med mig av dem här, så att både jag själv (när minnet sviker) och du förhoppningsvis kan spara några timmars klickande.