觸發器對IMP IMPDP匯入結果的影響(一)

2021-06-27 22:19:12 字數 4565 閱讀 7269

首先看一下觸發器對imp匯入結果的影響。

sql> show user

user 為 "admin"

sql> create table test(id int,name varchar2(30));

表已建立。

sql> insert into test values(1,'yanshoupeng');

已建立 1 行。

sql> commit;

提交完成。

sql> select * from test;

id name

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

1 yanshoupeng

sql> host exp admin/admin file=test.dmp tables=test

export: release 10.2.0.1.0 - production on 星期三 5月 11 10:11:27 2011

連線到: oracle database 10g enterprise edition release 10.2.0.1.0 - production

with the partitioning, olap and data mining options

已匯出 zhs16gbk 字符集和 al16utf16 nchar 字符集

即將匯出指定的表通過常規路徑...

. . 正在匯出表                            test匯出了           1 行

成功終止匯出, 沒有出現警告。

首先建立一張表,並且插入一條記錄,將記錄匯出。

下面建立乙個觸發器,每次插入的時候將name欄位自動加上'[huateng] '。

sql> create or replace trigger exp_trigger

2  before insert on test

3  for each row

4  begin

5    :new.name:=:new.name||'[huateng] ';

6  end;

7  /

sql> select * from test;

id name

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

1 yanshoupeng

sql> insert into test values(2,'yansp');

已建立 1 行。

sql> select * from test;

id name

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

1 yanshoupeng

2 yansp[huateng]

可以看到觸發器已經很好的發揮作用了。

下面看一下觸發器對imp的影響。

sql> delete test;

已刪除2行。

sql> commit;

提交完成。

sql> select * from test;

未選定行

sql> host imp admin/admin file=test.dmp tables=test ignore=y

import: release 10.2.0.1.0 - production on 星期三 5月 11 10:18:30 2011

連線到: oracle database 10g enterprise edition release 10.2.0.1.0 - production

with the partitioning, olap and data mining options

經由常規路徑由 export:v10.02.01 建立的匯出檔案

已經完成 zhs16gbk 字符集和 al16utf16 nchar 字符集中的匯入

. 正在將 admin 的物件匯入到 admin

. 正在將 admin 的物件匯入到 admin

. . 正在匯入表                          "test"匯入了           1 行

成功終止匯入, 沒有出現警告。

sql> select * from test;

id name

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

1 yanshoupeng[huateng]

我們原先匯出的檔案中的記錄是  :      

id name

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

1 yanshoupeng

由於觸發器的原因,導致我們匯入的結果與原先不一致。

對於imp匯入和普通的insert操作沒什麼太大的區別,因此出現這樣的結果也是正常的。

我們從v$sqlarea檢視中,找到如下的sql語句:

insert /*+nested_table_set_refs+*/ into "test" ("id", "name") values (:1, :2)。

以上匯出的dmp檔案是通過常規路徑匯出的,下面看看通過直接路徑匯出test表,利用直接路徑匯出的檔案進行匯入是否會對結果有影響。

不過憑猜測也能想到,即使採用直接路徑匯出應該和非直接路徑匯出的結果一樣。因為exp可以分直接路徑匯出和常規路徑,而imp沒有直接路徑匯入。

不過還是測試一下。

sql> delete from test;

已刪除 1 行。

sql> commit;

提交完成。

sql> select * from test;

未選定行

sql> alter trigger exp_trigger disable;

觸發器已更改

sql> insert into test values(1,'yanshoupeng');

已建立 1 行。

sql> commit;

提交完成。

sql> select * from test;

id name

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

1 yanshoupeng

sql> alter trigger exp_trigger enable;

觸發器已更改

sql> host exp admin/admin file=direct_admin.dmp tables=test direct=true

export: release 10.2.0.1.0 - production on 星期三 5月 11 10:26:00 2011

連線到: oracle database 10g enterprise edition release 10.2.0.1.0 - production

with the partitioning, olap and data mining options

已匯出 zhs16gbk 字符集和 al16utf16 nchar 字符集

即將匯出指定的表通過直接路徑...

. . 正在匯出表                            test匯出了           1 行

成功終止匯出, 沒有出現警告。

sql> delete from test;

已刪除 1 行。

sql> commit;

提交完成。

sql> host imp admin/admin file=direct_admin.dmp tables=test ignore=y

import: release 10.2.0.1.0 - production on 星期三 5月 11 10:26:40 2011

連線到: oracle database 10g enterprise edition release 10.2.0.1.0 - production

with the partitioning, olap and data mining options

經由直接路徑由 export:v10.02.01 建立的匯出檔案

已經完成 zhs16gbk 字符集和 al16utf16 nchar 字符集中的匯入

. 正在將 admin 的物件匯入到 admin

. 正在將 admin 的物件匯入到 admin

. . 正在匯入表                          "test"匯入了           1 行

成功終止匯入, 沒有出現警告。

sql> select * from test;

id name

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

1 yanshoupeng[huateng]

可以看到,結果還是一樣。對於有觸發器表的imp操作應該在匯入之前,將表的所有觸發器disable掉,在匯入完成後,在啟用。

如下:sql> select * from test;

id name

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

1 yanshoupeng[huateng]

觸發器 mysql觸發器

觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...

對觸發器的理解

觸發器是一種專用型別的儲存過程,它被 到sql server 的 或者檢視上。它可以強化約束,來維護資料的完整性和一致性,可以跟蹤資料庫內的操作從而不允許未經許可的更新和變化。可以聯級運算。如,某錶上的觸發器上包含對另乙個表的資料操作,而該操作又會導致該錶觸發器被觸發。有instead of和aft...

對觸發器的理解

觸發器是指當表發生改變的時候觸發的動作,當你插入一條記錄到表中的時候,此時表已經發生了改變,現在想要在每次插入資料之前檢測所有的入參是否都是小寫,此時可以用觸發器來檢測。發生改變通常是指update insert alter等操作 增刪改 其動作可以發生在增刪改之前或之後,觸發時間就是我們要寫的儲存...