匯入大容量資料時控制觸發器執行
“觸發器”是一種特殊形式的儲存過程,它在使用者修改表中或檢視中的資料時自動執行。執行觸發器會影響大容量匯入操作的效能。例如,每次匯入記錄時就傳送電子郵件的觸發器會降低大容量匯入操作的速度並建立一些電子郵件。
大容量匯入資料時,您可以控制大容量匯入操作是否執行(觸發)觸發器。大容量匯入操作應只對包含支援多行插入的 INSERT 和 INSTEAD OF 觸發器的表執行觸發器。有關這些觸發器的詳細資訊,請參閱 DML 觸發器。
重要提示:
如果觸發器被禁用,更新後設資料時可能會使用架構修改鎖。這會影響其他命令(例如,聯機索引生成)或事務。例如,由於在同時執行 DDL 更改,訪問目標表的快照隔離事務可能會失敗。
如果觸發器被啟用,觸發器對每個批處理執行一次。
大容量匯入操作期間,行為取決於操作所使用的命令。bcp 命令和 BULK INSERT (Transact-SQL) 語句在預設情況下會禁用觸發器。而 INSERT ... SELECT * FROM OPENROWSET(BULK...) 語句在預設情況下會執行觸發器。
下表總結了預設行為。
大容量匯入命令 預設行為
bcp
禁用觸發器
BULK INSERT
禁用觸發器
INSERT ...SELECT * FROM OPENROWSET(BULK...)
執行觸發器
每個大容量匯入命令都提供一個允許使用者更改處理觸發器的方式的限定符,以下各節進行了介紹。
使用 bcp 或 BULK INSERT 執行觸發器
預設情況下,bcp 命令和 BULK INSERT 語句不執行觸發器。但是,您可以使用下列限定符啟用觸發器:
命令 限定符 限定符型別
bcp
-h "FIRE_TRIGGERS"
提示
BULK INSERT
FIRE_TRIGGERS
引數
如果為大容量匯入操作指定了 FIRE_TRIGGERS,則它將對插入表中的所有行執行在表上定義的所有 INSERT 和 INSTEAD OF 觸發器。
有關詳細資訊,請參閱 bcp 實用工具和 BULK INSERT (Transact-SQL)。
在 INSERT ... SELECT * FROM OPENROWSET(BULK...) 中禁用觸發器
預設情況下,OPENROWSET 大容量行集提供程式執行觸發器。您可以使用下列限定符禁用觸發器:
命令 限定符 限定符型別
INSERT ...SELECT * FROM OPENROWSET(BULK...)
WITH(IGNORE_TRIGGERS)
表提示
如果指定了此提示,則 OPENROWSET 大容量行集提供程式不執行觸發器。有關 IGNORE_TRIGGERS 提示的詳細資訊,請參閱表提示 (Transact-SQL)。
在啟用觸發器的情況下匯入大批資料
SQL Server 2005 及更高版本對觸發器使用行版本控制,並將行版本儲存在 tempdb 中的版本儲存區中。您可能需要增加 tempdb 的大小以適應觸發器對版本儲存區的影響,才能使用觸發器大容量匯入大批資料記錄。有關詳細資訊,請參閱行版本控制資源的使用情況。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-503399/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- impdp做資料匯入時約束和觸發器引起資料匯入後應用故障觸發器
- 匯入大容量資料的基本原則
- 關於大容量匯入和大容量匯出操作
- 在SQL Server中謹慎匯入匯出大容量資料SQLServer
- 通過大容量匯入操作控制約束檢查
- 優化大容量匯入效能優化
- mysqldumper 多執行緒 匯出匯入資料MySql執行緒
- Jenkins設定定時觸發器執行任務Jenkins觸發器
- oracle按使用者imp資料時觸發器和儲存過程匯入後無效Oracle觸發器儲存過程
- 管理大容量匯入的批處理
- 【匯入匯出】執行匯入,匯出時如何以as sysdba 身份連線。
- 大文字資料,匯入匯出到資料庫資料庫
- 使用GoldenGate EVENTACTIONS執行資料的實時觸發和定製化Go
- 資料泵匯入-在物件已存在的情況下執行匯入物件
- 匯入excel 資料時間Excel
- 採用POI技術進行大資料匯入大資料
- 執行時資料區——程式計數器
- 把一個資料表中的資料匯入另一個表,觸發器和儲存過程的觸發器儲存過程
- PHP大資料xlswriter匯入匯出(最優資料化)PHP大資料
- 10g 用sys使用者執行資料庫匯入匯出資料庫
- ORACLE表資料觸發器,僅保留一天的實時資料Oracle觸發器
- Java虛擬機器-執行時資料區Java虛擬機
- JVM——【執行時資料區】程式計數器JVM
- Java虛擬機器 —— 執行時資料區Java虛擬機
- Java執行時資料Java
- mysql多執行緒匯出匯入MySql執行緒
- Oracle 登入觸發器Oracle觸發器
- 華存自主控制器大容量EMMC簡介
- 資料庫開發---常用物件-觸發器資料庫物件觸發器
- 【匯入匯出】sqlldr 匯入含有內嵌換行符的資料SQL
- 物件及資料存在時的資料匯入(imp)物件
- Oracle使用資料泵expdp,impdp進行資料匯出匯入Oracle
- 解決POI多執行緒匯出時資料錯亂問題執行緒
- 大資料執行環境的執行大資料
- golang 限流器,控制併發,執行緒池Golang執行緒
- 資料庫觸發器,禁止DDL操作資料庫觸發器
- SQL資料庫觸發器例項SQL資料庫觸發器
- 資料庫的觸發器的使用資料庫觸發器