42
SSIS 資料

REF006 SSIS

Embed Size (px)

Citation preview

SSIS 資料 轉拋

SSIS 資料 轉作業介紹拋

◎ SQL Server Integration Services

繼 MS SQL 2000 的 DTS 之後, MS SQL 2005 推出SQL Server Integration Service 服務,該功能可從各種來源 ( 如 XML 資料 、一般 案和關聯式資料來源檔 檔 ) 擷取和轉換資料,然後將該資料載入到一或多個目的地,經過流程控制 設計,藉此達到兩個環境資料整合的目的

SQL Server Oracle●SSIS 主程式 : 每日資料 轉作業 拋

(5:30 AM Windows 工作排程 )

●ExcessDataDel : 刪除對應 Oracle 端的

delete 資料 (5:00 AM SQL Server

Agent)

● TX_SSIS_STATUS : 寫入網站開 狀態啟

( 依執行時程 Table)

●PX_SSIS_ROW_CHK : 每日資料表筆數

檢 作業 查 (6:00 AM Oracle Job)

●TRIX_TABLE_ONDEL :轉 相關表格若有資料刪除會將相關資訊拋

存到 TX_DTS_DEL 中, (SQL Server)

ExcessDataDel 定時抓取該表資料每日 執

行刪除 ( 觸發器 / 即時 )

Time(AM) Process Scheduler concurrency

5:20 SQL server 多餘資料刪除作

(SQL server)

SQL Server

Agent

* 觸發器監控 DML 作業

* 資料數量一致性檢查

網站 user 登入時檢查 SQL

server 表

TX_SSIS_STATUS

5:30 SSIS 主程式 + 資料表筆數

計算

(SQL server)

Windows 工作

排程

6:00 PX_SSIS_ROW_CHK

(Oracle)

Oracle Job

Time table

6:30 資料庫日常檢 通知郵件查

登入 SQL server 點選 SSIS_ALL.sln 圖示

由 7個拋轉單位集結成 SSIS_ALL,點選 [方案總管 ],可以看到原始封裝檔案

主要的使用物件

工具箱中的:

[ 時序容器時序容器 ]

[ 執行執行 SQLSQL 工作工作 ]

[ 資料流程工作資料流程工作 ]

資料表全 轉拋

資料表增量 轉拋

資料表全 轉拋

從工具箱拉一個 [ 時序容器 ] 物件,把 [SQL 執行作業 ] 、 [ 資料流程工作 ]工作拉進去,並指向流程方向 ( 曳綠線拖 )

點選 [SQL 執行工作 ] ,修改以下三個屬性

Connection : LocalHost.webuser

SQL Statement :Delete from aceweb.tx_table

Name:表格名稱

點選 [ 資料流程工作 ] ,在工具箱把 [OLE DB 來源 ] 與 [OLD DB 目的地 ] 物件拉入,並指向流程方向 ( 拖曳綠線 )

點選 [OLE DB 來源 ] ,修改以下三個屬性

OLD DB 連接管理員 : Pro.sql2005

SQL Statement :SQL 命令

Name:將 Oracle 端要轉出的表,填入 SQL 查詢,在 where 條件子句要加上 update_time <= trunc(sysdate)+5/24 這個條件

點選 [OLE DB 目的地 ] ,修改以下三個屬性

OLD DB 連接管理員 : LocalHost.WebDB

資料存取模式 :資料表或檢視 – 快速載入

資料表或檢視的名稱 :選取 SQL server 要轉入的表

點選 [ 對應 ] ,確認兩個環境的 轉欄位對應是否正拋確,畫面右方為 SQL server 的資料表欄位,左邊為 Oracle 端的資料表欄位

完成後如下圖

資料表增量 轉拋

為確保資料的一致性,在增量拋轉時會先確認”前次 轉是不是有拋失敗的狀況產生” 再決定是否要進行全 轉或是增量 轉拋 拋 。

判斷元件

從工具箱拉一個 [ 時序容器 ] 物件,把 3 個 [SQL 執行作業 ] 、 2 個[ 資料流程工作 ] 工作拉進去,並指向流程方向,如下圖

流程方向紅線的設置,點選流程方向,按右鍵勾選 [ 失敗 ]

點選 [ 時序容器 ] ,將 MaximumErrorCount 屬性設置為 2

a. 點選 [ 檢視 ] – [ 其他視窗 ] – [ 變數 ]

b. 新增一變數,字首為 check_ 表格名稱,資料類型為 String

製作判斷元件

點選 [SQL 執行工作 ] ,修改以下四個屬性

Connection : Pro.sql2005

SQL Statement :

Name :Check_tx_table

ResultSet :單一資料列

SELECT decode(STATUS,'E ','1','2') As check_TX_TABLEFROM TX_SQL2005_SSIS_LOGWHERE (LOG_TIME >= trunc(sysdate - 1)) AND (LOG_TIME < trunc(sysdate)) AND (TABLE_NAME = 'TX_TABLE') AND status<>'B' order by log_time desc

