信创改造使用人大金仓总结
1 人大金仓客户端免密连接问题
# 第一种连接方式
/opt/Kingbase/ES/V8/Server/bin/ksql -U system -h 192.168.0.199 -p 54321 -W 123456 -d test
# 基本上这些参数就够了
-U 用户名
-h ip
-p 端口
-W 密码
-d 数据库
# 第二种连接方式,这种方式也是来自于官方文档
/opt/Kingbase/ES/V8/Server/bin/ksql 'hostaddr=127.0.0.1 port=54321 user=system password=123456 dbname=test'
# 如果是变量需要用双引号括起来
/opt/Kingbase/ES/V8/Server/bin/ksql "hostaddr=${ip} port=${port} user=${user} password=${pwd} dbname=${db}"
hostaddr ip
port 端口
user 用户名
password 密码
dbname 数据库
我在项目上使用第一种方式连接报错了
但在本地测试没有问题
第一种连接方式
第二种连接方式
2 客户端密码问题
如果密码带了被系统使用的特殊字符,那么只有第二种连接方式才能成功
例如(感叹号) !
# 第一种
/opt/Kingbase/ES/V8/Server/bin/ksql -U test -h 192.168.0.199 -p 54321 -W test!123 -d test
# 第二种
/opt/Kingbase/ES/V8/Server/bin/ksql "hostaddr=127.0.0.1 port=54321 user=test password=test!123 dbname=test"
第一种连接方式报错了
第二种连接方式可以
第二种双引号的也不行
第二种双引号这样可以
3 客户端导出\copy和copy的区别
# 先登录进数据库
/opt/Kingbase/ES/V8/Server/bin/ksql "hostaddr=127.0.0.1 port=54321 user=system password=123456 dbname=samples"
# 执行导出数据文件
copy (SELECT * FROM scott.emp) to '/tmp/emp.dat' with delimiter '@|@' encoding 'UTF8' ;
# 导出数据文件
\copy (SELECT * FROM scott.emp) to '/tmp/emp.dat' with delimiter '@|@' encoding 'UTF8'
# copy 和 \copy区别
copy 将数据导出到数据库所在服务器的的路径下
\copy 将数据导出到客户端所在服务器的的路径下
4 导入数据问题
# 导入刚才的数据,这种不会导入
copy scott.emp from '/tmp/emp.dat' delimiter as '@|@' ENCODING 'UTF8'
# 这种才会导入
\copy scott.emp from '/tmp/emp.dat' delimiter as '@|@' ENCODING 'UTF8'
导入前我已经truncate掉scott.emp的数据了
由于有主键约束所有重复导入会报错
5 导入NULL数据问题
在oracle中如果该字段是null值,那么导出的数据文件里这个字段对应的值是空
但人大金仓默认的数据文件空值是\N
查询的该表结果
copy导出的数据文件关于空值的处理
将\N替换问空串
如果直接用\copy导入它不会认为这个是null值而是空字符串
\copy scott.emp from '/tmp/emp.dat' delimiter as '@|@' ENCODING 'UTF8'
通不过约束直接报错了
需要指定给定参数 null with ‘’ 这个即可
\copy scott.emp from '/tmp/emp.dat' with null '' delimiter as '@|@' ENCODING 'UTF8'
同样也可以指定导出null值为空串
\copy (SELECT * FROM scott.emp) to '/tmp/emo.dat' with delimiter '@|@' encoding 'UTF8' null ''