| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> c.d.o.server -> recreate database script not work
Hi
I got a script which is supposed to regenerate database systax.
However I have tested several time, the output file 'init.sql' is
empty. I tried to debug, and found out there is no date in DBASE_TEMP
table. This script 'gen_dbse_9_re-create_a_database.sql' is associated
with another script 'gen_dbse_9_re-create_a_tablespace.sql' to
regenerating create tablespace script.
Could you take a look and see what is wrong?
REM set echo off term on verify off feedback off pagesize 0 trimspool on
select 'Creating database build script...' from DUAL;
accept oracle_sid prompt "Enter the SID of the database: "
accept init_loc prompt "Enter the location for the init.ora file: "
set term off
drop table DBASE_TEMP;
create table DBASE_TEMP (
Lineno NUMBER,
Text VARCHAR2(100));
declare
cursor PARAM_CURSOR is
select Name,
Value,
Description
from V$PARAMETER
where Isdefault = 'FALSE'
order by Name;
cursor LOGFILE_CURSOR (LF_Group_Num IN VARCHAR2) is
select A.Group#,
A.Bytes,
A.Members,
B.Member
from V$LOG A,
V$LOGFILE B
where A.Group# = B.Group#
and A.Group# = LF_Group_Num
order by A.Group#;
cursor DFILE_CURSOR is
select A.Maxextend,
A.Inc,
B.File_Name,
B.Bytes
from SYS.FILEXT$ A,
DBA_DATA_FILES B
where B.File_ID = A.File#(+)
and Tablespace_Name = 'SYSTEM'
order by File_ID;
cursor TSPACE_CURSOR is
select Text
from TSPACE_TEMP
order by Tspace_Name, Lineno;
cursor TEMP_SPACE_CURSOR is
select Username,
Default_Tablespace,
Temporary_Tablespace
from DBA_USERS
where Username in ('SYS','SYSTEM');
cursor ROLLBACK_SEGS_CURSOR is
select A.Segment_Name,
A.Owner,
A.Tablespace_Name,
A.Initial_Extent,
A.Next_Extent,
A.Min_Extents,
A.Max_Extents,
A.Pct_Increase,
A.Status,
B.Optsize
from DBA_ROLLBACK_SEGS A,
V$ROLLSTAT B
where A.Segment_Id = B.USN(+)
and A.Segment_id > 0
and A.Segment_Name != 'RB_TEMP'
order by A.Owner, A.Segment_Name;
Lv_PC_Name V$PARAMETER.Name%TYPE;
Lv_PC_Value V$PARAMETER.Value%TYPE;
Lv_PC_Description V$PARAMETER.Description%TYPE;
Lv_LF_Group_Num V$LOG.Group#%TYPE;
Lv_LF_Bytes V$LOG.Bytes%TYPE;
Lv_LF_Members V$LOG.Members%TYPE;
Lv_LF_Member V$LOGFILE.Member%TYPE;
Lv_DF_MaxExtend SYS.FILEXT$.MaxExtend%TYPE;
Lv_DF_Inc SYS.FILEXT$.Inc%TYPE;
Lv_DF_File_Name DBA_DATA_FILES.File_Name%TYPE;
Lv_DF_Bytes DBA_DATA_FILES.Bytes%TYPE;
Lv_TS_Text TSPACE_TEMP.Text%TYPE;
Lv_TE_Temp_Tspace DBA_USERS.Temporary_Tablespace%TYPE;
Lv_TE_Deflt_Tspace DBA_USERS.Default_Tablespace%TYPE;
Lv_TE_Username DBA_USERS.Username%TYPE;
Lv_RB_Segment_Name DBA_ROLLBACK_SEGS.Segment_Name%TYPE;
Lv_RB_Owner DBA_ROLLBACK_SEGS.Owner%TYPE;
Lv_RB_Tablespace_Name DBA_ROLLBACK_SEGS.Tablespace_Name%TYPE;
Lv_RB_Initial_Extent DBA_ROLLBACK_SEGS.Initial_Extent%TYPE;
Lv_RB_Next_Extent DBA_ROLLBACK_SEGS.Next_Extent%TYPE;
Lv_RB_Min_Extents DBA_ROLLBACK_SEGS.Min_Extents%TYPE;
Lv_RB_Max_Extents DBA_ROLLBACK_SEGS.Max_Extents%TYPE;
Lv_RB_Pct_Increase DBA_ROLLBACK_SEGS.Pct_Increase%TYPE;
Lv_RB_Status DBA_ROLLBACK_SEGS.Status%TYPE;
Lv_RB_Optsize V$ROLLSTAT.Optsize%TYPE;
Lv_FileHandle UTL_FILE.FILE_TYPE;
Lv_String VARCHAR2(2000);
Lv_Lineno NUMBER := 0;
Lv_First_Time BOOLEAN;
Lv_Size NUMBER;
Lv_No_Of_Groups INTEGER;
Lv_InitOra_Location VARCHAR2(40);
Lv_InitOra_Name VARCHAR2(30);
Lv_Database_Name VARCHAR2(8);
Lv_MaxLogFiles INTEGER;
Lv_MaxLogMembers INTEGER;
Lv_LogMode VARCHAR2(15);
Lv_CharacterSet VARCHAR2(64);
Lv_Nchar_CharacterSet VARCHAR2(64);
Lv_Dbtimezone VARCHAR2(64);
Lv_Default_Temp_Tablespace VARCHAR2(64);
Lv_Group INTEGER; Lv_Members INTEGER; Lv_Block_Size NUMBER; Lv_DF_Count NUMBER := 0; Lv_Platform_Slash VARCHAR2(1);
procedure WRITE_OUT(P_Line INTEGER, P_String VARCHAR2) is begin
insert into dbase_TEMP (Lineno, Text)
values (P_Line,P_String);
begin
Lv_Lineno := 1;
Lv_InitOra_Location := '&&init_loc';
Lv_InitOra_Name := 'init' ||
'&&oracle_sid'||
'.ora';
Lv_FileHandle :=
UTL_FILE.FOPEN(Lv_InitOra_Location,Lv_InitOra_Name,'W');
open PARAM_CURSOR;
loop
fetch PARAM_CURSOR
into Lv_PC_Name,
Lv_PC_Value,
Lv_PC_Description;
exit when PARAM_CURSOR%NOTFOUND;
if (UPPER(Lv_PC_Name) = 'DB_NAME')
then
Lv_Database_Name := Lv_PC_Value;
end if;
Lv_String := '# ' || Lv_PC_Description;
UTL_FILE.PUTF(Lv_FileHandle,'%s\n',Lv_String);
Lv_String := RPAD(Lv_PC_Name,45) || ' = ' || Lv_PC_Value;
UTL_FILE.PUTF(Lv_FileHandle,'%s\n\n',Lv_String);
end loop;
close PARAM_CURSOR;
UTL_FILE.FCLOSE(Lv_FileHandle);
Lv_Lineno := 1;
Lv_String := 'CREATE DATABASE ' || Lv_Database_Name; WRITE_OUT(Lv_Lineno,Lv_String);
Lv_Lineno := Lv_Lineno + 1;
Lv_String := LPAD(' ',5) || 'CONTROLFILE REUSE';
WRITE_OUT(Lv_Lineno,Lv_String);
select MAX(Group#)
into Lv_No_Of_Groups
from V$LOG;
Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno,LPAD(' ',5) ||'LOGFILE');
Lv_First_Time := TRUE;
for Lv_Index IN 1 .. Lv_No_Of_Groups loop
open LOGFILE_CURSOR (Lv_Index);
loop
fetch LOGFILE_CURSOR
into Lv_LF_Group_Num,
Lv_LF_Bytes,
Lv_LF_Members,
Lv_LF_Member;
exit when LOGFILE_CURSOR%NOTFOUND;
Lv_Size := Lv_LF_Bytes / 1024;
if (Lv_First_Time = TRUE)
then
Lv_String := ' ';
Lv_First_Time := FALSE;
else
Lv_String := ' ,';
end if;
if (Lv_LF_Members = 1)
then
Lv_String := Lv_String ||
'GROUP ' ||
LPAD(Lv_LF_Group_Num,3) ||
' ''' ||
Lv_LF_Member ||
'''' ||
' SIZE ' ||
Lv_Size ||
'K REUSE';
Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno,Lv_String);
else
if (LOGFILE_CURSOR%ROWCOUNT = 1)
then
Lv_String := Lv_String ||
'GROUP ' ||
LPAD(Lv_LF_Group_Num,3) ||
' (''' ||
Lv_LF_Member ||
'''' ;
Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno,Lv_String);
else
Lv_String := LPAD(' ',15) ||
',''' ||
Lv_LF_Member ||
'''';
if (LOGFILE_CURSOR%ROWCOUNT = Lv_LF_Members)
then
Lv_String := Lv_String ||
') SIZE ' ||
Lv_Size ||
'K REUSE';
end if;
Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno, Lv_String);
end if;
end if;
end loop;
CLOSE LOGFILE_CURSOR;
select Value
into Lv_Block_Size
from SYS.V_$PARAMETER
open DFILE_CURSOR;
loop
fetch DFILE_CURSOR into Lv_DF_MaxExtend,
Lv_DF_Inc,
Lv_DF_File_Name,
Lv_DF_Bytes;
exit when DFILE_CURSOR%NOTFOUND;
Lv_DF_Count := Lv_DF_Count + 1;
if (Lv_DF_Count > 1)
then
Lv_String := ' ,''';
else
Lv_String := 'DATAFILE ''';
end if;
Lv_String := LPAD(' ',5) ||
Lv_String ||
Lv_DF_File_Name ||
''' SIZE ' ||
(Lv_DF_Bytes)/1024 ||
'K REUSE' ;
WRITE_OUT(Lv_Lineno, Lv_String);
Lv_Lineno := Lv_Lineno + 1;
if (Lv_DF_MaxExtend IS NOT NULL)
then
Lv_String := LPAD(' ',12)
||
'AUTOEXTEND ON NEXT '
||
(Lv_DF_Inc * Lv_Block_Size) / 1024
||
'K MAXSIZE '
||
(Lv_DF_MaxExtend * Lv_Block_Size) / 1024
||
'K';
WRITE_OUT(Lv_Lineno, Lv_String);
Lv_Lineno := Lv_Lineno + 1;
end if;
select MAX(Group#),
MAX(Members)
into Lv_Group,
Lv_Members
from SYS.V_$LOG;
Lv_MaxLogFiles := Lv_Group * Lv_Members * 4; Lv_MaxLogMembers := Lv_Members * 2;
Lv_Lineno := Lv_Lineno + 1;
Lv_String := LPAD(' ',5) || 'MAXLOGFILES ' || Lv_MaxLogFiles;
WRITE_OUT(Lv_Lineno,Lv_String);
Lv_Lineno := Lv_Lineno + 1;
Lv_String := LPAD(' ',5) || 'MAXLOGMEMBERS ' || Lv_MaxLogMembers;
WRITE_OUT(Lv_Lineno,Lv_String);
Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno,LPAD(' ',5) || 'MAXLOGHISTORY 160');
Lv_Lineno := Lv_Lineno +1;
WRITE_OUT(Lv_Lineno,LPAD(' ',5) || 'MAXDATAFILES 255');
Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno,LPAD(' ',5) || 'MAXINSTANCES 1');
select log_Mode
into Lv_LogMode
from SYS.V_$DATABASE;
Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno,LPAD(' ',5) || Lv_LogMode);
select Value
into Lv_Nchar_CharacterSet
from V$NLS_PARAMETERS
Lv_Lineno := Lv_Lineno + 1;
Lv_String := LPAD(' ',5) || 'NATIONAL CHARACTER SET ' ||
Lv_Nchar_CharacterSet;
WRITE_OUT(Lv_Lineno,Lv_String);
select Property_Value
into Lv_Dbtimezone
from DATABASE_PROPERTIES
Lv_Lineno := Lv_Lineno + 1;
Lv_String := LPAD(' ',5) || 'SET TIME_ZONE = ''' || Lv_Dbtimezone
|| '''';
WRITE_OUT(Lv_Lineno,Lv_String);
select Value
into Lv_CharacterSet
from V$NLS_PARAMETERS
Lv_Lineno := Lv_Lineno + 1;
Lv_String := LPAD(' ',5) ||
'CHARACTER SET ' ||
Lv_CharacterSet ||
';';
Lv_Lineno := Lv_Lineno + 1; WRITE_OUT(Lv_Lineno, ' '); Lv_Lineno := Lv_Lineno + 1; WRITE_OUT(Lv_Lineno, 'Rem -----------------------------------');Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno, 'Rem -----------------------------------');Lv_Lineno := Lv_Lineno + 1;
Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno, 'Create Rollback Segment rb_temp;');
Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno, 'Alter Rollback Segment rb_temp Online;');
Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno, 'commit;');
if (INSTR(Lv_DF_File_Name,'/',1) > 0) then
Lv_Platform_Slash := '/';
else
Lv_Platform_Slash := '\';
end if;
Lv_Lineno := Lv_Lineno + 1; WRITE_OUT(Lv_Lineno, ' '); Lv_Lineno := Lv_Lineno + 1; WRITE_OUT(Lv_Lineno, 'Rem -----------------------------------');Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno, 'Rem -----------------------------------');Lv_Lineno := Lv_Lineno + 1;
Lv_String := '@$ORACLE_HOME' ||
Lv_Platform_Slash ||
'rdbms' ||
Lv_Platform_Slash ||
'admin' ||
Lv_Platform_Slash ||
'catalog.sql;';
WRITE_OUT(Lv_Lineno, 'Rem -----------------------------------');Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno, 'Rem -----------------------------------');Lv_Lineno := Lv_Lineno + 1;
Lv_String := '@$ORACLE_HOME' ||
Lv_Platform_Slash ||
'rdbms' ||
Lv_Platform_Slash ||
'admin' ||
Lv_Platform_Slash ||
'catproc.sql;';
Lv_Lineno := Lv_Lineno + 1; WRITE_OUT(Lv_Lineno, ' '); Lv_Lineno := Lv_Lineno + 1; WRITE_OUT(Lv_Lineno, 'Rem -----------------------------------');Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno, 'Rem -----------------------------------');Lv_Lineno := Lv_Lineno + 1;
open TSPACE_CURSOR;
loop
fetch TSPACE_CURSOR
into Lv_TS_Text;
exit when TSPACE_CURSOR%NOTFOUND;
Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno,Lv_TS_Text);
select Property_Value
into Lv_Default_Temp_Tablespace
from DATABASE_PROPERTIES
Lv_Lineno := Lv_Lineno + 1;
Lv_String := ' ALTER DATABASE DEFAULT TEMPORARY TABLESPACE ' ||
Lv_Default_Temp_Tablespace || ' ;';
WRITE_OUT(Lv_Lineno,Lv_String);
Lv_Lineno := Lv_Lineno + 1; WRITE_OUT(Lv_Lineno, ' '); Lv_Lineno := Lv_Lineno + 1; WRITE_OUT(Lv_Lineno, 'Rem -----------------------------------');Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno, 'Rem -----------------------------------');Lv_Lineno := Lv_Lineno + 1;
open TEMP_SPACE_CURSOR;
loop
fetch TEMP_SPACE_CURSOR
into Lv_TE_Username,
Lv_TE_Deflt_Tspace,
Lv_TE_Temp_Tspace;
exit when TEMP_SPACE_CURSOR%NOTFOUND;
Lv_String := 'Alter user ' ||
Lv_TE_Username ||
' default tablespace ' ||
Lv_TE_Deflt_Tspace ||
' temporary tablespace ' ||
Lv_TE_Temp_Tspace ||
';';
Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno,Lv_String);
Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno, ' ');
Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno, 'Rem -----------------------------------');Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno, 'Rem -----------------------------------');Lv_Lineno := Lv_Lineno + 1;
open ROLLBACK_SEGS_CURSOR;
loop
fetch ROLLBACK_SEGS_CURSOR
into Lv_RB_Segment_Name,
Lv_RB_Owner,
Lv_RB_Tablespace_Name,
Lv_RB_Initial_Extent,
Lv_RB_Next_Extent,
Lv_RB_Min_Extents,
Lv_RB_Max_Extents,
Lv_RB_Pct_Increase,
Lv_RB_Status,
Lv_RB_Optsize;
exit when ROLLBACK_SEGS_CURSOR%NOTFOUND;
if (UPPER(Lv_RB_Owner) = 'PUBLIC')
then
Lv_String := 'CREATE PUBLIC ROLLBACK SEGMENT ';
else
Lv_String := 'CREATE ROLLBACK SEGMENT ';
end if;
Lv_String := Lv_String ||
Lv_RB_Segment_Name;
Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno,Lv_String);
Lv_String := ' ' ||
'TABLESPACE ' ||
Lv_RB_Tablespace_Name ;
Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno,Lv_String);
Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno,' STORAGE (');
Lv_String := ' ' ||
'Initial ' ||
(Lv_RB_Initial_Extent) / 1024 ||
' K' ;
Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno,Lv_String);
Lv_String := ' ' ||
'Next ' ||
(Lv_RB_Next_Extent) / 1024 ||
' K' ;
Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno,Lv_String);
Lv_String := ' ' ||
'Minextents ' ||
Lv_RB_Min_Extents;
Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno,Lv_String);
Lv_String := ' ' ||
'Maxextents ' ||
Lv_RB_Max_Extents;
Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno,Lv_String);
if ( Lv_RB_Optsize is NOT NULL)
then
Lv_String := ' ' ||
'Optimal ' ||
(Lv_RB_Optsize);
Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno,Lv_String);
end if;
Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno,' );');
Lv_String := 'Alter Rollback Segment ' ||
Lv_RB_Segment_Name ||
' ' ||
Lv_RB_STATUS ||
';';
Lv_Lineno := Lv_Lineno + 1;
WRITE_OUT(Lv_Lineno,Lv_String);
end loop;
close ROLLBACK_SEGS_CURSOR;
exception
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.PUT_LINE ('Reached end of file');
WHEN UTL_FILE.INTERNAL_ERROR
THEN
DBMS_OUTPUT.PUT_LINE ('Internal File Error');
WHEN UTL_FILE.INVALID_FILEHANDLE
THEN
DBMS_OUTPUT.PUT_LINE ('Invalid File Handle');
WHEN UTL_FILE.INVALID_MODE
THEN
DBMS_OUTPUT.PUT_LINE ('Invalid file mode specified');
WHEN UTL_FILE.INVALID_OPERATION
THEN
DBMS_OUTPUT.PUT_LINE ('Invalid file operation specified');
WHEN UTL_FILE.INVALID_PATH
THEN
DBMS_OUTPUT.PUT_LINE ('Invalid file path specified');
WHEN UTL_FILE.WRITE_ERROR
THEN
DBMS_OUTPUT.PUT_LINE ('A Write error occurred');
WHEN UTL_FILE.READ_ERROR
THEN
DBMS_OUTPUT.PUT_LINE ('A file read error occurred');
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE ('An unknown exception occurred');
end;
/
set trimspool on
spool init.sql
select text
from DBASE_TEMP
order by Lineno
/
spool off
Received on Fri Mar 30 2007 - 15:33:41 CDT
![]() |
![]() |