Книга знаний

Рекламное место пустует
1С:Предприятие / Администрирование / Установка

V8: Программное создание БД на сервере приложений

Проблемы при создании базы на сервере из командной строкиАвтор статьи: Migelek | Редакторы:
Последняя редакция №2 от 21.06.11 | История
URL: http://kb.mista.ru/article.php?id=833

Ключевые слова: CREATEINFOBASE, Создание базы, Автоматическое создание базы,


Дано:
Необходимо автоматически разворачивать базу на сервере приложений и на сервере БД

Проблема:

Столкнулся с тем, что описанный в документации способ создания базы из командной строки не работает. Поиск по интернету показал, что проблема не только у меня.
Неработающая строка создания базы.
"c:\Program Files (x86)\1cv82\8.2.14.460\bin\1cv8.exe" CREATEINFOBASE

Srvr=localhost Ref=Temp1C DBMS=MSSQLServer DBSrvr=localhost DB=Temp1C
DBUID=sa DBPwd=saPass CrSQLDB=Y SchJobDn=N SQLYOffs=0 Locale=RU
SUsr= SPwd= Usr= Pwd=


(Возможно из-за 64-х битной Win7)

Игра с ключами, кавычками ни к чему не привела. База не создавалась.

Решение:

1) Был найден и адаптирован небольшой vbs скрипт (Сreate1C.vbs)
AppServerName    = "localhost"

' Сервер приложения
Set Connector = CreateObject("V82.COMConnector")
Set AgentConnection = Connector.ConnectAgent(AppServerName)
Set Cluster = AgentConnection.GetClusters()(0)
AgentConnection.Authenticate Cluster, "", ""
Set WorkingProcess = AgentConnection.GetWorkingProcesses(Cluster)(0)
ConnectString = WorkingProcess.HostName & ":" & WorkingProcess.MainPort
Set WorkingProcess = Connector.ConnectWorkingProcess(ConnectString)
Set infobaseinfo = WorkingProcess.CreateInfoBaseInfo()

infobaseinfo.Name = "Temp1C"
infobaseinfo.Descr = "Тестовая "

' сервер БД
infobaseinfo.DBMS = "MSSQLServer"
' MSSQLServer - Microsoft SQL Server;
' PostgreSQL - PostgreSQL;
' IBMDB2 - IBM DB2;
' OracleDatabase - Oracle Database.
infobaseinfo.dbServerName = "localhost"
infobaseinfo.dbName = "Temp1C"
infobaseinfo.dbUser = "sa"
infobaseinfo.dbPassword = "saPass"
infobaseinfo.DateOffset = 0
infobaseinfo.Locale = "RU"

infobaseinfo.ConnectDenied = False

Mode    = 1
' Режим создания информационной базы:
' 0 - при создании информационной базы базу данных не создавать,
' 1 - при создании информационной базы создавать базу данных.
Call WorkingProcess.CreateInfoBase(infobaseinfo, Mode)


Но при запуске последнего выводилась ошибка, что объект V82.COMConnector не может быть создан.
Регистрация COM сервера от ошибки не избавила
regsvr32 "c:\Program Files (x86)\1cv82\8.2.14.460\bin\comcntr.dll"

"c:\Program Files (x86)\1cv82\8.2.14.460\bin\1cv8.exe" /regserver



2) Дальнейшее "гугленье" показало, что Windows Script Host, имеющийся в Win7 64 не создает 32-х разрядные COM объекты.
3) Скачиваем 32-х разрядный WSH с сайта http://www.microsoft.com/download/en/details.aspx?id=8247 от Win XP. (Возможно достаточно взять WScript.exe от 32-х битной Win7, но такой не нашлось поблизости)
4) Распаковываем (например WinRAR-ом) в определенную папку (у меня c:\WScript32\)
5) Запускаем скрипт п.1
C:\WScript32\WScript.exe c:\scripts\Create1C.vbs
.

База создалась

Итоговый скрипт принимающий один аргумент - имя базы. Имя базы на сервере 1С совпадает с именем базы на сервере базы данных

Set objArgs = WScript.Arguments

If objArgs.Count > 0 Then
   DBName    = objArgs(0)
   
   AppServerName    = "localhost"
   ' Сервер приложения
   
   Set Connector = CreateObject("V82.COMConnector")
   Set AgentConnection = Connector.ConnectAgent(AppServerName)
   Set Cluster = AgentConnection.GetClusters()(0)
   AgentConnection.Authenticate Cluster, "", ""
   Set WorkingProcess = AgentConnection.GetWorkingProcesses(Cluster)(0)
   ConnectString = WorkingProcess.HostName & ":" & WorkingProcess.MainPort
   Set WorkingProcess = Connector.ConnectWorkingProcess(ConnectString)
   Set infobaseinfo = WorkingProcess.CreateInfoBaseInfo()
   
   infobaseinfo.Name = DBName
   infobaseinfo.Descr = "Тестовая "
   
   ' сервер БД
   infobaseinfo.DBMS = "MSSQLServer"
   ' MSSQLServer - Microsoft SQL Server;
   ' PostgreSQL - PostgreSQL;
   ' IBMDB2 - IBM DB2;
   ' OracleDatabase - Oracle Database.
   infobaseinfo.dbServerName = "localhost"
   infobaseinfo.dbName = DBName
   infobaseinfo.dbUser = "sa"
   infobaseinfo.dbPassword = "saPass"
   infobaseinfo.DateOffset = 0
   infobaseinfo.Locale = "RU"
   
   infobaseinfo.ConnectDenied = False

   Mode    = 1
   ' Режим создания информационной базы:
   ' 0 - при создании информационной базы базу данных не создавать,
   ' 1 - при создании информационной базы создавать базу данных.
   Call WorkingProcess.CreateInfoBase(infobaseinfo, Mode)
Else
   WScript.Echo "Не хватает аргумента"
End If


Запуск скрипта:
C:\WScript32\WScript.exe c:\scripts\Create1C.vbs NameOf1CBase
.
Закладка

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2011 | Mista.ru

Яндекс.Метрика