这就是我的问题,我想在我们的开发数据库(Oracle 10g)上创建一个基线,并签入我们的svn以进行版本控制,然后我们将使用liquibase来帮助我们管理增量数据库更改。
我的问题是我应该如何创建Oracle 10g的基准?数据库现在由具有大量配置数据的SQL表组成,我希望我的数据库基线基于一组500+脚本,以便检入subversion,而不是检入Oracle dump。
我试过使用liquibase,但它有一些性能问题。是否有人可以向我推荐任何对我有帮助的工具1.扫描任何Oracle Schema 2.生成一组SQL脚本(包含表结构和数据)..
提前感谢
詹姆斯!
发布于 2010-06-28 17:49:38
就像这样
SELECT DBMS_METADATA.GET_DDL('TABLE',table_name) FROM USER_TABLES;是一个很好的开始。您可以使用PL/SQL和UTL_FILE对其进行调整,使其将每个表写入不同的文件。您可能还需要编写序列(尽管对它们进行版本控制是相当无意义的),可能还需要编写触发器/过程/函数/包等。
别忘了授权。
发布于 2014-04-03 07:31:03
更一般的解决方案是为选定的表列表转储DDL sql,但另外也转储其他类型的对象。这可以通过使用all_objects和all_users视图来完成。
为我工作的例子
select dbms_metadata.GET_DDL(u.object_type,u.object_name, u.owner)
from all_objects u
where 1=1
-- filter only selected object types
and u.object_type in ('TABLE', 'INDEX', 'FUNCTION', 'PROCEDURE', 'VIEW',
'TYPE', 'TRIGGER', 'SEQUENCE')
-- don't want system objects, generated, temp, invalid etc.
and u.object_name not like 'SYS_%'
and temporary!='Y'
and generated!='Y'
and status!='INVALID'
and u.object_name not like 'TMP_%'
and u.object_name not like '%$%'
-- if you want to filter only changed from some date/timestamp:
-- and u.last_ddl_time > '2014-04-02'
-- filter by owner
and owner in (
select username from dba_USERS where DEFAULT_TABLESPACE not like 'SYS%'
and username not in ('ORACLE_OCM')
and username not like '%$%'
)
;我写了一个python脚本,它基于类似的sql以增量模式刷新数据库模式:
参考文献:
function
发布于 2010-06-28 15:25:41
你有没有试过甲骨文的免费SQLDeveloper工具?它为您提供了导出DDL和数据的可能性。
https://stackoverflow.com/questions/3130574
复制相似问题