================================================================ == Sujet: Migration (exp/imp) de SOUK (8.1.7 --> 9.0.1) == Auteur: SK - 08.07.2002 == Note: Une base 9i a été créée, puis import des schémas == Je me suis inspiré du document CLON_BD2.DOC == réalisé par Rafael Rodriguez (98-99). ================================================================ Base source: es21 (SOUK) Base cible: es27 (SOUK) ---------------------------------------------------- -- liste des utilisateurs existants de la base cible ---------------------------------------------------- select username from dba_users; --------------------------------------- -- creation des utilisateurs de la base --------------------------------------- # Pour ne pas avoir de redondance, on enleve les users existants! # Note: il a fallu mettre le password entre '' pour que ca fonctionne. set heading off set pagesize 0 set linesize 200 set feedback off set echo off set trimspool on -- enleve les espaces Spool c:\mig_temp\user2.sql SELECT 'CREATE USER ' || username || ' IDENTIFIED BY VALUES ''' || password || ''' DEFAULT TABLESPACE ' || default_tablespace || ' TEMPORARY TABLESPACE ' || temporary_tablespace || ';' FROM DBA_USERS WHERE username <> 'SYS' AND username <> 'SYSTEM' AND username <> 'OUTLN' AND username <> 'DBSNMP' AND username <> 'ORDSYS' AND username <> 'AURORA$JIS$UTILITY$' AND username <> 'OSE$HTTP$ADMIN' AND username <> 'AURORA$ORB$UNAUTHENTICATED' AND username <> 'ORDPLUGINS' AND username <> 'MDSYS' AND username <> 'CTXSYS' AND username <> 'MEN' AND username <> 'MEN1' AND username <> 'MEN2' AND username <> 'MEN3' AND username <> 'MEN4' AND username <> 'MENOBJET' ; Spool off set heading on set pagesize 14 set linesize 80 --------------------------------------- -- creation des droits des utilisateurs --------------------------------------- - Role sur la cible: Select role from dba_roles ; - Donne le nombre de rôles affectés a un utilisateur (permet de fixer le paramètre 'max_enabled_roles'): select grantee, count(*) from dba_role_privs where default_role = 'YES' group by grantee; - Fixer max_enabled_roles à une valeur plus haute que celle retournée par la requête. 01. Lancer la requête suivante pour créer le script de création des rôles: Spool c:\mig_temp\role.sql SELECT 'CREATE ROLE ' || role || ';' FROM DBA_ROLES ; Spool off - Avant de lancer le script, éliminer les rôles qui existent déjà comme vu précédemment. ******************** Pas fait (à voir)... ******************** 02. Privilèges des rôles spécifiques Pour réaliser cette requête, il est nécessaire que le user sous lequel on se connecte à SQL Plus possède les rôles recherchés. Spool c:\mig_temp\roles_privs.sql SELECT 'GRANT ' || privilege || ' TO ' || role || ' ADMIN_OPTION ' || admin_option || ';' FROM ROLE_SYS_PRIVS WHERE role = 'DES2000_OWNER' OR role = 'CKR_SYSCASE'; Spool off - Remplacer dans le fichier créé "ADMIN_OPTION YES" par "WITH ADMIN OPTION", dans le cas "ADMIN_OPTION NO" effacer les mots. 03. Rôles qui sont composés par des rôles Spool c:\mig_temp\roles_roles.sql SELECT 'GRANT ' || granted_role || ' TO ' || role || ' ADMIN_OPTION ' || admin_option || ';' FROM ROLE_ROLE_PRIVS WHERE role = 'DES2000_OWNER' OR role = 'CKR_SYSCASE'; Spool off Remplacer dans le fichier créé "ADMIN_OPTION YES" par "WITH ADMIN OPTION", dans le cas "ADMIN_OPTION NO" effacer les mots. ************************ FIN Pas fait (à voir)... ************************ 04. Rôles donnés directement aux utilisateurs set heading off set pagesize 0 set linesize 200 set feedback off set echo off set trimspool on -- enleve les espaces Spool c:\mig_temp\roles_user.sql SELECT 'GRANT ' || granted_role || ' TO ' || grantee || ';' FROM DBA_ROLE_PRIVS WHERE grantee <> 'SYS' AND grantee <> 'SYSTEM' AND grantee <> 'OUTLN' AND grantee <> 'DBSNMP' AND grantee <> 'ORDSYS' AND grantee <> 'AURORA$JIS$UTILITY$' AND grantee <> 'OSE$HTTP$ADMIN' AND grantee <> 'AURORA$ORB$UNAUTHENTICATED' AND grantee <> 'ORDPLUGINS' AND grantee <> 'MDSYS' AND grantee <> 'CTXSYS' AND grantee <> 'MEN' AND grantee <> 'MEN1' AND grantee <> 'MEN2' AND grantee <> 'MEN3' AND grantee <> 'MEN4' AND grantee <> 'MENOBJET' ; Spool off set heading on set pagesize 14 set linesize 80 05. Attribuer le Quota illimité sur le TABLESPACE TEMP set heading off set pagesize 0 set linesize 200 set feedback off set echo off set trimspool on Spool c:\mig_temp\unlimited_quota.sql SELECT 'ALTER USER ' || username || ' QUOTA UNLIMITED ON USERS ' || ';' FROM DBA_USERS WHERE username <> 'SYS' AND username <> 'SYSTEM' AND username <> 'OUTLN' AND username <> 'DBSNMP' AND username <> 'ORDSYS' AND username <> 'AURORA$JIS$UTILITY$' AND username <> 'OSE$HTTP$ADMIN' AND username <> 'AURORA$ORB$UNAUTHENTICATED' AND username <> 'ORDPLUGINS' AND username <> 'MDSYS' AND username <> 'CTXSYS' AND username <> 'MEN' AND username <> 'MEN1' AND username <> 'MEN2' AND username <> 'MEN3' AND username <> 'MEN4' AND username <> 'MENOBJET' ; Spool off set heading on set pagesize 14 set linesize 80 05. Privilèges donnés directement aux utilisateurs set heading off set pagesize 0 set linesize 200 set feedback off set echo off set trimspool on Spool c:\mig_temp\privs_user.sql SELECT 'GRANT ' || privilege || ' TO ' || grantee || ';' FROM DBA_SYS_PRIVS WHERE grantee <> 'SYS' AND grantee <> 'SYSTEM' AND grantee <> 'OUTLN' AND grantee <> 'DBSNMP' AND grantee <> 'ORDSYS' AND grantee <> 'AURORA$JIS$UTILITY$' AND grantee <> 'OSE$HTTP$ADMIN' AND grantee <> 'AURORA$ORB$UNAUTHENTICATED' AND grantee <> 'ORDPLUGINS' AND grantee <> 'MDSYS' AND grantee <> 'CTXSYS' AND grantee <> 'MEN' AND grantee <> 'MEN1' AND grantee <> 'MEN2' AND grantee <> 'MEN3' AND grantee <> 'MEN4' AND grantee <> 'MENOBJET' AND grantee <> 'CONNECT' AND grantee <> 'RESOURCE' AND grantee <> 'DBA' AND grantee <> 'SELECT_CATALOG_ROLE' AND grantee <> 'EXECUTE_CATALOG_ROLE' AND grantee <> 'DELETE_CATALOG_ROLE' AND grantee <> 'EXP_FULL_DATABASE' AND grantee <> 'WM_ADMIN_ROLE' AND grantee <> 'IMP_FULL_DATABASE' AND grantee <> 'RECOVERY_CATALOG_OWNER' AND grantee <> 'AQ_ADMINISTRATOR_ROLE' AND grantee <> 'AQ_USER_ROLE' AND grantee <> 'GLOBAL_AQ_USER_ROLE' AND grantee <> 'OEM_MONITOR' AND grantee <> 'HS_ADMIN_ROLE' AND grantee <> 'JAVAUSERPRIV' AND grantee <> 'JAVAIDPRIV' AND grantee <> 'JAVADEBUGPRIV' AND grantee <> 'JAVA_ADMIN' AND grantee <> 'JAVA_DEPLOY' AND grantee <> 'CTXAPP' ; Spool off set heading on set pagesize 14 set linesize 80 Note: Les droits des rôles sur les objets sont donnés au cours de l'import -> à voir... --------------------------------------- -- Import en mode users --------------------------------------- Pour l'import on crée un fichier de paramètre: pfusers_imp_es21_to_es27.txt Pour avoir la liste des users: set heading off set pagesize 0 set feedback off set echo off set trimspool on Spool c:\mig_temp\user.sql SELECT username FROM DBA_USERS WHERE username <> 'SYS' AND username <> 'SYSTEM' AND username <> 'OUTLN' AND username <> 'DBSNMP' AND username <> 'ORDSYS' AND username <> 'AURORA$JIS$UTILITY$' AND username <> 'OSE$HTTP$ADMIN' AND username <> 'AURORA$ORB$UNAUTHENTICATED' AND username <> 'ORDPLUGINS' AND username <> 'MDSYS' AND username <> 'CTXSYS' AND username <> 'MEN' AND username <> 'MEN1' AND username <> 'MEN2' AND username <> 'MEN3' AND username <> 'MEN4' AND username <> 'MENOBJET' ; Spool off set heading on set pagesize 14 Le fichier pfusers.txt contient les paramètres pour l'importation. Il faut donc le modifier de manière à y ajouter tous les nouveaux utilisateurs (ceux crées par le fichier users.sql) dans les paramètres TOUSER et FROMUSER. Les chemins du fichier d'import ainsi que celui de journalisation doivent être changés. Vérifiez les autres paramètres. Lancer l'import en n'oubliant pas de vérifier les variables locales ( ORACLE_SID et NLS_LANG). Ce type d'import ne devrait générer aucune erreurs, puisque nous n'importons pas des utilisateurs qui existent déjà. --------------------------------------- -- Compilation des Schémas --------------------------------------- Si lors de l'import full il y a des erreurs, cela décompile des objets dans la base de donnée. Généralement ce sont les packages-bodies qui sont décompilés, pour les compiler 2 options existent: - Lancer pour chaque utilisateur la procédure stockée: execute dbms_utility.compile_schema('NOM_USER') ; - Lancer le script ci-dessous: Note: This script automatically recompiles all objects in the database that have a status of 'INVALID'. Because PL/SQL objects can have interdependencies, it is important to compile them in reverse order of dependency so that only one pass is needed. Requirements: ============= DBA role Script: ======= -----------cut-----------cut--------------cut----------------cut----------- rem ********************************************************* rem * file: comp_all.sql rem * purpose: compile all database stored objects rem * to use: log in using the appropriate account then rem * execute this script using the following syntax: rem * rem * SQL> @comp_all rem * rem * NOTE: It will run successfully, but it will rem not order by dependencies! rem ********************************************************* set heading off set pagesize 0 set linesize 79 set verify off set echo off spool c:\mig_temp\comp_all.sql select decode( OBJECT_TYPE, 'PACKAGE BODY', 'alter package ' || OWNER||'.'||OBJECT_NAME || ' compile body;', 'alter ' || OBJECT_TYPE || ' ' || OWNER||'.'||OBJECT_NAME || ' compile;' ) from dba_objects where STATUS = 'INVALID' and OBJECT_TYPE in ( 'PACKAGE BODY', 'PACKAGE', 'FUNCTION', 'PROCEDURE', 'TRIGGER', 'VIEW' ) order by OWNER, OBJECT_TYPE, OBJECT_NAME; spool off --------------------------------------- -- Paramètres de la base de données --------------------------------------- La requête suivante nous renvoie les information sur la mémoire: column name format a30 column value format a30 select name, value from v$parameter where name in ( 'sga_max_size', 'shared_pool_size', 'db_cache_size', 'large_pool_size', 'pga_aggregate_target', 'java_pool_size', 'log_buffer' ) ; NAME VALUE ------------------------------ --------- shared_pool_size 67108864 sga_max_size 235693416 large_pool_size 10485760 java_pool_size 67108864 db_cache_size 67108864 log_buffer 524288 pga_aggregate_target 0 Note: le nouveau paramètre 'pga_aggregate_target' n'est pas utilisé dans notre cas, ce paramètre est surtout utilisé pour les systèmes DSS (data warehouse). En effet, le tuning de cette partie de mémoire (PGA) est petit pour les systèmes OLTP ( < 1% de la pGA). Ce sont surtout les DSS qui vont bénéficier de ce paramètre. FIN de la création de la nouvelle base es27(SOUK)