oracle - 如何使用 get_ddl 获取分区脚本?
问题描述
我使用 Oracle 12c 作为数据库并使用以下方法获取表或其他对象的 ddl:-
dbms_metadata.get_ddl('TABLE','TABLE_NAME','SCHEMA_NAME');
与我正在使用的约束和参考约束相同:-
dbms_metadata.get_dependent_ddl('CONSTRAINT','TABLE_NAME','SCHEMA_NAME');
dbms_metadata.get_dependent_ddl('REF_CONSTRAINT','TABLE_NAME','SCHEMA_NAME');
现在我的问题是我想从表中提取分区脚本,我尝试了以下操作:-
select dbms_metadata.get_dependent_ddl('PARTITIONING','TABLE_NAME','SCHEMA_NAME') from dual;
但它给出了以下错误: -
ORA-31600: invalid input value PARTITIONING for parameter OBJECT_TYPE in function GET_DEPENDENT_DDL
ORA-06512: at "SYS.DBMS_METADATA", line 6069
ORA-06512: at "SYS.DBMS_METADATA", line 8761
ORA-06512: at line 1
31600. 00000 - "invalid input value %s for parameter %s in function %s"
*Cause: A NULL or invalid value was supplied for the parameter.
*Action: Correct the input value and try the call again.
我也试过:-
select dbms_metadata.get_ddl('PARTITION','PARTITION_NAME','SECONDARYUSER') from dual;
但它给出了同样的错误。
请建议我如何在 oracle 中使用 get_ddl 方法获取分区 ddl。
解决方案
分区是一个表选项,而不是一个单独的对象。默认情况下,GET_DDL
对于一个表应该产生分区信息。如果没有,您可能有一个会话转换正在禁用它。这两个语句肯定会生成一个包含所有分区选项的 DDL 脚本:
begin
dbms_metadata.set_transform_param(dbms_metadata.session_transform,'PARTITIONING',true);
end;
/
select dbms_metadata.get_ddl('TABLE','TABLE_NAME','SCHEMA_NAME') from dual;
如果您正在寻找一种自动生成将表从非分区表转换为分区表的脚本的方法,那么恐怕您不走运。尽管 12c 能够使用 转换表ALTER TABLE
,但该软件包DBMS_METADATA_DIFF
显然尚未更新以理解这些命令。
例如,如果您创建带有或不带有分区的同一个表,则此脚本不起作用:
select dbms_metadata_diff.compare_alter(object_type => 'TABLE', name1 => 'TABLE2', name2 => 'TABLE1') diffs from dual;
DIFFS
--------------------------------------------------------------
-- ORA-39266: Cannot alter unpartitioned table to partitioned.
ALTER TABLE "JHELLER"."TABLE2" RENAME TO "TABLE1"
幸运的是,在某些情况下,ALTER
语法似乎很简单。在我的简单示例中,我可以使用如下命令将表更改为分区:
alter table unpartitioned_table modify
[partitioning clause]
online;
推荐阅读
- node.js - Browsersync 无法打开浏览器 Heroku
- python - 使用 corr() 方法处理 sklearn 束对象虹膜
- java - 需要帮助阅读文本文件
- apache - 使用未激活 SSL 的 htaccess 强制 http-NOT https
- python - 如何通过 Python 函数运行多个键
- php - 将双精度转换为整数时 PHP 不会产生正确的输出
- python - 如何在 Python 3.x 中使用“locals()”绑定与 exec?
- c - gcc -fstack-protector 不抛出错误
- angular - 使用 NPM 将纯 JS 库添加到 Ionic / Angular
- python - 如何使用显式值评估带有索引变量的 SymPy 表达式?