Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запуск backup из bat без указания логина-пароля  [new]
nnmserg11
Member

Откуда: Р.Ф.
Сообщений: 86
Народ, всем хэллоу!

Есть задача - создание backup'а по задаче из планировщика ОС для MS SQL Express(( При этом, в bat'нике не должна прописываться учетная запись (логин-пароль) пользователя, из-под которого делается резервная копия.

Я нашел руководство от M$ (https://support.microsoft.com/en-us/help/2019698/how-to-schedule-and-automate-backups-of-sql-server-databases-in-sql-se), но что-то видимо мною понято не верно, т.к. кроме создания пустого файла *.txt ничего не происходит.

Вопрос:
правильно ли я понимаю, что достаточно скрипт_1 запустить в M$ SQL (без внесения каких-либо изменений), а для скрипта_2 создать bat (изменив пути сохранения резервной копии и лога) и соот-но задачу в планировщике?

Скрипты (прошу не ругать, а скопировать в какой-нибудь notepad++, т.к. пробелы и отступы удаляется автоматом):

1. Скрипт для master database:

USE [master] 
GO 
/****** Object:  StoredProcedure [dbo].[sp_BackupDatabases] ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
-- ============================================= 
-- Author: Microsoft 
-- Create date: 2010-02-06
-- Description: Backup Databases for SQLExpress
-- Parameter1: databaseName 
-- Parameter2: backupType F=full, D=differential, L=log
-- Parameter3: backup file location
-- =============================================
CREATE PROCEDURE [dbo].[sp_BackupDatabases]  
            @databaseName sysname = null,
            @backupType CHAR(1),
            @backupLocation nvarchar(200) 
AS 
       SET NOCOUNT ON; 
            DECLARE @DBs TABLE
            (
                  ID int IDENTITY PRIMARY KEY,
                  DBNAME nvarchar(500)
            )
             -- Pick out only databases which are online in case ALL databases are chosen to be backed up
             -- If specific database is chosen to be backed up only pick that out from @DBs
            INSERT INTO @DBs (DBNAME)
            SELECT Name FROM master.sys.databases
            where state=0
            AND name=@DatabaseName
            OR @DatabaseName IS NULL
            ORDER BY Name
            -- Filter out databases which do not need to backed up
            IF @backupType='F'
                  BEGIN
                  DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','AdventureWorks')
                  END
            ELSE IF @backupType='D'
                  BEGIN
                  DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','master','AdventureWorks')
                  END
            ELSE IF @backupType='L'
                  BEGIN
                  DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','master','AdventureWorks')
                  END
            ELSE
                  BEGIN
                  RETURN
                  END
            -- Declare variables
            DECLARE @BackupName varchar(100)
            DECLARE @BackupFile varchar(100)
            DECLARE @DBNAME varchar(300)
            DECLARE @sqlCommand NVARCHAR(1000) 
        DECLARE @dateTime NVARCHAR(20)
            DECLARE @Loop int                  
            -- Loop through the databases one by one
            SELECT @Loop = min(ID) FROM @DBs
      WHILE @Loop IS NOT NULL
      BEGIN
-- Database Names have to be in [dbname] format since some have - or _ in their name
      SET @DBNAME = '['+(SELECT DBNAME FROM @DBs WHERE ID = @Loop)+']'
-- Set the current date and time n yyyyhhmmss format
      SET @dateTime = REPLACE(CONVERT(VARCHAR, GETDATE(),101),'/','') + '_' +  REPLACE(CONVERT(VARCHAR, GETDATE(),108),':','')  
-- Create backup filename in path\filename.extension format for full,diff and log backups
      IF @backupType = 'F'
            SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_FULL_'+ @dateTime+ '.BAK'
      ELSE IF @backupType = 'D'
            SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_DIFF_'+ @dateTime+ '.BAK'
      ELSE IF @backupType = 'L'
            SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_LOG_'+ @dateTime+ '.TRN'
-- Provide the backup a name for storing in the media
      IF @backupType = 'F'
            SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' full backup for '+ @dateTime
      IF @backupType = 'D'
            SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' differential backup for '+ @dateTime
      IF @backupType = 'L'
            SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' log backup for '+ @dateTime
-- Generate the dynamic SQL command to be executed
       IF @backupType = 'F' 
                  BEGIN
               SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' WITH INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'
                  END
       IF @backupType = 'D'
                  BEGIN
               SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' WITH DIFFERENTIAL, INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'        
                  END
       IF @backupType = 'L' 
                  BEGIN
               SET @sqlCommand = 'BACKUP LOG ' +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' WITH INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'        
                  END
-- Execute the generated SQL command
       EXEC(@sqlCommand)
-- Goto the next database
SELECT @Loop = min(ID) FROM @DBs where ID>@Loop
END

2. Скрипт для bat: (Step B, Example 4 по ссылке от M$)

sqlcmd -S .\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @databaseName=’USERDB’, @backupType='F'"

Сообщение было отредактировано: 9 фев 18, 00:51
8 фев 18, 23:35    [21178526]     Ответить | Цитировать Сообщить модератору
 Re: Запуск backup из bat без указания логина-пароля  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
не то что-то пишете.
никакое тхт не сoздается.
или вам будет выдана ошибка синтаксиса
(а она есть, ибо параметр-база передает имя базы в каких-то левых апострофах),
или ошибка подключения (например, сервер не найден)
---
у меня ваша проца отработала из cmd без ошибок,
создав файл бэкапа master_FULL_02092018_112326.BAK по указанному пути
9 фев 18, 13:29    [21179801]     Ответить | Цитировать Сообщить модератору
 Re: Запуск backup из bat без указания логина-пароля  [new]
_human
Member

Откуда:
Сообщений: 560
nnmserg11
Вопрос:
правильно ли я понимаю, что достаточно скрипт_1 запустить в M$ SQL (без внесения каких-либо изменений), а для скрипта_2 создать bat (изменив пути сохранения резервной копии и лога) и соот-но задачу в планировщике?

Да.

+
Можете добавить сообщения в процеруду для дебага и записать в лог

sqlcmd -S .\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @databaseName=’USERDB’, @backupType='F'" -o "<output file path>"

9 фев 18, 14:03    [21179973]     Ответить | Цитировать Сообщить модератору
 Re: Запуск backup из bat без указания логина-пароля  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
_human
nnmserg11
Вопрос:
правильно ли я понимаю, что достаточно скрипт_1 запустить в M$ SQL (без внесения каких-либо изменений), а для скрипта_2 создать bat (изменив пути сохранения резервной копии и лога) и соот-но задачу в планировщике?

Да.

+
Можете добавить сообщения в процеруду для дебага и записать в лог

sqlcmd -S .\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @databaseName=’USERDB’, @backupType='F'" -o "<output file path>"


вы так и тащите за собой изначаньно неверные апострофы в скрипте:
@databaseName=’USERDB’
9 фев 18, 14:15    [21180038]     Ответить | Цитировать Сообщить модератору
 Re: Запуск backup из bat без указания логина-пароля  [new]
nnmserg11
Member

Откуда: Р.Ф.
Сообщений: 86
_human, Yasha123,

Спасибо, ребят)) Действительно ошибся)) Всё отработало, внес корректировки и лог в файл записываю.
9 фев 18, 16:16    [21180640]     Ответить | Цитировать Сообщить модератору
 Re: Запуск backup из bat без указания логина-пароля  [new]
AlexDE
Member

Откуда: Bayern, Germany
Сообщений: 236
Пример на локальном сервере работает, а как интересно , можно таким скриптом бэкапнутъ базу на удаленном сервере, на нужный мне сетевой диск. В менеджмент студии не дает мне выбирать сетевые диски, только локальные где база стоит.
26 окт 18, 15:56    [21716285]     Ответить | Цитировать Сообщить модератору
 Re: Запуск backup из bat без указания логина-пароля  [new]
AlexDE
Member

Откуда: Bayern, Germany
Сообщений: 236
и если на нормальном стандарте стоит , не на Ехпресе, с указанием пользователя и пароля
26 окт 18, 16:05    [21716301]     Ответить | Цитировать Сообщить модератору
 Re: Запуск backup из bat без указания логина-пароля  [new]
aleks222
Member

Откуда:
Сообщений: 956
AlexDE
Пример на локальном сервере работает, а как интересно , можно таким скриптом бэкапнутъ базу на удаленном сервере, на нужный мне сетевой диск. В менеджмент студии не дает мне выбирать сетевые диски, только локальные где база стоит.

Для доступа на удаленный сервер нужно иметь возможность авторизоваться на нем, т.е. нужно имя и пароль.
Бэкап делает СЕРВЕР от "себя лично".

Анализируй это.
26 окт 18, 16:06    [21716305]     Ответить | Цитировать Сообщить модератору
 Re: Запуск backup из bat без указания логина-пароля  [new]
AlexDE
Member

Откуда: Bayern, Germany
Сообщений: 236
ползователь и пароль есть просто орфографию не знаю для батника
26 окт 18, 16:14    [21716316]     Ответить | Цитировать Сообщить модератору
 Re: Запуск backup из bat без указания логина-пароля  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
AlexDE
Пример на локальном сервере работает, а как интересно , можно таким скриптом бэкапнутъ базу на удаленном сервере, на нужный мне сетевой диск. В менеджмент студии не дает мне выбирать сетевые диски, только локальные где база стоит.

что видит, то и показывает.
а чтобы он смог еще что-то увидеть, надо ЕГО учетке(под которой сервис запущен)
выдать права на интересующие диски
26 окт 18, 16:42    [21716360]     Ответить | Цитировать Сообщить модератору
 Re: Запуск backup из bat без указания логина-пароля  [new]
AlexDE
Member

Откуда: Bayern, Germany
Сообщений: 236
В том то и проблема , я хочу динамически к НАС Серверу подключаться, а потом отрубать, это надо так как НАС запоролен. Если я его просто как сетевой диск подключаю, он периодически отвисает. Начнает появлятся окно с запросом пароля. Я хотел в батнике отрубать его , потом заново подключать, А потом бэкапить на него по сети.
26 окт 18, 16:59    [21716391]     Ответить | Цитировать Сообщить модератору
 Re: Запуск backup из bat без указания логина-пароля  [new]
AlexDE
Member

Откуда: Bayern, Germany
Сообщений: 236
Похоже селект подправить надо, прокатит так?
CREATE PROCEDURE [dbo].[sp_BackupDatabases]  
            @databaseName sysname = null,
            @backupType CHAR(1),
            @backupLocation nvarchar(200)
	    @DBUser char(3) 
	    @DBPassword char(15) 
AS 
       SET NOCOUNT ON; 
            DECLARE @DBs TABLE
            (
                  ID int IDENTITY PRIMARY KEY,
                  DBNAME nvarchar(500)
            )
             -- Pick out only databases which are online in case ALL databases are chosen to be backed up
             -- If specific database is chosen to be backed up only pick that out from @DBs
            INSERT INTO @DBs (DBNAME)
            SELECT Name FROM master.sys.databases
            where state=0
            AND name=@DatabaseName
            OR @DatabaseName user=@DBUser password = @DBPassword IS NULL
            ORDER BY Name
            -- Filter out databases ...........................................
26 окт 18, 17:05    [21716404]     Ответить | Цитировать Сообщить модератору
 Re: Запуск backup из bat без указания логина-пароля  [new]
aleks222
Member

Откуда:
Сообщений: 956
AlexDE
ползователь и пароль есть просто орфографию не знаю для батника

Не, батенька, нихрена ты не понял.

Какая орфография, ежели ты ишо алфавит не выучил?
27 окт 18, 08:55    [21716724]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить