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