新聞中心
隨著企業(yè)對數(shù)據(jù)存儲的需求不斷增長,數(shù)據(jù)庫技術(shù)得到了廣泛應(yīng)用。數(shù)據(jù)庫有著很多優(yōu)點,例如數(shù)據(jù)安全性高、數(shù)據(jù)共享性能好等,但也存在著一些弊端,例如數(shù)據(jù)恢復(fù)時間長、備份數(shù)據(jù)的容量大等。

為了解決備份數(shù)據(jù)的容量大、備份和恢復(fù)時間耗時的問題,數(shù)據(jù)庫快照抽取成為了備份和恢復(fù)數(shù)據(jù)的重要技術(shù)之一。本篇文章將介紹數(shù)據(jù)庫快照以及快照抽取的原理、優(yōu)勢和應(yīng)用范圍。
一、數(shù)據(jù)庫快照
數(shù)據(jù)庫快照是指一種特殊的備份機制,它可以將整個數(shù)據(jù)庫的圖像(snapshot)復(fù)制到相應(yīng)的存儲位置,而不會影響到生產(chǎn)數(shù)據(jù)庫的正常運行。
在生成數(shù)據(jù)庫快照時,數(shù)據(jù)庫系統(tǒng)會暫停I/O處理,鎖定所有數(shù)據(jù)頁,并將它們寫入快照中??煺罩械臄?shù)據(jù)頁不會隨著數(shù)據(jù)庫的更新而發(fā)生變化,因此在備份和恢復(fù)數(shù)據(jù)時可以大大提高備份/還原效率。
數(shù)據(jù)庫快照提供了如下幾點優(yōu)勢:
1. 快速恢復(fù):當在生產(chǎn)數(shù)據(jù)庫中遇到了錯誤時,可以在不影響生產(chǎn)環(huán)境的前提下,使用數(shù)據(jù)庫快照快速恢復(fù)到數(shù)據(jù)庫出錯之前的狀態(tài)。
2. 方便備份:使用數(shù)據(jù)庫快照可以快速備份整個數(shù)據(jù)庫而不會中斷業(yè)務(wù)運行,這樣就可以節(jié)省備份時間,縮短恢復(fù)時間,提高數(shù)據(jù)安全性。
3. 數(shù)據(jù)隔離:在測試環(huán)境中可以使用數(shù)據(jù)庫快照來隔離測試數(shù)據(jù),這樣在測試過程中對生產(chǎn)數(shù)據(jù)的影響可以最小化。
4. 提高數(shù)據(jù)可用性:在應(yīng)對軟硬件故障或者網(wǎng)絡(luò)問題時,快照可以充當一個備份的功能。
二、數(shù)據(jù)庫快照抽取
數(shù)據(jù)庫快照抽取通過使用存儲別名(storage alias)來創(chuàng)建快照。其原理是將快照轉(zhuǎn)換成短暫的、“干凈”的數(shù)據(jù)庫副本,可以使用數(shù)據(jù)庫管理工具在其中執(zhí)行查詢和DML語句。使用了快照抽取后,用戶可以只恢復(fù)某一時間點的數(shù)據(jù)或某一表的數(shù)據(jù),而不是一整個快照。
數(shù)據(jù)庫快照抽取有如下優(yōu)勢:
1. 備份效率高:快照抽取可以將普通的全量備份轉(zhuǎn)換成基于增量的備份,大大減少備份時間和存儲空間。
2. 恢復(fù)數(shù)據(jù)效率高:當需要恢復(fù)數(shù)據(jù)時,只需要恢復(fù)特定的表、特定的數(shù)據(jù)與特定的時間段,而不需要將整個數(shù)據(jù)庫恢復(fù)到最初狀態(tài)。
3. 降低備份數(shù)據(jù)的存儲空間:快照抽取可以選擇只備份最新數(shù)據(jù)的特點,可以大大降低備份數(shù)據(jù)的存儲空間及對存儲空間的使用。
三、數(shù)據(jù)庫快照抽取的應(yīng)用范圍
數(shù)據(jù)庫快照抽取可以廣泛應(yīng)用于以下領(lǐng)域:
1. 教育和科研領(lǐng)域:在建立教育或科研項目時,數(shù)據(jù)庫快照抽取可以用于快速創(chuàng)建項目的測試環(huán)境,以提高開發(fā)人員的效率。
2. 金融行業(yè):需要數(shù)據(jù)庫快照備份來保證金融數(shù)據(jù)的安全性。而數(shù)據(jù)庫快照抽取可以大大縮短備份時間。
3. 互聯(lián)網(wǎng)行業(yè):在互聯(lián)網(wǎng)行業(yè)中,數(shù)據(jù)庫快照抽取可以用于在線交易平臺等系統(tǒng)中,通過備份特定的數(shù)據(jù)將交易損失降至最小。
4. 大型企業(yè):一些大型企業(yè)需要大量的數(shù)據(jù)備份和存儲,數(shù)據(jù)庫快照抽取技術(shù)可以快速有效地進行備份,減少了備份和還原的時間。
數(shù)據(jù)庫快照抽取技術(shù)是一種非常重要的數(shù)據(jù)庫備份技術(shù),可以大大簡化數(shù)據(jù)備份和恢復(fù)的工作,并提高數(shù)據(jù)的可靠性、可用性和安全性。因此,對于那些需要頻繁備份數(shù)據(jù)并且想要提高備份效率的企業(yè)來說,數(shù)據(jù)庫快照抽取是非常有用的技術(shù)。
相關(guān)問題拓展閱讀:
- 數(shù)據(jù)庫詳解之事務(wù)
- 如何創(chuàng)建數(shù)據(jù)庫快照
- 什么是snapshot database
數(shù)據(jù)庫詳解之事務(wù)
究竟什么是數(shù)據(jù)庫的事務(wù),為什么數(shù)據(jù)庫需要支持事務(wù),為了實現(xiàn)數(shù)據(jù)庫事務(wù)各種數(shù)據(jù)庫的是如何設(shè)計的。還是只談理解,歡迎大家來討論。
1. 數(shù)據(jù)庫事務(wù)是什么
事務(wù)的定義,已經(jīng)有太多文章寫過,我就不重復(fù)了。我理解的事務(wù)就是用來保證數(shù)據(jù)操作符合業(yè)務(wù)邏輯要求而實現(xiàn)的一系列功能。換句話說,如果數(shù)據(jù)庫不支持事務(wù),上面業(yè)務(wù)系統(tǒng)的程序員就需要自己寫代碼保證相關(guān)數(shù)據(jù)處理邏輯的正確性。而數(shù)據(jù)庫事務(wù)就是把一系列保證數(shù)據(jù)庫處理邏輯正確性的通用功能在數(shù)據(jù)庫內(nèi)實現(xiàn),并且盡量提高效率。
舉個例子,數(shù)據(jù)庫最開始普及就是在金融業(yè),銀行的存取款場景就是一個最典型的OLTP數(shù)據(jù)庫場景,而事務(wù)就是設(shè)計用來保證類似場景的業(yè)務(wù)邏輯正確性的。
!(
,type_ZHJvaWRzYW5zZmFGJhY2s,shadow_50,text_Q1NETiBAd2luZHRhbGtlcnd5,size_20,color_FFFFFF,t_70,g_se,x_16)
**原子性**,如果你要給家人轉(zhuǎn)賬,必須在你的賬戶里扣掉100塊,在家人賬戶里加上100塊,這兩筆操作需要一起完成,業(yè)務(wù)邏輯才是正確的。但是程序在做修改的時,肯定會有先后順序,試想一下程序扣了你的錢,這個時候程序崩潰了,家人賬戶的錢沒有加上。那這100塊是不是消失了?你是不是要發(fā)瘋?那么,就把這兩筆操作放進一個事務(wù)里,通過原子性保證,這兩筆操作要么都成功,要么都失敗。這樣才能保證業(yè)務(wù)邏輯的正確性。
**一致性**,有很多文章講過一致性,但是很多人會把一致性跟原子性混在一起說。事務(wù)的一致性指的是指每一個事務(wù)必須保證執(zhí)行之后所有庫內(nèi)的規(guī)則依舊成立。比如內(nèi)外鍵,constraint,觸發(fā)器等。舉例來說,你在儲蓄卡里有100元,理財賬戶里有100元,基金賬戶有100元,那么你在資產(chǎn)總和里會看到300元,這個300元必須是其他三個賬戶余額加在一起得到的。你在給家人轉(zhuǎn)帳100元是從儲蓄卡里轉(zhuǎn)出去了100元,那么在數(shù)據(jù)庫上可以通過創(chuàng)建觸發(fā)器的方式,當儲蓄卡余額賬戶減100元的同時,把資產(chǎn)總和也同步減去100,不然的話,就會出現(xiàn)邏輯上的錯誤,因為你已經(jīng)轉(zhuǎn)走了100塊儲蓄卡余額,實際資產(chǎn)總和應(yīng)該是200,如果還是300,數(shù)據(jù)庫狀態(tài)就不一致了。所以實現(xiàn)事務(wù)的時候,必須要保證相關(guān)聯(lián)的觸發(fā)器以及其他所有的內(nèi)部規(guī)則都執(zhí)行成功,事務(wù)才能算執(zhí)行成功。如果在減去資產(chǎn)總時出錯,那么這筆轉(zhuǎn)帳交易也不能成功。因為這樣數(shù)據(jù)庫就會進入不一致的狀態(tài)。
那么這里跟原子性的區(qū)別到底在哪里呢?原子性是指個多個用戶指令之間必須作為一個整體完成或失敗,而一致性更多是數(shù)據(jù)庫內(nèi)的相關(guān)數(shù)據(jù)規(guī)則必須同時完成或失敗。
**持久性**,最容易理解的一個,事務(wù)只要提交了,那么對數(shù)據(jù)庫的修改就會保存下來不會丟了。簡單來說,只要提交了,數(shù)據(jù)庫就算崩潰了,重啟之后你剛存的100塊依然在你的賬戶里。
**隔離性**,每個事務(wù)相對于其他的事務(wù)是有一定獨立性的,不能互相影響。因為數(shù)據(jù)庫需要支持并發(fā)的操作來提高效率。在并發(fā)操作時,一定要通過操作之間的隔離來保證業(yè)務(wù)邏輯的正確性。比如,你轉(zhuǎn)帳100塊給家人,一系列操作的最后一步可能是輸入驗證碼,這個時候轉(zhuǎn)帳還沒有完成,但是在數(shù)據(jù)庫里你的賬戶對應(yīng)的記錄中已經(jīng)減去100塊,家人賬戶也加了100塊,就等著驗證碼輸入以后,事務(wù)提交,完成操作。那么,這個時候,家人通過手機銀行能夠查到這100塊么?你的答案可能是不能,因為這樣才符合業(yè)務(wù)邏輯,因為你的轉(zhuǎn)帳操作還沒有提交,事務(wù)還沒有完成。那么數(shù)據(jù)庫就應(yīng)該保證這兩個并發(fā)操作之間具有一定的隔離性。
那么到底應(yīng)該隔離到什么程度呢?隔離性又分為4個等級:由低到高依次為Read uncommitted(讀未提交)、Read committed(讀提交)、Repeatable read(可重復(fù)讀?。erializable(序列化),這四個級別可以逐個解決臟讀、不可重復(fù)讀、幻象讀這幾類問題。這些東西是什么意思?請有興趣的小伙伴自行百度,很多文章都寫的很清楚。
那么怎么理解不同的隔離等級呢,首先要理解并發(fā)操作,并發(fā)操作就是指有不同的用戶同時對一個數(shù)據(jù)進行讀、寫操作,那么在這個過程中,每個用戶應(yīng)該看到什么數(shù)據(jù)才能保證業(yè)務(wù)邏輯的正確性呢? 如果是前面存取款的場景,我必須看到的是已經(jīng)存進來的錢,也就是必須是已經(jīng)提交的事務(wù)。而12306刷火車票呢,你可以看到有10張余票,但是在下單的時候告訴你票賣完了,因為同時有10個用戶把票買掉了,你需要重新刷余票,這個也是可以接受的,也就是說我可以讀到一些虛假的余票,這樣在業(yè)務(wù)上也沒有什么問題。那么在設(shè)計這兩個不同系統(tǒng)時,就可以選擇不同的事務(wù)隔離級別來實現(xiàn)不同的并發(fā)效果。不同的隔離等級就是要在系統(tǒng)的并發(fā)性和數(shù)據(jù)邏輯的嚴謹性之間做出的平衡。
2. 數(shù)據(jù)庫如何實現(xiàn)事務(wù)
數(shù)據(jù)庫實現(xiàn)事務(wù)會有多種不同的方式,但基本的原理類似,比如都需要對事務(wù)進行統(tǒng)一的編號處理,都需要記錄事務(wù)的狀態(tài)(是成功了還是失敗了),都需要在數(shù)據(jù)存儲的層面對事務(wù)進行支持,以明確哪些數(shù)據(jù)是被哪些事務(wù)、插入、修改和刪除的。同時還會記錄事務(wù)日志等,對事務(wù)進行系統(tǒng)化的管理以實現(xiàn)數(shù)據(jù)的原子性,一致性和持久性。
要實現(xiàn)事務(wù)的隔離性,最基礎(chǔ)的就是通過加鎖機制把并發(fā)操作適當?shù)拇谢瘉肀WC數(shù)據(jù)操作的正確邏輯。但是為了要保證系統(tǒng)具有良好的并發(fā)性能,必須要在實現(xiàn)事務(wù)隔離性時需要找到合理的平衡點。大部分數(shù)據(jù)庫(包括Oracle,MySQL,Postgres在內(nèi))在做并發(fā)控制的時候都會采用MVCC(多版本并發(fā)控制)的機制來保證系統(tǒng)具有較高的并發(fā)性,不同數(shù)據(jù)庫實現(xiàn)MVCC的具體方案也不盡相同,但其基本原理類似。
3. MVCC實現(xiàn)原理
所謂MVCC,就是數(shù)據(jù)庫中的同一查詢根據(jù)相關(guān)事務(wù)執(zhí)行的先后順序以及隔離級別的不同,可能會存在不同版本的結(jié)果,通過這樣的手段來保證大部分查詢操作不會被修改操作阻塞并保證數(shù)據(jù)邏輯的正確性。也就是數(shù)據(jù)庫通過保存多個版本的數(shù)據(jù)( 歷史 數(shù)據(jù))來提高系統(tǒng)的并發(fā)查詢能力。簡單來說就是用存儲空間來交換并發(fā)能力。下面以Postgres為例介紹一下MVCC的一種實現(xiàn)方式幫助大家理解這個重要的數(shù)據(jù)庫概念。通過下面的圖來解釋Posrgres里最基本的數(shù)據(jù)可見性是如何實現(xiàn)多版本控制的。
!(
,type_ZHJvaWRzYW5zZmFGJhY2s,shadow_50,text_Q1NETiBAd2luZHRhbGtlcnd5,size_20,color_FFFFFF,t_70,g_se,x_16)
首先,Postgres里的每一個事務(wù)都有編號,這里可以簡單理解為時間順序編號,編號越大的事務(wù)發(fā)生越晚。然后,數(shù)據(jù)庫里的每一行記錄都會保存創(chuàng)建這條記錄的事務(wù)號(Cre),也會在記錄刪除時保存刪除這條記錄的事務(wù)號(Exp),換句話說,只要Exp這里一列里記錄了事務(wù)編號,就說明這條記錄被刪除了。那么一個事務(wù)應(yīng)該能看見那些記錄呢?Postgres里每一個事務(wù)都會保存一個當前系統(tǒng)的事務(wù)快照(Snapshot),這個快照里會保存事務(wù)創(chuàng)建時當前系統(tǒng)的更高(最晚)事務(wù)編號,以及目前還在進行中的事務(wù)編號。那么如上圖所示的一個事務(wù)的快照里更高事務(wù)編號為100,目前正在進行的事務(wù)有25,50和75。那么對應(yīng)左邊數(shù)據(jù)記錄,這6行數(shù)據(jù)的可見性就如同標注的一般:
之一行,Cre 30,沒有刪除,在100這個時間點,應(yīng)該能看到。
第二行,Cre 50,沒有刪除,但是50這個事務(wù)還沒有提交,正在進行中,所以看不見。
第三行,Cre 110,沒有刪除,但是100這個時間點110事務(wù)還沒有發(fā)生,所以看不見。
第四行,Cre 30,Exp 80,在80的時候數(shù)據(jù)被刪掉了,所以看不見。
第五行,Cre 30,Exp 75,在30的時候被創(chuàng)建,75時候被刪掉了,但是75這個事務(wù)在100的時候還沒有提交,所以這條記錄在100的時候還沒有刪掉,所以看得見。
第六行,Cre30,Exp 110,在30的時被創(chuàng)建,110時候被刪掉,但是在100時候,110還沒有發(fā)生,所以看得見。
綜上,就是這個事務(wù)對這六條記錄的可見性,也就是一個數(shù)據(jù)版本。那么大家可以看一下如果另一個事務(wù)的快照里存的是更高事務(wù)編號為110,正在進行的事務(wù)為50,那么它能看到的數(shù)據(jù)應(yīng)該是哪幾行呢?同時大家也看到,Postgres里刪除一行數(shù)據(jù)其實就是在這一行的Exp這個列記錄一個刪除事務(wù)的編號,相當于做了一個刪除標記,而數(shù)據(jù)沒有真正被刪除,因此Postgres數(shù)據(jù)庫需要定期做數(shù)據(jù)清理操作(Vacuum)。Pstgres的在現(xiàn)實場景里會比這里介紹的要復(fù)雜,因為我們這里假定所有的事務(wù)最終都是正確提交了,如果存在某些事務(wù)沒有提交的情況,那么可見性就會更加復(fù)雜,這里不再展開了。
如何創(chuàng)建數(shù)據(jù)庫快照
任何能創(chuàng)建數(shù)據(jù)庫的用戶都可以創(chuàng)建數(shù)據(jù)庫快照。創(chuàng)建快照的唯一方式是使用 Transact-SQL。注意:有關(guān)命名數(shù)據(jù)庫快照、設(shè)置創(chuàng)建數(shù)據(jù)庫快照的時間和限制數(shù)據(jù)庫快照成員的注意事項,請參閱創(chuàng)建數(shù)據(jù)庫快照。創(chuàng)建數(shù)據(jù)庫快照根據(jù)源數(shù)據(jù)庫的當前大小,確保有足夠的磁盤空間存放數(shù)據(jù)庫快照。數(shù)據(jù)庫快照的更大大小為創(chuàng)建快照時源數(shù)據(jù)庫的大小。使用 AS SNAPSHOT OF 子句對文件執(zhí)行 CREATE DATABASE 語句。創(chuàng)建快照需要指定源數(shù)據(jù)庫的每個數(shù)據(jù)庫文件的邏輯名稱。有關(guān)創(chuàng)建數(shù)據(jù)庫快照的語法的正式說明,請參閱 CREATE DATABASE (Transact-SQL)。注意:創(chuàng)建數(shù)據(jù)庫快照時,CREATE DATABASE 語句中不允許有日志文件、脫機文件、還原文件和不起作用的文件。示例本節(jié)包含創(chuàng)建數(shù)據(jù)庫快照的示例。A. 對 AdventureWorks 數(shù)據(jù)庫創(chuàng)建快照此示例對AdventureWorks數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫快照??煺彰QAdventureWorks_dbss_1800及其稀疏文件的名稱AdventureWorks_data_1800.ss指明了創(chuàng)建時間 6 P.M.(1800 小時)。復(fù)制代碼CREATE DATABASE AdventureWorks_dbss1800 ON( NAME = AdventureWorks_Data, FILENAME = ‘C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\AdventureWorks_data_1800.ss’ )AS SNAPSHOT OF AdventureWorks;GO注意:示例中隨意使用了擴展名 .ss。B. 對 Sales 數(shù)據(jù)庫創(chuàng)建快照此示例對Sales數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫快照sales_snapshot1200。
什么是snapshot database
中文是快照數(shù)據(jù)庫
我們可以知道5000這個地址是在第9頁的第392個字節(jié)處,于是我們的NF_read函數(shù)將這樣發(fā)送命令和參數(shù)
column_addr=5000%512;
page_address=(5000>>9);
NF_CMD=0x01;//要從2nd half開始讀取 所以要發(fā)送命令0x01
NF_ADDR= column_addr &0xff;//1st Cycle A
NF_ADDR=page_address& 0xff
NF_ADDR=(page_address>>8)&0xff; //3rd.Cycle A
NF_ADDR=(page_address>>16)&0xff;//4th.Cycle A
向NandFlash的命令寄存器和地址寄存器發(fā)送完以上命令和參數(shù)之后,我們就可以從rNFDATA寄存器(NandFlash數(shù)據(jù)寄存器)讀取數(shù)據(jù)了.
快照數(shù)據(jù)庫
關(guān)于數(shù)據(jù)庫snapshot抽取的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都創(chuàng)新互聯(lián)科技有限公司,是一家專注于互聯(lián)網(wǎng)、IDC服務(wù)、應(yīng)用軟件開發(fā)、網(wǎng)站建設(shè)推廣的公司,為客戶提供互聯(lián)網(wǎng)基礎(chǔ)服務(wù)!
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡單好用,價格厚道的香港/美國云服務(wù)器和獨立服務(wù)器。創(chuàng)新互聯(lián)成都老牌IDC服務(wù)商,專注四川成都IDC機房服務(wù)器托管/機柜租用。為您精選優(yōu)質(zhì)idc數(shù)據(jù)中心機房租用、服務(wù)器托管、機柜租賃、大帶寬租用,可選線路電信、移動、聯(lián)通等。
名稱欄目:數(shù)據(jù)庫快照抽?。簜浞輸?shù)據(jù)更高效(數(shù)據(jù)庫snapshot抽取)
本文鏈接:http://fisionsoft.com.cn/article/djhdops.html


咨詢
建站咨詢
