隨著時間,大多數資料庫應用程式會不斷成長、變得更為複雜,並需要支援更多使用者。 在 Microsoft Office Access 應用程式生命週期的某個階段,您可能會考慮將其升級為 Microsoft SQL Server 資料庫,以最佳化效能、可擴縮性、可用性、安全性、可靠性與復原能力。
本文內容
關於將 Microsoft Office Access 資料庫升級
升級是指將 Access 資料庫中的部分或全部 資料庫物件 移轉至新的或現有的 SQL Server 資料庫,或新的 Access 專案 (.adp) 的流程。
將資料庫升級為 SQL Server 的優點
-
高效能與可擴縮性 在許多情況下,SQL Server 提供比 Access 資料庫更好的效能。 SQL Server 也支援極大型的資料庫,可達數 TB 資料庫大小,遠大於 Access 資料庫目前 2 GB 的限制。 最後,SQL Server 會平行處理查詢 (在單一處理程序中使用多重原生執行緒來處理使用者要求),並能將新增更多使用者時的額外記憶體需求降至最低,因此通常能非常有效率地運作。
-
提高可用性 SQL Server 可讓您在資料庫使用中執行動態備份,您可選擇增量備份或完整備份。 因此,您不需要強制使用者離開資料庫,即可備份資料。
-
增強安全性 使用信任的連線,SQL Server 可以與 Windows 系統安全性整合,以提供網路和資料庫的單一整合式存取,充分運用這兩種安全性系統的優點。 這可讓您更輕鬆地管理複雜的安全性配置。
-
立即復原能力 若系統失敗 (例如作業系統當機或電源中斷),SQL Server 具有自動復原的機制,可以在幾分鐘內將資料庫還原到最後的一致狀態,而不需資料庫系統管理員介入。
-
以伺服器為基礎進行處理 在用戶端/伺服器設定中使用 SQL Server,可先在伺服器上處理資料庫查詢後,再將結果傳送到用戶端,而減少網路流量。 由伺服器進行處理通常更有效率,尤其是在處理大型資料集時。
您的應用程式也可以使用使用者定義函數、預存程序與觸發程序,將應用程式邏輯、商業規則與原則、複雜查詢、資料驗證與參考完整性程式碼集中於伺服器 (而非用戶端) 並進行共用。
升級的方法
[升級精靈] 會將 Access 資料庫中的資料庫物件及其所包含的資料,移轉至新的或現有的 SQL Server 資料庫。
您可以透過以下三種方法使用 [升級精靈]:
-
將 Access 資料庫中的所有資料庫物件升級至 Access 專案,以便建立用戶端/伺服器應用程式。 此方法需要對程式碼和複雜查詢進行一些額外的應用程式變更和修改。
-
只將 Access 資料庫中的資料或資料定義升級至 SQL Server 資料庫。
-
建立 Access 資料庫前端,並以 SQL Server 資料庫做為後端,以便建立 前端或後端資料庫應用程式。 由於程式碼仍在使用 Access 資料庫引擎 (ACE),因此此方法只需要極少的應用程式修改。
在您升級 Access 資料庫之前
在將 Access 資料庫升級為 SQL Server 資料庫或 Access 專案之前,請考慮執行下列動作:
-
備份資料庫 雖然 [升級精靈] 不會從 Access 資料庫中移除任何資料或資料庫物件,但建議您先建立 Access 資料庫的備份複本,再進行升級。
-
確定您有足夠的磁碟空間 您的裝置必須擁有足夠的磁碟空間,以包含升級的資料庫。 當磁碟空間充足時,[升級精靈] 能發揮最佳效能。
-
建立唯一索引 連結資料表必須具備唯一索引,才能在 Access 中更新。 [升級精靈] 可以升級現有的唯一索引,但無法在不存在唯一索引的情況下建立新索引。 如果您希望能夠更新資料表,請務必在升級前為每個 Access 資料表新增唯一索引。
-
在 SQL Server 資料庫上為自己指派適當的權限
-
若要升級至現有資料庫,您必須擁有 CREATE TABLE 和 CREATE DEFAULT 的權限。
-
若要建立新資料庫,您需要 CREATE DATABASE 的權限,以及主資料庫中系統資料表的 SELECT 權限。
-
Access 2007 升級精靈已最佳化,可與 Microsoft SQL Server 2000 和 SQL Server 2005 搭配使用。
使用 [升級精靈]
-
在 [資料庫工具] 索引標籤的 [移動資料] 群組中,按一下 [SQL Server]。
[升級精靈] 會隨即啟動。
步驟 1: 選擇升級至現有資料庫或新資料庫
在 [精靈] 的第一頁,您可指定要將 Access 資料庫升級為現有的 SQL Server 資料庫,或建立新的 SQL Server 資料庫。
-
使用現有的資料庫 如果您選取此選項,然後按一下 [下一步],Access 會顯示 [選取資料來源] 對話方塊,以便您建立與現有 SQL Server 資料庫的 ODBC 連線。
關於 ODBC 資料來源
資料來源是指結合了資料本身與存取該資料所需的連線資訊的資料來源。 資料來源的範例包含 Access、SQL Server、Oracle RDBMS、試算表和文字檔。 而連線資訊則包括伺服器位置、資料庫名稱、登入識別碼、密碼,以及各種描述如何連線至資料來源的 ODBC 驅動程式選項。
在 ODBC 架構中,應用程式 (例如 Access 或 Microsoft Visual Basic 程式) 會連接至 ODBC 驅動程式管理員,再由其使用特定的 ODBC 驅動程式 (例如 Microsoft SQL ODBC 驅動程式) 連接至資料來源 (在此案例中為 SQL Server 資料庫)。 在 Access 中,您可以使用 ODBC 資料來源來連線至沒有內建驅動程式的 Access 外部資料來源。
若要連線到這些資料來源,您必須執行下列動作:
-
在電腦上安裝包含該資料來源的合適 ODBC 驅動程式。
-
定義資料來源名稱 (DSN),方法是使用 [ODBC 資料來源管理員] 將連線資訊儲存在 Microsoft Windows 登錄或 DSN 檔案中,或是使用 Visual Basic 程式碼中的連接字串直接將連線資訊傳給 ODBC 驅動程式管理員。
機器資料來源
機器資料來源會使用使用者定義的名稱,將連線資訊儲存在特定電腦的 Windows 登錄中。 您只能在定義該資訊的電腦上使用該機器資料來源。 機器資料來源分為使用者和系統兩種。 使用者資料來源僅可由目前的使用者使用,並且只有該使用者看得到。 系統資料來源則可由電腦上的所有使用者使用,且所有使用者以及系統全域服務都能看到。 由於機器資料來源只有登入的使用者可以檢視,且無法由遠端使用者複製到另一部電腦,所以機器資料來源在您想要提供更高安全性時會特別實用。
檔案資料來源
檔案資料來源 (又稱 DSN 檔案) 會將連線資訊儲存在文字檔案而非 Windows 登錄中,使用起來會比機器資料來源更有彈性。 例如,您可以將檔案資料來源複製到任何具有正確 ODBC 驅動程式的電腦,讓您的應用程式在它使用的所有電腦上都能依賴一致且正確的連線資訊。 或者,您可以將檔案資料來源置於單一伺服器,然後在網路上的多部電腦間共用,就能輕易地在單一位置維護連線資訊。
檔案資料來源也可以是不可共用的。 不可共用的檔案資料來源位於單一電腦上,並指向機器資料來源。 您可以使用不可共用的檔案資料來源,以從其中存取現有的機器資料來源。
連接字串
您可以在模組中定義指定連線資訊的格式化連接字串。 連接字串會將連線資訊直接傳給 ODBC 驅動程式管理員,這有助於簡化應用程式,免去在使用資料庫之前,系統管理員或使用者要先建立 DSN 的需求。
-
-
建立新資料庫 如果您選取此選項,然後按一下[下一步],Access 會顯示一個頁面,您可在該頁面中輸入新 SQL Server 資料庫的相關資訊。
-
您想要針對此資料庫使用哪個 SQL Server? 輸入您所要使用的伺服器的電子郵件地址。
-
使用信任的連線 您可以使用信任的連線,也就是說,SQL Server 可以與 Windows 作業系統安全性整合,以提供單一登錄到網路和資料庫。
-
登入識別碼和密碼 如果您未使用信任的連線,請輸入具有伺服器上的 CREATE DATABASE 權限的帳號登入識別碼與密碼。
-
您要將新的 SQL Server 資料庫命名為什麼? 輸入新 SQL Server 資料庫的名稱。 如果命名與現有的資料庫名稱衝突,Access 會自動修正名稱,並加上數字後綴 (例如 mydatabase 1)。
-
步驟 2: 選擇要升級的資料表
在此步驟中,您需選取要升級至 SQL Server 資料庫的 Access 資料表。 選取您要升級的資料表,然後使用箭號按鈕將它們移到 [匯出至 SQL Server] 清單。 或者,您可以按兩下資料表,將其從一個清單移到另一個清單。
[可用的資料表] 清單包含 SQL Server 資料庫中已存在的 SQL Server 資料表外的所有連結資料表。 指向已選取要升級之 SQL Server 資料庫的連結資料表,會自動出現在 [匯出至 SQL Server] 清單方塊中,且無法移除。 系統也會排除目前未顯示在 瀏覽窗格 中的資料表,包括隱藏的資料表和系統資料表。
提示: 系統會從可用資料表清單中排除任何名稱結尾為 "_local" 的資料表,以避免升級已升級的資料表。 如果您想要再次升級這些資料表,請先移除後綴 "_local",以重新命名它們,再執行 [升級精靈]。
步驟 3: 指定要升級的屬性和選項
在此步驟中,您需選取要升級至 SQL Server 資料庫的資料表屬性。 根據預設,系統會選取所有屬性以進行升級。
附註: 根據預設,[升級精靈] 會將 Access 欄位名稱轉換為有效 SQL Server 欄位名稱,並將 Access 資料類型轉換為同等 SQL Server 資料類型。
您想要升級哪些資料表屬性?
下列資料表列出您可以升級的屬性,並說明 [升級精靈] 處理每個屬性的方式:
|
屬性 |
若選取此項,將執行相對應的動作 |
|||||||||||||||
|
索引 |
[升級精靈] 會升級所有索引。 [升級精靈] 會將 Access 主索引鍵轉換成 SQL Server 索引,並將其標示為 SQL Server 主索引鍵。 如果您選擇將已升級的 SQL Server 資料表連結至 Access 資料庫,[升級精靈] 也會將前綴 "aaaaa" 新增至該索引名稱。 這是因為 Access 會從可用索引中,按字母順序選取第一個作為主索引鍵,而 "aaaaa" 前綴可確保選擇的是正確的索引。 其他索引將保留其名稱,除非包含無效字元,這些字元會以 "_" 字元取代。 唯一和非唯一的 Access 索引會變成唯一和非唯一的 SQL Server 索引。 連結資料表必須具備唯一索引,才能在 Access 中更新。 [升級精靈] 可以升級現有的唯一索引,但無法在不存在唯一索引的情況下建立新索引。 如果您希望能夠在升級資料表中的資料後對其進行更新,請務必在升級前為每個 Access 資料表新增唯一索引。 |
|||||||||||||||
|
驗證規則 |
[更新精靈] 會隨著更新和插入觸發程序,對下列項目進行升級:
觸發程序是 SQL Server 資料表關聯的一系列 Transact-SQL 陳述式。 一個資料表可以有三個觸發程序,其中每個分別對應可修改資料的命令: UPDATE、INSERT 和 DELETE 命令。 執行命令時,觸發程序會自動執行。 [升級精靈] 會使用觸發程序,而非 SQL Server 規則來強制執行欄位層級驗證,因為 SQL Server 規則不允許您顯示自訂錯誤訊息。 每個驗證規則不一定都與觸發程序有一對一對應關係。 每個驗證規則可能會成為多個觸發程序的一部分,而每個觸發程序也可能包含模擬數個驗證規則功能的程式碼。 當您將 Access 欄位的 [必要] 屬性設為 true 時,使用者無法在插入記錄時將該必要欄位保留為 Null (若無預設值繫結置該欄位),或在更新記錄時將該欄位設為 Null。 必要欄位會升級為不允許在 SQL Server 上使用 Null 值的欄位。 驗證文字 Access 資料庫 [驗證文字] 屬性會轉換為 Access 專案 [驗證文字] 屬性。 這可讓 Access 在執行階段發生限制式違規時,顯示易記錯誤訊息。 |
|||||||||||||||
|
預設值 |
Upsizing Wizard 會將所有 預設值 屬性升級成美國國家標準局 (ANSI) 預設物件。 |
|||||||||||||||
|
資料表關聯 |
[升級精靈] 會升級所有資料表關聯。 您可以決定如何使用更新、插入或刪除觸發程序,或使用 [宣告式參考完整性 (DRI)] 來升級資料表關聯和參考完整性。 DRI 與 Access 的參考完整性機制運作方式相同,透過為基礎資料表 (即一對多關係中的「一」端) 定義主索引鍵限制式,並為外部資料表 (通常是一對多關係中的「多」端) 定義外部索引鍵限制式來實現。
|
您要包含何種選項?
-
將時間戳記欄位新增至資料表 SQL Server 使用時間戳記欄位,透過建立一個唯一值欄位,並在每次記錄更新時變更其值,來表示記錄已變更 (但不表示變更的時間)。 針對連結資料表,Access 會使用時間戳記欄位中的值來判斷記錄是否已變更,然後再進行更新。 一般而言,時間戳記欄位提供最佳的效能及可靠性。 如果沒有時間戳記欄位,SQL Server 必須檢查記錄中的所有欄位,以判斷記錄是否已變更,而這會降低效能。
下表說明此清單中可用的設定:
|
設定 |
描述 |
|
是,讓精靈決定 |
如果原始 Access 資料表中包含浮點 (單或雙)、備忘或 OLE 物件 欄位,[升級精靈] 會在產生的 SQL Server 資料表中為這些欄位建立新的時間戳記欄位。 |
|
是,一律 |
無論它們包含何種欄位類型,[升級精靈] 都會為所有已升級的資料表建立時間戳記欄位。 這改善了那些雖然不包含 [備忘]、[OLE 物件] 或 [浮點] 欄位,但擁有其他類型欄位的升級後 Access 資料表的效能。 |
|
否,一律不 |
[升級精靈] 不會在資料表中新增時間戳記欄位。 |
重要: 在連結的 SQL Server 資料表中,Access 不會檢查 [備忘] 或 [OLE 物件] 欄位是否已變更,因為這些欄位的大小可能達數 MB,比較過程會耗費大量網路資源與時間。 因此,如果只有文字或影像欄位已變更且沒有時間戳記欄位,則 Access 會覆寫變更。 此外,浮點欄位的值可能在未實際變更的情況下看似變更,因此如果缺少時間戳記欄位,Access 可能會在記錄實際未變更的情況下判斷記錄已變更。
-
只建立資料表結構,不要升級任何資料 [升級精靈] 預設會將所有資料升級至 SQL Server。 如果您選取 [只建立資料表結構,不要升級任何資料] 核取方塊,則系統只會升級資料結構。
步驟 4: 選擇應用程式的升級方式
在精靈的下一頁,您可以選取三種不同方式之一來升級 Access 資料庫應用程式。 在 [您要進行哪些應用程式變更?] 底下,選取下列其中一個選項:
-
建立新的 Access 用戶端/伺服器應用程式 如果您選取此選項,[升級精靈] 會建立新的 Access 專案。 [升級精靈] 會要求您輸入名稱,其預設為目前的 Access 資料庫名稱,並加上 "CS" 後綴,然後將此專案儲存在與現有 Access 資料庫相同的位置。
[升級精靈] 會建立 Access 專案檔案,然後將 Access 資料庫的所有資料庫物件升級至 Access 專案。 如果您未儲存密碼和使用者識別碼,那麼第一次開啟 Access 專案時,Access 會顯示 [資料連結屬性] 對話方塊,以便您連接至 SQL Server 資料庫。
-
將 SQL Server 資料表連結至現有應用程式 如果您選取此選項,[升級精靈] 會修改您的 Access 資料庫,讓查詢、表單、報表和資料存取頁面使用新 SQL Server 資料庫中的資料,而非 Access 資料庫中的資料。 [升級精靈] 會將您升級的 Access 資料表重新命名,並加上 "_local" 後綴。 例如,如果您將名為 [Employees] 的資料表升級,則系統會在 Access 資料庫中將該資料表重新命名為 [Employees_local]。 然後,[升級精靈] 會建立一個名為 [Employees] 的連結的 SQL Server 資料表。
附註: 完成升級作業之後,系統將不會再使用以 "_local" 後綴重新命名的資料表。 不過,建議先保留本機資料表,直到您確認升級成功為止。 日後您可以刪除本機資料表,以縮減 Access 資料庫的大小。 刪除任何資料表之前,請務必先備份您的資料庫。
根據原始 [Employees] 資料表的查詢、表單、報表和資料存取頁面,現在會使用連結的 SQL Server [Employees] 資料表。 原始本機資料表中的許多欄位屬性會由新的本機資料表繼承,包括 Description、Caption、Format、InputMask 和 DecimalPlaces。
-
沒有應用程式變更 如果您只想將資料複製到 SQL Server 資料庫,而不想對現有的 Access 資料庫應用程式進行任何其他變更,請選取此選項。
儲存密碼和使用者識別碼 根據預設,[升級精靈] 會在現有的應用程式中建立連結資料表,或建立 Access 專案而不儲存使用者名稱和密碼。 這表示每次登入 SQL Server 資料庫時,系統都會提示使用者輸入使用者名稱和密碼。
如果您選取 [儲存密碼和使用者識別碼],使用者就可以連接到 SQL Server 資料庫,而不需要登入。 如果您選取 [建立新的 Access 用戶端/伺服器應用程式],Access 專案會將使用者名稱密碼儲存在 OLE DB 連接字串。
附註: 如果連結的 SQL Server 資料表使用 MSysConf 資料表設定來拒絕儲存密碼,則 [不變更應用程式] 選項會停用此功能。
[升級精靈] 報表
當您按一下 [完成] 時,[升級精靈] 會建立一份報表,提供所有建立物件的詳細描述,並報告流程期間發生的所有錯誤。 [升級精靈] 會在 [預覽列印] 中顯示報表,然後您可以列印或儲存該報表,例如 XPS 或 PDF 檔案。 當您關閉 [預覽列印] 視窗時,報表不會儲存為 Access 物件。
[升級精靈] 報表包含下列項目的相關資訊:
-
升級參數,包括您選擇要升級的資料表屬性,以及升級的方式。
-
資料表資訊,包括比較 Access 和 SQL Server 值的名稱、資料類型、索引、驗證規則、預設值、觸發程序,以及是否新增時間戳記。
-
遇到任何錯誤,例如資料庫或交易記錄檔已滿、權限不足、裝置或資料庫未建立、略過資料表、預設值或驗證規則、關聯未被強制執行、略過查詢 (因其無法翻譯為 SQL Server 語法),以及表單與報表中的 控制項 和 記錄來源 轉換錯誤。
資料庫物件如何升級
下列資料和資料庫物件會升級:
-
資料和資料類型 所有 Access 資料庫的資料類型都會轉換為 SQL Server 中同等的資料類型。 精靈會將 Unicode 字串識別碼新增至所有字串值,並將 Unicode n 前綴新增至所有資料類型,以將 Access 資料庫文字轉換為 Unicode。
-
查詢
-
選取沒有 ORDER BY 子句或參數的查詢或參數轉換為檢視的查詢。
-
巨集指令查詢會轉換成預存程序巨集指令查詢。 Access 會在參數宣告碼之後新增 SET NOCOUNT ON,以確保執行預存程序。
-
選取僅參考資料表 (又稱為基本查詢),且使用參數或 ORDER BY 子句之查詢會轉換為使用者定義的函數。 如有需要,系統會將包含 ORDER BY 子句的查詢新增至 TOP 100 PERCENT 子句。
-
使用具名參數的參數查詢會保留 Access 資料庫中使用的原始文字名稱,並會轉換成預存程序或內嵌使用者定義函數。
附註: 您可能需要手動轉換未升級的查詢,例如 SQL 傳遞查詢、資料定義查詢和交叉資料表查詢。 您可能也必須手動升級巢狀太深的查詢。
-
-
表單、報表和控制項 RecordSource、ControlsSource 和 RowSource 屬性中表單、報表或控制項的 SQL 陳述式會保留不變,且不會轉換成預存程序或使用者定義的函數。
-
啟動屬性 [升級精靈] 會升級下列啟動屬性:
StartUpShowDBWindowStartUpShowStatusBarAllowShortcutMenusAllowFullMenusAllowBuiltInToolbarsAllowToolbarChangesAllowSpecialKeysUseAppIconForFrmRptAppIconAppTitleStartUpFormStartUpMenuBarStartupShortcutMenuBar
-
模組和巨集 [升級精靈] 不會對模組或巨集進行任何變更。 您可能需要修改應用程式,才能充分利用 SQL Server 的功能。 如需詳細資訊,請參閱 MSDN 文章 最佳化連結至 SQL Server 的 Microsoft Office Access 應用程式。