在初始架構產生之後,您可以使用 SQL Server Data Tools (SSDT) 來變更 Cube 和維度定義,然後重新執行架構產生精靈。 精靈會更新主旨區域資料庫和相關聯數據源檢視中的架構,以反映變更,並盡可能保留數據表中目前存在的數據,以便重新產生。 如果您在初始產生之後變更資料表,[架構產生精靈] 會盡可能使用下列規則來保留這些變更:
如果先前由精靈產生數據表,則會覆寫數據表。 您可以將資料源檢視
false中資料表的 屬性變更AllowChangesDuringGeneration為 ,以防止精靈所產生的數據表遭到覆寫。 當您控制數據表時,會將數據表視為任何其他使用者定義的數據表,而且在重新產生期間不會受到影響。 從產生中移除資料表之後,您可以稍後將數據源檢視中的數據表屬性變更AllowChangesDuringGeneration為true,然後重新開啟數據表以供精靈變更。 如需詳細資訊,請參閱變更數據源檢視中的屬性(Analysis Services)。如果數據表已新增至數據源檢視,或由精靈以外的專案新增至基礎資料庫,則不會覆寫數據表。
當架構產生精靈重新產生先前在主旨區域資料庫中產生的數據表時,您可以選擇讓精靈保留這些數據表中的現有數據。
支持數據保存
一般規則是「架構產生精靈」會保留儲存在所產生數據表中的數據。 此外,如果您將數據行新增至精靈產生的數據表,精靈也會保留該數據。 您可以使用這項功能來新增或修改維度和 Cube,然後重新產生基礎物件,而不需要重載儲存在基礎表中的數據。
備註
如果您要從分隔文本檔載入資料,您可以選擇是否允許架構生成嚮導在重新生成期間覆寫這些檔案及其中包含的資料。 文字檔要麼全部覆寫,要麼完全不覆寫。 架構產生精靈不會部分覆寫這些檔案。 根據預設,不會覆寫這些檔案。
部分保留
在某些情況下,架構產生精靈無法保留現有的數據。 下表提供精靈在重新產生期間無法保留基礎表中所有現有數據的情況範例。
| 數據變更的類型 | 治療 |
|---|---|
| 不相容的數據類型變更 | 架構產生精靈會盡可能使用標準 SQL Server 數據類型轉換,將現有數據從某個數據類型轉換成另一種數據類型。 不過,當您將屬性的資料類型變更為與現有資料不相容的類型時,精靈會刪除受影響欄位的資料。 |
| 引用完整性錯誤 | 如果您變更包含數據的維度或多維數據集,且變更會在重新生成的過程中造成引用完整性錯誤,則架構產生精靈會卸除外鍵表中的所有數據。 被放棄的數據不限於造成外鍵約束違規的數據列或包含參考完整性錯誤的數據行。 例如,如果您將維度索引鍵變更為具有非唯一或空值數據的屬性,則會刪除外部索引鍵數據表中的所有現有數據。 此外,卸除一個數據表中的所有數據可能會有串聯效果,而且可能會導致其他引用完整性違規。 |
| 已刪除的屬性或維度 | 如果您從維度中刪除屬性,架構產生精靈會刪除對應至已刪除屬性的數據行。 如果您刪除維度,精靈會刪除對應至已刪除維度的數據表。 在這些情況下,精靈會移除刪除的欄或資料表中所包含的數據。 |
架構產生精靈會在卸除任何數據之前發出警告,讓您可以取消精靈,而不會遺失任何數據。 不過,架構產生精靈無法區分預期的數據遺失和未預期的數據遺失。 當您執行精靈時,對話框會列出包含要卸載之數據的數據表和數據行。 您可以讓精靈繼續並卸除數據,也可以取消精靈,並修改您對數據表和數據行所做的變更。
支援 Cube 和維度變更
當您變更維度和 Cube 的屬性時,架構產生精靈會重新產生基礎主旨區域資料庫中的適當物件,以及相關的數據源檢視,如下表所述。
刪除物件,例如維度、Cube 或屬性。
架構產生精靈會刪除已刪除物件對應的基礎物件。 如果您將數據行新增至精靈產生的數據表,新的數據行不會防止該數據表遭到刪除。 刪除物件會導致卸除儲存在基礎對象中的數據,而且如果發生引用完整性錯誤,也可能會導致卸除其他數據。
重新命名物件,例如維度、Cube 或屬性。
架構產生精靈會將對應的基礎物件重新命名,以配合重新命名的物件。 精靈也會重新命名所有受影響的物件,例如主鍵。 會保留儲存在基礎物件中的現有數據。
修改物件,例如變更其數據類型。
架構產生精靈會修改已變更對象對應的基礎物件。 除非新的數據類型與現有的數據不相容,否則會保留儲存在資料庫基礎物件中的現有數據。
加入新的物件,例如維度、Cube 或屬性。
架構產生精靈會將新對象對應的基礎物件加入其中。
如果架構產生精靈因為主旨區域資料庫中存在用戶對象而無法進行必要的變更(因為 Database Engine 傳回錯誤),架構產生精靈就會失敗,並顯示 Database Engine 傳回的錯誤。 例如,如果您在精靈產生數據表之後,於數據表上建立主鍵條件約束或非叢集索引,架構產生精靈不會卸除該數據表,因為它未建立條件約束或索引。
支援架構變更
當您在主旨區域資料庫或相關聯的數據源檢視中變更數據表或數據行的屬性時,架構產生精靈會將變更視為下表所述。
刪除架構產生精靈所產生的數據表或數據行。
如果您刪除架構產生精靈所產生的數據表或數據行,精靈會重新產生已刪除的數據表。 嚮導不會警告已刪除的表格或欄位將被重新生成。
變更架構產生精靈所產生的數據表或數據行屬性。
如果您修改架構產生精靈所產生的數據表或數據行的屬性,精靈會重新產生變更的數據表,而不需要變更。 例如,如果您變更欄位的資料類型或可為 Null 性,或架構產生精靈生成的資料表的檔案群組,則變更不會在重新產生時存留。 精靈不會提供任何警告,表示變更的物件會在不包含變更的情況下重新生成。
將數據行加入至架構產生精靈所產生的數據表,或將數據表加入至主旨區域資料庫或暫存區域資料庫。
如果您將數據行新增至架構產生精靈所產生的數據表,精靈會在重新產生期間保留其他數據行,以及儲存在其中的任何數據。 不過,如果您將數據表新增至主旨區域資料庫或暫存區域資料庫,架構產生精靈不會併入新的數據表。 新增的欄或資料表不會顯示在 Analysis Services 專案、Analysis Services 資料庫、DTS 封裝、資料來源檢視或任何其他生成的架構位置中。
支援數據源和數據源檢視變更
重新執行架構產生精靈時,它會重複使用用於原始產生的相同數據源和數據源檢視。 如果您新增數據源或數據源檢視,精靈就不會使用它。 如果您在初始產生之後刪除原始數據源或數據源檢視,則必須從頭開始執行精靈。 精靈中的所有先前設定也會一併刪除。 下一次執行架構產生精靈時,系統會將系結至已刪除數據源或數據源檢視之基礎資料庫中的任何現有對象視為使用者建立的物件。
如果數據源檢視在產生時未反映基礎資料庫的實際狀態,[架構產生精靈] 可能會在產生主旨區域資料庫和暫存區域資料庫的架構時發生錯誤。 例如,如果數據源檢視指定資料行的數據類型設定為 int,而該資料行的數據類型實際上設定為 string,則架構產生精靈會將外鍵的數據類型設定為 int以符合數據源檢視。然後在建立關聯時失敗,因為實際的數據類型為 string。
另一方面,如果您將數據源連接字串變更為與上一代不同的資料庫,則不會產生任何錯誤。 會使用新的資料庫,而且不會對先前的資料庫進行任何變更。