Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/08/2007, 14h51   #1
Invité régulier
 
Inscription : février 2005
Messages : 47
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 47
Points : 8
Points : 8
Par défaut sauvegarde avec requette sql

Bonjour;

sous TOAD il existe un moyen pour extraire les scripts de création des tables, des vues etc .... sous un fichier *.sql

si je ne veux pas utiliser TOAD, comment je peux faire avec une requette sql pour récuperer les scripts des tables, vues, sequence et pourquoi pas les données aussi .... sous un fichier *.sql
pour un utilisateur donnée


merci d'avance pour votre aide
alamihamza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 15h20   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
dbms_metadata.get_ddl

exemple : http://www.developpez.net/forums/d31255/bases-donnees/oracle/oracle-9i-recuperer-ddl-objet/
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2007, 12h06   #3
Invité régulier
 
Inscription : février 2005
Messages : 47
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 47
Points : 8
Points : 8
ca marche pour la version 10g aussi??
alamihamza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2007, 12h08   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
bien sûr

un simple teste suffira à le vérifier
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2007, 13h14   #5
Invité régulier
 
Inscription : février 2005
Messages : 47
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 47
Points : 8
Points : 8
j'ai fais

Code :
1
2
spool d:\test.txt;
SELECT DBMS_METADATA.GET_DDL('TABLE','UISEC_HOST') FROM dual;
mais le probleme c'est que le resultat est inexploitable
quand j'execute ce que j'ai dans test.txt

j'ai des erreur

test.txt =
j'ai commenté ca
DBMS_METADATA.GET_DDL('TABLE','UISEC_HOST')
avant de l'executer

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
DBMS_METADATA.GET_DDL('TABLE','UISEC_HOST')                                     
--------------------------------------------------------------------------------
 
  CREATE TABLE "AA7020_PRD"."UISEC_HOST"                                        
   (	"NAME" VARCHAR2(32) NOT NULL ENABLE,                                       
	"LOCATION" VARCHAR2(256),                                                      
	"STATUS" NUMBER(3,0),                                                          
	"EXPIREDDATE" DATE,                                                            
	"GRANTPRIVILEGES" NUMBER(3,0),                                                 
	"FULLNAME" VARCHAR2(80),                                                       
	"REMARK" VARCHAR2(80) NOT NULL ENABLE,                                         
	"STARTINFO" VARCHAR2(80)                                                       
   ) PCTFREE 10 PCTUSED 0 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING            
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645         
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)              
  TABLESPACE "TS_AA7020"                                                        
 
 
 
 
1 row selected.
alamihamza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2007, 14h15   #6
Invité régulier
 
Inscription : février 2005
Messages : 47
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 47
Points : 8
Points : 8
j'ai rien dis
alamihamza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2007, 14h19   #7
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
bah oui, il faut formater un minimum le résultat
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2007, 14h26   #8
Invité régulier
 
Inscription : février 2005
Messages : 47
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 47
Points : 8
Points : 8
et si je veux toutes les tables d'un user, je peux le faire en une seule commande sans avoir à dupliquer

Code :
SELECT dbms_metadata.get_ddl('TABLE','NOM_TABLE') FROM dual;
pour chaque nom de table ???

merci
et désolé pour le dérangement
alamihamza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2007, 14h48   #9
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
oui mais en PL/SQL avec un curseur sur dba_tables c'est pas un problème
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2007, 17h03   #10
Invité régulier
 
Inscription : février 2005
Messages : 47
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 47
Points : 8
Points : 8
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE OR REPLACE PROCEDURE "PRC_SCRIPT_DUMP" IS
    CURSOR c_name_table IS
      SELECT TNAME
        FROM TAB;
 
        s_tabname VARCHAR(30) := '';    
        s_txt VARCHAR(4000) := '';
BEGIN
    OPEN c_name_table;
    LOOP
        FETCH c_name_table INTO s_tabname;
        EXIT WHEN c_name_table%NOTFOUND;
        SELECT dbms_metadata.get_ddl('TABLE','PLATE') FROM dual;
    END LOOP;
    CLOSE c_name_table;
    --    
EXCEPTION
    WHEN OTHERS THEN
        RAISE;
END; -- Procedure
/

j'ai cette error
PLS-00428: an INTO clause is expected in this SELECT statement

je vois pas comment résoudre ca
alamihamza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2007, 17h29   #11
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE OR REPLACE PROCEDURE "PRC_SCRIPT_DUMP" IS
    CURSOR c_name_table IS
      SELECT TNAME
        FROM TAB;
        
        s_tabname VARCHAR(30) := '';    
        s_txt VARCHAR(4000) := '';
