Создание Snapshot базы данных

добавлено: 19 окт 13
понравилось:0
просмотров: 1495
комментов: 1

теги:

Автор: Andraptor

Когда-то уже выкладывал на форуме. Но пусть все будет в одном месте, к тому же немного подправил.
--создается SNAPSHOT для указанной базы данных в формате: ИмяБазыДанных+_SS+ГодМесяцДень+ЧасМинута
--файлы SNAPSHOT создаются в тех же местах, что и исходные файлы, если явно не указан другой путь
USE DB1

DECLARE @FilePath VARCHAR(2000) = ''
	,@SnapDBName VARCHAR(200) = db_name() + '_SS' + convert(VARCHAR(10), getdate(), 112) + '_' + right('0' + Datename(hh, getdate()), 2) + right('0' + Datename(mi, getdate()), 2)
	,@result VARCHAR(max) = ''

IF db_id(@SnapDBName) IS NULL
BEGIN
	SET @result = 'CREATE DATABASE [' + @SnapDBName + '] ON 
'

	--SET @FilePath = 'E:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\'
	IF @FilePath = ''
		SELECT @Result += ' ( NAME = ' + NAME + ', FILENAME = ''' + reverse(substring(reverse(physical_name), charindex('\', reverse(physical_name)), len(reverse(physical_name)))) + reverse(substring(reverse(physical_name), charindex('.', reverse(physical_name)) + 1, charindex('\', reverse(physical_name)) - charindex('.', reverse(physical_name)) - 1)) + '_SS' + convert(VARCHAR(10), getdate(), 112) + '_' + right('0' + Datename(hh, getdate()), 2) + right('0' + Datename(mi, getdate()), 2) + '.ss''),
'
		FROM sys.master_files
		WHERE database_id = db_id()
			AND [type] = 0
	ELSE
		SELECT @Result += ' ( NAME = ' + NAME + ', FILENAME = ''' + @FilePath + reverse(substring(reverse(physical_name), charindex('.', reverse(physical_name)) + 1, charindex('\', reverse(physical_name)) - charindex('.', reverse(physical_name)) - 1)) + '_SS' + convert(VARCHAR(10), getdate(), 112) + '_' + right('0' + Datename(hh, getdate()), 2) + right('0' + Datename(mi, getdate()), 2) + '.ss''),
'
		FROM sys.master_files
		WHERE database_id = db_id()
			AND [type] = 0

	SET @Result = stuff(@Result, len(@Result) - 2, 1, '') --обрезаем последнюю запятую
	SET @Result += 'AS SNAPSHOT OF ' + quotename(db_name())

	--PRINT (@result)
	EXEC (@result)
END

Комментарии




Необходимо войти на сайт, чтобы оставлять комментарии