db2&unix使用总结(二)
2012-03-02 10:09
357 查看
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)字符。
为多个前述项目指定了同一个字符。
原因:生产系统主库字符集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)字符。
为多个前述项目指定了同一个字符。
相关文章推荐
- db2&unix使用总结(一)
- db2&unix使用总结(三)
- db2&unix使用总结(四)
- db2&unix使用总结(五)
- db2&unix使用总结(六)
- db2&unix使用总结(七)
- db2&unix使用总结(八)
- Unix/Linux中进程控制相关命令总结——&, jobs, fg, bg等命令的使用方法
- DB2 数据库循环使用方法总结[转]
- Unix/Linux中进程控制相关命令总结&, jobs, fg, bg等命令的使用方法
- "30年---我与赛灵思FPGA的故事”—— ZYNQ-7000使用总结(9) ——PS和PL的通信
- Unix&Linux大学教程: 12 使用shell:变量和选项
- struts2 标签<s:if/>使用总结
- 26>ASI使用总结
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第13章节--使用业务连接服务创建业务线解决方式 总结
- (unix domain socket)使用udp发送>=128K的消息会报ENOBUFS的错误
- java基础总结七(自定义类型&方法&集合混合使用)
- [开发总结]WebView使用中遇到的一些问题&解决
- C++中cin.get(),cin.getline(),cin>>,gets(),cin.clear()使用总结
- Git & Github使用总结