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