ITPub博客

首页 > 数据库 > Oracle > 表上建立唯一性索引,SQL*Loader用或不用dirdect的区别

表上建立唯一性索引,SQL*Loader用或不用dirdect的区别

原创 Oracle 作者:shuangoracle 时间:2011-02-10 18:48:53 0 删除 编辑

表test_table1中原有数据:

SQL> select id,name from test_table1;

ID NAME

1 AA

2 BB

3 CC

4 DD

5 EE

创建表上字段id的唯一性索引:

SQL> create unique index idx_test_table1_id on test_table1(id);

1、不带direct导入和表中原来数据一样的数据:

E:>sqlldr zhaoss/zhaoss@orcl control=result.ctl

SQL*Loader: Release 10.2.0.1.0 - Production on 星期四 2月 10 18:30:22 2011

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

达到提交点 - 逻辑记录计数 5

查看索引状态,仍然有效:

SQL> select status,index_name,table_name from user_indexes where table_name='TES

T_TABLE1';

STATUS INDEX_NAME TABLE_NAME

VALID IDX_TEST_TABLE1_ID TEST_TABLE1

查看表中数据,竟然没有变化:

SQL> select id,name from test_table1;

ID NAME

1 AA

2 BB

3 CC

4 DD

5 EE

查看日志文件:

SQL*Loader: Release 10.2.0.1.0 - Production on 星期四 2月 10 18:30:22 2011

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

控制文件: result.ctl

数据文件: e:result.csv

错误文件: result.bad

废弃文件: 未作指定

(可废弃所有记录)

要加载的数: ALL

要跳过的数: 0

允许的错误: 50

绑定数组: 64 行, 最大 256000 字节

继续: 未作指定

所用路径: 常规

表 TEST_TABLE1,已加载从每个逻辑记录

插入选项对此表 APPEND 生效

列名 位置 长度 中止 包装数据类型

------------------------------ ---------- ----- ---- ---- ---------------------

ID FIRST * , CHARACTER

NAME NEXT * , CHARACTER

记录 1: 被拒绝 - 表 TEST_TABLE1 出现错误。

ORA-00001: 违反唯一约束条件 (ZHAOSS.IDX_TEST_TABLE1_ID)

记录 2: 被拒绝 - 表 TEST_TABLE1 出现错误。

ORA-00001: 违反唯一约束条件 (ZHAOSS.IDX_TEST_TABLE1_ID)

记录 3: 被拒绝 - 表 TEST_TABLE1 出现错误。

ORA-00001: 违反唯一约束条件 (ZHAOSS.IDX_TEST_TABLE1_ID)

记录 4: 被拒绝 - 表 TEST_TABLE1 出现错误。

ORA-00001: 违反唯一约束条件 (ZHAOSS.IDX_TEST_TABLE1_ID)

记录 5: 被拒绝 - 表 TEST_TABLE1 出现错误。

ORA-00001: 违反唯一约束条件 (ZHAOSS.IDX_TEST_TABLE1_ID)

表 TEST_TABLE1:

0 行 加载成功。

由于数据错误, 5 行 没有加载。

由于所有 WHEN 子句失败, 0 行 没有加载。

由于所有字段都为空的, 0 行 没有加载。

为绑定数组分配的空间: 33024 字节 (64 行)

读取 缓冲区字节数: 1048576

跳过的逻辑记录总数: 0

读取的逻辑记录总数: 5

拒绝的逻辑记录总数: 5

废弃的逻辑记录总数: 0

从 星期四 2月 10 18:30:22 2011 开始运行

在 星期四 2月 10 18:30:22 2011 处运行结束

经过时间为: 00: 00: 00.26

CPU 时间为: 00: 00: 00.14

从日志文件可以看出,各条数据因为在表中已经存在,所以报唯一唯一性约束条件,全部没有导入。

2、然后添加direct=true,再导入

E:>sqlldr zhaoss/zhaoss@orcl control=result.ctl direct=true

SQL*Loader: Release 10.2.0.1.0 - Production on 星期四 2月 10 18:30:56 2011

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

加载完成 - 逻辑记录计数 5。

查看索引状态,索引无效。

SQL> select status,index_name,table_name from user_indexes where table_name='TES

T_TABLE1';

STATUS INDEX_NAME TABLE_NAME

UNUSABLE IDX_TEST_TABLE1_ID TEST_TABLE1

查看表中数据,数据导入进来了:

SQL> select * from test_table1;

ID NAME

1 AA

2 BB

3 CC

4 DD

5 EE

1 AA

2 BB

3 CC

4 DD

5 EE

查看日志文件:

SQL*Loader: Release 10.2.0.1.0 - Production on 星期四 2月 10 18:30:56 2011

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

控制文件: result.ctl

数据文件: e:result.csv

错误文件: result.bad

废弃文件: 未作指定

(可废弃所有记录)

要加载的数: ALL

要跳过的数: 0

允许的错误: 50

继续: 未作指定

所用路径: 直接

表 TEST_TABLE1,已加载从每个逻辑记录

插入选项对此表 APPEND 生效

列名 位置 长度 中止 包装数据类型

------------------------------ ---------- ----- ---- ---- ---------------------

ID FIRST * , CHARACTER

NAME NEXT * , CHARACTER

表 TEST_TABLE1 的以下索引已处理:

索引 ZHAOSS.IDX_TEST_TABLE1_ID 无法使用, 因为:

ORA-00001: 违反唯一约束条件 (ZHAOSS.IDX_TEST_TABLE1_ID)

表 TEST_TABLE1:

5 行 加载成功。

由于数据错误, 0 行 没有加载。

由于所有 WHEN 子句失败, 0 行 没有加载。

由于所有字段都为空的, 0 行 没有加载。

在直接路径中没有使用绑定数组大小。

列数组 行数: 5000

流缓冲区字节数: 256000

读取 缓冲区字节数: 1048576

跳过的逻辑记录总数: 0

读取的逻辑记录总数: 5

拒绝的逻辑记录总数: 0

废弃的逻辑记录总数: 0

由 SQL*Loader 主线程加载的流缓冲区总数: 1

由 SQL*Loader 加载线程加载的流缓冲区总数: 0

从 星期四 2月 10 18:30:56 2011 开始运行

在 星期四 2月 10 18:30:56 2011 处运行结束

经过时间为: 00: 00: 00.34

CPU 时间为: 00: 00: 00.14

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24496749/viewspace-1045788/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-08-25

  • 博文量
    84
  • 访问量
    242686