创建生产副本(使用DBMS_METADATA)

时间:2018-08-02 21:32:16

标签: plsql plsqldeveloper

我需要创建一个生产副本表结构(具有相似的约束,索引,分区)。目的是在后端更新/刷新该表,并最终与生产表交换;从而最大程度地减少停机时间。我想通过将原始生产表名称传递到存储过程中来动态地做到这一点。

我一直在用DBMS_METADATA.GET_DDL进行测试,如下所示:

sql_stmt :=' SELECT dbms_metadata.get_ddl( ''TABLE'',''' || t_name ||''') from dual';       
EXECUTE IMMEDIATE sql_stmt into v_sql;

我通过解析上面的v_sql字符串为新的临时表创建另一个sql字符串(DDL),并更改表,索引,主键,外键约束名称。最终将运行EXECUTE IMMIDIATE创建此临时表。

有更简单的方法吗?通过DDL解析并更改新副本表的对象名称是一个繁琐的过程。

其次,当我将DBMS_METADATA.SESSION_TRANSFORM,’PARTITION’设为TRUE时,出现以下错误。我不确定是否由于变量(VARCHAR2(32676))的大小而导致我试图将生成的查询保存在其中:

ORA-06502: PL/SQL: numeric or value error

ORA-06512: at "Schema_Name.Procedure_Name", line 159

请告知

0 个答案:

没有答案