Имя: Пароль:
1C
1С v8
Backup SQL на сетевой диск
0 Tanis
 
21.01.13
11:50
Добрый день!
Подскажите, пожалуйста, как правильно сделать сохранение бэкапов на сетевой диск.
SQL 2005.
1 shuhard
 
21.01.13
11:51
(0) бат файлом/шагом плана с локального
2 Tanis
 
21.01.13
11:58
т.е?
3 Tanis
 
21.01.13
12:02
Я в скул запускаю

USE master
EXEC sp_addumpdevice 'disk', 'Nw1', '\\Комп\1C_Backup'

Он подключается в бэкап - девайсы, но потом при попытки входа на него пишет
System.Data.SqlClient.SqlError: Cannot open backup device 'Nw1(\\Комп\1C_Backup)'. Operating system error 1326(Вход в систему не произведен: имя пользователя или пароль не опознаны.). (Microsoft.SqlServer.Smo)
4 Heckfy
 
21.01.13
12:05
Запусти SQL под сетевой службой. Сетевой службе дать права модифай на сетевой каталог.
5 Господин ПЖ
 
21.01.13
12:09
(3) local system не умеет работать с сетью
6 Heckfy
 
21.01.13
12:11
(3) И это, удобнее намного планами обслуживания пользоваться. :)
7 Иде я?
 
модератор
21.01.13
12:11
ДЕлай бакап в локальный файл
и потом батников копируй
8 ssh2012
 
21.01.13
12:12
(0) добавление к (1) - Бэкап создавай с помощью планов обслуживания (maintance plan), 1 шаг - создание бэкапа, 2 запуск bat файла, который выполняет копирование
9 Heckfy
 
21.01.13
12:13
(7) Вот зачем забор городить, если скуль сам умеет на сеть сливать.
ЗЫ: Кстати, базы тоже можно на сетевом ресурсе разместить.
10 Sammo
 
21.01.13
12:16
Делай на локальный + отдельная job-а с копированием в сеть.
Плюс - есть локальный архив, если грохнут базу - не надо копировать из сети
11 ДенисЧ
 
21.01.13
12:16
(9) Правильно. Лучше всего базы в сети держать... Ещё раскидать на несколько...
12 ssh2012
 
21.01.13
12:19
Да в облака сразу базы, чего там
13 ZanderZ
 
21.01.13
12:19
(9) сеть отвалиться останешься без копии
14 Tanis
 
21.01.13
12:29
Копии будут, как тогда из SQL сливать в сеть.
15 Tanis
 
21.01.13
13:10
пошагово может кто-нибудь написать? для чайников
16 Heckfy
 
21.01.13
13:31
(15) Домен есть? И там и там винда?
17 Kavar
 
21.01.13
13:33
(15) Делаешь задание и бэкапиш базу на локальный диск.
затем батником архивируешь и перемещаешь в сеть.
все.
18 pessok
 
21.01.13
13:35
в (5) написать все и даже больше, о чем тут еще полемика?
19 pessok
 
21.01.13
13:35
(17) какой ужас...
20 pessok
 
21.01.13
13:36
fix:(18) в (5) написано
21 Smallrat
 
21.01.13
13:37
(0) делаешь план обслуживания с сохранением в локальный каталог.
Делаешь батник

xcopy /d /e d:\1C_Arhiv\*.* \\srv_backup\1C_Arhiv\
killdateparam.vbs /path:"d:\1C_Arhiv" /killdate:10 /recur:true

прописываешь его в планировщик заданий

killdateparam можно взять тут:
http://i-g-d-a.narod.ru/lan/kill_old_files.html

в итоге на локальном диске будут архивы десятидневной давности и в сети все чтобы были.
22 Maxus43
 
21.01.13
13:39
в maintance plan всё сделать, зачем мозг выносить? там при указании куда делать бэкап добавляем сетевой диск, так же указывается и (21) там, сколько по времени их хранить, и много чего другого в планах мышкой сделать не напрягая мозжечек излишними флуктуациями
23 fisher
 
