1.问题描述:
After I using db2 export&import utility:db2move to transfer data from v8.2 to v9.5,I found that some rows of table:PT_ATTACH are rejected(see import log:IMPORT.out):
* IMPORT: table "STAGEUSR"."PT_ATTACH"
WARNING 3107. Check message file tab273.msg!
*** SQL Warning! SQLCODE is 3107
*** SQL3107W 消息文件中至少有一条警告消息。
-Rows read: 52594
-Inserted: 45272
-Rejected: 7322
-Committed: 52594
and I check the detail log file:tab273.msg,found that all errors is the same:
SQL3109N 实用程序正在开始从文件 "tab273.ixf" 装入数据。
SQL3148W 未将输入文件中的行插入至表中。返回了 SQLCODE "-452"。
SQL0452N 不能访问主变量 "12" 引用的文件。原因码:"5"。 SQLSTATE=428A1
SQL3185W 处理输入文件的第 "10547" 行中的数据时,发生前一个错误。
SQL3148W 未将输入文件中的行插入至表中。返回了 SQLCODE "-452"。
SQL0452N 不能访问主变量 "12" 引用的文件。原因码:"5"。 SQLSTATE=428A1
SQL3185W 处理输入文件的第 "10548" 行中的数据时,发生前一个错误。
.....
I've searched in internet,and below are some useful informations(note the red color marked):
URL: http://www.experts-exchange.com/Database/DB2/Q_23812571.html
Hello,
I am using the db2move command to export 2 tables from my database. (DB2 - Express C)
If i only have a small number of entries I do not have any problems but if I have many entries I get the following error:
################################################################################
SQL3104N The Export utility is beginning to export data to file "tab2.ixf".
SQL3015N An SQL error "-452" occurred during processing.
SQL0452N Unable to access the file referenced by host variable "13". Reason
code: "5". SQLSTATE=428A1
SQL3105N The Export utility has finished exporting "12742" rows.
################################################################################
This always seems to happen when the LOB file size reaches 4GB. The database is running on windows vista with a NTFS file system.
In fact,the table:PT_ATTACH has a LOB column:ATTACHCONTENT,and this table estimate size is about:10G
db2 => select sum(attachsize)/1024/1024/1024 from pt_attach
1
---------------------------------
10.
1 record(s) selected.
I note someone says that the db2 user(in this case is:stageusr) should be the member of OS user group:administrator,so the user can have the privilege to create single file larger than 4G in 32-bit platform.I've changed stageusr to the member of the administrator,but the error still throws.I think we need to consult the db2 experts.
BTW,in PRODDB,there are 2 stored procedures(RETURNSEQS2 and TESTFORPROD) are write by JAVA,I think these external routines need to be re-create manually when upgrade db2 from v8.2. to v9.5.
CREATE PROCEDURE "STAGEUSR"."RETURNSEQS2"
(
IN SSEQNAME CHARACTER(32),
IN ICOUNT INTEGER,
OUT IBEGINSEQ INTEGER,
OUT IENDSEQ INTEGER,
OUT IINCRBY INTEGER
)
DYNAMIC RESULT SETS 1
SPECIFIC SQL040209213549657
EXTERNAL NAME 'SPReturnSeq!returnSeqs2()'
LANGUAGE JAVA
PARAMETER STYLE JAVA
NOT DETERMINISTIC
FENCED THREADSAFE
MODIFIES SQL DATA
NO DBINFO;
CREATE PROCEDURE "STAGEUSR"."TESTFORPROD"
(
IN SSEQNAME CHARACTER(32),
IN ICOUNT INTEGER,
OUT IBEGINSEQ INTEGER,
OUT IENDSEQ INTEGER,
OUT IINCRBY INTEGER
)
DYNAMIC RESULT SETS 1
SPECIFIC SQL040210024131258
EXTERNAL NAME 'SPReturnSeq!returnSeqs2()'
LANGUAGE JAVA
PARAMETER STYLE JAVA
NOT DETERMINISTIC
FENCED THREADSAFE
MODIFIES SQL DATA
NO DBINFO;
thanks&best regards
Rainny
ecVision - Experts in Collaboration and Visibility
2.问题解决过程
Locate the error number in db2 information center,and below are detail explain:
DB2 Linux 版、UNIX 版和 Windows 版版本 9.5
<script type="text/javascript"></script> SQL0452N
不能访问主变量 变量位置 引用的文件。原因码:原因码。
说明
在尝试访问或正在访问由第 n 个主变量引用的文件时出错,其中 n = 变量位置,原因由 原因码 给出。如果不能确定主变量的位置,那么将 <变量位置> 设置为 0。可能的原因码如下所示:
- 01 - 文件名长度无效,或文件名和/或路径格式无效。
- 02 - 文件选项无效。它的值必须是下列值之一:
· SQL_FILE_READ
· - 从现有文件中读取
· SQL_FILE_CREATE
· - 创建新文件以进行写入
· SQL_FILE_OVERWRITE
· - 覆盖现有文件。 如果文件不存在,
· 则创建该文件。SQL_FILE_APPEND
· - 追加至现有文件。 如果文件不存在,
则创建该文件。
- 03 - 找不到该文件。
- 04 - 为与现有文件同名的文件指定了 SQL_FILE_CREATE 选项。
- 05 - 对该文件的访问被拒绝。用户无权打开该文件。
- 06 - 对该文件的访问被拒绝。该文件正以不兼容的方式使用。要写入的文件是以互斥方式打开的。
- 07 - 写文件时磁盘已满。
- 08 - 读文件时遇到意外的文件结束。
- 09 - 访问文件时遇到介质错误。
- 10 - 读文件时遇到不完整的或无效的多字节字符。
- 11 - 将数据从文件代码页转换为应用程序的图形字符代码页时遇到错误。
用户响应
对于原因码 01,更正文件名长度、文件名和/或路径。
对于原因码 02,指定有效的文件选项。
对于原因码 03,确保在尝试访问文件前指定的文件已存在。
对于原因码 04,如果文件不再是必需的,那么删除该文件,或指定当前不存在的文件名。
对于原因码 05,确保用户具有对文件的访问权(更正文件许可权)。
对于原因码 06,使用另一文件,或者,如果一定要访问该文件,可修改应用程序来确保文件不会被并发访问。
对于原因码 07,删除不必要的文件以释放磁盘空间,或者指定驻留在另一具有足够磁盘空间的驱动器/文件系统上的文件。同时,确保未达到操作系统或用户文件大小限制。如果应用程序代码页使用多字节编码方案,那么有可能只写入了最后一个字符的一部分,因此,确保文件仅包含全型的字符。
对于原因码 08,如果文件要用于输入,那么确保在文件全部读入以前不要对其进行修改。
对于原因码 09,更正文件所在的介质上的所有错误。
对于原因码 10,确保文件包含基于应用程序代码页的有效多字节字符,或者在与文件的内容相同的代码页下运行时提交请求。
对于原因码 11,确保已安装了文件的代码页(例如日文 EUC)和应用程序的图形代码页(例如 UCS-2)之间的字符转换支持。
sqlcode:-452
sqlstate:428A1
3.解决方案
Seems this is a file access privilege problem. Solution:
we export data use server 7 db2 client,so the export files are stored in server 7 machine,when I copy all these export files to server 13 and import, SQL0452N throwed(SQL0452N Unable to access the file referenced by host variable "12". Reason code: "5". SQLSTATE=428A1).
use server 7 db2 client to import data into server 13(so,the file access privilege problem resolved),and at last ,the data imported successfully(PT_ATTACH)!