Generate a CREATE DATABASE command from an existing database
Saturday, September 29, 2012
SCRIPT: Generate a CREATE DATABASE command from an existing database. [ID 211905.1]
-- gencrdb.sql -- -- Generate a CREATE DATABASE command from an existing database. -- (C) 2002 Oracle Corporation, written by Harm ten Napel -- This script will work from 8i onwards. -- -- DISCLAIMER -- -- This script is provided for educational purposes only. It is NOT supported -- by Oracle World Wide Technical Support. The script has been tested and -- appears to work as intended. However, you should always test any script -- before relying on it. -- 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 -- end script
at Saturday, September 29, 2012
Labels: SCRIPT: Generate a CREATE DATABASE command from an existing database. [ID 211905.1]
2 comments:
Subscribe to:
Post Comments (Atom)
Powered by Blogger.
thank you so much i will test and let you know my results
great! works perfect! =)