将数据库还原到tridion的其他实例

时间:2012-11-20 23:07:24

标签: tridion tridion-2011

我已经完成了大部分工作,但似乎某处出现了权限问题:

在恢复之前,一切都在我的目标环境中正常工作 - 目标有一个服务器登录帐户TCMDBUser,它映射到我的tridion_cm数据库用户TCMDBUser

我的源tridion_cm数据库有用户TCMDBUser_DEV。

将源.bak恢复到我的目标TCMDBUser_DEV后是孤立的。

我编辑TRUSTEES表以更正我的目标环境的MTSUser和管理员日志帐户,并运行以下操作来修复我的孤立数据库用户:

sp_change_users_login @Action='update_one', 
@UserNamePattern='TCMDBUser_DEV', 
@LoginName='TCMDBUser'
GO

我可以重新登录Tridion资源管理器并查看预期的发布列表,并可以浏览树结构但是当我来到一个应该包含项目的文件夹时,我看不到任何错误:

并且相应的事件日志错误是:

Unable to get list of SDL Tridion Content Manager items.
DESCRIPTION

Error Code:
0x80040000 (-2147221504)

Call stack:
System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String)
System.Data.SqlClient.SqlDataReader.GetOrdinal(String)
System.Data.SqlClient.SqlDataReader.get_Item(String)
Tridion.ContentManager.Data.AdoNet.DatabaseUtilities.ConvertToFieldDictionary(IDataRecord,IDictionary`2)
Tridion.ContentManager.Data.AdoNet.IdentifiableObjectDataMapper.Read(TcmUri,IDataRecord,IDictionary`2)
Tridion.ContentManager.Data.AdoNet.ContentManagement.OrganizationalItemDataMapper.GetListItemsPost(IDataReader,TcmUri,OrganizationalItemItemsFilterData)
Tridion.ContentManager.Data.AdoNet.ContentManagement.OrganizationalItemDataMapper.Tridion.ContentManager.Data.ContentManagement.IOrganizationalItemDataMapper.GetListItems(TcmUri,OrganizationalItemItemsFilterData)
Tridion.ContentManager.ContentManagement.OrganizationalItem.GetListItemsData(OrganizationalItemItemsFilter)
Tridion.ContentManager.ContentManagement.OrganizationalItem.GetListItemsStream(OrganizationalItemItemsFilter)
Tridion.ContentManager.BLFacade.ContentManagement.OrganizationalItemFacade.GetListItemsXml(UserContext,String,ListFilter,ListColumnFilter)
Tridion.ContentManager.BLFacade.ContentManagement.OrganizationalItemFacade.GetListData(UserContext,String,EnumListKind,ListColumnFilter,String)
Folder.GetListItems

3 个答案:

答案 0 :(得分:5)

您需要从DB中删除/删除TCMDBUser_DEV,然后使用相同的名称和密码创建一个新的TCMDBUser_DEV(或将其重新连接到您的cm DB)。这应该可以解决你的问题。

我通常在MS SQL服务器上使用delete方法。我相信这是由于TCMDBUser在数据库模式上拥有的所有权状态而发生的。

完成后,您的TCMDBUser用户应具有Tridion_CM数据库的以下权限

enter image description here

答案 1 :(得分:4)

与Chris提到的一样,我总是从数据库中删除用户,然后在SQL Server中为现有的TCMDBUser分配对已还原数据库的权限。您可以使用以下命令(在还原的数据库上)删除用户:

EXEC sp_dropuser TCMDBUser

然后通过SQL Server - Security - Logins,您可以请求TCMDBUser的属性,并在User Mapping中添加以下数据库角色:db_datareaderdb_datawriterdb_ddladmin。< / p>

这就是我过去一直做的并且对我有用,不确定是否全部都需要,但值得一试,我猜

答案 2 :(得分:2)

尝试在数据库中创建新用户TCMDBUser并运行以下命令

EXEC sp_change_users_login 'Update_One', 'TCMDBUser', 'TCMDBUser'