每种数据都有自己独特的自增列的声明方式,如 Oracle 的 Sequence, SQL Server 的 Identity, MySQL 的 auto_increment, PostgreSQL 的 Sequence 或 Serial。和 PostgreSQL 类似,DB2 也提供两种自增列的声明方式,它们是 Sequence 和 Identity。而本文主要着墨于 DB2 的 Identity 字段,并讲述它与 Sequence 的某种联系,以及它对数据表的导入的影响。DB2 的 Sequence
在 DB2 中声明一个 Sequence 与表的 Identity 字段的参数差不多,我们可以看作 Identity 是一个内联的 Sequence。先来看如何创建一个序列 Read More- 使用 Python 就难免要应对到不同数据库连接的问题,Python 目前也没有 Java 使用 JDBC 瘦客户端驱动那么方便。本人在用 Python 连接 SQL Server 时经常还是会有些问题,此文只着力于如何用 Python 连接 DB2 和 Oracle 数据库。
从本文中我们将会学到- Python 围绕着 ibm_db 来操作 DB2
- 以 Python DB-API 2.0 规范来操作 DB2
- cx_Oracle Python 库 + Oracle Instant Client 操作 Oracle
- 用 Oracle 的 SID 还是 Service Name 来连接数据库
- Python 中借助 JayDeBeApi 使用 JDBC 驱动来操作数据库(以 Oracle 为例)
- 从 JayDeBeApi 中我们了解到 JPype 有助于我们在 Python 中调用 Java
Python 操作 DB2
连接 DB2 数据库要简单的多,只要安装 ibm-db 库 Read More - 在使用 DB2 的 Community 版本的 Docker 镜像
ibmcom/db2进行测试,启动 Docker 容器的命令是$ docker run -name db2server --privileged=true -p 50000:50000 \
当使用多线程以及 JDBC 的 Batch Update 时,出现 "The transaction log for the database is full" 问题,一旦出现这个问题时,用数据库客户端连接后即使执行一条简单的 insert/update 语句也会报同样的错误。于是只能减少线程数和 Batch Update 时的记录来勉强过关,但性能上与其他数据库就有很大的差别了。 Read More
-e LICENSE=accept \
-e DB2INSTANCE=db2user \
-e DB2INST1_PASSWORD=password123 \
-e DBNAME=test \
ibmcom/db2 - 客户端连接到另一台机器上的 DB2 数据库,用 DB2 的控制中心连接没问题,但是用 Quest Central for DB2 来连接,输入用户名和密码,确定,出现提示窗口:
[IBM][CLI Driver] SQL0332N 没有从源代码页 "86" 至目标代码页 "819" 的转换。原因代码是 "DB2INST1"。 SQLSTATE=01539
无法登录,原因是本机的代码页(codepage) 与数据库的代码页不相符且无符完成又向转换。
解决办法是在命令行下执行 db2set DB2CODEPAGE=819
dos> db2set DB2CODEPAGE=819
然后,再次用 Quest Central for DB2 来连接数据库就 OK 啦
参考:1. SQL0332N Reason Code 1