在SQL Server中謹(jǐn)慎導(dǎo)入導(dǎo)出大容量數(shù)據(jù)(一)
在數(shù)據(jù)庫初始化過程中,管理員需要面對的一個(gè)現(xiàn)實(shí)問題就是如何把大容量的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫系統(tǒng)中。在SQL Server數(shù)據(jù)庫中提供了一些大容量數(shù)據(jù)導(dǎo)入導(dǎo)出的工具供數(shù)據(jù)庫管理員實(shí)用。如管理員可以通過bcp實(shí)用工具,實(shí)現(xiàn)大容量導(dǎo)出數(shù)據(jù)和大容量導(dǎo)入數(shù)據(jù)并生成格式化文件。如可以利用bulk insert語句將大容量數(shù)據(jù)直接從數(shù)據(jù)文件導(dǎo)入數(shù)據(jù)庫表或者未分區(qū)的視圖中去等等。
雖然在SQL Server數(shù)據(jù)庫中提供了這些實(shí)用工具。不過管理員在實(shí)際工作中,仍然需要謹(jǐn)慎對待這項(xiàng)工作。具體的來說,在大容量數(shù)據(jù)導(dǎo)入導(dǎo)出的過程中,需要注意如下幾方面的內(nèi)容。
一、 盡量采用系統(tǒng)提供的工具來倒入導(dǎo)出大容量的數(shù)據(jù)。
以上筆者提到的幾款實(shí)用工具,他們有一個(gè)共同的特點(diǎn),即在導(dǎo)入的過程中會(huì)對大容量的數(shù)據(jù)進(jìn)行一定的優(yōu)化。如會(huì)規(guī)范一些數(shù)據(jù)的格式、節(jié)省導(dǎo)入導(dǎo)出的時(shí)間等等。但是利用這些工具的話,跟其他普通的數(shù)據(jù)導(dǎo)入導(dǎo)出工具有一個(gè)差異,就是大容量導(dǎo)入操作不支持逗號(hào)分隔符文件中導(dǎo)入數(shù)據(jù),也就是常說的文本文件。雖然此時(shí)管理員也可以通過其他的工具來導(dǎo)入文件文件格式的大容量數(shù)據(jù),但是通常情況下筆者不建議這么做。因?yàn)槠渌墓ぞ卟恢С謱?dǎo)入過程中的優(yōu)化功能。為此筆者建議先用其他工具,如ACCESS等中間工具先把文本文件中的數(shù)據(jù)轉(zhuǎn)化為普通的表格形式,然后再利用上面這些工具導(dǎo)入到系統(tǒng)中。這雖然會(huì)增加一定的工作量,但是卻可以保證大容量數(shù)據(jù)的質(zhì)量。為此,筆者在實(shí)際工作中,如果用戶遇到這種問題筆者是強(qiáng)烈建議他們要采用系統(tǒng)提供的工具來導(dǎo)入導(dǎo)出大容量數(shù)據(jù)。
另外,利用格式化文件來提高大容量數(shù)據(jù)的規(guī)范化,也是一個(gè)不錯(cuò)的選擇。上面提到的幾款大容量導(dǎo)入導(dǎo)出工具都支持使用專門的格式化文件來存儲(chǔ)原始數(shù)據(jù)文件中每個(gè)字段的格式信息。格式化文件還可以包含相應(yīng)的數(shù)據(jù)庫表的有關(guān)信息。格式化文件可以用于提供從數(shù)據(jù)庫實(shí)例大容量導(dǎo)出數(shù)據(jù)和向其中大容量導(dǎo)入數(shù)據(jù)時(shí)所需的所有格式信息。通俗的講,格式化文件提供了一種解釋導(dǎo)入期間數(shù)據(jù)文件中數(shù)據(jù)的格式以及設(shè)置導(dǎo)出期間數(shù)據(jù)文件中數(shù)據(jù)格式的靈活方式。這種靈活性使得解釋數(shù)據(jù)時(shí)無需編寫專用代碼,也無需為滿足數(shù)據(jù)庫或外部應(yīng)用程序的特殊需要而重新設(shè)置數(shù)據(jù)的格式。如果靈活利用格式化文件,那么用戶可以直接按需要的格式導(dǎo)出或者導(dǎo)入大容量數(shù)據(jù),而不用事后再進(jìn)行額外的格式調(diào)整。
二、 選擇合適的數(shù)據(jù)庫日志操作模式。
正如大家所知道的,用戶在數(shù)據(jù)庫中做的任何變化,都會(huì)記錄在相關(guān)的日志中。導(dǎo)入導(dǎo)出大容量數(shù)據(jù)也不例外。可是由于大容量數(shù)據(jù)比較大,會(huì)占用比較大的事務(wù)日志功能。為此筆者建議,在用戶導(dǎo)入大容量數(shù)據(jù)之前,最好選擇合適的數(shù)據(jù)庫日志操作模式。筆者的做法是,如果用戶需要導(dǎo)入大容量數(shù)據(jù),那么最好選擇大容量日志恢復(fù)模式。等到導(dǎo)入工作完成之后,再恢復(fù)到原先的模式。
這主要是因?yàn)樵诖笕萘咳罩灸J较拢瑢τ诖笕萘繑?shù)據(jù)導(dǎo)入工作中說,支持力度相對來說比較好。與其他日志恢復(fù)模式相比(如完全恢復(fù)模式),大容量日志恢復(fù)模式只對大容量操作進(jìn)行最小記錄。為此大容量日志操作恢復(fù)模式保護(hù)大容量操作不受硬件故障的危害,提供比較好的性能并且占用日志的空間也是最小的。所以,使用大容量日志恢復(fù)有助于防止事務(wù)日志出現(xiàn)空間不足的情況,因?yàn)榇笕萘咳罩净謴?fù)不會(huì)插入日志行。這個(gè)大容量日志操作模式,非常適用于使用完整恢復(fù)模式的數(shù)據(jù)庫。對無索引表執(zhí)行大容量操作時(shí),大容量日志恢復(fù)模式非常有用。
不過大容量日志操作模式也具有一定的風(fēng)險(xiǎn)。如大容量日志恢復(fù)模式會(huì)增加這些大容量復(fù)制操作丟失數(shù)據(jù)的風(fēng)險(xiǎn)。因?yàn)榇笕萘咳罩静僮髂J綄?huì)阻止數(shù)據(jù)庫系統(tǒng)捕獲對每個(gè)事務(wù)逐一所做的更改。如果日志備份包含大容量日志操作,則無法還原到該日志備份中的時(shí)點(diǎn),而只能還原整個(gè)日志備份。另外在大容量日志恢復(fù)模式下,如果日志備份覆蓋了任何大容量操作,則日志備份將包含由大容量操作所更改的日志記錄和數(shù)據(jù)頁。這對于捕獲大容量日志操作的結(jié)果至關(guān)重要。合并的數(shù)據(jù)區(qū)可使日志備份變得非常龐大。再者,備份日志需要訪問包含大容量日志事務(wù)的數(shù)據(jù)文件。如果無法訪問任何受影響的數(shù)據(jù)庫文件,則事務(wù)日志將無法備份,并且在此日志中提交的所有操作都會(huì)丟失。所以大容量日志備份模式并不是安全的日志模式。
