Oracle 生成";“创建表空间”;不带dbms_元数据的脚本。get_ddl

Oracle 生成";“创建表空间”;不带dbms_元数据的脚本。get_ddl,oracle,ddl,Oracle,Ddl,我想从我们的生产数据库中为创建一个“创建表空间”脚本。我已经尝试了以下导致ORA-31603的方法: 选择dbms\u元数据。从dba\u表空间获取\u ddl('TABLESPACE',TABLESPACE\u name),其中TABLESPACE\u name!='系统“ 在谷歌搜索之后,我发现我需要选择目录\u角色来使用dbms\u元数据。获取ddl。我拥有的是访问DBA\u表空间的权限 问题:是否有一种方法可以在不使用SELECT\u CATALOG\u角色的情况下仅使用DBA\u表空间

我想从我们的生产数据库中为创建一个“创建表空间”脚本。我已经尝试了以下导致ORA-31603的方法:

选择dbms\u元数据。从dba\u表空间获取\u ddl('TABLESPACE',TABLESPACE\u name),其中TABLESPACE\u name!='系统“

在谷歌搜索之后,我发现我需要
选择目录\u角色
来使用
dbms\u元数据。获取ddl
。我拥有的是访问
DBA\u表空间的权限

问题:是否有一种方法可以在不使用
SELECT\u CATALOG\u角色的情况下仅使用
DBA\u表空间生成“create tablespace”脚本


我会自己编写脚本,但我真的不知道如何解释DBA_表空间中的
select*from
(AUOTEXTEND是开还是关,初始大小是多少等等)给出的信息

自动扩展和大小详细信息可在
DBA_数据_文件
表中找到。如果表空间不是
BIGFILE
表空间,那么它可以有多个具有不同大小和属性的文件

一个简单的创建脚本示例(在11g中),没有考虑大多数特殊功能(因此请检查表空间以了解压缩和加密等详细信息,并相应地将它们添加到脚本中。请参阅完整的
create TABLESPACE
reference),并一如既往地进行彻底测试。排除
UNDO
TEMP
表空间:

  SELECT    'CREATE '
         || DECODE (ts.bigfile, 'YES', 'BIGFILE ') --assuming smallfile is the default table space
         || 'TABLESPACE "'
         || ts.tablespace_name
         || '" DATAFILE' --assuming OMF (Oracle-Managed File names) is used
         || CHR (13)
         || CHR (10)
         || LISTAGG (
                  '  SIZE '
               || df.bytes
               || DECODE (
                     df.autoextensible,
                     'YES',    CHR (13)
                            || CHR (10)
                            || '  AUTOEXTEND ON NEXT '
                            || df.increment_by * ts.block_size
                            || ' MAXSIZE '
                            || CASE
                                  WHEN maxbytes < POWER (1024, 3) * 2
                                  THEN
                                     TO_CHAR (maxbytes)
                                  ELSE
                                        TO_CHAR (
                                           FLOOR (maxbytes / POWER (1024, 2)))
                                     || 'M'
                               END),
               ',' || CHR (13) || CHR (10))
            WITHIN GROUP (ORDER BY df.file_id)
         || CHR (13)
         || CHR (10)
         || '  '
         || ts.logging
         || ' '
         || ts.status
         || ' BLOCKSIZE '
         || ts.block_size
            ddl
    FROM    dba_tablespaces ts
         INNER JOIN
            dba_data_files df
         ON ts.tablespace_name = df.tablespace_name
   WHERE ts.contents = 'PERMANENT' --excludes UNDO and TEMP
GROUP BY ts.tablespace_name,
         ts.bigfile,
         ts.logging,
         ts.status,
         ts.block_size
