Informix-4gl数据库的dbexport导出与dbimport还原
最近在工作中遇到朋友要帮忙还原IMFORMIX-4GL数据库, 完全是第一次接触UNIX以及IMFORMIX,与同事一起研究了三天,遇到了不少问题,多得网友的帮助,终于实现还原成功。在此进记录。
从一开始就开始百度如何还原IMFORMIX数据库。各个文章都写出了如何如何进行,没有图示,让一个门外汉看得头都大了。表示很痛苦。所以今天我这三天学到的就将详细列出还原IMFORMIX数据库图示,给我自己或是和我一样第一次接触IMFORMIX数据库的朋友一个记录。
一、IMFORMIX数据库使用dbexport 备份。
进入到UNIX系统环境下,使用IMFORMIX用户登录。
输入i4gl,看看能不能入到4gl程序员环境中,这个其实就是在确认已经配置好IMFORMIX数据库环境。 成功进入环境的界面如下:
看到这里的图的话,恭喜你,你已经配置好4gl的环境了。然后选择上图中的Exit。进入UNIX环境中,以$开头的。接下来你就可以输入dbexport语句了。英文好的也可以看这个官网的一个解释。
https://www.ibm.com/support/knowledgecenter/en/SSGU8G_11.70.0/com.ibm.mig.doc/ids_mig_120.htm
输入语句:
dbexport 后面加了一个 -o 后面接的是一个目录地址,这个目录地址就是你要备份出来数据库文件存放的地址。 stores_demo就是你要备份数据库名。
备份成功后得到一个stores_demo.exp(数据库名.exp)的文件夹。里面有以后缀名为.url以及.sql的文件。
使用ls /word/exports 命令就可以查看得到。
一、IMFORMIX数据库使用dbimport 还原。
1、还原也很简单就是一个语句。如果你所在UNIX的目录在store_demo.exp的/word/exports中。那你可以直接写dbimport store_demo 命令。就可以执行了。
这样执行的过程中问题出现。
还原失败了。提示错误no free disk space
这是因为直接写dbimport store_demo来还原数据库,它默认将数据库还原在了rootdbs空间中。而rootdbs的空间不够了。
使用onstat -d命令就可以查看空间的大小了。输入命令得到如下结果:
可以看到 rootdbs free 的空间为0了。从上图可以看出我系统里面有5个dbspaces 分别是
dbspace 下面又有6个chunk
这里面可以看到datadbs 里面有两个chunks分别是datadbs 和datadbs1
因为我这个数据库是从零几年就开始用了。2个datadbs的chunk是不够的。所以要增加chunk
增加chunk的之前用 命令 ls -l 空间所在的文件夹 我的datadbs 从上面那个图就可以看出是在/usr/informix/dbs中。所以我输入的命令是:
ls -l /usr/informix/dbs
、
如果看到上图的第一列中 -rw-rw-r-- 是以 - 开头的。说明是file system,那么你就跟我做下面这些步骤:
1、cd /usr/informix/dbs //进入到datadbs所在的文件夹下面
2、toudh datadbs2//创建一个名叫datadbs2的chunk
3、chmod 777 datadbs2chmod 777 datadbs2 //datadbs2 的权限改为777
4、onspaces -a datadbs -p /usr/informix/dbs/datadbs2 -o 0 -s 2000000 //-o 后面为偏移量 -s后面加的是chunk的大小 、、、、 、、
执行完 4 步之后成功增加chunk ,onspace的详细用法见 onspace 用法
现在就可以进行dbimport 了。
进入到stores_db.exp的文件夹所在的目录
dbimport stores_db -c -d datadbs // dbimport 数据库名 -c -d dbspaces空间名
,这里不加-l的增加缓冲日志的数据库原因是我加了-l还原就出错了。无法还原成功。
这里dbimport会执行可能很长一段时间(看数据库的大小)执行完成之后我们再用ontape命令增加缓冲的事务日志。
执行ontape 命令前请你打开 informix/etc/onconfig.fgb 文件,查看TAPEDEV 是不是dev/null,如果不是请改成dev/null,
千万不要写成dev/console。我一开始就是百度看到文章写说要改成dev/console,后悔死我了。执行了一晚上ontape -s -B
最后回来上班看到还执行出错,数据库整个被锁住了。说多都是泪啊,下面是ontape命令
ontape -s -B store_db
执行完这个ontape。你的数据库真的就还原成功了。