01-17-2010, 01:27 PM
Сегодняшний гайд будет о автобекапах в MSSQLEXPRESS 2005 ввиду отсутствия SQL Agent из за безплатности данной программы.
Приступим.
1.Открываем SQL managment studio, В левом верхнем углу жмем на "New Query".
2.Вставляем вот этот запрос:
И выполняем его в базу Master.(Пояснение: это создаст нужную процедуру в базе master для Автобекапов.)
Закрываем менеджер.
3.Далее идем пуск>панель управления и там находим назначение заданий(task sheduler) заходим в папку и жмем пкм>создать>новое задание.
4.Открываем наше новое задание и вставляем в выполнить:
Где @BackupDir='C:\AutoBackUpSQL\' указываем куда будут складироваться наши бекапы.
Где @DatabaseName='RF_World' название нашей базы.
5.Переходим на вкладку расписание и выставляем время в которое хотите чтобы делались бекапы.(Если хотите делать каждый час или 2 или 3 без разницы жмем на дополнительно и ставим птичку на повторять задание)
Где каждые: ставим через сколько будет повоторяться задание.
Далее выбераем выполнять до:
И там ставим XX:59 поясняю, допустим у вас задание начинает работу с 9:00 мы выставляем 8:59 и оно будет выполняться круглосуточно.
Вот и все.
(П.С. желательно поставьте пароль на пользователя.)
Помог - спасибку.
MMd.
Приступим.
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
Закрываем менеджер.
3.Далее идем пуск>панель управления и там находим назначение заданий(task sheduler) заходим в папку и жмем пкм>создать>новое задание.
4.Открываем наше новое задание и вставляем в выполнить:
Код:
sqlcmd -S .\SQLEXPRESS -Q "EXEC BackupDatabases @BackupDir='C:\AutoBackUpSQL\', @DatabaseName='RF_World', @BackupType=0"
Где @DatabaseName='RF_World' название нашей базы.
5.Переходим на вкладку расписание и выставляем время в которое хотите чтобы делались бекапы.(Если хотите делать каждый час или 2 или 3 без разницы жмем на дополнительно и ставим птичку на повторять задание)
Где каждые: ставим через сколько будет повоторяться задание.
Далее выбераем выполнять до:
И там ставим XX:59 поясняю, допустим у вас задание начинает работу с 9:00 мы выставляем 8:59 и оно будет выполняться круглосуточно.
Вот и все.
(П.С. желательно поставьте пароль на пользователя.)
Помог - спасибку.
MMd.
Да, я флудер.
Но еслиб все были флудерами с такими же знаниями как у меня, то мы давно переплюнули бы корейцев.
Ищутся спецы во флэше и Актив Скрипте-для разработки веб обвязки.Обращаться в ЛС или в асю.
"Все что создал человек, можно взломать - идеальной защиты не существует" ©MMd
Но еслиб все были флудерами с такими же знаниями как у меня, то мы давно переплюнули бы корейцев.
Ищутся спецы во флэше и Актив Скрипте-для разработки веб обвязки.Обращаться в ЛС или в асю.
"Все что создал человек, можно взломать - идеальной защиты не существует" ©MMd