使用 Load 实用程序在 DB2 中加载文件问题
File loading issues in DB2 using Load utility
我有一个 .csv
文件,以逗号分隔(位于 C:/)。我正在使用 DB2 LOAD
实用程序将 CSV 文件中存在的数据加载到 DB2 table。
LOAD CLIENT FROM C:\Users\somepath\FileName.csv of del
MODIFIED BY NOCHARDEL COLDEL, insert into SchemaName.TABLE_NAME;
CSV 文件有 25 行。实用程序完成后,我收到一条关于 NOCHARDEL 的错误消息。我的 table 已正确加载所有 25 行。现在,当我尝试对该架构中存在的任何 table 执行 insert/update/delete 语句时,出现以下错误。
Lookup Error - DB2 Database Error: ERROR [55039] [IBM][DB2/AIX64] SQL0290N Table space access is not allowed.
你能帮我看看我是否犯了任何错误或遗漏了导致 table 锁定的参数。
早些时候加载文件时发生了类似的情况,DBA 确认有问题的 Table space 处于“正在加载”状态
DB2 LOAD
实用程序生成的更改未记录(其高性能的副作用之一)。如果数据库在加载后立即崩溃,将无法通过重放日志记录来恢复加载的 table,因为没有这样的记录。出于这个原因,包含已加载 table 的 table 空间会自动置于 BACKUP PENDING
模式,迫使您对该 table 空间或整个数据库进行备份,以确保它是完全可以恢复的。
您可以为 LOAD
命令指定选项,以帮助您避免将来出现这种情况:
NONRECOVERABLE
-- 此选项不会将 table 空间置于 BACKUP PENDING
模式,但是,正如其名称所暗示的那样, table 如果发生崩溃,您正在加载的内容将无法恢复,在这种情况下,您唯一的选择是删除并重新创建 table.
COPY YES
-- 此选项会在加载前创建 table 的副本,可用于将 table 恢复到加载前发生崩溃时的状态。
如果您只加载 25 条记录,我建议您改用 IMPORT
实用程序——它没有这些限制,因为它是完全记录的(以较低的性能为代价,对于 25 条记录没关系)。
你的table卡在LOAD IN PROGRESS
状态的原因是在LOAD
结束时发生的NOCHARDEL错误。
您尝试过重新启动数据库吗?这应该重新初始化所有 table 空间并删除任何流氓状态。
http://www-01.ibm.com/support/docview.wss?uid=swg1IC65395
http://www-01.ibm.com/support/docview.wss?uid=swg21427102
谢谢@mustaccio。我有 6000 万行要插入。我使用 25 作为样本来检查结果。
再补充一点,我们后来才知道这是一个已知的 DB2 错误,它使加载处于进行中状态(DB2 无法确认加载已完成并且会话无限期保持打开状态)并将 table space 处于备份挂起状态。
一旦 table space 处于挂起状态,恢复是释放它的唯一选择。
根据 DB2 团队(我们尚未部署和测试),此问题已在修复包 10 中得到修复。意思是 NONRECOVERABLE 关键词对我们来说工作正常
我有一个 .csv
文件,以逗号分隔(位于 C:/)。我正在使用 DB2 LOAD
实用程序将 CSV 文件中存在的数据加载到 DB2 table。
LOAD CLIENT FROM C:\Users\somepath\FileName.csv of del
MODIFIED BY NOCHARDEL COLDEL, insert into SchemaName.TABLE_NAME;
CSV 文件有 25 行。实用程序完成后,我收到一条关于 NOCHARDEL 的错误消息。我的 table 已正确加载所有 25 行。现在,当我尝试对该架构中存在的任何 table 执行 insert/update/delete 语句时,出现以下错误。
Lookup Error - DB2 Database Error: ERROR [55039] [IBM][DB2/AIX64] SQL0290N Table space access is not allowed.
你能帮我看看我是否犯了任何错误或遗漏了导致 table 锁定的参数。
早些时候加载文件时发生了类似的情况,DBA 确认有问题的 Table space 处于“正在加载”状态
DB2 LOAD
实用程序生成的更改未记录(其高性能的副作用之一)。如果数据库在加载后立即崩溃,将无法通过重放日志记录来恢复加载的 table,因为没有这样的记录。出于这个原因,包含已加载 table 的 table 空间会自动置于 BACKUP PENDING
模式,迫使您对该 table 空间或整个数据库进行备份,以确保它是完全可以恢复的。
您可以为 LOAD
命令指定选项,以帮助您避免将来出现这种情况:
NONRECOVERABLE
-- 此选项不会将 table 空间置于BACKUP PENDING
模式,但是,正如其名称所暗示的那样, table 如果发生崩溃,您正在加载的内容将无法恢复,在这种情况下,您唯一的选择是删除并重新创建 table.COPY YES
-- 此选项会在加载前创建 table 的副本,可用于将 table 恢复到加载前发生崩溃时的状态。
如果您只加载 25 条记录,我建议您改用 IMPORT
实用程序——它没有这些限制,因为它是完全记录的(以较低的性能为代价,对于 25 条记录没关系)。
你的table卡在LOAD IN PROGRESS
状态的原因是在LOAD
结束时发生的NOCHARDEL错误。
您尝试过重新启动数据库吗?这应该重新初始化所有 table 空间并删除任何流氓状态。
http://www-01.ibm.com/support/docview.wss?uid=swg1IC65395
http://www-01.ibm.com/support/docview.wss?uid=swg21427102
谢谢@mustaccio。我有 6000 万行要插入。我使用 25 作为样本来检查结果。 再补充一点,我们后来才知道这是一个已知的 DB2 错误,它使加载处于进行中状态(DB2 无法确认加载已完成并且会话无限期保持打开状态)并将 table space 处于备份挂起状态。 一旦 table space 处于挂起状态,恢复是释放它的唯一选择。 根据 DB2 团队(我们尚未部署和测试),此问题已在修复包 10 中得到修复。意思是 NONRECOVERABLE 关键词对我们来说工作正常