yangtingkun
===========================================================
数据泵交换模式输入确认无效
===========================================================

发现数据泵一个奇怪的错误。数据泵的交互模式下,停止数据泵命令时,输入确认的命令无效。


直接描述问题不是很容易说清楚,还是直接看例子:

E:dmp>expdp yangtk/yangtk dumpfile=d_output:full.dp full=y

Export: Release 10.2.0.1.0 - Production on 星期日, 05 10, 2008 15:51:22

Copyright (c) 2003, 2005, Oracle. All rights reserved.

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
启动
"YANGTK"."SYS_EXPORT_FULL_01": yangtk/******** dumpfile=d_output:full.dp f
ull=y
正在使用 BLOCKS 方法进行估计
...处理对象类型 DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA
ORA-39139:
数据泵不支持 XMLSchema 对象。将跳过 TABLE_DATA:"OE"."PURCHASEORDER"

使用 BLOCKS 方法的总估计: 0 KB处理对象类型 DATABASE_EXPORT/TABLESPACE处理对象类型 DATABASE_EXPORT/PROFILE处理对象类型 DATABASE_EXPORT/SYS_USER/USER处理对象类型 DATABASE_EXPORT/SCHEMA/USER处理对象类型 DATABASE_EXPORT/ROLE处理对象类型 DATABASE_EXPORT/GRANT/SYSTEM_GRANT/PROC_SYSTEM_GRANT处理对象类型 DATABASE_EXPORT/SCHEMA/GRANT/SYSTEM_GRANT处理对象类型 DATABASE_EXPORT/SCHEMA/ROLE_GRANT处理对象类型 DATABASE_EXPORT/SCHEMA/DEFAULT_ROLE处理对象类型 DATABASE_EXPORT/SCHEMA/TABLESPACE_QUOTA处理对象类型 DATABASE_EXPORT/RESOURCE_COST处理对象类型 DATABASE_EXPORT/SCHEMA/DB_LINK处理对象类型 DATABASE_EXPORT/TRUSTED_DB_LINK处理对象类型 DATABASE_EXPORT/SCHEMA/SEQUENCE/SEQUENCE处理对象类型 DATABASE_EXPORT/SCHEMA/SEQUENCE/GRANT/OWNER_GRANT/OBJECT_GRANT处理对象类型 DATABASE_EXPORT/DIRECTORY/DIRECTORY处理对象类型 DATABASE_EXPORT/DIRECTORY/GRANT/OWNER_GRANT/OBJECT_GRANT处理对象类型 DATABASE_EXPORT/CONTEXT处理对象类型 DATABASE_EXPORT/SCHEMA/PUBLIC_SYNONYM/SYNONYM处理对象类型 DATABASE_EXPORT/SCHEMA/SYNONYM处理对象类型 DATABASE_EXPORT/SCHEMA/TYPE/INC_TYPE处理对象类型 DATABASE_EXPORT/SCHEMA/TYPE/TYPE_SPEC处理对象类型 DATABASE_EXPORT/SYSTEM_PROCOBJACT/PRE_SYSTEM_ACTIONS/PROCACT_SYSTEM

处理对象类型 DATABASE_EXPORT/SYSTEM_PROCOBJACT/POST_SYSTEM_ACTIONS/PROCACT_SYSTE
M
处理对象类型
DATABASE_EXPORT/SCHEMA/PROCACT_SCHEMA处理对象类型 DATABASE_EXPORT/SCHEMA/TABLE/TABLE

Export> stop_job是否确实要停止此作业 ([Y]/N): N是否确实要停止此作业 ([Y]/N): n是否确实要停止此作业 ([Y]/N): N是否确实要停止此作业 ([Y]/N):


E:dmp>

在执行数据泵的导出过程中,使用CTRL+C进入交互模式,使用STOP_JOB来停止JOB的运行,但是在提示“是否确认要停止此作业([Y]/N):”处,输入大写N和小写n都没有任何作用,也就是说,一旦执行了STOP_JOB,再想反悔就不行了。

其实并非是输入N无效,输入Y也是无效的:

E:dmp>expdp yangtk/yangtk attach=SYS_EXPORT_FULL_01

Export: Release 10.2.0.1.0 - Production on 星期日, 05 10, 2008 16:36:22

Copyright (c) 2003, 2005, Oracle. All rights reserved.

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

作业: SYS_EXPORT_FULL_01
所有者
: YANGTK
操作
: EXPORT
创建者权限
: FALSE
GUID: 8FE8B91599634CAA9A7061ED2CBACE68
起始时间: 星期日, 05 10
, 2008 16:36:31
模式
: FULL
实例
: ytk102
最大并行度
: 1
EXPORT
个作业参数
:
参数名 参数值
:
CLIENT_COMMAND yangtk/******** dumpfile=d_output:full.dp full=y
状态
: IDLING
处理的字节
: 0
当前并行度
: 1
作业错误计数
: 0
转储文件
: e:dmpfull.dp
写入的字节: 5,795,840

Worker 1 状态:
状态: UNDEFINED

Export> start_job

Export> stop_job是否确实要停止此作业 ([Y]/N): y是否确实要停止此作业 ([Y]/N): Y是否确实要停止此作业 ([Y]/N): T是否确实要停止此作业 ([Y]/N): F是否确实要停止此作业 ([Y]/N):


E:dmp>

根据例子可以看到,实际上输入任何的值都没有作用。

其实问题根源在于中午翻译的bug,将环境变量的语言设置为英文:

E:dmp>SET NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

E:dmp>expdp yangtk/yangtk attach=SYS_EXPORT_FULL_01

Export: Release 10.2.0.1.0 - Production on Sunday, 05 October, 2008 16:39:39

Copyright (c) 2003, 2005, Oracle. All rights reserved.

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Produc
tion
With the Partitioning, OLAP and Data Mining options

Job: SYS_EXPORT_FULL_01
Owner: YANGTK
Operation: EXPORT
Creator Privs: FALSE
GUID: 8FE8B91599634CAA9A7061ED2CBACE68
Start Time: Sunday, 05 October, 2008 16:39:41
Mode: FULL
Instance: ytk102
Max Parallelism: 1
EXPORT Job Parameters:
Parameter Name Parameter Value:
CLIENT_COMMAND yangtk/******** dumpfile=d_output:full.dp full=y
State: IDLING
Bytes Processed: 63,165,968
Current Parallelism: 1
Job Error Count: 0
Dump File: e:dmpfull.dp
bytes written: 70,000,640

Worker 1 Status:
State: UNDEFINED

Export> start_job

Export> stop_job
Are you sure you wish to stop this job ([yes]/no): no

Export> stop_job
Are you sure you wish to stop this job ([yes]/no): yes


E:dmp>

可以看到问题的真正原因在于Oracle的中午翻译将YES/NO选项简写为Y/N,从而导致了似乎任何输入都无效的结果。

E:dmp>SET NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

E:dmp>expdp yangtk/yangtk attach=SYS_EXPORT_FULL_01

Export: Release 10.2.0.1.0 - Production on 星期日, 05 10, 2008 16:46:36

Copyright (c) 2003, 2005, Oracle. All rights reserved.

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

作业: SYS_EXPORT_FULL_01
所有者
: YANGTK
操作
: EXPORT
创建者权限
: FALSE
GUID: 8FE8B91599634CAA9A7061ED2CBACE68
起始时间: 星期日, 05 10
, 2008 16:46:38
模式
: FULL
实例
: ytk102
最大并行度
: 1
EXPORT
个作业参数
:
参数名 参数值
:
CLIENT_COMMAND yangtk/******** dumpfile=d_output:full.dp full=y
状态
: IDLING
处理的字节
: 64,529,008
当前并行度
: 1
作业错误计数
: 0
转储文件
: e:dmpfull.dp
写入的字节: 71,696,384

Worker 1 状态:
状态: UNDEFINED

Export> START_JOB

Export> STOP_JOB是否确实要停止此作业 ([Y]/N): NO

Export> STOP_JOB是否确实要停止此作业 ([Y]/N): YES


E:dmp>

将环境变为中文继续测试,输入YESNO果然可以正确的执行,看来确实是中文环境翻译造成的。

以前也碰到过中文翻译时出现错误的情况,看来Oracle的本地化实现还是存在不少bug的。

yangtingkun 发表于:2008.10.05 20:47 ::分类: ( ORACLE , Bug ) ::阅读:(444次) :: 评论 (0)

发表评论
标题

在此添加评论
表情符号: smile laughing tongue angry crying sad wassat wink

称呼

邮箱地址(可选)

个人主页(可选)

 authimage


切换风格
新闻聚合
博客日历
文章归档...
最新发表...
最新评论...
最多阅读文章...
最多评论文章...
博客统计...
Blog信息
网站链接...