1

以下のスクリプトを使用して 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;

それはうまくいきます。ただし、テーブルスペースに 2 つのデータファイルが含まれている場合は、create tablespace で別のコマンドも作成されます。表領域に 2 つのデータファイルが含まれている場合、単純に 2 つの create tablespace コマンドが作成されます。あなたの考えを共有してください。

乾杯、

スリニヴァサン・ティルナヴッカラス。

4

3 に答える 3

5

既存のテーブルスペースをリバース エンジニアリングしてスクリプトを生成しようとしているだけなら、なぜ DBMS_METADATA を使用しないのでしょうか?

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

すべてが必要な場合は、単純なラッパーを使用して、データベース内の各テーブルスペースに対してこれらのステートメントのいずれかを生成できます。

于 2010-01-20T15:07:51.383 に答える
0
SET LONG 1000000

select dbms_metadata.get_ddl('TABLESPACE','tablespace_name')||';' from dual;
于 2016-12-14T14:32:03.870 に答える
-1
select 
     dbms_metadata.get_ddl('TABLESPACE',tablespace_name) 
from
     dba_tablespaces
;
于 2013-10-28T15:20:08.833 に答える