informix数据库导出导入过程
1. unloadzz.sh dbname导出(为了说明方便,假定导出的数据库名字叫做mysrcdb) 2. 修改dbname/schema/dbname.sql文件中的,这里此值为:mysrcdb/schema/mysrcdb.sql。 (1) 检查用户名是否需要修改(一般在文件头位置),例如:(将netpilot用户名字改为
informix名)
grant dba to \grant dba to \修改为:
grant dba to \grant dba to \
(2) 修改所属的数据库空间名是否需要修改(可以通过关键字” in “来查找(in的前后各带
上一个空格进行查找,要不然太多了),一般是在创建索引或触发器的地方),例如:(将空间名字由原来存放在dldddbs上,改为存放在datadbs1上)
create unique index \
(dd_number,province) using btree in dldddbs ; 修改为:
create unique index \ (dd_number,province) using btree in datadbs1;
(3) 检查创建视图的字段名字中是否存在””(双引号),如果存在,则将其去掉。(可以
通过”create view”关键字来查找)。例如,(将”name”改为name,只需要去掉用来创建字段名字中的双引号,来源中(as select后的信息)的双引号可以不用去掉)
create view \ select x0.id ,x0.\
from \ union select x1.id ,x1.\
,x1.kind ,x1.pro ,x1.city ,x1.county from \ x1 union select x2.id ,x2.\
,x2.county from \ 修改为:
create view \ select x0.id ,x0.\
from \ union select x1.id ,x1.\
,x1.kind ,x1.pro ,x1.city ,x1.county from \ x1 union select x2.id ,x2.\
,x2.county from \
(4) 检查创建触发器字段名字中是否存在””(双引号),如果存在,则将其去掉。(可以
通过”create trigger”关键字来查找)。例如,(将”old”改为old,只需要去掉用来创建字段名字中的双引号,触发操作中(for each row后的信息)的双引号可以不用去掉)
create trigger \ .x_connbox referencing old as \ for each row
(
delete from \ where (connboxid
= \修改为:
create trigger \ .x_connbox referencing old as old for each row (
delete from \ where (connboxid = \
3. 检查当前用户的环境变量中,如下两个环境变量是否正确,如果不正确,请修改到profile
文件中,并使其生效: DB_LOCALE=en_US.819
CLIENT_LOCALE=en_US.819 export DB_LOCALE
export CLIENT_LOCALE
4. 使用dbaccess创建好相应的数据库(注意存放空间名和LOG规则),此步之前一定要确
保前面的第3步正确,否则,很有可能白做了,浪费青春。(为了后面的说明方便此,假定创建的数据库名字为mydstdb)
5. (如果确信第2步没错,可以跳过此步)使用dbaccess检查mysrcdb/schema/mysrcdb.sql
有没有异常,在UNIX命令提示符下,输入命令为:dbaccess mydstdb mysrcdb/schema/mysrcdb.sql
6. 使用loadzz.sh将之前导出并修改好的文件进行数据库导入到第4步创建好的数据库里。 7. 在使用unloadzz.sh和dbaccess和loadzz.sh脚本过程中,请一定要记得日志记录。在每
次执行之后,记得检查日志中是否存在“Error”字样的信息,如果存在,进一步检查,并做相应的重复工作。这一步很重要的,要不然,很有可能要浪费更多的青春了。
unloadzz.sh脚本运行说明:
1. 功能:用来在线导出一个数据库的完整结构和所有的表记录。
2. 参数:dbname,只有一个必选参数,表明将要导出的数据库名字。 3. 前提条件:
(1) 当前运行目录下,不存在与数据库同名的目录。
(2) 当环境变量:DB_LOCALE=en_US.819和CLIENT_LOCALE=en_US.819时,能够
使用dbaccess登陆并打开要导出的数据库。如果不行,请编辑unloadzz.sh中的相应值。(里边有另外一组值为:zh_cn.gb)
4. 在线帮助:运行unloadzz.sh –h或unloadzz.sh –help获取参数说明。 5. 脚本内容: $cat unloadzz.sh #!/bin/sh
if [ $# -ne 1 -o \
echo \ echo \
echo \ echo \ $0 ompdb\ exit fi
dbname=$1
if [ -d $dbname ]; then
echo ERROR!!! There is a dir named \and 'rm -rf $dbname' at first. EXIT ERROR!!! exit fi
mkdir $dbname
mkdir $dbname/record mkdir $dbname/schema mkdir $dbname/tmpdir
DBDATE=Y4MD export DBDATE
# DB_LOCALE=zh_cn.gb
# CLIENT_LOCALE=zh_cn.gb
# DB_LOCALE=EN_US.8859-1
# CLIENT_LOCALE=EN_US.8859-1
DB_LOCALE=en_US.819
CLIENT_LOCALE=en_US.819
export CLIENT_LOCALE export DB_LOCALE
dbschema -d $dbname -ss $dbname/schema/$dbname.sql dbaccess <
select tabname from systables where tabid>99 and partnum>0; !
while read tabstring tabname do
filename=$dbname/record/$tabname
echo Begin unload table: $tabname into file: $filename dbaccess <
database $dbname;
unload to $filename select * from $tabname; !
done < $dbname/tmpdir/tmpfile
rm -rf $dbname/tmpdir echo $0 DONE.
loadzz.sh脚本运行说明:
1. 功能:
(1)用来导入一个完整的数据库表结构和所有的表记录 (2)或只是导入所有的表记录。 2. 参数:
(1) 参数1:dest_DatabaseName,必选参数,表示将要导入的数据库名字。
(2) 参数2:from_DatabaseName,可选参数,表示unloadzz.sh导出的数据库名,当
dest_DatabaseName=from_DatabaseName时,此参数可以不输。
(3) 参数3:loadmode,可选参数,表示导入数据库的模式,可选值为:fulldb和onlyrec。
fulldb表示导入完整的库表结构和表记录,onlyrec表示只导入所有的表记录。缺省值为fulldb。如果只需要导入表记录时,参数1和参数2和参数3必选。 3. 前提条件:
(1)如果用来导入一个完整的数据库表结构和所有的表记录,要求该数据库已经创建好。 (2)如果只是用来导入所有的表记录,要求该数据库已经创建成功并且表结构也已经建好。 (3)只适用于使用unloadzz.sh导出的数据,使用其他工具导出的数据无效。
(4)用dbaccess创建数据库时,缺省要求环境变量DB_LOCALE=en_US.819和CLIENT_LOCALE=en_US.819,否则,请编辑loadzz.sh中的相应值。(里边有另外一组值为:zh_cn.gb)
4. 在线帮助:运行unloadzz.sh –h或unloadzz.sh –help获取参数说明 5. 脚本内容: $cat loadzz.sh #!/bin/sh
if [ $# -lt 1 -o \ echo \
echo \ echo \ 'dest_DatabaseName' is a destination database name\
echo \ 'from_DatabaseName' is a source database name, if it is the same with the destination database name, it can be omitted\
echo \ 'loadmode' means load data mode, it is only can be 'fulldb' or 'onlyrec', the other word will be treat as illegal\
echo \ the default 'loadmode' is 'fulldb', 'fulldb' means load full database, 'onlyrec' means only load all tables records\
echo \ echo \ $0 ompdb\
echo \ $0 ompdb ompdbbak\ echo \ $0 ompdb ompdb\
echo \ $0 ompdb ompdb onlyrec\ exit fi
DBDATE=Y4MD export DBDATE
# DB_LOCALE=zh_cn.gb
# CLIENT_LOCALE=zh_cn.gb
# DB_LOCALE=EN_US.8859-1
# CLIENT_LOCALE=EN_US.8859-1
DB_LOCALE=en_US.819
CLIENT_LOCALE=en_US.819
export CLIENT_LOCALE export DB_LOCALE
if [ $# -eq 1 ]; then dest_dbname=$1 from_dbname=$1 loadmode=fulldb elif [ $# -eq 2 ]; then dest_dbname=$1 from_dbname=$2 loadmode=fulldb elif [ $# -eq 3 ]; then dest_dbname=$1 from_dbname=$2 loadmode=$3 fi
if [ \
if [ ! -d $from_dbname/record -o ! -d $from_dbname/schema ]; then
echo ERROR!!! Not found dir '$from_dbname/record' or '$from_dbname/schema', please check it. EXIT ERROR!!!
exit fi
echo Begin load database schema....
dbaccess $dest_dbname $from_dbname/schema/$from_dbname.sql echo Load database schema END. elif [ \
if [ ! -d $from_dbname/record ]; then
echo ERROR!!! Not found dir '$from_dbname/record', please check it. EXIT ERROR!!! exit fi else
echo ERROR!!! 'loadmode' value error, it is only can be 'fulldb' or 'onlyrec'. EXIT ERROR!!! exit fi
alltablename=`ls $from_dbname/record`
for filename in $alltablename do
echo Begin load $tablename: $filename ... ... dbaccess <
database $dest_dbname;
load from $from_dbname/record/$filename insert into $filename; ! done
echo $0 DONE.