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- J'ai réussi à la dupliquer dans ma base DB2 avec RMAN par la commande
Code : Sélectionner tout - Visualiser dans une fenêtre à part BACKUP FULL DATABASE PLUS ARCHIVELOG DELETE ALL INPUT;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)
Code : Sélectionner tout - Visualiser dans une fenêtre à part DUPLICATE TARGET DATABASE
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 :
Ici on voit que le tablespace TSDATA1 dépend aussi du tablespace TSINDEX1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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 :
Là j'ai un doute car je ne sais pas trop s'il faut mettre DB2 ou DB1 comme répertoire ??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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';
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.
Puis donner les droits au USER qui effectuera l’import :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.
5. Lancer ensuite la commande d’import :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SQL > GRANT read, write ON DIRECTORY dmpdir TO SYSTEM; Grant succeeded.
Et voici l'erreur que j'obtiens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 IMPDP system/<password> DUMPFILE=DMPFILE.DMP DIRECTORY=dmpdir TRANSPORT_DATAFILES='TSDATA1_01.DBF', 'TSINDEX1_01.DBF'
Je ne comprends pas trop...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
Pourquoi le datafiledu tablespace TEMP pose pb ?TEMP01.DBF
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
Partager