Есть две базы - тестовая и рабочая. Подскажите пожалуйста как быстро и безболезненно перенести новый функционал из тестовой на рабочую. Базы находятся на разных физических серверах(тестовая база ранее была скопирована с рабочей).
Дайте пожалуйста ссылку на пошаговую инструкцию.

Нравится

4 комментария

и не только функционал, но и наполнение некоторых справочников и системных значений (и не всех, а только тех, которые указать)

Здравствуйте.
1) Если планируется переносить пакеты между workspace-ами или между БД, то в этом случае необходимо начинать разработку с подключенной системой контроля версий (SVN).
2) Все доработки в пакетах сохраняются в SVN.
3) После завершения разработки пакета и исправления всех ошибок, пакет может устанавливаться на рабочую БД.
4) Для того, чтоб с пакетом установились так же наполнение справочников и системных настроек, эти данные должны быть привязаны к пакету как данные пакета.
Как работать с системой контроля версий (SVN), можно почитать здесь: http://academy.terrasoft.ru/documents/?product=SDK&ver=7.6.0

Если разработка велась без SVN, то единственные вариант, это выгрузка пакетов из тестовой БД в zip архив
Пример:
Terrasoft.Tools.WorkspaceConsole.exe -operation=SaveDBContent -workspaceName=Default -destinationPath=D:\Temp\Repository\ -contentTypes=Repository -logPath=D:\Temp\WorkspaceConsoleLog

и загрузка zip архива на рабочую БД
Пример:
Terrasoft.Tools.WorkspaceConsole.exe -workspaceName=Default -operation=InstallFromRepository -sourcePath=d:\Temp\Repository\ -destinationPath=D:\Temp\Destination\ -continueIfError=true -logPath=D:\WorkspaceConsoleLog

если данные не привязывались к пакету, наполнение справочников и системных настроек нужно будет переносить в ручном режиме.

"Котенко Александр" написал:если данные не привязывались к пакету, наполнение справочников и системных настроек нужно будет переносить в ручном режиме.

а как их привязать к пакету?

