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é
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é
c'est à dire ? le CREATE DATABASE ou la création des shemas ou encore la création des tablespaces ?
Le script qui permettrait de re-construire l'ensemble de la base : toutes les tables, les contraintes les clefs primaires étrangeres etc.
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
Tu peut lire ce thread : http://www.developpez.net/forums/viewtopic.php?t=361451
Questionnaires : Testez vos connaissances
Mes articles :
Les Fichiers Redo / SCN : System Change Number / Fichier de Contrôle : Administration
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 :
Suis-je clair cette fois ci ?
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 );
J'espere
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
rien que ça... Voila ce que propose Oracle
Pour le CREATE DATABASE :
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 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
Pour le reste un export/import convient parfaitement
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;
Sinon : Database Scripts dans Metalink
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
C'est écrit dans le sujet normalement : Oracle9i.
pour avoir la ddl de tes tables :Envoyé par orafrance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 dbms_metadata.get_ddl
Voila un exemple d'utilisation avec la table EMP du chéma scottEnvoyé par Jibees
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),
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.
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'
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.
Bine surEnvoyé par nuke_y
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
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
Questionnaires : Testez vos connaissances
Mes articles :
Les Fichiers Redo / SCN : System Change Number / Fichier de Contrôle : Administration
l'option ROWS=N de l'export fait également des miraclesEnvoyé par nuke_y
Pour les index :
et ainsi de suite ...
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....
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager