Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Другие серверные продукты (http://forum.oszone.net/forumdisplay.php?f=100)
-   -   Microsoft SQL Enterprise синхронизация баз 1с (http://forum.oszone.net/showthread.php?t=212081)

bombording 27-07-2011 22:14 1721144

Microsoft SQL Enterprise синхронизация баз 1с
 
Добрый день.

На Windows 2003 крутится Microsoft SQL Enterprise Server, на котором работают несколько баз 1с 7.
Собственно архивация баз 1с осуществляется по следующему сценарию:

1. По расписанию запускается bat файл, который вызывает через isql.exe определённый сценарий в sql файле.

Код:

isql.exe /U u /P p /E /S server /d base1c /t 0 /i c:\script\backup.sql /o d:\script\Out.txt
2. Содержимое backup.sql

Код:

set nocount on
SET DATEFIRST 1
declare @OutP varchar(255)
declare @OutPD varchar(255)
declare @weekName varchar(10)
select @weekName = case
  WHEN DATEPART( weekday, GETDATE()) = 1 THEN '_Monday'
  WHEN DATEPART( weekday, GETDATE()) = 2 THEN '_Tuesday'
  WHEN DATEPART( weekday, GETDATE()) = 3 THEN '_Wednesday'
  WHEN DATEPART( weekday, GETDATE()) = 4 THEN '_Thursday'
  WHEN DATEPART( weekday, GETDATE()) = 5 THEN '_Friday'
  else
      '_Free'
  END
select @OutP = '\\backupserver\' + @weekName + '\DUMP.dat'

select @OutPD = 'del /F /Q ' + @OutP
EXEC master..xp_cmdshell @OutPD

BACKUP DATABASE base1c TO disk = @OutP WITHINIT

Всё работает. Но возникла необходимость после архивации баз 1с, синхронизировать ещё одну созданную базу для тестинга.

Я хотел поинтересоваться, возможно ли прописать в этом sql файле команду на то, что бы скрипт после архивации синхронизировал (либо очищал и записывал заного) действующую базу 1с с другой базой для тестов.

Спасибо

Delirium 28-07-2011 09:34 1721357

Ну а что мешает написать после бекапа команду
restore database base1cTest from 'путь' WITH replace ?
Источник: http://www.mssqltips.com/tutorial.asp?tutorial=121

bombording 28-07-2011 09:46 1721367

Действительно. Спасибо.

bombording 03-08-2011 15:45 1725270

Вытаюсь востановить тестовую базу из сделаного backup'a рабочей базы 1С.

Код:

USE master
RESTORE DATABASE Test1CBuh FROM DISK = '\\backup\Upload\bkp1c.bak' WITH REPLACE

Но при этом SQL почему то обращается к рабочей базе а не к тестовой.... и в логах пишет что она занята....


Код:

1> 2> 3> Msg 1834, Level 16, State 1, Server SERVER, Line 2
The file 'd:\msdata\MSSQL\data\1с_work_Data.MDF' cannot be overwritten.
It is being used by database '1с_work'.
Msg 3156, Level 16, State 1, Server SERVER, Line 2
File '1с_work_Data' cannot be restored to
'd:\msdata\MSSQL\data\1с_work_Data.MDF'. Use WITH MOVE to identify a
valid location for the file.
Msg 1834, Level 16, State 1, Server SERVER, Line 2
The file 'd:\msdata\MSSQL\data\1с_work_Log.LDF' cannot be overwritten.
It is being used by database '1с_work'.
Msg 3156, Level 16, State 1, Server SERVER, Line 2
File '1с_work_Log' cannot be restored to
'd:\msdata\MSSQL\data\1с_work_Log.LDF'. Use WITH MOVE to identify a
valid location for the file.
Msg 3013, Level 16, State 1, Server SERVER, Line 2
RESTORE DATABASE is terminating abnormally.

Почему же он обращается к 1c_work - рабочей базе 1с ??

Telepuzik 03-08-2011 16:06 1725292

Цитата:

Цитата bombording
Почему же он обращается к 1c_work - рабочей базе 1с »

Ну потому что он пытается восстановить файлы базы и лога в то место откуда они были отправлены в backup, а так как файлы уже существуют и доступ к ним закрыт вы и получаете такой лог.

bombording 03-08-2011 16:12 1725298

Telepuzik, Я так понял что нужно ставитть параметр WITH MOVE в комманду и указывать другие имена для mdf и ldf файлов.... ??

Но ведь если я укажу имена mdf и ldf от тестовой базы, то этоо приведёт опять к ошибке... ведь эти файлы тоже есть. Как быть?

Telepuzik 04-08-2011 09:18 1725680

Цитата:

Цитата bombording
так понял что нужно ставитть параметр WITH MOVE в комманду и указывать другие имена для mdf и ldf файлов.... ?? »

Да воспользуйтесь данным параметром.
Цитата:

Цитата bombording
Но ведь если я укажу имена mdf и ldf от тестовой базы, то этоо приведёт опять к ошибке... ведь эти файлы тоже есть. Как быть? »

Вот тут что то совсем не понятно, какая тестовая база? Что вам мешает дать другие имена файлам и базе, если есть база Test1, то почему нельзя назвать базу например Test2?

bombording 04-08-2011 09:44 1725691

Telepuzik, Сработало

Код:

USE master
RESTORE DATABASE Test1CBuh FROM DISK = '\\backup\backup\1с_work.bak' WITH
 MOVE '1с_work_Data' TO 'D:\1с_workTest_Data.mdf',  MOVE '1с_work_Log' TO 'D:\1с_workTest_Log.ldf', REPLACE

А на работающую базу (с которой был сделан backup) это ни как не повлияло?

Telepuzik 04-08-2011 10:15 1725710

Цитата:

Цитата bombording
А на работающую базу (с которой был сделан backup) это ни как не повлияло? »

Повлиять никак не должно. Новая база появилась же? Проверьте рабочую базу все ли с ней нормально.
Цитата:

Цитата Пример использования c сайта MSDN:
E. Make a copy of a database using BACKUP and RESTORE
This example uses both the BACKUP and RESTORE statements to make a copy of the Northwind database. The MOVE statement causes the data and log file to be restored to the specified locations. The RESTORE FILELISTONLY statement is used to determine the number and names of the files in the database being restored. The new copy of the database is named TestDB. For more information, see RESTORE FILELISTONLY.

BACKUP DATABASE Northwind
TO DISK = 'c:\Northwind.bak'
RESTORE FILELISTONLY
FROM DISK = 'c:\Northwind.bak'
RESTORE DATABASE TestDB
FROM DISK = 'c:\Northwind.bak'
WITH MOVE 'Northwind' TO 'c:\test\testdb.mdf',
MOVE 'Northwind_log' TO 'c:\test\testdb.ldf'
GO



Время: 17:15.

Время: 17:15.
© OSzone.net 2001-