1、數據分頁輸出
2、事務,事務節點、保存與回滾
3、存儲過程高效
4、分布式部署
5、分區存儲
6、高可用,資料庫鏡像
㈡ Oracle與SQLServer資料庫鏡像對比
資料庫鏡像是將資料庫事務處理從一個資料庫移動到不同環境中的另一個資料庫中 鏡像的拷貝是一個備用的拷貝 不能直接訪問 它只用在錯誤恢復的情況下 Oracle資料庫與MSSQL數據操作上有很大的不同 但是 在鏡像操作方面有類比的地方 這篇文章關於MSSQL資料庫鏡像在Oracle資料庫中是如何實現的 它們之間存在哪些差異呢
首先 微軟SQL資料庫中的鏡像資料庫類似於Oracle資料庫中的備用資料庫 我說的只是類似 確切的說 我們需要考慮不同資料庫在自己體系中的差異 MSSQL作為一個實例來操作 一個實例包含幾個資料庫 你首先要登錄一個實例 然後選擇哪個資料庫作用於該實例 而在Oracle資料庫中 簡單模式(忽略RAC)就只有一個資料庫與一個實例相聯系 因此 可以這么說 在Oracle資料庫中 備份資料庫(standby database)就完全是主資料庫的快照 而在MSSQL中 鏡像資料庫僅僅是選擇的那個資料庫的備份 但沒有包括代理 登錄 任務(這些或者更多的資料庫項目需要單獨在資料庫鏡像上創建或者復制)這些外部數據項
在伺服器數量上 Oracle的主資料庫和備用資料庫配置最小需要 台 在MSSQL中 最小數據是 個或 個 根據你所選擇的高可用性 高安全性 高性能方式所決定
高可用性方式 這個操作模式選項允許你在兩台伺服器上同步事務寫入 並支持自動錯誤恢復 要使用這個選項 你必須還要使用一個證人伺服器
高保護方式 這個選項可以讓你在兩台伺服器上同步事物寫入 但是錯誤恢復是手工的 因為自動的錯誤恢復不是這個選項的一部分 所以也不會用到證人伺服器
高性能方式 這個選項不關心兩台伺服器上的寫入是否是同步的 因此在性能上有所提高 當使用這個選項的時候 你只能假設鏡像伺服器上的所有事情都是成功完成 這個選項只允許手工的錯誤恢復 因此不會用到證人伺服器
為了保證故障自動恢復 就需要有第三台伺服器 可以稱之為目擊者(另外兩個就是主資料庫和鏡像資料庫) 你可以將這個目擊者當作群集中的一個成員 它實現了 比 投票的能力 當我的一個組件不可達 並因此需要進行錯誤恢復的時候 證人伺服器只有在你想實現自動錯誤恢復的時候才需要用到
在Oracle數據的一個事務中 日誌緩沖器在廢數據寫入數據文件(忽略write ahead情況)前被刷新或者寫入到redo日誌中 這種刷新或者寫入到redo日誌的行為是有必要的 如像實例失敗(使用前滾和回滾恢復過程)這樣的事件發生時 MSSQL也承認將日誌緩沖器寫入到磁碟的重要性 不過這里稱之為硬化(hardening) 首先將事務日誌緩沖器的信息寫入到磁碟或者硬化 接著將日誌記錄塊發送到鏡像資料庫中 鏡像資料庫接收到該日誌記錄塊後 將之存入到某個緩沖器中 隨後依次硬化該日誌記錄塊
當數據發生變化時 MSSQL資料庫如何保持主資料庫和鏡像資料庫的一致性呢?
Oracle用戶非常熟悉SCN 而MSSQL用戶通過使用mirroring_failover_lsn機制(粗略來講就是一個日誌序列號) MSSQL與Oracle不同 MSSQL將事務分離(兩個事務在兩個機器上) 而不是一個分布式事務(在自身提交前需要遠程等待提交)
另外一個相似點 但稍微有些畸變的反射就是redo日誌和事務日誌 在Oracle中 完成的redo日誌將被發送到遠程的伺服器中 將完成的redo日誌應用到備份數據中去 在MSSQL中 事務日誌沒有被傳輸 但是就像我以上提到的 日誌緩沖器數據發送到網路上 這就導致另外一個鏡像反射 備份和恢復模式
在Oracle中 當你處於歸檔模式或者非歸檔模式的時候 這些操作是內定的 如果歸檔redo日誌被傳輸或者提交到一個遠程的伺服器 那麼主資料庫明顯就是在歸檔模式下 那些文件就是這么產生的 運行在這種模式下 允許有少量的數據丟失 因為在發生故障(無論什麼樣的故障)前 恢復能夠在任意一個點上執行 在MSSQL中是類似的 但是有三種狀態需要選擇
《SQL Server聯機叢書》 像許多其它的在線資源一樣 講述了在使用MSSQL時 種恢復模式的不同點 快速的比較有 MSSQL完整模式對應於Oracle中的歸檔模式 簡單模式對應於非歸檔模式 bulk模式與使用直接路徑插入 添加提示 或者與nologging模式操作類似
根據以上三種模式(這三種模式很容易轉換 不需要關機或者重啟)的描述以及日誌緩沖器和歸檔redo日誌的討論中 很容易斷定在MSSQL中進行資料庫的鏡像需要將數據的回復模式設置成完全模式(full model) 簡單模式(Simple model)或許也能行 但是這種模式下維持事務日誌中的小部分數據 在備份中 如果在日誌被刪節了 整個鏡像過程也就破環了 因為當你在將事務發送到鏡像資料庫中的時候 如果日誌被刪節了 這個過程就不能完成
說到資料庫被破壞該怎麼辦呢?
這正是鏡像(或者說備份)的主要目的 當主資料庫斷開或者說遇到故障時候我們希望系統能回到鏡像前或者備份前的狀況去 這如何才能實現呢?我們能自動實現或者手動實現 想實現這些 需要一些已經完成的設置 在MSSQL中 自動故障恢復 回到原來狀態需要在HA模式 事務安全是full 數據傳輸是同步 有目擊伺服器的情況下 這種模式下運行還需要使用企業版的資料庫系統 高安全性和高性能在標准版的情況下也能實現
MSSQL還有其它版本的選擇 但是這些並不如Oracle的反射 干凈 這些版本包括 Developer Workgroup 和 SQL Express 舉個例子 目擊伺服器能夠是任何的版本 但是如果你想給鏡像伺服器做一個快照 那麼你就需要企業或者開發版的了
在設置夥伴(partner 通常有主資料庫和鏡像資料庫組成)過程中 他們的恢復狀態開始起作用 通過使用相同的名字 鏡像在遠程/鏡像伺服器上建立(使用配置資料庫鏡像安全向導是最簡單的方法)起來 並且鏡像資料庫被設置成NORECOVERY 通常它是恢復(recovering)狀態的 在MSSQL中 恢復資料庫是沒有的 因此沒有進行上述的設置 是不能被其他用戶當作只讀資料庫來使用的
為了避免這個中缺陷 你可以給鏡像做一個快照 使得該 影像 對用戶可見 正如我上述所提到的那樣 這需要你的資料庫版本是企業(或者開發)版 這就意味著用戶需要有快照資料庫的知識 知道如何進入存儲它 如何告訴應用程序使用哪個資料庫 慣例上來說 配置文件使用的 NET環境 你能建立一個主資料庫和一個故障回滾的輔資料庫 如果在Oracle中配置過備份資料庫 你就會覺得這很類似
結論
這篇文章內容包括按照Oracle的方式 如何更好的理解在另一種主流的RDBMS上執行鏡像或者復制 試著學習和解釋你的RDBMS如何工作的 從另外一種模式來得到你的注意有助於你搞清楚你當前資料庫系統運行原理 舉個例子 我發現非常有實用價值的是Oracle歸檔模式和MSSQL三種恢復模式之間的關系 使用在MSSQL中的一些術語(夥伴 主資料庫 目擊 鏡像)有助於你構成和識別Oracle中執行資料庫鏡像的操作
lishixin/Article/program/Oracle/201311/18083
㈢ 什麼是SQLSERVER事務處理和事務回滾
事務(Transaction)是訪問並可能更新資料庫中各種數據項的一個程序執行單元(unit)。事務通常由高級資料庫操縱語言或編程語言(如SQL,C++或Java)書寫的用戶程序的執行所引起,並用形如begin transaction和end transaction語句(或函數調用)來界定。事務由事務開始(begin transaction)和事務結束(end transaction)之間執行的全體操作組成。
當一個事務的某一個操作發生問題時,整個事務可以回滾掉,就像沒有做任何操作一樣。這就是事務回滾。
如果一個事務的所有操作均成功,則就可以提交事務,保證事務的完整性。
應用程序主要通過指定事務啟動和結束的時間來控制事務。
以MS SQL Server的Transac-SQL語言為例,
事務啟動:
BEGIN TRAN [ SACTION ] [ transaction_name | @tran_name_variable [ WITH MARK [ 'description' ] ] ]
結束事務
可以使用 COMMIT 或 ROLLBACK 語句結束事務。
1 事務的提交
BEGIN TRANSACTION T1
INSERT tabel1 ...
UPDATE table2 ...
...
/* 當所有成功操作完成,提交事務 */
COMMIT TRAN T1
2 事務的回滾
BEGIN TRANSACTION T1
INSERT tabel1 ...
...
/* 當發生錯誤或事務被取消, 回滾事務 */
ROLLBACK TRAN T1