6 votes

Restauration d'une base de données dans une autre instance de tridion

J'ai fait une bonne partie du chemin, mais il semble y avoir un problème d'autorisations quelque part :

Avant la restauration, tout fonctionne correctement dans mon environnement cible - la cible possède un compte de connexion au serveur TCMDBUser qui est mappé à mon utilisateur de base de données tridion_cm TCMDBUser.

Ma base de données source tridion_cm a un utilisateur TCMDBUser_DEV.

Après avoir restauré le .bak source dans ma cible, TCMDBUser_DEV est orphelin.

Je modifie la table TRUSTEES pour corriger MTSUser et mes comptes de log admin pour mon environnement cible et j'exécute ce qui suit pour réparer mon utilisateur de base de données orphelin :

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

Je peux me reconnecter à l'explorateur Tridion et voir la liste des publications attendue et je peux me promener dans l'arborescence, mais lorsque j'arrive à un dossier qui devrait contenir des éléments, je ne vois rien avec une erreur :

et l'erreur correspondante dans le journal des événements est :

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

5voto

Chris Summers Points 9467

Vous devrez supprimer/supprimer le TCMDBUser_DEV de la BD et en créer un nouveau avec le même nom et le même mot de passe (ou le rattacher à votre BD cm). Cela devrait régler votre problème.

J'utilise normalement la méthode de suppression avec MS SQL server. Je pense que cela se produit en raison du statut de propriété que l'utilisateur TCMDBU a sur le schéma de la base de données.

Une fois terminé, votre utilisateur TCMDBUser devrait avoir les permissions suivantes sur votre base de données Tridion_CM

enter image description here

4voto

Bart Koopman Points 4775

Comme Chris l'a mentionné, je supprime toujours l'utilisateur de la base de données, puis j'attribue à l'utilisateur TCMDBU existant dans SQL Server les droits sur la base de données restaurée. Vous pouvez supprimer l'utilisateur avec la commande suivante (sur la base de données restaurée) :

EXEC sp_dropuser TCMDBUser

Ensuite, par le biais de SQL Server - Security - Logins, vous demandez les propriétés de votre TCMDBUser et dans le User Mapping ajoutez les rôles de base de données suivants : db_datareader , db_datawriter y db_ddladmin .

C'est ce que j'ai toujours fait dans le passé et ça marche pour moi, je ne suis pas sûr que ce soit nécessaire, mais ça vaut le coup d'essayer je suppose.

2voto

vikas kumar Points 2386

Essayez de créer un nouvel utilisateur TCMDBUser dans la base de données et exécutez la commande suivante

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X