У нас с workspace console получилось наоборот - перенеслись абсолютно все данные, даже тестовые записи и логи :(

"Владимир Соколов" написал:а как их привязать к пакету?

В конфигурации на вкладке данные выбираете объект, тип установки(в большинстве случаев необходимо выбирать "установка") и фильтрацию, затем нажимаете кнопку "Показать данные", видите результат и сохраняете его, если все ок.

Показать все комментарии

Добрый день!
Хотела бы перенести сервисы, разработанные на копии сайта в другой сайт ( бизнес-процессы, справочники, замещающие клиентские модули).
Скажите, пожалуйста, как это оперативно сделать БЕЗ использования SVN
Насколько мне известно, существует специальная утилита для этого?
Версия 7.5

Нравится

12 комментариев

И добавлю - не перенести при этом какие-то данные, использовавшиеся для тестов

"Владимир Соколов" написал:не перенести при этом какие-то данные

При этом перенести таки наполнение справочников наверняка будет полезно вместе с Id созданных там записей

Для переноса можно воспользоваться утилитой WorkspaceConsole.

Внизу этой темы есть ссылки с инструкциями (http://www.community.terrasoft.ru/forum/topic/11053)

Если правильно настроить "Данные" можно перенести и справочники с наполнением и не перенести тестовые данные.

Спасибо.
Вопрос по этой инструкции:

5. В D:\WorkspaceConsole\Packages копируем файлы пакетов (файлы-архивы *.gz, эти архивы НЕ нужно распаковывать), которые будем применять.

Как выгрузить файлы и откуда? Допустим, мне нужны не все сервисы в пакете, а какой-то один( например, бизнес-процесс)

Дарья, эти файлы - все пакеты, которые находятся в папке Packages Вашего сайта.
Если Вы хотите перенести только один пакет, сделайте следующее:
1. Перенесите его и пакет Manifest в D:\WorkspaceConsole\Packages.
2. Внесите поправки в файл в архиве Manifest.gz, а именно:

  • в массиве "Packages" оставить только элемент с атрибутом Name = "имя пакета"
  • у этого элемента очистить массив DependsOn

Есть пути по переносу только одной схемы, но в будущем при обновлении это может вызвать некоторые проблемы, поэтому правильно будет все же перенести весь пакет, в котором был описан сервис.

Дарья, пример команды для выгрузки рабочего пространства (из БД) в репозиторий (zip-архив)

Terrasoft.Tools.WorkspaceConsole.exe -operation=SaveDBContent -workspaceName=Default -destinationPath=D:\Temp\Repository\ -contentTypes=Repository

При этом:

destinationPath
Путь к локальной папке на диске для данных приемника.
Обязательный параметр.
Используется для операций: InstallFromRepository, ConcatRepositories, PrevalidateInstallFromRepository

SaveDBContent - работает в комбинации с параметром contentTypes. Если он содержит Data, то сохраняются в папку destinationPath данные всех схем в формате json, если - LocalizableData, то сохраняются в формате xml данные схем объектов (необходимо для локализации конфигурации), если - Resources, то выгружаются ресурсы схем в формате xml (так же необходимо для локализации, но уже самых схем объектов), если - Repository то в папку destinationPath выгружается рабочее пространство из БД в виде zip архивов

Если задача перенести конкретную схему (например, бизнес-процесс), Вы можете воспользоваться действиями импорт/экспорт в разделе "Конфигурация".

"Толмачев Дмитрий Юрьевич" написал:Если правильно настроить "Данные" можно перенести и справочники с наполнением и не перенести тестовые данные.

А "правильно" - это как и где?

Данные настраиваются на вкладке "Данные"

Данные

"Правильно" - это зависит от того какая задача у вас стоит при переносе через пакеты.

"Резвов Роман" написал:Terrasoft.Tools.WorkspaceConsole.exe -operation=SaveDBContent -workspaceName=Default -destinationPath=D:\Temp\Repository\ -contentTypes=Repository

На версии 7.8.0.3374 не выгружается Manifest.

"Резвов Роман" написал:Terrasoft.Tools.WorkspaceConsole.exe -operation=SaveDBContent -workspaceName=Default -destinationPath=D:\Temp\Repository\ -contentTypes=Repository

На версии 7.8.0.3374 не выгружается Manifest.

"Коновалов Игорь" написал:
Резвов Роман пишет:

Terrasoft.Tools.WorkspaceConsole.exe -operation=SaveDBContent -workspaceName=Default -destinationPath=D:\Temp\Repository\ -contentTypes=Repository

На версии 7.8.0.3374 не выгружается Manifest.

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

"Демьяник Алексей" написал:Начиная с версии 7.8.0.3374 манифест действительно не выгружается. Причина в том, что для накатки пакетов также не требуется манифест.

Поддержка on-demand для установки обновлений запросила у меня этот пакет.

Показать все комментарии

Добрый день.

Мы переходили из версии Террасофт 3.3.1 в 3.3.2 , но без новой расширенной функциональности, а только с обновлением ядра.
В ходе дальнейшей работы и переноса некоторых скриптов у меня в системе уже появились DatasetTriggers (вся папка со скриптами , sq ,ds,tbl и окнами).
В скрипте scr_main в функции wnd_MainOnPrepare была добавлена строка DatasetTriggers.Load();
Все это было мне необходимо для работы утилиты по логированию действий пользователей.

Насколько я понимаю, это уже практически полностью перенесенная функциональность по автозапуску бизнес-процессов.
Поэтому я добавила вызов соответствующего окна меню Файл/ Сервис/ Настройка событий.
Окно открывается, в нем можно создать правила для автозапуска.
Но увы, запуск процессов не происходит по этим правилам.
Что еще необходимо перенести , что бы это работало?

Нравится

7 комментариев

Здравствуйте.

Есть ли у Вас
а) дерево сервисов DatasetTrigger?
б) все ли строки прописаны в Scr_Main ?

1

а) дерево сервисов DatasetTrigger прописано. да.
б) не все строки в scr_main. только DatasetTriggers.Load();

Виктория, добрый день.

Сравните сервис scr_Main из 3.3.2 и из 3.3.1 - и перенесите функционал полностью.

Добрый день, я бы так и сделала, но у меня нет развернутой чистой базы версии 3.3.2.
Если можно, дайте скрипт, буду сверять.

Виктория, во вложении.

Здравствуйте.
Проверила все строки, изменила скрипт. Не получилось.
Такое впечатление что вообще ничего не происходит, хотя я внесла правило для автозапуска, и создала документ, который удовлетворял требованию.
Пробовала разные правила - например по созданию Документа, или по созданию Задачи.

Виктория, сложно судить в чем может быть проблема.
Напишите, пожалуйста, на support@terrasoft.ru о проблеме, и предоставьте резервную копию БД для анализа.

Заранее спасибо.

Показать все комментарии

Решил обобщить немного информации о том, какие действия чаще-всего требуется выполнять при перенесении базы данных Terrasoft для СУБД MS SQL.
Также хотелось бы ответить на часто задаваемый пользователями вопрос: переносить базу данных без проблем можно либо на SQL сервер той-же версии, либо версии старше (т.е. с MS SQL 2005 на MS SQL 2008 база данных может быть перенесена, наоборот же, с более новой версии на более старую, перенос базы данных не подразумевается).

Итак, при переносе базы данных с сервера на сервер выполняется следующая последовательность действий:

Необходимо сделать бэкап базы данных на одном сервере и восстановите его на втором.

Если использовались конкурентные лицензии, то в первую очередь очистите значение сервера сессий для базы данных. Сделать это можно с помощью следующего запроса к базе данных:
update tbl_DataBaseInfo set ServerSessionsInfo = NULL

Для выполнения запроса сделайте следующее:
Вызовите контекстное меню, нажав правой кнопкой мыши на названии базы данных, и выбрать New Query.

Далее ввести запрос и нажать Execute для его выполнения.

После этого Вам необходимо будет перезаказать конкурентные лицензии.

Также при переносе базы данных на другой сервер необходимо производить сопоставление пользователей базы данных Terrasoft с именами входа в MS SQL.

Предварительно необходимо создать соответствующие имена входа на SQL сервере.

Для этого на сервере необходимо перейти во вкладку [Security]>[Logins] и там создать соответствующие имена входа.

Обязательно при создании имени входа для пользователя указать тип авторизации – «SQL аторизация»:

Также обязательным условием является установка серверной роли «сисадмин» для имени входа системного администратора Terrasoft.

Далее необходимо провести, собственно, сопоставление. Сделать это можно выполнив запрос к базе данных следующего рода:

sp_change_users_login 'update_one', 'fkeys', 'fkeys'

Данный запрос необходимо выполнить для каждого пользователя Terrasoft заменив в запросе слово “fkeys” на соответственное (например для supervisor’a данный запрос примет вид sp_change_users_login 'update_one', 'supervisor', 'supervisor').

Далее, если предполагается перенос базы данных в другой домен (следовательно, и пользователи с домена изменятся) для изменения пользователей Вам необходимо выполнить следующий порядок действий:
1. В таблице tbl_AdminUnit базы данных Terrasoft в полях .Name и .SQLObjectName заменить соответствующие записи пользователей из старого домена на новые. Например если пользователь раньше имел имя tm/Yakovenko (домен tm), а стал tcrm/Yakovenko (домен tscrm), то записи в указанных полях Вы должны заменить на tcrm/Yakovenko.

2. Создать login (подтянуть из Active Directory).
3. Добавить пользователя в БД с новым логином.
4. Если пользователь имел роль системного администратора в Terrasoft, то его логину необходимо дать роль sysadmin.
5. Если пользователь имел роль обычного администратора в Terrasoft, то его логину необходимо дать роль dbowner.
6. После этого в Terrasoft в разделе [Администрирование] каждому пользователю на детали [Группы] необходимо удалить и добавить все группы (таким образом пользователю перераздадутся права доступа).

Нравится

Поделиться

14 комментариев

А что делать, если нет колонки ServerSessionsInfo в tbl_DataBaseInfo? У меня TS CRM 3.2.0.10. Хотя у меня и так сработало, без этого update.

