IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

[Oracle9i] Recuperation du script de contruction de la base


Sujet :

Oracle

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut [Oracle9i] Recuperation du script de contruction de la base
    Bonjour a tous,

    Je voulais savoir comment on pouvais récuperer (en SQL) le script de construction de la base de données.
    Je vous remercie,
    jibé

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    c'est à dire ? le CREATE DATABASE ou la création des shemas ou encore la création des tablespaces ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    Le script qui permettrait de re-construire l'ensemble de la base : toutes les tables, les contraintes les clefs primaires étrangeres etc.

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Bonjour jibees ,
    merci de lire les régles avant de poster et de les appliquer , afin d'apporter aux contibuteurs toutes les clés pour proposer une solution pertinente

    Merci

  5. #5
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    Le pire c'est que les regles je les connais !!!! Mais je ne suis toujours pas clair, c'est surement du au fait que je suis carrément newbies !! . Bon alors je veux un script SQL/Oracle qui me retourne cette ligne si dans ma base je n'ai que cette table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE USER.TABLE1 ( CLA_PK_COD CHAR(2) NOT NULL, CLA_LIB CHAR(20), CLA_CA_MINI NUMBER(13,2), CLA_CA_MAXI NUMBER(13,2), CLA_POIDS NUMBER(3), CLA_STA CHAR(1) ) NOLOGGING NOCACHE PARALLEL ( DEGREE 2 INSTANCES 1 );
    Suis-je clair cette fois ci ?
    J'espere

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    Je viens de voir le lien ca résout mon probleme : TOAD permet de récuperer le script de création de chaqu'une des tables. J'esperait pouvoir le faire direct en SQL ...
    Merci à tous,
    et hop Résolu, bientot la prochaine question

  8. #8
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    rien que ça... Voila ce que propose Oracle

    Pour le CREATE DATABASE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    spool crdb.sql
    set pages 1000
    set head off
    set termout off
    set feedback off
    set newpage none
    set serveroutput on      
    select 'CREATE DATABASE '||name text from v$database;
    -- select 'CONTROLFILE REUSE' from dual;  -- optional
    select 'LOGFILE' from dual;
    declare
        print_var varchar2(200);
        cursor c1 is select member from gv$logfile where inst_id = 1
        order by group#;
        logfile gv$logfile.member%TYPE;
        cursor c2 is select bytes from gv$log where inst_id = 1
        order by group#;
        bytes number;
        lsize varchar2(30);    
    begin
        open c1;
        open c2;
        for record in (
        select group#, count(*) members from gv$logfile where inst_id = 1
        group by group#) loop
             dbms_output.put_line(print_var);
             fetch c2 into bytes;
             if mod(bytes,1024) = 0 then
                if mod(bytes,1024*1024) = 0 then
                   lsize := to_char(bytes/(1024*1024))||'M';
                else
                   lsize := to_char(bytes/1024)||'K';
                end if;
             else
                lsize := to_char(bytes);
             end if;
             lsize := lsize||',';
             if record.members > 1 then
               fetch c1 into logfile;
               print_var := 'GROUP '||record.group#||' (';
               dbms_output.put_line(print_var);
               print_var := ''''||logfile||''''||',';
               for i in 2..record.members loop  
                   fetch c1 into logfile;
                   dbms_output.put_line(print_var);
                   print_var := ''''||logfile||''''||',';
               end loop;
               print_var := rtrim(print_var,',');
               dbms_output.put_line(print_var);
               print_var := ') SIZE '||lsize;
             else
               fetch c1 into logfile;
               print_var := 'GROUP '||record.group#||' '''||
                            logfile||''''||' SIZE '||lsize;
             end if;
        end loop;
        close c1;
        close c2;
        print_var := rtrim(print_var,',');
        dbms_output.put_line(print_var);
    end;
    /
    select 'MAXLOGFILES '||RECORDS_TOTAL from v$controlfile_record_section
            where type = 'REDO LOG';
    select 'MAXLOGMEMBERS '||dimlm from sys.x$kccdi;
    select 'MAXDATAFILES '||RECORDS_TOTAL from v$controlfile_record_section
            where type = 'DATAFILE';
    select 'MAXINSTANCES '||RECORDS_TOTAL from v$controlfile_record_section
            where type = 'DATABASE';
    select 'MAXLOGHISTORY '||RECORDS_TOTAL from v$controlfile_record_section
            where type = 'LOG HISTORY'; 
    select log_mode from v$database;
    select 'CHARACTER SET '||value from v$nls_parameters
         where parameter = 'NLS_CHARACTERSET';
    select 'NATIONAL CHARACTER SET '||value from v$nls_parameters
         where parameter = 'NLS_NCHAR_CHARACTERSET';          
    select 'DATAFILE' from dual;
    declare
       cursor c1 is select * from dba_data_files
       where tablespace_name = 'SYSTEM'  order by file_id;
       datafile dba_data_files%ROWTYPE;
       print_datafile dba_data_files.file_name%TYPE;
    begin
       open c1;
       fetch c1 into datafile;
       -- there is always 1 datafile
       print_datafile := ''''||datafile.file_name||
       ''' SIZE '||ceil(datafile.bytes/(1024*1024))||' M,';
       loop
            fetch c1 into datafile;
            if c1%NOTFOUND then
               -- strip the comma and print the last datafile
               print_datafile := rtrim(print_datafile,',');
               dbms_output.put_line(print_datafile);
               exit;
            else
                -- print the previous datafile and prepare the next
                dbms_output.put_line(print_datafile);
                print_datafile := ''''||datafile.file_name||
                ''' SIZE '||ceil(datafile.bytes/(1024*1024))||' M,';
            end if;
       end loop;     
    end;
    /             
    select ';' from dual;
    spool off
    La création des tablespaces (j'ai ajouté le TEMP) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    set verify off; 
    set termout off; 
    set feedback off; 
    set pagesize 0; 
     
    set termout on; 
    select 'Creating tablespace build script...' from dual; 
    set termout off; 
     
    create table ts_temp (lineno number, ts_name varchar2(30), 
                        text varchar2(800)); 
     
    DECLARE 
       CURSOR ts_cursor IS select   tablespace_name, 
                                 initial_extent, 
                                    next_extent, 
                                    min_extents, 
           max_extents, 
                                    pct_increase, 
                      status 
                            from    sys.dba_tablespaces 
                         where tablespace_name != 'SYSTEM' 
                            and status != 'INVALID' 
                            order by tablespace_name; 
       CURSOR df_cursor (c_ts VARCHAR2) IS select   file_name, 
                        bytes 
                                           from     sys.dba_data_files 
                                           where    tablespace_name = c_ts 
                                             and    tablespace_name != 'SYSTEM' 
    UNION
    select   file_name, 
                        bytes 
                                           from     sys.dba_temp_files 
                                           where    tablespace_name = c_ts 
                                           order by file_name; 
       lv_tablespace_name   sys.dba_tablespaces.tablespace_name%TYPE; 
       lv_initial_extent    sys.dba_tablespaces.initial_extent%TYPE; 
       lv_next_extent       sys.dba_tablespaces.next_extent%TYPE; 
       lv_min_extents       sys.dba_tablespaces.min_extents%TYPE; 
       lv_max_extents       sys.dba_tablespaces.max_extents%TYPE; 
       lv_pct_increase      sys.dba_tablespaces.pct_increase%TYPE; 
       lv_status            sys.dba_tablespaces.status%TYPE; 
       lv_file_name         sys.dba_data_files.file_name%TYPE; 
       lv_bytes             sys.dba_data_files.bytes%TYPE; 
       lv_first_rec         BOOLEAN; 
       lv_string            VARCHAR2(800); 
       lv_lineno            number := 0; 
     
       procedure write_out(p_line INTEGER, p_name VARCHAR2,  
                 p_string VARCHAR2) is 
       begin 
         insert into ts_temp (lineno, ts_name, text) values  
                (p_line, p_name, p_string); 
       end; 
     
    BEGIN 
       OPEN ts_cursor; 
       LOOP 
          FETCH ts_cursor INTO lv_tablespace_name, 
                               lv_initial_extent, 
                               lv_next_extent, 
         lv_min_extents, 
                               lv_max_extents, 
               lv_pct_increase, 
                               lv_status; 
          EXIT WHEN ts_cursor%NOTFOUND; 
          lv_lineno := 1; 
          lv_string := ('CREATE TABLESPACE '||lower(lv_tablespace_name)); 
          lv_first_rec := TRUE; 
          write_out(lv_lineno, lv_tablespace_name, lv_string); 
          OPEN df_cursor(lv_tablespace_name); 
          LOOP 
             FETCH df_cursor INTO lv_file_name, 
            lv_bytes; 
             EXIT WHEN df_cursor%NOTFOUND; 
             if (lv_first_rec) then 
                lv_first_rec := FALSE; 
                lv_string := 'DATAFILE '; 
             else 
                lv_string := lv_string || ','; 
             end if; 
         lv_string:=lv_string||''''||lv_file_name||''''|| 
                        ' SIZE '||to_char(lv_bytes) || ' REUSE'; 
          END LOOP; 
          CLOSE df_cursor; 
       lv_lineno := lv_lineno + 1; 
             write_out(lv_lineno, lv_tablespace_name, lv_string); 
             lv_lineno := lv_lineno + 1; 
             lv_string := (' DEFAULT STORAGE (INITIAL ' || 
                          to_char(lv_initial_extent) || 
                       ' NEXT ' || lv_next_extent); 
             write_out(lv_lineno, lv_tablespace_name, lv_string); 
             lv_lineno := lv_lineno + 1; 
             lv_string := (' MINEXTENTS ' || 
                          lv_min_extents || 
              ' MAXEXTENTS ' || lv_max_extents); 
             write_out(lv_lineno, lv_tablespace_name, lv_string); 
             lv_lineno := lv_lineno + 1; 
             lv_string := (' PCTINCREASE ' || 
                          lv_pct_increase || ')'); 
      write_out(lv_lineno, lv_tablespace_name, lv_string); 
             lv_string := ('   '||lv_status); 
             write_out(lv_lineno, lv_tablespace_name, lv_string); 
             lv_lineno := lv_lineno + 1; 
             lv_string:='/'; 
             write_out(lv_lineno, lv_tablespace_name, lv_string); 
             lv_lineno := lv_lineno + 1; 
             lv_string:='                                                  '; 
       write_out(lv_lineno, lv_tablespace_name, lv_string); 
       END LOOP; 
       CLOSE ts_cursor; 
    END; 
    / 
     
    spool create_tablespaces.sql 
    set heading off 
    set recsep off 
    col text format a80 word_wrap 
     
     
    select   text 
    from     ts_temp 
    order by ts_name, lineno; 
     
    spool off; 
     
    drop table ts_temp;
    Pour le reste un export/import convient parfaitement

    Sinon : Database Scripts dans Metalink

  9. #9
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Alors dans ce càas la il nous faut encore une précision :version du SGBDR
    - Si inférieur à 8i un exp/imp suffit ( Voir thread de bouyao )
    - Si au moins 9i il existe un package pour faire cela

  10. #10
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Citation Envoyé par jaouad
    - Si au moins 9i il existe un package pour faire cela
    mais encore ?

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    C'est écrit dans le sujet normalement : Oracle9i.

  12. #12
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Citation Envoyé par orafrance
    Citation Envoyé par jaouad
    - Si au moins 9i il existe un package pour faire cela
    mais encore ?
    pour avoir la ddl de tes tables :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dbms_metadata.get_ddl

  13. #13
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Citation Envoyé par Jibees
    C'est écrit dans le sujet normalement : Oracle9i.
    Voila un exemple d'utilisation avec la table EMP du chéma scott

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SQL> select dbms_metadata.get_ddl('TABLE','EMP') from dual; 
     
    DBMS_METADATA.GET_DDL('TABLE','EMP')
    --------------------------------------------------------------------------------
     
      CREATE TABLE "SCOTT"."EMP"
       (    "EMPNO" NUMBER(4,0),
            "ENAME" VARCHAR2(10),

  14. #14
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Hein ???? Et moi qui me suis pogné toutes les tables une par une dans TOAD ... Enfin bon au moins j'avais les contraintes avec !!
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  15. #15
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    c'est vrai que c'est génial ce package

    autre exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SQL> select dbms_metadata.get_ddl('TABLESPACE','TEMP') from dual;
     
    DBMS_METADATA.GET_DDL('TABLESPACE','TEMP')
    --------------------------------------------------------------------------
     
      CREATE TEMPORARY TABLESPACE "TEMP" TEMPFILE
      '/oracle/oradata/temp01.dbf'

  16. #16
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Et pour les contraintes il y a quelquechose ?
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  17. #17
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Citation Envoyé par nuke_y
    Et pour les contraintes il y a quelquechose ?
    Bine sur
    la primary key toutjours sur la même table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SQL> select dbms_metadata.get_ddl('CONSTRAINT','PK_EMP') from dual; 
     
    DBMS_METADATA.GET_DDL('CONSTRAINT','PK_EMP')
    -------------------------------------------------------------------------------
     
      ALTER TABLE "SCOTT"."EMP" ADD CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
      USI

  18. #18
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033
    Par défaut
    Dans l'url que j'ai donné on'a les tables ,indexes, constraintes, ...
    c.a.d il y'a presque tout (exceptions les datalink, les sequences à verifier)
    en utilisant exp/imp

  19. #19
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Citation Envoyé par nuke_y
    Hein ???? Et moi qui me suis pogné toutes les tables une par une dans TOAD ... Enfin bon au moins j'avais les contraintes avec !!
    l'option ROWS=N de l'export fait également des miracles

  20. #20
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Pour les index :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SQL> select dbms_metadata.get_ddl('INDEX','PK_DEPT') from dual; 
     
    DBMS_METADATA.GET_DDL('INDEX','PK_DEPT')
    --------------------------------------------------------------------------------
     
      CREATE UNIQUE INDEX "SCOTT"."PK_DEPT" ON "SCOTT"."DEPT" ("DEPTNO")
      PCTFREE....
    et ainsi de suite ...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/05/2009, 17h09
  2. Réponses: 4
    Dernier message: 15/05/2006, 15h54
  3. recuperer le chemin du repertoire de la base de donnee
    Par Chromatic dans le forum Access
    Réponses: 5
    Dernier message: 24/02/2006, 14h04
  4. script des données de la base
    Par tiboleo dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 25/11/2005, 09h06
  5. [IBExpert]Recuperer le script de création de la BD ?
    Par Sitting Bull dans le forum Outils
    Réponses: 2
    Dernier message: 01/10/2004, 11h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo