【问题标题】:Oracle: New database vs new user.schema?Oracle:新数据库与新 user.schema?
【发布时间】:2014-07-19 10:47:03
【问题描述】:

背景故事:当我去年 10 月开始工作的公司赢得合同时,我把这个数据库丢在了我的腿上。开发人员几乎没有让我翻身,所以我回想起我在 2002 年维护 Oracle DB 时的记忆。我的技能非常过时,所以请温柔。

Oracle 10.2.0.0.0 Windows Server 2003

我的客户现在希望我为现有应用程序/数据库创建一个空白副本,以备将来使用。我的第一个想法是克隆现有数据库并删除所有数据。然而,我似乎记得几年前在一个项目上工作,这让我相信我可以克隆现有的用户/模式,而无需维护整个其他数据库。这个新应用程序很有可能永远不会被使用,我希望尽可能少做工作。当前数据库很小。任何建议将不胜感激。

【问题讨论】:

  • 数据库是否有足够的空间用于模式的副本,或者服务器是否有足够的可用空间可以添加?新数据库会在新服务器上运行,还是希望您共享?应用程序是否依赖于任何会使共享数据库变得困难的东西,例如对象引用中的硬编码模式名称或公共同义词?
  • 足够的空间。该数据库和相关应用程序将供将来使用。它将最终取代当前的应用程序/数据库作为默认应用程序/数据库,而当前的应用程序/数据库将成为旧版。有最少的硬编码。我只是讨厌设置全新的数据库,他们决定不再需要它。不懒惰,只是想充分利用我的时间。
  • 一个新的模式听起来像是要走的路。我不确定你在找什么;关于哪个更好的建议,或者如何实际进行克隆(无论哪种方式,作为新模式或新数据库中的相同模式),或两者兼而有之?
  • 在我的情况下你会怎么做的建议。
  • 经过更多研究后,我突然意识到,在新应用程序获得资金并起飞的罕见情况下,仅仅创建另一个用户很快就会变得很痛苦。我想在现有服务器上创建另一个数据库实例(有足够的空间)。有什么我需要注意的我忘记了吗?谢谢。

标签: oracle oracle10g schema


【解决方案1】:

我建议从 10g 开始使用 datapump(expdp/impdp)。您可以通过以下命令:

--在源服务器中导出转储:

expdp user/password directory=oracle_directory dumpfile=mydump_abc.dmp logfile=mydump_abc_export.log schemas=abc content=metadata_only

--在目标服务器中导入转储

impdp user/password directory=oracle_directory1 dumpfile=mydump_abc.dmp logfile=mydump_abc_restore.log remap_schema=abc:xyz

【讨论】:

    【解决方案2】:

    可以使用rows=n参数导出数据库:

    exp username/password@db owner=abc rows=n
    

    这将导出除数据之外的所有内容。

    然后如果你想导入它,你可以根据需要更改用户:

    imp username/password@db fromuser=abc touser=xyz 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多