我需要提取所有的功能,过程,包,视图和表的代码(脚本),这样当我移动到生产,我可以运行该脚本来创建所有对象。
在开发我没有采取所有数据库对象的脚本备份。
什么是提取代码或脚本的最佳方式? 任何建议或帮助是非常可观的。
谢谢
我需要提取所有的功能,过程,包,视图和表的代码(脚本),这样当我移动到生产,我可以运行该脚本来创建所有对象。
在开发我没有采取所有数据库对象的脚本备份。
什么是提取代码或脚本的最佳方式? 任何建议或帮助是非常可观的。
谢谢
你使用版本控制系统,不是吗? 请不要。
如果做不到这一点,你可以使用系统功能dbms_metadata.get_ddl
,将返回用于创建对象的DDL的CLOB。 这将需要为每个单独的对象做所以它可能是值得通过循环user_objects
。
另外,您可以通过右键单击经过在PL / SQL开发人员定义的对象上,并使用view
选项,然后在右下角可以查看SQL用于创建对象。
还有一个出口“工具” ,它不具有如何使用它作为SQL Developer的变种一样好解释。
当然,正确的答案是获得一个版本控制系统,并使用它。
我不知道有关数据库本身,但SQL开发人员将做到这一点。 我敢肯定,蟾蜍和其他类似工具的意志为好。
很抱歉,但你有一个非最佳的开发实践,不扩展到超过一个开发商。
切勿使用SQL GUI客户的能力,直接在数据库中修改数据库对象。 (除非你刻意要创造人为的问题。)
相反,所有的SQL和PL / SQL DDL和DML应位于保存到一个文本文件的版本控制系统 (VCS)(例如颠覆 , GIT中 , 水银 )。 用你喜欢的编辑器来编辑文件。
通过执行保存在VCS与命令行工具(在Oracle中是这样的文本文件,修改数据库中sqlplus
)。 这适用于所有数据库实例:开发,质量保证,生产。
对于大型开发项目考虑使用模式迁移工具(如迁飞 , 圆屋 )。
多年来,我已经能够通过执行一个简单的规则,以消除吨的研发和生产的问题:
如果代码是不是在VCS它不存在。
(这是惊人的,还是在2015年不使用VCS许多开发团队有。)
就我而言,所有的自定义对象开始“XX”。 你可以使用或修改我的脚本:
DECLARE
CURSOR c_tables IS
SELECT replace(object_type, ' ', '_') type,
object_name name,
owner schema,
object_type||'#'||object_name||'.sql' files
FROM all_objects
WHERE UPPER(object_name) LIKE 'XX%'
AND object_type NOT IN ('DIRECTORY');
ddl_text CLOB;
BEGIN
FOR rec_tables IN c_tables LOOP
dbms_output.put_line('OBJECT_TYPE: '||rec_tables.type||', OBJECT_NAME: '||rec_tables.name||', SCHEMA: '||rec_tables.schema||' ->'||rec_tables.files);
SELECT dbms_metadata.get_ddl(rec_tables.type, rec_tables.name, rec_tables.schema)
INTO ddl_text
FROM DUAL;
dbms_xslprocessor.clob2file(ddl_text, 'UTL_CUSTOM_DDL', rec_tables.files, nls_charset_id('WE8MSWIN1252'));
END LOOP;
END;
问候