基於關係型資料庫的跨庫事務處理方法和系統的製作方法
2023-08-07 01:55:51 1
基於關係型資料庫的跨庫事務處理方法和系統的製作方法
【專利摘要】本發明提供了一種基於關係型資料庫的跨庫事務處理方法和一種基於關係型資料庫的跨庫事務處理系統,其中,所述方法包括:創建多個資料庫連接池,並為所述多個資料庫連接池分配對應的名稱,以用於存儲多個數據源;建立多條SQL語句與多個數據源名稱的關聯關係,並將所述關聯關係存儲至緩存區;遍歷所述多條SQL語句,根據所述多條SQL語句從所述緩存區中獲取對應的所述數據源名稱,並通過所述數據源名稱從所述資料庫連接池中獲取所述數據源,以及將所述多條SQL語句寫入日誌文件;執行所述多條SQL語句,並保存對應的多條執行結果,以及根據所述多條執行結果設置數據源事務控制開關狀態,通過本發明的技術方案,可以有效地保證所有資料庫之間的數據同步性。
【專利說明】基於關係型資料庫的跨庫事務處理方法和系統
【技術領域】
[0001]本發明涉及計算機【技術領域】,具體而言,涉及一種基於關係型資料庫的跨庫事務處理方法和一種基於關係型資料庫的跨庫事務處理系統。
【背景技術】
[0002]隨著商業需求的日益增加,應用程式變得越來越複雜,經常需要訪問多個資料庫,這些資料庫通常分布在不同的地方,即構成了分布式事務。分布式事務修改的數據存儲在多個或多種類型的數據源中,這些數據源分布在多臺機器上,甚至還有更複雜的情況。
[0003]事務裡的所有操作要麼全部做完,要麼都不做,事務成功的條件是事務裡的所有操作都成功,只要有一個操作失敗,整個事務即失敗,需要回滾。比如銀行轉帳,從A帳戶轉100元至B帳戶,分為兩個步驟:1)從A帳戶取100元;2)將100元存入至B帳戶。這兩步要麼一起完成,要麼一起不完成,如果只完成第一步,第二步失敗,則A帳戶的錢會莫名其妙地少了 100元。
[0004]資料庫需要一直處於一致的狀態,事務的運行不會改變資料庫原本的一致性約束。例如,現有完整性約束為:a+b = 10,如果一個事務改變了 a,那麼必須得改變b,使得事務結束後依然滿足a+b = 10,否則事務失敗。
[0005]而且,並發的事務之間不會互相影響,如果一個事務要訪問的數據正在被另外一個事務修改,只要另外一個事務未提交,它所訪問的數據就不受未提交事務的影響。比如,從A帳戶轉100元至B帳戶,在這個交易還未完成的情況下,如果此時B查詢自己的帳戶,是看不到新增加的100元的。
[0006]當事務提交後,它所做的修改將會永久的保存在資料庫上,即使出現宕機也不會丟失。例如,如果轉帳成功了,而此時資料庫宕機了,重啟後,還是能夠看到轉帳成功後的結果O
[0007]對於多種類型的數據源分布在多臺機器上的情況,現有的事務處理方法不能滿足要求,因為如果其中一個資料庫伺服器失敗,無法確保其他的資料庫還有沒提交的數據回滾。換句話說,無法協調發生在不同地方的多個事務處理,就沒有辦法保證事務的原子性。
[0008]因此,如何解決在分布式系統中,由於跨庫操作過程中發生異常,導致的數據不一致成為目前亟待解決的技術問題。
【發明內容】
[0009]本發明正是基於上述問題,提出了一種新的技術方案,通過建立多個數據源與多條SQL語句之間的關聯關係,可以簡化對多個不同資料庫的一致性操作,並有效地保證所有資料庫之間的數據同步性,提高事務處理的靈活性,同時有效地解決了單點故障問題。
[0010]有鑑於此,本發明提出了基於關係型資料庫的跨庫事務處理方法,用於計算機系統進行跨庫事務處理,包括:創建多個資料庫連接池,並為所述多個資料庫連接池分配對應的名稱,以用於存儲多個數據源;建立多條SQL語句與多個數據源名稱的關聯關係,並將所述關聯關係存儲至緩存區,其中,所述多個數據源名稱與所述多個數據源一一對應;遍歷所述多條SQL語句,根據所述多條SQL語句從所述緩存區中獲取對應的所述數據源名稱,並通過所述數據源名稱從所述資料庫連接池中獲取所述數據源,以及將所述多條SQL語句寫入日誌文件;執行所述多條SQL語句,並保存對應的多條執行結果,以及根據所述多條執行結果設置數據源事務控制開關狀態,其中,所述多條執行結果與所述多條SQL語句一一對應。
[0011]在該技術方案中,通過建立並存儲多個資料庫連接池、多個數據源以及多條SQL語句之間的關聯關係,遍歷多條SQL語句,並通過SQL語句在資料庫連接池中獲取對應的數據源,執行多條SQL語句並保存對應的執行結果,此時數據處於預提交狀態,未真正入庫,以及根據多條執行結果數據源事務控制開關狀態,可以簡化對多個不同資料庫的一致性操作,並有效地保證所有資料庫之間的數據同步性,提高事務處理的靈活性,同時有效地解決單點故障問題;在遍歷SQL語句的過程中,將SQL語句按照資料庫分類寫入日誌文件中,當提交多個資料庫事務時,由於某個或多個資料庫出現故障導致已經提交成功的事務無法回滾時,可以通過日誌文件保障操作失敗的數據最終成功入庫。
[0012]在上述技術方案中,優選地,建立所述多條SQL語句與所述多個數據源名稱的關聯關係具體包括:創建資料庫SQL語句存儲列表;根據所述多個所述資料庫連接池名稱與所述資料庫SQL語句存儲列表,建立所述多個資料庫連接池與所述多個SQL語句的關聯關係O
[0013]在該技術方案中,通過創建資料庫SQL語句存儲列表,並根據資料庫連接池的唯一名稱標識和該存儲列表將資料庫連接池與SQL語句進行關聯,可以為簡化對多個不同資料庫的一致性操作,並有效地保證所有資料庫之間的數據同步性提供有利的前提保障。
[0014]在上述技術方案中,優選地,根據所述多條執行結果設置所述數據源事務控制開關狀態具體包括:遍歷完所述多條SQL語句後,分別判斷所述多條執行結果是否正常。
[0015]在上述技術方案中,優選地,在判定每條所述執行結果均正常時,設置所述數據源事務控制開關為打開狀態;以及在判定每條所述執行結果存在異常時,設置所述數據源事務控制開關為關閉狀態。
[0016]在上述技術方案中,優選地,當所述數據源事務控制開關為打開狀態時,執行所述跨庫事務提交操作,並返回執行成功結果;以及當所述數據源事務控制開關為關閉狀態時,執行所述跨庫事務回滾操作,並返回執行失敗結果。
[0017]在該技術方案中,通過判斷每條SQL語句執行結果是否正常,並在均正常時,打開數據源事務控制開關,執行跨庫事務提交操作,並返回執行成功結果,以及在存在異常時,關閉數據源事務控制開關,執行跨庫事務回滾操作,並返回執行失敗結果,即在請求所有相關資料庫準備提交各自的事務分支時,根據數據源事務控制開關所處的狀態,確認是否所有相關資料庫都可以提交各自的事務分支。當某一資料庫收到預提交後,如果可以提交屬於自己的事務分支,則將自己在該事務分支中所做的操作固定記錄下來,此時資料庫將不能再在該事務分支中加入任何操作,但此時資料庫並沒有真正提交該事務,資料庫對共享資源的操作還未釋放。如果由於某種原因資料庫無法提交屬於自己的事務分支,它將回滾自己的所有操作,並返回失敗應答,如此,可以簡化對多個不同資料庫的一致性操作,並有效地保證所有資料庫之間的數據同步性,提高事務處理的靈活性,同時有效地解決單點故障問題。
[0018]在上述技術方案中,優選地,通過中間件控制執行所述跨庫事務提交操作和所述跨庫事務回滾操作。
[0019]在該技術方案中,可以通過中間件控制執行跨庫事務提交操作和跨庫事務回滾操作,也就是說,通過中間件審查所有資料庫返回的預提交結果,如果所有資料庫都可以提交,交易中間件則要求所有資料庫做正式提交,即全局事務被提交;如果有任一資料庫預提交返回失敗,交易中間件則要求所有其它資料庫回滾其操作,即全局事務被回滾,如此,可以有效地保證所有資料庫之間的數據同步性。
[0020]根據本發明的另一方面,還提出了一種基於關係型資料庫的跨庫事務處理系統,用於計算機系統進行跨庫事務處理,包括:創建模塊,用於創建多個資料庫連接池,並控制為所述多個資料庫連接池分配對應的名稱,以用於存儲多個數據源;關聯模塊,用於建立多條SQL語句與多個數據源名稱的關聯關係,並控制將所述關聯關係存儲至緩存區,其中,所述多個數據源名稱與所述多個數據源一一對應;事務提交協調模塊,用於控制遍歷所述多條SQL語句,根據所述多條SQL語句從所述緩存區中獲取對應的所述數據源名稱,並通過所述數據源名稱從所述資料庫連接池中獲取所述數據源,以及控制將所述多條SQL語句寫入日誌文件;以及所述事務提交協調模塊,還用於:控制執行所述多條SQL語句,並保存對應的多條執行結果,以及根據所述多條執行結果設置數據源事務控制開關狀態,其中,所述多條執行結果與所述多條SQL語句對應。
[0021]在該技術方案中,通過建立並存儲多個資料庫連接池、多個數據源以及多條SQL語句之間的關聯關係,遍歷多條SQL語句,並通過SQL語句在資料庫連接池中獲取對應的數據源,執行多條SQL語句並保存對應的執行結果,此時數據處於預提交狀態,未真正入庫,以及根據多條執行結果數據源事務控制開關狀態,可以簡化對多個不同資料庫的一致性操作,並有效地保證所有資料庫之間的數據同步性,提高事務處理的靈活性,同時有效地解決單點故障問題;在遍歷SQL語句的過程中,將SQL語句按照資料庫分類寫入日誌文件中,當提交多個資料庫事務時,由於某個或多個資料庫出現故障導致已經提交成功的事務無法回滾時,可以通過日誌文件保障操作失敗的數據最終成功入庫。
[0022]在上述技術方案中,優選地,所述關聯模塊具體用於:創建資料庫SQL語句存儲列表;根據所述多個所述資料庫連接池名稱與所述資料庫SQL語句存儲列表,建立所述多個資料庫連接池與所述多個SQL語句的關聯關係。
[0023]在該技術方案中,通過創建資料庫SQL語句存儲列表,並根據資料庫連接池的唯一名稱標識和該存儲列表將資料庫連接池與SQL語句進行關聯,可以為簡化對多個不同資料庫的一致性操作,並有效地保證所有資料庫之間的數據同步性提供有利的前提保障。
[0024]在上述技術方案中,優選地,還包括:判斷模塊,用於在遍歷完所述多條SQL語句後,分別判斷所述多條執行結果是否正常;設置模塊,在判定每條所述執行結果均正常時,用於設置所述數據源事務控制開關為打開狀態;在判定每條所述執行結果存在異常時,用於設置所述數據源事務控制開關為關閉狀態。
[0025]在上述技術方案中,優選地,所述事務提交協調模塊還用於:當所述數據源事務控制開關為打開狀態時,控制執行所述跨庫事務提交操作,並控制返回執行成功結果;以及當所述數據源事務控制開關為關閉狀態時,控制執行所述跨庫事務回滾操作,並控制返回執行失敗結果。
[0026]在該技術方案中,通過判斷每條SQL語句執行結果是否正常,並在均正常時,打開數據源事務控制開關,執行跨庫事務提交操作,並返回執行成功結果,以及在存在異常時,關閉數據源事務控制開關,執行跨庫事務回滾操作,並返回執行失敗結果,即在請求所有相關資料庫準備提交各自的事務分支時,根據數據源事務控制開關所處的狀態,確認是否所有相關資料庫都可以提交各自的事務分支。當某一資料庫收到預提交後,如果可以提交屬於自己的事務分支,則將自己在該事務分支中所做的操作固定記錄下來,此時資料庫將不能再在該事務分支中加入任何操作,但此時資料庫並沒有真正提交該事務,資料庫對共享資源的操作還未釋放。如果由於某種原因資料庫無法提交屬於自己的事務分支,它將回滾自己的所有操作,並返回失敗應答,如此,可以簡化對多個不同資料庫的一致性操作,並有效地保證所有資料庫之間的數據同步性,提高事務處理的靈活性,同時有效地解決單點故障問題。
[0027]在上述技術方案中,優選地,通過中間件控制執行所述跨庫事務提交操作和所述跨庫事務回滾操作。
[0028]在該技術方案中,可以通過中間件控制執行跨庫事務提交操作和跨庫事務回滾操作,也就是說,通過中間件審查所有資料庫返回的預提交結果,如果所有資料庫都可以提交,交易中間件則要求所有資料庫做正式提交,即全局事務被提交;如果有任一資料庫預提交返回失敗,交易中間件則要求所有其它資料庫回滾其操作,即全局事務被回滾,如此,可以有效地保證所有資料庫之間的數據同步性。
[0029]通過以上技術方案,可以簡化對多個不同資料庫的一致性操作,並有效地保證所有資料庫之間的數據同步性,提高事務處理的靈活性,同時有效地解決了單點故障問題。
【專利附圖】
【附圖說明】
[0030]圖1示出了根據本發明的一個實施例的基於關係型資料庫的跨庫事務處理方法的流程示意圖;
[0031]圖2示出了根據本發明的一個實施例的基於關係型資料庫的跨庫事務處理系統的結構框圖;
[0032]圖3示出了根據本發明的另一個實施例的基於關係型資料庫的跨庫事務處理方法的流程示意圖;
[0033]圖4示出了根據本發明的一個實施例的建立多個數據源與多個SQL語句建立關聯關係的流程示意圖;
[0034]圖5示出了根據本發明的一個實施例的基於關係型資料庫的跨庫事務處理系統的事務提交協調模塊工作流程示意圖;
[0035]圖6示出了根據本發明的一個實施例的進行跨庫事務提交或跨庫事務回滾的流程不意圖。
【具體實施方式】
[0036]為了能夠更清楚地理解本發明的上述目的、特徵和優點,下面結合附圖和【具體實施方式】對本發明進行進一步的詳細描述。需要說明的是,在不衝突的情況下,本申請的實施例及實施例中的特徵可以相互組合。
[0037]在下面的描述中闡述了很多具體細節以便於充分理解本發明,但是,本發明還可以採用其他不同於在此描述的其他方式來實施,因此,本發明的保護範圍並不受下面公開的具體實施例的限制。
[0038]圖1示出了根據本發明的一個實施例的基於關係型資料庫的跨庫事務處理方法的流程示意圖。
[0039]如圖1所示,根據本發明的一個實施例的基於關係型資料庫的跨庫事務處理方法,用於計算機系統進行跨庫事務處理,包括:步驟102,創建多個資料庫連接池,並為所述多個資料庫連接池分配對應的名稱,以用於存儲多個數據源;步驟104,建立多條SQL語句與多個數據源名稱的關聯關係,並將所述關聯關係存儲至緩存區,其中,所述多個數據源名稱與所述多個數據源一一對應;步驟106,遍歷所述多條SQL語句,根據所述多條SQL語句從所述緩存區中獲取對應的所述數據源名稱,並通過所述數據源名稱從所述資料庫連接池中獲取所述數據源,以及將所述多條SQL語句寫入日誌文件;步驟108,執行所述多條SQL語句,並保存對應的多條執行結果,以及根據所述多條執行結果設置數據源事務控制開關狀態,其中,所述多條執行結果與所述多條SQL語句對應。
[0040]在該技術方案中,通過建立並存儲多個資料庫連接池、多個數據源以及多條SQL語句之間的關聯關係,遍歷多條SQL語句,並通過SQL語句在資料庫連接池中獲取對應的數據源,執行多條SQL語句並保存對應的執行結果,此時數據處於預提交狀態,未真正入庫,以及根據多條執行結果數據源事務控制開關狀態,可以簡化對多個不同資料庫的一致性操作,並有效地保證所有資料庫之間的數據同步性,提高事務處理的靈活性,同時有效地解決單點故障問題;在遍歷SQL語句的過程中,將SQL語句按照資料庫分類寫入日誌文件中,當提交多個資料庫事務時,由於某個或多個資料庫出現故障導致已經提交成功的事務無法回滾時,可以通過日誌文件保障操作失敗的數據最終成功入庫。
[0041]在上述技術方案中,優選地,建立所述多條SQL語句與所述多個數據源名稱的關聯關係具體包括:創建資料庫SQL語句存儲列表;根據所述多個所述資料庫連接池名稱與所述資料庫SQL語句存儲列表,建立所述多個資料庫連接池與所述多個SQL語句的關聯關係O
[0042]在該技術方案中,通過創建資料庫SQL語句存儲列表,並根據資料庫連接池的唯一名稱標識和該存儲列表將資料庫連接池與SQL語句進行關聯,可以為簡化對多個不同資料庫的一致性操作,並有效地保證所有資料庫之間的數據同步性提供有利的前提保障。
[0043]在上述技術方案中,優選地,根據所述多條執行結果設置所述數據源事務控制開關狀態具體包括:遍歷完所述多條SQL語句後,分別判斷所述多條執行結果是否正常。
[0044]在上述技術方案中,優選地,在判定每條所述執行結果均正常時,設置所述數據源事務控制開關為打開狀態;以及在判定每條所述執行結果存在異常時,設置所述數據源事務控制開關為關閉狀態。
[0045]在上述技術方案中,優選地,當所述數據源事務控制開關為打開狀態時,執行所述跨庫事務提交操作,並返回執行成功結果;以及當所述數據源事務控制開關為關閉狀態時,執行所述跨庫事務回滾操作,並返回執行失敗結果。
[0046]在該技術方案中,通過判斷每條SQL語句執行結果是否正常,並在均正常時,打開數據源事務控制開關,執行跨庫事務提交操作,並返回執行成功結果,以及在存在異常時,關閉數據源事務控制開關,執行跨庫事務回滾操作,並返回執行失敗結果,即在請求所有相關資料庫準備提交各自的事務分支時,根據數據源事務控制開關所處的狀態,確認是否所有相關資料庫都可以提交各自的事務分支。當某一資料庫收到預提交後,如果可以提交屬於自己的事務分支,則將自己在該事務分支中所做的操作固定記錄下來,此時資料庫將不能再在該事務分支中加入任何操作,但此時資料庫並沒有真正提交該事務,資料庫對共享資源的操作還未釋放。如果由於某種原因資料庫無法提交屬於自己的事務分支,它將回滾自己的所有操作,並返回失敗應答,如此,可以簡化對多個不同資料庫的一致性操作,並有效地保證所有資料庫之間的數據同步性,提高事務處理的靈活性,同時有效地解決單點故障問題。
[0047]在上述技術方案中,優選地,通過中間件控制執行所述跨庫事務提交操作和所述跨庫事務回滾操作。
[0048]在該技術方案中,可以通過中間件控制執行跨庫事務提交操作和跨庫事務回滾操作,也就是說,通過中間件審查所有資料庫返回的預提交結果,如果所有資料庫都可以提交,交易中間件則要求所有資料庫做正式提交,即全局事務被提交;如果有任一資料庫預提交返回失敗,交易中間件則要求所有其它資料庫回滾其操作,即全局事務被回滾,如此,可以有效地保證所有資料庫之間的數據同步性。
[0049]圖2示出了根據本發明的一個實施例的基於關係型資料庫的跨庫事務處理系統的結構框圖。
[0050]如圖2所示,根據本發明的一個實施例的基於關係型資料庫的跨庫事務處理系統,用於計算機系統進行跨庫事務處理,包括:創建模塊202,用於創建多個資料庫連接池,並控制為所述多個資料庫連接池分配對應的名稱,以用於存儲多個數據源;關聯模塊204,用於建立多條SQL語句與多個數據源名稱的關聯關係,並控制將所述關聯關係存儲至緩存區,其中,所述多個數據源名稱與所述多個數據源一一對應;事務提交協調模塊206,用於控制遍歷所述多條SQL語句,根據所述多條SQL語句從所述緩存區中獲取對應的所述數據源名稱,並通過所述數據源名稱從所述資料庫連接池中獲取所述數據源,以及控制將所述多條SQL語句寫入日誌文件;以及所述事務提交協調模塊206,還用於:控制執行所述多條SQL語句,並保存對應的多條執行結果,以及根據所述多條執行結果設置數據源事務控制開關狀態,其中,所述多條執行結果與所述多條SQL語句對應。
[0051]在該技術方案中,通過建立並存儲多個資料庫連接池、多個數據源以及多條SQL語句之間的關聯關係,遍歷多條SQL語句,並通過SQL語句在資料庫連接池中獲取對應的數據源,執行多條SQL語句並保存對應的執行結果,此時數據處於預提交狀態,未真正入庫,以及根據多條執行結果數據源事務控制開關狀態,可以簡化對多個不同資料庫的一致性操作,並有效地保證所有資料庫之間的數據同步性,提高事務處理的靈活性,同時有效地解決單點故障問題;在遍歷SQL語句的過程中,將SQL語句按照資料庫分類寫入日誌文件中,當提交多個資料庫事務時,由於某個或多個資料庫出現故障導致已經提交成功的事務無法回滾時,可以通過日誌文件保障操作失敗的數據最終成功入庫。
[0052]在上述技術方案中,優選地,所述關聯模塊204具體用於:創建資料庫SQL語句存儲列表;根據所述多個所述資料庫連接池名稱與所述資料庫SQL語句存儲列表,建立所述多個資料庫連接池與所述多個SQL語句的關聯關係。
[0053]在該技術方案中,通過創建資料庫SQL語句存儲列表,並根據資料庫連接池的唯一名稱標識和該存儲列表將資料庫連接池與SQL語句進行關聯,可以為簡化對多個不同資料庫的一致性操作,並有效地保證所有資料庫之間的數據同步性提供有利的前提保障。
[0054]在上述技術方案中,優選地,還包括:判斷模塊208,用於在遍歷完所述多條SQL語句後,分別判斷所述多條執行結果是否正常;設置模塊210,在判定每條所述執行結果均正常時,用於設置所述數據源事務控制開關為打開狀態;在判定每條所述執行結果存在異常時,用於設置所述數據源事務控制開關為關閉狀態。
[0055]在上述技術方案中,優選地,所述事務提交協調模塊206還用於:當所述數據源事務控制開關為打開狀態時,控制執行所述跨庫事務提交操作,並控制返回執行成功結果;以及當所述數據源事務控制開關為關閉狀態時,控制執行所述跨庫事務回滾操作,並控制返回執行失敗結果。
[0056]在該技術方案中,通過判斷每條SQL語句執行結果是否正常,並在均正常時,打開數據源事務控制開關,執行跨庫事務提交操作,並返回執行成功結果,以及在存在異常時,關閉數據源事務控制開關,執行跨庫事務回滾操作,並返回執行失敗結果,即在請求所有相關資料庫準備提交各自的事務分支時,根據數據源事務控制開關所處的狀態,確認是否所有相關資料庫都可以提交各自的事務分支。當某一資料庫收到預提交後,如果可以提交屬於自己的事務分支,則將自己在該事務分支中所做的操作固定記錄下來,此時資料庫將不能再在該事務分支中加入任何操作,但此時資料庫並沒有真正提交該事務,資料庫對共享資源的操作還未釋放。如果由於某種原因資料庫無法提交屬於自己的事務分支,它將回滾自己的所有操作,並返回失敗應答,如此,可以簡化對多個不同資料庫的一致性操作,並有效地保證所有資料庫之間的數據同步性,提高事務處理的靈活性,同時有效地解決單點故障問題。
[0057]在上述技術方案中,優選地,通過中間件控制執行所述跨庫事務提交操作和所述跨庫事務回滾操作。
[0058]在該技術方案中,可以通過中間件控制執行跨庫事務提交操作和跨庫事務回滾操作,也就是說,通過中間件審查所有資料庫返回的預提交結果,如果所有資料庫都可以提交,交易中間件則要求所有資料庫做正式提交,即全局事務被提交;如果有任一資料庫預提交返回失敗,交易中間件則要求所有其它資料庫回滾其操作,即全局事務被回滾,如此,可以有效地保證所有資料庫之間的數據同步性。
[0059]圖3示出了根據本發明的另一個實施例的基於關係型資料庫的跨庫事務處理方法的流程示意圖。
[0060]如圖3所示,根據本發明的另一個實施例的基於關係型資料庫的跨庫事務處理方法,具體流程包括:
[0061]步驟302,創建資料庫連接池(用於存儲數據源),並為每個資料庫連接池定義唯一的名稱;
[0062]步驟304,建立SQL語句與數據源名稱的關聯關係,並放入數據源與SQL語句的關聯裝置(緩衝區)中;
[0063]步驟306,遍歷SQL語句,通過SQL語句從緩衝區獲取對應的數據源名稱,並通過數據源名稱從資料庫連接池中獲取對應的數據源。
[0064]步驟308,執行所有SQL語句,並保存每條SQL執行結果,此時數據處於預提交狀態,數據沒有真正入庫;
[0065]步驟310,循環執行完SQL語句列表後,若每條SQL執行結果都正確,打開事務控制開關(數據源事務控制開關),否則,關閉事務控制開關(數據源事務控制開關);
[0066]步驟312,如果事務控制開關處於打開狀態,執行事務提交操作,返回執行成功結果;如果事務控制開關關閉狀態,執行事務回滾操作,返回執行失敗結果,以保證最終全部數據真正入庫或全部回滾;
[0067]步驟314,當同時提交多個資料庫事務的時,如果出現某一個或多個資料庫出現故障,且已經提交成功的事務無法回滾,通過記入的日誌文件來保障操作失敗的數據最終成功入庫。
[0068]圖4示出了根據本發明的一個實施例的建立多個數據源與多個SQL語句建立關聯關係的流程示意圖。
[0069]如圖4所示,根據本發明的一個實施例的建立多個數據源與多個SQL語句建立關聯關係的流程,具體包括:
[0070]步驟402,建立資料庫連接池,為每個連接池確定唯一名稱標識;
[0071]步驟404,創建資料庫SQL語句存儲列表區;
[0072]步驟406,建立資料庫連接池與SQL語句之間的關聯關係。
[0073]圖5示出了根據本發明的一個實施例的基於關係型資料庫的跨庫事務處理系統的事務提交協調模塊工作流程示意圖。
[0074]如圖5所示,根據本發明的一個實施例的基於關係型資料庫的跨庫事務處理系統的事務提交協調模塊工作流程,具體包括:
[0075]步驟502,向所有相關資料庫發生請求指令;
[0076]步驟504,判斷事務控制開關所處的狀態;
[0077]步驟506,根據所述事務控制開關所處的狀態,執行事務提交或事務回滾操作。
[0078]圖6示出了根據本發明的一個實施例的進行跨庫事務提交或跨庫事務回滾的流程不意圖。
[0079]如圖6所示,根據本發明的一個實施例的進行跨庫事務提交或跨庫事務回滾的流程,具體包括:
[0080]步驟602,存儲多個數據源與多個SQL語句之間的對應關係;
[0081]步驟604,協調多個資料庫之間的事務提交和回滾控制。
[0082]以上結合附圖詳細說明了本發明的技術方案,通過建立多個數據源與多條SQL語句之間的關聯關係,可以簡化對多個不同資料庫的一致性操作,並有效地保證所有資料庫之間的數據同步性,提高事務處理的靈活性,同時有效地解決了單點故障問題。
[0083]在本說明書的描述中,術語「一個實施例」、「具體實施例」等的描述意指結合該實施例或示例描述的具體特徵、結構、材料或特點包含於本發明的至少一個實施例或示例中。在本說明書中,對上述術語的示意性表述不一定指的是相同的實施例或實例。而且,描述的具體特徵、結構、材料或特點可以在任何的一個或多個實施例或示例中以合適的方式結合。
[0084]以上所述僅為本發明的優選實施例而已,並不用於限制本發明,對於本領域的技術人員來說,本發明可以有各種更改和變化。凡在本發明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護範圍之內。
【權利要求】
1.一種基於關係型資料庫的跨庫事務處理方法,用於計算機系統進行跨庫事務處理,其特徵在於,包括: 創建多個資料庫連接池,並為所述多個資料庫連接池分配對應的名稱,以用於存儲多個數據源; 建立多條SQL語句與多個數據源名稱的關聯關係,並將所述關聯關係存儲至緩存區,其中,所述多個數據源名稱與所述多個數據源一一對應; 遍歷所述多條SQL語句,根據所述多條SQL語句從所述緩存區中獲取對應的所述數據源名稱,並通過所述數據源名稱從所述資料庫連接池中獲取所述數據源,以及將所述多條SQL語句寫入日誌文件; 執行所述多條SQL語句,並保存對應的多條執行結果,以及根據所述多條執行結果設置數據源事務控制開關狀態,其中,所述多條執行結果與所述多條SQL語句一一對應。
2.根據權利要求1所述的基於關係型資料庫的跨庫事務處理方法,其特徵在於,建立所述多條SQL語句與所述多個數據源名稱的關聯關係具體包括:創建資料庫SQL語句存儲列表; 根據所述多個所述資料庫連接池名稱與所述資料庫SQL語句存儲列表,建立所述多個資料庫連接池與所述多個SQL語句的關聯關係。
3.根據權利要求2所述的基於關係型資料庫的跨庫事務處理方法,其特徵在於,根據所述多條執行結果設置所述數據源事務控制開關狀態具體包括:遍歷完所述多條SQL語句後,分別判斷所述多條執行結果是否正常。
4.根據權利要求3所述的基於關係型資料庫的跨庫事務處理方法,其特徵在於,在判定每條所述執行結果均正常時,設置所述數據源事務控制開關為打開狀態;以及在判定每條所述執行結果存在異常時,設置所述數據源事務控制開關為關閉狀態。
5.根據權利要求4所述的基於關係型資料庫的跨庫事務處理方法,其特徵在於,當所述數據源事務控制開關為打開狀態時,執行所述跨庫事務提交操作,並返回執行成功結果;以及 當所述數據源事務控制開關為關閉狀態時,執行所述跨庫事務回滾操作,並返回執行失敗結果。
6.根據權利要求5所述的基於關係型資料庫的跨庫事務處理方法,其特徵在於,通過中間件控制執行所述跨庫事務提交操作和所述跨庫事務回滾操作。
7.—種基於關係型資料庫的跨庫事務處理系統,用於計算機系統進行跨庫事務處理,其特徵在於,包括: 創建模塊,用於創建多個資料庫連接池,並控制為所述多個資料庫連接池分配對應的名稱,以用於存儲多個數據源; 關聯模塊,用於建立多條SQL語句與多個數據源名稱的關聯關係,並控制將所述關聯關係存儲至緩存區,其中,所述多個數據源名稱與所述多個數據源一一對應; 事務提交協調模塊,用於控制遍歷所述多條SQL語句,根據所述多條SQL語句從所述緩存區中獲取對應的所述數據源名稱,並通過所述數據源名稱從所述資料庫連接池中獲取所述數據源,以及控制將所述多條SQL語句寫入日誌文件;以及 所述事務提交協調模塊,還用於:控制執行所述多條SQL語句,並保存對應的多條執行結果,以及根據所述多條執行結果設置數據源事務控制開關狀態,其中,所述多條執行結果與所述多條SQL語句——對應。
8.根據權利要求7所述的基於關係型資料庫的跨庫事務處理系統,其特徵在於,所述關聯模塊具體用於:創建資料庫SQL語句存儲列表;根據所述多個所述資料庫連接池名稱與所述資料庫SQL語句存儲列表,建立所述多個資料庫連接池與所述多個SQL語句的關聯關係O
9.根據權利要求8所述的基於關係型資料庫的跨庫事務處理系統,其特徵在於,還包括: 判斷模塊,用於在遍歷完所述多條SQL語句後,分別判斷所述多條執行結果是否正常;設置模塊,在判定每條所述執行結果均正常時,用於設置所述數據源事務控制開關為打開狀態;在判定每條所述執行結果存在異常時,用於設置所述數據源事務控制開關為關閉狀態。
10.根據權利要求9所述的基於關係型資料庫的跨庫事務處理系統,其特徵在於,所述事務提交協調模塊還用於:當所述數據源事務控制開關為打開狀態時,控制執行所述跨庫事務提交操作,並控制返回執行成功結果;以及當所述數據源事務控制開關為關閉狀態時,控制執行所述跨庫事務回滾操作,並控制返回執行失敗結果。
11.根據權利要求10所述的基於關係型資料庫的跨庫事務處理系統,其特徵在於,通過中間件控制執行所述跨庫事務提交操作和所述跨庫事務回滾操作。
【文檔編號】G06F17/30GK104462497SQ201410803168
【公開日】2015年3月25日 申請日期:2014年12月19日 優先權日:2014年12月19日
【發明者】張志紅 申請人:深圳中興網信科技有限公司