【问题标题】:Any tools to export the whole Oracle DB as SQL scripts将整个 Oracle DB 导出为 SQL 脚本的任何工具
【发布时间】:2011-03-09 00:25:35
【问题描述】:

这是我的问题,我想在我们的开发数据库(Oracle 10g)上创建一个基线,并检查我们的 svn 进行版本控制,之后我们将使用 liquibase 来帮助我们管理增量数据库更改。

我的问题是我应该如何创建 Oracle 10g 的基线?数据库现在包含 500 多个表,包含大量配置数据,我希望我的数据库基线基于一组 SQL 脚本来检查 subversion,而不是检查 Oracle 转储..

我尝试使用 liquibase generateChangeLog,但它有一些性能问题.. 任何人都可以向我推荐任何可以帮助我的工具 1.扫描任何Oracle Schema 2. 生成一组 SQL 脚本(带有表结构和数据)..

提前致谢

詹姆斯!

【问题讨论】:

    标签: oracle export liquibase baseline


    【解决方案1】:

    类似

    SELECT DBMS_METADATA.GET_DDL('TABLE',table_name) FROM USER_TABLES;
    

    是一个好的开始。您可以使用 PL/SQL 和 UTL_FILE 对其进行调整,以使其将每个表写入不同的文件。您可能也需要执行序列(尽管对它们进行版本控制毫无意义),并且可能需要触发器/过程/函数/包等。

    不要忘记赠款。

    【讨论】:

    • 您可以使用 PL/SQL 和此查询将 DDL 导出到客户端的文件吗?
    • DB服务器不能写入客户端文件(除非你去麻烦共享和挂载驱动,有效地使客户端成为文件服务器)。
    【解决方案2】:

    更通用的解决方案是为选定的表列表转储 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以增量模式刷新db schema:

    • 使用 last_ddl_time>=max(last_ddl_time from last refresh) 运行 sql
    • 最后将 last_ddl_time 存储在文件系统中的某个位置以供下次刷新

    参考资料:

    1. oracle dbms_metadata.GET_DDL 函数
    2. 甲骨文all_objects查看

    【讨论】:

      【解决方案3】:

      您是否尝试过 Oracle 的免费 SQLDeveloper 工具?它使您可以导出 DDL 和数据。

      【讨论】:

        【解决方案4】:

        使用 CONTENT=METADATA_ONLY 选项的 EXPDP,然后使用 SQLFILE=your_script.sql 的 IMPDP?

        尼古拉斯。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-16
          • 1970-01-01
          • 1970-01-01
          • 2012-11-24
          • 2020-03-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多