Pb utilisation RMAN - Transportable tablespace sur 10g
Bonjour à tous,
Je travaille sur 2 serveurs Windows XP.
Le 1er contient une base Oracle 10.2.0.4.0 nommée DB1
Le 2ème contient une base Oracle 10.2.0.4.0 nommée DB2
J'aimerai dupliquer la base DB1 dans la base DB2 et voici ce que j'ai fait jusqu'ici :
- J'ai passé ma base DB1 en mode Archivelog
- J'ai créé un backup avec RMAN par la commande
Code:
BACKUP FULL DATABASE PLUS ARCHIVELOG DELETE ALL INPUT;
- J'ai réussi à la dupliquer dans ma base DB2 avec RMAN par la commande
Code:
DUPLICATE TARGET DATABASE
Mais maintenant j'aimerai dupliquer la base DB1 dans la base DB2 en utilisant les tablespaces transportables avec l'outil RMAN (pour comparer les 2 solutions)
Pourquoi avec RMAN ?? parce que je souhaite garder la DB1 accessible 24h/24 et donc je ne veux pas que mes tablespaces soient à un moment donné en READ-ONLY.
J'ai tous d'abord plusieurs questions :
Les deux bases peuvent-elles avoir un nom différent ?
Les deux bases peuvent-elles être sur 2 serveurs distincts ?
Ma base DB2 doit-elle être vide avant la duplication ?
Voici ce que j'ai fait jusqu'ici :
1. Vérifier d’abord la dépendance du tablespace à transporter avec les autres tablespace :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
sqlplus / nolog
connect / as sysdba ;
SQL> execute DBMS_TTS.TRANSPORT_SET_CHECK ('TSDATA1',TRUE);
PL/SQL procedure successfully completed.
SQL> SELECT * FROM TRANSPORT_SET_VIOLATIONS;
Index SCOTT.PK_TABLE1 in tablespace TSINDEX1 enforces primary constraints of table SCOTT.TABLE1 in tablespace TSDATA1 |
Ici on voit que le tablespace TSDATA1 dépend aussi du tablespace TSINDEX1
Il faut donc le transporter avec et avant cela regarder les dépendances de TSINDEX1 --> il n'y en a qu'avec le tablespace TSDATA1, donc nous pouvons les transporter juste tous les 2.
2. Se connecter ensuite à RMAN pour transporter les 2 tablespaces :
Code:
1 2 3
|
RMAN target /
transport tablespace TSDATA1,TSINDEX1 TABLESPACE DESTINATION 'D:\oracle\product\10.2.0\oradata\DB2' AUXILIARY DESTINATION 'D:\oracle\product\10.2.0\oradata\DB2\Auxiliaires'; |
Là j'ai un doute car je ne sais pas trop s'il faut mettre DB2 ou DB1 comme répertoire ??
3. Copier ensuite le contenu de ces 2 répertoires dans ceux du serveur cible (même chemins) :
Là j'ai copié les différents fichiers du serveur 1 dans plusieurs répertoires du serveur 2 :
• Les datafiles dans le répertoire 'D:\oracle\product\10.2.0\oradata\DB2'
• Les fichiers du répertoire « Auxiliaires » dans le répertoire du même nom
• Les fichiers « impscrpt.sql », « DMPFILE.DMP » et « explog.log » dans un répertoire « D:\oracle\product\10.2.0\oradata\DB2\Dump »
4. Créer maintenant dans la base cible DB2 sur le serveur 2 un directory faisant référence à ce nouveau répertoire dans lequel se trouve le dump à charger avec le user SYSTEM.
Code:
1 2 3 4 5 6 7
|
sqlplus / nolog
connect / as sysdba ;
SQL > create directory dmpdir as 'D:\oracle\product\10.2.0\oradata\DB2\Dump';
Directory created. |
Puis donner les droits au USER qui effectuera l’import :
Code:
1 2 3 4
|
SQL > GRANT read, write ON DIRECTORY dmpdir TO SYSTEM;
Grant succeeded. |
5. Lancer ensuite la commande d’import :
Code:
1 2
|
IMPDP system/<password> DUMPFILE=DMPFILE.DMP DIRECTORY=dmpdir TRANSPORT_DATAFILES='TSDATA1_01.DBF', 'TSINDEX1_01.DBF' |
Et voici l'erreur que j'obtiens :
Citation:
Import: Release 10.2.0.4.0 - Production on Wednesday, 28 July, 2010 19:28:54
Copyright (c) 2003, 2007, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01": system/******** DUMPFILE=DMPFILE.DMP DIRECTORY=dmpdir
TRANSPORT_DATAFILES=' D:\oracle\product\10.2.0\oradata\DB2\TSDATA1_01.DBF',
' D:\oracle\product\10.2.0\oradata\DB2\TSINDEX1_01.DBF'
ORA-39126: Worker unexpected fatal error in KUPW$WORKER.LOAD_METADATA [TABLE_DATA:"SYSTEM"."SYS_IMPO
RT_TRANSPORTABLE_01"]
SELECT process_order, flags, xml_clob, NVL(dump_fileid, :1), NVL(dump_position, :2), dump_length,
dump_allocation, grantor, object_row, object_schema, object_long_name, processing_status,
processing_state, base_object_type, base_object_schema, base_object_name, property, size_estimate,
in_progress FROM "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" WHERE process_order between :3 AND :4
AND processing_state <> :5 AND duplicate = 0 ORDER BY process_order
ORA-01187: cannot read from file 201 because it failed verification tests
ORA-01110: data file 201: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\DB2\TEMP01.DBF'
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 105
ORA-06512: at "SYS.KUPW$WORKER", line 6351
----- PL/SQL Call Stack -----
object line object
handle number name
1BEFAE58 15032 package body SYS.KUPW$WORKER
1BEFAE58 6372 package body SYS.KUPW$WORKER
1BEFAE58 3579 package body SYS.KUPW$WORKER
1BEFAE58 6972 package body SYS.KUPW$WORKER
1BEFAE58 1314 package body SYS.KUPW$WORKER
18637624 2 anonymous block
Job "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" stopped due to fatal error at 19:28:58
Je ne comprends pas trop...
Pourquoi le datafile du tablespace TEMP pose pb ?
Ai-je oublié une étape ?
Pour rappel ma base DB2 est actuellement à l'image de la DB1 (seule une table n'a pas été créé) donc elle n'est pas vide.
Si quelqu'un a un peu de temps pour m'aider ça serait vraiment sympa.
J'espère aussi que ce post va aider d'autres personnes.
Merci ;)
Cat