Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Документация (https://forum.zone-game.info/forumdisplay.php?f=92)
-   -   [Guilde]Автобекапы на MSSQLEXPRESS 2005 (https://forum.zone-game.info/showthread.php?t=6064)

MMd 17.01.2010 13:27

[Guilde]Автобекапы на MSSQLEXPRESS 2005
 
Сегодняшний гайд будет о автобекапах в MSSQLEXPRESS 2005 ввиду отсутствия SQL Agent из за безплатности данной программы.

Приступим.

1.Открываем SQL managment studio, В левом верхнем углу жмем на "New Query".
2.Вставляем вот этот запрос:
Код:

CREATE PROCEDURE [dbo].[BackupDatabases]
(
    @BackupDir varchar(400),
    @DatabaseName sysname = null,
    @BackupType int = 0 -- 0=Full, 1=Differential, 2=Log
)
AS

-- -- Begin Test Code
-- DECLARE @BackupDir varchar(400)
-- SET @BackupDir = 'D:\SQLBackups\Daily\'
-- -- End Test Code

-- Create worker table
DECLARE @DBNames TABLE
(
    RowID int IDENTITY PRIMARY KEY,
    DBName varchar(500)
)

-- Grab the Database Names from master DB
INSERT INTO @DBNames (DBName)
SELECT Name FROM master.sys.databases
WHERE name = @DatabaseName
  OR @DatabaseName IS NULL
ORDER BY Name

-- The below databases are not valid to backup
IF @BackupType = 0
BEGIN
    DELETE @DBNames WHERE DBName IN ('tempdb', 'NorthWind', 'pubs')
END
ELSE IF @BackupType = 1
BEGIN
    DELETE @DBNames WHERE DBName IN ('tempdb', 'NorthWind', 'pubs', 'master')
END
ELSE IF @BackupType = 2
BEGIN
    DELETE @DBNames WHERE DBName IN ('tempdb', 'NorthWind', 'pubs', 'master', 'msdb', 'model')
END

IF (@BackupType < 0 OR @BackupType > 2)
    OR NOT EXISTS (SELECT 1 FROM @DBNames)
BEGIN
    RETURN;
END


-- Declare Session Variables
DECLARE @Now datetime
DECLARE @TodayStr varchar(20)
DECLARE @BackupName varchar(100)
DECLARE @BackupFile varchar(100)
DECLARE @DBName varchar(300)
DECLARE @LogFileName varchar(300)
DECLARE @SQL varchar(2000)
DECLARE @Loopvar int

-- Begin looping over Databases in the Work Table
SELECT @Loopvar = min(rowID)
FROM @DBNames

WHILE @Loopvar IS NOT NULL
BEGIN

-- Database Names have to have [dbname] format since some names have a - or _ in the name
SET @DBName = '['+(SELECTEND
ELSE IF @BackupType = 1
BEGIN
    DELETE @DBNames WHERE DBName IN ('tempdb', 'NorthWind', 'pubs', 'master')
END
ELSE IF @BackupType = 2
BEGIN
    DELETE @DBNames WHERE DBName IN ('tempdb', 'NorthWind', 'pubs', 'master', 'msdb', 'model')
END

IF (@BackupType < 0 OR @BackupType > 2)
    OR NOT EXISTS (SELECT 1 FROM @DBNames)
BEGIN
    RETURN;
END


-- Declare Session Variables
DECLARE @Now datetime
DECLARE @TodayStr varchar(20)
DECLARE @BackupName varchar(100)
DECLARE @BackupFile varchar(100)
DECLARE @DBName varchar(300)
DECLARE @LogFileName varchar(300)
DECLARE @SQL varchar(2000)
DECLARE @Loopvar int

-- Begin looping over Databases in the Work Table
SELECT @Loopvar = min(rowID)
FROM @DBNames

WHILE @Loopvar IS NOT NULL
BEGIN

-- Database Names have to have [dbname] format since some names have a - or _ in the name
SET @DBName = '['+(SELECT DBName FROM @DBNames WHERE RowID = @LoopVar)+']'

-- Set the current date and time
SET @Now = getdate()

-- Create backup file date and time in DOS format yyyy_hhmmss
Set @TodayStr = convert(varchar, @Now, 112)+ '_'+replace(convert(varchar, @Now, 108), ':', '')

-- Create a variable holding the total path\filename.ext for the log backup
Set @BackupFile = @BackupDir+REPLACE(REPLACE(@DBName, '[',''), ']','')+'-'+ @TodayStr + '-FULL.BAK'

-- Provide the backup a SQL na15">''', NOSKIP, NOFORMAT'
END
ELSE IF @BackupType = 1
BEGIN
    SET @SQL = 'BACKUP DATABASE ' + @DBName + ' TO DISK = ''' + @BackupFile + ''' WITH DIFFERENTIAL, INIT, NAME = ''' +@BackupName+''', NOSKIP, NOFORMAT'
END
ELSE IF @BackupType = 2
BEGIN
    SET @SQL = 'BACKUP LOG ' + @DBName + ' TO DISK = ''' + @BackupFile + ''' WITH INIT, NAME = ''' +@BackupName+''' , NOSKIP, NOFORMAT'
END

-- Execute the SQL Command
EXEC(@SQL)

-- Goto the Next Database
SELECT @Loopvar = min(rowID)
FROM @DBNames
WHERE RowID > @LoopVar
END

И выполняем его в базу Master.(Пояснение: это создаст нужную процедуру в базе master для Автобекапов.)
Закрываем менеджер.

3.Далее идем пуск>панель управления и там находим назначение заданий(task sheduler) заходим в папку и жмем пкм>создать>новое задание.

4.Открываем наше новое задание и вставляем в выполнить:
Код:

sqlcmd -S .\SQLEXPRESS -Q "EXEC BackupDatabases @BackupDir='C:\AutoBackUpSQL\', @DatabaseName='RF_World', @BackupType=0"
Где @BackupDir='C:\AutoBackUpSQL\' указываем куда будут складироваться наши бекапы.
Где @DatabaseName='RF_World' название нашей базы.

5.Переходим на вкладку расписание и выставляем время в которое хотите чтобы делались бекапы.(Если хотите делать каждый час или 2 или 3 без разницы жмем на дополнительно и ставим птичку на повторять задание)
Где каждые: ставим через сколько будет повоторяться задание.
Далее выбераем выполнять до:
И там ставим XX:59 поясняю, допустим у вас задание начинает работу с 9:00 мы выставляем 8:59 и оно будет выполняться круглосуточно.
Вот и все.

(П.С. желательно поставьте пароль на пользователя.)
Помог - спасибку.
MMd.

nelegal 08.02.2010 07:23

Re: [Guilde]Автобекапы на MSSQLEXPRESS 2005
 
вообще то есть уже такое и в картинках ))

Junke 14.02.2010 22:56

Re: [Guilde]Автобекапы на MSSQLEXPRESS 2005
 
копипаст с ed. Автор гайда я (Mansion©)


Текущее время: 05:49. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot