Публикация

Перенос базы на другой сервер

Перенос базы данных необходимо выполнять только через действия Backup\Restore, что позволяет не нарушать внутренние связи таблиц, представлений и т.д.
Действие Attaach\Detach не обеспечивает стабильную работу базы при переносе на другой сервер.
При переносе базы данных, версии Terrasoft CRM 3.1 и выше, с одного сервера на другой есть необходимость создавать Имена входа(Login) непосредственно в СУБД для всех пользователей (Для низших версий - данное действие проводиться только для администраторов Terrasoft CRM).
При создании Login нет необходимости указывать какую-либо конкретную базу данных - все значения оставляем "по умолчанию".
Для пользователей, которые имеют административные права в Terrasoft CRM при создании Login, на закладке [Server Roles], необходимо выставить значение [sysadmin].
После создания имени входа обычного пользователя, необходимо сопоставить имя пользователя(User),непосредственно в базе данных, с именем входа(Login)на СУБД.

Нравится

Поделиться

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

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

Cannot execute as the database principal because the principal "fkeys" does not exist, this type of principal cannot be impersonated, or you do not have permission. «Call Stack»

Помогает следующий скрипт

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

А что это за пользователь fkeys?

"Павел Крышкин" написал:Если описанный выше перенос происходит для баз данных под MSSQL 2005 может возникнуть ошибка при добавлении полей в таблицы:

Cannot execute as the database principal because the principal "fkeys" does not exist, this type of principal cannot be impersonated, or you do not have permission. «Call Stack»

Помогает следующий скрипт


или под MSSQL 2008

1) Удаляем процедуру tsp_fkeys
2) Удаляем пользователя fkeys
3) Делаем BAK базы
4) Востанавлеваем базу из BAK-файла

При первом входе Supervisor-а в систему, автоматически создаются tsp_fkeys и fkeys. Проверено! 100%

"Ковалишин Виталий" написал:

А вот у меня почему-то не сработало на 2008 :(
Как раз не создался login fkeys

"Ковалишин Виталий" написал:При первом входе Supervisor-а в систему, автоматически создаются tsp_fkeys и fkeys

Проверял на 2005 и 2008! Несколько раз!
После востановления - не создается, после первого входа supervisor в систему - создаются...

а все-таки, для чего он нужен?

Данный пользователь является встроенным пользователем MS SQL версии 2005 и выше и используется специально для получения внешних ключей записи, так как у обычного пользователя нет прав на данное действие.
Без получения внешних ключей не получиться удалить некоторые записи или таблицы.

Не удается удалить пользователя fkeys, Management Studio выдает ошибку:
"The database principal is set as the execution context of one or more procedures functions, or event notifications and cannot be dropped"
Подскажите как быть в этом случае.

Данное сообщение означает что удаляемый Вами пользователь используеться для выполнения одной или более функций и не может быть удаленным.
Уточните:
1) Для чего Вы удаляете данного пользователя?
2) Вы пытаетесь удалить пользователя базы данных(User) или имя входа SQL(Login)?

Следую инструкциям Виталия Ковалишина:
1) Удаляем процедуру tsp_fkeys
2) Удаляем пользователя fkeys
3) Делаем BAK базы
4) Востанавлеваем базу из BAK-файла

На втором этапе пытаюсь удалить пользователя fkeys базы даных (User), а он никак :sad:

Андрей, в данном случае проще и быстрее будет выполнить пункты 3) и 4) Виталия, а после этого следовать инструкции Павла:

"Павел Крышкин" написал:Помогает следующий скрипт
sp_change_users_login 'update_one', 'fkeys', 'fkeys'

Пользователь fkeys может использоваться не только в процедуре tsp_fkeys, но и в некоторых других объектах БД, и поиск всех таких объектов для того, чтобы удалить их или убрать связь с fkeys, может занять более продолжительное время, чем выполнение скрипта.

Спасибо Олег, скрипт действительно помог!
Но пришлось создавать имена входа в СУБД для каждого пользователя, как писал изначально Клименко Николай, и затем применять для каждого из них этот скрипт.

Добрый день!
После переноса базы через Backup/Restore, добавления всех пользователей и сопоставления имен имеется следующая проблема:
В базе невозможно удалить старые записи даже пользователем с правами администратора. При попытке удаления выдается следующее сообщение об ошибке:
"Ошибка выполнения метода 'mds_RecordsForDeleteOnDatasetAfterOpen'. Ошибка удаления записи. Оригинальное сообщение: Выполнение данной инструкции было прервано.
Конфликт инструкции DELETE с ограничением REFERENCE "FTaskContactID". Конфликт произошел в базе данных "Terrasoft", таблица "dbo.tbl_Task", column 'ContactID' «Call Stack»"

Используется Terrasoft XRM 3.3.2.43.

Сергей, в данном случае Вы, скорее всего, пытаетесь удалить записи в разделе "Контакты", по которым существуют задачи. Попробуйте открыть деталь "Задачи" для контакта, которого Вы хотите удалить. Если в детали есть записи, надо сначала удалить их, либо очистить в этих задачах поле "Контакт".

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

Понимаю, что тема старая и может даже не нужная... но вдруг кому-то время сэкономит...

Переношу с MSSQL 2000 базу на 2012 (через 2008).

В 2012-ом (и в 2008 тоже) пользователь "fkeys" не создался и процедура "tsp_fkeys" тоже...

Проблемма в том, что в процедуре tsp_GetLoginInfo строчка "set @version = convert(int, substring(convert(char(20), serverproperty('productversion')),1,1))" выдаёт "1" и соответственно "if (@version > 8) " не отрабатывает.

Меняем на "if (@version > 0) " и всё создаётся и отлично работает!

Спасибо.

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