當資料庫發生異常的時候,通常都希望能在很短的時間內還原資料庫,每當問題發生時,再撰寫資料庫還原的T-SQL,往往耽誤了許多時間。所以我們可以事先撰寫還原的T-SQL,以備不時之需。
假設我們的備份策略為:
每天凌晨 AM 3:00 處理一次完整備份,每3個小時處理一次差異備份,每1個小時處理一次交易備份。
還原策略說明:
1. 備份結尾交易紀錄,並設定資料庫為還原模式。
2. 建立暫存資料表。
3. 檢查備份檔案相關資訊,並寫入暫存資料表。
4. 還原完整備份。
5. 還原最後一個差異備份。(如果沒有差異備份,則此步驟會跳過。)
6. 依順序還原最後一個差異備份之後所有的交易備份。(如果沒有差異備份,依順序還原完整備份之後所有交易備份。)
7. 還原結尾交易備份至特定時間點。
復原模式(Recovery Model) :
發生檢查點(check point)之後,是否繼續存留交易紀錄在資料庫的交易紀錄檔之中。
完整備份(Full Backup) : Data + Uncommitted Log
將整個資落庫的資料與部分交易。在作業的過程中任何的作業完成與未完成的交易都會進行備份。
差異備份(Differential Backup) :
1.從最近一次的完整備份,到現在的資料量變化的備份作業。
2.僅能將資料庫還原至差異備份的時間點。
3.最近一次的差異備份可以取代前一次的差異備份。
交易紀錄備份(Log Backup) : Backup Log + Clear Log
1.進行交易備份之後,系統會自動截斷不在使用的交易紀錄檔,並釋放空間。
2.每一份交易備份的備份資料,是屬於接續性的關係。
3.可以將系統狀態還原至特定的時間點。
結尾交易備份(Tail-log Backup) :
當系統要進行還原時,第一個首要工作就是,將剩餘的交易紀錄檔進行備份。
SQL Server 2000 的 SQL Mail 提供從 Microsoft SQL Server 傳送和讀取電子郵件的簡易方式,但是 SQL Mail 屬於 MAPI 應用程式,所以伺服器上必須出現 MAPI 子系統。如果要使用 SQL Mail,就必須安裝 MAPI 用戶端,例如 :Microsoft Outlook 或是 Exchange Server。本文件所提及之技術,伺服器可以不必安裝MAPI 子系統,即可發送電子郵件。
我們可以利用 SQL Server OLE Automation 系統預存程序,來呼叫 CDOSYS 物件模型,並搭配任何支援 SMTP 郵件的郵件伺服器,作為自己的遠端 SMTP 郵件伺服器,來達到寄送電子郵件的功能。
標籤: SQL Server T-SQL
本機交易通常使用在主、從式應用程式中,更新的對象限定於同一個資料來源。應用程式可以使用在ADO.NET當中的Connection物件搭配Transaction物件來完成,而Command物件有一個Transaction屬性,允許把想要執行的多個命令,包裝成一個單獨的交易。讓整個交易中所有的工作,都有一致的結果,不是完全成功執行就是完全失敗。
標籤: ADO.NET
以往在同一個Connection當中,分別以多個DataReader搭配Command物件,或者是透過DataAdapter讀取資料時,一次只有一個命令可以執行查詢,查詢的動作也會循序地執行。我們無法一邊讀取資料,一邊利用相同的Connection,來進行其他資料的查詢、新增、修改、刪除等等動作。
現在我們可以利用SQL Server 2005所提供的功能MARS (Multiple Active Result Sets),它允許在單一資料庫連線上執行多的批次作業,並同時操作多個查詢結果集,或同時進行資料的新增、修改、刪除作業。例如,當應用程式開啟一個DataReader而且尚未關閉的情況下,我們可以利用相同的連線,送出另一個查詢命令到資料來源。
預設MARS功能是停用的,必須在連線字串中,增加一組鍵值方可啟用。
標籤: ADO.NET
Oracle資料庫的DML觸發程式是由DML敘述所激發,而敘述的類型決定了DML觸發程式的類型。它可以針對INSERT、UPDATE、DELETE操作定義,也可以在所有的資料列或特定的資料列起作用。敘述層次的觸發程式使用WHEN子句,來評定是否有發生特定類型的改變。在觸發程式內,你可以使用 :old 或 :new的繫結變數,來存取目前被處理的資料。PL/SQL編譯器會把它當成由類型組成的紀錄: triggering_table%ROWTYPE ,定義此觸發程式的表格。使用方式為 :old.field 或 :new.field。它也提供三個布林函數可以判定操作類型,分別為INSERTING、UPDATING、DELETING,當敘述符合時,它就是TRUE;否則就是FALSE。
標籤: Oracle PL/SQL
假設現在我們有4個需求分別是:
1. 新增訂單之後,將庫存量減去訂單的訂購產品數量。
2. 修改產品單價的時後,不得超過原始價值的10%。
3. 如果訂單被刪除了,系統可以寄Mail通知管理人員。
4. 新增訂單時,訂單流水號能夠依照日期所產生,例如:200803270123。
我們要如何建立觸發程序,並達到我們的需求 ?
觸發程序簡易說明:
Trigger Definition:
1. 觸發程序是依附資料表或檢視存在,本身是整個交易的延伸。
2. 從應用程式進行資料處理異動作業開始到觸發程序執行完畢,都屬於同一個交易的範圍。
DML Trigger:
(1) After Trigger:在執行Insert、Update、Delete陳述式的動作之後執行。
(2) Instead of Trigger:取代原先的Insert、Update、Delete的動作。
我們先建立兩個測試用的資料表,並依照需求順序建立對應的觸發程序。
標籤: SQL Server T-SQL