Copie d'un schéma Maximo sur Oracle
Problème (résumé)
Le schéma Maximo a changé de manière significative à partir de la version 6. Les utilisateurs sont maintenant contenus dans le schéma, de sorte que seul le schéma doit être exporté et importé.
Résoudre le problème
Il y a eu plusieurs changements majeurs au schéma commençant par la version 6 qui affectent le processus de copie d'un schéma avec les utilitaires d'exportation et d'importation Oracle:
- Les ID utilisateur Maximo ne sont plus des ID utilisateur de base de données. Par conséquent, vous n'avez plus besoin de créer une exportation de base de données complète pour copier les ID utilisateur. Il existe une option permettant de créer certains ID utilisateur MAXIMO en tant qu'utilisateurs de base de données pour le développement de rapports, mais si cela a été fait, ces quelques identifiants peuvent être recréés après une importation.
- Les mots de passe Maximo sont cryptés et stockés dans une table Maximo. Vous devez vous rappeler au moins le mot de passe d'un ID administrateur Maximo (par exemple MAXADMIN) afin de réinitialiser les mots de passe sur le schéma copié.
- Maximo utilise le type de données Oracle CLOB dans plusieurs tables. L'importation Oracle importera uniquement les tables contenant des CLOB dans le même nom d'espace table que la table à partir de laquelle elles ont été exportées. Pour cette raison, vous devez généralement créer les noms SAME Maximo tablespace sur la base de données cible comme vous avez sur la base de données source.
- Maximo utilise les index Oracle Text pour accélérer la recherche par description. Ces index de texte ont des préférences lexer qui ne sont pas exportées avec le schéma Maximo. Ils doivent donc être pré-créés avec un script avant l'importation. Oracle 10.2 modifie l'une de ces préférences, ce qui peut exiger que les index soient importés séparément.
Oracle Data Pump
Si vous utilisez Oracle 10g ou version ultérieure, vous devez utiliser les utilitaires d'exportation et d'importation Oracle Data Pump (expdp et impdp) plutôt que les anciens utilitaires exp et imp. Data Pump est supérieur aux anciens utilitaires. Voir le manuel Oracle Database Utilities pour plus de détails sur l'utilisation de Data Pump.
Exporter un schéma Maximo
REMARQUE : Vous devez utiliser la même version de l'utilitaire d'exportation que la version de la base de données source et vous devez utiliser la même version de l'utilitaire d'importation que la version de la base de données cible. Vous devez également importer vers une version d'Oracle qui est identique ou supérieure à la base de données source. Par exemple, vous devez utiliser la version d'exportation 9.2.0.6 pour exporter Maximo à partir d'une base de données de la version 9.2.0.6. Vous devez ensuite utiliser la version d'importation 10.1.0.3 pour importer dans une base de données version 10.1.0.3.
AVERTISSEMENT: Si vous exportez le schéma pendant l'ajout de données, une ou plusieurs séquences seront incorrectes après l'importation et entraîneront des erreurs ORA-00001. Vous devrez comparer les valeurs de séquence avec la valeur maximale dans la colonne qu'elles remplissent et corriger celles qui ne le sont pas.
AVERTISSEMENT: Avant d'exporter le schéma, vous devez arrêter le travail de synchronisation de l'index Oracle Text afin de ne pas exporter les index de texte en cours de mise à jour. Si vous n'arrêtez pas ce travail, le fichier d'exportation contiendra des données d'index de texte non valides pour certains de ces index, ce qui provoquera des erreurs dans Maximo après l'importation. Une fois le travail de synchronisation arrêté, exécutez une fois la procédure de synchronisation à la main pour vous assurer que les index de texte sont mis à jour:
exec maximo_ts_job ();
AVERTISSEMENT: Si vous exportez à partir d'une base de données active, telle que la production, pendant l'ajout ou la modification de données, les modifications apportées aux index de texte ne seront pas prises en compte. Cela peut provoquer l'échec des requêtes de texte pour renvoyer des lignes qui existent lors de l'exécution sur la base de données cible. La solution consiste à reconstruire tous les index de texte sur la base de données cible. (Ce n'est pas un problème critique si la base de données cible est destinée aux tests fonctionnels, aux tests de mise à niveau, etc.)
Exécutez l'utilitaire d'exportation Oracle conformément au manuel Oracle Database Utilities . Exportez uniquement le schéma Maximo (ID utilisateur). Voici un exemple de fichier de paramètres d'exportation pour l'utilitaire exp (pour l'exportation sous Windows):
- userid = system / systempassword @
- fichier connectstring = C: \ TEMP \ Maximo.DMP
- log = C: \ TEMP \ Maximo.LOG
- propriétaire = MAXIMO
- rows = Y
- compress = y
- buffer = 32767
Importation du schéma Maximo
Comme l'instance cible doit avoir les mêmes noms d'espace de table pour toutes les tables contenant des types de données CLOB ou BLOB, vous pouvez exécuter l'instruction suivante dans l'instance source pour répertorier les noms d'espace table utilisés par les tables contenant des colonnes BLOB ou CLOB:
select distinct tablespace_name from user_tables where table_name in
(select table_name from user_tab_columns where data_type in ('BLOB','CLOB'))
Avant d'importer le schéma, vous devez créer l'ID utilisateur MAXIMO. Si vous actualisez un schéma de test depuis la production, vous devez vous assurer que tous les anciens objets ont été supprimés / supprimés. La seule façon de garantir que cela a été fait correctement est de supprimer le schéma et de le recréer ensuite.
Exécutez les commandes suivantes pour créer le schéma Maximo dans l'instance cible. Cette séquence de commandes ci-dessous provient de CREATEMaximoES.SQL et est documentée dans le Guide d'installation de Maximo. Si vous utilisez un nom de schéma ou un nom d'espace de table autre que MAXIMO, le guide d'installation explique ce qu'il faut modifier dans le script.
create user maximo identified by maximo;
alter user maximo default tablespace maximo quota unlimited on maximo;
alter user maximo temporary tablespace temp;
grant create trigger to maximo;
grant create session to maximo;
grant create sequence to maximo;
grant create synonym to maximo;
grant create table to maximo;
grant create view to maximo;
grant create procedure to maximo;
grant alter session to maximo;
grant execute on ctxsys.ctx_ddl to maximo;
Vous devrez peut-être indiquer le quota du propriétaire du schéma sur des espaces de table supplémentaires. Copiez et modifiez la commande suivante pour chaque tablespace supplémentaire:
alter user maximo quota unlimited on second_tablespace;
À partir de Maximo Patch 6.0.3 sur Oracle 10g ou supérieur, le schéma aura également besoin du privilège CREATE JOB car le travail de synchronisation de l'index de texte sera exécuté par DBMS_SCHEDULE au lieu de DBMS_JOB. (Ce privilège n'est pas nécessaire et n'existe pas sur Oracle 9i.) Sur Oracle 10g ou 11i, exécutez également:
grant create job to maximo;
L'exportation de schéma n'exportera pas les définitions de préférences et de sous-lexers Oracle Text. Vous devez vous connecter en tant que MAXIMO avec SQLPLUS et exécuter les opérations suivantes pour les configurer avant d'exécuter l'importation.
call ctx_ddl.drop_preference('global_lexer');
call ctx_ddl.drop_preference('default_lexer');
call ctx_ddl.drop_preference('english_lexer');
call ctx_ddl.drop_preference('chinese_lexer');
call ctx_ddl.drop_preference('japanese_lexer');
call ctx_ddl.drop_preference('korean_lexer');
call ctx_ddl.drop_preference('german_lexer');
call ctx_ddl.drop_preference('dutch_lexer');
call ctx_ddl.drop_preference('swedish_lexer');
call ctx_ddl.drop_preference('french_lexer');
call ctx_ddl.drop_preference('italian_lexer');
call ctx_ddl.drop_preference('spanish_lexer');
call ctx_ddl.drop_preference('portu_lexer');
call ctx_ddl.create_preference('default_lexer','basic_lexer');
call ctx_ddl.create_preference('english_lexer','basic_lexer');
call ctx_ddl.create_preference('chinese_lexer','chinese_lexer');
call ctx_ddl.create_preference('japanese_lexer','japanese_lexer');
call ctx_ddl.create_preference('korean_lexer','korean_morph_lexer');
call ctx_ddl.create_preference('german_lexer','basic_lexer');
call ctx_ddl.create_preference('dutch_lexer','basic_lexer');
call ctx_ddl.create_preference('swedish_lexer','basic_lexer');
call ctx_ddl.create_preference('french_lexer','basic_lexer');
call ctx_ddl.create_preference('italian_lexer','basic_lexer');
call ctx_ddl.create_preference('spanish_lexer','basic_lexer');
call ctx_ddl.create_preference('portu_lexer','basic_lexer');
call ctx_ddl.create_preference('global_lexer', 'multi_lexer');
call ctx_ddl.add_sub_lexer('global_lexer','default','default_lexer');
call ctx_ddl.add_sub_lexer('global_lexer','english','english_lexer','en');
call ctx_ddl.add_sub_lexer('global_lexer','simplified chinese','chinese_lexer','zh');
call ctx_ddl.add_sub_lexer('global_lexer','japanese','japanese_lexer',null);
call ctx_ddl.add_sub_lexer('global_lexer','korean','korean_lexer',null);
call ctx_ddl.add_sub_lexer('global_lexer','german','german_lexer','de');
call ctx_ddl.add_sub_lexer('global_lexer','dutch','dutch_lexer',null);
call ctx_ddl.add_sub_lexer('global_lexer','swedish','swedish_lexer','sv');
call ctx_ddl.add_sub_lexer('global_lexer','french','french_lexer','fr');
call ctx_ddl.add_sub_lexer('global_lexer','italian','italian_lexer','it');
call ctx_ddl.add_sub_lexer('global_lexer','spanish','spanish_lexer','es');
call ctx_ddl.add_sub_lexer('global_lexer','portuguese','portu_lexer',null);
Remarque: le ci-dessus incorpore le korean_morph_lexer requis pour Oracle 10.2. Ce lexer est également disponible avec Oracle 9.2 et 10.1. Les commandes ci-dessus peuvent donc être utilisées avec toutes les versions d'Oracle prises en charge.
AVERTISSEMENT: Si vous utilisez les utilitaires Oracle Data Pump, les index de texte seront importés sans erreur même si les préférences n'ont pas été créées. Les préférences sont uniquement utilisées lors de la création d'un index de texte avec la commande CREATE INDEX. Après l'importation, si vous exécutez Database Configuration, mettez à niveau les utilitaires et ainsi de suite, vous rencontrerez des erreurs fatales si les préférences sont manquantes.
Voici un exemple de fichier de paramètres d'importation pour imp. Notez l'utilisation de la syntaxe FROMUSER / TOUSER. Même si vous avez une exportation de base de données complète, n'effectuez pas une importation de base de données complète. Une importation complète mettra à jour le schéma CTXSYS inutilement et causera des problèmes avec korean_lexer.
- userid = system / systempassword @
- fichier connectstring = C: \ TEMP \ Maximo.DMP
- journal = C: \ TEMP \ MaximoIMP.LOG
- fromuser = MAXIMO
- touser = rangées MAXIMO
- = Y
Si vous importez dans la même instance à partir de laquelle vous avez exporté, vous utiliserez un nouveau nom de schéma Maximo et vous risquez de recevoir une erreur à la fin de l'importation lors de la création du travail par lots maximo_ts_job.
Si l'importation a réussi, le travail qui met automatiquement à jour les index Oracle Text n'a pas été démarré. S'il vous plaît télécharger Tech Note numéro 1262037 pour une explication sur la façon de corriger cela. MAXIMO fonctionnera correctement sans cela, mais les recherches sur les champs de description ne trouveront pas tous les enregistrements jusqu'à ce que cela soit corrigé.
Si vous avez importé des tables ou des index Maximo dans des tablespaces différents de ceux de la base de données d'origine, vous devez mettre à jour ces informations dans MAXTABLE, MAXTABLECFG et MAXSYINDEXES. Reportez-vous au document de base de connaissances 1262981 pour connaître les mises à jour SQL utilisées pour cette mise à jour.
Tâches
postérieures à l'importation Un certain nombre de tâches peuvent devoir être effectuées après l'importation avant de pouvoir démarrer le (s) serveur (s) d'application et utiliser le nouveau système.
Vérification des index de texte valides
Une fois l'importation terminée, vous pouvez avoir sur ou plusieurs index de texte non valide. Cela peut se produire si un index de texte a été mis à jour lorsque l'exportation était en cours d'exécution. L'instruction suivante répertorie tous les index de texte non valides:
- alter index indexname rebuild;
Si vous trouvez des index invalides, vous pouvez les corriger avec la commande suivante:
S'il y en a un grand nombre, vous pouvez exécuter SQLPLUS sous Windows, vous connecter en tant que propriétaire du schéma Maximo et exécuter les opérations suivantes pour créer et exécuter générer et exécuter un script de commandes de reconstruction:
- set feedback off
set hea off
set pagesize 10000
spool C:\TEMP\REBUILDNDX.SQL
select 'ALTER INDEX '||index_name||' REBUILD;' from user_indexes where index_type = 'DOMAIN'
and (domidx_status <> 'VALID' or domidx_opstatus <> 'VALID');
spool off
@C:\TEMP\REBUILDNDX.SQL
- Cela peut durer un certain temps, en fonction de la taille des tables et du nombre d'index.
Séquences
Si l'exportation est effectuée alors que la base de données source est utilisée, les séquences peuvent être utilisées après l'exportation de leurs définitions, ce qui peut entraîner des erreurs ORA-00001 lors de l'ajout d'enregistrements à certaines tables de la base de données.
Après avoir exporté depuis la base de données source, exécutez la requête suivante et enregistrez la sortie. Cela enregistrera le nombre le plus élevé utilisé pour chaque séquence pendant l'exécution de l'exportation:
select sequence_name, last_number from user_sequences classer par sequence_name;
Après l'importation dans la base de données cible, exécutez la requête ci-dessus sur la cible et enregistrez la sortie. Comparez les résultats des deux bases de données. Pour chaque instance où la séquence de la base de données source a une valeur supérieure à last_number par rapport à la cible, vous devez supprimer et recréer cette séquence dans la base de données cible afin de la réinitialiser:
DROP SEQUENCE sequence_name;
CREATE SEQUENCE sequence_name START WITH higher_number+1
Cadre d'intégration
Si le système source exécute des processus Integration Framework, ceux-ci doivent être nettoyés dans la base de données cible avant de démarrer le serveur d'applications.
- Définissez l'état inactif de toutes les crontasks Integration Framework en mettant à jour CRONTASKINSTANCE.ACTIVE à 0 pour les crontasks: JMSQSEQCONSUMER, FLATFILECONSUMER, IFACETABLECONSUMER et XMLFILECONSUMER.
- Supprimez les tables du schéma Maximo utilisé pour le magasin de données de la file d'attente JMS. (Par exemple, si WebSphere supprime des tables dont le nom commence par SIB.)
Après le démarrage du serveur d'applications, les files d'attente JMS doivent être recréées pour le nouveau système, les nouvelles bases de données définies, etc. Reportez-vous aux notes techniques sur la configuration des files d'attente et des crontas JMS Integration Framework pour plus de détails.