點選 [ 結果集 ] ,修改下面兩個參數

結果名稱 : Check_tx_table

變數名稱 :使用者 ::Check_tx_table( 下拉選單 )

[ 失敗流程 ]評估作業:運算式或條件約束

:失敗值運算式: @check_tx_table==“2”

[ 成功流程 ]評估作業:運算式與條件約束

:成功運算式:值@check_tx_table==“1”

回到上層,點選流程箭頭,分別在紅線 / 綠線點兩下,設定其中的屬性

成功流程端

拉出 [SQL 執行工作 ] ,修改以下三個屬性

Connection : LocalHost.webuser

SQL Statement :delete from aceweb.TX_TABLE where KEY_ID in (select * from openquery(ORACLE10G,'SELECT KEY_ID FROM TX_TABLE

WHERE UPDATE_TIME >= TRUNC(sysdate-1)+5/24 and UPDATE_TIME <= TRUNC(sysdate)+5/24 '))

Name:Delete TX_TABLE incre

成功流程端

點選 [ 資料流程工作 ] ,在工具箱把 [OLE DB 來源 ] 與 [OLD DB 目的地 ] 物件拉入,並指向流程方向 ( 曳綠線拖 )

成功流程端

點選 [OLE DB 來源 ] ,修改以下三個屬性

OLD DB 連接管理員 : Pro.sql2005

SQL Statement :“SELECT column1, column2,column3, column4 FROM TX_TABLE WHEREUPDATE_TIME >= TRUNC(sysdate-1)+5/24 and UPDATE_TIME <= TRUNC(sysdate)+5/24”

( 在 where 條件子句要加上 update_time >= trunc(sysdate)+5/24 and update_time <= trunc(sysdate)+5/24 這個條件 )

Name:將 Oracle 端要轉出的表,填入 SQL 詢,查

成功流程端

點選 [OLE DB 目的地 ] ,修改以下三個屬性

OLD DB 連接管理員 : LocalHost.WebDB

資料存取模式 :資料表或檢視 – 快速載入

資料表或檢視的名稱 :選取 SQL server 要轉入的表

成功流程端

點選 [ 對應 ] ,確認兩個環境的 轉欄位對應是否正拋確,畫面右方為 SQL server 的資料表欄位,左邊為 Oracle 端的資料表欄位

成功流程端

失敗流程端

點選 [SQL 執行工作 ] ,修改以下三個屬性

Connection : LocalHost.webuser

SQL Statement :Delete from aceweb.tx_table

Name:表格名稱

失敗流程端

點選 [ 資料流程工作 ] ,在工具箱把 [OLE DB 來源 ] 與 [OLD DB 目的地 ] 物件拉入,並指向流程方向 ( 曳綠線拖 )

失敗流程端

點選 [OLE DB 來源 ] ,修改以下三個屬性

OLD DB 連接管理員 : Pro.sql2005

SQL Statement :SQL 命令

Name:將 Oracle 端要轉出的表,填入 SQL 詢,查在 where 條件子句要加上 update_time <= trunc(sysdate)+5/24 這個條件

失敗流程端

點選 [OLE DB 目的地 ] ,修改以下三個屬性

OLD DB 連接管理員 : LocalHost.WebDB

資料存取模式 :資料表或檢視 – 快速載入

資料表或檢視的名稱 :選取 SQL server 要轉入的表

失敗流程端

點選 [ 對應 ] ,確認兩個環境的 轉欄位對應是否正拋確,畫面右方為 SQL server 的資料表欄位,左邊為 Oracle 端的資料表欄位

失敗流程端

完成後示意如下圖

執行紀錄 LOG

執行紀錄 LOG

在每個流程執行開頭與結尾,以 [SQL 執行工作 ] 物件,將執行情形的標記寫入資料庫。

點選 [SQL 執行工作 ] ,修改以下三個屬性

Connection : Pro.sql2005

SQL Statement :[ 下頁說明 ]

Name:Start_TX_TABLE ( 開始 )Fail_TX_TABLE_1 ( 失敗 1)Fail_TX_TABLE_2 ( 失敗 2)End_TX_TABLE ( 結束 )

SQL : INSERT INTO TX_SQL2005_SSIS_LOG ( TABLE_NAME, STATUS) VALUES ('T_POLICY_CHANGE' ,'B' )

SQL : INSERT INTO TX_SQL2005_SSIS_LOG ( TABLE_NAME, STATUS) VALUES ('T_POLICY_CHANGE' ,'E')

SQL : INSERT INTO TX_SQL2005_SSIS_LOG ( TABLE_NAME, LOG_TIME, STATUS) VALUES ('T_POLICY_CHANGE' ,sysdate ,'F')

SQL : INSERT INTO TX_BATCH_OPT (PROGRAM_NAME, LOG_TIME, STATUS, MESSAGE) VALUES ('SSIS process', sysdate, 'ERROR', 'T_POLICY_CHANGE')

Thanks all !