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