ORDER BY ts.tablespace_name;
选择“创建”
||解码(ts.bigfile,'YES','bigfile')--假设smallfile是默认的表空间
||“表空间”
||ts.tablespace\u name
||““数据文件”-假设使用OMF(Oracle托管文件名)
||人权专员(13)
||CHR(10)
||利斯塔格(
“尺寸”
||字节数
||解码(
df.autoextensible,
“是”,CHR(13)
||CHR(10)
||“下一步自动扩展”
||df.increment_乘以*ts.block_大小
||“最大尺寸”
||案例
当maxbytes<功率(1024,3)*2时
然后
至字符(最大字节)
其他的
托查(
楼层(最大字节数/功率(1024,2)))
||“我是
(完),,
“,”| | CHR(13)| | CHR(10))
组内(按df.file\u id排序)
||人权专员(13)
||CHR(10)
|| '  '
||ts.测井
|| ' '
||ts状态
||“块大小”
||块大小
ddl
来自dba_表空间ts
内连接
dba_数据_文件df
在ts.tablespace\u name=df.tablespace\u name上
其中ts.contents='PERMANENT'--不包括撤消和临时
按ts.tablespace\u名称分组,
ts.bigfile,
ts.logging,
ts.status,
块大小
按ts.tablespace\u name排序;

如果表空间中有多个数据文件,请考虑将其更改为<代码> BigFiels表空间。

< P>这是有用的,如果您知道您的数据文件路径,并给出与它们的表空间相同的名称。 如果需要,它还会生成一些表空间

SELECT    'CREATE '
         || DECODE (ts.bigfile, 'YES', 'BIGFILE ') --assuming smallfile is the default table space
         || 'TABLESPACE "'
         || ts.tablespace_name
         || '" DATAFILE ''C:\Oracle\oradata\yourDATABASEname\'|| ts.tablespace_name || '.DBF'''
         || CHR (13)
         || CHR (10)
         || LISTAGG (
                   '  SIZE '
                || df.bytes
                || DECODE (
                       df.autoextensible,
                       'YES',    CHR (13)
                              || CHR (10)
                              || '  AUTOEXTEND ON NEXT '
                              || df.increment_by * ts.block_size
                              || ' MAXSIZE '
                              || CASE
                                     WHEN maxbytes < POWER (1024, 3) * 2
                                     THEN
                                         TO_CHAR (maxbytes)
                                     ELSE
                                            TO_CHAR (
                                                FLOOR (
                                                    maxbytes / POWER (1024, 2)))
                                         || 'M'
                                 END),
                ',' || CHR (13) || CHR (10))
            WITHIN GROUP (ORDER BY df.file_id)
         || CHR (13)
         || CHR (10)
         || '  '
         || ts.logging
         || ' '
         || ts.status
         || ' BLOCKSIZE '
         || ts.block_size
             ddl
    FROM dba_tablespaces ts
         INNER JOIN dba_data_files df
             ON ts.tablespace_name = df.tablespace_name
   WHERE     ts.contents = 'PERMANENT'                --excludes UNDO and TEMP
         AND ts.tablespace_name IN ('YOUR_TABLESPACE LIST')
GROUP BY ts.tablespace_name,
         ts.bigfile,
         ts.logging,
         ts.status,
         ts.block_size
ORDER BY ts.tablespace_name;
选择“创建”
||解码(ts.bigfile,'YES','bigfile')--假设smallfile是默认的表空间
||“表空间”
||ts.tablespace\u name
||““数据文件”C:\Oracle\oradata\yourDATABASEname\'|| ts.tablespace|u name | |'.DBF”
||人权专员(13)
||CHR(10)
||利斯塔格(
“尺寸”
||字节数
||解码(
df.autoextensible,
“是”,CHR(13)
||CHR(10)
||“下一步自动扩展”
||df.increment_乘以*ts.block_大小
||“最大尺寸”
||案例
当maxbytes<功率(1024,3)*2时
然后
至字符(最大字节)
其他的
托查(
地板(
最大字节/功率(1024,2)))
||“我是
(完),,
“,”| | CHR(13)| | CHR(10))
组内(按df.file\u id排序)
||人权专员(13)
||CHR(10)
|| '  '
||ts.测井
|| ' '
||ts状态
||“块大小”
||块大小
ddl
来自dba_表空间ts
内部连接dba_数据_文件df
在ts.tablespace\u name=df.tablespace\u name上
其中ts.contents='PERMANENT'--不包括撤消和临时
和ts.tablespace_name IN('您的_表空间列表')
按ts.tablespace\u名称分组,
ts.bigfile,
ts.logging,
ts.status,
块大小
按ts.tablespace\u name排序;