【问题标题】:Attaching Informix .dat and .idx files附加 Informix .dat 和 .idx 文件
【发布时间】:2008-09-22 07:16:40
【问题描述】:

我们正试图在测试服务器上复制我们的一个 informix 数据库,但如果没有内部的 Informix 专业知识,我们只能猜测我们需要做什么。我自己在动态学习这些东西,远不及有效甚至低效操作 Informix 所需的专业知识水平。无论如何... 我们设法从某处的实时服务器复制了 .dat 和 .idx 文件。在其上安装 Linux 和最新的 Informix Dynamic Server 并使其启动并运行。

现在我们应该如何处理来自实时服务器的 .dat 和 idx 文件?我们是否将它复制到某个地方,它会自动识别它?

或者是否有一种等效的方法,例如您可以从 MS SQLServer 附加数据库以在新数据库中注册数据库文件?

在我的绳索末端...

【问题讨论】:

    标签: import export informix


    【解决方案1】:

    您在不知不觉中问了一个相当复杂的问题。 Informix 被构建为一个共享一切的数据库引擎,这意味着该实例可用的所有资源对该实例中的每个数据库都可用。这意味着在您的情况下,多个数据库可以将数据存储在任何给定的 dbspace、.dat 或 .idx 文件中。大多数 DBA 都知道不这样做,但需要注意这一点。有了这些知识,您现在知道 .dat 和 .idx 文件不属于数据库,而是属于实例。创建 dbspace 和文件是为了包含您的数据库数据,但它们在技术上属于该实例。值得注意的是,.dat 和 .idx 文件通过逻辑 dbspace 名称为数据库所知。

    有了这些背景信息,并假设生产服务器和开发服务器运行相同的操作系统并且您的硬件相对相同,而不是 PARISC、Itanium 或 x86/x64 的组合,我将提出几个选项给你。

    1. 在新实例中创建您需要的 dbspace 并使用 onunload 和 onload 将数据库从生产复制到开发。
    2. 使用 ontape 或 onbar 备份整个生产实例和 在您的开发实例上恢复它。

    选项 1 要求您知道 dbspace 的名称以及它们的大小。在生产实例上使用onstat -d 来找出这个问题。顺便说一句,onstat -d 中列出的数字是以页为单位的,我相信 Linux 是 2K 页。

    选项 2 只要求两台服务器上的数据文件路径相同。这意味着 ROOTDBS 在两种情况下都需要相同。可以通过执行onstat -c | grep ROOTDBS来找到

    有很多内容被遗漏了,但我希望这能为您提供推进任务所需的信息。

    【讨论】:

      【解决方案2】:

      .dat 和 .idx 文件与 C-ISAM 相关联,或者,当组织在名为 dbase.dbs(其中 dbase 是数据库名称)的目录中时,.dat 和 .idx 文件与 Informix 相关联标准引擎,又名 Informix SE。 SE 使用 C-ISAM 来管理其存储。 SE 与 Informix Dynamic Server (IDS) 有很大不同(并且比它简单得多)。 .dat 和 .idx 文件与 IDS 关联并非不可能;这是极不可能的。

      根据可用信息,听起来您的生产服务器正在运行 SE。要将数据从 SE 获取到 IDS,您可能希望在 SE 端使用 DB-Export,在 Linux/IDS 端使用 DB-Import。当然,这是最简单的方法。

      还有其他可能的解决方案 - C-ISAM 数据刀片就是其中之一 - 但它们更昂贵并且可能没有保证。还有其他可能的加载解决方案,例如 HPL (High-Performance Loader)。

      有关 Informix 的更多信息,请使用已引用的各种网站(http://www.informix.com 是 IBM 网站的 Informix 部分的链接),或使用International Informix User Group (IIUG) 网站。有可用的邮件列表(要求您加入,但会员资格是免费的)用于详细讨论 Informix。

      【讨论】:

        【解决方案3】:

        那些 Informix-SE 数据文件 (.DAT) 及其关联的索引文件 (.IDX) 是无用的,除非您还拥有所有关联的目录文件,例如 SYSTABLES.DAT SYSTABLES.IDX、SYSCOLUMNS、SYSINDEXES 等。

        那么您还必须担心创建它们的是哪个版本的 Informix-SE,因为有些索引文件节点大小为 2K 或 4K。

        最好的方法是从源数据库中获取所有 .DAT 和 .IDX 文件,以及正确的标准引擎,安装在相同的硬件和操作系统上。

        长话短说,在源机器上,运行“dbexport”将所有数据卸载到 ascii 文件,并运行“dbschema”生成所有表模式和索引。在将所有文件卸载到 ascii 平面文件之前对所有文件运行“bcheck”也没有什么坏处。

        【讨论】:

        • 嘿,我正在做一个需要从 .DAT 文件迁移数据的项目,我承认这类东西超出了我的专业范围。对私人咨询感兴趣吗?
        • @BakerStreetSystems,我给你发了一封电子邮件,让我们讨论你的需求。
        【解决方案4】:

        我没有任何特定于 Informix 的建议,但对于这种情况,您通常可以通过查找如何移动数据库(常见的管理任务,通常在手册中有详细描述)并跳过删除旧数据库的步骤。

        另外,要注意不同系统架构引起的问题;如果您将某些 DB 从大端系统(如 Solaris)移动到小端系统(如 x86 Linux),它们会严重失败。同样,移动数据库的手册部分将涵盖所需的任何额外步骤。

        【讨论】:

        • 到目前为止,我们知道 dbexport 和 dbimport 之类的工具可以从当前数据库中提取数据,但我们也在尝试采用这种替代方法,看看是否可以启动测试数据库并且跑得更快
        • 使用 Informix,如果您不使用 SQL FLOAT 或 SMALLFLOAT 类型(分别为 C double 和 float),则可以复制数据文件。这些类型以特定于机器的格式存储;所有其他类型(包括 DECIMAL)都是架构中立的。
        猜你喜欢
        • 2016-03-18
        • 1970-01-01
        • 2014-01-05
        • 1970-01-01
        • 2019-02-06
        • 1970-01-01
        • 1970-01-01
        • 2014-01-09
        • 1970-01-01
        相关资源
        最近更新 更多