21.01.13
13:39
(15) Служба сиквела должна стартовать под доменной учеткой с правами на сетевой ресурс
24 Maxus43
 
21.01.13
13:41
(23) юзера для сетевого диска указывать там же (22).
Что-то вы господа всё усложняете
25 Оболтус
 
21.01.13
13:48
Я тоже батниками настроил.
26 Maxus43
 
21.01.13
13:54
(24) + поправка, юзера не надо, только путь к шаре. эзер скл агента используется конечно
27 fisher
 
21.01.13
14:03
(26) :) Ну дык см. (23)
28 Maxus43
 
21.01.13
14:08
(27) да я ругался что батники, скрипты и т.д. вешают... штатными средствами всё легче и веселей)
29 olegves
 
21.01.13
14:09
(15) поиск на sql.ru "backup базы на сетевой диск"
получишь вариантов кучу и выбирай, что хочешь
30 Tanis
 
21.01.13
14:20
не работают пока просмотренные варианты, по настройке скул с сайтов по скул
31 Оболтус
 
22.01.13
07:32
Батники хороши тем, что имеем универсальный механизм и для SQL Express.
32 Tanis
 
11.02.13
10:52
Добрый день!
Можно поподробнее о настройке maintance plan?
Как там настроить Бэкап и его слив в сеть.
33 MaxS
 
11.02.13
10:57
(21) Можно уточнение по этому скрипту, который удаляет всё, что старше 10 дней?
Если бэкап сломался и не делается, а удаление исправно работает, через 10 дней получим полное отсутствие бэкапов?
34 Smallrat
 
11.02.13
11:07
(33) хороший вопрос... по идее, если сломается бекап - у нас останется всё на сетевом диске.
а если сломается сетевой диск... гмм. надо наверное дописать по кодам возврата успешного копирования
35 Smallrat
 
11.02.13
11:33
(33)(34) вот так
xcopy /d /e d:\1C_Arhiv\*.* \\srv_backup\1C_Arhiv\
if errorlevel 1 goto exit
killdateparam.vbs /path:"d:\1C_Arhiv" /killdate:10 /recur:true
:exit
36 Tanis
 
11.02.13
11:58
а по настройке  maintance plan?
37 Smallrat
 
11.02.13
12:11
38 Tanis
 
11.02.13
12:39
Спасибо!
Только это не совсем то, что просил. Бэкапы настроены, в JOB.
Меня интересует их архивация и сохранение в сеть (или копирование).

Авторы выше, писали что это все можно сделать в Планах.
39 Tanis
 
11.02.13
12:40
а в целом полезная ссылка.
40 Минона
 
11.02.13
12:46
(0) Создаете юзера SQLBackup, желательно админом сделать
на сетевую папку этому юзеру даете полные права
(у вас домен или что?)

На SQL сервере идёте сюда:
Администрирование - Службы
Ищем "Агент SQL Server" (или по аглицки)
Свойства - Вход в систему - С учетной записью
тут указываем нашего юзера SQLBackup и вводим пароль
перезапускаем службу, запускаем backup и проверяем
41 Tanis
 
11.02.13
13:01
Да домен.
А запуск службы самого SQL, от системной делать?
я пробовал запускать службу SQL от своей учетки, тогда Backup devices устанавливается на сетевой диск и работает. Но не стартует агент сервера.
А если агента запустить с Админской учеткой, то Бэкап сразу из Job настраивать?
42 Минона
 
11.02.13
13:08
(41) Бэкап настраивать в maintance plan (планы обслуживания)
В таком случае создаются Jobs (задания), они как раз и видны если смотреть в "SQL Server Management Studio" внизу у Агента.
Вот как раз они и будут запускаться под логином службы "Агент SQL"

От кого запущен сам SQL - это то от чьего имени будет работать сам движок и ручные запросы. А Задачи запусает Агент (по расписанию).
43 Минона
 
