代码之家  ›  专栏  ›  技术社区  ›  Jimmy Chandra

附加informix.dat和.idx文件

  •  1
  • Jimmy Chandra  · 技术社区  · 16 年前

    我们试图在测试服务器上复制一个Informix数据库,但是如果内部没有Informix专业知识,我们只能猜测我们需要做什么。我自己正在快速学习这些东西,而且还没有达到高效甚至低效地操作Informix所需的专业水平。不管怎样… 我们设法将.dat和.idx文件从Live服务器的某个位置复制。安装了Linux和最新的Informix动态服务器,并使其正常运行。

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

    或者,是否有一种类似于从MS SQLServer附加数据库的方法来在新数据库中注册数据库文件?

    在我的绳端…

    4 回复  |  直到 8 年前
        1
  •  1
  •   DL Redden    16 年前

    你问了一个相当复杂的问题却没有意识到。Informix的架构是一个共享的Everything数据库引擎,这意味着该实例中的每个数据库都可以使用该实例可用的所有资源。这意味着在任何给定的dbspace、.dat或.idx文件中,可以有多个数据库存储数据。大多数DBA都知道这一点,但这是值得注意的。根据这些知识,您现在知道.dat和.idx文件不属于数据库,而是属于实例。创建dbspace和文件是为了包含数据库数据,但从技术上讲,它们属于实例。值得注意的是,数据库知道.dat和.idx文件的逻辑dbspace名称。

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

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

    选项1要求您知道dbspace的名称和大小。使用 onstat -d 在生产实例上查找。顺便说一句,onstat-d中列出的数字都在页面中,我相信Linux是一个2K页面。

    选项2只要求两台服务器上的数据文件路径相同。这意味着rootdbs在两个实例中都需要相同。可以通过执行 onstat -c | grep ROOTDBS

    有很多事情都被遗漏了,但我希望这能给你一些信息,让你能够继续完成你的任务。

        2
  •  1
  •   Jonathan Leffler    16 年前

    .dat和.idx文件与c-isam关联,或者在名为dbase.dbs(其中dbase是数据库的名称)的目录中组织时,.dat和.idx文件与Informix标准引擎关联,也称为Informix SE。SE使用C-ISAM管理其存储。SE与Informix动态服务器(IDS)有很大的不同(而且比后者简单得多)。.dat和.idx文件不可能与ID关联;这是极不可能的。

    根据可用的信息,您的生产服务器似乎正在运行SE。要获取从SE到IDS的数据,您可能需要在SE端使用db export,在Linux/IDS端使用db import。当然,这是最简单的方法。

    还有其他可能的解决方案——C-ISAM DataBlade就是这样的解决方案之一——但它们更昂贵,而且可能没有必要。还有其他可能的加载解决方案,如HPL(高性能加载程序)。

    有关Informix的详细信息,请使用已引用的各种网站( http://www.informix.com 是指向IBM网站Informix部分的链接),或使用 International Informix User Group (IIUG) 网站。有可用的邮件列表(需要您归属,但成员资格是免费的)来详细讨论Informix。

        3
  •  1
  •   Joe R.    8 年前

    这些Informix SE数据文件(.dat)及其关联的索引文件(.idx)是无用的,除非您还具有所有关联的目录文件,如systables.dat systables.idx、syscolumns、sysindexes等。

    然后,您还需要担心哪些版本的Informix SE创建了它们,因为有些版本的索引文件节点大小为2K或4K。

    最好的方法是从源数据库中获取所有的.dat和.idx文件,再加上正确的标准引擎,这些引擎安装在源数据库的同一硬件和操作系统上。

    长话短说,在源计算机上,运行“dbexport”将所有数据卸载到ASCII文件,并运行“dbschema”生成所有表模式和索引。在将所有文件卸载到ASCII平面文件之前,对所有文件运行“bcheck”也不会造成伤害。

        4
  •  0
  •   Jonathan Leffler    16 年前

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

    另外,要小心由不同的系统架构引起的问题;如果您再次将某些DBS从一个大端系统(如Solaris)移动到一个小端系统(如x86 Linux),那么移动DB的手册部分将涵盖所需的任何额外步骤。