暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase 8s数据库表导入导出

kelei2006 2020-07-31
5599

GBase 8s数据库表导入导出

一、 表的导出

Exp_Data.sh 文件内容:

#!/bin/bash

dbname=gbasedb
pwd=/opt/exp_data
flog=exp_data.log
for table_name in cat table.list
do
#echo "unloading table $table_name… ">>$flog
#echo “导出表结构”>>$flog
#dbschema -d ${dbname} -t ${table_name} ${pwd}/table_scrip/${table_name}.sql

echo "date – 开始导出${table_name}表数据">>$flog
dbaccess ${dbname} - <<!
set isolation to committed read last committed;
unload to ${pwd}/tdata/${table_name}.txt select * from ${table_name};
!
echo "date – 导出${table_name}表数据完成">>$flog
done

介绍:
第一行:是指此脚本使用/bin/bash来解释执行。
第三行:gbasedb是GBase8s数据库名称
第四行:定义一个table.list,里面存放表的名称,之间用空格隔开。
第七行:dbaccess ${dbname}(数据库名)
    <<!表示执行接下来的sql命令。
set isolation to committed read last committed;设置隔离级别,降低导出时锁冲突
    unload to 输出文件名(.txt文件)默认delimiter输出分隔符为|

二、 表的导入

Imp_Data.sh文件内容:

#!/bin/bash

dbname=gbasedb
pwd=/opt/exp_data
flog=imp_data.log
for table_name in cat table.list
do
echo "date – 开始导入${table_name}表数据">>$flog
dbaccess ${dbname} - <<!
–alter table ${table_name} type (raw);

load from ${pwd}/tdata/${table_name}.txt insert into ${table_name};

–alter table ${table_name} type (standard);
!
echo "date – 导入${table_name}表数据完成">>$flog
done

介绍:
第十行:(已注释)alter table为修改表为裸表,避免加载数据库时导致长事务。
第十四行:(已注释)alter table为修改表为标准表。
注:如果是集群环境,请使用下面的导入方式进行导入。

三、 使用dbload导入

为避免导入时出现长事务,也可以使用dbload 加载数据时设置批量提交的行数。

Imp_Data_dbload文件内容:
#!/bin/bash

#数据库名称
dbname=gbasedb
#数据文件路径
pwd=/opt/exp_data
#日志名称
flog=imp_data.log
#批量导入数据行数
data_num=100000
for table_name in cat table.list
do
#取数据表中字段数量
col_num1=echo "select ncols from systables where tabid>99 and tabname=\"${table_name}\""|dbaccess ${dbname} |grep -Ev "^$|ncols"
col_num=$col_num1
echo “数据表字段数:${col_num}”>>$flog
#制作控制文件
echo “file “${pwd}/tdata/${table_name}.txt” delimiter “|” ${col_num}; insert into ${table_name}; “>load_tbl.ctl
echo "date – 开始导入${table_name}表数据”>>$flog
dbload -d ${dbname} -c load_tbl.ctl -l error.log -n ${data_num}
echo "date – 导入${table_name}表数据完成”>>$flog
done

四、 附录:

1、unload 语法:

UNLOAD TO ‘filename’ [DELIMITER ‘delimiter’] SELECT Statement;

•filename 可以为全路径或者相对路径文件名;
•DELIMITER选项,定义数据列分隔符,默认为‘|’;
•SELECT 项为SQL子句;

2、Load 语法:

LOAD FROM ‘filename’ [DELIMITER ‘delimiter’] INSERT INTO Table Name | Synonym Name| View Name [(column)];

•filename 可以为全路径或者相对路径文件名;
•DELIMITER选项,定义数据列分隔符,默认为‘|’;
•Column 选项,默认为数据库表的字段的顺序, 注意要与文件中数据列顺序保持一致;

3、dbload用法:

dbload [-d dbname] [-c cfilname] [-l logfile] [-e errnum] [-n nnum]

[-i inum] [-s] [-p] [-r | -k] [-X]

-d 数据库名
-c 命令文件名(也叫控制文件名)
-l 保存导入过程中失败的记录
-e 导入失败多少条记录后退出
-s 仅检查语法,不真正执行任务
-n 批量提交记录数定义
-p 失败情况:提交或者放弃
-i 从文件第几行开始,默认为第一行记录
-r 导入过程对表不加排他锁
-X 识别16进制数据
-k 导入过程对表加排他锁

4、dbload 命令文件

FILE filename DELIMITER ‘|’ nfields INSERT INTO tablename [(column) values (f01,f02,…)]

•Filename 定义输入文件名
•‘|’ 分隔符号,这里为“|”,可以定义为其他的符号
•nfields 定义每行记录的列数
•tablename 定义导入的目的表
•[(column) values] 为可选项 f01为文件的第一列,依次类推

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论