11.02.13
13:10
(42) +
Запустите сам SQL тоже под записью юзера SQLBackup.
Меньше проблем будет.
44 Tanis
 
11.02.13
13:50
А не лучше чтоб SQL работал по системной? А то говорят, что может учетку выбивать, если под учеткой запускать.
45 Минона
 
11.02.13
13:54
(44) 4 года - полет нормальный
по крайней мере у вас ручные запросы и задания будут работать одинаково - удобнее для отладки
46 Tanis
 
11.02.13
14:05
Хорошо, спасибо.
Вечером буду пробовать, когда все покинут базы.
И если системщики дадут запуск SQL от учетки.
47 Оболтус
 
11.02.13
14:08
У меня такой скрипт:

Получаем текущую дату в sDateTime:

for /f "delims=." %%i in ('wmic.exe OS get LocalDateTime ^| find "."') do set sDateTime=%%i
echo %sDateTime%

Устанавливаем путь к sql скрипту, который будет выполняться для копирования (в Экспрессе нет плана, если не Экспресс, то это не актуально):

set sScriptBackup="D:\!SQL backup\scripts\Backup_Test_1C.sql"
echo %sScriptBackup%

Устанавливаем каталог для архивов и имя базы (для понятного наименования файла):

set sDir=D:\!SQL backup\local\
echo %sDir%
set sNameBase=Test_1C
echo %sNameBase%

Выполняем sql инструкцию:

sqlcmd -S.\SQLExpress -i%sScriptBackup%

Упаковываем архив в 7-zip:

"C:\Program Files\7-Zip\7z.exe" a "%sDir%%sNameBase%\%sNameBase%_%sDateTime%.7z" "%sDir%%sNameBase%\%sNameBase%.bak"

Если архив существует, то удаляем архив:

if exist "%sDir%%sNameBase%\%sNameBase%_%sDateTime%.7z" del "%sDir%%sNameBase%\%sNameBase%.bak"

Копируем в каталог сети:

copy  "%sDir%%sNameBase%\%sNameBase%_%sDateTime%.7z" "\\server\BackUP_1c\Service\Test_1C\SQL\%sNameBase%_%sDateTime%.7z"
48 Оболтус
 
11.02.13
14:11
SQL скрипт:


*АРХИВ*/
declare @backupname varchar(MAX)
declare @sql varchar(MAX)
declare @DBname varchar(MAX)
declare @Dir varchar(MAX)
--для удобства выносим имя базы в константы
SET @DBname = 'Test_1C'
SET @Dir = 'D:\!SQL backup\local\'+@DBname+'\'

--генерим имя архивной базы и заменяем : на - в имени
SET @backupname = @DBname

--записываем команду в строку
SET @sql = 'BACKUP DATABASE ' + '[' + @DBname + ']' + 'TO DISK = N'+''''+ @Dir+@backupname + '.bak''' + ' WITH NOFORMAT, INIT,  NAME = N'+''''+@DBname+'-Full Database Backup'''+', SKIP, NOREWIND, NOUNLOAD,  STATS = 10'

--исполняем команду
exec sp_sqlexec @sql

/*ОБСЛУЖИВАНИЕ*/
Use [Test_1C]
exec sp_msforeachtable N'UPDATE STATISTICS ? WITH FULLSCAN'/*статистика*/
go
DBCC UPDATEUSAGE ([Test_1C])
go
DBCC FREEPROCCACHE/* очистка кеша выполнения запросов*/
go
sp_msforeachtable N'DBCC DBREINDEX (''?'')'/*реиндексация индексов*/
go
/*дефрагментация индексов*/
/*sp_msforeachtable N'DBCC INDEXDEFRAG ([Test_1C], ''?'')'*/
Use [Test_1C]
SET NOCOUNT ON;
DECLARE @objectid int;
DECLARE @indexid int;
DECLARE @partitioncount bigint;
DECLARE @schemaname nvarchar(130);
DECLARE @objectname nvarchar(130);
DECLARE @indexname nvarchar(130);
DECLARE @partitionnum bigint;
DECLARE @partitions bigint;
DECLARE @frag float;
DECLARE @command nvarchar(4000);
-- Conditionally select tables and indexes from the sys.dm_db_index_physical_stats function
-- and convert object and index IDs to names.
SELECT
   object_id AS objectid,
   index_id AS indexid,
   partition_number AS partitionnum,
   avg_fragmentation_in_percent AS frag
