2010-01-20 68 views
1

我正在使用以下腳本來生成DDL以在數據庫中創建表空間。在Oracle 10g中創建表空間腳本

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; 

它的效果很好。但是,當一個表空間包含兩個數據文件時,它也會創建與創建表空間的單獨命令。簡單地說,如果表空間包含兩個數據文件,則創建兩個創建表空間命令。請分享你的想法。

乾杯,

斯里尼瓦桑Thirunavukkarasu。

回答

5

如果您只是想對現有表空間進行反向工程以生成腳本,爲什麼不直接使用DBMS_METADATA?

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

如果您希望全部使用簡單包裝,則可以爲數據庫中的每個表空間生成以下其中一個語句。

+0

嗨, 我覺得DBMS_METADATA僅可在10g中。我的是9i數據庫。 乾杯, Srinivasan Thirunavukkarasu。 – 2010-01-20 15:18:52

+0

我很確定9i的安裝包含DBMS_METADATA - 也許你對這個包沒有權限? – dpbradley 2010-01-20 15:33:51

+0

是的。謝啦。 – 2010-01-20 16:05:42

-1
select 
    dbms_metadata.get_ddl('TABLESPACE',tablespace_name) 
from 
    dba_tablespaces 
; 
0
SET LONG 1000000 

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