aaa视频网站,国产最新进精品视频,国产主播一区二区,999热精品视频,а√天堂资源8在线官网在线,国产免费不卡av,麻豆国产视频

一種基于Oracle數(shù)據(jù)庫(kù)的壓縮數(shù)據(jù)同步方法及裝置的制造方法

文檔序號(hào):8430775閱讀:556來(lái)源:國(guó)知局
一種基于Oracle數(shù)據(jù)庫(kù)的壓縮數(shù)據(jù)同步方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)庫(kù)技術(shù)領(lǐng)域,尤其涉及一種基于Oracle數(shù)據(jù)庫(kù)的壓縮數(shù)據(jù)同步方法及裝置。
【背景技術(shù)】
[0002]Oracle Database (甲骨文數(shù)據(jù)庫(kù))是目前世界上使用最為廣泛的數(shù)據(jù)庫(kù)管理系統(tǒng),Oracle數(shù)據(jù)庫(kù)從邏輯上把數(shù)據(jù)保存在表空間內(nèi),在物理上以數(shù)據(jù)文件的形式存儲(chǔ),其中表空間可以包含多種類(lèi)型的內(nèi)存區(qū)段(例如數(shù)據(jù)區(qū)段和/或索引區(qū)段等),該區(qū)段由一個(gè)或多個(gè)擴(kuò)展(extent)組成,其中擴(kuò)展又由相連的數(shù)據(jù)塊組成,該數(shù)據(jù)塊是數(shù)據(jù)存儲(chǔ)的基本單元,數(shù)據(jù)塊的內(nèi)部又被劃分為公用頭、表目錄、行目錄和可存取空間等,其中公用頭、表目錄和行目錄組成該數(shù)據(jù)塊的頭部信息,該頭部信息不存數(shù)據(jù)庫(kù)中實(shí)際的數(shù)據(jù),而是用來(lái)記錄該數(shù)據(jù)塊的邏輯結(jié)構(gòu),該數(shù)據(jù)塊通過(guò)壓縮字典對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)。
[0003]目前Oracle數(shù)據(jù)庫(kù)的壓縮數(shù)據(jù)復(fù)制方法主要有dblink(data base link,數(shù)據(jù)庫(kù)鏈接)定時(shí)刷新和導(dǎo)出導(dǎo)入的方式移動(dòng)數(shù)據(jù)兩種:其中dblink定時(shí)刷新由于其是在不同的數(shù)據(jù)庫(kù)間對(duì)全量數(shù)據(jù)進(jìn)行的操作,而導(dǎo)出導(dǎo)入的方式移動(dòng)數(shù)據(jù)是手工對(duì)全量數(shù)據(jù)進(jìn)行的操作,故上述兩種Oracle數(shù)據(jù)庫(kù)的數(shù)據(jù)同步方法都需將壓縮數(shù)據(jù)的全量數(shù)據(jù)解壓縮后進(jìn)行復(fù)制,不能僅針對(duì)增量進(jìn)行同步,故導(dǎo)致存儲(chǔ)空間膨脹,并且不適于業(yè)務(wù)較為頻繁的表,占用大量的主機(jī)資源導(dǎo)致同步效率低。

【發(fā)明內(nèi)容】