INTO #work_to_do

FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'LIMITED')
WHERE avg_fragmentation_in_percent > 10.0 AND index_id > 0;

-- Declare the cursor for the list of partitions to be processed.
DECLARE partitions CURSOR FOR SELECT * FROM #work_to_do;


-- Open the cursor.
OPEN partitions;

-- Loop through the partitions.
WHILE (1=1)
   BEGIN;
       FETCH NEXT
          FROM partitions
          INTO @objectid, @indexid, @partitionnum, @frag;
       IF @@FETCH_STATUS < 0 BREAK;
       SELECT @objectname = QUOTENAME(o.name), @schemaname = QUOTENAME(s.name)
       FROM sys.objects AS o
       JOIN sys.schemas as s ON s.schema_id = o.schema_id
       WHERE o.object_id = @objectid;
       SELECT @indexname = QUOTENAME(name)
       FROM sys.indexes
       WHERE  object_id = @objectid AND index_id = @indexid;
       SELECT @partitioncount = count (*)
       FROM sys.partitions
       WHERE object_id = @objectid AND index_id = @indexid;

-- 30 is an arbitrary decision point at which to switch between reorganizing and rebuilding.
       IF @frag < 30.0
           SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REORGANIZE';
       IF @frag >= 30.0
           SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REBUILD';
       IF @partitioncount > 1
           SET @command = @command + N' PARTITION=' + CAST(@partitionnum AS nvarchar(10));
       EXEC (@command);
       PRINT N'Executed: ' + @command;
   END;

-- Close and deallocate the cursor.
CLOSE partitions;
DEALLOCATE partitions;

-- Drop the temporary table.
DROP TABLE #work_to_do;

GO
DBCC shrinkdatabase(N'Test_1C', TRUNCATEONLY); /*усечение всей базы*/
CHECKPOINT; /*Записывает все данных из буферного кэша в текущей базе данных на диск*/
use [Test_1C] DBCC SHRINKFILE (N'Test_1C', 101); /*усечение только файла данных до размера 101 мб*/
use [Test_1C] DBCC SHRINKFILE (N'Test_1C_Log', 0); /*усечение только файла транзакций до размера 0 мб*/
CHECKPOINT; /*Записывает все данных из буферного кэша в текущей базе данных на диск*/
49 Tanis
 
12.02.13
08:30
(40) Запуск с SQL агента с админской учеткой домена не помог, пишет отказано в доступе.
Под локальной (самого компа) админской учеткой не запускается.
службы SQL и SQL агент, не запускаются вместе под одной админской учеткой домена.
50 Tanis
 
12.02.13
09:02
Видимо придется саму службу SQL запускать под админской учеткой, но как тогда агента под ней запустить. А может еще какая-нибудь служба не запущена. Несколько служб относящиеся к SQL почему-то отключены.
51 Оболтус
 
12.02.13
09:41
Кстати, а кто что может о таком скрипте сказать:

net session /delete /y (обрываем сессии)
net stop /y server (что бы подключится не могли)
C:\WINDOWS\system32\taskkill.exe /F /IM 1cv8.exe (прибиваем теминально запущенные 1с(если есть такие))
C:\arh1c.bat


net start /y server (запускаем службу сервер)

Подойдет для архивирования 7-ных баз (терминала нет, SQL и расшаренная папка). Или это только для терминала?
52 Tanis
 
12.02.13
11:08
На сколько критичен запуск SQL и SQL агента под разными учетками?
Программист всегда исправляет последнюю ошибку.