现在的位置: 首页 > 综合 > 正文

db2&unix使用总结(二)

2017年11月15日 ⁄ 综合 ⁄ 共 1366字 ⁄ 字号 评论关闭

1、联邦数据库操作遇到的问题:主库与从库表结构完全一样,从主库向从库导数据报错。

原因:生产系统主库字符集GBK,一个汉字占两个字符,从库utf-8,一个汉字占三个字符,所以从库字段长度应该是主库的1.5倍。

例如,主库varchar(20),从库至少应是varchar(30)。

2、对表的操作有时不需要记日志,事物太大,一旦回滚日志空间可能会爆掉,或者想节省时间。

清空表不记录日志:

ALTER TABLE DM_USER_DEV_D_200902_YMH ACTIVATE NOT LOGGEDINITIALLY WITH EMPTY TABLE

对于插入表不记日志,可用脚本运行的方式:

alter table XXX activate not logged initially locksizetable;

DML语句;

 

将以上语句放入脚本1.sql,运行方式:db2 +c –tvf1.sql

+c表示关闭自动提交功能。

Db2默认情况下一条dml语句执行完就会自动提交,若不用此参数,alter table XXX activate not logged initially locksize table 语句执行完毕后表的自动提交又打开了,相当于白运行了这条语句。

用此参数让整个脚本执行结束才提交,才打开表的自动提交功能。

3.      更改字段类型:

alter table tbname_top alter country_name SET DATA TYPEVARCHAR(50)

只能由varchar小改为varchar大

一般用先删再增加的方法:

Alter table XX drop column colname;

Alter table XX add column colname 类型;

4、关于db2load,详细用法 db2 ? load

db2 load from … insert/replace into …

中止load:语句的insert/replace 替成 terminate

使用“|”作为分隔符,无论是export还是load,DB2都会报SQL3017N的错误:

SQL3017N  A delimiter isnot valid or is used more than once

数据库的字符集是1386,属于MBCS数据,因此定界符最大是0x3F,而“|”的ASCII码为0x7C,超过了有效范围。解决办法,是做Export或者Load操作时,增加codepage选项,让DB2自动进行字符集转换:

EXPORT TO "/data/temp/card.dat" OF DEL
MODIFIED BY codepage=1208 COLDEL|
MESSAGES "/data/temp/card.log"
SELECT * FROM BI.STG_CDR_OBS_CARD

附录(摘自官方文档):

对列定界符、字符串定界符或小数点字符指定的字符无效。

对于 SBCS 或 UTF-8 数据,定界符的有效范围是0×00 – 0x7F(包括 0×00 和 0x7F 在内)。

对于 MBCS 数据,定界符的有效范围是0×00 – 0x3F(包括 0×00 和 0x3F 在内)。

对于 EBCDIC MBCS 数据,定界符的有效范围是0×00 – 0x3F(包括 0×00 和 0x3F 在内),但是,有一种例外情况就是,定界符不能为 SHIFT-OUT(0x0E)或者 SHIFT-IN(0x0F)字符。

为多个前述项目指定了同一个字符。

抱歉!评论已关闭.