[0004]本發(fā)明的目的是提供一種基于Oracle數(shù)據(jù)庫(kù)的壓縮數(shù)據(jù)同步方法及裝置,以解決現(xiàn)有Oracle數(shù)據(jù)庫(kù)的數(shù)據(jù)復(fù)制方法需將壓縮數(shù)據(jù)的全量數(shù)據(jù)解壓后導(dǎo)致存儲(chǔ)空間膨脹以及不能僅針對(duì)增量進(jìn)行同步且同步效率低的問(wèn)題。
[0005]本發(fā)明的目的是通過(guò)以下技術(shù)方案實(shí)現(xiàn)的:
[0006]一種基于Oracle數(shù)據(jù)庫(kù)的壓縮數(shù)據(jù)同步方法,包括:
[0007]通過(guò)解析日志獲取Oracle數(shù)據(jù)庫(kù)中壓縮數(shù)據(jù)的修改信息;
[0008]確定所述修改信息對(duì)應(yīng)的數(shù)據(jù)塊及該數(shù)據(jù)塊的位置;
[0009]通過(guò)上述數(shù)據(jù)塊中的行目錄或字典號(hào)讀取出對(duì)應(yīng)的數(shù)據(jù),并將讀取出的數(shù)據(jù)傳輸?shù)侥繕?biāo)端的數(shù)據(jù)庫(kù)中,以實(shí)現(xiàn)與源端的數(shù)據(jù)庫(kù)的壓縮數(shù)據(jù)的同步。
[0010]利用本發(fā)明實(shí)施例提供的方法可以?xún)H針對(duì)增量進(jìn)行同步,避免了每一次修改都必須針對(duì)全量數(shù)據(jù)進(jìn)行同步導(dǎo)致存儲(chǔ)空間膨脹的問(wèn)題,另外首次讀取嵌套字典后再次讀取時(shí),通過(guò)數(shù)據(jù)塊中的行目錄中的數(shù)據(jù)的指針即可直接讀取出對(duì)應(yīng)的數(shù)據(jù)并進(jìn)行同步,極大的提聞了同步效率。
[0011]作為可選地,通過(guò)數(shù)據(jù)塊中的行目錄或字典號(hào)讀取出對(duì)應(yīng)的數(shù)據(jù)的實(shí)現(xiàn)方式為:讀取上述數(shù)據(jù)塊中的數(shù)據(jù)進(jìn)行解壓縮時(shí),若解壓縮數(shù)據(jù)所需的字典號(hào)對(duì)應(yīng)的為嵌套字典,則首次通過(guò)該字典號(hào)讀取出對(duì)應(yīng)的數(shù)據(jù),讀取后在數(shù)據(jù)塊的行目錄中添加解壓后的數(shù)據(jù)對(duì)應(yīng)的指針,當(dāng)再次讀取該數(shù)據(jù)塊中的該字典號(hào)時(shí),直接通過(guò)該數(shù)據(jù)塊的行目錄中的指針讀取出對(duì)應(yīng)的數(shù)據(jù)。
[0012]作為可選地,確定上述修改信息對(duì)應(yīng)的數(shù)據(jù)塊及該數(shù)據(jù)塊的位置的實(shí)現(xiàn)方式為:根據(jù)該修改信息中攜帶的數(shù)據(jù)塊標(biāo)識(shí)信息,確定該修改信息對(duì)應(yīng)的數(shù)據(jù)塊;根據(jù)表空間的結(jié)構(gòu)信息確定數(shù)據(jù)塊的分布列表,通過(guò)該數(shù)據(jù)塊的分布列表確定該數(shù)據(jù)塊的位置。
[0013]作為可選地,將上述數(shù)據(jù)傳輸?shù)侥繕?biāo)端的數(shù)據(jù)庫(kù)中的實(shí)現(xiàn)方式是:將上述數(shù)據(jù)通過(guò)直接路徑裝載傳輸?shù)侥繕?biāo)端的數(shù)據(jù)庫(kù)中。
[0014]一種基于Oracle數(shù)據(jù)庫(kù)的壓縮數(shù)據(jù)同步裝置,包括:
[0015]修改信息獲取模塊,通過(guò)解析日志獲取Oracle數(shù)據(jù)庫(kù)中壓縮數(shù)據(jù)的修改信息;
[0016]位置確定模塊,用于確定修改信息獲取模塊確定的修改信息對(duì)應(yīng)的數(shù)據(jù)庫(kù)及該數(shù)據(jù)塊的位置;
[0017]讀取傳輸模塊,用于通過(guò)該數(shù)據(jù)塊中的行目錄或字典號(hào)讀取出對(duì)應(yīng)的數(shù)據(jù),并將所述數(shù)據(jù)傳輸?shù)侥繕?biāo)端的數(shù)據(jù)庫(kù)中,以實(shí)現(xiàn)與源端的數(shù)據(jù)庫(kù)的壓縮數(shù)據(jù)的同步。
[0018]利用本發(fā)明實(shí)施例提供的裝置可以?xún)H針對(duì)增量進(jìn)行同步,避免了每一次修改都必須針對(duì)全量數(shù)據(jù)進(jìn)行同步導(dǎo)致存儲(chǔ)空間膨脹的問(wèn)題,另外首次讀取嵌套字典后再次讀取時(shí),通過(guò)數(shù)據(jù)塊中的行目錄中的數(shù)據(jù)的指針即可直接讀取出對(duì)應(yīng)的數(shù)據(jù)并進(jìn)行同步,極大的提聞了同步效率。
[0019]進(jìn)一步,讀取傳輸模塊包括讀取模塊,所述讀取模塊,用于讀取上述數(shù)據(jù)塊中的數(shù)據(jù)進(jìn)行解壓縮時(shí),若解壓縮數(shù)據(jù)所需的字典號(hào)對(duì)應(yīng)的為嵌套字典,則首次通過(guò)該字典號(hào)讀取出對(duì)應(yīng)的數(shù)據(jù),讀取后在數(shù)據(jù)塊的行目錄中添加解壓后的數(shù)據(jù)對(duì)應(yīng)的指針,當(dāng)再次讀取上述數(shù)據(jù)塊中的該字典號(hào)時(shí),直接通過(guò)該數(shù)據(jù)塊的行目錄中的指針讀取出對(duì)應(yīng)的數(shù)據(jù),若解壓縮數(shù)據(jù)所需的字典號(hào)對(duì)應(yīng)的不是嵌套字典,則直接讀取解壓縮出的數(shù)據(jù)。
[0020]具體地,位置確定模塊,具體用于根據(jù)上述修改信息中攜帶的數(shù)據(jù)塊標(biāo)識(shí)信息,確定該修改信息對(duì)應(yīng)的數(shù)據(jù)塊;根據(jù)表空間的結(jié)構(gòu)信息確定數(shù)據(jù)塊的分布列表,通過(guò)所述數(shù)據(jù)塊的分布列表確定該數(shù)據(jù)塊的位置。
[0021]進(jìn)一步,讀取傳輸模塊包括傳輸模塊,傳輸模塊用于將上述數(shù)據(jù)通過(guò)直接路徑裝載傳輸?shù)侥繕?biāo)端的數(shù)據(jù)庫(kù)中。
【附圖說(shuō)明】
[0022]圖1為本發(fā)明實(shí)施例提供的一種基于Oracle數(shù)據(jù)庫(kù)的壓縮數(shù)據(jù)同步方法示意圖;
[0023]圖2為本發(fā)明實(shí)施例提供的一種基于Oracle數(shù)據(jù)庫(kù)的壓縮數(shù)據(jù)同步裝置示意圖。
【具體實(shí)施方式】
[0024]本發(fā)明實(shí)施例提供一種基于Oracle數(shù)據(jù)庫(kù)的壓縮數(shù)據(jù)同步方法和裝置。下面將結(jié)合附圖,對(duì)本發(fā)明實(shí)施例進(jìn)行詳細(xì)描述。
[0025]首次進(jìn)行全量同步需要讀取壓縮塊(即壓縮數(shù)據(jù)的數(shù)據(jù)塊),并對(duì)壓縮塊進(jìn)行解壓,具體過(guò)程如下:
[0026]獲得表空間中數(shù)據(jù)塊的分布列表,通過(guò)數(shù)據(jù)塊的分布列表讀出壓縮的數(shù)據(jù)塊,讀取壓縮的數(shù)據(jù)塊時(shí)需要檢查數(shù)據(jù)塊的一致性,檢查數(shù)據(jù)塊一致性主要檢查SCN (SystemChange Number,系統(tǒng)修改號(hào))、首尾一致標(biāo)記和校驗(yàn)碼是否一致。
[0027]具體可以通過(guò)Oracle的基表0BJ$,TAB$, C0L$等,取得該表空間的結(jié)構(gòu)信息,如對(duì)象號(hào),字段列表,字段屬性,數(shù)據(jù)塊分布入口等。
[0028]讀取上述讀出的壓縮的數(shù)據(jù)塊的過(guò)程包括:把字典解壓后存放,使得后續(xù)解壓程序只需要根據(jù)字典號(hào)就可以快速讀出對(duì)應(yīng)的數(shù)據(jù),將讀出的數(shù)據(jù)通過(guò)普通數(shù)據(jù)接口 insert(插入)方式加載或通過(guò)直接路徑裝載(direct path loading)到目標(biāo)數(shù)據(jù)庫(kù),以實(shí)現(xiàn)數(shù)據(jù)庫(kù)的全量壓縮數(shù)據(jù)的同步。
[0029]在首次進(jìn)行全量同步后,只需進(jìn)行增量同步即可,圖1所示為本發(fā)明實(shí)施例提供的基于Oracle數(shù)據(jù)庫(kù)的壓縮數(shù)據(jù)進(jìn)行增量同步方法,具體包括如下操作:
[0030]步驟11、通過(guò)解析日志獲取Oracle數(shù)據(jù)庫(kù)中壓縮數(shù)據(jù)的修改信息。
[0031]具體地,Oracle對(duì)壓縮數(shù)據(jù)的修改信息記錄在在線(xiàn)日志(REDO LOG)或離線(xiàn)日志(ARCHIVE LOG)里,通過(guò)解析上述日志可以找出壓縮數(shù)據(jù)的修改信息,其中,修改信息指示了壓縮數(shù)據(jù)的修改內(nèi)容,例如攜帶修改內(nèi)容所在的數(shù)據(jù)塊的標(biāo)識(shí)信息等等,以使同步的目標(biāo)數(shù)據(jù)庫(kù)只對(duì)該壓縮數(shù)據(jù)的修改內(nèi)容進(jìn)行同步。
[0032]步驟12、確定上述修改信息對(duì)應(yīng)的數(shù)據(jù)塊及該數(shù)據(jù)塊的位置。
[0033]進(jìn)一步,根據(jù)該修改信息中攜帶的數(shù)據(jù)塊標(biāo)識(shí)信息,確定該修改信息對(duì)應(yīng)的數(shù)據(jù)塊;根據(jù)表空間的結(jié)構(gòu)信息確定數(shù)據(jù)塊的分布列表,通過(guò)數(shù)據(jù)塊的分布列表確定該數(shù)據(jù)塊的位置。其中,通過(guò)讀取每個(gè)表空間的文件頭,可以確定數(shù)據(jù)塊的分布列表。值得注意的是,該數(shù)據(jù)塊的分布列表還記錄了實(shí)際數(shù)據(jù)的高水位(high-watermark)。高水位外的數(shù)據(jù)塊是空塊,不必讀。例如,數(shù)據(jù)庫(kù)中壓縮數(shù)據(jù)的修改的內(nèi)容針對(duì)testl表空間,可以查出,壓縮數(shù)據(jù)所在的塊是:dbf file#7,block#92052 (第7號(hào)文件,第92052塊)。
[0034]步驟13、通過(guò)上述數(shù)據(jù)塊中的行目錄或字典號(hào)讀取出對(duì)應(yīng)的數(shù)據(jù),并將該數(shù)據(jù)傳輸?shù)侥繕?biāo)端的數(shù)據(jù)庫(kù)中,以實(shí)現(xiàn)與源端的數(shù)據(jù)庫(kù)的壓縮數(shù)據(jù)的同步。
[0035]進(jìn)一步,讀取上述數(shù)據(jù)塊中的數(shù)據(jù)進(jìn)行解壓縮時(shí),若解壓縮數(shù)據(jù)所需的字典號(hào)對(duì)應(yīng)的為嵌套字典,則首次字典號(hào)讀取出對(duì)應(yīng)的數(shù)據(jù),讀取后在數(shù)據(jù)塊的行目錄中添加解壓后的數(shù)據(jù)對(duì)應(yīng)的指針,當(dāng)再次讀取該數(shù)據(jù)塊中的該字典號(hào)時(shí),直接通過(guò)該數(shù)據(jù)塊的行目錄中的指針讀取出對(duì)應(yīng)的數(shù)據(jù)。若解壓縮數(shù)據(jù)所需的字典號(hào)對(duì)應(yīng)的不是嵌套字典,則直接讀取解壓縮出的數(shù)據(jù)。
[0036]具體地,Oracle數(shù)據(jù)庫(kù)中的數(shù)據(jù)塊的壓縮方式源于字典壓縮,也就是把相同的短語(yǔ)進(jìn)行壓縮。這些相同的短語(yǔ)分段存放在一起,形成了壓縮和解壓所需的壓縮字典。具體在數(shù)據(jù)塊中通過(guò)兩個(gè)表來(lái)存儲(chǔ),其中表O記錄的就是壓縮字典,表I記錄的是壓縮數(shù)據(jù),通過(guò)字典號(hào)碼解壓出具體內(nèi)容。
[0037]目前的方法都是先解壓表O再解壓表I中的壓縮數(shù)據(jù),由于數(shù)據(jù)塊中存在無(wú)效字典信息,大部分字典都是嵌套的,故若一次性全部解壓的話(huà)效率較低。而本申請(qǐng)是先解壓表1,當(dāng)字典不是嵌套字典時(shí),可以直接獲取已經(jīng)解壓后的表I中的數(shù)據(jù),而當(dāng)字典是嵌套字典時(shí),若解壓時(shí)需要表O中的字典,則查字典讀取出對(duì)應(yīng)的數(shù)據(jù)后,將讀取后在數(shù)據(jù)塊的行目錄中添加解壓后的數(shù)據(jù)對(duì)應(yīng)的指針,當(dāng)再次讀取該嵌套字典時(shí),直接通過(guò)所述數(shù)據(jù)塊的行目錄中的指針讀取出對(duì)應(yīng)的數(shù)據(jù);當(dāng)字典不是嵌套字典時(shí),則直接讀取對(duì)表I中的壓縮數(shù)據(jù)進(jìn)行解壓后的數(shù)據(jù)。
[0038]下面實(shí)施例以存儲(chǔ)的數(shù)據(jù)為“中國(guó)移動(dòng)通信集團(tuán)河南公司”為例,字典號(hào)和對(duì)應(yīng)存儲(chǔ)的數(shù)據(jù)如下:
當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1