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

shuangoracle發表於2011-02-10

表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部落格 ” ,連結:http://blog.itpub.net/24496749/viewspace-1045788/,如需轉載,請註明出處,否則將追究法律責任。

相關文章