在Oracle 10g中创建表空间脚本

在Oracle 10g中创建表空间脚本,oracle,scripting,tablespace,Oracle,Scripting,Tablespace,我使用下面的脚本生成DDL,在数据库中创建表空间 select 'create tablespace ' || df.tablespace_name || chr(10) || ' datafile ''' || df.file_name || ''' size ' || df.bytes || decode(autoextensible,'N',null, chr(10) || ' autoextend on maxsize ' || maxbytes) || chr(10)

我使用下面的脚本生成DDL,在数据库中创建表空间

select 'create tablespace ' || df.tablespace_name || chr(10)
 || ' datafile ''' || df.file_name || ''' size ' || df.bytes 
 || decode(autoextensible,'N',null, chr(10) || ' autoextend on maxsize ' 
 || maxbytes) 
 || chr(10) 
 || 'default storage ( initial ' || initial_extent 
 || decode (next_extent, null, null, ' next ' || next_extent )
 || ' minextents ' || min_extents
 || ' maxextents ' ||  decode(max_extents,'2147483645','unlimited',max_extents) 
 || ') ;' "Script To Recreate Tablespaces"
 from dba_data_files df, dba_tablespaces t
 where df.tablespace_name=t.tablespace_name;
它工作得很好。但当一个表空间包含两个数据文件时,它也会使用createtablespace创建单独的命令。如果一个表空间包含两个数据文件,它只需创建两个createtablespace命令。请分享你的想法

干杯


Srinivasan Thirunaukkarasu.

如果您只是尝试对现有表空间进行反向工程以生成脚本,为什么不直接使用DBMS\u元数据呢

select dbms_metadata.get_ddl('TABLESPACE','yourTablespaceNameOfInterest') 
from dual;

如果需要,您可以使用简单的包装器为数据库中的每个表空间生成其中一条语句。

如果您只是尝试对现有表空间进行反向工程以生成脚本,为什么不使用DBMS\u元数据呢

select dbms_metadata.get_ddl('TABLESPACE','yourTablespaceNameOfInterest') 
from dual;
select 
     dbms_metadata.get_ddl('TABLESPACE',tablespace_name) 
from
     dba_tablespaces
;

如果需要,您可以使用一个简单的包装器为数据库中的每个表空间生成其中一条语句。

您好,我认为DBMS_元数据仅在10g中可用。我的是9i数据库。干杯,Srinivasan Thirunaukkarasu。我很确定9i安装包含DBMS_元数据-也许你没有对该软件包的权限?Srinivasan,如果你问的是9i,为什么你会在问题标题中添加10g?嗨,我想DBMS_元数据只有10g可用。我的是9i数据库。干杯,Srinivasan Thirunaukkarasu。我很确定9i安装包含DBMS_元数据-也许你没有对该软件包的权限?Srinivasan,如果你问的是9i,为什么在问题标题中加上10g?
select 
     dbms_metadata.get_ddl('TABLESPACE',tablespace_name) 
from
     dba_tablespaces
;