Анна, дело в том, что в версии 3.2.0 еще не было конкурентных лицензий, а данный скрипт:

update tbl_DataBaseInfo set ServerSessionsInfo = NULL

необходимо выполнять только при использовании конкурентных лицензий.
Если их нет, то соответственно, таблицы тоже не будет :wink:

Переносил Terrsfoft XRM 3.3.2 в новый Win 2008 домен.
Вот скрипты шагов 1-5, описанных Владом для MS SQL Server 2008 R2.

-- восстановили БД
RESTORE DATABASE [TSXRM] FROM DISK = 'c:\TSXRM.BAK'
GO
 
--подключаемся к восстановленной БД
USE TSXRM
GO
 
--пересвязываем системного юзера 
EXEC sp_change_users_login 'update_one', 'fkeys', 'fkeys'
GO
 
-- создаем заново имена входа (проверяем не существует ли уже такое имя входа, 
-- чтобы можно было запускать скрипт многократно)
IF NOT EXISTS (SELECT * FROM sys.server_principals WHERE name = N'SQLServerAuthLoginName') 
	CREATE LOGIN [SQLServerAuthLoginName] WITH password = '123456', DEFAULT_DATABASE = [TSXRM], DEFAULT_LANGUAGE=[русский]
go
 
-- пересвязываем созданные sqlserver`ные имена входа с пользователями
EXEC sp_change_users_login @action = 'update_one', @UserNamePattern = 'SQLServerAuthUserName', @LoginName = 'SQLServerAuthLoginName'
GO
 
-- создаем NT`ные (виндовые, доменные) имена входа 
IF NOT EXISTS (SELECT * FROM sys.server_principals WHERE name = N'MyNewDomainName\TSAdminUserName') 
	CREATE LOGIN [MyNewDomainName\TSAdminUserName] FROM WINDOWS WITH DEFAULT_DATABASE=[TSXRM], DEFAULT_LANGUAGE=[русский]
 
--добавляем в группу db_owner, если юзер есть админ в TS
EXEC sys.sp_addrolemember  @rolename = 'db_owner', @membername = N'MyNewDomainName\TSAdminUserName'	
 
--создаем пользователя для имени входа (создание собственной схемы вроде не нужно)
--CREATE SCHEMA [MyNewDomainName\TSAdminUserName] AUTHORIZATION [MyNewDomainName\TSAdminUserName]
IF  NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'MyNewDomainName\TSAdminUserName')
	CREATE USER [MyNewDomainName\TSAdminUserName] FOR LOGIN [MyNewDomainName\TSAdminUserName] -- WITH DEFAULT_SCHEMA=[MyNewDomainName\TSAdminUserName]
 
--удаляем старых пользователей (сначала удалив собственную схему)
IF  EXISTS (SELECT * FROM sys.database_principals WHERE name = N'OldDomainName\TSAdminUserName')
BEGIN
	DROP schema	[OldDomainName\TSAdminUserName]
	DROP USER [OldDomainName\TSAdminUserName]
END
GO
 
--правим имя домена в таблице AdminUnit
DECLARE @OldDomainName AS NVARCHAR(255)
DECLARE @NewDomainName AS NVARCHAR(255)
SET @OldDomainName = N'OldDomainName'
SET @NewDomainName = N'MyNewDomainName'
 
UPDATE 
	[tbl_AdminUnit]
SET		
	Name = REPLACE([Name], @OldDomainName, @NewDomainName),  
	SQLObjectName = REPLACE([SQLObjectName], @OldDomainName, @NewDomainName)
WHERE 
	IsDomainUnit = 1

Интересно, если бы перенос был на MS SQL Server 2012, получилось бы сделать БД Terrasoft contained database, дабы избежать необходимости отдельного переноса имен входа?

Здравствуйте.
При создании пользователя в базе данных он автоматически дублируется логином на уровне СУБД. Если Вы перенесёте базу на другой SQl-сервер, пользователи вместе с базой перенесутся, а логины, соответственно - нет. Их нужно будет создавать в ручном режиме и связывать с пользователями "хранимкой" sp_change_users_login. Если пользователей очень много, то можно пробовать это выполнять путём переноса\модификации системной базы master. Протестированного механизма - нет. Всё же рекомендую выполнить сопоставление логинов через процедуру.
С уважением, Terrasoft Support Team.

Александр, особенность contained database в том, что они включают в себя такие объекты уровня сервера, как например, имена входа (логины). Эта возможность появилась в MS SQL Server 2012.
Другое дело, что не каждая легаси-БД с прежней версии сервера может быть приведена к виду contained database.
Как раз в этом и была суть моей мысли - может ли база TS приведена к такому виду.

Здравствуйте.
Официально мы не декларировали возможность работы с СУБД MS SQL Server 2012. По сему подобную возможность нужно тестировать. Как вариант можете ознакомиться с тематическими материалами по ссылках: http://reznik.uneta.com.ua/post/2011/05/09/sql-server-denali-contained-…
http://blogs.msdn.com/b/sqlsecurity/archive/2010/12/03/contained-databa…
С уважением, Terrasoft Support Team.

Нужен хэлп.
Скрипт sp_change_users_login 'update_one', '', '' выдаёт ошибку:

"Msg 15291, Level 16, State 1, Procedure sp_change_users_login, Line 114
Terminating this procedure. The User name 'fkeys' is absent or invalid".

Читал вот здесь: http://www.community.terrasoft.ru/forum/topic/6775 , что причина может крыться в недостатке прав юзера, из под которого мы пытаемся его выполнить, однако, я это пробовал делать даже из под "sa".

Раньше каким-то чудом на другой машине умудрился восстановить бэкап master. Сейчас такой фокус не проходит (после восстановления сервер не стартует), а при ручном добавлении логинов, появляется проблема описанная выше.

Игорь, у меня была та же проблема! Причина была в "...'fkeys' is absent...". Создал пользователя и хранимая процедура выполнилась.

Добры день!

Переносим тестовую базу на другой сервер. Работаем по конкурентным лицензиям,

Terrasoft Sales, версия 3.3.2.47

MSSQL 2010

При попытке адмнов перенести логины все сразу, появляется сообщение
The database 'Terrasoft332_Sales' does not exist. Supply a valid database name. To see available databases, use sys.databases.

'Terrasoft332_Sales' - это название боевой базы, с которой берутся лицензии для тестовой. Подскажиет пожалуйста, в чем может быть проблема?

Здравствуйте. Каким образом переносили все логины сразу? Они содержатся в системной базе "master". Можно попробовать выполнить это путём преноса базы "master", но процедура довольно нетипиная, лежит исключительно в области администрирования СУБД и требует тестирования. Дело в том, что манипуляции с системными легко могут повредить сам SQL-сервер. Гораздо проще логины создать в ручном режиме. После переноса базы с конкурентными лицензиями их необходимо будет перезаказать. Так же, если использовался сервер сессий, то он должен быть доступен для нового сервера БД.

Последний раз я так как Вы сказали я и сделал, всё получилось. А перенести "master" первый раз удалось, действительно задача, прямо скажем: мягко говоря нетривиальная, это удалось сделать в сингл-юзер режиме под пользователем "sa" из консоли. Больше я этим заниматься желанием не горю

Почему в статье самое главное не указывается, т.е. если информацию по собственно переносу базы можно найти без проблем в открытых источниках, то я лично застрял на совершенно глупом на мой взгляд шаге, и фича чисто террасофтовская - изменить строку соединения сервера сессий конкурентных лицензий.
Два дня убил на поиски проблемы почему у меня база после переноса с сервера А на сервер B все равно смотрит на сервак А. Выяснял этот факт тоже опытным путем - гашу инстанцию на сервере А после переноса (что бы пользователи не имели доступа к старой базе не при каких обстоятельствах) нет коннекта к новой базе на сервере B - ошибка - отсутствует доступ к базе, периодически ошибка сменялась на отсутствие доступа из под логина. Первоначально грешил на соответственно на логины - и скрипт c update_one затер просто до дыр.
Запускаю сервис MS SQL на старой могу заходить в новую базу. Netstat-ом выяснил, что есть обращения с B на A, но по какой причине - не было понятно.
Совершенно случайно, когда стало окончательно понятно, что проблема не на стороне SQL и логинов в базе master, я начал перебирать уже все, что можно настраивать на стороне 3ки, так я и набрел на эту настройку.
Переезд базы задача не повседненвная и держать настройки в голове по сервису конкурентных лицензий вообще не получается. Странно что эти грабли нигде не описаны.

Переезд версии 3.4.х  c MSSQL 2005 на 2012.

Сделал обычный полный бэкап базы на 2005

Восстановил эту базу на 2012

На 2005 запустил системную процедуру sp_help_revlogin, исходник которой есть на просторах интернета. Она выдаёт готовый скрипт на создание имён входа. Подчистил скрипт, чтобы он не пересоздал уже имеющиеся системные логины, типа SA и т.п.

Запустил этот скрипт на 2012. Все имена входа создались. Самое главное, что их ID, роли и права абсолютно идентичны старому серверу.

Предыдущие два пункта выполняются под пользователем, имеющем достаточные права к базе master. Лучше под sa.

При запуске ServiceDesk создал новую конфигурацию, указав новый сервер. Заход под пользователем с именной лицензией прошел сразу. Под конкурентными лицензиями не пускало. 

Из мененджера лицензий штатно создаю запрос, получаю ответ, загружаю. И всё работает.

Показать все комментарии

Часто приходится переходить с одной конфигурации Terrasoft на другую.

Опишу переход Terrasoft Sales 3.1.1.6 на Terrasoft X15 3.1.1.6
Обе базы под Firebird.

Можно просто загрузить сервисы x15 на Sales, но при такой процедуре возможны всякого рода неприятности, например у меня не получилось загрузить все wa_**.

Перенос данных требовал всего лишь импорта контактов и контрагентов. Есть в утилите IB Expert полезная функция Table Data Comparer, в которой просто нужно указать таблицу источник и таблицу приемник, затем выполнить сгенерированный скрипт.

Единственная трудность заключается когда в tbl_Account есть записи с заполненым полем PrimaryContactID, а в tbl_Contact записи с заполненым полем AccountID, в этом случае перенос всех записей не возможен.

Решение:
1. В базе источнике создаем копию таблицы tbl_Account, скажем tbl_Account2 и с помошью того же Table Data Comparer копируем данные из tbl_Account в tbl_Account2

2. В tbl_Account2 устанавливаем все значения PrimaryContactID в null

3. Копируем в tbl_Account базы приемника данные из tbl_Account2 базы источника

4. Копируем в tbl_Contact базы приемника данные из tbl_Contact базы источника

5. Копируем в tbl_Account базы приемника данные из tbl_Account базы источника

6. Копируем в tbl_Contact базы приемника данные из tbl_Contact базы источника

Нравится

Поделиться

7 комментариев

Павел!

Могу посоветовал решение попроще.

На момент переноса данных между таблицами tbl_Account и tbl_Contact удаляются внешние ключи, а после окончания переноса - ключи снова создаются.

А вот если сделать так:
- сохранить сервисы tbl_Contact и tbl_Account;
- перенести данные;
- загрузить сохраненные сервисы;
Какова вероятность, что сервисы встанут корректно и без проблем?
Если такое попробовать провернуть на большем наборе сущностей чем 2 таблици?

Вероятность полностью зависит от того, на сколько корректные данные будут загружаться. Если загружаемые данные не нарушат целостность информации, то и сохранение таблиц пройдет нормально.

А как они могут нарушить целостность, если они ее не нарушают в базе-источнике? Ведь мы просто сгенерируем два скрипта вида "insert into tbl_Account ..." и "insert into tbl_Contact" со всеми значениями полей.
Вопрос к тому не могут на корректный перенос повлиять может какие-нибудь триггеры?

Могут, т.к. таблицы контактов и контрагентов дополнительно ссылаются еще на десяток справочников, и в этом случае нужно переносить и их

Ах да, точно...
Но создание связей вручную, так же чревато этой проблемой...

Конечно же

Показать все комментарии