BEGIN
    OPEN c_name_table;
    LOOP
        FETCH c_name_table INTO s_tabname;
        EXIT WHEN c_name_table%NOTFOUND;
        SELECT dbms_metadata.get_ddl('TABLE',s_tabname) FROM dual INTO S;
    END LOOP;
    CLOSE c_name_table;
    --    
EXCEPTION
    WHEN OTHERS THEN
        RAISE;
END; -- Procedure
/
ou plus simple
Code :
1
2
3
4
5
6
7
8
9
10
 
...
OPEN c_name_table;
    LOOP
        FETCH c_name_table INTO s_tabname;
        EXIT WHEN c_name_table%NOTFOUND;
        s:=dbms_metadata.get_ddl('TABLE',s_tabname);
    END LOOP;
    CLOSE c_name_table;
...
ou encore plus simple
Code :
1
2
 
SELECT dbms_metadata.get_ddl('TABLE',TNAME)  FROM TAB;
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2007, 17h45   #12
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
En version 10 il est possible de récupérer tout le DDL des schémas avec le Data Pump. On peut aussi utiliser les paramètres INCLUDE ou EXCLUDE pour filtrer par type d'objet.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2007, 11h21   #13
Invité régulier
 
Inscription : février 2005
Messages : 47
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 47
Points : 8
Points : 8
merci pour cette commande

Code :
SELECT dbms_metadata.get_ddl('TABLE',TNAME)  FROM TAB;
mais j'ai une erreur quand je la lance

Code :
1
2
3
4
5
6
7
ORA-31603: object "VVIS_TRK_PASSES_SIMPLE" of type TABLE NOT found IN schema "hamza"
ORA-06512: at "SYS.DBMS_METADATA", line 1546
ORA-06512: at "SYS.DBMS_METADATA", line 1583
ORA-06512: at "SYS.DBMS_METADATA", line 1901
ORA-06512: at "SYS.DBMS_METADATA", line 2792
ORA-06512: at "SYS.DBMS_METADATA", line 4333
ORA-06512: at line 1

VVIS_TRK_PASSES_SIMPLE est une vue, non pas une table

pourquoi j'ai ca ??


Merci
alamihamza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2007, 11h27   #14
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Tu dois selectionner
Code :
1
2
3
SELECT dbms_metadata.get_ddl('TABLE',TNAME)  FROM TAB where
TYPE='TABLE'
Sinon , comme l'a dit orafrance, tu peux utiliser la vue dba_tables
Code :
1
2
3
4
 
SELECT DBMS_METADATA.get_ddl ('TABLE', table_name)
  FROM dba_tables
 WHERE owner = 'toto'
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2007, 12h42   #15
Invité régulier
 
Inscription : février 2005
Messages : 47
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 47
Points : 8
Points : 8
cool merci

comment je peux lancer une commande sql

Code :
1
2
SELECT dbms_metadata.get_ddl('TABLE',TNAME)  FROM TAB WHERE
TABTYPE='TABLE'
à partir d'un fichier .bat

j'ai fais ca :

Code :
1
2
3
4
5
6
sqlplus user/pass@base
SET pagesize 50000
SET linesize 500
SET feedback 50000
spool d:\export.txt
SELECT dbms_metadata.get_ddl('TABLE',TNAME)  FROM TAB WHERE TABTYPE='TABLE';

mais ca bloque apres la connexion


une idée

merci
alamihamza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2007, 11h26   #16
Invité régulier
 
Inscription : février 2005
Messages : 47
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 47
Points : 8
Points : 8
pas d'idée ?
alamihamza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2007, 11h32   #17
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Tu ne peux pas mettre ton sql dans ton .bat
Fait un fichier sql (ex : tutu.sql) avec tes commandes sqlplus
Et lance le dans ton bat
Code :
1
2
 
sqlplus toto/titi@tata @tutu.sql
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2007, 12h01   #18
Invité régulier
 
Inscription : février 2005
Messages : 47
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 47
Points : 8
Points : 8
merci

mais pourquoi j'ai que les deux premiere ligne de chaque table dans mon fichier ?

Code :
1
2
3
4
 CREATE TABLE "user"."PDI_TESTPIECE"                                                                         
   (	"PLATEID" VARCHAR2(20) NOT NU                                                     
  CREATE TABLE "user"."DELAY_CODE"                                           
   (	"DELAYCODE" NUMBER(5,0) NOT NULL
merci
alamihamza est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h56.


 
 
 
 
Partenaires

Hébergement Web