最近在做数据库历史数据清理,由于表内数据量较大,业务要求表内数据保留1年即可。所以设计清理方案为:先将一年内数据导出至数据文件中。将表清空。将数据文件内数据load进表。
load语句如下:
db2 "load from filename of del modified by coldel, delprioritychar codepage=1386 insert into tabname nonrecoverable".
但是load时一直出现如下问题:
SQL2036N The path for the file, named pipe, or device "/home/rpt_usr/bak/temp/tbl_test_20180927.del" is not valid.
字面意思就是路径不对,但是本人检查过文件路径是正确的,而且同样一个文件,用import命令是可以将数据导入的,说明数据文件是没有问题的,因此百思不得其解。无奈求助于百度,但是始终找不到答案。看到有文章写的解决方案是需要加client参数,但是我的脚本是直接运行在数据库服务器上的,所以不需要client参数。因此,还得从文件权限上边找问题。
查看export生成的文件的权限:-rw-r-----
文件所有者的权限为可读可写,文件所属组的权限为可读。
这样的权限对于import来说足够了。但是load却不行,接着对文件的权限进行更改,经过测试发现,chmod 744可以满足load的权限要求,低于744的均不满足。即-rwxr--r--文件所有者必须可读可写可执行,文件所属组和其他用户需有可读权限。
否则会报错显示:
SQL2061N An attempt to access media "/home/rpt_usr/bak/temp/tbl_test_20180927.del" is denied.
总结下来就是文件的权限问题,load时不仅仅需要读的权限。
工作中遇到问题,解决后写下记录,问题解决了,但是具体的更深层的原理还需要继续研究。