Модели восстановление базы данных в MS SQL существует две «простая» и «полная». Отличаются они тем, что в полной модели восстановления ведется еще и бэкап журнала транзакций. Рассмотрим восстановление базы 1С в MS SQL на примере простой модели восстановления.
Бэкапы баз данных MS SQL хранятся в файлах с расширением .bak. Сами бэкапы баз тоже бывают двух типов: полный бэкап и разностный бэкап. В полном бэкапе содержится полная копия базы данных, а в разностном только изменения внесенные в базу с момента полного бэкапа.
Восстанавливаем полный бэкап.
В Microsoft SQL Server Managment Studio создаем базу данных в которую будет выполнятся восстановление. Как настроить базу в MS SQL для 1С рассмотренно .
Выбираем созданную базу и в контекстном меню переходим Задачи — Восстановить — База данных.
Выбираем источник восстановления «С устройства» и указываем путь к файлу бэкапа. После добавления файла бэкапа отмечаем галочкой набор данных для восстановления.
Слева в меню «Выбор страницы» переходим к пункту «Параметры». В пункте параметры восстановления отмечаем «Перезаписать существующую базу данных (WITH REPLACE)».
Если восстанавливаете только полный бэкап, то в разеде состояние восстановления оставляем пункт «Оставить базу готовой к использованию»
Если далее планируется восстанавливать еще и разностный бэкап, то в разеде состояние восстановления отмечаем «Оставить базу данных в неработающем состоянии…».
Жмем ОК и дожидаемся сообщения о завершении восстановления.
Восстанавливаем разностный бэкап.
Снова в целевой базу данных выбираем из контекстного меню Задачи — Восстановить — База данных.
Указываем источник восстановления. Выбираем файл .bak разностного бэкапа.
На странице Параметры настройки оставляем как есть. В разделе «Состояние восстановления» отмечен пункт «Оставить базу готовой к использованию…».
Жмем ОК, дожидаемся завершения и переходим к добавлению базы на сервер 1С.
Добавляем базу на сервер 1С.
Запускаем в 1С настройку добавление информационной базы и выбираем пункт «Создание новой информационной базы»
На следующем шаге должен быть отмечен пункт «Создание информационной базы без конфигурации..»
Вписываем имя базы и указываем тип расположения информационной базы «На сервере 1С предприятия»
Указываем настройки для подключения к базе сервера MS SQL
Далее оставляем настройки как есть и жмем Готово. База добавлена — запускаем 1С и проверяем работоспособность.
фирма 1С:
Предварительное тестирование 1C:Предприятия 8.2.15 при работе MS SQL Server 2012 RTM каких либо существенных проблем не выявило. Информационная база создается и работает без ошибок. Ошибка при обновлении конфигурации, связанная с использованием процедуры sp_dboption для перевода базы в SINGLE USER режим на дальнейшую работу не влияет. Её можно избежать создав эту процедуру вручную в базе master. Скрипт создания процедуры прилагается.
/****** Object: StoredProcedure . Script Date: 21.03.2012 7:33:37 ******/
CREATEprocedure.— 1999/08/09 18:25
@dbnamesysname=NULL,— database name to change
@optnamevarchar(35)=NULL,— option name to turn on/off
@optvaluevarchar(10)=NULL— true or false
declare@dbidint— dbid of the database
declare@catvalueint— number of category option
declare@optcountint— number of options like @optname
declare@allstatoptsint— bit map off all options stored in sysdatqabases.status
— that can be set by sp_dboption.
declare@alloptoptsint— bit map off all options stored in sysdatqabases.status
— that can be set by sp_dboption.
declare@allcatoptsint— bit map off all options stored in sysdatqabases.category
— that can be set by sp_dboption.
declare@exec_stmtnvarchar(max)
declare@fulloptnamevarchar(35)
declare@alt_optnamevarchar(50)
declare@alt_optvaluevarchar(30)
declare@optnameInvarchar(35)
select@optnameIn=@optname
,@optname=LOWER(@optnamecollateLatin1_General_CI_AS)
— If no @dbname given, just list the possible dboptions.
— Only certain status bits may be set or cleared by sp_dboption.
— Get bitmap of all options that can be set by sp_dboption.
select@allstatopts=numberfrommaster.dbo.spt_valueswheretype=’D’
andname=’ALL SETTABLE OPTIONS’
select@allcatopts=numberfrommaster.dbo.spt_valueswheretype=’DC’
andname=’ALL SETTABLE OPTIONS’
select@alloptopts=numberfrommaster.dbo.spt_valueswheretype=’D2′
andname=’ALL SETTABLE OPTIONS’
if@dbnameisnull
select’Settable database options:’=name
where (type=’D’
andnumber&@allstatopts<> 0
andnumbernotin(0,@allstatopts))— Eliminate non-option entries
or(type=’DC’
andnumber&@allcatopts<> 0
andnumbernotin(0,@allcatopts))
or(type=’D2′
andnumber&@alloptopts<> 0
andnumbernotin(0,@alloptopts))
return (0)
— Verify the database name and get info
select@dbid=dbid
wherename=@dbname
— If @dbname not found, say so and list the databases.
if@dbidisnull
raiserror(15010,-1,-1,@dbname)
print’ ‘
select’Available databases:’=name
return (1)
— If no option was supplied, display current settings.
if@optnameisnull
select’The following options are set:’=v.name
frommaster.dbo.spt_valuesv,master.dbo.sysdatabasesd
whered.name=@dbname
and((number&@allstatopts<> 0
andnumbernotin(-1,@allstatopts)
andv.type=’D’
and(v.number&d.status)=v.number)
or(number&@allcatopts<> 0
andnumbernotin(-1,@allcatopts)
andv.type=’DC’
andd.category&v.number<> 0)
or(number&@alloptopts<> 0
andnumbernotin(-1,@alloptopts)
andv.type=’D2′
andd.status2&v.number<> 0))
return(0)
if@optvalueisnotnullandlower(@optvalue)notin(‘true’,’false’,’on’,’off’)
raiserror(15241,-1,-1)
return (1)
— Use @optname and try to find the right option.
— If there isn’t just one, print appropriate diagnostics and return.
select@optcount=count(*),@fulloptname=min(name)
wherelower(namecollateLatin1_General_CI_AS)like’%’+@optname+’%’
and((type=’D’
andnumber&@allstatopts<> 0
andnumbernotin(-1,@allstatopts))
or(type=’DC’
andnumber&@allcatopts<> 0
andnumbernotin(-1,@allcatopts))
or(type=’D2′
andnumber&@alloptopts<> 0
andnumbernotin(-1,@alloptopts)))
— If no option, show the user what the options are.
if@optcount= 0
raiserror(15011,-1,-1,@optnameIn)
print’ ‘
select’Settable database options:’=name
where (type=’D’
andnumber&@allstatopts<> 0
andnumbernotin(-1,@allstatopts))— Eliminate non-option entries
or(type=’DC’
andnumber&@allcatopts<> 0
andnumbernotin(-1,@allcatopts))
or(type=’D2′
andnumber&@alloptopts<> 0
andnumbernotin(-1,@alloptopts))
return (1)
— If more than one option like @optname, show the duplicates and return.
if@optcount> 1
raiserror(15242,-1,-1,@optnameIn)
print’ ‘
selectduplicate_options=name
wherelower(namecollateLatin1_General_CI_AS)like’%’+@optname+’%’
and((type=’D’
andnumber&@allstatopts<> 0
andnumbernotin(-1,@allstatopts))
or(type=’DC’
andnumber&@allcatopts<> 0
andnumbernotin(-1,@allcatopts))
or(type=’D2′
andnumber&@alloptopts<> 0
andnumbernotin(-1,@alloptopts))
)
return (1)
— Just want to see current setting of specified option.
if@optvalueisnull
selectOptionName=v.name,
CurrentSetting=(case
when (((v.number&d.status)=v.number
andv.type=’D’)
or(d.category&v.number<> 0
andv.type=’DC’)
or(d.status2&v.number<> 0
andv.type=’D2′)
)
then’ON’
(((v.number&d.status)=v.number
andv.type=’D’)
or(d.category&v.number<> 0
andv.type=’DC’)
or(d.status2&v.number<> 0
andv.type=’D2′)
)
then’OFF’
end)
frommaster.dbo.spt_valuesv,master.dbo.sysdatabasesd
whered.name=@dbname
and((v.number&@allstatopts<> 0
andv.numbernotin(-1,@allstatopts)— Eliminate non-option entries
andv.type=’D’)
or(v.number&@allcatopts<> 0
andv.numbernotin(-1,@allcatopts)— Eliminate non-option entries
andv.type=’DC’)
or(v.number&@alloptopts<> 0
andv.numbernotin(-1,@alloptopts)— Eliminate non-option entries
andv.type=’D2′)
)
andlower(v.name)=lower(@fulloptname)
return (0)
select@catvalue= 0
select@catvalue=number
wherelower(name)=lower(@fulloptname)
andtype=’DC’
— if setting replication option, call sp_replicationdboption directly
if (@catvalue<> 0)
select@alt_optvalue=(caselower(@optvalue)
when’true’then’true’
when’on’then’true’
else’false’
end)
select@alt_optname=(case@catvalue
when 1 then’publish’
when 2 then’subscribe’
when 4 then’merge publish’
elsequotename(@fulloptname,»»)
end)
select@exec_stmt=quotename(@dbname,'[‘)+’.dbo.sp_replicationdboption’
EXEC@exec_stmt@dbname,@alt_optname,@alt_optvalue
return (0)
z88; — call Alter Database to set options
— set option value in alter database
select@alt_optvalue=(caselower(@optvalue)
when’true’then’ON’
when’on’then’ON’
else’OFF’
end)
— set option name in alter database
select@fulloptname=lower(@fulloptname)
select@alt_optname=(case@fulloptname
when’auto create statistics’then’AUTO_CREATE_STATISTICS’
when’auto update statistics’then’AUTO_UPDATE_STATISTICS’
when’autoclose’then’AUTO_CLOSE’
when’autoshrink’then’AUTO_SHRINK’
when’ansi padding’then’ANSI_PADDING’
when’arithabort’then’ARITHABORT’
when’numeric roundabort’then’NUMERIC_ROUNDABORT’
when’ansi null default’then’ANSI_NULL_DEFAULT’
when’ansi nulls’then’ANSI_NULLS’
when’ansi warnings’then’ANSI_WARNINGS’
when’concat null yields null’then’CONCAT_NULL_YIELDS_NULL’
when’cursor close on commit’then’CURSOR_CLOSE_ON_COMMIT’
when’torn page detection’then’TORN_PAGE_DETECTION’
when’quoted identifier’then’QUOTED_IDENTIFIER’
when’recursive triggers’then’RECURSIVE_TRIGGERS’
when’default to local cursor’then’CURSOR_DEFAULT’
when’offline’then (case@alt_optvaluewhen’ON’then’OFFLINE’else’ONLINE’end)
when’read only’then (case@alt_optvaluewhen’ON’then’READ_ONLY’else’READ_WRITE’end)
when’dbo use only’then (case@alt_optvaluewhen’ON’then’RESTRICTED_USER’else’MULTI_USER’end)
when’single user’then (case@alt_optvaluewhen’ON’then’SINGLE_USER’else’MULTI_USER’end)
when’select into/bulkcopy’then’RECOVERY’
when’trunc. log on chkpt.’then’RECOVERY’
when’db chaining’then’DB_CHAINING’
else@alt_optname
end)
if@fulloptname=’dbo use only’
if@alt_optvalue=’ON’
ifdatabaseproperty(@dbname,’IsSingleUser’)= 1
raiserror(5066,-1,-1);
return (1)
ifdatabaseproperty(@dbname,’IsDBOOnly’)= 0
return (0)
if@fulloptname=’single user’
if@alt_optvalue=’ON’
ifdatabaseproperty(@dbname,’ISDBOOnly’)= 1
raiserror(5066,-1,-1);
return (1)
ifdatabaseproperty(@dbname,’IsSingleUser’)= 0
return (0)
select@alt_optvalue=(case@fulloptname
when’default to local cursor’then (case@alt_optvaluewhen’ON’then’LOCAL’else’GLOBAL’end)
when’offline’then»
when’read only’then»
when’dbo use only’then»
when’single user’then»
else@alt_optvalue
end)
iflower(@fulloptname)=’select into/bulkcopy’
if@alt_optvalue=’ON’
ifdatabaseproperty(@dbname,’IsTrunclog’)= 1
select@alt_optvalue=’RECMODEL_70BACKCOMP’
select@alt_optvalue=’BULK_LOGGED’
ifdatabaseproperty(@dbname,’IsTrunclog’)= 1
select@alt_optvalue=’SIMPLE’
select@alt_optvalue=’FULL’
iflower(@fulloptname)=’trunc. log on chkpt.’
if@alt_optvalue=’ON’
ifdatabaseproperty(@dbname,’IsBulkCopy’)= 1
select@alt_optvalue=’RECMODEL_70BACKCOMP’
select@alt_optvalue=’SIMPLE’
У вас возникли проблемы с базой данных и полным текстовым каталогом с сервера A на сервер B с помощью команды «sp_attach_db» в SQL Server 2005 SP3. Все файлы базы данных (данные, журнал, полнотекстовый каталог) были скопированы с сервера A на сервер B. Я предполагаю, что это действительно возможно и что мой синтаксис просто некорректен, но я не могу найти никаких примеров или хорошую документацию в любом месте. Вот какой-то псевдосинтакс, который я использую…
exec sp_attach_db ‘<database_name>’, ‘<database data file>’, ‘<database full text catalog folder>’, ‘<database log file>’
или в некотором примере.
exec sp_attach_db ‘database’, ‘C:\Database\Data\database_data.mdf’, ‘C:\Database\Data\FTData’, ‘C:\Databases\Logs\database_log.ldf’
Я получаю сообщение об ошибке «Невозможно открыть физический файл» из этой команды, и команда attach не работает. Если я удаляю папку полного каталога текста из команды sp_attach_db, база данных монтируется, но дает мне предупреждение, что она не может найти полный текстовый каталог. Что мне не хватает?