

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon RDS for Microsoft SQL Server
<a name="CHAP_SQLServer"></a>

Amazon RDS 支援多個版本的 Microsoft SQL Server。下方表格展示每個主要版本最新支援的次要版本。如需支援版本及 RDS 引擎版本的完整清單，請參閱 [Amazon RDS 上的 Microsoft SQL Server 版本](SQLServer.Concepts.General.VersionSupport.md)。




| 主要版本 | Service Pack / GDR | 累積更新 | 次要版本 | 知識庫文章 | 版本日期 | 
| --- | --- | --- | --- | --- | --- | 
| SQL Server 2022 | 不適用 | CU23 |  16.0.4236.2  | [KB5078297](https://learn.microsoft.com/en-us/troubleshoot/sql/releases/sqlserver-2022/cumulativeupdate23) | 2026 年 1 月 29 日 | 
| SQL Server 2019 | GDR | CU32 GDR |  15.0.4455.2  | [KB5068404](https://support.microsoft.com/en-us/topic/kb5068404-description-of-the-security-update-for-sql-server-2019-cu32-november-11-2025-c203bfbf-036e-46d2-bc10-6c01200dc48a) | 2025 年 11 月 11 日 | 
| SQL Server 2017 | GDR | CU31 GDR |  14.0.3515.1  | [KB5068402](https://support.microsoft.com/en-us/topic/kb5068402-description-of-the-security-update-for-sql-server-2017-cu31-november-11-2025-1be08efe-ad14-4b95-a0de-ecbbf2703114) | 2025 年 11 月 11 日 | 
| SQL Server 2016 | SP3 GDR | 不適用 |  13.0.6475.1  | [KB5068401](https://support.microsoft.com/en-us/topic/kb5068401-description-of-the-security-update-for-sql-server-2016-sp3-gdr-november-11-2025-59a59fc0-f673-45c2-b8de-492b95c0e423) | 2025 年 11 月 11 日 | 

如需 SQL Server 授權的相關資訊，請參閱 [Amazon RDS 上的 Microsoft SQL Server 授權](SQLServer.Concepts.General.Licensing.md)。如需 SQL Server 建置的相關資訊，請參閱這篇有關[哪裡可以找到最新 SQL Server 建置相關資訊](https://support.microsoft.com/en-us/topic/kb957826-where-to-find-information-about-the-latest-sql-server-builds-43994ba5-9aed-2323-ea7c-d29fe9c4fbe8)的 Microsoft 支援文章。

使用 Amazon RDS，您可以建立資料庫執行個體和資料庫快照、時間點還原，以及自動或手動備份。而且，您還能夠在 VPC 內使用執行 SQL Server 的資料庫執行個體。您也可以透過 Secure Sockets Layer (SSL) 來連線至執行 SQL Server 的資料庫執行個體，並利用透明資料加密 (TDE) 加密靜態資料。Amazon RDS 目前使用 SQL Server 資料庫鏡像 (DBM) 或 Always On 可用性群組 (AG) 作為高可用性的容錯移轉解決方案，藉此支援 SQL Server 的異地同步備份部署作業。

為提供受管服務體驗，Amazon RDS 不提供資料庫執行個體的殼層存取權，而且會限制存取某些需要進階權限的系統程序和資料表。Amazon RDS 可支援使用 Microsoft SQL Server Management Studio 等任何標準 SQL 用戶端應用程式來存取資料庫執行個體上的資料庫。Amazon RDS 不允許主機透過 Telnet、安全殼層 (SSH) 或 Windows 遠端桌面連線，直接存取資料庫執行個體。當您建立資料庫執行個體時，系統會指派主要使用者擔任該執行個體所有資料庫的 *db\$1owner* 角色，使其擁有資料庫層級的所有許可 (用於備份的許可除外)。Amazon RDS 會為您管理備份。

建立第一個資料庫執行個體之前，請先完成本指南的設定章節中的步驟。如需更多詳細資訊，請參閱 [設定您的 Amazon RDS 環境](CHAP_SettingUp.md)。

**Topics**
+ [Amazon RDS 上 Microsoft SQL Server 的一般管理任務](#SQLServer.Concepts.General)
+ [Microsoft SQL Server 資料庫執行個體的限制](#SQLServer.Concepts.General.FeatureSupport.Limits)
+ [Microsoft SQL Server 的資料庫執行個體類別支援](SQLServer.Concepts.General.InstanceClasses.md)
+ [針對包含 RDS for SQL Server 授權的執行個體最佳化 CPUs](SQLServer.Concepts.General.OptimizeCPU.md)
+ [Microsoft SQL Server 安全](SQLServer.Concepts.General.FeatureSupport.UnsupportedRoles.md)
+ [Microsoft SQL Server 資料庫執行個體的合規計劃支援](#SQLServer.Concepts.General.Compliance)
+ [Amazon RDS 上的 Microsoft SQL Server 版本](SQLServer.Concepts.General.VersionSupport.md)
+ [Amazon RDS 上的 Microsoft SQL Server 功能](SQLServer.Concepts.General.FeatureSupport.md)
+ [使用 Microsoft SQL Server 資料庫鏡像或 Always On 可用性群組的異地同步備份部署](#SQLServer.Concepts.General.Mirroring)
+ [使用透明資料加密來加密靜態資料](#SQLServer.Concepts.General.Options)
+ [Amazon RDS for Microsoft SQL Server 的函數和預存程序](SQLServer.Concepts.General.StoredProcedures.md)
+ [Microsoft SQL Server 資料庫執行個體的本機時區](SQLServer.Concepts.General.TimeZone.md)
+ [Amazon RDS 上的 Microsoft SQL Server 授權](SQLServer.Concepts.General.Licensing.md)
+ [連線至 Microsoft SQL Server 資料庫執行個體](USER_ConnectToMicrosoftSQLServerInstance.md)
+ [在 RDS for SQL Server 上使用 SQL Server Developer Edition](sqlserver-dev-edition.md)
+ [使用 Active Directory 搭配 RDS for SQL Server](User.SQLServer.ActiveDirectoryWindowsAuth.md)
+ [Microsoft SQL Server 資料庫引擎的升級](USER_UpgradeDBInstance.SQLServer.md)
+ [在 RDS for SQL Server 中使用儲存](Appendix.SQLServer.CommonDBATasks.DatabaseStorage.md)
+ [使用原生備份和還原，匯入和匯出 SQL Server 資料庫](SQLServer.Procedural.Importing.md)
+ [使用 Amazon RDS 中的 Microsoft SQL Server 的僅供讀取複本](SQLServer.ReadReplicas.md)
+ [Amazon RDS for Microsoft SQL Server 的異地同步備份部署](USER_SQLServerMultiAZ.md)
+ [Microsoft SQL Server on Amazon RDS 的其他功能](User.SQLServer.AdditionalFeatures.md)
+ [Microsoft SQL Server 資料庫引擎的選項](Appendix.SQLServer.Options.md)
+ [Amazon RDS for Microsoft SQL Server 的常用 DBA 任務](Appendix.SQLServer.CommonDBATasks.md)

## Amazon RDS 上 Microsoft SQL Server 的一般管理任務
<a name="SQLServer.Concepts.General"></a>

下列是您可在執行 Amazon RDS for SQL Server 資料庫執行個體時使用的一般管理任務，並隨附各工作相關說明文件的連結。


****  

| 任務區域 | Description | 相關文件 | 
| --- | --- | --- | 
|  **執行個體類別、儲存體和 PIOPS**  |  如果您要針對生產用途建立資料庫執行個體，您應該了解執行個體類別、儲存體類型和佈建的 IOPS 在 Amazon RDS 中的運作方式。  |  [Microsoft SQL Server 的資料庫執行個體類別支援](SQLServer.Concepts.General.InstanceClasses.md) [Amazon RDS 儲存類型](CHAP_Storage.md#Concepts.Storage)  | 
|  **異地同步備份部署**  |  生產資料庫執行個體應該使用多個可用區部署。「異地同步備份部署」可提高資料庫執行個體的可用性、資料耐用性和容錯能力。SQL Server 的異地同步備份部署是採用 SQL Server 的原生 DBM 或 AG 技術來實作。  |  [設定及管理 Amazon RDS 的多可用區域部署](Concepts.MultiAZ.md) [使用 Microsoft SQL Server 資料庫鏡像或 Always On 可用性群組的異地同步備份部署](#SQLServer.Concepts.General.Mirroring)  | 
|  **Amazon Virtual Private Cloud (VPC)**  |  如果 AWS 您的帳戶具有預設 VPC，則會自動在預設 VPC 內建立資料庫執行個體。如果您的帳戶沒有預設的 VPC，而您想要 VPC 中有該資料庫執行個體，則必須在建立資料庫執行個體之前，先建立 VPC 和子網路群組。  |  [在 VPC 中使用資料庫執行個體](USER_VPC.WorkingWithRDSInstanceinaVPC.md)  | 
|  **安全群組**  |  根據預設，建立資料庫執行個體時會同時建立防火牆，可防止執行個體遭受不適當的存取。因此，您必須使用正確的 IP 地址和網路組態建立安全群組，才能存取資料庫執行個體。  |  [使用安全群組控制存取](Overview.RDSSecurityGroups.md)  | 
|  **參數群組**  |  如果您的資料庫執行個體將要求特定資料庫參數，您應該在建立資料庫執行個體之前，先建立參數群組。  |  [Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)  | 
|  **選項群組**  |  如果您的資料庫執行個體將會要求特定資料庫選項，您應該在建立資料庫執行個體之前，先建立選項群組。  |  [Microsoft SQL Server 資料庫引擎的選項](Appendix.SQLServer.Options.md)  | 
|  **連線到您的資料庫執行個體**  |  建立安全群組並與資料庫執行個體建立關聯後，您可以使用任何標準 SQL 用戶端應用程式 (例如 Microsoft SQL Server Management Studio) 來連線至資料庫執行個體。  |  [連線至 Microsoft SQL Server 資料庫執行個體](USER_ConnectToMicrosoftSQLServerInstance.md)  | 
|  **備份與還原**  |  當您建立資料庫執行個體時，您可以將它設定為取得自動備份。您也可以使用完整的備份檔案 (.bak 檔案)，手動備份與還原資料庫。  |  [備份簡介](USER_WorkingWithAutomatedBackups.md) [使用原生備份和還原，匯入和匯出 SQL Server 資料庫](SQLServer.Procedural.Importing.md)  | 
|  **監控**  |  您可以使用 CloudWatch Amazon RDS 指標、事件與增強型監控，監控 SQL Server 資料庫執行個體。  |  [在 Amazon RDS 主控台中檢視指標](USER_Monitoring.md) [檢視 Amazon RDS 事件](USER_ListEvents.md)  | 
|  **日誌檔**  |  您可以存取 SQL Server 資料庫執行個體的日誌檔案。  |  [監控 Amazon RDS 日誌檔案](USER_LogAccess.md) [Amazon RDS for Microsoft SQL Server 資料庫日誌檔案](USER_LogAccess.Concepts.SQLServer.md)  | 

也有使用 SQL Server 資料庫執行個體的進階管理任務。如需詳細資訊，請參閱下列 文件：
+ [Amazon RDS for Microsoft SQL Server 的常用 DBA 任務](Appendix.SQLServer.CommonDBATasks.md).
+ [使用具有 RDS for SQL Server 的 AWS 受管 Active Directory](USER_SQLServerWinAuth.md)
+ [存取 tempdb 資料庫](SQLServer.TempDB.md)

## Microsoft SQL Server 資料庫執行個體的限制
<a name="SQLServer.Concepts.General.FeatureSupport.Limits"></a>

在資料庫執行個體上進行 Microsoft SQL Server 的 Amazon RDS 實作時，您應該注意下列限制：
+ 資料庫執行個體上可支援的資料庫數量上限需視執行個體類別類型和可用性模式而定，其中包括單一可用區模式、多可用區資料庫鏡像 (DBM) 模式，以及多可用區可用性群組 (AG) 模式。Microsoft SQL Server 系統資料庫不在此限內。

  下表說明每個執行個體類別類型和可用性模式能支援的資料庫數量上限。此表格可幫助您判斷是否要轉換為不同的執行個體類別類型，或是轉換為不同的可用性模式。如果來源資料庫執行個體的資料庫數量超過目標執行個體類別類型或可用性模式能支援的數量，則無法修改資料庫執行個體。您可以在 **Events (事件)** 窗格中查看請求的狀態。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html)

  \$1 表示不同的執行個體類別類型。

  例如，假設您的資料庫執行個體有 76 個資料庫，且在單一可用區域的 db.\$1.16xlarge 上執行。您要修改該資料庫執行個體，以將其升級為使用多個可用區 Always On AG 模式。但是，資料庫執行個體所包含的資料庫超過目標組態可支援的數量，因此這個升級作業會失敗。如果您改將執行個體類別類型升級為 db.\$1.24xlarge，就能成功修改。

  若升級失敗，畫面上顯示的事件和訊息會如下所示：
  +  無法修改資料庫執行個體類別。該執行個體擁有 76 個資料庫，但轉換後可支援的數量只有 75 個。
  +  無法將資料庫執行個體轉換為多個可用區模式。該執行個體擁有 76 個資料庫，但轉換後可支援的數量只有 75 個。

   若 point-in-time 還原或快照還原失敗，畫面上顯示的事件和訊息會如下所示：
  +  資料庫執行個體進入不相容的還原模式。該執行個體擁有 76 個資料庫，但轉換後可支援的數量只有 75 個。
+ 以下是保留供 Amazon RDS 使用的連接埠，因此您無法在建立資料庫執行個體時使用這些連接埠：`1234, 1434, 3260, 3343, 3389, 47001,` 和 `49152-49156`。
+ 不允許從 169.254.0.0/16 範圍內的 IP 地址連線的用戶端。這是「自動私有 IP 定址範圍」(APIPA)，它用於本機連結定址。
+ 如果資料庫執行個體的處理器數量超過軟體限制 (24 核心、4 個插槽、128GB RAM)，SQL Server Standard Edition 只會使用一部分可用的處理器。例如 db.m5.24xlarge 和 db.r5.24xlarge 執行個體類別。

  如需詳細資訊，請參閱 Microsoft 文件中 [SQL Server 2019 (15.x) 的版本和支援功能](https://docs.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-version-15)下的擴展限制表。
+ Amazon RDS for SQL Server 不支援將資料匯入 msdb 資料庫。
+ 您無法在 SQL Server 異地同步備份部署的資料庫執行個體上重新命名資料庫。
+ 在設定下列 RDS for SQL Server 資料庫參數時，請確定您使用這些準則：
  + `max server memory (mb)` >= 256 MB
  + `max worker threads` >= (邏輯 CPU 數量 \$1 7)

  如需設定資料庫參數的詳細資訊，請參閱[Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。
+ SQL Server 資料庫執行個體的最高儲存空間大小如下：
  + 一般用途 (SSD) 儲存空間 – 16 TiB，適用於所有版本 
  + 佈建 IOPS 儲存 – 所有版本的 64 TiB 
  + 磁帶儲存空間 – 1 TiB，適用於所有版本 

  如果您需要更大的儲存容量，則可在多個資料庫執行個體間使用分片，以因應此限制。此方式需要連線至分片系統的應用程式中有資料相依路由邏輯。您可以使用現有的分片架構，或撰寫自訂程式碼來啟用分片。如果您使用現有架構，則架構無法將任何元件與資料庫執行個體安裝在相同的伺服器上。
+ SQL Server 資料庫執行個體的最低儲存空間大小如下：
  + 一般用途 (SSD) 儲存體 – 20 GiB (適用於 Enterprise 版、Standard 版、Web 版和 Express 版)
  + 佈建 IOPS 儲存體 – 20 GiB (適用於 Enterprise 版、Standard 版、Web 版和 Express 版)
  + 磁儲存體 – 20 GiB (適用於 Enterprise 版、Standard 版、Web 版和 Express 版)
+ Amazon RDS 不支援在與 RDS 資料庫執行個體相同的伺服器上執行以下服務：
  + Data Quality Services
  + Master Data Services

  若要使用這些功能，建議您在 Amazon EC2 執行個體上安裝 SQL Server，或使用現場部署 SQL Server 執行個體。在這些情況下，EC2 或 SQL Server 執行個體可做為 Amazon RDS 上 SQL Server 資料庫執行個體的 Master Data Services 伺服器。您可以根據 Microsoft 授權政策，在具有 Amazon EBS 儲存體的 Amazon EC2 執行個體上安裝 SQL Server。
+ 由於 Microsoft SQL Server 的限制，還原至成功執行 `DROP DATABASE` 前的時間點，可能不會反映資料庫在該時間點的狀態。舉例來說，捨棄的資料庫通常最多可還原至發出 `DROP DATABASE` 命令前 5 分鐘的狀態。此類型的還原操作表示您無法還原在那幾分鐘期間於捨棄資料庫上所做的交易。若要解決此問題，您可以在還原操作完成後，重新發出 `DROP DATABASE` 命令。捨棄資料庫會移除該資料庫的交易日誌。
+ 針對 SQL Server，您可以在建立資料庫執行個體之後建立資料庫。資料庫名稱遵循一般的 SQL Server 命名規則，並包含以下差異：
  + 資料庫名稱不能以 `rdsadmin` 開頭。
  + 資料庫名稱不能以空格或 Tab 鍵開始或結束。
  + 資料庫名稱不可包含任何會建立新一行文字的字元。
  + 資料庫名稱不可包含單引號 (`'`)。
+ SQL Server Web Edition 僅允許您在建立新的 RDS for SQL Server 資料庫執行個體時使用**開發/測試**範本。
+ SQL Server Web Edition 是專為 Web 主機和 Web VAPs所設計，以託管公有和可存取網際網路的網頁、網站、Web 應用程式和 Web 服務。如需詳細資訊，請參閱[Amazon RDS 上的 Microsoft SQL Server 授權](SQLServer.Concepts.General.Licensing.md)。

# Microsoft SQL Server 的資料庫執行個體類別支援
<a name="SQLServer.Concepts.General.InstanceClasses"></a>

資料庫執行個體的運算和記憶體容量由其資料庫執行個體類別決定。您需要的資料庫執行個體類別取決於您的處理能力和記憶體需求。如需更多詳細資訊，請參閱 [ 資料庫執行個體類別](Concepts.DBInstanceClass.md)。

為了方便您使用，提供下列 Microsoft SQL Server 支援的資料庫執行個體類別清單。如需最新的清單，請參閱 RDS 主控台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

並非所有資料庫執行個體類別皆可用於所有受支援的 SQL Server 次要版本上。例如，一些較新的資料庫執行個體類別 (如 db.r6i) 無法用於較舊的次要版本上。您可以使用 [describe-orderable-db-instance-options](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rds/describe-orderable-db-instance-options.html) AWS CLI 命令，找出 SQL Server 版本和版本可用的資料庫執行個體類別。


****  

| SQL Server 版本 | 2022 支援範圍 | 2019 支援範圍 | 2017 和 2016 支援範圍 | 
| --- | --- | --- | --- | 
|  企業版本  | `db.t3.xlarge`–`db.t3.2xlarge``db.r5.xlarge`–`db.r5.24xlarge``db.r5b.xlarge`–`db.r5b.24xlarge``db.r5d.xlarge`–`db.r5d.24xlarge``db.r6i.xlarge`–`db.r6i.32xlarge`db.r7i.xlarge–db.r7i.48xlarge`db.m5.xlarge`–`db.m5.24xlarge``db.m5d.xlarge`–`db.m5d.24xlarge``db.m6i.xlarge`–`db.m6i.32xlarge``db.m7i.xlarge`–`db.m7i.48xlarge``db.x2iedn.xlarge`–`db.x2iedn.32xlarge``db.z1d.xlarge`–`db.z1d.12xlarge` |  `db.t3.xlarge`–`db.t3.2xlarge` `db.r5.xlarge`–`db.r5.24xlarge` `db.r5b.xlarge`–`db.r5b.24xlarge` `db.r5d.xlarge`–`db.r5d.24xlarge` `db.r6i.xlarge`–`db.r6i.32xlarge` `db.r7i.xlarge`–`db.r7i.48xlarge` `db.m5.xlarge`–`db.m5.24xlarge` `db.m5d.xlarge`–`db.m5d.24xlarge` `db.m6i.xlarge`–`db.m6i.32xlarge` `db.m7i.xlarge`–`db.m7i.48xlarge` `db.x2iedn.xlarge`–`db.x2iedn.32xlarge` `db.z1d.xlarge`–`db.z1d.12xlarge`  |  `db.t3.xlarge`–`db.t3.2xlarge` `db.r5.xlarge`–`db.r5.24xlarge` `db.r5b.xlarge`–`db.r5b.24xlarge` `db.r5d.xlarge`–`db.r5d.24xlarge` `db.r6i.xlarge`–`db.r6i.32xlarge` `db.r7i.xlarge`–`db.r7i.48xlarge` `db.m5.xlarge`–`db.m5.24xlarge` `db.m5d.xlarge`–`db.m5d.24xlarge` `db.m6i.xlarge`–`db.m6i.32xlarge` `db.m7i.xlarge`–`db.m7i.48xlarge` `db.x2iedn.xlarge`–`db.x2iedn.32xlarge` `db.z1d.xlarge`–`db.z1d.12xlarge`  | 
|  標準版本  | `db.t3.xlarge`–`db.t3.2xlarge``db.r5.large`–`db.r5.24xlarge``db.r5b.large`–`db.r5b.8xlarge``db.r5d.large`–`db.r5d.24xlarge``db.r6i.large`–`db.r6i.8xlarge`db.r7i.large–db.r7i.12xlarge`db.m5.large`–`db.m5.24xlarge``db.m5d.large`–`db.m5d.24xlarge``db.m6i.large`–`db.m6i.8xlarge``db.m7i.large`–`db.m7i.12xlarge``db.x2iedn.xlarge`–`db.x2iedn.8xlarge``db.z1d.large`–`db.z1d.12xlarge` |  `db.t3.xlarge`–`db.t3.2xlarge` `db.r5.large`–`db.r5.24xlarge` `db.r5b.large`–`db.r5b.24xlarge` `db.r5d.large`–`db.r5d.24xlarge` `db.r6i.large`–`db.r6i.8xlarge` `db.r7i.large`–`db.r7i.12xlarge` `db.m5.large`–`db.m5.24xlarge` `db.m5d.large`–`db.m5d.24xlarge` `db.m6i.large`–`db.m6i.8xlarge` `db.m7i.large`–`db.m7i.12xlarge` `db.x2iedn.xlarge`–`db.x2iedn.32xlarge` `db.z1d.large`–`db.z1d.12xlarge`  | `db.t3.xlarge`–`db.t3.2xlarge``db.r5.large`–`db.r5.24xlarge``db.r5b.large`–`db.r5b.24xlarge``db.r5d.large`–`db.r5d.24xlarge``db.r6i.large`–`db.r6i.8xlarge``db.r7i.large`–`db.r7i.12xlarge``db.m5.large`–`db.m5.24xlarge``db.m5d.large`–`db.m5d.24xlarge``db.m6i.large`–`db.m6i.8xlarge`db.m7i.large–db.m7i.12xlarge`db.x2iedn.xlarge`–`db.x2iedn.32xlarge``db.z1d.large`–`db.z1d.12xlarge` | 
|  Web 版本  | `db.t3.small`–`db.t3.xlarge``db.r5.large`–`db.r5.4xlarge``db.r5b.large`–`db.r5b.4xlarge``db.r5d.large`–`db.r5d.4xlarge`db.r6i.large–db.r6i.4xlarge`db.r7i.large`–`db.r7i.4xlarge``db.m5.large`–`db.m5.4xlarge``db.m5d.large`–`db.m5d.4xlarge``db.m6i.large`–`db.m6i.4xlarge``db.m7i.large`–`db.m7i.4xlarge``db.z1d.large`–`db.z1d.13xlarge` | `db.t3.small`–`db.t3.2xlarge``db.r5.large`–`db.r5.4xlarge``db.r5b.large`–`db.r5b.4xlarge``db.r5d.large`–`db.r5d.4xlarge``db.r6i.large`–`db.r6i.4xlarge`db.r7i.large–db.r7i.4xlarge`db.m5.large`–`db.m5.4xlarge``db.m5d.large`–`db.m5d.4xlarge``db.m6i.large`–`db.m6i.4xlarge`db.m7i.large–db.m7i.4xlarge`db.z1d.large`–`db.z1d.3xlarge` | `db.t3.small`–`db.t3.2xlarge``db.r5.large`–`db.r5.4xlarge``db.r5b.large`–`db.r5b.4xlarge``db.r5d.large`–`db.r5d.4xlarge``db.r6i.large`–`db.r6i.4xlarge`db.r7i.large–db.r7i.4xlarge`db.m5.large`–`db.m5.4xlarge``db.m5d.large`–`db.m5d.4xlarge``db.m6i.large`–`db.m6i.4xlarge`db.m7i.large–db.m7i.4xlarge`db.z1d.large`–`db.z1d.3xlarge` | 
|  Express 版本  |  `db.t3.micro`–`db.t3.xlarge`  |  `db.t3.micro`–`db.t3.xlarge`  |  `db.t3.micro`–`db.t3.xlarge`  | 
| 開發人員版本 | `db.m6i.xlarge`–`db.m6i.32xlarge``db.r6i.xlarge`–`db.r6i.32xlarge` |  |  | 

**注意**  
 從第 7 代執行個體類別開始，若執行個體大小為 2xlarge 以上，則會在 RDS SQL Server 上停用超執行緒。這會導致可用的 vCPUs 總數為[對應 EC2 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cpu-options-supported-instances-values.html)所支援的一半。例如，EC2 執行個體類型`m7i.2xlarge`預設支援 4 個核心和 2 threadsPerCore，總共產生 8 vCPUs。相反地，停用超執行緒的 RDS for SQL Server `db.m7i.2xlarge`執行個體會產生 4 個核心和 1 個threadsPerCore，整體 4 vCPUs。
從第 7 代執行個體開始，您的帳單會提供 RDS 資料庫執行個體和第三方授權費用的詳細明細。如需詳細資訊，請參閱 [RDS SQL Server 定價](https://aws.amazon.com/rds/sqlserver/pricing/)。

# 針對包含 RDS for SQL Server 授權的執行個體最佳化 CPUs
<a name="SQLServer.Concepts.General.OptimizeCPU"></a>

使用 RDS for SQL Server，您可以指定處理器功能來設定資料庫執行個體上的 vCPU 計數，同時維護相同的記憶體和 IOPS，藉此使用最佳化 CPU。您可以針對特定資料庫工作負載需求達成所需的memory-to-CPU比率，並降低以 vCPU 計數為基礎的 Microsoft Windows 作業系統和 SQL Server 授權成本。

若要指定處理器功能，請使用下列參數：

```
--processor-features "Name=coreCount,Value=value" \ 
	"Name=threadsPerCore,Value=value"
```
+ **coreCount** – 指定資料庫執行個體的 CPU 核心數量，以最佳化資料庫執行個體的授權成本。請參閱 [支援最佳化 CPU 的資料庫執行個體類別資料庫執行個體類別支援](SQLServer.Concepts.General.OptimizeCPU.Support.md) 尋找所選執行個體類型之核心計數的允許值。
+ **threadsPerCore** – 指定每個核心的執行緒，以定義每個 CPU 核心的執行緒數目。請參閱 [支援最佳化 CPU 的資料庫執行個體類別資料庫執行個體類別支援](SQLServer.Concepts.General.OptimizeCPU.Support.md) 以尋找所選執行個體類型的每個核心執行緒的允許值。

使用最佳化 CPU 設定建立 RDS for SQL Server 執行個體的範例命令：

```
aws rds create-db-instance \
    --engine sqlserver-ee \
    --engine-version 16.00 \
    --license-model license-included \
    --allocated-storage 300 \
    --master-username myuser \
    --master-user-password xxxxx \
    --no-multi-az \
    --vpc-security-group-ids myvpcsecuritygroup \
    --db-subnet-group-name mydbsubnetgroup \
    --db-instance-identifier my-rds-instance \
    --db-instance-class db.m7i.8xlarge \
    --processor-features "Name=coreCount,Value=8" "Name=threadsPerCore,Value=1"
```

在此範例中，您會建立`db.m7i.8xlarge`執行個體，其 coreCount 預設為 16。透過使用最佳化 CPU，您可以選擇 coreCount 為 8，因此有效的 vCPU 計數為 8。

如果您建立沒有 `--processor-features` 參數的執行個體，則核心計數會設為 16，而每個核心的執行緒會預設為 1，導致預設 vCPU 計數為 16。

指定處理器功能時需要注意的一些考量事項：
+ **建立** – 從允許的值`threadsPerCore`為 `processor-features` 參數指定 `coreCount`和 。請參閱 [支援最佳化 CPU 的資料庫執行個體類別資料庫執行個體類別支援](SQLServer.Concepts.General.OptimizeCPU.Support.md)。
+ **修改** – 從使用最佳化 CPU 設定設定的執行個體類別修改為支援最佳化 CPU 設定的執行個體類別時，您必須使用 `--use-default-processor-features` 參數指定預設處理器設定，或在修改請求期間明確定義選項。
**注意**  
變更 vCPU 計數可能會影響與資料庫執行個體相關聯的授權費用。
+ **快照還原** – 將快照還原至與來源相同的執行個體類型時，還原的資料庫執行個體會從快照繼承最佳化 CPU 設定。如果還原至不同的執行個體類型，您需要定義目標執行個體的最佳化 CPU 設定或指定 `--use-default-processor-features` 參數。
+ **Point-in-time還原** – Point-in-time還原 (PITR) 涉及根據 PITR 的指定時間還原特定快照，然後套用所有交易日誌備份至該快照，從而將執行個體帶到指定的時間點。對於 PITR，最佳化 CPU 設定 `coreCount`和 衍生自來源快照 （而非時間點）`threadsPerCore`，除非在 PITR 請求期間指定自訂值。如果使用最佳化 CPU 設定啟用的來源快照，而且您使用不同的 PITR 執行個體類型，您必須定義目標執行個體的最佳化 CPU 設定或指定 `—-use-default-processor-features` 參數。

## 限制
<a name="SQLServer.Concepts.General.OptimizeCPU.Limitations"></a>

使用最佳化 CPU 時，適用下列限制：
+ 只有 Enterprise、Standard 和 Web Edition 支援最佳化 CPU。
+ 最佳化 CPU 可在特定執行個體上使用。請參閱 [支援最佳化 CPU 的資料庫執行個體類別資料庫執行個體類別支援](SQLServer.Concepts.General.OptimizeCPU.Support.md)。
+ 在 `2xlarge`和更高版本的執行個體大小上，支援自訂 CPU 核心數量。對於這些執行個體類型，最佳化 CPU 支援的 vCPCU 數目下限為 4。
+ 最佳化 CPU 只允許每個核心 1 個執行緒，因為從支援最佳化 CPU 的第 7 代開始的執行個體停用超執行緒。

# 支援最佳化 CPU 的資料庫執行個體類別
<a name="SQLServer.Concepts.General.OptimizeCPU.Support"></a>

RDS for SQL Server 支援從第 7 代執行個體類別類型開始最佳化 CPU。此外，RDS 提供 RDS 資料庫執行個體和第三方授權費用的詳細帳單明細，從第 7 代執行個體類別類型開始，無論是否啟用最佳化 CPU 功能。

RDS for SQL Server 支援在特定執行個體大小上最佳化 CPU，支援的最小執行個體大小為 `2xlarge`。支援的最小組態為 4 vCPUs。下表概述支援最佳化 CPU 的資料庫執行個體類別，包括其 CPU 核心、每個核心的 CPU 執行緒和 vCPUs的預設和有效值：


**一般用途執行個體**  

| 執行個體類型 | 預設 vCPU | 預設 CPU 核心 | 有效的 CPU 核心 | 每個核心的有效執行緒 | 
| --- | --- | --- | --- | --- | 
| `m7i.large` | 2 | 1 | 1 | 2 | 
| `m7i.xlarge` | 4 | 2 | 2 | 2 | 
| `m7i.2xlarge` | 4 | 4 | 1、2、3、4 | 1 | 
| `m7i.4xlarge` | 8 | 8 | 1、2、3、4、5、6、7、8 | 1 | 
| `m7i.8xlarge` | 16 | 16 | 1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16 | 1 | 
| `m7i.12xlarge` | 24 | 24 | 1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、21、22、23、24 | 1 | 
| `m7i.16xlarge` | 32 | 32 | 1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、21、22、23、24、25、26、27、28、29、30、31、32 | 1 | 


**記憶體最佳化執行個體**  

| 執行個體類型 | 預設 vCPU | 預設 CPU 核心 | 有效的 CPU 核心 | 每個核心的有效執行緒 | 
| --- | --- | --- | --- | --- | 
| `r7i.large` | 2 | 1 | 1 | 2 | 
| `r7i.xlarge` | 4 | 2 | 2 | 2 | 
| `r7i.2xlarge` | 4 | 4 | 1、2、3、4 | 1 | 
| `r7i.4xlarge` | 8 | 8 | 1、2、3、4、5、6、7、8 | 1 | 
| `r7i.8xlarge` | 16 | 16 | 1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16 | 1 | 
| `r7i.12xlarge` | 24 | 24 | 1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、21、22、23、24 | 1 | 
| `r7i.16xlarge` | 32 | 32 | 1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、21、22、23、24、25、26、27、28、29、30、31、32 | 1 | 

# 設定資料庫執行個體類別的 CPU 核心和每 CPU 核心執行緒數量
<a name="SQLServer.Concepts.General.OptimizeCPU.Enabling"></a>

當您執行下列操作時，可針對資料庫執行個體類別設定其 CPU 核心數量，以及每核心的執行緒數量：
+ [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)
+ [修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)
+ [還原至資料庫執行個體](USER_RestoreFromSnapshot.md)
+ [將 Amazon RDS 的資料庫執行個體還原至指定時間](USER_PIT.md)

**注意**  
當您修改資料庫執行個體以設定每個核心的 CPU 核心或執行緒數量時，會有類似修改執行個體類別的短暫中斷。

使用 AWS 管理主控台 AWS CLI 或 RDS API 設定 CPU 核心。

## 主控台
<a name="SQLServer.Concepts.General.OptimizeCPU.Enabling.CON"></a>

**設定核心**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 選擇**建立資料庫**。

1. 設定**執行個體組態**選項時：

   1. 選擇**最佳化 CPU** 選項。

   1. 選擇核心數量來設定 **vCPU** 選項。  
![\[設定 OCPU 設定時的資料庫建立頁面\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/OCPU-screenshot.png)

1. 完成其他選擇後，選取**建立資料庫**。

## AWS CLI
<a name="SQLServer.Concepts.General.OptimizeCPU.Enabling.CLI"></a>

**設定核心**

1. 若要使用 AWS CLI 設定最佳化 CPU，請在 命令中包含 `--processor-features`選項。將具有 `coreCount`和 的 CPU 核心數目指定`threadsPerCore`為 `1`。

1. 使用下列語法：

   ```
   aws rds create-db-instance \
       --engine sqlserver-ee \
       --engine-version 16.00 \
       --license-model license-included \
       --allocated-storage 300 \
       --master-username myuser \
       --master-user-password xxxxx \
       --no-multi-az \
       --vpc-security-group-ids myvpcsecuritygroup \
       --db-subnet-group-name mydbsubnetgroup \
       --db-instance-identifier my-rds-instance \
       --db-instance-class db.m7i.4xlarge \
       --processor-features "Name=coreCount,Value=6" "Name=threadsPerCore,Value=1"
   ```

**Example 檢視資料庫執行個體類別的有效處理器值**  
使用 `describe-orderable-db-instance-options`命令來顯示每個核心的預設 vCPUs、核心和執行緒。例如，下列命令的輸出會顯示 db.r7i.2xlarge 執行個體類別的處理器選項。  

```
aws rds describe-orderable-db-instance-options --engine sqlserver-ee \
--db-instance-class db.r7i.2xlarge

Sample output: 
-------------------------------------------------------------
|            DescribeOrderableDBInstanceOptions             |
+-----------------------------------------------------------+
||               OrderableDBInstanceOptions                ||
|+------------------------------------+--------------------+|
||  DBInstanceClass                   |  db.r7i.2xlarge    ||
||  Engine                            |  sqlserver-ee      ||
||  EngineVersion                     |  13.00.6300.2.v1   ||
||  LicenseModel                      |  license-included  ||
||  MaxIopsPerDbInstance              |                    ||
||  MaxIopsPerGib                     |                    ||
||  MaxStorageSize                    |  64000             ||
||  MinIopsPerDbInstance              |                    ||
||  MinIopsPerGib                     |                    ||
||  MinStorageSize                    |  20                ||
||  MultiAZCapable                    |  True              ||
||  OutpostCapable                    |  False             ||
||  ReadReplicaCapable                |  True              ||
||  StorageType                       |  gp2               ||
||  SupportsClusters                  |  False             ||
||  SupportsDedicatedLogVolume        |  False             ||
||  SupportsEnhancedMonitoring        |  True              ||
||  SupportsGlobalDatabases           |  False             ||
||  SupportsIAMDatabaseAuthentication |  False             ||
||  SupportsIops                      |  False             ||
||  SupportsKerberosAuthentication    |  True              ||
||  SupportsPerformanceInsights       |  True              ||
||  SupportsStorageAutoscaling        |  True              ||
||  SupportsStorageEncryption         |  True              ||
||  SupportsStorageThroughput         |  False             ||
||  Vpc                               |  True              ||
|+------------------------------------+--------------------+|
|||                   AvailabilityZones                   |||
||+-------------------------------------------------------+||
|||                         Name                          |||
||+-------------------------------------------------------+||
|||  us-west-2a                                           |||
|||  us-west-2b                                           |||
|||  us-west-2c                                           |||
||+-------------------------------------------------------+||
|||              AvailableProcessorFeatures               |||
||+-----------------+-----------------+-------------------+||
|||  AllowedValues  |  DefaultValue   |       Name        |||
||+-----------------+-----------------+-------------------+||
|||  1,2,3,4        |  4              |  coreCount        |||
|||  1              |  1              |  threadsPerCore   |||
||+-----------------+-----------------+-------------------+||
```
此外，您可以執行下列命令，以取得資料庫執行個體類別的處理器資訊：  
+ `describe-db-instances` – 顯示指定資料庫執行個體的處理器資訊
+ `describe-db-snapshots` – 顯示指定資料庫快照的處理器資訊
+ `describe-valid-db-instance-modifications` – 顯示指定資料庫執行個體處理器的有效修改
在上述命令的輸出中，`null`如果未設定最佳化 CPU，則處理器功能的值為 。

**Example 設定資料庫執行個體的 CPU 核心數量**  
下列範例透過將 CPU 核心數目設定為 4 個threadsPerCore 設定為 1 來修改 *mydbinstance*。使用 立即套用變更`--apply-immediately`。如果您想要在下一個排定的維護時段套用變更，請省略 `--apply-immediately option`。  

```
aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --db-instance-class db.r7i.8xlarge \
    --processor-features "Name=coreCount,Value=4" "Name=threadsPerCore,Value=1" \
    --apply-immediately
```

**Example 傳回資料庫執行個體的預設處理器設定**  
下列範例會將 *mydbinstance* 傳回至其預設處理器值，以修改 mydbinstance。  

```
aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --db-instance-class db.r7i.8xlarge \
    --use-default-processor-features \
    --apply-immediately
```

# Microsoft SQL Server 安全
<a name="SQLServer.Concepts.General.FeatureSupport.UnsupportedRoles"></a>

Microsoft SQL Server 資料庫引擎使用角色型安全。建立資料庫執行個體時您指定的主要使用者名稱是以 SQL Server 身分驗證登入，即 `processadmin`、`public` 和 `setupadmin` 固定伺服器角色的成員。

建立資料庫的任何使用者會指派給該資料庫的 db\$1owner 角色，並具有所有資料庫層級許可 (用於備份的許可除外)。Amazon RDS 會為您管理備份。

以下伺服器層級角色無法在 Amazon RDS for SQL Server 中使用：
+ bulkadmin
+ dbcreator
+ diskadmin
+ securityadmin
+ serveradmin
+ sysadmin

以下伺服器層級許可無法在 RDS for SQL Server 資料庫執行個體上使用：
+ ALTER ANY DATABASE
+ ALTER ANY EVENT NOTIFICATION
+ ALTER RESOURCES
+ ALTER RESOURCES (您可以使用資料庫參數群組 API 操作來修改參數，如需詳細資訊，請參閱[Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)) 
+ AUTHENTICATE SERVER
+ CONTROL\$1SERVER
+ CREATE DDL EVENT NOTIFICATION
+ CREATE ENDPOINT
+ 建立伺服器角色
+ CREATE TRACE EVENT NOTIFICATION
+ DROP ANY DATABASE
+ EXTERNAL ACCESS ASSEMBLY
+ SHUTDOWN (您可以改用 RDS 重新開機選項)
+ UNSAFE ASSEMBLY
+ 變更任何可用性群組
+ 建立可用性群組

## Microsoft SQL Server 資料庫執行個體的 SSL 支援
<a name="SQLServer.Concepts.General.SSL"></a>

您也可以使用 SSL，來加密應用程式與執行 Microsoft SQL Server 的 Amazon RDS 資料庫執行個體之間的連線。您也可以強制資料庫執行個體的所有連線都使用 SSL。如果您強制所有連線都使用 SSL，用戶端自然就會這樣做，用戶端不必有任何動作即可使用 SSL。

所有 AWS 區域中都支援 SSL，而且 SSL 適用於所有支援的 SQL Server 版本。如需更多詳細資訊，請參閱 [對 Microsoft SQL Server 資料庫執行個體使用 SSL](SQLServer.Concepts.General.SSL.Using.md)。

# 對 Microsoft SQL Server 資料庫執行個體使用 SSL
<a name="SQLServer.Concepts.General.SSL.Using"></a>

您可以使用 Secure Sockets Layer (SSL)，來加密用戶端應用程式與執行 Microsoft SQL Server 的 Amazon RDS 資料庫執行個體之間的連線。SSL 支援適用於所有支援的 SQL Server 版本的所有 AWS 區域。

建立 SQL Server 資料庫執行個體時，Amazon RDS 會為執行個體建立 SSL 憑證。SSL 憑證會以一般名稱 (CN) 納入資料庫執行個體端點，讓 SSL 憑證免於詐騙攻擊。

有兩種方法可使用 SSL 來連接至 SQL Server 資料庫執行個體：
+ 強制所有連線使用 SSL — 用戶端自然會這樣做，用戶端不必有任何動作即可使用 SSL。
**注意**  
當您將 `rds.force_ssl` 設定為 `1`，並使用 SSMS 19.3、20.0 和 20.2 版時，請確認下列事項：  
在 SSMS 中啟用**信任伺服器憑證**。
將憑證匯入您的系統中。
+ 加密特定的連線 — 這會設定來自特定用戶端電腦的 SSL 連線，您必須在用戶端設定才能加密連線。

如需 SQL Server 的 Transport Layer Security (TLS) 支援有關的資訊，請參閱 [Microsoft SQL Server 的 TLS 1.2 支援](https://support.microsoft.com/en-ca/help/3135244/tls-1-2-support-for-microsoft-sql-server)。

## 強制連線至資料庫執行個體以使用 SSL
<a name="SQLServer.Concepts.General.SSL.Forcing"></a>

您可以強制資料庫執行個體的所有連線都使用 SSL。如果您強制所有連線都使用 SSL，用戶端自然就會這樣做，用戶端不必有任何動作即可使用 SSL。

如果您要強制使用 SSL，請使用 `rds.force_ssl` 參數。依預設，`rds.force_ssl` 參數設為 `0 (off)`。將 `rds.force_ssl` 參數設為 `1 (on)` 可強制連線使用 SSL。`rds.force_ssl` 參數是靜態，當您變更值之後，您必須重新啟動資料庫執行個體，才能使變更生效。

**強制資料庫執行個體的所有連線都使用 SSL**

1. 查明連接到資料庫執行個體的參數群組：

   1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

   1. 在 Amazon RDS 主控台的右上角，選擇資料庫執行個體 AWS 的區域。

   1. 在導覽窗格中選擇 **Databases (資料庫)**，然後選擇資料庫執行個體的名稱來顯示詳細資訊。

   1. 選擇 **Configuration (組態)** 標籤。在區段中找出 **Parameter group** (參數群組)。

1. 如果需要，請建立新的參數群組。如果您的資料庫執行個體使用預設參數群組，則您必須建立新的參數群組。如果您的資料庫執行個體使用非預設參數群組，您可以選擇編輯現有的參數群組，或建立新的參數群組。如果您編輯現有的參數群組，則變更會影響所有使用該參數群組的資料庫執行個體。

   若要建立新的參數群組，請遵循[在 Amazon RDS 中建立資料庫參數群組](USER_WorkingWithParamGroups.Creating.md)中的說明。

1. 編輯新的或現有的參數群組，將 `rds.force_ssl` 參數設為 `true`。若要編輯參數群組，請遵循[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)中的說明。

1. 如果您已建立新的參數群組，請修改資料庫執行個體來附加新的參數群組。修改資料庫執行個體的 **DB Parameter Group (資料庫參數群組)** 設定。如需更多詳細資訊，請參閱 [修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

1. 重新啟動您的資料庫執行個體。如需更多詳細資訊，請參閱 [在資料庫執行個體](USER_RebootInstance.md)。

## 加密特定連線
<a name="SQLServer.Concepts.General.SSL.Client"></a>

您可以強制資料庫執行個體的所有連線都使用 SSL，也可以只加密來自特定用戶端電腦的連線。若要從特定用戶端使用 SSL，您必須為用戶端電腦取得憑證，在用戶端電腦匯入憑證，然後加密來自用戶端電腦的連線。

**注意**  
所有在 2014 年 8 月 5 日之後建立的 SQL Server 執行個體，在 SSL 憑證的一般名稱 (CN) 欄位中都使用資料庫執行個體端點。在 2014 年 8 月 5 日之前，不會對 VPC 式 SQL Server 執行個體使用 SSL 憑證驗證。如果您有 2014 年 8 月 5 日之前建立的 VPC 式 SQL Server 資料庫執行個體，而且想要使用 SSL 憑證驗證，並確定將執行個體端點納入做為該資料庫執行個體之 SSL 憑證的 CN，請重新命名執行個體。重新命名資料庫執行個體會部署新的憑證，且執行個體會重新啟動，以啟用新的憑證。

### 為用戶端電腦取得憑證
<a name="SQLServer.Concepts.General.SSL.Certificates"></a>

若要將用戶端電腦到執行 Microsoft SQL Server 的 Amazon RDS 資料庫執行個體的連線加密，您在用戶端電腦上需要憑證。

若要取得該憑證，請將憑證下載至用戶端電腦。您可以下載適用於所有區域的根憑證，也可以下載同時包含新舊根憑證的憑證套件。此外，您還能下載區域特定的中繼憑證。如需下載憑證的詳細資訊，請參閱[使用 SSL/TLS 加密與資料庫執行個體或叢集的連線](UsingWithRDS.SSL.md)。

下載適當的憑證之後，請遵循下一節的程序，將該憑證匯入 Microsoft Windows 作業系統。

### 在用戶端電腦匯入憑證
<a name="SQLServer.Concepts.General.SSL.Importing"></a>

您可以使用下列程序，將憑證匯入用戶端電腦上的 Microsoft Windows 作業系統。

**將憑證匯入 Windows 作業系統：**

1. 在 **Start (開始)** 功能表上，在搜尋方塊中輸入 **Run**，然後按 **Enter (Enter)**。

1. 在 **Open (開啟)** 方塊中，輸入 **MMC**，然後選擇 **OK (確定)**。

1. 在 MMC 主控台的 **File (檔案)** 功能表上，選擇 **Add/Remove Snap-in (新增/移除嵌入式管理單元)**。

1. 在 **Add or Remove Snap-ins (新增或移除嵌入式管理單元)** 對話方塊中，從 **Available snap-ins (可用的嵌入式管理單元)** 中選取 **Certificates** (憑證)，然後選擇 **Add (新增)**。

1. 在 **Certificates snap-in (憑證嵌入式管理單元)** 對話方塊中，選擇 **Computer account (電腦帳戶)**，然後選擇 **Next (下一步)**。

1. 在 **Select computer (選取電腦)** 對話方塊中，選擇 **Finish (完成)**。

1. 在 **Add or Remove Snap-ins (新增或移除嵌入式管理單元)** 對話方塊中，選擇 **OK (確定)**。

1. 在 MMC 主控台，展開 **Certificates (憑證)**，開啟 **Trusted Root Certification Authorities (受信任的根憑證授權單位)** 的內容 (右鍵) 功能表，選擇 **All Tasks (所有任務)**，然後選擇 **Import (匯入)**。

1. 在「憑證匯入精靈」的第一頁，選擇 **Next (下一步)**。

1. 在「憑證匯入精靈」的第二頁，選擇 **Browse (瀏覽)**。在瀏覽視窗中，將檔案類型變更為 **All files (\$1.\$1) (所有檔案 (\$1.\$1))**，因為 .pem 不是標準憑證副檔名。找出您先前下載的 .pem 檔案。
**注意**  
從 SQL Server Management Studio (SSMS) 等 Windows 用戶端連線時，建議使用 PKCS\$17 (.p7b) 憑證格式，而非 global-bundle.pem 檔案。.p7b 格式可確保將包括根憑證授權機構和中繼憑證授權機構 (CAs) 在內的完整憑證鏈正確匯入 Windows Certificate Store。這可防止啟用強制加密時可能發生的連線失敗，因為 .pem 匯入可能無法正確安裝完整鏈結。

1. 選擇 **Open (開啟舊檔)**，以選取憑證檔案，然後選擇 **Next (下一步)**。

1. 在「憑證匯入精靈」的第三頁，選擇 **Next (下一步)**。

1. 在「憑證匯入精靈」的第四頁，選擇 **Finish (完成)**。隨即出現對話方塊指出匯入成功。

1. 在 MMC 主控台，展開 **Certificates (憑證)**，展開 **Trusted Root Certification Authorities (受信任的根憑證授權單位)**，然後選擇 **Certificates (憑證)**。找出憑證以確認其存在，如此處所示。  
![\[在 MMC 主控台的導覽窗格中選取了「憑證」資料夾，並且從主控台根目錄、憑證 (本機電腦) 和可信任的根憑證授權單位向下切入。在主頁面中，選取必要的 CA 憑證。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/rds_sql_ssl_cert.png)

### 將執行 Microsoft SQL Server 的 Amazon RDS 資料庫執行個體的連線加密
<a name="SQLServer.Concepts.General.SSL.Encrypting"></a>

將憑證匯入用戶端電腦之後，您就可以將用戶端電腦到執行 Microsoft SQL Server 的 Amazon RDS 資料庫執行個體的連線加密。

若為 SQL Server Management Studio，請使用以下程序。如需 SQL Server Management Studio 的詳細資訊，請參閱[使用 SQL Server Management Studio](http://msdn.microsoft.com/en-us/library/ms174173.aspx)。

**從 SQL Server Management Studio 加密連線**

1. 啟動 SQL Server Management Studio。

1. 在 **Connect to server (連線至伺服器)** 中，鍵入伺服器資訊、登入使用者名稱和密碼。

1. 選擇 **Options (選項)**。

1. 選取 **Encrypt connection (加密連線)**。

1. 選擇 **Connect (連線)**。

1. 執行下列查詢來確認連線已加密。確認查詢傳回的 `true` 為 `encrypt_option`。

   ```
   select ENCRYPT_OPTION from SYS.DM_EXEC_CONNECTIONS where SESSION_ID = @@SPID
   ```

若為其他任何 SQL 用戶端，請使用以下程序。

**加密來自其他 SQL 用戶端的連線**

1. 將 `encrypt=true` 附加至連線字串。此字串可能是選項，也可能是 GUI 工具中連線頁面上的屬性。
**注意**  
對於使用 JDBC 連接的用戶端，若要啟用 SSL 加密，您可能需要將 Amazon RDS SQL 憑證新增至 Java CA 憑證 (cacert) 存放區。您可使用 [keytool](http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/keytool.html) 公用程式做到這點。

1. 執行下列查詢來確認連線已加密。確認查詢傳回的 `true` 為 `encrypt_option`。

   ```
   select ENCRYPT_OPTION from SYS.DM_EXEC_CONNECTIONS where SESSION_ID = @@SPID
   ```

# 設定 SQL Server 安全性通訊協定和密碼
<a name="SQLServer.Ciphers"></a>

您可以使用資料庫參數開啟和關閉特定安全性通訊協定和密碼。您可以設定的安全性參數 (TLS 1.2 版除外) 如下表所示。


****  

| 資料庫參數 | 允許的值 (預設值以粗體表示) | 描述 | 
| --- | --- | --- | 
| rds.tls10 | default、enabled、disabled | TLS 1.0。 | 
| rds.tls11 | default、enabled、disabled | TLS 1.1。 | 
| rds.tls12 | default | TLS 1.2。您無法修改此值。 | 
| rds.fips | 0、1 |  當您將參數設定為 1 時，RDS 會強制使用符合美國聯邦資訊處理標準 (FIPS) 140-2 標準的模組。 如需詳細資訊，請參閱 Microsoft 文件中[使用符合 FIPS 140-2 模式的 SQL Server 2016](https://docs.microsoft.com/en-us/troubleshoot/sql/security/sql-2016-fips-140-2-compliant-mode)。  | 
| rds.rc4 | default、enabled、disabled | RC4 串流密碼。 | 
| rds.diffie-hellman | default、enabled、disabled | Diffie-Hellman 金鑰交換加密。 | 
| rds.diffie-hellman-min-key-bit-length | default、1024、2048、3072、4096 | Diffie-Hellman 金鑰的最小位元長度。 | 
| rds.curve25519 | default、enabled、disabled | Curve25519 橢圓曲線加密密碼。並非所有引擎版本都支援此參數。 | 
| rds.3des168 | default、enabled、disabled | 具有 168 位元金鑰長度的三重資料加密標準 (DES) 加密密碼。 | 

**注意**  
對於 16.00.4120.1、15.00.4365.2、14.00.3465.1、13.00.6435.1 和 12.00.6449.1 之後的次要引擎版本，會*停用*資料庫參數 `rds.tls10`、`rds.tls11`、`rds.rc4`、`rds.curve25519` 和 `rds.3des168` 的預設設定。其他版本的預設設定會*啟用*。  
對於 16.00.4120.1、15.00.4365.2、14.00.3465.1、13.00.6435.1 和 12.00.6449.1 之後的次要引擎版本，`rds.diffie-hellman-min-key-bit-length` 的預設設定為 3072。其他版本的預設設定為 2048。

請使用下列程序來設定安全性通訊協定和密碼：

1. 建立自訂資料庫參數群組。

1. 修改參數群組中的參數。

1. 將資料庫參數群組與您的資料庫執行個體建立關聯。

如需資料庫參數群組的詳細資訊，請參閱[Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。

## 建立安全性相關參數群組
<a name="CreateParamGroup.Ciphers"></a>

為對應到 SQL Server 版本和資料庫執行個體版本的安全性相關參數建立參數群組。

### 主控台
<a name="CreateParamGroup.Ciphers.Console"></a>

下列範例會建立 SQL Server Standard Edition 2016 的參數群組。

**建立參數群組**

1. 登入 AWS 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Parameter groups** (參數群組)。

1. 選擇 **Create parameter group (建立參數群組)**。

1. 在 **Create parameter group (建立參數群組)** 窗格中執行下列動作：

   1. 對於 **Parameter group family (參數群組家族)**，請選擇 **sqlserver-se-13.0**。

   1. 對於 **Group name (群組名稱)**，輸入參數群組的識別碼，例如 **sqlserver-ciphers-se-13**。

   1. 對於 **Description (說明)**，輸入 **Parameter group for security protocols and ciphers**。

1. 選擇**建立**。

### CLI
<a name="CreateParamGroup.Ciphers.CLI"></a>

下列範例會建立 SQL Server Standard Edition 2016 的參數群組。

**建立參數群組**
+ 請執行下列其中一個命令：  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds create-db-parameter-group \
      --db-parameter-group-name sqlserver-ciphers-se-13 \
      --db-parameter-group-family "sqlserver-se-13.0" \
      --description "Parameter group for security protocols and ciphers"
  ```

  針對 Windows：

  ```
  aws rds create-db-parameter-group ^
      --db-parameter-group-name sqlserver-ciphers-se-13 ^
      --db-parameter-group-family "sqlserver-se-13.0" ^
      --description "Parameter group for security protocols and ciphers"
  ```

## 修改安全性相關參數
<a name="ModifyParams.Ciphers"></a>

修改參數群組中對應至 SQL Server 版本和資料庫執行個體版本的安全性相關參數。

### 主控台
<a name="ModifyParams.Ciphers.Console"></a>

下列範例會修改您為 SQL Server Standard Edition 2016 建立的參數群組。此範例會關閉 TLS 1.0 版。

**修改參數群組**

1. 登入 AWS 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Parameter groups (參數群組)**。

1. 選擇參數群組，例如 **sqlserver-ciphers-se-13**。

1. 在 **Parameters (參數)** 下，篩選 **rds** 的參數清單。

1. 選擇 **Edit parameters** (編輯參數)。

1. 選擇 **rds.tls10**。

1. 對於 **Values (值)**，選擇 **disabled**。

1. 選擇**儲存變更**。

### CLI
<a name="ModifyParams.Ciphers.CLI"></a>

下列範例會修改您為 SQL Server Standard Edition 2016 建立的參數群組。此範例會關閉 TLS 1.0 版。

**修改參數群組**
+ 請執行下列其中一個命令：  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds modify-db-parameter-group \
      --db-parameter-group-name sqlserver-ciphers-se-13 \
      --parameters "ParameterName='rds.tls10',ParameterValue='disabled',ApplyMethod=pending-reboot"
  ```

  針對 Windows：

  ```
  aws rds modify-db-parameter-group ^
      --db-parameter-group-name sqlserver-ciphers-se-13 ^
      --parameters "ParameterName='rds.tls10',ParameterValue='disabled',ApplyMethod=pending-reboot"
  ```

## 將安全性相關參數群組與資料庫執行個體建立關聯
<a name="AssocParamGroup.Ciphers"></a>

若要將參數群組與資料庫執行個體建立關聯，請使用 AWS 管理主控台 或 AWS CLI。

### 主控台
<a name="AssocParamGroup.Ciphers.Console"></a>

您可以將參數群組與新的或現有的資料庫執行個體建立關聯。
+ 對於新的資料庫執行個體，請在啟動執行個體時建立關聯。如需更多詳細資訊，請參閱 [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。
+ 對於現有的資料庫執行個體，請透過修改執行個體來建立關聯。如需詳細資訊，請參閱 [修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

### CLI
<a name="AssocParamGroup.Ciphers.CLI"></a>

您可以將參數群組與新的或現有的資料庫執行個體建立關聯。

**使用參數群組建立資料庫執行個體**
+ 指定建立參數群組時所使用的相同資料庫引擎類型和主要版本。  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds create-db-instance \
      --db-instance-identifier mydbinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-se \
      --engine-version 13.00.5426.0.v1 \
      --allocated-storage 100 \
      --master-user-password secret123 \
      --master-username admin \
      --storage-type gp2 \
      --license-model li \
      --db-parameter-group-name sqlserver-ciphers-se-13
  ```

  針對 Windows：

  ```
  aws rds create-db-instance ^
      --db-instance-identifier mydbinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-se ^
      --engine-version 13.00.5426.0.v1 ^
      --allocated-storage 100 ^
      --master-user-password secret123 ^
      --master-username admin ^
      --storage-type gp2 ^
      --license-model li ^
      --db-parameter-group-name sqlserver-ciphers-se-13
  ```
**注意**  
指定此處所顯示提示以外的密碼，作為安全最佳實務。

**修改資料庫執行個體並建立參數群組的關聯**
+ 請執行下列其中一個命令：  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds modify-db-instance \
      --db-instance-identifier mydbinstance \
      --db-parameter-group-name sqlserver-ciphers-se-13 \
      --apply-immediately
  ```

  針對 Windows：

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier mydbinstance ^
      --db-parameter-group-name sqlserver-ciphers-se-13 ^
      --apply-immediately
  ```

# 將應用程式更新為使用新的 SSL/TLS 憑證來連線至 Microsoft SQL Server 資料庫執行個體
<a name="ssl-certificate-rotation-sqlserver"></a>

自 2023 年 1 月 13 日起，Amazon RDS 已發佈新的憑證認證機構 (CA) 憑證，使用 Secure Socket Layer 或 Transport Layer Security (SSL/TLS) 來連線至 RDS 資料庫執行個體。接下來，您可以找到更新應用程式使用新憑證的相關資訊。

本主題可協助您判斷任何用戶端應用程式是否使用 SSL/TLS 連線至您的資料庫執行個體。若是如此，您可以進一步檢查那些應用程式是否需要驗證憑證才能連線。

**注意**  
有些應用程式設定為只有在成功驗證伺服器上的憑證時，才能連線至 SQL Server 資料庫執行個體。  
對於這些應用程式，您必須更新用戶端應用程式信任存放區來包含新的 CA 憑證。

更新用戶端應用程式信任存放區中的 CA 憑證之後，您就可以在資料庫執行個體輪換憑證。強烈建議先在開發或預備環境中測試這些步驟，再於生產環境中實作。

如需憑證輪換的詳細資訊，請參閱[輪換您的 SSL/TLS 憑證](UsingWithRDS.SSL-certificate-rotation.md)。如需下載憑證的詳細資訊，請參閱[使用 SSL/TLS 加密與資料庫執行個體或叢集的連線](UsingWithRDS.SSL.md)。如需對 Microsoft SQL Server 資料庫執行個體使用 SSL/TLS 的資訊，請參閱[對 Microsoft SQL Server 資料庫執行個體使用 SSL](SQLServer.Concepts.General.SSL.Using.md)。

**Topics**
+ [判斷任何應用程式是否使用 SSL 連線至 Microsoft SQL Server 資料庫執行個體](#ssl-certificate-rotation-sqlserver.determining-server)
+ [判斷用戶端是否需要驗證憑證才能連線](#ssl-certificate-rotation-sqlserver.determining-client)
+ [更新應用程式信任存放區](#ssl-certificate-rotation-sqlserver.updating-trust-store)

## 判斷任何應用程式是否使用 SSL 連線至 Microsoft SQL Server 資料庫執行個體
<a name="ssl-certificate-rotation-sqlserver.determining-server"></a>

在資料庫執行個體組態中檢查 `rds.force_ssl` 參數的值。依預設，`rds.force_ssl` 參數會設為 0 (關閉)。如果 `rds.force_ssl` 參數設為 1 (開啟)，則用戶端需要使用 SSL/TLS 進行連線。如需參數群組的詳細資訊，請參閱[Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。

執行下列查詢，以取得資料庫執行個體的所有已開啟連線的目前加密選項。如果連線已加密，`ENCRYPT_OPTION` 欄會傳回 `TRUE`。

```
select SESSION_ID,
    ENCRYPT_OPTION,
    NET_TRANSPORT,
    AUTH_SCHEME
    from SYS.DM_EXEC_CONNECTIONS
```

此查詢只顯示目前連線。不會指出過去曾經連線又中斷連線的應用程式是否使用 SSL。

## 判斷用戶端是否需要驗證憑證才能連線
<a name="ssl-certificate-rotation-sqlserver.determining-client"></a>

您可以檢查不同類型的用戶端是否需要驗證憑證才能連線。

**注意**  
如果您使用的連接器未列出，請參閱特定連接器的文件，以取得該連接器如何強制使用加密連線的相關資訊。如需詳細資訊，請參閱 Microsoft SQL Server 文件中的 [Microsoft SQL 資料庫的連線模組](https://docs.microsoft.com/en-us/sql/connect/sql-connection-libraries?view=sql-server-ver15)。

### SQL Server Management Studio
<a name="ssl-certificate-rotation-sqlserver.determining-client.management-studio"></a>

檢查是否強制 SQL Server Management Studio 連線使用加密：

1. 啟動 SQL Server Management Studio。

1. 在**連線到伺服器**中，輸入伺服器資訊、登入使用者名稱和密碼。

1. 選擇 **Options (選項)**。

1. 在連線頁面上，檢查是否已選取**加密連線**。

如需 SQL Server Management Studio 的詳細資訊，請參閱[使用 SQL Server Management Studio](http://msdn.microsoft.com/en-us/library/ms174173.aspx)。

### Sqlcmd
<a name="ssl-certificate-rotation-sqlserver.determining-client.sqlcmd"></a>

以下 `sqlcmd` 用戶端範例會示範如何檢查指令碼的 SQL Server 連線，以判斷成功的連線是否需要有效憑證。如需詳細資訊，請參閱 Microsoft SQL Server 文件中的[使用 sqlcmd 進行連線](https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/connecting-with-sqlcmd?view=sql-server-ver15)。

使用 `sqlcmd` 用戶端時，如果您使用 `-N` 命令引數來加密連線，則需要以伺服器憑證來驗證 SSL 連線，如下列範例所示。

```
$ sqlcmd -N -S dbinstance.rds.amazon.com -d ExampleDB                     
```

**注意**  
如果是以 `-C` 選項叫用 `sqlcmd`，即使伺服器憑證不符合用戶端信任存放區，還是會受到信任。

### ADO.NET
<a name="ssl-certificate-rotation-sqlserver.determining-client.adonet"></a>

在下列範例中，應用程式使用 SSL 進行連線，且必須驗證伺服器憑證。

```
using SQLC = Microsoft.Data.SqlClient;
 
...
 
    static public void Main()  
    {  
        using (var connection = new SQLC.SqlConnection(
            "Server=tcp:dbinstance.rds.amazon.com;" +
            "Database=ExampleDB;User ID=LOGIN_NAME;" +
            "Password=YOUR_PASSWORD;" + 
            "Encrypt=True;TrustServerCertificate=False;"
            ))
        {  
            connection.Open();  
            ...
        }
```

### Java
<a name="ssl-certificate-rotation-sqlserver.determining-client.java"></a>

在下列範例中，應用程式使用 SSL 進行連線，且必須驗證伺服器憑證。

```
String connectionUrl =   
    "jdbc:sqlserver://dbinstance.rds.amazon.com;" +  
    "databaseName=ExampleDB;integratedSecurity=true;" +  
    "encrypt=true;trustServerCertificate=false";
```

對於使用 JDBC 連接的用戶端，若要啟用 SSL 加密，您可能需要將 Amazon RDS 憑證新增至 Java CA 憑證存放區。如需說明，請參閱 Microsoft SQL Server 文件中的[設定用戶端的加密](https://docs.microsoft.com/en-us/SQL/connect/jdbc/configuring-the-client-for-ssl-encryption?view=sql-server-2017)。您也可以將 `trustStore=path-to-certificate-trust-store-file` 附加至連線字串，以直接提供信任的 CA 憑證檔案名稱。

**注意**  
如果您在連線字串中使用 `TrustServerCertificate=true` (其對等設定)，連線程序會略過信任鏈驗證。在此情況下，即使無法驗證憑證，應用程式還是會連線。使用 `TrustServerCertificate=false` 可強制憑證驗證，也是最佳實務。

## 更新應用程式信任存放區
<a name="ssl-certificate-rotation-sqlserver.updating-trust-store"></a>

您可以為使用 Microsoft SQL Server 的應用程式更新信任存放區。如需說明，請參閱[加密特定連線](SQLServer.Concepts.General.SSL.Using.md#SQLServer.Concepts.General.SSL.Client)。另外，請參閱 Microsoft SQL Server 文件中的[設定用戶端的加密](https://docs.microsoft.com/en-us/SQL/connect/jdbc/configuring-the-client-for-ssl-encryption?view=sql-server-2017)。

如果您使用的作業系統不是 Microsoft Windows，請參閱有關 SSL/TLS 實作的軟體分發文件，以取得新增根 CA 憑證的相關資訊。例如，OpenSSL 和 GnuTLS 是常用的選項。使用實作方法將信任新增至 RDS 根 CA 憑證。Microsoft 提供在某些系統上設定憑證的相關指示。

如需下載根憑證的資訊，請參閱 [使用 SSL/TLS 加密與資料庫執行個體或叢集的連線](UsingWithRDS.SSL.md)。

如需匯入憑證的範例指令碼，請參閱 [將憑證匯入信任存放區的範例指令碼](UsingWithRDS.SSL-certificate-rotation.md#UsingWithRDS.SSL-certificate-rotation-sample-script)。

**注意**  
更新信任存放區時，除了新增憑證，您還可以保留舊憑證。

## Microsoft SQL Server 資料庫執行個體的合規計劃支援
<a name="SQLServer.Concepts.General.Compliance"></a>

AWS 範圍內的服務已由第三方稽核人員完整評估，並導致認證、合規證明或營運授權 (ATO)。如需詳細資訊，請參閱[合規計劃的AWS 服務範圍](https://aws.amazon.com/compliance/services-in-scope/)。

### Microsoft SQL Server 資料庫執行個體的 HIPAA 支援
<a name="SQLServer.Concepts.General.HIPAA"></a>

您可以使用 Amazon RDS for Microsoft SQL Server 資料庫來建置符合 HIPAA 規範的應用程式。依據與 AWS簽署的商業夥伴協議 (BAA)，您可以存放醫療保健相關的資訊，包括受保護醫療資訊 (PHI)。如需詳細資訊，請參閱 [HIPAA 合規](https://aws.amazon.com/compliance/hipaa-compliance/)。

Amazon RDS for SQL Server 支援下列版本的 HIPAA：
+ SQL Server 2022 Enterprise、Standard 和 Web Edition
+ SQL Server 2019 Enterprise、Standard 和 Web Edition
+ SQL Server 2017 Enterprise、Standard 和 Web Edition
+ SQL Server 2016 Enterprise、Standard 和 Web Edition

若要在資料庫執行個體上啟用 HIPAA 支援，請設定下列三個元件。


****  

| 元件 | 詳細資訊 | 
| --- | --- | 
|  稽核  |  若要設定，請將 `rds.sqlserver_audit` 參數的值設為 `fedramp_hipaa`。如果資料庫執行個體尚未使用資料庫參數群組，則您必須建立自訂參數群組，並將它附加至資料庫執行個體，然後才能修改 `rds.sqlserver_audit` 參數。如需更多詳細資訊，請參閱 [Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。  | 
|  傳輸加密  |  若要設定傳輸加密，請強制資料庫執行個體的所有連線皆使用 Secure Sockets Layer (SSL)。如需更多詳細資訊，請參閱 [強制連線至資料庫執行個體以使用 SSL](SQLServer.Concepts.General.SSL.Using.md#SQLServer.Concepts.General.SSL.Forcing)。  | 
|  靜態加密  |  若要設定靜態加密，您有兩個選項： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html)  | 

# Amazon RDS 上的 Microsoft SQL Server 版本
<a name="SQLServer.Concepts.General.VersionSupport"></a>

建立新的資料庫執行個體時，您可以指定使用目前支援的任一 Microsoft SQL Server 版本。此外，您也可以指定 Microsoft SQL Server 主要版本 (如 Microsoft SQL Server 14.00 版)，以及指定主要版本支援的任一次要版本。若未指定版本，Amazon RDS 會預設使用支援的版本，通常是最新版本。若已指定主要版本，但未指定次要版本，Amazon RDS 會預設使用您指定主要版本的最新次要版本。

下表顯示所有版本和所有 AWS 區域支援的 SQL Server 版本，除非另外註明。

**注意**  
您也可以使用 [ describe-db-engine-versions](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-engine-versions.html) AWS CLI 命令來查看支援的版本清單，以及新建立資料庫執行個體的預設值。您可以執行 [describe-db-major-engine-versions](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-major-engine-versions.html) AWS CLI 命令或使用 [DescribeDBMajorEngineVersions](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBMajorEngineVersions.html) RDS API 操作來檢視 SQL Server 資料庫的主要版本。


| 主要版本 | 次要版本 | RDS API `EngineVersion` 與 CLI `engine-version` | 
| --- | --- | --- | 
| SQL Server 2022 |  16.00.4236.2 (CU23) 16.00.4230.2 (CU22 GDR) 16.00.4225.2 (CU22) 16.00.4215.2 (CU21) 16.00.4210.1 (CU20 GDR) 16.00.4205.1 (CU20) 16.00.4195.2 (CU19) 16.00.4185.3 (CU18) 16.00.4175.1 (CU17) 16.00.4165.4 (CU16) 16.00.4150.1 (CU15) 16.00.4140.3 (CU14 GDR) 16.00.4135.4 (CU14) 16.00.4131.2 (CU13) 16.00.4125.3 (CU13) 16.00.4120.1 (CU12 GDR) 16.00.4115.5 (CU12) 16.00.4105.2 (CU11) 16.00.4095.4 (CU10) 16.00.4085.2 (CU9)  |  `16.00.4236.2.v1` `16.00.4230.2.v1` `16.00.4225.2.v1` `16.00.4215.2.v1` `16.00.4210.1.v1` `16.00.4205.1.v1` `16.00.4195.2.v1` `16.00.4185.3.v1` `16.00.4175.1.v1` `16.00.4165.4.v1` `16.00.4150.1.v1` `16.00.4140.3.v1` `16.00.4135.4.v1` `16.00.4131.2.v1` `16.00.4125.3.v1` `16.00.4120.1.v1` `16.00.4115.5.v1` `16.00.4105.2.v1` `16.00.4095.4.v1` `16.00.4085.2.v1`  | 
| SQL Server 2019 |  15.00.4455.2 (CU32 GDR) 15.00.4445.1 (CU32 GDR) 15.00.4440.1 (CU32 GDR) 15.00.4435.7 (CU32) 15.00.4430.1 (CU32) 15.00.4420.2 (CU31) 15.00.4415.2 (CU30) 15.00.4410.1 (CU29 GDR) 15.00.4395.2 (CU28) 15.00.4390.2 (CU28) 15.00.4385.2 (CU28) 15.00.4382.1 (CU27) 15.00.4375.4 (CU27) 15.00.4365.2 (CU26) 15.00.4355.3 (CU25) 15.00.4345.5 (CU24) 15.00.4335.1 (CU23) 15.00.4322.2 (CU22) 15.00.4316.3 (CU21) 15.00.4312.2 (CU20) 15.00.4236.7 (CU16) 15.00.4198.2 (CU15) 15.00.4153.1 (CU12) 15.00.4073.23 (CU8) 15.00.4043.16 (CU5)  |  `15.00.4455.2.v1` `15.00.4445.1.v1` `15.00.4440.1.v1` `15.00.4435.7.v1` `15.00.4430.1.v1` `15.00.4420.2.v1` `15.00.4415.2.v1` `15.00.4410.1.v1` `15.00.4395.2.v1` `15.00.4390.2.v1` `15.00.4385.2.v1` `15.00.4382.1.v1` `15.00.4375.4.v1` `15.00.4365.2.v1` `15.00.4355.3.v1` `15.00.4345.5.v1` `15.00.4335.1.v1` `15.00.4322.2.v1` `15.00.4316.3.v1` `15.00.4312.2.v1` `15.00.4236.7.v1` `15.00.4198.2.v1` `15.00.4153.1.v1` `15.00.4073.23.v1` `15.00.4043.16.v1`  | 
| SQL Server 2017 |  14.00.3515.1 (CU31 GDR) 14.00.3505.1 (CU31 GDR) 14.00.3500.1.(CU31 GDR) 14.00.3495.9 (CU31 GDR) 14.00.3485.1 (CU31 GDR) 14.00.3480.1 (CU31) 14.00.3475.1 (CU31) 14.00.3471.2 (CU31) 14.00.3465.1 (CU31) 14.00.3460.9 (CU31) 14.00.3451.2 (CU30) 14.00.3421.10 (CU27) 14.00.3401.7 (CU25) 14.00.3381.3 (CU23) 14.00.3356.20 (CU22) 14.00.3294.2 (CU20) 14.00.3281.6 (CU19)  |  `14.00.3515.1.v1` `14.00.3505.1.v1` `14.00.3500.1.v1` `14.00.3495.9.v1` `14.00.3485.1.v1` `14.00.3480.1.v1` `14.00.3475.1.v1` `14.00.3471.2.v1` `14.00.3465.1.v1` `14.00.3460.9.v1` `14.00.3451.2.v1` `14.00.3421.10.v1` `14.00.3401.7.v1` `14.00.3381.3.v1` `14.00.3356.20.v1` `14.00.3294.2.v1` `14.00.3281.6.v1`  | 
| SQL Server 2016 |  13.00.6475.1 (GDR) 13.00.6470.1 (GDR) 13.00.6465.1 (GDR) 13.00.6460.7 (GDR) 13.00.6455.2 (GDR) 13.00.6450.1 (GDR) 13.00.6445.1 (GDR) 13.00.6441.1 (GDR) 13.00.6435.1 (GDR) 13.00.6430.49 (GDR) 13.00.6419.1 (SP3 \$1 Hotfix) 13.00.6300.2 (SP3)  |  `14.00.6475.1.v1` `14.00.6470.1.v1` `13.00.6465.1.v1` `13.00.6460.7.v1` `13.00.6455.2.v1` `13.00.6450.1.v1` `13.00.6445.1.v1` `13.00.6441.1.v1` `13.00.6435.1.v1` `13.00.6430.49.v1` `13.00.6419.1.v1` `13.00.6300.2.v1`  | 

## Amazon RDS 中的版本管理
<a name="SQLServer.Concepts.General.Version-Management"></a>

Amazon RDS 包含靈活的版本管理功能，可讓您控制資料庫執行個體修補或升級的時機與方式。透過這項功能，您可以對資料庫引擎執行以下操作：
+ 維護與資料庫引擎修補程式版本的相容性。
+ 測試新的修補程式版本，確定這些版本可搭配您的應用程式使用後，再將其部署至生產環境。
+ 按照您的服務水準協議和時間需求，規劃並執行版本升級作業。

### Amazon RDS 中的 Microsoft SQL Server 引擎修補
<a name="SQLServer.Concepts.General.Patching"></a>

Amazon RDS 會定期將官方 Microsoft SQL Server 資料庫修補程式彙整到 Amazon RDS 特定的資料庫執行個體引擎版本中。如需各引擎版本中 Microsoft SQL Server 修補程式的詳細資訊，請參閱 [Amazon RDS 上的版本和功能支援](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html#SQLServer.Concepts.General.FeatureSupport)。

目前，您需要在資料庫執行個體上手動升級所有引擎。如需更多詳細資訊，請參閱 [Microsoft SQL Server 資料庫引擎的升級](USER_UpgradeDBInstance.SQLServer.md)。

### Amazon RDS 上的 Microsoft SQL Server 主要引擎版本棄用排程
<a name="SQLServer.Concepts.General.Deprecated-Versions"></a>

下表顯示計劃的 Microsoft SQL Server 主要引擎版本棄用排程。


| Date | 資訊 | 
| --- | --- | 
| 2026 年 7 月 14 日 |  Microsoft 將停止 SQL Server 2016 的重要修補程式更新。如需詳細資訊，請參閱 [Microsoft 文件中的 Microsoft SQL Server 2016](https://learn.microsoft.com/en-us/lifecycle/products/sql-server-2016)。  | 
| 2026 年 7 月 14 日 |  Amazon RDS 計劃結束對 RDS for SQL Server 上的 Microsoft SQL Server 2016 支援。屆時，任何剩餘的執行個體都會排程遷移至 SQL Server 2017 （可用的最新次要版本）。如需詳細資訊，請參閱[公告：Amazon RDS for SQL Server 結束支援 Microsoft SQL Server 2016](https://repost.aws/articles/ARGkeWligDSU-MQgBwUQj0nA/announcement-amazon-rds-for-sql-server-ending-support-for-microsoft-sql-server-2016)。 若要避免從 Microsoft SQL Server 2016 自動升級，您可以在方便的時間升級。如需詳細資訊，請參閱[升級資料庫執行個體 引擎版本](USER_UpgradeDBInstance.Upgrading.md)。  | 
| 2026 年 1 月 15 日 | Amazon RDS 開始停用使用 Microsoft SQL Server 2016 建立新的 RDS for SQL Server 資料庫執行個體。如需詳細資訊，請參閱[公告：Amazon RDS for SQL Server 結束支援 Microsoft SQL Server 2016](https://repost.aws/articles/ARGkeWligDSU-MQgBwUQj0nA/announcement-amazon-rds-for-sql-server-ending-support-for-microsoft-sql-server-2016)。 | 
| 2024 年 7 月 9 日 |  Microsoft 將停止更新 SQL Server 2014 的重大修補程式。如需詳細資訊，請參閱 Microsoft 文件中的 [Microsoft SQL Server 2014](https://learn.microsoft.com/en-us/lifecycle/products/sql-server-2014)。  | 
|  2024 年 6 月 1 日 |  Amazon RDS 計劃在 RDS for SQL Server 上終止對 Microsoft SQL Server 2014 的支援。屆時，所有剩餘的執行個體會排定遷移至 SQL Server 2016 (最新可用次要版本)。如需詳細資訊，請參閱[公告：Amazon RDS for SQL Server 終止對 SQL Server 2014 主要版本的支援](https://repost.aws/articles/AR-eyAH1PSSuevuZRUE9FV3A)。 為避免系統自動從 Microsoft SQL Server 2014 升級，您可在方便時自行升級。如需詳細資訊，請參閱[升級資料庫執行個體 引擎版本](USER_UpgradeDBInstance.Upgrading.md)。  | 
| 2022 年 7 月 12 日 |  Microsoft 將停止 SQL Server 2012 的重大修補程式更新。如需詳細資訊，請參閱 Microsoft 文件中的 [Microsoft SQL Server 2012](https://docs.microsoft.com/en-us/lifecycle/products/microsoft-sql-server-2012)。  | 
| 2022 年 6 月 1 日 |  Amazon RDS 計劃在 RDS for SQL Server 上終止對 Microsoft SQL Server 2012 的支援。屆時，所有剩餘的執行個體會排定遷移至 SQL Server 2014 (最新可用次要版本)。如需詳細資訊，請參閱[公告：Amazon RDS for SQL Server 終止對 SQL Server 2012 主要版本的支援](https://repost.aws/questions/QUFNiETqrMQ_WT_AXSxOYNOA)。 為避免系統自動從 Microsoft SQL Server 2012 升級，您可在方便時自行升級。如需詳細資訊，請參閱[升級資料庫執行個體 引擎版本](USER_UpgradeDBInstance.Upgrading.md)。  | 
| 2021 年 9 月 1 日 | Amazon RDS 開始停用使用 Microsoft SQL Server 2012 來建立新的 RDS for SQL Server 資料庫執行個體。如需詳細資訊，請參閱[公告：Amazon RDS for SQL Server 終止對 SQL Server 2012 主要版本的支援](https://repost.aws/questions/QUFNiETqrMQ_WT_AXSxOYNOA)。 | 
| 2019 年 7 月 12 日 |  Amazon RDS 團隊已於 2019 年 6 月移除對 Microsoft SQL Server 2008 R2 的支援。剩餘的 Microsoft SQL Server 2008 R2 執行個體會遷移至 SQL Server 2012 (最新的可用次要版本)。 為避免系統自動從 Microsoft SQL Server 2008 R2 升級，您可以在方便的時候自行升級。如需更多詳細資訊，請參閱 [升級資料庫執行個體 引擎版本](USER_UpgradeDBInstance.Upgrading.md)。  | 
| 2019 年 4 月 25 日 | 2019 年 4 月底前，您無法再使用 Microsoft SQL Server 2008R2 建立新的 Amazon RDS for SQL Server 資料庫執行個體。 | 

# Amazon RDS 上的 Microsoft SQL Server 功能
<a name="SQLServer.Concepts.General.FeatureSupport"></a>

Amazon RDS 上支援的 SQL Server 版本包含下列功能。一般而言，除非 Microsoft 文件中另有說明，否則版本也會包含先前版本的功能。

**Topics**
+ [Microsoft SQL Server 2022 功能](#SQLServer.Concepts.General.FeatureSupport.2022)
+ [Microsoft SQL Server 2019 功能](#SQLServer.Concepts.General.FeatureSupport.2019)
+ [Microsoft SQL Server 2017 功能](#SQLServer.Concepts.General.FeatureSupport.2017)
+ [Microsoft SQL Server 2016 功能](#SQLServer.Concepts.General.FeatureSupport.2016)
+ [Microsoft SQL Server 2014 終止對 Amazon RDS 的支援](#SQLServer.Concepts.General.FeatureSupport.2014)
+ [Microsoft SQL Server 2012 已終止對 Amazon RDS 的支援](#SQLServer.Concepts.General.FeatureSupport.2012)
+ [Microsoft SQL Server 2008 R2 已終止對 Amazon 的支援](#SQLServer.Concepts.General.FeatureSupport.2008)
+ [Microsoft SQL Server 資料庫執行個體的變更資料擷取支援](SQLServer.Concepts.General.CDC.md)
+ [不支援的功能和具備有限支援的功能](SQLServer.Concepts.General.FeatureNonSupport.md)

## Microsoft SQL Server 2022 功能
<a name="SQLServer.Concepts.General.FeatureSupport.2022"></a>

SQL Server 2022 包含許多新功能，例如：
+ 參數敏感性計劃最佳化 – 允許將多個快取的計劃用於單一參數化陳述式，以期能減少參數探查的問題。
+ SQL Server Ledger – 可讓您以密碼編譯方式證明您的資料並未遭到未經授權的更改。
+ 交易日誌檔案增長事件的即時檔案初始化 – 可加速執行日誌增長事件 (最高 64MB)，包括啟用 TDE 的資料庫。
+ 系統頁面鎖定並行增強功能 – 減少頁面鎖定爭用，同時配置和取消配置資料頁面與範圍，為 `tempdb` 重度工作負載提供了顯著的效能提升。

如需 SQL Server 2022 功能的完整清單，請參閱 Microsoft 說明文件[中 SQL Server 2022 中的新增功能 (16.x) ](https://learn.microsoft.com/en-us/sql/sql-server/what-s-new-in-sql-server-2022?view=sql-server-ver16)。

如需未支援的功能清單，請參閱[不支援的功能和具備有限支援的功能](SQLServer.Concepts.General.FeatureNonSupport.md)。

## Microsoft SQL Server 2019 功能
<a name="SQLServer.Concepts.General.FeatureSupport.2019"></a>

SQL Server 2019 包括許多新功能，如下：
+ 加速資料庫復原 (ADR) – 可減少重新啟動或長時間執行的交易復原之後的損毀復原時間。
+ 智慧型查詢處理 (IQP)：
  + 資料列模式記憶體授權回饋 – 會自動更正過度授權，否則會導致記憶體浪費並減少並行性。
  + 資料列儲存區上的批次模式 – 啟用分析工作負載的批次模式執行，而不需要資料欄儲存區索引。
  + 資料表變數延遲編譯 – 改善參考資料表變數之查詢的計劃品質和整體效能。
+ 智慧型效能：
  + `OPTIMIZE_FOR_SEQUENTIAL_KEY` 索引選項 – 改善索引中高並行插入的輸送量。
  + 改良的間接檢查點擴展性 – 有助於處理繁重 DML 工作負載的資料庫
  + 並行頁面可用空間 (PFS) 更新 – 可讓處理為共用鎖定，而非獨佔鎖定。
+ 監控改善：
  + `WAIT_ON_SYNC_STATISTICS_REFRESH` 等待類型 – 顯示用於同步統計資料重新整理作業的累積執行處理層次時間。
  + 資料庫範圍的組態 – 包括 `LIGHTWEIGHT_QUERY_PROFILING` 和 `LAST_QUERY_PLAN_STATS`。
  + 動態管理功能 (DMF) – 包含 `sys.dm_exec_query_plan_stats` 和 `sys.dm_db_page_info`。
+ 詳細截斷警告 – 資料截斷錯誤訊息預設為包含資料表和資料行名稱以及截斷的值。
+ 可恢復的線上索引建立 – 在 SQL Server 2017 中，只支援可恢復的線上索引重建。

如需 SQL Server 2019 功能的完整清單，請參閱 Microsoft 說明文件中的 [SQL Server 2019 (15.x) 的新功能](https://docs.microsoft.com/en-us/sql/sql-server/what-s-new-in-sql-server-ver15)。

如需未支援的功能清單，請參閱[不支援的功能和具備有限支援的功能](SQLServer.Concepts.General.FeatureNonSupport.md)。

## Microsoft SQL Server 2017 功能
<a name="SQLServer.Concepts.General.FeatureSupport.2017"></a>

SQL Server 2017 包括許多新功能，如下：
+ 調適型查詢處理
+ 自動計畫校正 (自動調校功能)
+ GraphDB
+ 可繼續重建索引

如需 SQL Server 2017 功能的完整清單，請參閱 Microsoft 說明文件中的 [SQL Server 2017 的新功能](https://docs.microsoft.com/en-us/sql/sql-server/what-s-new-in-sql-server-2017)。

如需未支援的功能清單，請參閱[不支援的功能和具備有限支援的功能](SQLServer.Concepts.General.FeatureNonSupport.md)。

## Microsoft SQL Server 2016 功能
<a name="SQLServer.Concepts.General.FeatureSupport.2016"></a>

Amazon RDS 支援下列 SQL Server 2016 功能：
+ 一律加密
+ JSON 支援
+ 營運分析
+ 查詢存放區
+ 時態表

如需 SQL Server 2016 功能的完整清單，請參閱 Microsoft 說明文件中的 [SQL Server 2016 的新功能](https://docs.microsoft.com/en-us/sql/sql-server/what-s-new-in-sql-server-2016)。

## Microsoft SQL Server 2014 終止對 Amazon RDS 的支援
<a name="SQLServer.Concepts.General.FeatureSupport.2014"></a>

SQL Server 2014 已終止對 Amazon RDS 的支援。

RDS 正將仍在使用 SQL Server 2014 的所有現有資料庫執行個體升級至 SQL Server 2016 的最新次要版本。如需詳細資訊，請參閱[Amazon RDS 中的版本管理](SQLServer.Concepts.General.VersionSupport.md#SQLServer.Concepts.General.Version-Management)。

## Microsoft SQL Server 2012 已終止對 Amazon RDS 的支援
<a name="SQLServer.Concepts.General.FeatureSupport.2012"></a>

SQL Server 2012 已終止對 Amazon RDS 的支援。

RDS 正將仍在使用 SQL Server 2012 的所有現有資料庫執行個體升級至 SQL Server 2016 的最新次要版本。如需詳細資訊，請參閱[Amazon RDS 中的版本管理](SQLServer.Concepts.General.VersionSupport.md#SQLServer.Concepts.General.Version-Management)。

## Microsoft SQL Server 2008 R2 已終止對 Amazon 的支援
<a name="SQLServer.Concepts.General.FeatureSupport.2008"></a>

SQL Server 2008 R2 已達到對 Amazon RDS 終止支援。

RDS 正將仍在使用 SQL Server 2008 R2 的所有現有資料庫執行個體升級至 SQL Server 2012 的最新次要版本。如需詳細資訊，請參閱[Amazon RDS 中的版本管理](SQLServer.Concepts.General.VersionSupport.md#SQLServer.Concepts.General.Version-Management)。

# Microsoft SQL Server 資料庫執行個體的變更資料擷取支援
<a name="SQLServer.Concepts.General.CDC"></a>

Amazon RDS 支援執行 Microsoft SQL Server 之資料庫執行個體的變更資料擷取支援 (CDC)。CDC 會擷取對資料表中資料所做的變更，並存放每個變更的相關中繼資料，以便您稍後存取。如需詳細資訊，請參閱 Microsoft 文件中的[變更資料擷取](https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/track-data-changes-sql-server#Capture)。

Amazon RDS 支援下列 SQL Server 版本的 CDC：
+ Microsoft SQL Server Enterprise Edition (所有版本) 
+ Microsoft SQL Server Standard Edition：
  + 2022
  + 2019
  + 2017
  + 2016 版13.00.4422.0 SP1 CU2 和更新版本

若要搭配使用 CDC 與 Amazon RDS 資料庫執行個體，請先使用 RDS 提供的預存程序，來啟用或停用資料庫層級的 CDC。在那之後，對該資料庫具有 `db_owner` 角色的任何使用者都可以使用原生 Microsoft 預先程序，來控制該資料庫上的 CDC。如需更多詳細資訊，請參閱 [使用 Amazon RDS for SQL Server 的變更資料擷取](Appendix.SQLServer.CommonDBATasks.CDC.md)。

您可以使用 CDC 和 AWS Database Migration Service，從 SQL Server 資料庫執行個體啟用持續複寫。

# 不支援的功能和具備有限支援的功能
<a name="SQLServer.Concepts.General.FeatureNonSupport"></a>

Amazon RDS 上不支援下列 Microsoft SQL Server 功能：
+ 備份至 Microsoft Azure Blob Storage
+ 緩衝集區延伸
+ 自訂密碼政策
+ Data Quality Services
+ 資料庫日誌傳送
+ 資料庫快照 (Amazon RDS 僅支援資料庫執行個體快照)
+ 擴充的預存程序，包括 xp\$1cmdshell
+ FILESTREAM 支援
+ 檔案資料表
+ Machine Learning 和 R 服務 (需要作業系統存取權才能安裝)
+ 維護計劃
+ 效能資料收集器
+ 政策型管理
+ PolyBase
+ 複寫
+ 伺服器層級觸發程序
+ Service Broker 端點
+ 延展資料庫
+ 值得信賴的資料庫屬性 (需要系統管理員角色)
+ T-SQL 端點 (所有使用 CREATE ENDPOINT 的操作皆無法使用)
+ WCF 資料服務

Amazon RDS 上對於下列 Microsoft SQL Server 功能具有有限的支援：
+ 分散式查詢/連結的伺服器。如需詳細資訊，請參閱 [Implementing Linked Servers with Amazon RDS for Microsoft SQL Server](https://aws.amazon.com/blogs/database/implement-linked-servers-with-amazon-rds-for-microsoft-sql-server/)。
+ 通用語言執行階段 (CLR)。在 RDS for SQL Server 2016 和更舊版本上，僅在 `SAFE` 模式並使用組件位元，才支援 CLR。在 RDS for SQL Server 2017 和新高版本上不支援 CLR。如需詳細資訊，請參閱 Microsoft 文件中的[通用語言執行階段整合](https://docs.microsoft.com/en-us/sql/relational-databases/clr-integration/common-language-runtime-integration-overview)。
+ 在 Amazon RDS for SQL Server 中搭配使用連結伺服器與 Oracle OLEDB 如需詳細資訊，請參閱[Amazon RDS for SQL Server 中支援連結的伺服器搭配 Oracle OLEDB](Appendix.SQLServer.Options.LinkedServers_Oracle_OLEDB.md)。

使用 SQL Server 2022 的 Amazon RDS 不支援下列功能：
+ 暫停資料庫以建立快照
+ 外部資料來源
+ 備份和還原至 S3 相容物件儲存體
+ 物件存放區整合
+ TLS 1.3 和 MS-TDS 8.0
+ 使用 QAT 進行備份壓縮卸載
+ SQL Server 分析服務
+ 使用多可用區域部署進行資料庫鏡像。SQL Server Always On 是多可用區域部署唯一的支援方法。

## 使用 Microsoft SQL Server 資料庫鏡像或 Always On 可用性群組的異地同步備份部署
<a name="SQLServer.Concepts.General.Mirroring"></a>

Amazon RDS 會透過使用 SQL Server Database Mirroring (DBM) 或 Always On 可用性群組 (AG)，支援在執行 Microsoft SQL Server 的資料庫執行個體上進行異地同步備份部署。「異地同步備份部署」可提高資料庫執行個體的可用性、資料耐用性和容錯能力。進行規劃的資料庫維護或未規劃的服務中斷時，Amazon RDS 會自動容錯移轉到最新的次要複本，以便資料庫操作可以很快繼續執行，而無須人為介入。主要與次要執行個體會使用相同的端點，其實體網路會處理轉換至被動次要複本的作業，做為容錯移轉程序的一部分。當容錯移轉發生時，您不必重新設定應用程式。

Amazon RDS 會管理容錯移轉，方法為主動監控多個可用區部署，並在主要執行個體發生問題時啟動容錯移轉。只有當待命和主要執行個體完全同步時，容錯移轉才會發生。Amazon RDS 會主動維護異地同步備份部署，方法為自動修復狀況不良的資料庫執行個體，並重建同步複寫。您什麼都不必管理。Amazon RDS 會為您處理主要執行個體、見證，以及待命執行個體。當您設定 SQL Server 多個可用區時，RDS 會為執行個體上的所有資料庫設定被動次要執行個體。

如需更多詳細資訊，請參閱 [Amazon RDS for Microsoft SQL Server 的異地同步備份部署](USER_SQLServerMultiAZ.md)。

## 使用透明資料加密來加密靜態資料
<a name="SQLServer.Concepts.General.Options"></a>

Amazon RDS 支援 Microsoft SQL Server 透明資料加密 (TDE)，其會以透明方式加密儲存的資料。Amazon RDS 使用選項群組來啟用並設定這些功能。如需 TDE 選項的詳細資訊，請參閱 [支援 SQL Server 的透明資料加密](Appendix.SQLServer.Options.TDE.md)。

# Amazon RDS for Microsoft SQL Server 的函數和預存程序
<a name="SQLServer.Concepts.General.StoredProcedures"></a>

在下文中，您可以找到可協助自動化 SQL Server 任務的 Amazon RDS 函數和預存程序清單。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/SQLServer.Concepts.General.StoredProcedures.html)

# Microsoft SQL Server 資料庫執行個體的本機時區
<a name="SQLServer.Concepts.General.TimeZone"></a>

執行 Microsoft SQL Server 的 Amazon RDS 資料庫執行個體的時區是根據預設來設定的。目前預設值是世界協調時間 (UTC)。您也可以將資料庫執行個體的時區改設為本機時區，以符合應用程式的時區。

您可以在第一次建立資料庫執行個體時設定時區。您可以使用 [AWS 管理主控台](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)、Amazon RDS API [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html.html) 動作或 AWS CLI [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) 命令，建立您的資料庫執行個體。

如果您的資料庫執行個體是異地同步備份部署 (使用 SQL Server DBM 或 AG) 的一部分，則在容錯移轉時，時區仍會維持在您設定的本機時區。如需更多詳細資訊，請參閱 [使用 Microsoft SQL Server 資料庫鏡像或 Always On 可用性群組的異地同步備份部署](CHAP_SQLServer.md#SQLServer.Concepts.General.Mirroring)。

要求進行時間點還原時，您可以指定要還原至的時間。時間以您當地的時區顯示。如需更多詳細資訊，請參閱 [將 Amazon RDS 的資料庫執行個體還原至指定時間](USER_PIT.md)。

下列是在資料庫執行個體上設定本機時區的限制：
+ 您無法修改現有 SQL Server 資料庫執行個體的時區。
+ 您無法將快照從某個時區的資料庫執行個體還原至另一個時區的資料庫執行個體。
+ 強烈建議您不要將備份檔案從某個時區還原至不同時區。如果您將備份檔案從某個時區還原至不同時區，則必須稽核您的查詢及應用程式，是否受到時區變更的影響。如需更多詳細資訊，請參閱 [使用原生備份和還原，匯入和匯出 SQL Server 資料庫](SQLServer.Procedural.Importing.md)。

## 支援的時區
<a name="SQLServer.Concepts.General.TimeZone.Zones"></a>

您可以將本機時區設為下表中列出的其中一個值。


| 時區 | 標準時間偏移 | 描述 | 備註 | 
| --- | --- | --- | --- | 
| 阿富汗標準時間 | (UTC\$104:30) | 喀布爾 | 此時區不會遵守日光節約時間。 | 
| 阿拉斯加標準時間 | (UTC–09:00) | 阿拉斯加州 |  | 
| 阿留申標準時間 | (UTC–10:00) | 阿留申群島 |  | 
| 阿爾泰標準時間 | (UTC\$107:00) | 巴爾瑙爾，戈爾諾-阿爾泰斯克 |  | 
| 沙烏地阿拉伯標準時間 | (UTC\$103:00) | 科威特，利雅德 | 此時區不會遵守日光節約時間。 | 
| 阿拉伯標準時間 | (UTC\$104:00) | 阿布達比、馬斯喀特 |  | 
| 阿拉伯標準時間 | (UTC\$103:00) | 巴格達 | 此時區不會遵守日光節約時間。 | 
| 阿根廷標準時間 | (UTC–03:00) | 布宜諾斯艾利斯市 | 此時區不會遵守日光節約時間。 | 
| 阿斯特拉罕標準時間 | (UTC\$104:00) | 阿斯特拉罕，烏里揚諾夫斯克 |  | 
| 大西洋標準時間 | (UTC–04:00) | 大西洋時間 (加拿大) |  | 
| AUS 中央標準時間 | (UTC\$109:30) | 達爾文 | 此時區不會遵守日光節約時間。 | 
| 澳洲中西部標準時間 | (UTC\$108:45) | 尤克拉 |  | 
| AUS 東部標準時間 | (UTC\$110:00) | 坎培拉、墨爾本、雪梨 |  | 
| 亞塞拜然標準時間 | (UTC\$104:00) | 巴庫 |  | 
| 亞速爾標準時間 | (UTC–01:00) | 亞速爾 |  | 
| 巴伊亞標準時間 | (UTC–03:00) | 薩爾瓦多 |  | 
| 孟加拉標準時間 | (UTC\$106:00) | 達卡 | 此時區不會遵守日光節約時間。 | 
| 白俄羅斯標準時間 | (UTC\$103:00) | 明斯克 | 此時區不會遵守日光節約時間。 | 
| 布干維爾標準時間 | (UTC\$111:00) | 布干維爾島 |  | 
| 加拿大中央標準時間 | (UTC–06:00) | 薩斯喀徹溫 | 此時區不會遵守日光節約時間。 | 
| 維德角標準時間 | (UTC–01:00) | 維德角群島 | 此時區不會遵守日光節約時間。 | 
| 高加索標準時間 | (UTC\$104:00) | 葉里溫 |  | 
| 中央 澳洲標準時間 | (UTC\$109:30) | 阿德萊德 |  | 
| 中美洲標準時間 | (UTC–06:00) | 中央美洲 | 此時區不會遵守日光節約時間。 | 
| 中亞標準時間 | (UTC\$106:00) | 阿斯塔納 | 此時區不會遵守日光節約時間。 | 
| 中央巴西標準時間 | (UTC–04:00) | 古雅巴 |  | 
| 中歐標準時間 | (UTC\$101:00) | 貝爾格勒、布拉提斯拉瓦、布達佩斯、盧布亞納、布拉格 |  | 
| 中歐標準時間 | (UTC\$101:00) | 塞拉耶佛、斯高彼亞、華沙、札格雷布 |  | 
| 中央太平洋標準時間 | (UTC\$111:00) | 索羅門群島、新喀里多尼亞 | 此時區不會遵守日光節約時間。 | 
| 中央標準時間 | (UTC–06:00) | 中央時間 (美國和加拿大) |  | 
| 中央標準時間 (墨西哥) | (UTC–06:00) | 瓜達拉哈拉、墨西哥城、蒙特利 |  | 
| 查塔姆群島標準時間 | (UTC\$112:45) | 查塔姆群島 |  | 
| 中國標準時間 | (UTC\$108:00) | 北京、重慶、香港、烏魯木齊 | 此時區不會遵守日光節約時間。 | 
| 古巴標準時間 | (UTC–05:00) | 哈瓦那 |  | 
| 國際換日線標準時間 | (UTC–12:00) | 國際換日線以西 | 此時區不會遵守日光節約時間。 | 
| 東部非洲標準時間 | (UTC\$103:00) | 奈洛比 | 此時區不會遵守日光節約時間。 | 
| 東部澳洲標準時間 | (UTC\$110:00) | 布利斯班 | 此時區不會遵守日光節約時間。 | 
| 東部歐洲標準時間 | (UTC\$102:00) | 奇西瑙 |  | 
| 東部南美洲標準時間 | (UTC–03:00) | 巴西利亞 |  | 
| 復活節島標準時間 | (UTC–06:00) | 復活節島 |  | 
| 東部標準時間 | (UTC–05:00) | 東部時間 (美國和加拿大) |  | 
| 東部標準時間（墨西哥） | (UTC–05:00) | 切圖馬爾 |  | 
| 埃及標準時間 | (UTC\$102:00) | 開羅 |  | 
| 葉卡捷琳堡標準時間 | (UTC\$105:00) | 葉卡捷琳堡 |  | 
| 斐濟標準時間 | (UTC\$112:00) | 斐濟 |  | 
| FLE 標準時間 | (UTC\$102:00) | 赫爾辛基，基輔，里加，索菲亞，塔林，維爾紐斯 |  | 
| 喬治亞標準時間 | (UTC\$104:00) | 提比里斯 | 此時區不會遵守日光節約時間。 | 
| GMT 標準時間 | (UTC) | 都柏林、愛丁堡、里斯本、倫敦 |  此時區與格林威治標準時間不同。此時區會遵守日光節約時間。 | 
| 格陵蘭標準時間 | (UTC–03:00) | 格陵蘭 |  | 
| 格林威治標準時間 | (UTC) | 蒙羅維亞、雷克雅維克 | 此時區不會遵守日光節約時間。 | 
| GTB 標準時間 | (UTC\$102:00) | 雅典、布加勒斯特 |  | 
| 海地標準時間 | (UTC–05:00) | 海地 |  | 
| 夏威夷標準時間 | (UTC–10:00) | 夏威夷州 |  | 
| 印度標準時間 | (UTC\$105:30) | 清奈、加爾各答、孟買、新德里 | 此時區不會遵守日光節約時間。 | 
| 伊朗標準時間 | (UTC\$103:30) | 德黑蘭 |  | 
| 以色列標準時間 | (UTC\$102:00) | 耶路撒冷 |  | 
| 約旦標準時間 | (UTC\$102:00) | 安曼 |  | 
| 卡里寧格勒標準時間 | (UTC\$102:00) | 卡里寧格勒 |  | 
| 堪察加標準時間 | (UTC\$112:00) | 彼得保羅夫斯克-堪察加斯克 – 老 |  | 
| 韓國標準時間 | (UTC\$109:00) | 首爾 | 此時區不會遵守日光節約時間。 | 
| 利比亞標準時間 | (UTC\$102:00) | 的黎波里 |  | 
| 來因群島標準時間 | (UTC\$114:00) | 刻里提瑪斯島 |  | 
| 羅豪標準時間 | (UTC\$110:30) | 羅豪島 |  | 
| 馬加丹標準時間 | (UTC\$111:00) | 馬加丹 | 此時區不會遵守日光節約時間。 | 
| 麥哲倫標準時間 | (UTC–03:00) | 蓬塔阿雷納斯 |  | 
| 馬克薩斯標準時間 | (UTC–09:30) | 馬克薩斯群島 |  | 
| 模里西斯標準時間 | (UTC\$104:00) | 路易士港 | 此時區不會遵守日光節約時間。 | 
| 中東標準時間 | (UTC\$102:00) | 貝魯特 |  | 
| 蒙特維多標準時間 | (UTC–03:00) | 蒙特維多 |  | 
| 摩洛哥標準時間 | (UTC\$101:00) | 卡薩布蘭卡 |  | 
| 山地標準時間 | (UTC–07:00) | 山地時間 (美國和加拿大) |  | 
| 山地標準時間 (墨西哥) | (UTC–07:00) | 赤瓦瓦州、拉巴斯、馬薩特蘭 |  | 
| 緬甸標準時間 | (UTC\$106:30) | 仰光 | 此時區不會遵守日光節約時間。 | 
| 北部中亞標準時間 | (UTC\$107:00) | 新西伯利亞 |  | 
| 納米比亞標準時間 | (UTC\$102:00) | 溫吐克 |  | 
| 尼泊爾標準時間 | (UTC\$105:45) | 加德滿都 | 此時區不會遵守日光節約時間。 | 
| 紐西蘭標準時間 | (UTC\$112:00) | 奧克蘭、威靈頓 |  | 
| 紐芬蘭標準時間 | (UTC–03:30) | 紐芬蘭 |  | 
| 諾福克標準時間 | (UTC\$111:00) | 諾福克島 |  | 
| 東北亞標準時間 | (UTC\$108:00) | 伊爾庫次克 |  | 
| 北亞標準時間 | (UTC\$107:00) | 克拉斯諾亞爾斯克 |  | 
| 北韓標準時間 | (UTC\$109:00) | 平壤 |  | 
| 鄂木斯克標準時間 | (UTC\$106:00) | 鄂木斯克 |  | 
| 太平洋 SA 標準時間 | (UTC–03:00) | 聖地牙哥 |  | 
| 太平洋標準時間 | (UTC–08:00) | 太平洋時間 (美國和加拿大) |  | 
| 太平洋標準時間 (墨西哥) | (UTC–08:00) | 下加利福尼亞州 |  | 
| 巴基斯坦標準時間 | (UTC\$105:00) | 伊斯蘭馬巴德，喀拉蚩 | 此時區不會遵守日光節約時間。 | 
| 巴拉圭標準時間 | (UTC–04:00) | 亞松森 |  | 
| 羅馬標準時間 | (UTC\$101:00) | 布魯塞爾、哥本哈根、馬德里、巴黎 |  | 
| 俄羅斯時區 10 | (UTC\$111:00) | 查庫爾達克 |  | 
| 俄羅斯時區 11 | (UTC\$112:00) | 阿納底，彼得保羅夫斯克-堪察加斯克 |  | 
| 俄羅斯時區 3 | (UTC\$104:00) | 伊熱夫斯克，薩馬拉 |  | 
| 俄羅斯標準時間 | (UTC\$103:00) | 莫斯科、聖彼得堡、伏爾加格勒 | 此時區不會遵守日光節約時間。 | 
| 南美洲東部標準時間 | (UTC–03:00) | 卡宴，福塔雷薩 | 此時區不會遵守日光節約時間。 | 
| SA 太平洋標準時間 | (UTC–05:00) | 波哥大、利馬、基多、里約布蘭科 |  此時區不會遵守日光節約時間。 | 
| 南美洲西部標準時間 | (UTC–04:00) | 喬治城，拉帕茲，瑪瑙斯，聖胡安 | 此時區不會遵守日光節約時間。 | 
| 聖皮爾標準時間 | (UTC–03:00) | 聖皮埃赫及密克隆 |  | 
| 薩哈林標準時間 | (UTC\$111:00) | 薩哈林 |  | 
| 薩摩亞標準時間 | (UTC\$113:00) | 薩摩亞 |  | 
| 聖多美標準時間 | (UTC\$101:00) | 聖多美普林西比 |  | 
| 薩拉托夫標準時間 | (UTC\$104:00) | 薩拉托夫 |  | 
| SE 亞洲標準時間 | (UTC\$107:00) | 曼谷、河內、雅加達 | 此時區不會遵守日光節約時間。 | 
| 新加坡標準時間 | (UTC\$108:00) | 吉隆坡、新加玻 | 此時區不會遵守日光節約時間。 | 
| 南非標準時間 | (UTC\$102:00) | 哈拉雷，比勒陀利亞 | 此時區不會遵守日光節約時間。 | 
| 斯里蘭卡標準時間 | (UTC\$105:30) | 斯里哈亞華登尼普拉 | 此時區不會遵守日光節約時間。 | 
| 蘇丹標準時間 | (UTC\$102:00) | 喀土穆 |  | 
| 敘利亞標準時間 | (UTC\$102:00) | 大馬士革 |  | 
| 台北標準時間 | (UTC\$108:00) | 台北 | 此時區不會遵守日光節約時間。 | 
| 塔斯馬尼亞標準時間 | (UTC\$110:00) | 荷巴特 |  | 
| 托坎廷斯標準時間 | (UTC–03:00) | 阿拉瓜 |  | 
| 東京標準時間 | (UTC\$109:00) | 大阪、札幌、東京 | 此時區不會遵守日光節約時間。 | 
| 托木斯克標準時間 | (UTC\$107:00) | 托木斯克 |  | 
| 東加標準時間 | (UTC\$113:00) | 努瓜婁發 | 此時區不會遵守日光節約時間。 | 
| 外貝加爾標準時間 | (UTC\$109:00) | 赤塔 |  | 
| 土耳其標準時間 | (UTC\$103:00) | 伊斯坦堡 |  | 
| 土克斯及開科斯群島標準時間 | (UTC–05:00) | 土克斯及開科斯群島 |  | 
| 烏蘭巴托標準時間 | (UTC\$108:00) | 烏蘭巴托 | 此時區不會遵守日光節約時間。 | 
| 美國東部標準時間 | (UTC–05:00) | 印第安那州 (東部) |  | 
| 美國山地標準時間 | (UTC–07:00) | 亞利桑那州 | 此時區不會遵守日光節約時間。 | 
| UTC | UTC | 國際標準時間 | 此時區不會遵守日光節約時間。 | 
| UTC–02 | (UTC–02:00) | 國際標準時間–02 | 此時區不會遵守日光節約時間。 | 
| UTC–08 | (UTC–08:00) | 國際標準時間–08 |  | 
| UTC–09 | (UTC–09:00) | 國際標準時間–09 |  | 
| UTC–11 | (UTC–11:00) | 國際標準時間–11 | 此時區不會遵守日光節約時間。 | 
| UTC\$112 | (UTC\$112:00) | 國際標準時間\$112 | 此時區不會遵守日光節約時間。 | 
| UTC\$113 | (UTC\$113:00) | 國際標準時間\$113 |  | 
| 委內瑞拉標準時間 | (UTC–04:00) | 加拉加斯 | 此時區不會遵守日光節約時間。 | 
| 符拉迪沃斯托克標準時間 | (UTC\$110:00) | 符拉迪沃斯托克 |  | 
| 伏爾加格勒標準時間 | (UTC\$104:00) | 伏爾加格勒 |  | 
| 西部澳洲標準時間 | (UTC\$108:00) | 珀斯 | 此時區不會遵守日光節約時間。 | 
| 西部西非標準時間 | (UTC\$101:00) | 中西非 | 此時區不會遵守日光節約時間。 | 
| 西部歐洲標準時間 | (UTC\$101:00) | 阿姆斯特丹、柏林、羅馬、斯德哥爾摩、維也納 |  | 
| 西部蒙古標準時間 | (UTC\$107:00) | 霍夫德 |  | 
| 西亞標準時間 | (UTC\$105:00) | 阿什哈巴德，塔什干 | 此時區不會遵守日光節約時間。 | 
| 約旦河西岸標準時間 | (UTC\$102:00) | 加薩，希伯侖 |  | 
| 西太平洋標準時間 | (UTC\$110:00) | 關島，莫爾斯貝港 | 此時區不會遵守日光節約時間。 | 
| 亞庫茲克標準時間 | (UTC\$109:00) | 亞庫茲克 |  | 

# Amazon RDS 上的 Microsoft SQL Server 授權
<a name="SQLServer.Concepts.General.Licensing"></a>

當您設定 Microsoft SQL Server 的 Amazon RDS 資料庫執行個體，軟體授權已包含在其中。

這表示您不需要另外購買 SQL Server 授權。 AWS 保留 SQL Server 資料庫軟體的授權。Amazon RDS 會結合軟體授權、底層硬體資源和 Amazon RDS 管理功能，並予以定價。

Amazon RDS 支援下列 Microsoft SQL Server 版本：
+ Enterprise
+ 標準
+ Web
+ Express

**注意**  
SQL Server Web Edition 是專為 Web 主機和 Web VAPs所設計，以託管公有和可存取網際網路的網頁、網站、Web 應用程式和 Web 服務。為了符合 Microsoft 的使用權利規定，需要此等級的支援。如需詳細資訊，請參閱 [AWS 服務條款](https://aws.amazon.com/serviceterms)。

Amazon RDS 透過使用 SQL Server 資料庫鏡像 (DBM)、 Always On 可用性群組 (AGs) 和 SQL Server Web Edition 的區塊層級複寫，為執行 Microsoft SQL Server 的資料庫執行個體支援異地同步備份部署。異地同步備份部署沒有其他授權要求。如需更多詳細資訊，請參閱 [Amazon RDS for Microsoft SQL Server 的異地同步備份部署](USER_SQLServerMultiAZ.md)。

## 還原授權終止的資料庫執行個體
<a name="SQLServer.Concepts.General.Licensing.Restoring"></a>

Amazon RDS 可針對授權終止的資料庫執行個體建立快照。如果您的執行個體因授權問題而終止，您可以從快照將其還原成新的資料庫執行個體。新的資料庫執行個體會包含授權。

如需更多詳細資訊，請參閱 [還原 Amazon RDS for SQL Server 的授權終止資料庫執行個體](Appendix.SQLServer.CommonDBATasks.RestoreLTI.md)。

## 開發和測試
<a name="SQLServer.Concepts.General.Licensing.Development"></a>

對於開發和測試案例，您可以使用 Express Edition 處理許多開發、測試和其他非生產需求。您也可以使用 Developer Edition，其中包含所有 SQL Server Enterprise Edition 功能，但授權僅供非生產使用。您可以在 RDS for SQL Server 下載並安裝 SQL Server Developer Edition。如需詳細資訊，請參閱搭配自帶媒體 (BYOM) [在 RDS for SQL Server 上使用 SQL Server Developer Edition](sqlserver-dev-edition.md)使用自訂引擎版本 (CEV)。您也可以使用相同的方法，在 RDS Custom for SQL Server 下載並安裝 SQL Server Developer Edition。如需詳細資訊，請參閱[使用自有媒體 (BYOM) 準備 CEV](custom-cev-sqlserver.preparing.md#custom-cev-sqlserver.preparing.byom)。如需不同 SQL Server 版本差異的詳細資訊，請參閱 Microsoft 文件中的 [SQL Server 2019 的版本和支援的功能](https://learn.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-2019?view=sql-server-ver15)。

# 連線至 Microsoft SQL Server 資料庫執行個體
<a name="USER_ConnectToMicrosoftSQLServerInstance"></a>

在 Amazon RDS 佈建您的資料庫執行個體之後，您就可以使用任何標準 SQL 用戶端應用程式來連接至資料庫執行個體。在此主題中，您會使用 Microsoft SQL Server Management Studio (SSMS) 或 SQL Workbench/J 來連接至您的資料庫執行個體。

如需引導您進行建立和連接至範例資料庫執行個體的程序範例，請參閱 [建立並連線至 Microsoft SQL Server 資料庫執行個體](CHAP_GettingStarted.CreatingConnecting.SQLServer.md)。

## 連線之前
<a name="sqlserver-before-connect"></a>

連線到資料庫執行個體之前，資料庫執行個體必須可用且可存取。

1. 請確定其狀態為 `available`。您可以在 中 AWS 管理主控台 或使用 [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) AWS CLI 命令，在執行個體的詳細資訊頁面上檢查此問題。  
![\[檢查資料庫執行個體是否可用\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/sqlserver-available.png)

1. 確保您的來源可以存取它。根據您的案例，可能不需要公開存取它。如需詳細資訊，請參閱[Amazon VPC 和 Amazon RDS](USER_VPC.md)。

1. 請確定 VPC 安全群組的傳入規則允許存取您的資料庫執行個體。如需更多詳細資訊，請參閱 [無法連線至 Amazon RDS 資料庫執行個體](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting)。

## 尋找資料庫執行個體端點和連接埠號碼
<a name="sqlserver-endpoint"></a>

您需要同時有端點和連接埠號碼，才能連接至資料庫執行個體。

**尋找端點和連接埠**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 在 Amazon RDS 主控台的右上角，選擇資料庫執行個體 AWS 的區域。

1. 尋找資料庫執行個體的網域名稱系統 (DNS) 名稱 (端點) 和連接埠號碼：

   1. 開啟 RDS 主控台，然後選擇 **Databases (資料庫)**，以顯示資料庫執行個體清單。

   1. 選擇 SQL Server 資料庫執行個體名稱以顯示其詳細資訊。

   1. 在 **Connectivity & security (連線能力和安全性)** 索引標籤上，複製該端點。  
![\[尋找資料庫執行個體的端點和連接埠\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/SQL-Connect-Endpoint.png)

   1. 請記下連接埠號碼。

# 使用 Microsoft SQL Server Management Studio 連接至您的資料庫執行個體
<a name="USER_ConnectToMicrosoftSQLServerInstance.SSMS"></a>

在此程序中，您會使用 Microsoft SQL Server Management Studio (SSMS) 連接至您的範例資料庫執行個體。若要下載此公用程式的獨立版本，請參閱 Microsoft 文件中的[下載 SQL Server Management Studio (SSMS)](https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms)。

**使用 SSMS 連接至資料庫執行個體**

1. 啟動 SQL Server Management Studio。

   **Connect to Server (連接至伺服器)** 對話方塊隨即出現。  
![\[連接至伺服器對話方塊\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/RDSMSFTSQLConnect01.png)

1. 提供資料庫執行個體的資訊：

   1. 針對 **Server type (伺服器類型)**，選擇 **Database Engine (資料庫引擎)**。

   1. 針對 **Server name (伺服器名稱)**，輸入資料庫執行個體的 DNS 名稱 (端點) 和連接埠號碼，以逗號區隔。
**重要**  
將端點和連接埠號碼之間的冒號變更為逗號。

      您的伺服器名稱應看起來與下列範例類似。

      ```
      database-2.cg034itsfake.us-east-1.rds.amazonaws.com,1433
      ```

   1. 針對 **Authentication (身分驗證)**，選擇 **SQL Server Authentication (SQL Server 身分驗證)**。

   1. 針對 **Login (登入)**，輸入資料庫執行個體的主要使用者名稱。

   1. 針對 **Password (密碼)**，輸入資料庫執行個體的密碼。

1. 選擇 **Connect (連線)**。

   幾分鐘後，SSMS 會連接至資料庫執行個體。

   如果您無法連接至資料庫執行個體，請參閱 [安全群組考量](USER_ConnectToMicrosoftSQLServerInstance.Security.md)和[對您的 SQL Server 資料庫執行個體的連線進行故障診斷](USER_ConnectToMicrosoftSQLServerInstance.Troubleshooting.md)。

1. 您的 SQL Server 資料庫執行個體隨附 SQL Server 的標準內建系統資料庫 (`master`、`model`、`msdb` 和 `tempdb`)。若要瀏覽系統資料庫，請執行下列動作：

   1. 在 SSMS 的 **View (檢視)** 功能表中，選擇 **Object Explorer (物件總管)**。

   1. 依序展開您的資料庫執行個體、**資料庫**和**系統資料庫**。  
![\[物件總管會顯示系統資料庫\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/SQL-SSMS-SystemDBs.png)

1. 您的 SQL Server 資料庫執行個體也隨附一個名為 `rdsadmin` 的資料庫。Amazon RDS 將使用此資料庫，以便存放用於管理資料庫的物件。`rdsadmin` 資料庫也包含可供您執行的預存程序，可讓您執行進階任務。如需更多詳細資訊，請參閱 [Amazon RDS for Microsoft SQL Server 的常用 DBA 任務](Appendix.SQLServer.CommonDBATasks.md)。

1. 您現在可以開始建立您自己的資料庫，並照常對您的資料庫執行個體和資料庫執行查詢。若要對您的資料庫執行個體執行測試查詢，請執行下列動作：

   1. 在 SSMS 中，於 **File (檔案)** 功能表上，指向 **New (新增)**，然後選擇 **Query with Current Connection (使用目前的連接查詢)**。

   1. 輸入下列 SQL 查詢。

      ```
      select @@VERSION
      ```

   1. 執行查詢。SSMS 會傳回 Amazon RDS 資料庫執行個體的 SQL Server 版本。  
![\[SQL 查詢視窗\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/SQL-Connect-Query.png)

# 使用 SQL Workbench/J 連接至您的資料庫執行個體
<a name="USER_ConnectToMicrosoftSQLServerInstance.JDBC"></a>

此範例示範如何使用 SQL Workbench/J 資料庫工具來連接至執行 Microsoft SQL Server 資料庫引擎的資料庫執行個體。若要下載 SQL Workbench/J，請參閱 [SQL Workbench/J](http://www.sql-workbench.net/)。

SQL Workbench/J 使用 JDBC 來連接至您的資料庫執行個體。您也需要適用於 SQL Server 的 JDBC 驅動程式。若要下載此驅動程式，請參閱[下載適用於 SQL Server 的 Microsoft JDBC 驅動程式](https://learn.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver16)。

**使用 SQL Workbench/J 連接至資料庫執行個體**

1. 開啟 SQL Workbench/J。**Select Connection Profile (選取連線描述檔)** 對話方塊隨即出現，如下所示。  
![\[選取連線設定檔對話方塊\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/workbench_profile.png)

1. 在對話方塊的第一個方塊中，輸入設定檔的名稱。

1. 針對 **Driver (驅動程式)**，選擇 **SQL JDBC 4.0**。

1. 針對 **URL**，輸入 **jdbc:sqlserver://**，接著輸入資料庫執行個體的端點。例如，URL 值可能如下。

   ```
   jdbc:sqlserver://sqlsvr-pdz.abcd12340.us-west-2.rds.amazonaws.com:1433
   ```

1. 針對 **Username (使用者名稱)**，輸入資料庫執行個體的主要使用者名稱。

1. 針對 **Password (密碼)**，輸入主要使用者的密碼。

1. 選擇對話方塊工具列中的儲存圖示，如下所示。  
![\[儲存設定檔\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/save_example.png)

1. 選擇 **OK** (確定)。幾分鐘後，SQL Workbench/J 會連接至資料庫執行個體。如果您無法連接至資料庫執行個體，請參閱 [安全群組考量](USER_ConnectToMicrosoftSQLServerInstance.Security.md)和[對您的 SQL Server 資料庫執行個體的連線進行故障診斷](USER_ConnectToMicrosoftSQLServerInstance.Troubleshooting.md)。

1. 在查詢窗格中，輸入下列 SQL 查詢。

   ```
   select @@VERSION
   ```

1. 選擇工具列中的 `Execute` 圖示，如下所示。  
![\[執行查詢\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/execute_example.png)

   查詢會傳回資料庫執行個體的版本資訊，類似如下。

   ```
   Microsoft SQL Server 2017 (RTM-CU22) (KB4577467) - 14.0.3356.20 (X64)
   ```

# 安全群組考量
<a name="USER_ConnectToMicrosoftSQLServerInstance.Security"></a>

若要連線至您的資料庫執行個體，資料庫執行個體必須與安全群組相關聯。此安全性群組包含您用於存取資料庫執行個體的 IP 位址和網路組態。您可能已在建立資料庫執行個體時，將資料庫執行個體與適當的安全群組建立關聯。如果在建立資料庫執行個體時指派預設值、非設定的安全群組，您的資料庫執行個體防火牆會防止連線。

在某些情況下，您可能需要建立新的安全群組才能進行存取。如需建立新安全群組的指示，請參閱 [使用安全群組控制存取](Overview.RDSSecurityGroups.md)。如需引導您為 VPC 安全群組設定規則之程序的主題，請參閱 [教學課程：建立要與資料庫執行個體搭配使用的 VPC (僅限 IPv4)](CHAP_Tutorials.WebServerDB.CreateVPC.md)。

建立新安全群組之後，修改資料庫執行個體，讓它與該安全群組建立關聯。如需更多詳細資訊，請參閱 [修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

您可以使用 SSL 來加密對資料庫執行個體的連線，藉此增強安全性。如需更多詳細資訊，請參閱 [對 Microsoft SQL Server 資料庫執行個體使用 SSL](SQLServer.Concepts.General.SSL.Using.md)。

# 對您的 SQL Server 資料庫執行個體的連線進行故障診斷
<a name="USER_ConnectToMicrosoftSQLServerInstance.Troubleshooting"></a>

下表顯示當您嘗試連線到 SQL Server DB 執行個體時，可能會遇到的錯誤訊息。


****  
<a name="rds-sql-server-connection-troubleshooting-guidance"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/USER_ConnectToMicrosoftSQLServerInstance.Troubleshooting.html)

**注意**  
如需連線問題的詳細資訊，請參閱 [無法連線至 Amazon RDS 資料庫執行個體](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting)。

# 在 RDS for SQL Server 上使用 SQL Server Developer Edition
<a name="sqlserver-dev-edition"></a>

RDS for SQL Server 支援 SQL Server Developer Edition。Developer Edition 包含所有 SQL Server Enterprise Edition 功能，但僅授權用於非生產用途。您可以透過自訂引擎版本 (CEV) 功能，使用您自己的安裝媒體建立 RDS for SQL Server Developer Edition 執行個體。

## 優勢
<a name="sqlserver-dev-edition.benefits"></a>

您可以使用 RDS for SQL Server Developer Edition 來：
+ 降低開發和測試環境的成本，同時維持與生產資料庫的功能同位。
+ 在非生產環境中存取 Enterprise Edition 功能，無需企業授權費用。
+ 使用 Amazon RDS 自動化的管理功能，包括備份、修補和監控。

**注意**  
SQL Server Developer Edition 僅授權用於開發和測試用途，無法在生產環境中使用。

## 區域可用性
<a name="sqlserver-dev-edition.regions"></a>

RDS for SQL Server Developer Edition 可在下列 AWS 區域使用：
+ 美國東部 (維吉尼亞北部)
+ 美國東部 (俄亥俄)
+ 美國西部 (奧勒岡)
+ 美國西部 (加利佛尼亞北部)
+ 亞太地區 (孟買)
+ 亞太區域 (首爾)
+ 亞太地區 (新加坡)
+ 亞太地區 (大阪)
+ 亞太地區 (雪梨)
+ 亞太地區 (東京)
+ 歐洲 (愛爾蘭)
+ 歐洲 (法蘭克福)
+ 歐洲 (倫敦)
+ 歐洲 (斯德哥爾摩)
+ Europe (Paris)
+ 加拿大 (中部)
+ 南美洲 (聖保羅)
+ 非洲 (開普敦)

## 授權和使用
<a name="sqlserver-dev-edition.licensing"></a>

SQL Server Developer Edition 僅授權 Microsoft 用於開發和測試環境。您無法使用 Developer Edition 做為生產伺服器。當您在 Amazon RDS 上使用 SQL Server Developer Edition 時，您有責任遵守 Microsoft 的 SQL Server Developer Edition 授權條款。您只需支付 AWS 基礎設施成本 - 無需支付額外的 SQL Server 授權費。如需定價詳細資訊，請參閱 [RDS for SQL Server 定價](https://aws.amazon.com/rds/sqlserver/pricing/)。

## 先決條件
<a name="sqlserver-dev-edition.prerequisites"></a>

在 RDS for SQL Server 上使用 SQL Server Developer Edition 之前，請確定您有下列需求：
+ 您必須直接從 Microsoft 取得安裝二進位檔，並確保符合 Microsoft 的授權條款。
+ 您必須具有使用下列資源建立 Developer Edition 資料庫執行個體的存取權：
  + AWS 具有 `AmazonRDSFullAccess`和 `s3:GetObject`許可的帳戶。
+ 儲存安裝媒體需要 Amazon S3 儲存貯體。建立 CEV 時，您需要 ISO 和累積更新檔案才能上傳至 Amazon S3 儲存貯體。如需詳細資訊，請參閱[將安裝媒體上傳至 Amazon S3 儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)。
+ 所有安裝媒體檔案都必須位於相同的 Amazon S3 儲存貯體，以及建立自訂引擎版本之相同區域中的相同 Amazon S3 儲存貯體中的相同資料夾路徑。

### 支援的版本
<a name="sqlserver-dev-edition.supported-versions"></a>

RDS for SQL Server 上的開發人員版本支援下列版本：
+ SQL Server 2022 CU 21 (16.00.4215.2)
+ SQL Server 2019 CU 32 GDR (15.00.4455.2)

若要列出 Developer Edition CEV 建立的所有支援的引擎版本，請使用下列 AWS CLI 命令：

```
aws rds describe-db-engine-versions --engine sqlserver-dev-ee --output json --query "{DBEngineVersions: DBEngineVersions[?Status=='requires-custom-engine-version'].{Engine: Engine, EngineVersion: EngineVersion, Status: Status, DBEngineVersionDescription: DBEngineVersionDescription}}"
```

命令會傳回類似下列範例的輸出：

```
{
    "DBEngineVersions": [
        {
            "Engine": "sqlserver-dev-ee",
            "EngineVersion": "16.00.4215.2.v1",
            "Status": "requires-custom-engine-version",
            "DBEngineDescription": "Microsoft SQL Server Enterprise Developer Edition",
            "DBEngineVersionDescription": "SQL Server 2022 16.00.4215.2.v1"
        }
    ]
}
```

引擎版本狀態 `requires_custom_engine_version`可識別支援的範本引擎版本。這些範本會顯示您可以匯入的 SQL Server 版本。

## 限制
<a name="sqlserver-dev-edition.limitations"></a>

下列限制適用於 Amazon RDS 上的 SQL Server Developer Edition：
+ 目前僅支援 M6i 和 R6i 執行個體類別。
+ 不支援異地同步備份部署和僅供讀取複本。
+ 您必須提供和管理自己的 SQL Server 安裝媒體。
+ SQL Server Developer Edition (sqlserver-dev-ee) 的自訂引擎版本無法跨區域或跨帳戶共用。

# 準備 RDS for SQL Server 的 CEV
<a name="sqlserver-dev-edition.preparing"></a>

## 先決條件
<a name="sqlserver-dev-prerequisites"></a>

在建立自訂引擎版本之前，請確定您已完成下列先決條件：

### 準備 SQL Server Developer Edition 安裝媒體
<a name="sqlserver-dev-prepare-media"></a>

您必須從 Microsoft 取得 SQL Server Developer Edition 安裝媒體，並準備上傳至 S3。

**從 Microsoft 下載安裝媒體**

1. **選項 A：**使用您的 [Visual Studio 訂閱](https://visualstudio.microsoft.com/subscriptions/)來下載 Developer Edition ISO。僅支援英文版本。

1. **選項 B：使用 SQL Server 安裝程式**

   1. 下載 [SQL Server Developer Edition 安裝程式](https://download.microsoft.com/download/c/c/9/cc9c6797-383c-4b24-8920-dc057c1de9d3/SQL2022-SSEI-Dev.exe)。

   1. 執行安裝程式，然後選擇**下載媒體**以下載完整的 ISO。

   1. 選擇**英文**做為偏好的語言。

   1. 選擇 **ISO** 作為媒體類型。

   1. 選擇 **Download** (下載)。

**下載累積更新**

1. 請造訪 [Microsoft Catalog Update](https://www.catalog.update.microsoft.com/Home.aspx) 頁面。

1. 尋找 RDS for SQL Server 支援的 SQL Server Developer Edition，例如「SQL Server 2022 累積更新」。

1. 下載最新支援的 CU 可執行檔，並將其儲存至您的機器。

1. 範例檔案： `SQLServer2022-KB5065865-x64.exe` (CU21 for SQL Server 2022)

**重要**  
RDS for SQL Server 僅支援特定的累積更新 (CU) 版本。您必須使用下表所列的確切版本。即使可從 Microsoft 取得，也請勿使用較新的 CU 版本，因為它們可能與 RDS 不相容。

或者，您也可以直接從下列位置下載所需的累積更新 (CU) 檔案：

下表列出支援的 SQL Server Developer Edition 版本及其與 RDS 搭配使用的對應累積更新：


| SQL Server 版本 | 支援的 CU | KB 文章 | 下載檔案名稱 | 
| --- | --- | --- | --- | 
|  SQL Server 2022  |  `CU21`  |  [KB5065865](https://learn.microsoft.com/en-us/troubleshoot/sql/releases/sqlserver-2022/cumulativeupdate21)  |  `SQLServer2022-KB5065865-x64.exe`  | 
|  SQL Server 2019  |  `CU32 GDR`  |  [KB5068404](https://support.microsoft.com/en-us/topic/kb5068404-description-of-the-security-update-for-sql-server-2019-cu32-november-11-2025-c203bfbf-036e-46d2-bc10-6c01200dc48a)  |  `SQLServer2019-KB5068404-x64.exe`  | 

# 為 RDS for SQL Server 建立自訂引擎版本
<a name="sqlserver-dev-edition.creating-cev"></a>

RDS for SQL Server 的自訂引擎版本 (CEV) 包含匯入 Amazon RDS 的 SQL Server Developer Edition 安裝媒體。必須將基本 ISO 安裝程式和累積更新檔案 (.exe) 上傳至您的 Amazon S3 儲存貯體。上傳後，您應該將 Amazon S3 位置提供給 RDS，以便下載、驗證和後續建立 CEV。

## 命名限制
<a name="sqlserver-dev-edition.create-cev.naming-limitations"></a>

建立 CEV 時，您必須遵循特定的命名慣例：
+ CEV 名稱必須遵循模式 `major-version.minor-version.customized-string`。
+ `customized-string` 可包含 1-50 個英數字元、底線、破折號和句點。例如：`16.00.4215.2.my-dev-cev`適用於 SQL Server 2022。

若要列出所有支援的引擎版本，請使用下列命令：

```
aws rds describe-db-engine-versions --engine sqlserver-dev-ee --output json --query "{DBEngineVersions: DBEngineVersions[?Status=='requires-custom-engine-version'].{Engine: Engine, EngineVersion: EngineVersion, Status: Status, DBEngineVersionDescription: DBEngineVersionDescription}}" 

{
    "DBEngineVersions": [
        {
            "Engine": "sqlserver-dev-ee",
            "EngineVersion": "16.00.4215.2.v1",
            "Status": "requires-custom-engine-version",
            "DBEngineDescription": "Microsoft SQL Server Enterprise Developer Edition",
            "DBEngineVersionDescription": "SQL Server 2022 16.00.4215.2.v1"
        }
    ]
}
```

## AWS CLI
<a name="sqlserver-dev-edition.create-cev.CLI"></a>

**建立自訂引擎版本**
+ 使用 [create-custom-db-engine-version](https://docs.aws.amazon.com/cli/latest/reference/rds/create-custom-db-engine-version.html) 命令。

  下列選項是必要的：
  + `--engine`
  + `--engine-version`
  + `--database-installation-files-s3-bucket-name`
  + `--database-installation-files`
  + `--region`

  您還可以指定下列選項：
  + `--database-installation-files-s3-prefix`
  + `--description`
  + `--tags`

  ```
  aws rds create-custom-db-engine-version \
  --engine sqlserver-dev-ee \
  --engine-version 16.00.4215.2.cev-dev-ss2022-cu21 \
  --region us-west-2 \
  --database-installation-files-s3-bucket-name my-s3-installation-media-bucket \
  --database-installation-files-s3-prefix sqlserver-dev-media \
  --database-installation-files "SQLServer2022-x64-ENU-Dev.iso" "SQLServer2022-KB5065865-x64.exe"
  ```

CEV 建立通常需要 15-30 分鐘。若要監控 CEV 建立進度，請使用下列命令：

```
# Check CEV status
aws rds describe-db-engine-versions \
--engine sqlserver-dev-ee \
--engine-version 16.00.4215.2.my-dev-cev \
--region us-west-2
```

## RDS for SQL Server CEV 的生命週期
<a name="sqlserver-dev-cev-lifecycle"></a>

在 RDS for SQL Server 上使用 SQL Server Developer Edition 時，您的自訂引擎版本會轉換到各種生命週期狀態。


| 生命週期狀態 | Description | 當它發生時 | 可用的動作 | 
| --- | --- | --- | --- | 
|  待驗證  |  建立 CEV 時的初始狀態  |  這是使用 `create-custom-db-engine-version`命令建立之後的初始狀態。  |  透過 監控狀態`describe-db-engine-version`。  | 
|  validating  |  CEV 驗證狀態  |  Amazon RDS 正在驗證您的自訂引擎版本 (CEV)。此非同步程序可能需要一些時間才能完成。  |  監控狀態，直到驗證完成為止。  | 
|  有用  |  自訂引擎版本 (CEV) 驗證已成功完成。  |  自訂引擎版本 (CEV) 現已推出。Amazon RDS 已成功驗證您的 SQL Server ISO 和累積更新檔案。您現在可以使用此 CEV 建立資料庫執行個體。  |  使用此 CEV 建立資料庫執行個體  | 
|  失敗  |  RDS for SQL Server 無法建立自訂引擎版本 (CEV)，因為驗證檢查失敗。  |  ISO 和累積媒體驗證失敗。   |  ISO 驗證失敗。檢查 中的失敗原因`describe-db-engine-version`，修正雜湊不相符或內容損毀等任何檔案問題，然後重新建立自訂引擎版本 (CEV)。  | 
|  正在刪除  |  自訂引擎版本 (CEV) 正在刪除  |  客戶呼叫 後，`delete-custom-db-engine-version`直到刪除工作流程完成為止。  |  透過 監控狀態`describe-db-engine-version`。  | 
|  incompatible-installation-media  |  Amazon RDS 無法驗證為自訂引擎版本 (CEV) 提供的安裝媒體  |  自訂引擎版本 (CEV) 驗證失敗。這是一個終端狀態。  |  如需驗證失敗原因的資訊`describe-db-engine-versions`，請參閱 failureReason via；刪除 CEV。  | 

### 描述 CEV 狀態
<a name="sqlserver-dev-cev-status-check"></a>

您可以使用 查看 CEVs 的狀態AWS CLI：

```
1. aws rds describe-db-engine-versions \
2. --engine sqlserver-dev-ee \
3. --engine-version 16.00.4215.2.my-dev-cev \
4. --region us-west-2 \
5. --query 'DBEngineVersions[0].{Version:EngineVersion,Status:Status}'
```

範例輸出

```
| DescribeDBEngineVersions                     |
+------------+---------------------------------+
| Status | Version                             |
+------------+---------------------------------+
| available | 16.00.4215.2.cev-dev-ss2022-cu21    |
+------------+---------------------------------+
```

當 CEV 顯示`failed`狀態時，您可以使用下列命令來判斷原因：

```
1. aws rds describe-db-engine-versions \
2. --engine sqlserver-dev-ee \
3. --engine-version 16.00.4215.2.my-dev-cev \
4. --region us-west-2 \
5. --query 'DBEngineVersions[0].{Version:EngineVersion,Status:Status,FailureReason:FailureReason}'
```

# 建立 RDS for SQL Server Developer Edition 資料庫執行個體
<a name="sqlserver-dev-edition.creating-instance"></a>

在 RDS for SQL Server 上啟動 Developer Edition 執行個體遵循兩個步驟：首先使用 建立 CEV`create-custom-db-engine-version`，一旦您的自訂引擎版本處於可用狀態，您可以使用 CEV 建立 Amazon RDS 資料庫執行個體。

**Developer Edition 執行個體建立的主要差異**


| 參數 | 開發人員版本 | 
| --- | --- | 
|  `--engine`  |  sqlserver-dev-ee  | 
|  `--engine-version`  |  自訂引擎版本 （例如 16.00.4215.2.cev-dev-ss2022-cu21)  | 
|  `--license-model`  |  bring-your-own-license  | 

## AWS CLI
<a name="sqlserver-dev-edition.creating-instance.CLI"></a>

若要建立 SQL Server Developer Edition 資料庫執行個體，請使用 [create-db-instance](https://docs.aws.amazon.com//cli/latest/reference/rds/create-db-instance.html) 命令搭配下列參數：

下列選項是必要的：
+ `--db-instance-identifier` 
+ `--db-instance-class` 
+ `--engine` – `sqlserver-dev-ee`
+ `--region`

**範例**：

針對 Linux、macOS 或 Unix：

```
aws rds create-db-instance \
--db-instance-identifier my-dev-sqlserver \
--db-instance-class db.m6i.xlarge \
--engine sqlserver-dev-ee \
--engine-version 16.00.4215.2.my-dev-cev \
--allocated-storage 200 \
--master-username admin \
--master-user-password changeThisPassword \
--license-model bring-your-own-license \
--no-multi-az \
--vpc-security-group-ids sg-xxxxxxxxx \
--db-subnet-group-name my-db-subnet-group \
--backup-retention-period 7 \
--region us-west-2
```

針對 Windows：

```
aws rds create-db-instance ^
--db-instance-identifier my-dev-sqlserver ^
--db-instance-class db.m6i.xlarge ^
--engine sqlserver-dev-ee ^
--engine-version 16.00.4215.2.cev-dev-ss2022-cu21 ^
--allocated-storage 200 ^
--master-username admin ^
--master-user-password master_user_password ^
--license-model bring-your-own-license ^
--no-multi-az ^
--vpc-security-group-ids sg-xxxxxxxxx ^
--db-subnet-group-name my-db-subnet-group ^
--backup-retention-period 7 ^
--region us-west-2
```

請參閱使用AWS主控台建立要建立的[資料庫執行個體](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html#USER_CreateDBInstance.Creating)。

# 套用資料庫次要版本升級
<a name="sqlserver-dev-edition.minor-version-upgrades"></a>

RDS for SQL Server Developer Edition 需要建立具有最新累積更新的新自訂引擎版本 (CEV)，才能套用資料庫次要版本升級。SQL Server Developer Edition 的資料庫次要版本升級包含下列步驟：

1. 升級之前，請在執行個體上驗證目前的引擎版本，從 Amazon RDS 支援的版本識別目標資料庫引擎版本。如需 Amazon RDS 上提供的 SQL Server 版本相關資訊，請參閱 [在 RDS for SQL Server 上使用 SQL Server Developer Edition](sqlserver-dev-edition.md)。

1. 取得並上傳安裝媒體 (ISO 和 CU)，然後[建立新的自訂引擎版本](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/sqlserver-dev-edition.creating-cev.html)。

1. 搭配新的 CEV 使用 Amazon RDS [https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html)來套用資料庫次要版本升級。

   ```
   aws rds modify-db-instance \
   --db-instance-identifier <instance-id> \
   --engine-version <new-cev-version> \
   --no-apply-immediately ## use --apply-immediately for immediate update
   ```
**注意**  
`--no-apply-immediately` （預設值） 以在下一個維護時段套用變更。

# 檢視和管理自訂引擎版本
<a name="sqlserver-dev-edition.managing"></a>

若要檢視所有 RDS for SQL Server Developer Edition CEVs，請使用 `describe-db-engine-versions`命令搭配`--engine`輸入做為 `sqlserver-dev-ee`。

```
aws rds describe-db-engine-versions \
--engine sqlserver-dev-ee \
--include-all \
--region us-west-2
```

若要檢視特定 CEV 的詳細資訊，請使用下列命令：

```
aws rds describe-db-engine-versions \
--engine sqlserver-dev-ee \
--engine-version 16.00.4215.2.cev-dev-ss2022-cu21 \
--region us-west-2
```

**注意**  
此命令只會傳回`available`狀態為 CEVs。若要在驗證或其他狀態中檢視 CEVs，請包含 `--include-all`旗標。

## 刪除自訂引擎版本
<a name="sqlserver-dev-deleting-cevs"></a>

刪除 CEV 前，請確定下列任何一項未使用該 CEV：
+ Amazon RDS 資料庫執行個體
+ Amazon RDS 資料庫執行個體的快照
+ Amazon RDS 資料庫執行個體的自動備份

**注意**  
如果有任何資源與其相關聯，則無法刪除 CEV。

若要刪除自訂引擎版本，請使用 [ delete-custom-db-engine-version](https://docs.aws.amazon.com//cli/latest/reference/rds/delete-custom-db-engine-version.html) 命令。
+ `--engine`：指定適用於 Developer Edition `sqlserver-dev-ee` 的
+ `--engine-version`：要刪除的確切 CEV 版本識別符
+ `--region`：CEV 存在AWS 區域的位置

```
aws rds delete-custom-db-engine-version \
--engine sqlserver-dev-ee \
--engine-version 16.00.4215.2.my-dev-cev \
--region us-west-2
```

若要監控 CEV 刪除程序，請使用 `describe-db-engine-versions`命令並指定 RDS for SQL Server CEV 引擎版本

```
aws rds describe-db-engine-versions \
--engine sqlserver-dev-ee \
--engine-version 16.00.4215.2.my-dev-cev \
--region us-west-2
```

狀態值：
+ `deleting`：CEV 刪除進行中
+ 未傳回結果：CEV 已成功刪除

# RDS for SQL Server 的 SQL Server Developer Edition 疑難排解
<a name="sqlserver-dev-edition.troubleshooting"></a>

下表列出使用 SQL Server Developer Edition for RDS for SQL Server 時的一些常見錯誤和對應的解決方案


**常見錯誤和解決方案**  

| 錯誤程式碼 | Description | 解決方案 | 
| --- | --- | --- | 
| InvalidParameterValue | 無效的 CEV 參數或檔案參考 | 驗證檔案名稱、路徑和參數語法 | 
| DBSubnetGroupNotFound | 子網路群組不存在 | 建立子網路群組或驗證名稱 | 
| InvalidVPCNetworkState | VPC 組態問題 | 檢查 VPC、子網路和路由表 | 
| InvalidEngineVersion | CEV 無法使用或無效 | 驗證 CEV 狀態和名稱 | 
| InvalidDBInstanceClass | 不支援執行個體類別 | 選擇支援的執行個體類別 | 
| CustomDBEngineVersionQuotaExceededFault | 您已達到自訂引擎版本的數目上限 | 如果需要增加服務配額，或者視需要刪除未使用的 CEVs  | 
| CreateCustomDBEngineVersionFault | Amazon RDS 無法存取 Amazon S3 儲存貯體中指定的安裝程式檔案。 | Amazon RDS 無法存取指定 Amazon S3 位置中的 SQL Server 安裝檔案。在您的 Amazon S3 儲存貯體政策中授予 Amazon RDS 服務主體 (rds.amazonaws.com) s3：GetObject 許可。 Amazon S3 驗證 Amazon S3 儲存貯體區域是否與您建立 CEV 的區域相同。 | 

# 使用 Active Directory 搭配 RDS for SQL Server
<a name="User.SQLServer.ActiveDirectoryWindowsAuth"></a>

您可以將 RDS for SQL Server 資料庫執行個體加入至 Microsoft Active Directory (AD) 網域。您的 AD 網域可以在 AWS Managed AD 內部 AWS託管，或在您選擇的位置的自我管理 AD 上託管，包括您的公司資料中心、on AWS EC2 或其他雲端提供者。

您可以使用 NTLM 身分驗證和使用自我管理 Active Directory 和 的 Kerberos 身分驗證來驗證網域使用者 AWS Managed Microsoft AD。

在下列各節中，您可以找到在 Amazon RDS 上使用自我管理 Active Directory 和 AWS Managed Active Directory for Microsoft SQL Server 的相關資訊。

**Topics**
+ [搭配使用自我管理 Active Directory 與 Amazon RDS for SQL Server 資料庫執行個體](USER_SQLServer_SelfManagedActiveDirectory.md)
+ [使用具有 RDS for SQL Server 的 AWS 受管 Active Directory](USER_SQLServerWinAuth.md)

# 搭配使用自我管理 Active Directory 與 Amazon RDS for SQL Server 資料庫執行個體
<a name="USER_SQLServer_SelfManagedActiveDirectory"></a>

Amazon RDS for SQL Server 可與您的自我管理 Active Directory (AD) 網域密切整合，無論您的 AD 託管位置是在資料中心、Amazon EC2，還是與其他雲端供應商。此整合可讓您透過 NTLM 或 Kerberos 通訊協定進行直接使用者身分驗證，無需複雜的中繼網域或樹系信任。當您連線至 RDS SQL Server 資料庫執行個體時，身分驗證要求會安全地轉送至您指定的 AD 網域，以維護您現有的身分管理結構，同時運用 Amazon RDS 的受管資料庫功能。

**Topics**
+ [區域和版本可用性](#USER_SQLServer_SelfManagedActiveDirectory.RegionVersionAvailability)
+ [要求](USER_SQLServer_SelfManagedActiveDirectory.Requirements.md)
+ [考量事項](#USER_SQLServer_SelfManagedActiveDirectory.Limitations)
+ [設定自我管理 Active Directory](USER_SQLServer_SelfManagedActiveDirectory.SettingUp.md)
+ [將資料庫執行個體加入自我管理 Active Directory](USER_SQLServer_SelfManagedActiveDirectory.Joining.md)
+ [在自我管理 Active Directory 網域中管理資料庫執行個體](USER_SQLServer_SelfManagedActiveDirectory.Managing.md)
+ [了解自我管理 Active Directory 網域成員資格](#USER_SQLServer_SelfManagedActiveDirectory.Understanding)
+ [對自我管理 Active Directory 進行疑難排解](USER_SQLServer_SelfManagedActiveDirectory.TroubleshootingSelfManagedActiveDirectory.md)
+ [還原 SQL Server 資料庫執行個體，然後將其新增至自我管理 Active Directory 網域](#USER_SQLServer_SelfManagedActiveDirectory.Restore)

## 區域和版本可用性
<a name="USER_SQLServer_SelfManagedActiveDirectory.RegionVersionAvailability"></a>

Amazon RDS 支援在所有商業 AWS 區域 和 中使用 NTLM 和 Kerberos 的自我管理 AD for SQL Server AWS GovCloud (US) Regions。

# 要求
<a name="USER_SQLServer_SelfManagedActiveDirectory.Requirements"></a>

在將 RDS for SQL Server 資料庫執行個體加入自我管理 AD 網域之前，請確定您已符合下列需求。

**Topics**
+ [設定內部部署 AD](#USER_SQLServer_SelfManagedActiveDirectory.Requirements.OnPremConfig)
+ [設定您的網路連線能力](#USER_SQLServer_SelfManagedActiveDirectory.Requirements.NetworkConfig)
+ [設定您的 AD 網域服務帳戶](#USER_SQLServer_SelfManagedActiveDirectory.Requirements.DomainAccountConfig)
+ [設定透過 LDAPS 的安全通訊](#USER_SQLServer_SelfManagedActiveDirectory.Requirements.LDAPS)

## 設定內部部署 AD
<a name="USER_SQLServer_SelfManagedActiveDirectory.Requirements.OnPremConfig"></a>

請確定您具有可以將 Amazon RDS for SQL Server 執行個體加入其中的內部部署或其他自我管理 Microsoft AD。您的內部部署 AD 應該具有下列組態：
+ 如果您已定義 AD 網站，請確定 VPC 中與您的 RDS for SQL Server 資料庫執行個體相關聯的子網路已定義在您的 AD 網站中。確認 VPC 中的子網路與其他 AD 網站中的子網路之間沒有任何衝突。
+ 您的 AD 網域控制器具有 Windows Server 2008 R2 或更新版本的網域功能層級。
+ 您的 AD 網域名稱不能採用單一標籤網域 (SLD) 格式。RDS for SQL Server 不支援 SLD 網域。
+ AD 的完整網域名稱 (FQDN) 不得超過 47 個字元。

## 設定您的網路連線能力
<a name="USER_SQLServer_SelfManagedActiveDirectory.Requirements.NetworkConfig"></a>

請確定您已符合下列網路組態：
+ 在您想要建立 RDS for SQL Server 資料庫執行個體和自我管理 AD 的 Amazon VPC 之間設定連線能力。您可以使用 AWS Direct Connect、 AWS VPN、VPC 對等互連或 AWS Transit Gateway 設定連線。
+ 對於 VPC 安全群組，預設 Amazon VPC 的預設安全群組已新增至主控台中的 RDS for SQL Server 資料庫執行個體。請確定您要在其中建立 RDS for SQL Server 資料庫執行個體之子網路的安全群組和 VPC 網路 ACL 允許連接埠上的流量，並依下圖所示的方向前進。  
![\[自我管理 AD 網路組態連接埠規則。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/SQLServer_SelfManagedActiveDirectory_Requirements_NetworkConfig.png)

  下表識別每個連接埠的角色。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/USER_SQLServer_SelfManagedActiveDirectory.Requirements.html)
+ 一般而言，網域 DNS 伺服器位於 AD 網域控制器中。您不需要設定 VPC DHCP 選項集，即可使用此功能。如需詳細資訊，請參閱《Amazon VPC 使用者指南》**中的 [DHCP 選項集](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html)。

**重要**  
如果使用 VPC 網路 ACL，您也必須允許動態連接埠 (49152-65535) 上來自 RDS for SQL Server 資料庫執行個體的傳出流量。請確定也會在適用於每個 AD 網域控制器、DNS 伺服器和 RDS for SQL Server 資料庫執行個體的防火牆上鏡像這些流量規則。  
雖然 VPC 安全群組只需要以網路流量起始的方向開啟連接埠，但大多數 Windows 防火牆和 VPC 網路 ACL 都需要雙向開啟連接埠。

## 設定您的 AD 網域服務帳戶
<a name="USER_SQLServer_SelfManagedActiveDirectory.Requirements.DomainAccountConfig"></a>

請確定您已符合 AD 網域服務帳戶的下列需求：
+ 確定您在自我管理 AD 網域中具有網域服務帳戶，且該帳戶具有將電腦加入網域的委派許可。網域服務帳戶是自我管理 AD 中的使用者帳戶，其已獲委派執行特定任務的許可。
+ 在您正要將 RDS for SQL Server 資料庫執行個體加入其中的組織單位 (OU) 中，網域服務帳戶必須獲得委派下列許可：
  + 已驗證能夠寫入 DNS 主機名稱
  + 已驗證能夠寫入服務主體名稱
  + 建立和刪除電腦物件

  這些代表將電腦物件加入自我管理 AD 所需的最低許可集。如需詳細資訊，請參閱 Microsoft Windows Server 文件中的[嘗試將電腦加入網域時發生錯誤](https://learn.microsoft.com/en-US/troubleshoot/windows-server/identity/access-denied-when-joining-computers)。
+ 若要使用 Kerberos 身分驗證，您必須將服務主體名稱 (SPN) 和 DNS 許可提供給 AD 網域服務帳戶：
  + **寫入 SPN**：在您需要加入 RDS for SQL Server 資料庫執行個體的 OU 中，將**寫入 SPN** 許可委派給 AD 網域服務帳戶。此許可與已驗證的寫入 SPN 不同。
  + **DNS 許可**：在網域控制站的伺服器層級，透過 DNS 管理員將下列許可提供給 AD 網域服務帳戶：
    + 列出內容
    + 讀取所有屬性
    + 讀取許可

**重要**  
在建立資料庫執行個體之後，請不要移動 RDS for SQL Server 在組織單位中建立的電腦物件。移動相關聯的物件會導致 RDS for SQL Server 資料庫執行個體設定錯誤。如果您需要移動 Amazon RDS 所建立的電腦物件，請使用 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) RDS API 操作，透過所需的電腦物件位置修改網域參數。

## 設定透過 LDAPS 的安全通訊
<a name="USER_SQLServer_SelfManagedActiveDirectory.Requirements.LDAPS"></a>

對於 RDS 建議透過 LDAPS 進行通訊，以查詢和存取網域控制站中的電腦物件和 SPNs。若要使用安全 LDAP，請使用您的網域控制站上符合安全 LDAPS 需求的有效 SSL 憑證。如果網域控制站上不存在有效的 SSL 憑證，RDS for SQL Server 資料庫執行個體會預設為使用 LDAP。如需憑證有效性的詳細資訊，請參閱 [LDAPS 憑證的需求](https://learn.microsoft.com/en-us/troubleshoot/windows-server/active-directory/enable-ldap-over-ssl-3rd-certification-authority#requirements-for-an-ldaps-certificate)。

## 考量事項
<a name="USER_SQLServer_SelfManagedActiveDirectory.Limitations"></a>

將 RDS for SQL Server 資料庫執行個體新增至自我管理 AD 時，請考量下列事項：
+ 您的資料庫執行個體會與 AWS NTP 服務同步，而非 AD 網域的時間伺服器。對於 AD 網域中連結的 SQL Server 執行個體之間的資料庫連線，您只能進行 SQL 身分驗證，而不是 Windows 身分驗證。
+ 來自自我管理 AD 網域的群組政策物件設定不會傳播到您的 RDS for SQL Server 執行個體。

# 設定自我管理 Active Directory
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp"></a>

若要設定自我管理 AD，請採取下列步驟。

**Topics**
+ [步驟 1：在您的 AD 中建立組織單位](#USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateOU)
+ [步驟 2：在您的 AD 中建立 AD 網域服務帳戶](#USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateADuser)
+ [步驟 3：將控制權委派給 AD 網域服務帳戶](#USER_SQLServer_SelfManagedActiveDirectory.SettingUp.DelegateControl)
+ [步驟 4：建立AWS KMS金鑰](#USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateKMSkey)
+ [步驟 5：建立AWS秘密](#USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateSecret)

## 步驟 1：在您的 AD 中建立組織單位
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateOU"></a>

**重要**  
 我們建議為擁有加入自我管理 AD 網域之 RDS for SQL Server 資料庫執行個體的任何AWS帳戶建立範圍為該 OU 的專用 OU 和服務憑證。透過專用 OU 和服務憑證，您可以避免衝突的許可，並遵循最低權限的主體。

**在您的 AD 中建立 OU**

1. 以網域管理員身分連線至您的 AD 網域。

1. 開啟 **Active Directory 使用者和電腦**，然後選取您要在其中建立 OU 的網域。

1. 在網域上按一下滑鼠右鍵，然後選擇**新增**，再選擇**組織單位**。

1. 輸入 OU 的名稱。

1. 保持選取**保護容器免遭意外刪除**的方塊。

1. 按一下 **OK (確定)**。您的新 OU 會出現在您的網域下方。

## 步驟 2：在您的 AD 中建立 AD 網域服務帳戶
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateADuser"></a>

網域服務帳戶登入資料將用於 AWSSecrets Manager 中的秘密。

**在您的 AD 中建立 AD 網域服務帳戶**

1. 開啟 **Active Directory 使用者和電腦**，然後選取您要在其中建立使用者的網域。

1. 在**使用者**上按一下滑鼠右鍵，然後選擇**新增**，再選擇**使用者**。

1. 輸入使用者的名字、姓氏和登入名稱。按一下 **Next (下一步)**。

1. 輸入使用者的密碼。不要選取**「使用者在下次登入時必須變更密碼」**。不要選取**「帳戶已停用」**。按一下 **Next (下一步)**。

1. 按一下 **OK (確定)**。您的新使用者會出現在您的網域下方。

## 步驟 3：將控制權委派給 AD 網域服務帳戶
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.DelegateControl"></a>

**將控制權委派給網域中的 AD 網域服務帳戶**

1. 開啟 **Active Directory 使用者和電腦** MMC 嵌入式管理單元，然後選取您要在其中建立使用者的網域。

1. 在您先前建立的 OU 上按一下滑鼠右鍵，然後選擇**委派控制權**。

1. 在**委派控制權精靈**頁面上，按**下一步**。

1. 在**使用者或群組**區段上，按一下**新增**。

1. 在**選取使用者、電腦或群組**區段上，輸入您建立的 AD 網域服務帳戶，然後按一下**檢查名稱**。如果 AD 網域服務帳戶檢查成功，請按一下**確定**。

1. 在**使用者或群組**區段上，確認已新增您的 AD 網域服務帳戶，然後按**下一步**。

1. 在**要委派的任務**區段上，選取**建立要委派的自訂任務**，然後按**下一步**。

1. 在 **Active Directory 物件類型**區段上：

   1. 選擇**僅限資料夾中的下列物件**。

   1. 選取**電腦物件**。

   1. 選取**在此資料夾中建立選取的物件**。

   1. 選取**刪除此資料夾中選取的物件**，然後按**下一步**。

1. 在**許可**區段上：

   1. 保持選取**一般**。

   1. 選取**已驗證寫入 DNS 主機名稱**。

   1. 選取**已驗證寫入服務主體名稱**，然後按**下一步**。

   1. 若要啟用 Kerberos 身分驗證，請保持選取**屬性特定**，然後從清單中選取**寫入 servicePrincipalName**。

1. 對於**完成委派控制權精靈**，請檢閱並確認您的設定，然後按一下**完成**。

1. 針對 Kerberos 身分驗證，開啟 DNS Manager，並開啟**伺服器**屬性。

   1. 在 Windows 對話方塊中，輸入 `dnsmgmt.msc`。

   1. 在**安全性**索引標籤底下新增 AD 網域服務帳戶。

   1. 選取**讀取**許可，並套用您的變更。

## 步驟 4：建立AWS KMS金鑰
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateKMSkey"></a>

KMS 金鑰用於加密您的AWS秘密。

**建立AWS KMS金鑰**
**注意**  
 對於**加密金鑰**，請勿使用AWS預設 KMS 金鑰。請務必在相同AWS帳戶中建立AWS KMS金鑰，其中包含您要加入自我管理 AD 的 RDS for SQL Server 資料庫執行個體。

1. 在 AWS KMS主控台中，選擇**建立金鑰**。

1. 對於**金鑰類型**，選擇**對稱**。

1. 對於**金鑰用途**，選擇**加密和解密**。

1. 針對 **Advanced options (進階選項)**：

   1. 對於**金鑰材料來源**，選擇 **KMS**。

   1. 對於**區域性**，選擇**單一區域金鑰**，然後按**下一步**。

1. 對於**別名**，提供 KMS 金鑰的名稱。

1. (選用) 對於**描述**，提供 KMS 金鑰的描述。

1. (選用) 對於**標籤**，提供 KMS 金鑰的標籤，然後按**下一步**。

1. 對於**金鑰管理員**，提供 IAM 使用者的名稱，然後選取該名稱。

1. 對於**金鑰刪除**，保持選取**允許金鑰管理員刪除此金鑰**的方塊，然後按**下一步**。

1. 對於**金鑰使用者**，提供上一個步驟中相同的 IAM 使用者，然後選取該使用者。按一下 **Next (下一步)**。

1. 檢閱組態。

1. 對於**金鑰政策**，在政策**聲明**中包含下列內容：

   ```
   {
       "Sid": "Allow use of the KMS key on behalf of RDS",
       "Effect": "Allow",
       "Principal": {
           "Service": [
               "rds.amazonaws.com"
           ]
       },
       "Action": "kms:Decrypt",
       "Resource": "*"
   }
   ```

1. 按一下 **Finish (完成)**。

## 步驟 5：建立AWS秘密
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateSecret"></a>

**若要建立機密**
**注意**  
 請務必在包含您要加入自我管理 AD 之 RDS for SQL Server 資料庫執行個體的相同AWS帳戶中建立秘密。

1. 在 AWSSecrets Manager 中，選擇**儲存新的秘密**。

1. 針對**機密類型**，選擇**其他類型的機密**。

1. 對於**金鑰/值對**，新增兩個金鑰：

   1. 對於第一個金鑰，輸入 `SELF_MANAGED_ACTIVE_DIRECTORY_USERNAME`。

   1. 對於第一個金鑰的值，僅輸入 AD 使用者的使用者名稱 (不含網域字首)。請勿包含網域名稱，因為這會導致執行個體建立失敗。

   1. 對於第二個金鑰，輸入 `SELF_MANAGED_ACTIVE_DIRECTORY_PASSWORD`。

   1. 對於第二個金鑰的值，輸入您在網域上為 AD 使用者建立的密碼。

1. 對於**加密金鑰**，輸入您在上一個步驟中建立的 KMS 金鑰，然後按**下一步**。

1. 對於**秘密名稱**，輸入可協助您稍後尋找密碼的描述性名稱。

1. (選用) 對於**描述**，輸入秘密名稱的描述。

1. 對於**資源許可**，按一下**編輯**。

1. 請將下列政策新增至許可政策：
**注意**  
建議您使用政策中的 `aws:sourceAccount` 和 `aws:sourceArn` 條件金鑰，保護自己免受*混淆代理人問題*的困擾。使用AWS 帳戶適用於 的 `aws:sourceAccount`和適用於 的 RDS for SQL Server 資料庫執行個體 ARN`aws:sourceArn`。如需詳細資訊，請參閱[防止跨服務混淆代理人問題](cross-service-confused-deputy-prevention.md)。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement":
       [
           {
               "Effect": "Allow",
               "Principal":
               {
                   "Service": "rds.amazonaws.com"
               },
               "Action": "secretsmanager:GetSecretValue",
               "Resource": "*",
               "Condition":
               {
                   "StringEquals":
                   {
                       "aws:sourceAccount": "123456789012"
                   },
                   "ArnLike":
                   {
                       "aws:sourceArn": "arn:aws:rds:us-west-2:123456789012:db:*"
                   }
               }
           }
       ]
   }
   ```

------

1. 按一下**儲存**，然後按**下一步**。

1. 對於**設定輪換設定**，保留預設值並選擇**下一步**。

1. 檢閱秘密的設定，然後按一下**存放**。

1. 選擇您建立的秘密，然後複製**秘密 ARN** 的值。這將在下一個步驟中用來設定自我管理 Active Directory。

# 將資料庫執行個體加入自我管理 Active Directory
<a name="USER_SQLServer_SelfManagedActiveDirectory.Joining"></a>

若要將 RDS for SQL Server 資料庫執行個體加入自我管理 AD，請遵循下列步驟：

## 步驟 1：建立或修改 SQL Server 資料庫執行個體
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateModify"></a>

您可以使用主控台、CLI 或 RDS API，將 RDS for SQL Server 資料庫執行個體與自我管理 AD 網域建立關聯。您可採用下列其中一種方式來這麼做：
+ 使用主控台、[create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) CLI 命令，或 [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) RDS API 操作，建立新的 SQL Server 資料庫執行個體。

  如需說明，請參閱「[建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)」。
+ 使用主控台、[modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) CLI 命令，或 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) RDS API 操作，修改現有的 SQL Server 資料庫執行個體。

  如需說明，請參閱「[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)」。
+ 使用主控台、[restore-db-instance-from-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html) CLI 命令，或 [RestoreDBInstanceFromDBSnapshot](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html) RDS API 操作，從資料庫快照還原 SQL Server 資料庫執行個體。

  如需說明，請參閱「[還原至資料庫執行個體](USER_RestoreFromSnapshot.md)」。
+ 使用主控台、[restore-db-instance-to-point-in-time](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html) CLI 命令，或 [RestoreDBInstanceToPointInTime](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html) RDS API 操作，將 SQL Server 資料庫執行個體還原至某個時間點。

  如需說明，請參閱[將 Amazon RDS 的資料庫執行個體還原至指定時間](USER_PIT.md)。

當您使用 時 AWS CLI，資料庫執行個體需要下列參數，才能使用您建立的自我管理 AD 網域：
+ 對於 `--domain-fqdn` 參數，使用自我管理 AD 的完整網域名稱 (FQDN)。
+ 對於 `--domain-ou` 參數，使用您在自我管理 AD 中建立的 OU。
+ 對於 `--domain-auth-secret-arn` 參數，使用您在上一個步驟中所建立之**秘密 ARN** 的值。
+ 對於 `--domain-dns-ips` 參數，針對自我管理 AD 使用 DNS 伺服器的主要和次要 IPv4 地址。如果您沒有次要 DNS 伺服器 IP 地址，請輸入主要 IP 地址兩次。

下列範例 CLI 命令說明如何建立、修改及移除具有自我管理 AD 網域的 RDS for SQL Server 資料庫執行個體。

**重要**  
如果您修改資料庫執行個體，以將其加入自我管理 AD 網域或從中移除，則需要重新啟動資料庫執行個體，修改才會生效。您可以選擇立即套用變更，也可以等到下一個維護時段。選擇**立即套用**選項會導致單一可用區域資料庫執行個體停機。多可用區域資料庫執行個體將在完成重新啟動之前執行容錯移轉。如需詳細資訊，請參閱[使用排程修改設定](USER_ModifyInstance.ApplyImmediately.md)。

下列 CLI 命令會建立新的 RDS for SQL Server 資料庫執行個體，並將其加入自我管理 AD 網域。

針對 Linux、macOS 或 Unix：

```
aws rds create-db-instance \
    --db-instance-identifier my-DB-instance \
    --db-instance-class db.m5.xlarge \
    --allocated-storage 50 \
    --engine sqlserver-se \
    --engine-version 15.00.4043.16.v1 \
    --license-model license-included \
    --master-username my-master-username \
    --master-user-password my-master-password \
    --domain-fqdn my_AD_domain.my_AD.my_domain \
    --domain-ou OU=my-AD-test-OU,DC=my-AD-test,DC=my-AD,DC=my-domain \
    --domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:my-AD-test-secret-123456" \
    --domain-dns-ips "10.11.12.13" "10.11.12.14"
```

在 Windows 中：

```
aws rds create-db-instance ^
    --db-instance-identifier my-DB-instance ^
    --db-instance-class db.m5.xlarge ^
    --allocated-storage 50 ^
    --engine sqlserver-se ^
    --engine-version 15.00.4043.16.v1 ^
    --license-model license-included ^
    --master-username my-master-username ^
    --master-user-password my-master-password ^
    --domain-fqdn my-AD-test.my-AD.mydomain ^
    --domain-ou OU=my-AD-test-OU,DC=my-AD-test,DC=my-AD,DC=my-domain ^
    --domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:my-AD-test-secret-123456" \ ^
    --domain-dns-ips "10.11.12.13" "10.11.12.14"
```

下列 CLI 命令會修改現有的 RDS for SQL Server 資料庫執行個體，以使用自我管理 AD 網域。

針對 Linux、macOS 或 Unix：

```
aws rds modify-db-instance \
    --db-instance-identifier my-DB-instance \
    --domain-fqdn my_AD_domain.my_AD.my_domain \
    --domain-ou OU=my-AD-test-OU,DC=my-AD-test,DC=my-AD,DC=my-domain \
    --domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:my-AD-test-secret-123456" \ 
    --domain-dns-ips "10.11.12.13" "10.11.12.14"
```

在 Windows 中：

```
aws rds modify-db-instance ^
    --db-instance-identifier my-DBinstance ^
    --domain-fqdn my_AD_domain.my_AD.my_domain ^
    --domain-ou OU=my-AD-test-OU,DC=my-AD-test,DC=my-AD,DC=my-domain ^
    --domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:my-AD-test-secret-123456" ^ 
    --domain-dns-ips "10.11.12.13" "10.11.12.14"
```

下列 CLI 命令會從自我管理 AD 網域中移除 RDS for SQL Server 資料庫執行個體。

針對 Linux、macOS 或 Unix：

```
aws rds modify-db-instance \
    --db-instance-identifier my-DB-instance \
    --disable-domain
```

在 Windows 中：

```
aws rds modify-db-instance ^
    --db-instance-identifier my-DB-instance ^
    --disable-domain
```

## 步驟 2：使用 Kerberos 或 NTLM 身分驗證
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.KerbNTLM"></a>

### NTLM 身分驗證
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.KerbNTLM.NTLM"></a>

每個 Amazon RDS 資料庫執行個體都有端點，並且每個端點有資料庫執行個體的 DNS 名稱和連接埠號碼。若要使用 SQL 用戶端應用程式連線至您的資料庫執行個體，您需要資料庫執行個體的 DNS 名稱和連接埠號碼。若要使用 NTLM 身分驗證進行驗證，如果您使用多可用區域部署，則必須連線至 RDS 端點或接聽程式端點。

在規劃的資料庫維護或未規劃的服務中斷期間，Amazon RDS 會自動容錯移轉到最新的次要資料庫，以便操作可以很快繼續執行，而無須人為介入。主要與次要執行個體會使用相同的端點，其實體網路會處理轉換至次要的作業，做為容錯移轉程序的一部分。當容錯移轉發生時，您不必重新設定應用程式。

### Kerberos 身分驗證
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.Kerb"></a>

RDS for SQL Server 的 Kerberos 型身分驗證需要提供特定服務主體名稱 (SPN) 的連線。不過，容錯移轉事件之後，應用程式可能不知道新的 SPN。為了解決此問題，RDS for SQL Server 提供了 Kerberos 型端點。

Kerberos 型端點遵循特定格式。如果您的 RDS 端點為 `rds-instance-name.account-region-hash.aws-region.rds.amazonaws.com`，則對應的 Kerberos 型端點將為 `rds-instance-name.account-region-hash.aws-region.awsrds.fully qualified domain name (FQDN)`。

例如，如果 RDS 端點為 `ad-test.cocv6zwtircu.us-east-1.rds.amazonaws.com`，且網域名稱為 `corp-ad.company.com`，則 Kerberos 型端點將為 `ad-test.cocv6zwtircu.us-east-1.awsrds.corp-ad.company.com`。

此 Kerberos 型端點可以使用 Kerberos 與 SQL Server 執行個體進行驗證，即使在容錯移轉事件之後也一樣，因為端點會自動更新，以指向主要 SQL Server 執行個體的新 SPN。

### 尋找您的 CNAME
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CNAME"></a>

若要尋找 CNAME，請連線至您的網域控制站，並開啟 **DNS Manager**。導覽至**轉送查詢區域**和您的 FQDN。

導覽 **awsrds**、**aws-region** 以及**帳戶和區域特定的雜湊**。

![\[修改資料庫執行個體的儲存量\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/kerb-endpoint-selfManagedAD-RDSMS.png)


如果從遠端用戶端連線 CNAME 之後傳回 NTLM 連線，請檢查是否允許列出必要的連接埠。

如果要檢查您的連線使用的是 Kerberos，請執行下列查詢：

```
SELECT net_transport, auth_scheme
    FROM sys.dm_exec_connections
    WHERE session_id = @@SSPID;
```

如果執行個體在您連線至 Kerberos 端點時傳回 NTLM 連線，請驗證您的網路組態和使用者組態。請參閱 [設定您的網路連線能力](USER_SQLServer_SelfManagedActiveDirectory.Requirements.md#USER_SQLServer_SelfManagedActiveDirectory.Requirements.NetworkConfig)。

## 步驟 3：建立 Windows 身分驗證 SQL Server 登入
<a name="USER_SQLServer_SelfManagedActiveDirectory.CreateLogins"></a>

使用 Amazon RDS 主要使用者憑證來連線至 SQL Server 資料庫執行個體，如同您對任何其他資料庫執行個體所做一般。因為資料庫執行個體已加入自我管理 AD 網域，所以您可以佈建 SQL Server 登入和使用者。您可以從自我管理 AD 網域中的 AD 使用者和群組公用程式執行此操作。您可透過對這些 Windows 登入授予和撤銷的標準 SQL Server 許可來管理資料庫許可。

為了讓自我管理 AD 網域服務帳戶向 SQL Server 進行身分驗證，自我管理 AD 網域服務帳戶或使用者所屬的自我管理 AD 群組必須要有 SQL Server Windows 登入存在。精細定義的存取控制是透過授予和撤銷這些 SQL Server 登入的許可來處理。自我管理 AD 網域服務帳戶若沒有 SQL Server 登入，或不屬於具有此類登入的自我管理 AD 群組，則無法存取 SQL Server 資料庫執行個體。

需要 ALTER ANY LOGIN 許可，才能建立自我管理 AD SQL Server 登入。如果您尚未使用此許可建立任何登入，請使用 SQL Server 身分驗證，以資料庫執行個體的主要使用者身分連線，並在主要使用者的內容下建立自我管理 AD SQL Server 登入。

您可以執行如下的資料定義語言 (DDL) 命令，為自我管理 AD 網域服務帳戶或群組建立 SQL Server 登入。

**注意**  
使用 Windows 2000 前版的登入名稱，以格式 `my_AD_domain\my_AD_domain_user` 來指定使用者和群組。您無法使用格式為 *`my_AD_domain_user`*`@`*`my_AD_domain`* 的使用者原則名稱 (UPN)。

```
USE [master]
GO
CREATE LOGIN [my_AD_domain\my_AD_domain_user] FROM WINDOWS WITH DEFAULT_DATABASE = [master], DEFAULT_LANGUAGE = [us_english];
GO
```

如需詳細資訊，請參閱 Microsoft 開發人員網路文件中的[ 建立登入 (Transact-SQL)](https://msdn.microsoft.com/en-us/library/ms189751.aspx)。

來自您網域的使用者 (人員和應用程式兩者) 現在可以使用 Windows 身分驗證，從加入自我管理 AD 網域的用戶端機器連線至 RDS for SQL Server Active 執行個體。

# 在自我管理 Active Directory 網域中管理資料庫執行個體
<a name="USER_SQLServer_SelfManagedActiveDirectory.Managing"></a>

 您可以使用 主控台 AWS CLI或 Amazon RDS API 來管理資料庫執行個體及其與自我管理 AD 網域的關係。例如，您可以將資料庫執行個體移入、移出或移至網域之間。

 例如，使用 Amazon RDS API，您可以執行下列動作：
+ 若要針對失敗的成員資格重新嘗試自我管理網域加入，請使用 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) API 操作，並指定相同的參數集：
  + `--domain-fqdn`
  + `--domain-dns-ips`
  + `--domain-ou`
  + `--domain-auth-secret-arn`
+ 若要從自我管理網域中移除資料庫執行個體，請使用 `ModifyDBInstance` API 操作，並針對網域參數指定 `--disable-domain`。
+ 若要將資料庫執行個體從某個自我管理網域移至另一個網域，請使用 `ModifyDBInstance` API 操作，並指定新網域的網域參數。
  + `--domain-fqdn`
  + `--domain-dns-ips`
  + `--domain-ou`
  + `--domain-auth-secret-arn`
+ 若要列出每個資料庫執行個體的自我管理 AD 網域成員資格，請使用 [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/DescribeDBInstances.html) API 操作。

## 了解自我管理 Active Directory 網域成員資格
<a name="USER_SQLServer_SelfManagedActiveDirectory.Understanding"></a>

您在指定 AD 詳細資訊時建立或修改資料庫執行個體之後，該執行個體會成為自我管理 AD 網域的成員。 AWS 主控台會指出資料庫執行個體自我管理 Active Directory 網域成員資格的狀態。資料庫執行個體的狀態可以是下列其中一個：
+  **已加入** – 執行個體是 AD 網域的成員。
+  **加入中** – 執行個體正處於成為 AD 網域成員的過程中。
+  **加入待定** – 執行個體成員資格待定。
+  **pending-maintenance-join** – AWS 將嘗試在下一個排定的維護時段，讓執行個體成為 AD 網域的成員。
+  **移除待定** – 從 AD 網域移除執行個體待定。
+  **pending-maintenance-removal** – AWS 將在下一個排定的維護時段嘗試從 AD 網域移除執行個體。
+  **失敗** – 組態問題讓執行個體無法加入 AD 網域。請在重新發出執行個體修改命令之前檢查並修正您的組態。
+  **移除中** – 正在從自我管理 AD 網域移除執行個體。

**重要**  
因為網路連線問題，所以成為自我管理 AD 網域成員的請求可能失敗。例如，您可以建立一個資料庫執行個體或修改現有執行個體，並嘗試讓資料庫執行個體失敗，以便成為自我管理 AD 網域的成員。在此情況下，請重新發出命令以建立或修改資料庫執行個體，或修改新建立的執行個體以加入自我管理 AD 網域。

# 對自我管理 Active Directory 進行疑難排解
<a name="USER_SQLServer_SelfManagedActiveDirectory.TroubleshootingSelfManagedActiveDirectory"></a>

以下是您在設定或修改自我管理 AD 時可能會遇到的問題。


****  

| 錯誤程式碼 | 說明 | 常見原因 | 故障診斷建議 | 
| --- | --- | --- | --- | 
| 錯誤 2 / 0x2 | 系統找不到指定的檔案。 | 使用 `—domain-ou` 參數指定的組織單位 (OU) 的格式或位置無效。透過 AWS Secrets Manager 指定的網域服務帳戶缺少加入 OU 所需的許可。 | 檢閱 `—domain-ou` 參數。確定網域服務帳戶具有 OU 的正確許可。如需詳細資訊，請參閱[設定您的 AD 網域服務帳戶](USER_SQLServer_SelfManagedActiveDirectory.Requirements.md#USER_SQLServer_SelfManagedActiveDirectory.Requirements.DomainAccountConfig)。 | 
| 錯誤 5 / 0x5 | 存取遭拒。 | 網域服務帳戶的許可設定錯誤，或網域中已存在電腦帳戶。 | 檢閱網域中的網域服務帳戶許可，並確認網域中沒有重複的 RDS 電腦帳戶。您可以在 RDS for SQL Server 資料庫執行個體上執行 `SELECT @@SERVERNAME`，以驗證 RDS 電腦帳戶的名稱。如果您使用多可用區域，請嘗試透過容錯移轉重新開機，然後再次驗證 RDS 電腦帳戶。如需詳細資訊，請參閱[在資料庫執行個體](USER_RebootInstance.md)。 | 
| 錯誤 87 / 0x57 | 參數不正確。 | 透過 AWS Secrets Manager 指定的網域服務帳戶沒有正確的許可。使用者設定檔也可能已損毀。 | 檢閱網域服務帳戶的需求。如需詳細資訊，請參閱[設定您的 AD 網域服務帳戶](USER_SQLServer_SelfManagedActiveDirectory.Requirements.md#USER_SQLServer_SelfManagedActiveDirectory.Requirements.DomainAccountConfig)。 | 
| 錯誤 234 / 0xEA | 指定的組織單位 (OU) 不存在。 | 使用 `—domain-ou` 參數指定的 OU 不存在於自我管理 AD 中。 | 檢閱 `—domain-ou` 參數，並確保指定的 OU 存在於您的自我管理 AD 中。 | 
| 錯誤 1326 / 0x52E | 使用者名稱或密碼不正確。 |  AWS Secrets Manager 中提供的網域服務帳戶登入資料包含未知的使用者名稱或錯誤密碼。也可能在您的自我管理 AD 中停用了網域帳戶。 | 請確定 AWS Secrets Manager 中提供的憑證是正確的，而且網域帳戶已在自我管理 AD 中啟用。 | 
| 錯誤 1355 / 0x54B | 指定的網域不存在或無法聯絡。 | 網域已關閉、指定的 DNS IP 集無法連線，或指定的 FQDN 無法連線。 | 檢閱 `—domain-dns-ips` 和 `—domain-fqdn` 參數以確定其正確無誤。檢閱 RDS for SQL Server 資料庫執行個體的網路組態，並確定可連線到您的自我管理 AD。如需詳細資訊，請參閱[設定您的網路連線能力](USER_SQLServer_SelfManagedActiveDirectory.Requirements.md#USER_SQLServer_SelfManagedActiveDirectory.Requirements.NetworkConfig)。 | 
| 錯誤 1722 / 0x6BA | RPC 伺服器無法使用。 | 連線 AD 網域的 RPC 服務時發生問題。這可能是服務或網路問題。 | 驗證 RPC 服務是否正在您的網域控制器上執行，以及 TCP 連接埠 `135` 和 `49152-65535` 是否可在網域上，從 RDS for SQL Server 資料庫執行個體進行連線。 | 
|  錯誤 1727 / 0x6BF  |  遠端程序呼叫失敗且未執行。  |  網路連線問題或防火牆限制封鎖了與網域控制站的 RPC 通訊。  |  如果使用跨 VPC 網域加入，請驗證是否已使用 VPC 對等互連或 Transit Gateway 正確設定跨 VPC 通訊。請確定可在您的網域上從 RDS for SQL Server 資料庫執行個體連線到 TCP 高連接埠 `49152-65535`，包括任何可能的防火牆限制。  | 
| 錯誤 2224 / 0x8B0 | 使用者帳戶已存在。 | 嘗試新增至自我管理 AD 的電腦帳戶已存在。 | 在 RDS for SQL Server 資料庫執行個體上執行 `SELECT @@SERVERNAME`，來識別電腦帳戶，然後小心地將其從自我管理 AD 中移除。 | 
| 錯誤 2242 / 0x8c2 | 此使用者的密碼已過期。 | 透過 AWS Secrets Manager 指定的網域服務帳戶密碼已過期。 | 更新網域服務帳戶的密碼，此帳戶用來將 RDS for SQL Server 資料庫執行個體加入自我管理 AD。 | 

將您的資料庫執行個體加入自我管理 Active Directory 網域之後，您可能會收到與網域運作狀態相關的 RDS 事件。

```
Unhealthy domain state detected while attempt to verify or 
configure your Kerberos endpoint in your domain on 
node node_n. message
```

對於多可用區域執行個體，您可能會看到 node1 和 node2 的錯誤報告，這表示執行個體的 Kerberos 組態尚未做好容錯移轉的準備。如果發生容錯移轉，您在使用 Kerberos 時可能會遇到身分驗證問題。請解決組態問題，以確保 Kerberos 設定有效且是最新的。就多可用區域執行個體而言，只要所有網路和許可都已設定妥當，即可直接在新的主要主機上使用 Kerberos 身分驗證，無需任何動作。

對於單一可用區域執行個體，node1 是主節點。如果您的 Kerberos 身分驗證未如預期運作，請檢查執行個體事件並解決組態問題，以確保 Kerberos 設定有效且是最新的。

## 還原 SQL Server 資料庫執行個體，然後將其新增至自我管理 Active Directory 網域
<a name="USER_SQLServer_SelfManagedActiveDirectory.Restore"></a>

您可以還原資料庫快照或為 SQL Server 資料庫執行個體執行時間點復原 (PITR)，然後將其新增至自我管理 Active Directory 網域。一旦還原了資料庫執行個體，請使用[步驟 1：建立或修改 SQL Server 資料庫執行個體](USER_SQLServer_SelfManagedActiveDirectory.Joining.md#USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateModify)中說明的程序來修改執行個體，以將資料庫執行個體新增至自我管理 AD 網域。

# 使用具有 RDS for SQL Server 的 AWS 受管 Active Directory
<a name="USER_SQLServerWinAuth"></a>

您可以使用 AWS Managed Microsoft AD 在使用者連線到 RDS for SQL Server 資料庫執行個體時，透過 Windows 身分驗證對使用者進行身分驗證。資料庫執行個體可與 搭配使用 AWS Directory Service for Microsoft Active Directory，也稱為 AWS Managed Microsoft AD，以啟用 Windows 身分驗證。當使用者向加入信任網域的 SQL Server 資料庫執行個體進行驗證時，身分驗證請求會轉送到您使用 Directory Service建立的網域目錄。

## 區域和版本可用性
<a name="USER_SQLServerWinAuth.RegionVersionAvailability"></a>

Amazon RDS 僅支援 AWS Managed Microsoft AD 使用 Windows 身分驗證。RDS 不支援使用 AD Connector。如需詳細資訊，請參閱下列內容：
+ [的應用程式相容性政策 AWS Managed Microsoft AD](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_app_compatibility.html)
+ [AD Connector 應用程式相容性政策](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ad_connector_app_compatibility.html)

如需有關版本和區域可用性的詳細資訊，請參閱[透過 RDS for SQL Server 進行 Kerberos 身分驗證](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RDS_Fea_Regions_DB-eng.Feature.KerberosAuthentication.html#Concepts.RDS_Fea_Regions_DB-eng.Feature.KerberosAuthentication.sq)。

## 設定 Windows 身分驗證概觀
<a name="USER_SQLServerWinAuth.overview"></a>

Amazon RDS 對 Windows 身分驗證使用混合模式。此方法表示*主要使用者* (用來建立您的 SQL Server 資料庫執行個體的名稱和密碼) 使用 SQL 身分驗證。因為主要使用者帳戶是具有特殊權限的登入資料，您應該限制對此帳戶的存取。

若要使用現場部署或自行託管的 Microsoft Active Directory 獲得 Windows 身分驗證，請建立樹系信任。信任可以是單向或雙向。如需使用 設定樹系信任的詳細資訊 Directory Service，請參閱《 *AWS Directory Service 管理指南*》中的[何時建立信任關係](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_setup_trust.html)。

若要為 SQL Server 資料庫執行個體設定 Windows 身分驗證，請執行下列步驟 (如 [為 SQL Server 資料庫執行個體設定 Windows 身分驗證](USER_SQLServerWinAuth.SettingUp.md) 所詳述)：

1.  AWS Managed Microsoft AD從 AWS 管理主控台 或 Directory Service API 使用 來建立 AWS Managed Microsoft AD 目錄。

1. 如果您使用 AWS CLI 或 Amazon RDS API 來建立 SQL Server 資料庫執行個體，請建立 AWS Identity and Access Management (IAM) 角色。此角色使用受管 IAM 政策 `AmazonRDSDirectoryServiceAccess`，而且 Amazon RDS 允許對目錄進行呼叫。如果您使用主控台來建立您的 SQL Server 資料庫執行個體， AWS 會為您建立 IAM 角色。

   若要讓角色允許存取，必須在您 AWS 帳戶的 AWS 區域中啟用 AWS Security Token Service (AWS STS) 端點。 AWS STS 端點預設會在所有 AWS 區域中處於作用中狀態，而且您可以使用它們，而不需要任何進一步的動作。如需詳細資訊，請參閱*《IAM 使用者指南》*中的[管理 AWS 區域中的 AWS STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)。

1. 使用 Microsoft Active Directory 工具在 AWS Managed Microsoft AD 目錄中建立和設定使用者和群組。如需在 Microsoft Active Directory 建立使用者的詳細資訊，請參閱 *AWS Directory Service 管理指南*中的[管理 AWS Managed Microsoft AD中的使用者和群組](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_manage_users_groups.html)。

1. 如果您打算在不同 VPC 中尋找目錄和資料庫執行個體，請啟用跨 VPC 流量。

1. 使用 Amazon RDS 從主控台 AWS CLI或 Amazon RDS API 建立新的 SQL Server 資料庫執行個體。在建立請求中，您可以提供建立目錄時產生的網域識別符 ("`d-*`" identifier) 和您建立之角色的名稱。您也可以將現有 SQL Server 資料庫執行個體修改為使用 Windows 身分驗證，方法是設定資料庫執行個體的網域和 IAM 角色參數。

1. 如同對其他資料庫執行個體一般，使用 Amazon RDS 主要使用者登入資料來連接至 SQL Server 資料庫執行個體。由於資料庫執行個體已加入 AWS Managed Microsoft AD 網域，因此您可以從其網域中的 Active Directory 使用者和群組佈建 SQL Server 登入和使用者。(這些稱為 SQL Server "Windows" 登入。) 您可透過對這些 Windows 登入授予和撤銷的標準 SQL Server 許可來管理資料庫許可。

當您使用 Amazon RDS 主控台建立與網域連線的 RDS for SQL Server 資料庫執行個體時， AWS 會自動建立 `rds-directoryservice-access-role` IAM 角色。這是管理網域連線的執行個體不可或缺的角色，也是下列操作的必要角色：
+ 對網域連線的 SQL Server 執行個體進行組態變更
+ 管理 Active Directory 整合設定
+ 在加入網域的執行個體上執行維護操作

**重要**  
如果刪除了 `rds-directoryservice-access-role` IAM 角色，則無法透過 Amazon RDS 主控台或 API 變更網域連線的 SQL Server 執行個體。嘗試修改執行個體會導致錯誤訊息，指出：您沒有 iam:CreateRole 的許可。若要請求存取，請複製下列文字並將其傳送給您的 AWS 管理員。  
之所以發生此錯誤，是因為 Amazon RDS 必須重新建立角色以管理網域連線，但缺少必要的許可。此外，此錯誤不會記錄在 CloudTrail 中，這可能會使疑難排解更加困難。

如果意外刪除了 `rds-directoryservice-access-role`，您必須先獲得重新建立的 `iam:CreateRole` 許可，才能對連線網域的 SQL Server 執行個體進行任何變更。若要手動重新建立角色，請確定角色已連接 `AmazonRDSDirectoryServiceAccess` 受管政策，並且有適當的信任關係允許 RDS 服務承擔角色。

# 建立 Kerberos 身分驗證的端點
<a name="USER_SQLServerWinAuth.KerberosEndpoint"></a>

Kerberos 式身分驗證需要端點是客戶指定的主機名稱、句點，然後接著完整網域名稱 (FQDN)。例如，下列是您會對 Kerberos 式身分驗證使用的端點範例。在此範例中，SQL Server 資料庫執行個體主機名稱是 `ad-test`，而網域名稱是 `corp-ad.company.com`。

```
ad-test.corp-ad.company.com
```

如果您要確定您的連線使用的是 Kerberos，執行下列查詢：

```
1. SELECT net_transport, auth_scheme 
2.   FROM sys.dm_exec_connections 
3.  WHERE session_id = @@SPID;
```

# 為 SQL Server 資料庫執行個體設定 Windows 身分驗證
<a name="USER_SQLServerWinAuth.SettingUp"></a>

您可以使用 AWS Directory Service for Microsoft Active Directory來 AWS Managed Microsoft AD設定 SQL Server 資料庫執行個體的 Windows 身分驗證。若要設定 Windows 身分驗證，請執行下列步驟。

## 步驟 1：使用 建立目錄 AWS Directory Service for Microsoft Active Directory
<a name="USER_SQLServerWinAuth.SettingUp.CreateDirectory"></a>

Directory Service 在 AWS 雲端中建立全受管 Microsoft Active Directory。當您建立 AWS Managed Microsoft AD 目錄時， 會代表您 Directory Service 建立兩個網域控制站和網域名稱服務 (DNS) 伺服器。目錄伺服器是在兩個子網路中建立，而這兩個子網路是在 VPC 內的兩個不同可用區域中。此備援可協助確保即使失敗，仍能存取您的目錄。

 當您建立 AWS Managed Microsoft AD 目錄時， 會代表您 Directory Service 執行下列任務：
+ 設定 VPC 內的 Microsoft Active Directory。
+ 建立含有使用者名稱 Admin 與指定密碼的目錄管理員帳戶。您可以使用此帳戶來管理目錄。
+ 建立目錄控制器的安全群組。

當您啟動 時 AWS Directory Service for Microsoft Active Directory， 會 AWS 建立組織單位 (OU)，其中包含您目錄的所有物件。此 OU 有您在建立目錄時所輸入的 NetBIOS 名稱，位於根網域中。網域根由 擁有和管理 AWS。

 隨著您的 AWS Managed Microsoft AD 目錄建立的*管理*帳戶具有您的 OU 最常見管理活動的許可：
+ 建立更新或刪除使用者、群組和電腦。
+ 新增資源 (例如檔案或列印伺服器) 至您的網域，然後對您 OU 中的使用者和群組指派這些資源的許可。
+ 建立額外的 OU 和容器。
+ 委派授權。
+ 建立及連結群組政策。
+ 從 Active Directory 資源回收筒還原已刪除的物件。
+ 在 Active Directory Web 服務上執行 AD 和 DNS Windows PowerShell 模組。

管理員帳戶也有權執行下列全網域活動：
+ 管理 DNS 組態 (新增、移除或更新記錄、區域和轉寄站)。
+ 檢視 DNS 事件日誌。
+ 檢視安全事件日誌。

**使用 建立目錄 AWS Managed Microsoft AD**

1. 在 [Directory Service 主控台](https://console.aws.amazon.com/directoryservicev2/)中，依序選擇 **Directories (目錄)** 和 **Set up directory (設定目錄)**。

1. 選擇 **AWS Managed Microsoft AD**。這是目前支援與 Amazon RDS 搭配使用的唯一選項。

1. 選擇**下一步**。

1. 在 **Enter directory information (輸入目錄資訊)** 頁面上，提供下列資訊：  
**版本**  
 選擇滿足您需求的版本。  
**目錄 DNS 名稱**  
目錄的完全合格名稱，例如 `corp.example.com`。SQL Server 不支援超過 47 個字元的名稱。  
**目錄 NetBIOS 名稱**  
目錄的簡短名稱，例如：`CORP`。  
**目錄描述**  
選擇填寫其他目錄說明。  
**管理員密碼**  
目錄管理員的密碼。目錄建立程序會建立含有使用者名稱 Admin 與這組密碼的管理員帳戶。  
目錄管理員密碼不得包含 `admin` 一字。密碼區分大小寫，長度須為 8 至 64 個字元。至少須有一位字元屬於以下四種類型中的三類：  
   + 小寫字母 (a-z)
   + 大寫字母 (A-Z)
   + 數字 (0-9)
   + 非英數字元 (\$1\$1@\$1\$1%^&\$1\$1-\$1=`\$1\$1()\$1\$1[]:;"'<>,.?/)   
**Confirm password (確認密碼)**  
重新輸入管理員密碼。

1. 選擇**下一步**。

1. 在 **Choose VPC and subnets (選擇 VPC 和子網路)** 頁面上，提供下列資訊：  
**VPC**  
選擇目錄的 VPC。  
您可以在不同 VPC 中尋找目錄和資料庫執行個體，但如果您這麼做，請務必啟用跨 VPC 流量。如需更多詳細資訊，請參閱 [步驟 4：啟用目錄和資料庫執行個體之間的跨 VPC 流量](#USER_SQLServerWinAuth.SettingUp.VPC-Peering)。  
**子網路**  
選擇目錄伺服器的子網路。這兩個子網路必須位於不同的可用區域。

1. 選擇 **Next (下一步)**。

1. 檢閱目錄資訊。如果需要變更，請選擇 **Previous (上一步)**。若資訊無誤，請選擇 **Create directory (建立目錄)**。  
![\[檢閱和建立頁面\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/WinAuth2.png)

建立目錄需要幾分鐘的時間。成功建立時，**Status (狀態)** 值會變更為 **Active (作用中)**。

若要查看目錄的資訊，請選擇目錄清單中的目錄 ID。請記下 **Directory ID (目錄 ID)**。建立或修改 SQL Server 資料庫執行個體時需要此值。

![\[目錄詳細資訊頁面\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/WinAuth3.png)


## 步驟 2：建立供 Amazon RDS 使用的 IAM 角色
<a name="USER_SQLServerWinAuth.SettingUp.CreateIAMRole"></a>

如果您使用主控台來建立您的 SQL Server 資料庫執行個體，則可以略過此步驟。如果您使用 &CLI; 或 &RDS; API 來建立您的 SQL Server 資料庫執行個體，您必須建立使用受管 IAM 政策 `AmazonRDSDirectoryServiceAccess` 的 IAM 角色。此角色允許 Amazon RDS Directory Service 為您呼叫 。

如果您使用自訂政策來加入網域，而不是使用 AWS受管`AmazonRDSDirectoryServiceAccess`政策，請確定您允許 `ds:GetAuthorizedApplicationDetails`動作。由於 Directory Service API 的變更，此要求自 2019 年 7 月起生效。

以下 IAM 政策 (`AmazonRDSDirectoryServiceAccess`) 會提供對 Directory Service的存取。

**Example 提供 存取權的 IAM 政策 Directory Service**    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
            "ds:DescribeDirectories", 
            "ds:AuthorizeApplication", 
            "ds:UnauthorizeApplication",
            "ds:GetAuthorizedApplicationDetails"
        ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
```

建議您在資源型信任關係中使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全域條件內容金鑰，將服務的許可限定於特定資來源。這是防止[混淆代理人問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)最有效的方式。

您可以同時使用全域條件內容索引鍵和包含帳號 ID 的 `aws:SourceArn` 值。在此情況下，當在相同陳述式中使用 `aws:SourceAccount` 值和 `aws:SourceArn` 裡的帳户時，兩者必須使用同樣的帳户 ID。
+ 如果您想要跨服務存取單一資源，請使用 `aws:SourceArn`。
+ 如果您想要允許該帳戶中的任何資源與跨服務使用相關聯，請使用 `aws:SourceAccount`。

在信任關係中，請務必使用 `aws:SourceArn` 全域條件內容索引鍵，其中包含存取角色的資源之完整 Amazon 資源名稱 (ARN)。為使用 Windows Authentication，請務必包含資料庫執行個體，如下列範例所示。

**Example 與 Windows Authentication 全域條件內容索引鍵的信任關係**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "rds.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": [
                        "arn:aws:rds:Region:my_account_ID:db:db_instance_identifier"
                    ]
                }
            }
        }
    ]
}
```

使用此 IAM 政策和信任關係建立 IAM 角色。如需建立 IAM 角色的詳細資訊，請參閱《IAM 使用者指南》**中的[建立客戶受管原則](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#create-managed-policy-console)。

## 步驟 3：建立和設定使用者和群組
<a name="USER_SQLServerWinAuth.SettingUp.CreateUsers"></a>

您可以使用 Active Directory 使用者和運算集區來建立使用者及群組。這個工具是 Active Directory Domain Services 和 Active Directory 輕量型目錄服務工具之一。使用者代表具有目錄存取權的個人或實體。群組非常適合對使用者群組授予或拒絕權限，而無需將這些權限逐一套用到各個使用者。

若要在 Directory Service 目錄中建立使用者和群組，您必須連線到屬於 Directory Service 目錄成員的 Windows EC2 執行個體。您也必須以具有建立使用者及群組之許可的使用者身分來登入。如需詳細資訊，請參閱《 *AWS Directory Service 管理指南*》中的[新增使用者和群組 （簡單 AD 和 AWS Managed Microsoft AD)](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/creating_ad_users_and_groups.html)。

## 步驟 4：啟用目錄和資料庫執行個體之間的跨 VPC 流量
<a name="USER_SQLServerWinAuth.SettingUp.VPC-Peering"></a>

如果您打算在相同 VPC 中尋找目錄和資料庫執行個體，請略過本步驟，並移至[步驟 5：建立或修改 SQL Server 資料庫執行個體](#USER_SQLServerWinAuth.SettingUp.CreateModify)。

如果您打算在不同 VPC 中尋找目錄和資料庫執行個體，請使用 VPC 互連或 [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html) 來設定跨 VPC 流量。

下列程序會使用 VPC 互連來啟用 VPC 之間的流量。請遵循《Amazon Virtual Private Cloud 互連指南》**中[什麼是 VPC 互連？](https://docs.aws.amazon.com/vpc/latest/peering/Welcome.html)的指示。

**使用 VPC 互連以啟用跨 VPC 流量**

1. 設定適當的 VPC 路由規則，以確保網路流量可以雙向對流。

1. 確保資料庫執行個體安全群組可以從目錄的安全群組接收傳入流量。

1. 確保沒有網路存取控制清單 (ACL) 規則來封鎖流量。

如果不同的 AWS 帳戶擁有該目錄，您必須共用該目錄。

**在 AWS 帳戶之間共用目錄**

1. 遵循《 *Directory Service 管理指南*》中的[教學課程：共用目錄 AWS Managed Microsoft AD 以實現無縫 EC2 網域加入](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_tutorial_directory_sharing.html)中的指示 AWS ，開始與將在其中建立資料庫執行個體的帳戶共用目錄。

1. 使用資料庫執行個體的帳戶登入 Directory Service 主控台，並確保網域具有 `SHARED` 狀態，然後再繼續。

1. 使用資料庫執行個體的帳戶登入 Directory Service 主控台時，請注意**目錄 ID** 值。您可以使用此目錄 ID，將資料庫執行個體加入網域。

## 步驟 5：建立或修改 SQL Server 資料庫執行個體
<a name="USER_SQLServerWinAuth.SettingUp.CreateModify"></a>

建立或修改要搭配您目錄使用的 SQL Server 資料庫執行個體。您可以使用主控台、CLI 或 RDS API，將資料庫執行個體與目錄建立關聯。您可採用下列其中一種方式來這麼做：
+ 使用主控台、[create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) CLI 命令，或 [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) RDS API 操作，建立新的 SQL Server 資料庫執行個體。

  如需說明，請參閱「[建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)」。
+ 使用主控台、[modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) CLI 命令，或 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) RDS API 操作，修改現有的 SQL Server 資料庫執行個體。

  如需說明，請參閱「[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)」。
+ 使用主控台、[restore-db-instance-from-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html) CLI 命令，或 [RestoreDBInstanceFromDBSnapshot](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html) RDS API 操作，從資料庫快照還原 SQL Server 資料庫執行個體。

  如需說明，請參閱「[還原至資料庫執行個體](USER_RestoreFromSnapshot.md)」。
+ 使用主控台、[restore-db-instance-to-point-in-time](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html) CLI 命令，或 [RestoreDBInstanceToPointInTime](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html) RDS API 操作，將 SQL Server 資料庫執行個體還原至某個時間點。

  如需說明，請參閱「[將 Amazon RDS 的資料庫執行個體還原至指定時間](USER_PIT.md)」。

 Windows 身分驗證只支援 VPC 中的 Server 資料庫執行個體。

 若要讓資料庫執行個體使用您建立的網域目錄，需要下列項目：
+  對於 **Directory (目錄)**，您必須選擇在建立目錄時產生的網域識別碼 (`d-ID`)。
+  確定 VPC 安全群組具有可讓資料庫執行個體與目錄通訊的輸出規則。

![\[Microsoft SQL Server Windows 身分驗證目錄\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/WinAuth1.png)


當您使用 時 AWS CLI，資料庫執行個體需要下列參數，才能使用您建立的目錄：
+ 針對 `--domain` 參數，使用您建立目錄時產生的網域識別符 (`d-ID`)。
+ 針對 `--domain-iam-role-name` 參數，使用您建立的規則，其會使用受管 IAM 政策 `AmazonRDSDirectoryServiceAccess`。

例如，下列 CLI 命令會修改資料庫執行個體來使用目錄。

針對 Linux、macOS 或 Unix：

```
aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --domain d-ID \
    --domain-iam-role-name role-name
```

在 Windows 中：

```
aws rds modify-db-instance ^
    --db-instance-identifier mydbinstance ^
    --domain d-ID ^
    --domain-iam-role-name role-name
```

**重要**  
如果您修改資料庫執行個體，以啟用 Kerberos 身分驗證，請在進行變更後重新啟動資料庫執行個體。

## 步驟 6：建立 Windows 身分驗證 SQL Server 登入
<a name="USER_SQLServerWinAuth.CreateLogins"></a>

如同對其他資料庫執行個體一般，使用 Amazon RDS 主要使用者登入資料來連接至 SQL Server 資料庫執行個體。由於資料庫執行個體已加入 AWS Managed Microsoft AD 網域，因此您可以佈建 SQL Server 登入和使用者。您可以從網域中的 Active Directory 使用者和群組執行這項操作。您可透過對這些 Windows 登入授予和撤銷的標準 SQL Server 許可來管理資料庫許可。

若要讓 Active Directory 使用者向 SQL Server 進行身分驗證，必須存在使用者或使用者為其成員之群組的 SQL Server Windows 登入。精細定義的存取控制是透過授予和撤銷這些 SQL Server 登入的許可來處理。沒有 SQL Server 登入或屬於具有此類登入的群組的使用者無法存取 SQL Server 資料庫執行個體。

需要 ALTER ANY LOGIN 許可，才能建立 Active Directory SQL Server 登入。如果您尚未使用此許可建立任何登入，請使用 SQL Server 身分驗證，以資料庫執行個體的主要使用者身分連線。

執行資料定義語言 (DDL) 命令來為 Active Directory 使用者或群組建立 SQL Server 登入，如下列範例。

**注意**  
使用 Windows 2000 前版的登入名稱，以格式 `domainName\login_name` 來指定使用者和群組。您無法使用格式為 *`login_name`*`@`*`DomainName`* 的使用者原則名稱 (UPN)。  
您只能使用 T-SQL 陳述式在 RDS for SQL Server 執行個體上建立 Windows 身分驗證登入。您無法使用 SQL Server Management Studio 建立 Windows 身分驗證登入。

```
USE [master]
GO
CREATE LOGIN [mydomain\myuser] FROM WINDOWS WITH DEFAULT_DATABASE = [master], DEFAULT_LANGUAGE = [us_english];
GO
```

如需詳細資訊，請參閱 Microsoft 開發人員網路文件中的[ 建立登入 (Transact-SQL)](https://msdn.microsoft.com/en-us/library/ms189751.aspx)。

來自您網域的使用者 (人員和應用程式兩者)，現在可以使用 Windows 身分驗證從加入網域的用戶端機器連接至 RDS for SQL Server 執行個體。

# 管理網域中的資料庫執行個體
<a name="USER_SQLServerWinAuth.Managing"></a>

 您可以使用 主控台 AWS CLI或 Amazon RDS API 來管理資料庫執行個體及其與網域的關係。例如，您可以將資料庫執行個體移入、移出或移至網域之間。

 例如，使用 Amazon RDS API，您可以執行下列動作：
+  若要對失敗的成員資格重新嘗試加入網域，請使用 [ModifyDBInstance API](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) 操作，並指定目前成員資格的目錄 ID。
+  如要更新成員資格的 IAM 角色名稱，請使用 `ModifyDBInstance` API 操作並指定目前成員資格的目錄 ID，以及新的 IAM 角色。
+  若要從網域移除資料庫執行個體，請使用 `ModifyDBInstance` API 操作，並指定 `none` 做為網域參數。
+  如要在網域之間移動資料庫執行個體，請使用 `ModifyDBInstance` API 操作，並指定新網域的網域識別符做為網域參數。
+  若要列出每個資料庫執行個體的成員資格，請使用 [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/DescribeDBInstances.html) API 操作。

## 了解網域成員資格
<a name="USER_SQLServerWinAuth.Understanding"></a>

 在您建立或修改資料庫執行個體之後，執行個體會成為網域的成員。 AWS 主控台會指出資料庫執行個體的網域成員資格狀態。資料庫執行個體的狀態可以是下列其中一個：
+  **已加入** – 執行個體是網域的成員。
+  **加入中** – 執行個體正處於成為網域成員的程序中。
+  **加入待定** – 執行個體成員資格待定。
+  **pending-maintenance-join** – AWS 會在下一個排定的維護時段嘗試讓執行個體成為網域的成員。
+  **移除待定** – 從網域移除執行個體待定。
+  **pending-maintenance-removal** – AWS 將在下一個排定的維護時段嘗試從網域移除執行個體。
+  **失敗** – 組態問題讓執行個體無法加入網域。請在重新發出執行個體修改命令之前檢查並修正您的組態。
+  **移除中** – 正在從網域移除執行個體。

因為網路連線問題或 IAM 角色不正確，成為網域成員的請求可能失敗。例如，您可以建立一個資料庫執行個體或修改現有執行個體，並嘗試讓資料庫執行個體失敗，以便成為網域的成員。在此情況下，請重新發出命令以建立或修改資料庫執行個體，或修改新建立的執行個體以加入網域。

# 使用 Windows 身分驗證連線至 SQL Server
<a name="USER_SQLServerWinAuth.Connecting"></a>

若要使用 Windows 身分驗證連線至 SQL Server，您必須以網域使用者的身分登入到加入網域的電腦。啟動 SQL Server Management Studio 之後，選擇 **Windows 身分驗證**做為身分驗證類型，如下所示。

![\[使用 Windows 身分驗證連線至 SQL Server\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/WinAuth4.png)


## 還原 SQL Server 資料庫執行個體，並將其新增至網域
<a name="USER_SQLServerWinAuth.Restore"></a>

您可以還原資料庫快照或為 SQL Server 資料庫執行個體執行 point-in-time 恢復 (PITR)，然後將其新增至網域。一旦還原資料庫執行個體，請使用 [步驟 5：建立或修改 SQL Server 資料庫執行個體](USER_SQLServerWinAuth.SettingUp.md#USER_SQLServerWinAuth.SettingUp.CreateModify) 中的說明程序來修改執行個體，以將資料庫執行個體新增至網域。

# Microsoft SQL Server 資料庫引擎的升級
<a name="USER_UpgradeDBInstance.SQLServer"></a>

當 Amazon RDS 支援新版本的資料庫引擎時，您可以將資料庫執行個體升級為新版本。SQL Server 資料庫執行個體有兩種升級︰主要版本升級和次要版本升級。

*主要版本升級* 可能包含與現有應用程式回溯不相容的資料庫變更。因此，您必須*手動*執行資料庫執行個體的主要版本升級。您可以修改資料庫執行個體，啟動主要版本升級。然而，在您執行主要的版本升級之前，建議您遵循[測試 RDS for SQL Server 升級](USER_UpgradeDBInstance.SQLServer.UpgradeTesting.md)中描述的步驟來測試升級。

*次要版本升級*僅包含與現有應用程式回溯相容的變更。您可以透過兩種方式升級資料庫執行個體的次要版本：
+ *手動* – 修改資料庫執行個體以起始升級
+ *自動* – 為您的資料庫執行個體啟用自動次要版本升級

啟用自動次要版本升級時，RDS for SQL Server 會在較新的次要版本有可用的重大安全性更新時，在排程的維護時段內自動升級您的資料庫執行個體。

對於 `16.00.4120.1`、`15.00.4365.2`、`14.00.3465.1`、`13.00.6435.1` 之後的次要引擎版本，依預設會停用下列安全通訊協定：
+ `rds.tls10` (TLS 1.0 通訊協定)
+ `rds.tls11` (TLS 1.1 通訊協定)
+ `rds.rc4` (RC4 通訊協定)
+ `rds.curve25519` (Curve25519 通訊協定)
+ `rds.3des168` (三重 DES 加密)

對於較早的引擎版本，Amazon RDS 依預設會啟用這些安全通訊協定。

```
...

"ValidUpgradeTarget": [
    {
        "Engine": "sqlserver-se",
        "EngineVersion": "14.00.3281.6.v1",
        "Description": "SQL Server 2017 14.00.3281.6.v1",
        "AutoUpgrade": false,
        "IsMajorVersionUpgrade": false
    }
...
```

如需執行升級的詳細資訊，請參閱[升級 SQL Server 資料庫執行個體](#USER_UpgradeDBInstance.SQLServer.Upgrading)。如需 Amazon RDS 上提供的 SQL Server 版本相關資訊，請參閱 [Amazon RDS for Microsoft SQL Server](CHAP_SQLServer.md)。

Amazon RDS 也支援升級推展政策，以管理跨多個資料庫資源和 的自動次要版本升級 AWS 帳戶。如需詳細資訊，請參閱[使用 AWS Organizations 升級推展政策進行自動次要版本升級](RDS.Maintenance.AMVU.UpgradeRollout.md)。

**Topics**
+ [RDS for SQL Server 的主要版本升級](USER_UpgradeDBInstance.SQLServer.Major.md)
+ [SQL Server 升級考量](USER_UpgradeDBInstance.SQLServer.Considerations.md)
+ [測試 RDS for SQL Server 升級](USER_UpgradeDBInstance.SQLServer.UpgradeTesting.md)
+ [升級 SQL Server 資料庫執行個體](#USER_UpgradeDBInstance.SQLServer.Upgrading)
+ [在支援結束之前升級已取代的資料庫執行個體](#USER_UpgradeDBInstance.SQLServer.DeprecatedVersions)

# RDS for SQL Server 的主要版本升級
<a name="USER_UpgradeDBInstance.SQLServer.Major"></a>

Amazon RDS 目前支援透過以下的主要版本升級升級為 Microsoft SQL Server 資料庫執行個體。

除了 SQL Server 2008 之外，您可以將任意版本的現有資料庫執行個體升級至 SQL Server 2017 或 2019。若要升級 SQL Server 2008 的資料庫執行個體，請先將其升級為其他版本。


****  

| 目前版本 | 支援的升級版本 | 
| --- | --- | 
|  SQL Server 2019  |  SQL Server 2022  | 
|  SQL Server 2017  |  SQL Server 2022 SQL Server 2019  | 
|  SQL Server 2016  |  SQL Server 2022 SQL Server 2019 SQL Server 2017  | 

您可以使用 AWS CLI 查詢，例如下列範例，以尋找特定資料庫引擎版本可用的升級。

**Example**  
針對 Linux、macOS 或 Unix：  

```
aws rds describe-db-engine-versions \
    --engine sqlserver-se \
    --engine-version 14.00.3281.6.v1 \
    --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" \
    --output table
```
針對 Windows：  

```
aws rds describe-db-engine-versions ^
    --engine sqlserver-se ^
    --engine-version 14.00.3281.6.v1 ^
    --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" ^
    --output table
```
輸出顯示您可以將 14.00.3281.6 版本升級至最新可用的 SQL Server 2017 或 2019 版本。  

```
--------------------------
|DescribeDBEngineVersions|
+------------------------+
|      EngineVersion     |
+------------------------+
|  14.00.3294.2.v1       |
|  14.00.3356.20.v1      |
|  14.00.3381.3.v1       |
|  14.00.3401.7.v1       | 
|  14.00.3421.10.v1      |
|  14.00.3451.2.v1       |
|  15.00.4043.16.v1      |
|  15.00.4073.23.v1      |
|  15.00.4153.1.v1       |
|  15.00.4198.2.v1       |
|  15.00.4236.7.v1       |
+------------------------+
```

## 資料庫相容性等級
<a name="USER_UpgradeDBInstance.SQLServer.Major.Compatibility"></a>

您可以使用 Microsoft SQL Server 資料庫相容性等級來調整某些資料庫行為，以模仿舊版的 SQL Server。如需詳細資訊，請參閱 Microsoft 文件中的[相容性等級](https://msdn.microsoft.com/en-us/library/bb510680.aspx)。升級資料庫執行個體時，所有現有的資料庫都會保持其原來的相容性等級。

您可以使用 ALTER DATABASE 命令來變更資料庫的相容性等級。例如，若要將名為 `customeracct` 的資料庫變更為與 SQL Server 2016 相容，可使用下列命令：

```
1. ALTER DATABASE customeracct SET COMPATIBILITY_LEVEL = 130
```

# SQL Server 升級考量
<a name="USER_UpgradeDBInstance.SQLServer.Considerations"></a>

Amazon RDS 在升級程序中會建立兩個資料庫快照。第一個資料庫快照是完成任何升級變更之前的資料庫執行個體。升級完成後會建立第二個資料庫快照。

**注意**  
只在您將資料庫執行個體的備份保留期設為大於 0 的數字時，Amazon RDS 才會建立資料庫快照。若要變更備份保留期，請參閱[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

升級完成之後，您就無法回復至前一版的資料庫引擎。若您想要恢復前一版本，請從升級前建立的資料庫快照進行還原，以建立新的資料庫執行個體。

在 SQL Server 的次要或主要版本升級期間，**Free Storage Space (可用儲存空間)** 和 **Disk Queue Depth (磁碟佇列深度)** 指標會顯示 `-1`。升級完成後，兩個指標都會恢復正常。

升級 SQL Server 執行個體前，請先檢閱下列資訊。

**Topics**
+ [起始升級前的最佳實務](#USER_UpgradeDBInstance.SQLServer.BestPractices)
+ [異地同步備份考量](#USER_UpgradeDBInstance.SQLServer.MAZ)
+ [僅供讀取複本考量](#USER_UpgradeDBInstance.SQLServer.readreplica)
+ [選項群組考量](#USER_UpgradeDBInstance.SQLServer.OGPG.OG)
+ [參數群組考量](#USER_UpgradeDBInstance.SQLServer.OGPG.PG)

## 起始升級前的最佳實務
<a name="USER_UpgradeDBInstance.SQLServer.BestPractices"></a>

開始進行升級程序前，請先實作下列準備步驟，以達成最佳升級效能，並盡可能減少潛在問題：

時間和工作負載管理  
+ 將升級排程在低交易量期間。
+ 盡可能減少升級時段期間的寫入操作。
這樣可以減少 RDS 在「主要-次要」配對期間所需還原的交易日誌備份檔案數量，而讓 Amazon RDS 更快完成升級。

交易管理  
+ 識別和監控長時間執行的交易。
+ 開始升級之前，請確定所有重要交易都已提交。
+ 避免升級時段期間的長時間執行交易。

日誌檔案最佳化  
檢閱和最佳化交易日誌檔案：  
+ 縮減過大的日誌檔案。
+ 減少高日誌耗用模式。
+ 管理虛擬日誌檔案 (VLF)。
+ 維持足夠的可用空間供一般操作使用。

## 異地同步備份考量
<a name="USER_UpgradeDBInstance.SQLServer.MAZ"></a>

Amazon RDS 會透過使用 SQL Server Database Mirroring (DBM) 或 Always On 可用性群組 (AG)，支援在執行 Microsoft SQL Server 的資料庫執行個體上進行異地同步備份部署。如需詳細資訊，請參閱[Amazon RDS for Microsoft SQL Server 的異地同步備份部署](USER_SQLServerMultiAZ.md)。

在多可用區域部署 (鏡像/AlwaysOn) 中，RDS 在應要求升級時，將會遵循主要和次要執行個體的滾動升級策略。滾動升級可確保在次要執行個體升級時，至少有一個執行個體可供交易使用。中斷應該只會在容錯移轉期間發生。

在升級期間，RDS 會從多可用區域組態中移除次要執行個體、執行次要執行個體的升級，以及從主要執行個體還原在中斷連線期間進行的任何交易日誌備份。所有日誌備份都還原後，RDS 會將升級的次要執行個體加入主要執行個體。當所有資料庫都處於同步狀態時，RDS 會容錯移轉至升級的次要執行個體。容錯移轉完成後，RDS 會繼續升級舊的主要執行個體、還原任何交易日誌備份，並將其與新的主要執行個體配對。

為了盡可能縮短此容錯移轉持續時間，建議您在使用的用戶端程式庫支援連接字串中的 `MultiSubnetFailover` 連線選項時，使用 AlwaysOn AG 可用性群組接聽程式端點。使用可用性群組接聽程式端點時，容錯移轉時間通常少於 10 秒，不過，此持續時間不包含任何額外的損毀復原時間。

## 僅供讀取複本考量
<a name="USER_UpgradeDBInstance.SQLServer.readreplica"></a>

在資料庫版本升級期間，Amazon RDS 也會升級所有僅供讀取複本以及主要資料庫執行個體。Amazon RDS 不支援個別僅供讀取複本上的資料庫版本升級。如需僅供讀取複本的詳細資訊，請參閱 [使用 Amazon RDS 中的 Microsoft SQL Server 的僅供讀取複本](SQLServer.ReadReplicas.md)。

升級主要資料庫執行個體的資料庫版本時，也會自動升級所有僅供讀取複本。Amazon RDS 在升級主要資料庫執行個體之前，會先同時升級所有僅供讀取複本。在主要資料庫執行個體上的資料庫版本升級完成之前，僅供讀取複本可能無法使用。

## 選項群組考量
<a name="USER_UpgradeDBInstance.SQLServer.OGPG.OG"></a>

如果您的資料庫執行個體使用自訂資料庫選項群組，在某些狀況下，Amazon RDS 無法自動為資料庫執行個體指派新的選項群組。例如，升級至新的主要版本時，您必須指定新的選項群組。建議您建立新的選項群組，並在其中新增和現有自訂選項群組中相同的選項。

如需詳細資訊，請參閱「[建立選項群組](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)」或「[刪除選項群組](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Copy)」。

## 參數群組考量
<a name="USER_UpgradeDBInstance.SQLServer.OGPG.PG"></a>

若您的資料庫執行個體使用自訂的資料庫參數群組：
+ Amazon RDS 會在升級後自動重新啟動資料庫執行個體。
+ 在某些狀況下，RDS 無法將新的參數群組自動指派至您的資料庫執行個體。

  例如，升級至新的主要版本時，您必須指定新的參數群組。建議您建立新的參數群組，並在其中設定和現有自訂參數群組中相同的參數。

如需詳細資訊，請參閱「[在 Amazon RDS 中建立資料庫參數群組](USER_WorkingWithParamGroups.Creating.md)」或「[在 Amazon RDS 中複製資料庫參數群組](USER_WorkingWithParamGroups.Copying.md)」。

# 測試 RDS for SQL Server 升級
<a name="USER_UpgradeDBInstance.SQLServer.UpgradeTesting"></a>

對資料庫執行個體進行主要版本升級之前，請完整測試資料庫，以及會存取該資料庫的所有應用程式，了解是否與新版本相容。建議您採用下列程序。

**測試主要版本升級**

1. 針對新版本的資料庫引擎，檢閱 Microsoft 文件中的[升級 SQL Server](https://docs.microsoft.com/en-us/sql/database-engine/install-windows/upgrade-sql-server)，了解是否有可能影響資料庫或應用程式的相容性問題。

1. 如果您的資料庫執行個體使用自訂選項群組，請建立與升級後新版本相容的新選項群組。如需更多詳細資訊，請參閱 [選項群組考量](USER_UpgradeDBInstance.SQLServer.Considerations.md#USER_UpgradeDBInstance.SQLServer.OGPG.OG)。

1. 如果您的資料庫執行個體使用自訂參數群組，請建立與升級後新版本相容的新參數群組。如需更多詳細資訊，請參閱 [參數群組考量](USER_UpgradeDBInstance.SQLServer.Considerations.md#USER_UpgradeDBInstance.SQLServer.OGPG.PG)。

1. 針對要升級的資料庫執行個體建立資料庫快照。如需詳細資訊，請參閱 [為 Amazon RDS 的單一可用區域資料庫執行個體建立資料庫快照](USER_CreateSnapshot.md)。

1. 還原資料庫快照，以建立新的測試資料庫執行個體。如需更多詳細資訊，請參閱 [還原至資料庫執行個體](USER_RestoreFromSnapshot.md)。

1. 使用下列其中一種方法，修改這個新的測試資料庫執行個體，以升級到新版本：
   + [主控台](USER_UpgradeDBInstance.Upgrading.md#USER_UpgradeDBInstance.Upgrading.Manual.Console)
   + [AWS CLI](USER_UpgradeDBInstance.Upgrading.md#USER_UpgradeDBInstance.Upgrading.Manual.CLI)
   + [RDS API](USER_UpgradeDBInstance.Upgrading.md#USER_UpgradeDBInstance.Upgrading.Manual.API)

1. 評估升級的執行個體所使用的儲存體，以決定升級是否需要更多儲存體。

1. 對升級的資料庫執行個體儘可能進行越多次品質保證測試，以確保資料庫和應用程式搭配新版本可以正常運作。實作任何必要的新測試，以評估您在步驟 1 發現的任何相容性問題所帶來的影響。測試所有預存程序和函數。將應用程式的測試版本指向升級的資料庫執行個體。

1. 如果通過所有測試，就可以對生產資料庫執行個體進行升級。在確認一切都沒問題之前，建議您在資料庫執行個體上不要允許寫入操作。

## 升級 SQL Server 資料庫執行個體
<a name="USER_UpgradeDBInstance.SQLServer.Upgrading"></a>

如需有關手動或自動升級 SQL Server 資料庫執行個體的資訊，請參閱以下內容：
+ [升級資料庫執行個體 引擎版本](USER_UpgradeDBInstance.Upgrading.md)
+ [在 Amazon RDS for SQL Server 上將 SQL Server 2008 R2 升級到 SQL Server 2016 的最佳實務](https://aws.amazon.com/blogs/database/best-practices-for-upgrading-sql-server-2008-r2-to-sql-server-2016-on-amazon-rds-for-sql-server/)

**重要**  
如果您有任何使用 加密的快照 AWS KMS，建議您在支援結束之前啟動升級。

## 在支援結束之前升級已取代的資料庫執行個體
<a name="USER_UpgradeDBInstance.SQLServer.DeprecatedVersions"></a>

主要版本已取代後，您無法將其安裝在新資料庫執行個體上。RDS 將嘗試自動升級所有現有資料庫執行個體。

如果您需要還原已取代的資料庫執行個體，您可以執行 point-in-time 恢復 (PITR) 或還原快照。這可讓您暫時存取使用已廢除版本的資料庫執行個體。但是，在主要版本完全作廢後，這些資料庫執行個體也將同時自動升級到支援的版本。

# 在 RDS for SQL Server 中使用儲存
<a name="Appendix.SQLServer.CommonDBATasks.DatabaseStorage"></a>

使用 RDS for SQL Server，您最多可以將三個額外的磁碟區連接至 RDS for SQL Server 執行個體，每個磁碟區對應至唯一的 Windows 磁碟機代號。這可讓您將資料庫檔案分散到預設`D:`磁碟機以外的多個磁碟區。當您新增儲存磁碟區時，您可以獲得資料庫檔案管理和儲存最佳化的增強彈性。

優點包括：
+ **靈活的檔案分佈** – 將資料庫資料檔案和日誌檔案分佈到多個磁碟區，以提高 I/O 效能。
+ **儲存最佳化** – 針對不同的工作負載需求使用不同的儲存類型和組態。
+ **可擴展性** – 新增儲存容量而不修改現有的磁碟區。

**Topics**
+ [搭配 RDS for SQL Server 使用其他儲存磁碟區的考量事項](#SQLServer.ASV.Considerations)
+ [使用 RDS for SQL Server 新增、移除或修改儲存磁碟區](#SQLServer.ASV.Management)
+ [使用 RDS for SQL Server 還原其他儲存磁碟區的操作](#SQLServer.ASV.Restore)
+ [使用 RDS for SQL Server 的其他儲存磁碟區的使用案例](#SQLServer.ASV.UseCases)

## 搭配 RDS for SQL Server 使用其他儲存磁碟區的考量事項
<a name="SQLServer.ASV.Considerations"></a>

將其他儲存磁碟區與 RDS for SQL Server 搭配使用時，請注意下列功能和限制：
+ 您只能在 SQL Server Standard Edition (SE)、Enterprise Edition (EE) 和 Developer Edition (DEV-EE) 上新增儲存磁碟區。
+ 每個執行個體最多可以新增 3 個額外的儲存磁碟區。
+ 磁碟區名稱會自動映射至 Windows 磁碟機代號，如下所示：
  + `rdsdbdata2` – `H:`磁碟機
  + `rdsdbdata3` – `I:`磁碟機
  + `rdsdbdata4` – `J:`磁碟機
+ 使用 NVMe 執行個體儲存體時，TempDB 檔案會繼續使用`T:`磁碟機。SQL Server 稽核檔案和 Microsoft Business Intelligence (MSBI) 檔案會保留在`D:`磁碟機上。
+ 您只能新增一般用途 SSD (gp3) 和佈建 IOPS SSD (io2) 儲存類型。
+ 其他儲存磁碟區的儲存大小下限與預設`D:`磁碟機設定的限制相同。資料庫執行個體的儲存體大小上限為所有磁碟區總計 256 TiB。
+ 不支援將儲存磁碟區新增至具有僅供讀取複本的執行個體或僅供讀取複本執行個體。
+ 不支援將儲存磁碟區新增至已啟用跨區域自動備份的執行個體。
+ 不支援為儲存體自動擴展設定其他儲存磁碟區。
+ 不支援在建立後於磁碟區之間移動檔案。
+ 您無法刪除`D:`磁碟區，但您可以刪除其他儲存磁碟區，只要它們是空的即可。
+ 不支援在快照還原或point-in-time復原 (PITR) 期間修改現有磁碟區的大小。不過，您可以在還原操作期間新增新的儲存磁碟區。

## 使用 RDS for SQL Server 新增、移除或修改儲存磁碟區
<a name="SQLServer.ASV.Management"></a>

您可以使用 AWS CLI 或 來新增、修改和移除其他儲存磁碟區 AWS 管理主控台。所有操作都會搭配 `additional-storage-volumes` 參數使用 `modify-db-instance` API 操作。

**重要**  
新增或移除其他儲存磁碟區會建立備份待定動作和point-in-time還原中斷時段。此視窗會在備份工作流程完成時關閉。

**Topics**
+ [新增儲存磁碟區](#SQLServer.ASV.Adding)
+ [擴展其他儲存磁碟區](#SQLServer.ASV.Scaling)
+ [移除其他儲存磁碟區](#SQLServer.ASV.Removing)

### 新增儲存磁碟區
<a name="SQLServer.ASV.Adding"></a>

除了預設`D:`磁碟機之外，您最多可以新增三個儲存磁碟區。若要將新的儲存磁碟區新增至 RDS for SQL Server 執行個體，請使用 `modify-db-instance`命令搭配 `additional-storage-volumes` 參數。

下列範例新增了名為 的 4，000 GiB 一般用途 SSD (gp3) 磁碟區`rdsdbdata4`。

```
aws rds modify-db-instance \
  --db-instance-identifier my-sql-server-instance \
  --region us-east-1 \
  --additional-storage-volumes '[{"VolumeName":"rdsdbdata4","StorageType":"gp3","AllocatedStorage":4000}]' \
  --apply-immediately
```

### 擴展其他儲存磁碟區
<a name="SQLServer.ASV.Scaling"></a>

您可以修改額外磁碟區的儲存設定，但儲存大小除外。下列範例會修改`rdsdbdata2`磁碟區的 IOPS 設定。

```
aws rds modify-db-instance \
  --db-instance-identifier my-sql-server-instance \
  --region us-east-1 \
  --additional-storage-volumes '[{"VolumeName":"rdsdbdata2","IOPS":4000}]' \
  --apply-immediately
```

### 移除其他儲存磁碟區
<a name="SQLServer.ASV.Removing"></a>

您無法刪除磁碟`D:`區，但您可以在其他儲存磁碟區為空時將其刪除。

**警告**  
移除額外的儲存磁碟區之前，請確定磁碟區上沒有存放資料庫檔案。

下列範例會移除磁碟`rdsdbdata4`區。

```
aws rds modify-db-instance \
  --db-instance-identifier my-sql-server-instance \
  --region us-east-1 \
  --additional-storage-volumes '[{"VolumeName":"rdsdbdata4","SetForDelete":true}]' \
  --apply-immediately
```

## 使用 RDS for SQL Server 還原其他儲存磁碟區的操作
<a name="SQLServer.ASV.Restore"></a>

還原資料庫時，您可以新增儲存磁碟區。您也可以修改現有磁碟區的儲存設定。

**Topics**
+ [快照還原](#SQLServer.ASV.SnapshotRestore)
+ [時間點復原](#SQLServer.ASV.PITR)
+ [原生資料庫還原](#SQLServer.ASV.NativeRestore)

### 快照還原
<a name="SQLServer.ASV.SnapshotRestore"></a>

從快照還原時，您可以新增新的其他儲存磁碟區，或修改現有磁碟區的 IOPS、輸送量和儲存類型設定。

下列範例會從快照還原資料庫執行個體，並修改`rdsdbdata2`磁碟區的 IOPS 設定：

```
aws rds restore-db-instance-from-db-snapshot \
  --db-instance-identifier my-restored-instance \
  --db-snapshot-identifier my-snapshot \
  --region us-east-1 \
  --additional-storage-volumes '[{"VolumeName":"rdsdbdata2","IOPS":5000}]'
```

### 時間點復原
<a name="SQLServer.ASV.PITR"></a>

在point-in-time(PITR) 期間，您可以使用自訂組態新增額外的儲存磁碟區。

下列範例會執行 PITR 並新增 5，000 GiB 一般用途 SSD (gp3) 磁碟區：

```
aws rds restore-db-instance-to-point-in-time \
  --source-db-instance-identifier my-source-instance \
  --target-db-instance my-pitr-instance \
  --use-latest-restorable-time \
  --region us-east-1 \
  --additional-storage-volumes '[{"VolumeName":"rdsdbdata4","StorageType":"gp3","AllocatedStorage":5000,"IOPS":5000,"StorageThroughput":200}]'
```

### 原生資料庫還原
<a name="SQLServer.ASV.NativeRestore"></a>

您可以使用`rds_restore_database`預存程序將資料庫還原至特定的其他儲存磁碟區。兩個新參數支援磁碟區選擇：

**`data_file_volume`**  
指定資料庫資料檔案的磁碟機代號

**`log_file_volume`**  
指定資料庫日誌檔案的磁碟機代號

下列範例會還原資料庫，其中包含`H:`磁碟機上的資料檔案和`I:`磁碟機上的日誌檔案：

```
EXEC msdb.dbo.rds_restore_database    
    @restore_db_name='my_database',
    @s3_arn_to_restore_from='arn:aws:s3:::my-bucket/backup-file.bak',
    @data_file_volume='H:',
    @log_file_volume='I:';
```

如果您未指定磁碟區參數，或同時為兩個參數指定`D:`磁碟機，則資料庫檔案會還原至預設`D:`磁碟機：

```
EXEC msdb.dbo.rds_restore_database    
    @restore_db_name='my_database',
    @s3_arn_to_restore_from='arn:aws:s3:::my-bucket/backup-file.bak';
```

## 使用 RDS for SQL Server 的其他儲存磁碟區的使用案例
<a name="SQLServer.ASV.UseCases"></a>

其他儲存磁碟區支援各種資料庫管理案例。下列各節說明常見的使用案例和實作方法。

**Topics**
+ [在其他儲存磁碟區上建立資料庫](#SQLServer.ASV.NewDatabase)
+ [擴充儲存容量](#SQLServer.ASV.ExtendStorage)
+ [在磁碟區之間移動資料庫](#SQLServer.ASV.MoveDatabase)
+ [將資料存檔到經濟實惠的儲存體](#SQLServer.ASV.ArchiveData)

### 在其他儲存磁碟區上建立資料庫
<a name="SQLServer.ASV.NewDatabase"></a>

您可以使用標準 SQL Server `CREATE DATABASE`陳述式，直接在其他儲存磁碟區上建立新的資料庫。

下列範例會建立資料庫，其中包含`H:`磁碟機上的資料檔案和`I:`磁碟機上的日誌檔案：

```
CREATE DATABASE MyDatabase
ON (
    NAME = 'MyDatabase_Data',
    FILENAME = 'H:\rdsdbdata\data\MyDatabase_Data.mdf',
    SIZE = 100MB,
    FILEGROWTH = 10MB
)
LOG ON (
    NAME = 'MyDatabase_Log',
    FILENAME = 'I:\rdsdbdata\data\MyDatabase_Log.ldf',
    SIZE = 10MB,
    FILEGROWTH = 10%
);
```

### 擴充儲存容量
<a name="SQLServer.ASV.ExtendStorage"></a>

當預設`D:`磁碟機達到容量上限時，您可以新增額外的儲存磁碟區、擴展現有磁碟區，以及在新的磁碟區上建立新的資料檔案或日誌檔案。

**擴充儲存容量**

1. 使用 `modify-db-instance`命令將儲存磁碟區新增至執行個體。

1. 將新的資料檔案新增至額外的儲存磁碟區：

   ```
   ALTER DATABASE MyDatabase
   ADD FILE (
       NAME = 'MyDatabase_Data2',
       FILENAME = 'H:\rdsdbdata\data\MyDatabase_Data2.ndf',
       SIZE = 500MB,
       FILEGROWTH = 50MB
   );
   ```

### 在磁碟區之間移動資料庫
<a name="SQLServer.ASV.MoveDatabase"></a>

若要將資料庫移至不同的磁碟區，請使用 備份和還原方法搭配 `rds_backup_database`和 `rds_restore_database`預存程序。如需詳細資訊，請參閱[使用原生備份與還原](SQLServer.Procedural.Importing.Native.Using.md)。

**將資料庫移至不同的磁碟區**

1. 使用 備份資料庫`rds_backup_database`：

   ```
   EXEC msdb.dbo.rds_backup_database 
       @source_db_name='MyDatabase',
       @s3_arn_to_backup_to='arn:aws:s3:::my-bucket/database-backup.bak';
   ```

1. 將資料庫還原至目標磁碟區：

   ```
   EXEC msdb.dbo.rds_restore_database    
       @restore_db_name='MyDatabase_New',
       @s3_arn_to_restore_from='arn:aws:s3:::my-bucket/database-backup.bak',
       @data_file_volume='H:',
       @log_file_volume='I:';
   ```

1. 從舊磁碟機捨棄資料庫以釋放空間。如需詳細資訊，請參閱[在 Amazon RDS for Microsoft SQL Server 資料庫執行個體中捨棄資料庫](Appendix.SQLServer.CommonDBATasks.DropMirrorDB.md)。

### 將資料存檔到經濟實惠的儲存體
<a name="SQLServer.ASV.ArchiveData"></a>

對於分割資料表，您可以將較舊的資料封存至具有不同效能特性的其他儲存磁碟區。

**封存分割的資料**

1. 新增具有適當儲存類型和容量的儲存磁碟區。

1. 在額外的儲存磁碟區上建立新的檔案群組：

   ```
   ALTER DATABASE MyDatabase
   ADD FILEGROUP ArchiveFileGroup;
   
   ALTER DATABASE MyDatabase
   ADD FILE (
       NAME = 'Archive_Data',
       FILENAME = 'H:\rdsdbdata\data\Archive_Data.ndf',
       SIZE = 1GB,
       FILEGROWTH = 100MB
   ) TO FILEGROUP ArchiveFileGroup;
   ```

1. 使用 SQL Server 分割區管理命令將分割區移至新的檔案群組。

# 使用原生備份和還原，匯入和匯出 SQL Server 資料庫
<a name="SQLServer.Procedural.Importing"></a>

Amazon RDS 支援使用完整備份檔案 (.bak 檔案) 進行 Microsoft SQL Server 資料庫的原生備份與還原。當您使用 RDS 時，您會存取存放在 Amazon S3 的檔案，而非使用資料庫伺服器上的本機檔案系統。

例如，您可以從本機伺服器建立完整備份，將它存放在 S3，然後還原到現有的 Amazon RDS 資料庫執行個體。您也可以從 RDS 建立備份，將備份存放在 S3，然後還原到您想要的任何地方。

原生備份和還原可在單一可用區和多可用區資料庫執行個體的所有 AWS 區域中使用，包括具有僅供讀取複本的多可用區資料庫執行個體。對於 Amazon RDS 上支援的所有 Microsoft SQL Server 版本，都可使用原生備份與還原。

下圖顯示所支援的案例。

![\[原生備份與還原架構\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/SQL-bak-file.png)


使用原生 .bak 檔案來備份和還原資料庫，通常是備份和還原資料庫最快的方法。使用原生備份與還原有許多其他優點。例如，您可以執行下列操作：
+ 往返於 Amazon RDS 來遷移資料庫。
+ 在 RDS for SQL Server 資料庫執行個體之間移動資料庫。
+ 遷移 .bak 檔案內的資料結構描述、預存程序、觸發及其他資料庫程式碼。
+ 備份和還原單一資料庫，而非整個資料庫執行個體。
+ 建立用於開發、測試、訓練和示範的資料庫副本。
+ 透過 Amazon S3 存放和傳輸備份檔案，為災難復原添加一道保護。
+ 建立透明資料加密 (TDE) 已開啟的資料庫其原生備份，並將這些備份還原至內部部署資料庫。如需詳細資訊，請參閱[支援 SQL Server 的透明資料加密](Appendix.SQLServer.Options.TDE.md)。
+ 將 TDE 已開啟的內部部署資料庫其原生備份還原至 RDS for SQL Server 資料庫執行個體。如需詳細資訊，請參閱[支援 SQL Server 的透明資料加密](Appendix.SQLServer.Options.TDE.md)。

**Contents**
+ [限制與建議](#SQLServer.Procedural.Importing.Native.Limitations)
+ [設定原生備份與還原](SQLServer.Procedural.Importing.Native.Enabling.md)
  + [手動建立原生備份與還原的 IAM 角色](SQLServer.Procedural.Importing.Native.Enabling.md#SQLServer.Procedural.Importing.Native.Enabling.IAM)
+ [使用原生備份與還原](SQLServer.Procedural.Importing.Native.Using.md)
  + [備份資料庫](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Using.Backup)
    + [Usage](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Backup.Syntax)
    + [範例](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Backup.Examples)
  + [還原資料庫](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Using.Restore)
    + [Usage](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Restore.Syntax)
    + [範例](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Restore.Examples)
  + [還原日誌](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Restore.Log)
    + [Usage](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Restore.Log.Syntax)
    + [範例](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Restore.Log.Examples)
  + [完成資料庫還原](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Finish.Restore)
    + [Usage](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Finish.Restore.Syntax)
  + [處理部分還原的資料庫](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Partially.Restored)
    + [捨棄部分還原的資料庫](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Drop.Partially.Restored)
    + [部分還原資料庫的快照還原和時間點復原行為](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Snapshot.Restore)
  + [取消任務](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Using.Cancel)
    + [Usage](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Cancel.Syntax)
  + [追蹤任務的狀態](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Tracking)
    + [Usage](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Tracking.Syntax)
    + [範例](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Tracking.Examples)
    + [回應](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Tracking.Response)
+ [壓縮備份檔案](SQLServer.Procedural.Importing.Native.Compression.md)
+ [故障診斷](SQLServer.Procedural.Importing.Native.Troubleshooting.md)
+ [使用其他方法來匯入和匯出 SQL Server 資料](SQLServer.Procedural.Importing.Snapshots.md)
  + [使用快照，將資料匯入 RDS for SQL Server](SQLServer.Procedural.Importing.Snapshots.md#SQLServer.Procedural.Importing.Procedure)
    + [匯入資料](SQLServer.Procedural.Importing.Snapshots.md#ImportData.SQLServer.Import)
      + [產生和發佈指令碼精靈](SQLServer.Procedural.Importing.Snapshots.md#ImportData.SQLServer.MgmtStudio.ScriptWizard)
      + [匯入和匯出精靈](SQLServer.Procedural.Importing.Snapshots.md#ImportData.SQLServer.MgmtStudio.ImportExportWizard)
      + [大量複製](SQLServer.Procedural.Importing.Snapshots.md#ImportData.SQLServer.MgmtStudio.BulkCopy)
  + [從 RDS for SQL Server 匯出資料](SQLServer.Procedural.Importing.Snapshots.md#SQLServer.Procedural.Exporting)
    + [SQL Server 匯入和匯出精靈](SQLServer.Procedural.Importing.Snapshots.md#SQLServer.Procedural.Exporting.SSIEW)
    + [SQL Server 產生和發佈指令碼精靈及 bcp 公用程式](SQLServer.Procedural.Importing.Snapshots.md#SQLServer.Procedural.Exporting.SSGPSW)
+ [從 Linux 使用 BCP 公用程式匯入和匯出資料](SQLServer.Procedural.Importing.BCP.Linux.md)
  + [先決條件](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Prerequisites)
  + [在 Linux 上安裝 SQL Server 命令列工具](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Installing)
  + [從 RDS for SQL Server 匯出資料](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Exporting)
    + [基本匯出語法](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Exporting.Basic)
    + [匯出範例](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Exporting.Example)
  + [將資料匯入至 RDS for SQL Server](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Importing)
    + [基本匯入語法](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Importing.Basic)
    + [匯入範例](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Importing.Example)
  + [常用 BCP 選項](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Options)
  + [最佳實務和考量](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.BestPractices)
  + [排解常見問題](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Troubleshooting)

## 限制與建議
<a name="SQLServer.Procedural.Importing.Native.Limitations"></a>

以下是使用原生備份與還原時的一些限制：
+ 您無法在與 Amazon RDS 資料庫執行個體不同的區域中備份或還原 Amazon S3 儲存貯體。 AWS 
+ 您不能還原與現有資料庫同名的資料庫。資料庫名稱是唯一的。
+ 強烈建議您不要將備份從某個時區還原至不同時區。如果您將備份從某個時區還原至不同時區，則必須稽核您的查詢及應用程式，是否受到時區變更的影響。
+ RDS for Microsoft SQL Server 的大小限制為每個檔案 5 TB。對於大型資料庫的原生備份，您可以使用多檔案備份。
+ 可備份至 S3 的資料庫大小上限取決於資料庫執行個體上可用的記憶體、CPU、I/O 和網路資源。資料庫越大，備份代理程式所耗用的記憶體就越多。
+ 您無法同時備份或是從 10 個備份檔案進行還原。
+ 差異備份是以前次完整備份為基礎。您不能在前次完整備份和差異備份之間擷取快照，差異備份才能運作。如果您要建立差異備份，但手動或自動快照存在，請先建立另一個完整備份，再繼續建立差異備份。
+ 檔案 file\$1guid (唯一識別符) 設定為 `NULL` 的資料庫不支援差異與紀錄還原。
+ 您最多可以同時執行 2 個備份或還原任務。
+ 您無法從 Amazon RDS 上的 SQL Server 執行原生日誌備份。
+ RDS 支援高達 64 TiB 的資料庫原生還原。SQL Server Express 上原生還原的資料庫不能超過 10 GB。
+ 在維護時段或每當 Amazon RDS 正在擷取資料庫的快照時，您無法進行原生備份。如果原生備份工作與 RDS 每日備份時段重疊，則會取消原生備份工作。
+ 在異地同步備份資料庫執行個體上，原本就只能還原以完整還原模式所備份的資料庫。
+ 不支援在交易內呼叫 RDS 程序來進行原生備份和還原。
+ 使用對稱加密 AWS KMS key 來加密備份。Amazon RDS 不支援非對稱 KMS 金鑰。如需詳細資訊，請參閱《*AWS Key Management Service 開發人員指南*》中的[建立對稱加密 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)。
+ 原生備份檔案是在「加密限定」加密模式下，以指定的 KMS 金鑰加密。當您還原已加密的備份檔案時，請注意它們是以「加密限定」加密模式所加密。
+ 您無法還原含有 FILESTREAM 檔案群組的資料庫。
+ 當您傳遞`@enable_bucket_default_encryption=1`至備份預存程序時，透過 S3 儲存貯體的預設加密組態支援使用 (SSE-KMS) 的 Amazon S3 伺服器端加密。 AWS KMS 根據預設，還原支援 S3 物件的伺服器端加密。

  當您將 KMS 金鑰提供給預存程序時，任何原生備份和還原都會使用 KMS 金鑰在用戶端上加密和解密。當 時`@enable_bucket_default_encryption=0`，或當 S3 儲存貯體設定的預設加密金鑰時， 會將備份 AWS 存放在具有 SSE-S3 的 S3 儲存貯體中`@enable_bucket_default_encryption=1`。
+ 使用 S3 存取點時，存取點無法設定為使用 RDS 內部 VPC。
+ 為了獲得最高效能，我們建議您在區域中可使用目錄儲存貯體或目錄儲存貯體的存取點。

在建立、複製和還原備份檔案時，如果您的資料庫可以離線，建議您使用原生備份與還原將資料庫遷移至 RDS。如果您的內部部署資料庫無法離線，建議您使用 AWS Database Migration Service 將資料庫遷移至 Amazon RDS。如需詳細資訊，請參閱[什麼是 AWS Database Migration Service？](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 

原生備份與還原並無法取代跨區域快照複製功能的資料復原能力。我們建議您使用快照複製將資料庫快照複製到另一個 AWS 區域，以便在 Amazon RDS 中進行跨區域災難復原。如需詳細資訊，請參閱[複製 Amazon RDS 的資料庫快照](USER_CopySnapshot.md)。

# 設定原生備份與還原
<a name="SQLServer.Procedural.Importing.Native.Enabling"></a>

若要設定原生備份與還原，您需要設定三個元件：

1. 用來儲存備份檔案的 Amazon S3 儲存貯體。

   您須有 S3 儲存貯體用於備份檔案，然後上傳您要遷移到 RDS 的備份。如果您已經有 Amazon S3 儲存貯體，則可直接使用。如果沒有，您可以[建立儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingaBucket.html)。或者，當您使用 `SQLSERVER_BACKUP_RESTORE` 新增 AWS 管理主控台選項時，可以選擇替您建立新的儲存貯體。

   如需有關使用 S3 的詳細資訊，請參閱 [Amazon Simple Storage Service 使用者指南](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)。

1. 存取儲存貯體的 AWS Identity and Access Management (IAM) 角色。

   如果您已經有 IAM 角色，則可直接使用。當您使用 AWS 管理主控台新增 `SQLSERVER_BACKUP_RESTORE` 選項時，可以選擇替您建立新的 IAM 角色。或者，您也可以手動建立新的。

   如果您想要手動建立新的 IAM 角色，請採取下一節所討論的方法。如果您想要將信任關係和許可政策連接到現有 IAM 角色，請執行相同的動作。

1. 在資料庫執行個體的選項群組中新增的 `SQLSERVER_BACKUP_RESTORE` 選項。

   若要在資料庫執行個體上啟用原生備份與還原，請將 `SQLSERVER_BACKUP_RESTORE` 選項新增至資料庫執行個體上的選項群組。如需詳細資訊和指示，請參閱[SQL Server 對原生備份與還原的支援](Appendix.SQLServer.Options.BackupRestore.md)。

## 手動建立原生備份與還原的 IAM 角色
<a name="SQLServer.Procedural.Importing.Native.Enabling.IAM"></a>

如果您要手動建立新的 IAM 角色，以用於原生備份和還原，您可以這麼做。在此情況下，您建立角色將 Amazon RDS 服務的許可委派給 Amazon S3 儲存貯體。當您建立 IAM 角色時，您會連接信任關係和許可政策。信任關係可讓 RDS 承擔此角色。許可政策定義此角色可執行的動作。如需有關建立角色的詳細資訊，請參閱[建立角色以委派許可給 AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

對於原生備份與還原功能，請使用類似本節範例的信任關係和許可政策。在下列範例中，我們使用服務原則名稱 `rds.amazonaws.com` 做為所有服務帳戶的別名。在其他範例中，我們指定 Amazon Resource Name (ARN)，以識別我們在信任政策中授予存取的另一個帳戶、使用者或角色。

建議您在資源型信任關係中使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全域條件內容金鑰，將服務的許可限定於特定資來源。這是防止[混淆代理人問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)最有效的方式。

您可以同時使用全域條件內容索引鍵和包含帳號 ID 的 `aws:SourceArn` 值。在此情況下，當在相同陳述式中使用 `aws:SourceAccount` 值和 `aws:SourceArn` 裡的帳户時，兩者必須使用同樣的帳户 ID。
+ 如果您想要跨服務存取單一資源，請使用 `aws:SourceArn`。
+ 如果您想要允許該帳戶中的任何資源與跨服務使用相關聯，請使用 `aws:SourceAccount`。

在信任關係中，請務必使用 `aws:SourceArn` 全域條件內容索引鍵，其中包含存取角色的資源之完整 ARN。針對原生備份與還原，請確認同時包括資料庫選項群組和資料庫執行個體，如以下範例所示。

**Example 與原生備份與還原全域條件內容索引鍵的信任關係**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "rds.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": [
                        "arn:aws:rds:Region:0123456789:db:db_instance_identifier",
                        "arn:aws:rds:Region:0123456789:og:option_group_name"
                    ],
                    "aws:SourceAccount": "0123456789"
                }
            }
        }
    ]
}
```

下列範例使用 ARN 來指定資源。如需有關使用 ARN 的詳細資訊，請參閱 [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)。

**Example 原生備份與還原的許可政策 (無加密支援)**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":
    [
        {
        "Effect": "Allow",
        "Action":
            [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
        },
        {
        "Effect": "Allow",
        "Action":
            [
                "s3:GetObjectAttributes",
                "s3:GetObject",
                "s3:PutObject",
                "s3:ListMultipartUploadParts",
                "s3:AbortMultipartUpload"
            ],
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
        }
    ]
}
```

**Example 原生備份與還原的許可政策 (有加密支援)**  
如果您要將備份檔案加密，請在許可政策中包含加密金鑰。如需加密金鑰的詳細資訊，請參閱 *AWS Key Management Service 開發人員指南*中的[入門](https://docs.aws.amazon.com/kms/latest/developerguide/getting-started.html)。  
您必須使用對稱加密 KMS 金鑰，為您的備份加密。Amazon RDS 不支援非對稱 KMS 金鑰。如需詳細資訊，請參閱《*AWS Key Management Service 開發人員指南*》中的[建立對稱加密 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)。  
IAM 角色也必須是 KMS 金鑰的金鑰使用者和金鑰管理員，也就是說，這必須在金鑰政策中指定。如需詳細資訊，請參閱《*AWS Key Management Service 開發人員指南*》中的[建立對稱加密 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)。  
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowAccessToKey",
      "Effect": "Allow",
      "Action": [
        "kms:DescribeKey",
        "kms:GenerateDataKey",
        "kms:Encrypt",
        "kms:Decrypt"
      ],
      "Resource": "arn:aws:kms:us-east-1:123456789012:key/key-id"
    },
    {
      "Sid": "AllowAccessToS3",
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation"
      ],
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
    },
    {
      "Sid": "GetS3Info",
      "Effect": "Allow",
      "Action": [
        "s3:GetObjectAttributes",
        "s3:GetObject",
        "s3:PutObject",
        "s3:ListMultipartUploadParts",
        "s3:AbortMultipartUpload"
      ],
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
    }
  ]
}
```

**Example 在沒有加密支援的情況下，使用存取點進行原生備份和還原的許可政策**  
使用 S3 存取點所需的動作與 S3 儲存貯體相同。資源路徑已更新以符合 S3 存取點 ARN 模式。  
存取點必須設定為使用**網路原始伺服器：網際網路**，因為 RDS 不會發佈私有 VPCs。來自 RDS 執行個體的 S3 流量不會經過公有網際網路，因為它會經過私有 VPCs。  
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
                ],
            "Resource": [
            "arn:aws:s3:us-east-1:111122223333:accesspoint/amzn-s3-demo-ap",
            "arn:aws:s3:::underlying-bucket"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObjectAttributes",
                "s3:GetObject",
                "s3:PutObject",
                "s3:ListMultipartUploadParts",
                "s3:AbortMultipartUpload"
                ],
                "Resource": [
                "arn:aws:s3:us-east-1:111122223333:accesspoint/amzn-s3-demo-ap/*",
                    "arn:aws:s3:::underlying-bucket/*"
                    ]
                }
            ]   
}
```

**Example 使用無加密支援的目錄儲存貯體存取點進行原生備份和還原的許可政策**  
目錄儲存貯體使用與一般用途儲存貯體不同的[工作階段型授權機制](https://docs.aws.amazon.com//AmazonS3/latest/userguide/s3-express-authenticating-authorizing.html)，因此原生備份還原的唯一必要許可是儲存貯體層級的「s3express：CreateSession」許可。若要設定物件層級存取，您必須將[存取點用於目錄儲存貯](https://docs.aws.amazon.com//AmazonS3/latest/userguide/access-points-directory-buckets-policies.html)體。  
存取點必須設定為使用**網路原始伺服器：網際網路**，因為 RDS 不會發佈私有 VPCs。來自 RDS 執行個體的 S3 流量不會經過公有網際網路，因為它會經過私有 VPCs。  
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":
    [
        {
        "Effect": "Allow",
        "Action": "s3express:CreateSession",
        "Resource": 
            [
                "arn:aws:s3express:us-east-1:111122223333:accesspoint/amzn-s3-demo-accesspoint--use1-az6--xa-s3",
                "arn:aws:s3express:us-east-1:111122223333:bucket/amzn-s3-demo-bucket--use1-az6--x-s3"
            ]
        }
    ]
}
```

# 使用原生備份與還原
<a name="SQLServer.Procedural.Importing.Native.Using"></a>

啟用並設定原生備份與還原之後，就可以開始使用此選項。您要先連接至 Microsoft SQL Server 資料庫，然後呼叫 Amazon RDS 預存程序來執行工作。如需連接資料庫的指示，請參閱[連線至 Microsoft SQL Server 資料庫執行個體](USER_ConnectToMicrosoftSQLServerInstance.md)。

您需要提供 Amazon S3 儲存貯體和檔案的 Amazon Resource Name (ARN)，才能使用某些預存程序。ARN 的格式為 `arn:aws:s3:::bucket_name/file_name.extension`。Amazon S3 不需要 ARNs中的帳戶號碼或 AWS 區域。

如果您也提供選用的 KMS 金鑰，金鑰 ARN 的格式為 `arn:aws:kms:region:account-id:key/key-id`。如需詳細資訊，請參閱 [ Amazon 資源名稱 (ARNs) AWS 和服務命名空間](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)。您必須使用對稱加密 KMS 金鑰，為您的備份加密。Amazon RDS 不支援非對稱 KMS 金鑰。如需詳細資訊，請參閱《*AWS Key Management Service 開發人員指南*》中的[建立對稱加密 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)。

**注意**  
無論您是否使用 KMS 金鑰，原生備份和還原任務預設會透過 SSE-S3 為上傳至 S3 的檔案啟用伺服器端進階加密標準 (AES) 256 位元加密。傳入`@enable_bucket_default_encryption=1`備份預存程序會使用 S3 儲存貯體設定的預設加密金鑰。

如需如何呼叫每個預存程序的相關指示，請參閱下列主題：
+ [備份資料庫](#SQLServer.Procedural.Importing.Native.Using.Backup)
+ [還原資料庫](#SQLServer.Procedural.Importing.Native.Using.Restore)
+ [還原日誌](#SQLServer.Procedural.Importing.Native.Restore.Log)
+ [完成資料庫還原](#SQLServer.Procedural.Importing.Native.Finish.Restore)
+ [處理部分還原的資料庫](#SQLServer.Procedural.Importing.Native.Partially.Restored)
+ [取消任務](#SQLServer.Procedural.Importing.Native.Using.Cancel)
+ [追蹤任務的狀態](#SQLServer.Procedural.Importing.Native.Tracking)

## 備份資料庫
<a name="SQLServer.Procedural.Importing.Native.Using.Backup"></a>

若要備份資料庫，請使用 `rds_backup_database` 預存程序。

**注意**  
在維護時段或 Amazon RDS 正在擷取快照時，您無法備份資料庫。

### Usage
<a name="SQLServer.Procedural.Importing.Native.Backup.Syntax"></a>

```
exec msdb.dbo.rds_backup_database
	@source_db_name='database_name',
	@s3_arn_to_backup_to='arn:aws:s3:::bucket_name/file_name.extension',
	[@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id'],	
	[@overwrite_s3_backup_file=0|1],
	[@block_size=512|1024|2048|4096|8192|16384|32768|65536],
        [@max_transfer_size=n],
        [@buffer_count=n],
	[@type='DIFFERENTIAL|FULL'],
	[@number_of_files=n],
	[@enable_bucket_default_encryption=0|1];
```

下列是必要參數：
+ `@source_db_name` – 要備份之資料庫的名稱。
+ `@s3_arn_to_backup_to` – ARN，指出要用於備份之目錄儲存貯體的 Amazon S3 儲存貯體、存取點、目錄儲存貯體或存取點，以及備份檔案名稱。

  檔案可以有任何副檔名，但通常使用 `.bak`。請注意，存取點 ARNs 格式必須為 `arn:aws:s3:us-east-1:111122223333:access-point-name/object/key`。

下列是選用參數：
+ `@kms_master_key_arn` – 對稱加密 KMS 金鑰的 ARN，用來加密項目。
  + 您無法使用預設的加密金鑰。如果您使用預設金鑰，資料庫將不會備份。
  +  如果您未指定 KMS 金鑰識別碼，則不會加密備份檔案。如需詳細資訊，請參閱[加密 Amazon RDS 資源](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.html)。
  + 當您指定 KMS 金鑰時，會使用用戶端加密。
  + Amazon RDS 不支援非對稱 KMS 金鑰。如需詳細資訊，請參閱《*AWS Key Management Service 開發人員指南*》中的[建立對稱加密 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)。
+ `@overwrite_s3_backup_file` – 此值指出是否覆寫現有的備份檔案。
  + `0` – 不覆寫現有檔案。此為預設值。

    將 `@overwrite_s3_backup_file` 設為 0 時，如果檔案已存在，則傳回錯誤。
  + `1` – 即使現有檔案不是備份檔案，只要是指定的名稱，就覆寫檔案。
+ `@type` – 備份的類型。
  + `DIFFERENTIAL` – 建立差異備份。
  + `FULL` – 建立完整備份。此為預設值。

  差異備份是以前次完整備份為基礎。您不能在前次完整備份和差異備份之間擷取快照，差異備份才能運作。如果您要建立差異備份，但快照存在，請先建立另一個完整備份，再繼續建立差異備份。

  您可以使用下列範例 SQL 查詢來尋找前次完整備份或快照：

  ```
  select top 1
  database_name
  , 	backup_start_date
  , 	backup_finish_date
  from    msdb.dbo.backupset
  where   database_name='mydatabase'
  and     type = 'D'
  order by backup_start_date desc;
  ```
+ `@number_of_files` – 要將備份分割 (分塊) 的檔案數目。上限為 10。
  + 完整和差異備份都支援多個備份。
  + 如果輸入值 1 或省略參數，則會建立單一備份檔案。

  提供檔案共有的字首，再於末尾加上星號 (`*`)。星號可以位於 S3 ARN *file\$1name* 部分的任何位置。星號會由所產生檔案 (以 `1-of-number_of_files` 開頭) 中的一系列字母數字字串取代。

  例如，如果 S3 ARN 中的檔案名稱是 `backup*.bak` 且您設定 `@number_of_files=4`，則產生的備份檔案為 `backup1-of-4.bak`、`backup2-of-4.bak`、`backup3-of-4.bak` 及 `backup4-of-4.bak`。
  + 如果任一檔案名稱已存在，且 `@overwrite_s3_backup_file` 為 0，則會傳回錯誤。
  + 多個備份在 S3 ARN 的 *file\$1name* 部分中只能有一個星號。
  + 單一檔案備份在 S3 ARN 的 *file\$1name* 部分中可以有任意數量的星號。不會從所產生檔案名稱中移除星號。
+ `@block_size` – 區塊大小 (以位元組為單位)，指定備份操作的實體區塊大小。有效值為 512、1024、2048、4096、8192、16384、32768 和 65536
+ `@max_transfer_size` – 最大傳輸大小表示備份程序期間每個 I/O 操作傳輸的資料磁碟區上限 (以位元組為單位)。有效值為 65536 位元組 (64 KB) 的倍數，最高可達 4194304 位元組 (4 MB)。
+ `@buffer_count` – 用於備份程序的 I/O 緩衝區總數。
+ `@enable_bucket_default_encryption` – 指出是否在 S3 中使用 S3 儲存貯體預設加密組態進行伺服器端加密的值。無論此設定為何，目錄儲存貯體一律使用儲存貯體的預設加密組態。
  + `0` – 伺服器端加密透過 SSE-S3 使用進階加密標準 (AES) 256 位元加密。
  + `1` – 伺服器端加密使用 S3 儲存貯體設定[的預設加密](https://docs.aws.amazon.com//AmazonS3/latest/userguide/bucket-encryption.html)。

### 範例
<a name="SQLServer.Procedural.Importing.Native.Backup.Examples"></a>

**Example 差異備份**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup1.bak',
@overwrite_s3_backup_file=1,
@type='DIFFERENTIAL';
```

**Example 具有用戶端加密的完整備份**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup1.bak',
@kms_master_key_arn='arn:aws:kms:us-east-1:123456789012:key/AKIAIOSFODNN7EXAMPLE',
@overwrite_s3_backup_file=1,
@type='FULL';
```

**Example 多個備份**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@number_of_files=4;
```

**Example 多個差異備份**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@type='DIFFERENTIAL',
@number_of_files=4;
```

**Example 多個備份與加密**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@kms_master_key_arn='arn:aws:kms:us-east-1:123456789012:key/AKIAIOSFODNN7EXAMPLE',
@number_of_files=4;
```

**Example 多個備份與 S3 覆寫**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@overwrite_s3_backup_file=1,
@number_of_files=4;
```

**Example 備份與區塊大小**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@block_size=512;
```

**Example 多檔案備份與 `@max_transfer_size` 和 `@buffer_count`**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@number_of_files=4,
@max_transfer_size=4194304,
@buffer_count=10;
```

**Example 單一檔案備份與 @number\$1of\$1files 參數**  
此範例會產生名為 `backup*.bak` 的備份檔案。  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@number_of_files=1;
```

**Example 具有伺服器端加密的完整備份**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@overwrite_s3_backup_file=1,
@type='FULL',
@enable_bucket_default_encryption=1;
```

**Example 使用存取點完整備份的**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:us-east-1:111122223333:accesspoint/my-access-point/object/backup1.bak',
@overwrite_s3_backup_file=1,
@type='FULL';
```

**Example 使用目錄儲存貯體的存取點進行完整備份**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3express:us-east-1:123456789012:accesspoint/my-access-point--use1-az6--xa-s3/object/backup1.bak',
@overwrite_s3_backup_file=1,
@type='FULL';
```

## 還原資料庫
<a name="SQLServer.Procedural.Importing.Native.Using.Restore"></a>

若要還原資料庫，請呼叫 `rds_restore_database` 預存程序。在還原任務完成且資料庫開啟後，Amazon RDS 會建立資料庫的初始快照。

### Usage
<a name="SQLServer.Procedural.Importing.Native.Restore.Syntax"></a>

```
exec msdb.dbo.rds_restore_database
	@restore_db_name='database_name',
	@s3_arn_to_restore_from='arn:aws:s3:::bucket_name/file_name.extension',
	@with_norecovery=0|1,
	[@keep_cdc=0|1],
	[@data_file_volume='D:|H:|I:|J:'],
	[@log_file_volume='D:|H:|I:|J:'],
	[@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id'],
        [@block_size=512|1024|2048|4096|8192|16384|32768|65536],
        [@max_transfer_size=n],
        [@buffer_count=n],
	[@type='DIFFERENTIAL|FULL'];
```

下列是必要參數：
+ `@restore_db_name`– 要還原之資料庫的名稱。資料庫名稱是唯一的。您不能還原與現有資料庫同名的資料庫。
+ `@s3_arn_to_restore_from` – 此 ARN 指出 Amazon S3 字首和用來還原資料庫的備份檔案名稱。
  + 若為單一檔案備份，請提供整個檔案名稱。
  + 若為多檔案備份，請提供檔案共有的字首，再於末尾加上星號 (`*`)。
    + 如果使用目錄儲存貯體，`/*`由於[目錄儲存貯體的差異](https://docs.aws.amazon.com//AmazonS3/latest/userguide/s3-express-differences.html)，ARN 必須以 結尾。
  + 如果 `@s3_arn_to_restore_from` 是空的，則會傳回下列錯誤訊息：S3 ARN 字首不得為空。

以下為差異還原的必要參數，但為完整還原的選用參數：
+ `@with_norecovery` – 用於還原操作的復原子句。
  + 設為 `0` 表示以 RECOVERY 還原。在此情況下，資料庫於還原之後會在線上。
  + 設為 `1` 表示以 NORECOVERY 還原。在此情況下，資料庫於還原任務完成之後會停留在 RESTORING 狀態。此方法可讓您進行後續差異還原。
  + 若為 DIFFERENTIAL 還原，請指定 `0` 或 `1`。
  + 若為 `FULL` 還原，此值預設為 `0`。

下列是選用參數：
+ `@keep_cdc` – 指出是否要在還原的資料庫上保留變更資料擷取 (CDC) 組態。設定為 `1` 以啟用 KEEP\$1CDC，`0`設定為停用。預設值為 `0`。
+ `@data_file_volume` – 指定資料庫資料檔案的磁碟機代號。預設值為 `D:`。
+ `@log_file_volume` – 指定資料庫日誌檔案的磁碟機代號 預設值為 `D:`。
+ `@kms_master_key_arn` – 如果您已將備份檔案加密，則此為用來解密檔案的 KMS 金鑰。

  當您指定 KMS 金鑰時，會使用用戶端加密。
+ `@type` – 還原的類型。有效類型為 `DIFFERENTIAL` 和 `FULL`。預設值為 `FULL`。
+ `@block_size` – 區塊大小 (以位元組為單位)，指定備份操作的實體區塊大小。有效值為 512、1024、2048、4096、8192、16384、32768 和 65536
+ `@max_transfer_size` – 最大傳輸大小表示備份程序期間每個 I/O 操作傳輸的資料磁碟區上限 (以位元組為單位)。有效值為 65536 位元組 (64 KB) 的倍數，最高可達 4194304 位元組 (4 MB)。
+ `@buffer_count` – 用於備份程序的 I/O 緩衝區總數。

**注意**  
若為差異還原，資料庫必須處於 RESTORING 狀態，或必須已存在一個以 NORECOVERY 還原的任務。  
當資料庫在線上時，您無法還原後續差異備份。  
如果資料庫已有一個使用 RECOVERY 的待定還原任務，則您無法再提交另一個還原任務。  
不支援同時使用 NORECOVERY 和 KEEP\$1CDC 進行完整還原。  
具有跨區域僅供讀取複本的執行個體不支援所有原生還原。  
對於支援的組態，在具有僅供讀取複本的多可用區域執行個體上還原資料庫，與在多可用區域執行個體上還原資料庫類似。您不需要採取任何其他動作來還原複本上的資料庫。

### 範例
<a name="SQLServer.Procedural.Importing.Native.Restore.Examples"></a>

**Example 單一檔案還原**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak';
```

**Example 多檔案還原**  
若要避免在還原多個檔案時發生錯誤，請確保所有備份檔案具有相同的字首，以及沒有其他檔案使用該字首。  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup*';
```

**Example 含 RECOVERY 的完整資料庫還原**  
下列三個範例執行同樣的任務，都是含 RECOVERY 的完整還原。  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak';
```

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
[@type='DIFFERENTIAL|FULL'];
```

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@type='FULL',
@with_norecovery=0;
```

**Example 含加密的完整資料庫還原**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@kms_master_key_arn='arn:aws:kms:us-east-1:123456789012:key/AKIAIOSFODNN7EXAMPLE';
```

**Example 還原與區塊大小**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@block_size=512;
```

**Example 多檔案還原與 @max\$1transfer\$1size 和 @buffer\$1count**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup*',
@max_transfer_size=4194304,
@buffer_count=10;
```

**Example 含 NORECOVERY 的完整資料庫還原**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@type='FULL',
@with_norecovery=1;
```

**Example 含 NORECOVERY 的差異還原**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@type='DIFFERENTIAL',
@with_norecovery=1;
```

**Example 含 RECOVERY 的差異還原**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@type='DIFFERENTIAL',
@with_norecovery=0;
```

**Example 使用存取點搭配 RECOVERY 進行完整資料庫還原**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:us-east-1:111122223333:accesspoint/my-access-point/object/backup1.bak',
@with_norecovery=0;
```

**Example 使用 KEEP\$1CDC 進行完整資料庫還原**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@keep_cdc=1;
```

## 還原日誌
<a name="SQLServer.Procedural.Importing.Native.Restore.Log"></a>

若要還原日誌，請呼叫 `rds_restore_log` 預存程序。

### Usage
<a name="SQLServer.Procedural.Importing.Native.Restore.Log.Syntax"></a>

```
exec msdb.dbo.rds_restore_log 
	@restore_db_name='database_name',
	@s3_arn_to_restore_from='arn:aws:s3:::bucket_name/log_file_name.extension',
	[@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id'],
	[@with_norecovery=0|1],
	[@keep_cdc=0|1],
	[@stopat='datetime'],
	[@block_size=512|1024|2048|4096|8192|16384|32768|65536],
        [@max_transfer_size=n],
        [@buffer_count=n];
```

下列是必要參數：
+ `@restore_db_name` – 資料庫的名稱，表示要還原其日誌。
+ `@s3_arn_to_restore_from` – 此 ARN 指出 Amazon S3 字首和用來還原日誌的日誌檔案名稱。檔案可以有任何副檔名，但通常使用 `.trn`。

  如果 `@s3_arn_to_restore_from` 是空的，則會傳回下列錯誤訊息：S3 ARN 字首不得為空。

下列是選用參數：
+ `@keep_cdc` – 指出是否要在還原的資料庫上保留變更資料擷取 (CDC) 組態。設為 1 以啟用 KEEP\$1CDC，設為 0 以停用。預設值為 0。
+ `@kms_master_key_arn` – 如果您已將日誌加密，則此為用來解密日誌的 KMS 金鑰。
+ `@with_norecovery` – 用於還原操作的復原子句。此值預設為 `1`。
  + 設為 `0` 表示以 RECOVERY 還原。在此情況下，資料庫於還原之後會在線上。當資料庫在線上時，您無法還原更多的日誌備份。
  + 設為 `1` 表示以 NORECOVERY 還原。在此情況下，資料庫於還原任務完成之後會停留在 RESTORING 狀態。此方法可讓您進行後續日誌還原。
+ `@stopat` – 此值指定將資料庫還原至指定日期和時間的狀態 (日期時間格式)。只有在指定日期和時間之前寫入的交易日誌記錄，才會套用至資料庫。

  如果不指定此參數 (NULL)，則會還原整個日誌。
+ `@block_size` – 區塊大小 (以位元組為單位)，指定備份操作的實體區塊大小。有效值為 512、1024、2048、4096、8192、16384、32768 和 65536
+ `@max_transfer_size` – 最大傳輸大小表示備份程序期間每個 I/O 操作傳輸的資料磁碟區上限 (以位元組為單位)。有效值為 65536 位元組 (64 KB) 的倍數，最高可達 4194304 位元組 (4 MB)。
+ `@buffer_count` – 用於備份程序的 I/O 緩衝區總數。

**注意**  
若為日誌還原，資料庫必須處於還原中狀態，或必須已存在一個以 NORECOVERY 還原的任務。  
當資料庫在線上時，您無法還原日誌備份。  
如果資料庫已有一個使用 RECOVERY 的待定還原任務，則您無法再提交日誌還原任務。

### 範例
<a name="SQLServer.Procedural.Importing.Native.Restore.Log.Examples"></a>

**Example 日誌還原**  

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn';
```

**Example 含加密的日誌還原**  

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn',
@kms_master_key_arn='arn:aws:kms:us-east-1:123456789012:key/AKIAIOSFODNN7EXAMPLE';
```

**Example 含 NORECOVERY 的日誌還原**  
下列兩個範例執行同樣的任務，都是含 NORECOVERY 的日誌還原。  

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn',
@with_norecovery=1;
```

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn';
```

**Example 還原與區塊大小**  

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn',
@block_size=512;
```

**Example 含 RECOVERY 的日誌還原**  

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn',
@with_norecovery=0;
```

**Example 含 STOPAT 子句的日誌還原**  

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn',
@with_norecovery=0,
@stopat='2019-12-01 03:57:09';
```

**Example 使用 KEEP\$1CDC 還原日誌**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@keep_cdc=1;
```

## 完成資料庫還原
<a name="SQLServer.Procedural.Importing.Native.Finish.Restore"></a>

如果資料庫的前次還原任務是使用 `@with_norecovery=1` 執行，則資料庫現在處於 RESTORING 狀態。使用 `rds_finish_restore` 預存程序開啟資料庫，以正常操作。

### Usage
<a name="SQLServer.Procedural.Importing.Native.Finish.Restore.Syntax"></a>

```
exec msdb.dbo.rds_finish_restore @db_name='database_name';
```

**注意**  
若要使用此方法，資料庫必須處於 RESTORING 狀態，且沒有任何待定還原任務。  
若要完成還原資料庫，請使用 master 登入。或使用最近以 NORECOVERY 還原資料庫或日誌的使用者登入。

## 處理部分還原的資料庫
<a name="SQLServer.Procedural.Importing.Native.Partially.Restored"></a>

### 捨棄部分還原的資料庫
<a name="SQLServer.Procedural.Importing.Native.Drop.Partially.Restored"></a>

若要捨棄局部還原的資料庫 (停留在 RESTORING 狀態)，請使用 `rds_drop_database` 預存程序。

```
exec msdb.dbo.rds_drop_database @db_name='database_name';
```

**注意**  
如果資料庫已有待定還原任務或已完成還原任務，則您無法提交 DROP 資料庫請求。  
若要捨棄資料庫，請使用 master 登入。或使用最近以 NORECOVERY 還原資料庫或日誌的使用者登入。

### 部分還原資料庫的快照還原和時間點復原行為
<a name="SQLServer.Procedural.Importing.Native.Snapshot.Restore"></a>

來源執行個體中的局部還原資料庫 (停留在 RESTORING 狀態)，在快照還原和時間點復原期間，將會從目標執行個體中捨棄。

## 取消任務
<a name="SQLServer.Procedural.Importing.Native.Using.Cancel"></a>

若要取消備份或還原任務，請呼叫 `rds_cancel_task` 預存程序。

**注意**  
您無法取消 FINISH\$1RESTORE 任務。

### Usage
<a name="SQLServer.Procedural.Importing.Native.Cancel.Syntax"></a>

```
exec msdb.dbo.rds_cancel_task @task_id=ID_number;
```

以下是必要參數：
+ `@task_id`– 要取消之任務的 ID。您可以呼叫 `rds_task_status` 來取得任務 ID。

## 追蹤任務的狀態
<a name="SQLServer.Procedural.Importing.Native.Tracking"></a>

若要追蹤備份和還原任務的狀態，請呼叫 `rds_task_status` 預存程序。如果您不提供任何參數，預存程序會傳回所有任務的狀態。任務的狀態大約每兩分鐘更新一次。查詢歷程記錄會保留 36 天。

### Usage
<a name="SQLServer.Procedural.Importing.Native.Tracking.Syntax"></a>

```
exec msdb.dbo.rds_task_status
	[@db_name='database_name'],
	[@task_id=ID_number];
```

下列是選用參數：
+ `@db_name`– 要顯示任務狀態之資料庫的名稱。
+ `@task_id`– 要顯示任務狀態之任務的 ID。

### 範例
<a name="SQLServer.Procedural.Importing.Native.Tracking.Examples"></a>

**Example 列出特定任務的狀態**  

```
exec msdb.dbo.rds_task_status @task_id=5;
```

**Example 列出特定資料庫和任務的狀態**  

```
exec msdb.dbo.rds_task_status
@db_name='my_database',
@task_id=5;
```

**Example 列出特定資料庫上的所有任務及其狀態**  

```
exec msdb.dbo.rds_task_status @db_name='my_database';
```

**Example 列出目前執行個體上的所有任務及其狀態**  

```
exec msdb.dbo.rds_task_status;
```

### 回應
<a name="SQLServer.Procedural.Importing.Native.Tracking.Response"></a>

`rds_task_status` 預存程序會傳回下列幾欄。


****  

| 資料欄 | 描述 | 
| --- | --- | 
| `task_id` |  任務的 ID。  | 
| `task_type` |  任務類型取決於輸入參數，如下所示： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.Native.Using.html) 當資料庫隨著下列還原任務完成而開啟之後，Amazon RDS 會建立資料庫的初始快照： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.Native.Using.html)  | 
| `database_name` |  與任務相關聯之資料庫的名稱。  | 
| `% complete` |  任務的進度 (以百分比值表示)。  | 
| `duration (mins)` |  任務所花的時間 (以分鐘為單位)。  | 
| `lifecycle` |  任務的狀態。可能的狀態如下： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.Native.Using.html)  | 
| `task_info` |  任務的其他資訊。 如果備份或還原資料庫時發生錯誤，此欄會包含此錯誤的相關資訊。如需可能錯誤的清單及緩解策略，請參閱[故障診斷](SQLServer.Procedural.Importing.Native.Troubleshooting.md)。  | 
| `last_updated` |  上次更新任務狀態的日期和時間。進度每完成 5% 後，就會更新一次狀態。  | 
| `created_at` | 建立任務的日期和時間。 | 
| S3\$1object\$1arn | 此 ARN 指出 Amazon S3 字首，以及正在備份或還原的檔案名稱。 | 
| `overwrite_s3_backup_file` |  呼叫備份任務時所指定之 `@overwrite_s3_backup_file` 參數的值。如需詳細資訊，請參閱[備份資料庫](#SQLServer.Procedural.Importing.Native.Using.Backup)。  | 
| KMS\$1master\$1key\$1arn | 用於加密 (備份時) 和解密 (還原時) 的 KMS 金鑰的 ARN。 | 
| filepath | 不適用於原生備份與還原任務。 | 
| overwrite\$1file | 不適用於原生備份與還原任務。 | 

# 壓縮備份檔案
<a name="SQLServer.Procedural.Importing.Native.Compression"></a>

若要節省 Amazon S3 儲存貯體的空間，您可以壓縮備份檔案。如需有關壓縮備份檔案的詳細資訊，請參閱 Microsoft 文件中的[備份壓縮](https://msdn.microsoft.com/en-us/library/bb964719.aspx)。

下列資料庫版本支援壓縮備份檔案：
+ Microsoft SQL Server Enterprise Edition 
+ Microsoft SQL Server Standard Edition 

若要驗證備份檔案的壓縮選項，請執行下列程式碼：

```
1. exec rdsadmin.dbo.rds_show_configuration 'S3 backup compression';
```

若要對備份檔案啟用壓縮，請執行下列程式碼：

```
1. exec rdsadmin.dbo.rds_set_configuration 'S3 backup compression', 'true';
```

若要對備份檔案停用壓縮，請執行下列程式碼：

```
1. exec rdsadmin.dbo.rds_set_configuration 'S3 backup compression', 'false';
```

# 故障診斷
<a name="SQLServer.Procedural.Importing.Native.Troubleshooting"></a>

下列是您使用原生備份與還原時可能遇到的問題。


****  

| 問題 | 故障診斷建議 | 
| --- | --- | 
|  資料庫備份/還原選項尚未啟用，或正在進行啟用。請稍後再試。  |  確定您已將 `SQLSERVER_BACKUP_RESTORE` 選項新增至與資料庫執行個體產生關聯的資料庫選項群組。如需詳細資訊，請參閱 [新增原生備份與還原選項](Appendix.SQLServer.Options.BackupRestore.md#Appendix.SQLServer.Options.BackupRestore.Add)。  | 
|  EXECUTE 許可在物件 '*rds\$1backup\$1database*'、資料庫 'msdb'、結構描述 'dbo' 上遭到拒絕。  |  執行預存程序時，請務必使用主要使用者。如果您即使以主要使用者身分登入仍發生此錯誤，可能是因為管理員使用者許可不相符。若要重設主要使用者，請使用 AWS 管理主控台。請參閱[重設 Amazon RDS for SQL Server 主要使用者的 db\$1owner 角色成員資格](Appendix.SQLServer.CommonDBATasks.ResetPassword.md)。  | 
|  EXECUTE 許可在物件 '*rds\$1restore\$1database*'、資料庫 'msdb'、結構描述 'dbo' 上遭到拒絕。  |  執行預存程序時，請務必使用主要使用者。如果您即使以主要使用者身分登入仍發生此錯誤，可能是因為管理員使用者許可不相符。若要重設主要使用者，請使用 AWS 管理主控台。請參閱[重設 Amazon RDS for SQL Server 主要使用者的 db\$1owner 角色成員資格](Appendix.SQLServer.CommonDBATasks.ResetPassword.md)。  | 
|  存取遭拒  | 備份或還原程序無法存取備份檔案。這通常是如下的問題所造成： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.Native.Troubleshooting.html)  | 
|  <edition\$1name> 版本不支援備份壓縮資料庫  |  只有 Microsoft SQL Server Enterprise Edition 才支援壓縮備份檔案， Standard Edition。 如需更多詳細資訊，請參閱 [壓縮備份檔案](SQLServer.Procedural.Importing.Native.Compression.md)。  | 
|  金鑰 <ARN> 不存在  |  您嘗試還原已加密的備份，但未提供有效的加密金鑰。請檢查加密金鑰並重試。如需更多詳細資訊，請參閱 [還原資料庫](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Using.Restore)。  | 
|  請使用正確的類型重新發行任務並覆寫屬性  |  如果您嘗試備份資料庫，且提供已存在之檔案的名稱，但將覆寫屬性設為 false，則儲存操作會失敗。若要修正此錯誤，請提供尚不存在之檔案的名稱，或將覆寫屬性設為 true。 如需更多詳細資訊，請參閱 [備份資料庫](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Using.Backup)。 也可能是您想要還原資料庫，但不慎呼叫 `rds_backup_database` 預存程序。在此情況下，請改為呼叫 `rds_restore_database` 預存程序。 如需更多詳細資訊，請參閱 [還原資料庫](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Using.Restore)。 如果您想要還原資料庫，且呼叫 `rds_restore_database` 預存程序，請確定您提供有效備份檔案的名稱。 如需更多詳細資訊，請參閱 [使用原生備份與還原](SQLServer.Procedural.Importing.Native.Using.md)。  | 
|  請指定與 RDS 執行個體位於相同區域的儲存貯體  |  如果 Amazon S3 儲存貯體和 Amazon RDS 資料庫執行個體位於不同的 AWS 區域，您無法備份到或還原自這個儲存貯體。您可以使用 Amazon S3 複寫將備份檔案複製到正確的 AWS 區域。 如需詳細資訊，請參閱 Amazon S3 文件中的[跨區域複寫](https://docs.aws.amazon.com/AmazonS3/latest/userguide/crr.html)。  | 
|  指定的儲存貯體不存在  | 請確認您以正確格式提供儲存貯體和檔案的正確 ARN。 如需更多詳細資訊，請參閱 [使用原生備份與還原](SQLServer.Procedural.Importing.Native.Using.md)。  | 
|  使用者 <ARN> 未獲授權，不可對資源 <ARN> 執行 <kms action>  |  您請求執行加密操作，但未提供正確的 AWS KMS 許可。請確認您有正確許可，或新增許可。 如需更多詳細資訊，請參閱 [設定原生備份與還原](SQLServer.Procedural.Importing.Native.Enabling.md)。  | 
|  還原」任務無法從 10 個以上的備份檔案中還原。請減少符合的檔案數目，然後再試一次。  |  減少您嘗試從中還原的檔案數量。必要時您可以提高每個個別檔案的大小。  | 
|  資料庫 '*database\$1name*' 已存在。不允許兩個僅大小寫或口音不同的資料庫。選擇不同的資料庫名稱。  |  您不能還原與現有資料庫同名的資料庫。資料庫名稱是唯一的。  | 

# 使用其他方法來匯入和匯出 SQL Server 資料
<a name="SQLServer.Procedural.Importing.Snapshots"></a>

接下來，您可以找到有關使用快照將 Microsoft SQL Server 資料匯入 Amazon RDS 的資訊。您還可以找到有關從執行 SQL Server 的 RDS 資料庫執行個體匯出快照的資訊。

只要您的案例有支援使用原生備份與還原功能，您即可輕鬆將資料移進和移出 Amazon RDS。如需詳細資訊，請參閱 [使用原生備份和還原，匯入和匯出 SQL Server 資料庫](SQLServer.Procedural.Importing.md)。

**注意**  
Amazon RDS for Microsoft SQL Server 不支援將資料匯入 `msdb` 資料庫。

## 使用快照，將資料匯入 RDS for SQL Server
<a name="SQLServer.Procedural.Importing.Procedure"></a>

**使用快照將資料匯入 SQL Server 資料庫執行個體**

1. 建立資料庫執行個體。如需更多詳細資訊，請參閱 [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。

1. 防止應用程式存取目的地資料庫執行個體。

   如果在匯入資料時防止存取您的資料庫執行個體，資料傳輸會較快。此外，您不必擔心載入資料時，其他應用程式無法同時寫入資料庫執行個體而引起的衝突。如果發生問題而必須轉返到先前的資料庫快照，唯一失去的變更只是已匯入的資料。您可以在解決問題之後重新匯入此資料。

   如需有關控制存取資料庫執行個體的資訊，請參閱[使用安全群組控制存取](Overview.RDSSecurityGroups.md)。

1. 建立目標資料庫的快照。

   如果目標資料庫中已填入資料，建議您先建立資料庫的快照，再匯入資料。如果資料匯入發生問題，或您想要捨棄變更，您可以使用快照將資料庫還原到先前的狀態。如需資料庫快照的相關資訊，請參閱[為 Amazon RDS 的單一可用區域資料庫執行個體建立資料庫快照](USER_CreateSnapshot.md)。
**注意**  
當您建立資料庫快照時，資料庫的 I/O 操作會在備份進行時暫停一會兒 (毫秒)。

1. 在目標資料庫上停用自動備份。

   在目標資料庫執行個體上停用自動備份可提升您匯入資料時的效能，因為停用自動備份時，Amazon RDS 不會記錄交易。但有一些注意事項。需要有自動備份才能執行時間點復原。因此，您無法在匯入資料期間將資料庫還原至特定時間點。此外，還會清除資料庫執行個體上建立的任何自動備份，除非您選擇保留它們。

   選擇保留自動備份可幫助您避免資料意外刪除。Amazon RDS 也會儲存資料庫執行個體屬性以及各自動化備份，以利復原。使用此選項讓您可以在刪除後，還原備份保留期間刪除的特定時間資料庫執行個體。自動備份會在指定備份時段結束時自動刪除，就和它們在作用中資料庫執行個體一樣。

   您也可以使用先前的快照來復原資料庫，您已建立的任何快照仍然可用。如需自動備份的相關資訊，請參閱 [備份簡介](USER_WorkingWithAutomatedBackups.md)。

1. 停用外部索引鍵限制 (如適用)。

    如果需要停用外部索引鍵限制，您可以利用下列指令碼這樣做。

   ```
   --Disable foreign keys on all tables
       DECLARE @table_name SYSNAME;
       DECLARE @cmd NVARCHAR(MAX);
       DECLARE table_cursor CURSOR FOR SELECT name FROM sys.tables;
       
       OPEN table_cursor;
       FETCH NEXT FROM table_cursor INTO @table_name;
       
       WHILE @@FETCH_STATUS = 0 BEGIN
         SELECT @cmd = 'ALTER TABLE '+QUOTENAME(@table_name)+' NOCHECK CONSTRAINT ALL';
         EXEC (@cmd);
         FETCH NEXT FROM table_cursor INTO @table_name;
       END
       
       CLOSE table_cursor;
       DEALLOCATE table_cursor;
       
       GO
   ```

1. 捨棄索引 (如適用)。

1. 停用觸發條件 (如適用)。

    如果需要停用觸發條件，您可以利用下列指令碼這樣做。

   ```
   --Disable triggers on all tables
       DECLARE @enable BIT = 0;
       DECLARE @trigger SYSNAME;
       DECLARE @table SYSNAME;
       DECLARE @cmd NVARCHAR(MAX);
       DECLARE trigger_cursor CURSOR FOR SELECT trigger_object.name trigger_name,
        table_object.name table_name
       FROM sysobjects trigger_object
       JOIN sysobjects table_object ON trigger_object.parent_obj = table_object.id
       WHERE trigger_object.type = 'TR';
       
       OPEN trigger_cursor;
       FETCH NEXT FROM trigger_cursor INTO @trigger, @table;
       
       WHILE @@FETCH_STATUS = 0 BEGIN
         IF @enable = 1
            SET @cmd = 'ENABLE ';
         ELSE
            SET @cmd = 'DISABLE ';
       
         SET @cmd = @cmd + ' TRIGGER dbo.'+QUOTENAME(@trigger)+' ON dbo.'+QUOTENAME(@table)+' ';
         EXEC (@cmd);
         FETCH NEXT FROM trigger_cursor INTO @trigger, @table;
       END
       
       CLOSE trigger_cursor;
       DEALLOCATE trigger_cursor;
       
       GO
   ```

1. 在來源 SQL Server 執行個體中，查詢您想要匯入到目的地資料庫執行個體的任何登入。

   SQL Server 將登入和密碼存放在 `master` 資料庫中。因為 Amazon RDS 不授權存取 `master` 資料庫，您無法直接將登入和密碼匯入目的地資料庫執行個體。反之，您必須查詢來源 SQL Server 執行個體上的 `master` 資料庫，以產生資料定義語言 (DDL) 檔案。此檔案應該包含您要新增至目的地資料庫執行個體的所有登入和密碼。此檔案還應該包含您要轉移的角色成員資格和許可。

   如需查詢 `master` 資料庫的相關資訊，請參閱 Microsoft 知識庫中的[在 SQL Server 的執行個體之間傳輸登入和密碼](https://learn.microsoft.com/en-us/troubleshoot/sql/database-engine/security/transfer-logins-passwords-between-instances)。

   此指令碼會輸出另一個指令碼，供您在目的地資料庫執行個體上執行。知識庫文章中的指令碼有下列程式碼：

   ```
   p.type IN 
   ```

   在出現 `p.type` 的每個地方，改用下列程式碼：

   ```
   p.type = 'S' 
   ```

1. 使用[匯入資料](#ImportData.SQLServer.Import)中的方法來匯入資料。

1. 授予應用程式存取目標資料庫執行個體的權利。

   資料匯入完成時，就可以授予您在匯入期間封鎖的那些應用程式存取資料庫執行個體的權利。如需有關控制存取資料庫執行個體的資訊，請參閱[使用安全群組控制存取](Overview.RDSSecurityGroups.md)。

1. 在目標資料庫執行個體上啟用自動備份。

   如需自動備份的相關資訊，請參閱 [備份簡介](USER_WorkingWithAutomatedBackups.md)。

1. 啟用外部索引鍵限制。

    如果您先前已停用外部索引鍵限制，現在可以利用下列指令碼來啟用它們。

   ```
   --Enable foreign keys on all tables
       DECLARE @table_name SYSNAME;
       DECLARE @cmd NVARCHAR(MAX);
       DECLARE table_cursor CURSOR FOR SELECT name FROM sys.tables;
       
       OPEN table_cursor;
       FETCH NEXT FROM table_cursor INTO @table_name;
       
       WHILE @@FETCH_STATUS = 0 BEGIN
         SELECT @cmd = 'ALTER TABLE '+QUOTENAME(@table_name)+' CHECK CONSTRAINT ALL';
         EXEC (@cmd);
         FETCH NEXT FROM table_cursor INTO @table_name;
       END
       
       CLOSE table_cursor;
       DEALLOCATE table_cursor;
   ```

1. 啟用索引 (如適用)。

1. 啟用觸發條件 (如適用)。

    如果您先前已停用觸發條件，現在可以利用下列指令碼來啟用它們。

   ```
   --Enable triggers on all tables
       DECLARE @enable BIT = 1;
       DECLARE @trigger SYSNAME;
       DECLARE @table SYSNAME;
       DECLARE @cmd NVARCHAR(MAX);
       DECLARE trigger_cursor CURSOR FOR SELECT trigger_object.name trigger_name,
        table_object.name table_name
       FROM sysobjects trigger_object
       JOIN sysobjects table_object ON trigger_object.parent_obj = table_object.id
       WHERE trigger_object.type = 'TR';
       
       OPEN trigger_cursor;
       FETCH NEXT FROM trigger_cursor INTO @trigger, @table;
       
       WHILE @@FETCH_STATUS = 0 BEGIN
         IF @enable = 1
            SET @cmd = 'ENABLE ';
         ELSE
            SET @cmd = 'DISABLE ';
       
         SET @cmd = @cmd + ' TRIGGER dbo.'+QUOTENAME(@trigger)+' ON dbo.'+QUOTENAME(@table)+' ';
         EXEC (@cmd);
         FETCH NEXT FROM trigger_cursor INTO @trigger, @table;
       END
       
       CLOSE trigger_cursor;
       DEALLOCATE trigger_cursor;
   ```

### 匯入資料
<a name="ImportData.SQLServer.Import"></a>

Microsoft SQL Server Management Studio 是所有 Microsoft SQL Server 版本 (Express Edition 除外) 都包含的圖形化 SQL Server 用戶端。您可以從 Microsoft 免費下載 SQL Server Management Studio Express。若要尋找此下載檔，請造訪 [Microsoft 網站](https://www.microsoft.com/en-us/download)。

**注意**  
SQL Server Management Studio 只推出 Windows 應用程式版本。

SQL Server Management Studio 包含下列工具，您可用來將資料匯入 SQL Server 資料庫執行個體：
+ 產生和發佈指令碼精靈
+ 匯入和匯出精靈
+ 大量複製

#### 產生和發佈指令碼精靈
<a name="ImportData.SQLServer.MgmtStudio.ScriptWizard"></a>

「產生和發佈指令碼精靈」會建立指令碼，其中包含資料庫的結構描述、資料庫本身或兩者都有。您可以在本機 SQL Server 部署中產生資料庫的指令碼。然後，您可以執行指令碼，將其中包含的資訊傳輸至 Amazon RDS 資料庫執行個體。

**注意**  
如果資料庫是 1 GiB 或更大，只產生資料庫結構描述的指令碼會更有效率。然後，您使用 SQL Server 的「匯入和匯出」精靈或大量複製功能來傳輸資料。

如需「產生和發佈指令碼精靈」的詳細資訊，請參閱此 [Microsoft SQL Server 文件](http://msdn.microsoft.com/en-us/library/ms178078%28v=sql.105%29.aspx)。

在精靈中，請特別注意 **Set Scripting Options (設定指令碼編寫選項)** 頁面的進階選項，確保已選取您要讓指令碼包含的所有項目。例如，指令碼依預設不包含資料庫觸發條件。

產生並儲存指令碼之後，您可以使用 SQL Server Management Studio 來連接至資料庫執行個體，然後執行指令碼。

#### 匯入和匯出精靈
<a name="ImportData.SQLServer.MgmtStudio.ImportExportWizard"></a>

「匯入和匯出精靈」會建立一個特殊 Integration Services 套件，可用來將本機 SQL Server 資料庫中的資料複製到目的地資料庫執行個體。此精靈可篩選要複製到目的地資料庫執行個體的資料表，甚至是資料表內的元組。

**注意**  
「匯入和匯出精靈」很適合大型資料集，但從遠端匯出本機部署的資料時，可能不是最快的方法。若要使用更快的方法，請考慮採用 SQL Server 大量複製功能。

如需「匯入和匯出精靈」的詳細資訊，請參閱此 [Microsoft SQL Server 文件](http://msdn.microsoft.com/en-us/library/ms140052%28v=sql.105%29.aspx)。

在精靈的 **Choose a Destination (選擇目的地)** 頁面上，執行下列動作：
+ 在 **Server Name (伺服器名稱)** 中，輸入資料庫執行個體的端點名稱。
+ 對於伺服器驗證模式，請選擇 **Use SQL Server Authentication (使用 SQL Server 驗證)**。
+ 在 **User name (使用者名稱)** 和 **Password (密碼)** 中，輸入您為資料庫執行個體所建立之主要使用者的登入資料。

#### 大量複製
<a name="ImportData.SQLServer.MgmtStudio.BulkCopy"></a>

需要將來源資料庫中的資料複製到資料庫執行個體時，SQL Server 大量複製功能很有效率。大量複製可將您指定的資料寫入資料檔案，例如 ASCII 檔案。然後，您可以再次執行大量複製，將檔案的內容寫入目的地資料庫執行個體。

本節使用所有 SQL Server 版本都有的 **bcp** 公用程式。如需大量匯入和匯出操作的詳細資訊，請參閱此 [Microsoft SQL Server 文件](http://msdn.microsoft.com/en-us/library/ms187042%28v=sql.105%29.aspx)。

**注意**  
使用大量複製之前，您必須先將資料庫結構描述匯入目的地資料庫執行個體。本主題稍早描述的「產生和發佈指令碼精靈」是此用途的絕佳工具。

下列命令連接至本機 SQL Server 執行個體。然後在現有 SQL Server 部署的 C:\$1 根目錄中，產生指定之資料表的 Tab 分隔檔。資料表以完整名稱指定，而文字檔案與所複製的資料表同名。

```
bcp dbname.schema_name.table_name out C:\table_name.txt -n -S localhost -U username -P password -b 10000 
```

上述程式碼包含下列選項：
+ `-n` 指定大量複製使用要複製之資料的原生資料類型。
+ `-S` 指定 *bcp* 公用程式要連接的 SQL Server 執行個體。
+ `-U` 指定登入 SQL Server 執行個體的帳戶使用者名稱。
+ `-P` 指定 所指定之使用者的密碼。`-U`
+ `-b` 指定每一批匯入資料的列數。

**注意**  
根據您的匯入情況而定，可能還有其他重要的參數。例如，您可能需要有關身分值的 `-E` 參數。如需詳細資訊，請參閱此 [Microsoft SQL Server 文件](http://msdn.microsoft.com/en-us/library/ms162802%28v=sql.105%29.aspx)中有關 **bcp** 公用程式命令列語法的完整描述。

例如，假設有一個使用預設結構描述 (`store`) 之名為 `dbo` 的資料庫包含名為 `customers` 的資料表。使用者帳戶 `admin` (密碼為 `insecure`) 會將 `customers` 資料表的 10,000 列複製到名為 `customers.txt` 的檔案。

```
bcp store.dbo.customers out C:\customers.txt -n -S localhost -U admin -P insecure -b 10000 
```

產生資料檔案後，您可以使用類似的命令，將資料上傳至資料庫執行個體。事先，在目標資料庫執行個體上建立資料庫和結構描述。然後，使用 `in` 引數來指定輸入檔案，而不是使用 `out` 來指定輸出檔案。指定資料庫執行個體的端點，而不是使用 localhost 來指定本機 SQL Server 執行個體。如果您使用的連接埠不是 1433，則也需要指定連接埠。使用者名稱和密碼是資料庫執行個體的主要使用者和密碼。語法如下。

```
bcp dbname.schema_name.table_name 
					in C:\table_name.txt -n -S endpoint,port -U master_user_name -P master_user_password -b 10000
```

接續上一個範例，假設主要使用者名稱是 `admin`，密碼是 `insecure`。資料庫執行個體的端點是 `rds.ckz2kqd4qsn1.us-east-1.rds.amazonaws.com`，您使用的連接埠是 4080。命令如下所示。

```
bcp store.dbo.customers in C:\customers.txt -n -S rds.ckz2kqd4qsn1.us-east-1.rds.amazonaws.com,4080 -U admin -P insecure -b 10000 
```

**注意**  
指定此處所顯示提示以外的密碼，作為安全最佳實務。

## 從 RDS for SQL Server 匯出資料
<a name="SQLServer.Procedural.Exporting"></a>

您可以選擇下列其中一個選項，從 RDS for SQL Server 資料庫執行個體匯出資料：
+ **使用完整備份檔案 (.bak) 的原生資料庫備份 **​ – 使用 .bak 檔案來備份資料庫已充分最佳化，該方式通常是匯出資料的最快方法。如需更多詳細資訊，請參閱 [使用原生備份和還原，匯入和匯出 SQL Server 資料庫](SQLServer.Procedural.Importing.md)。
+ **SQL Server 匯入和匯出精靈** – 如需詳細資訊，請參閱 [SQL Server 匯入和匯出精靈](#SQLServer.Procedural.Exporting.SSIEW)。
+ **SQL Server 產生和發佈指令碼精靈及 bcp 公用程式** – 如需詳細資訊，請參閱 [SQL Server 產生和發佈指令碼精靈及 bcp 公用程式](#SQLServer.Procedural.Exporting.SSGPSW)。

### SQL Server 匯入和匯出精靈
<a name="SQLServer.Procedural.Exporting.SSIEW"></a>

您可以使用「SQL Server 匯入和匯出」精靈，將 RDS for SQL Server 資料庫執行個體中的一或多個資料表、檢視或查詢，複製到另一個資料存放區。如果目標資料存放區不是 SQL Server，這是最佳選擇。如需詳細資訊，請參閱 SQL Server 文件中的 [SQL Server 匯入和匯出精靈](http://msdn.microsoft.com/en-us/library/ms141209%28v=sql.110%29.aspx)。

「SQL Server 匯入和匯出」精靈隨附於 Microsoft SQL Server Management Studio。所有 Microsoft SQL Server 版本 (Express Edition 除外) 都包含此圖形化 SQL Server 用戶端。SQL Server Management Studio 只推出 Windows 應用程式版本。您可以從 Microsoft 免費下載 SQL Server Management Studio Express。若要尋找此下載檔，請造訪 [Microsoft 網站](http://www.microsoft.com/en-us/search/Results.aspx?q=sql%20server%20management%20studio)。

**使用 SQL Server 匯入和匯出精靈來匯出資料**

1. 在 SQL Server Management Studio 中，連接至 RDS for SQL Server 資料庫執行個體。如需詳細作法，請參閱[連線至 Microsoft SQL Server 資料庫執行個體](USER_ConnectToMicrosoftSQLServerInstance.md)。

1. 在 **Object Explorer** (物件總管) 中，展開 **Databases** (資料庫)，開啟來源資料庫的內容 (右鍵) 功能表，選擇 **Tasks** (任務)，然後選擇 **Export Data** (匯出資料)。出現精靈。

1. 在 **Choose a Data Source (選擇資料來源)** 頁面上，執行下列動作：

   1. 對於 **Data source (資料來源)**，請選擇 **SQL Server Native Client 11.0**。

   1. 確認 **Server name** (伺服器名稱) 方塊顯示 RDS for SQL Server 資料庫執行個體的端點。

   1. 選取 **Use SQL Server Authentication (使用 SQL Server 驗證)**。在 **User name** (使用者名稱) 和 **Password** (密碼) 中，輸入資料庫執行個體的主要使用者名稱和密碼。

   1. 確認 **Database (資料庫)** 方塊顯示您要從中匯出資料的資料庫。

   1. 選擇**下一步**。

1. 在 **Choose a Destination (選擇目的地)** 頁面上，執行下列動作：

   1. 對於 **Destination (目的地)**，請選擇 **SQL Server Native Client 11.0**。
**注意**  
還有其他目標資料來源可用。其中包括 .NET Framework 資料提供者、OLE DB 提供者、SQL Server Native Client 提供者、ADO.NET 提供者、Microsoft Office Excel、Microsoft Office Access 及「一般檔案」來源。如果您選擇以其中一個資料來源為目標，請略過步驟 4 的其餘部分。關於接下來需提供的連線資訊的詳情，請參閱 SQL Server 文件中的[選擇目的地](http://msdn.microsoft.com/en-us/library/ms178430%28v=sql.110%29.aspx)。

   1. 在 **Server name (伺服器名稱)** 中，輸入目標 SQL Server 資料庫執行個體的伺服器名稱。

   1. 選擇適當的驗證類型。視需要輸入使用者名稱和密碼。

   1. 在 **Database (資料庫)** 中，選擇目標資料庫的名稱，或選擇 **New (新增)** 來建立新資料庫，以包含所匯出的資料。

      如果您選擇 **New (新增)**，請參閱 SQL Server 文件中的[建立資料庫](http://msdn.microsoft.com/en-us/library/ms183323%28v=sql.110%29.aspx)，以詳細了解需要提供的資料庫詳細資訊。

   1. 選擇**下一步**。

1. 在 **Table Copy or Query (資料表複製或查詢)** 頁面上，選擇 **Copy data from one or more tables or views (從一個或多個資料表或檢視複製資料)** 或 **Write a query to specify the data to transfer (寫入查詢來指定要傳輸的資料)**。選擇**下一步**。

1. 如果您選擇 **Write a query to specify the data to transfer (寫入查詢來指定要傳輸的資料)**，您會看到 **Provide a Source Query (提供來源查詢)** 頁面。在 SQL 查詢中輸入或貼上，然後選擇 **Parse (下一步)** 來進行確認。確認查詢有效後，選擇 **Next (下一步)**。

1. 在 **Select Source Tables and Views (選取來源資料表和檢視)** 頁面上，執行下列動作：

   1. 選取您要匯出的資料表和檢視，或確認已選取您提供的查詢。

   1. 選擇 **Edit Mappings (編輯映射)**，並指定資料庫和資料行映射資訊。如需詳細資訊，請參閱 SQL Server 文件中的[資料行映射](http://msdn.microsoft.com/en-us/library/ms189660%28v=sql.110%29.aspx)。

   1. (選用) 如需預覽要匯出的資料，請選取資料表、檢視或查詢，然後選擇 **Preview (預覽)**。

   1. 選擇**下一步**。

1. 在 **Run Package (執行封裝)** 頁面上，確認已選取 **Run immediately (立即執行)**。選擇**下一步**。

1. 在 **Complete the Wizard (完成精靈)** 頁面上，確認資料匯出詳細資訊如您所預期。選擇 **Finish** (完成)。

1. 在 **The execution was successful (已執行成功)** 頁面上，選擇 **Close (關閉)**。

### SQL Server 產生和發佈指令碼精靈及 bcp 公用程式
<a name="SQLServer.Procedural.Exporting.SSGPSW"></a>

您可以使用「SQL Server 產生和發佈指令碼精靈」來為整個資料庫或只針對選取的物件建立指令碼。您可以在目標 SQL Server 資料庫執行個體上執行這些指令碼，以重新建立指令碼物件。然後，您可以使用 bcp 公用程式，將所選取之物件的資料大量匯出到目標資料庫執行個體。如果您要在兩個 SQL Server 資料庫執行個體之間移動整個資料庫 (包括資料表以外的物件) 或大量資料，這是最佳選擇。如需 bcp 命令列語法的完整描述，請參閱 Microsoft SQL Server 文件中的 [bcp 公用程式](http://msdn.microsoft.com/en-us/library/ms162802%28v=sql.110%29.aspx)。

「SQL Server 產生和發佈指令碼」精靈隨附於 Microsoft SQL Server Management Studio。所有 Microsoft SQL Server 版本 (Express Edition 除外) 都包含此圖形化 SQL Server 用戶端。SQL Server Management Studio 只推出 Windows 應用程式版本。您可以從 Microsoft [免費下載](http://www.microsoft.com/en-us/search/Results.aspx?q=sql%20server%20management%20studio) SQL Server Management Studio Express。

**使用 SQL Server 產生和發佈指令碼精靈及 bcp 公用程式來匯出資料**

1. 在 SQL Server Management Studio 中，連接至 RDS for SQL Server 資料庫執行個體。如需詳細作法，請參閱[連線至 Microsoft SQL Server 資料庫執行個體](USER_ConnectToMicrosoftSQLServerInstance.md)。

1. 在 **Object Explorer (物件總管)** 中，展開 **Databases (資料庫)** 節點，選取您要編寫指令碼的資料庫。

1. 遵循 SQL Server 文件的[產生和發佈指令碼精靈](http://msdn.microsoft.com/en-us/library/bb895179%28v=sql.110%29.aspx)中的說明來建立指令碼檔案。

1. 在 SQL Server Management Studio 中，連接至目標 SQL Server 資料庫執行個體。

1. 在 **Object Explorer** (物件總管) 中選取目標 SQL Server 資料庫執行個體後，在 **File** (檔案) 選單上選擇 **Open** (開啟)，選擇 **File** (檔案)，然後開啟指令碼檔案。

1. 如果您已產生整個資料庫的指令碼，請檢閱指令碼中的 CREATE DATABASE 陳述式。確定資料庫是按照您要的位置和參數建立。如需詳細資訊，請參閱 SQL Server 文件中的 [CREATE DATABASE](http://msdn.microsoft.com/en-us/library/ms176061%28v=sql.110%29.aspx)。

1. 如果您在指令碼中建立資料庫使用者，請檢查那些使用者的伺服器登入是否存在於目標資料庫執行個體上。如果不是，請建立那些使用者的登入；否則，用於建立資料庫使用者的指令碼命令會失敗。如需詳細資訊，請參閱 SQL Server 文件中的[建立登入](http://msdn.microsoft.com/en-us/library/aa337562%28v=sql.110%29.aspx)。

1. 在「SQL 編輯器」功能表上選擇 **\$1Execute**，以執行指令碼檔案和建立資料庫物件。指令碼完成時，確認所有資料庫物件都如預期地存在。

1. 使用 bcp 公用程式將 RDS for SQL Server 資料庫執行個體中的資料匯出到檔案。開啓命令提示並輸入下列命令。

   ```
   bcp database_name.schema_name.table_name out data_file -n -S aws_rds_sql_endpoint -U username -P password
   ```

   上述程式碼包含下列選項：
   + *table\$1name* 是您在目標資料庫中已重新建立，而現在想要將資料填入該資料表的其中一個資料表名稱。
   + *data\$1file* 是準備建立之資料檔案的完整路徑和名稱。
   + `-n` 指定大量複製使用要複製之資料的原生資料類型。
   + `-S` 指定要從中匯出資料的 SQL Server 資料庫執行個體。
   + `-U` 指定連接至 SQL Server 資料庫執行個體時所使用的使用者名稱。
   + `-P` 指定 所指定之使用者的密碼。`-U`

   以下顯示命令範例 命令。

   ```
   bcp world.dbo.city out C:\Users\JohnDoe\city.dat -n -S sql-jdoe.1234abcd.us-west-2.rds.amazonaws.com,1433 -U JohnDoe -P ClearTextPassword
   ```

   重複此步驟，直到您要匯出的所有資料表都有資料檔案為止。

1. 遵循 SQL Server 文件的[大量匯入資料的基本方針](http://msdn.microsoft.com/en-us/library/ms189989%28v=sql.110%29.aspx)中的指示，以準備目標資料庫執行個體來大量匯入資料。

1. 考慮過 SQL Server 文件的[關於大量匯入和大量匯出操作](http://msdn.microsoft.com/en-us/library/ms187042%28v=sql.105%29.aspx)中所討論的效能和其他考量之後，再決定要使用的大量匯入方法。

1. 使用 bcp 公用程式從您建立的資料檔案中大量匯入資料。若要這麼做，請根據您在步驟 11 所做的決定，遵循 SQL Server 文件的[使用 bcp 公用程式匯入及匯出大量資料](http://msdn.microsoft.com/en-us/library/aa337544%28v=sql.110%29.aspx)或[使用 BULK INSERT 或 OPENROWSET(BULK...) 匯入大量資料](http://msdn.microsoft.com/en-us/library/ms175915%28v=sql.110%29.aspx)中的指示。

# 從 Linux 使用 BCP 公用程式匯入和匯出資料
<a name="SQLServer.Procedural.Importing.BCP.Linux"></a>

BCP (大量複製程式) 公用程式可讓您在 RDS for SQL Server 資料庫執行個體與資料檔案之間有效傳輸大量資料。您可以從 Linux 環境使用 BCP 執行大量資料操作，使其適用於資料遷移、ETL 程序及定期資料傳輸。

BCP 支援將資料從檔案匯入 SQL Server 資料表中，以及將資料從 SQL Server 資料表匯出至檔案。這對於以各種格式 (包括分隔符號文字檔案) 傳輸結構化資料尤有效用。

## 先決條件
<a name="SQLServer.Procedural.Importing.BCP.Linux.Prerequisites"></a>

從 Linux 將 BCP 用於 RDS for SQL Server 資料庫執行個體之前，請確定您有下列項目：
+ 有網路可連線至 RDS for SQL Server 資料庫執行個體的 Linux 環境
+ 安裝在 Linux 系統上的 Microsoft SQL Server 命令列工具，包括：
  + sqlcmd - SQL Server 命令列查詢工具
  + bcp - 大量複製程式公用程式
+ 適用於 RDS for SQL Server 資料庫執行個體的有效憑證
+ 透過安全群組設定的網路存取，以允許 SQL Server 連接埠 (通常是 1433) 上的連線
+ 您要執行之操作的適當資料庫許可

## 在 Linux 上安裝 SQL Server 命令列工具
<a name="SQLServer.Procedural.Importing.BCP.Linux.Installing"></a>

若要從 Linux 使用 BCP，您必須安裝 Microsoft SQL Server 命令列工具。如需特定 Linux 發行版本的詳細安裝指示，請參閱下列 Microsoft 文件：
+ [在 Linux 上安裝 sqlcmd 和 bcp SQL Server 命令列工具](https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools)
+ [bcp 公用程式](https://docs.microsoft.com/en-us/sql/tools/bcp-utility) - BCP 公用程式的完整參考

安裝完成後請執行下列命令，以確保工具可在您的 PATH 中使用：

```
bcp -v
sqlcmd -?
```

## 從 RDS for SQL Server 匯出資料
<a name="SQLServer.Procedural.Importing.BCP.Linux.Exporting"></a>

您可以使用 BCP，將資料從 RDS for SQL Server 資料庫執行個體匯出至 Linux 系統上的檔案。這對於建立備份、資料分析或進行資料遷移準備，都有其效用。

### 基本匯出語法
<a name="SQLServer.Procedural.Importing.BCP.Linux.Exporting.Basic"></a>

使用 BCP 匯出資料的基本語法為：

```
bcp database.schema.table out output_file -S server_name -U username -P password [options]
```

其中：
+ `database.schema.table` - 完整資料表名稱
+ `output_file` - 輸出檔案的路徑和名稱
+ `server_name` - 您的 RDS for SQL Server 端點
+ `username` - 您的資料庫使用者名稱
+ `password` - 您的資料庫密碼

### 匯出範例
<a name="SQLServer.Procedural.Importing.BCP.Linux.Exporting.Example"></a>

下列範例會從 `sales` 資料庫中名為 `customers` 的資料表匯出資料：

```
bcp sales.dbo.customers out /home/user/customers.txt \
    -S mydb.cluster-abc123.us-east-1.rds.amazonaws.com \
    -U admin \
    -P mypassword \
    -c \
    -t "|" \
    -r "\n"
```

此命令：
+ 從 `customers` 資料表匯出資料
+ 將輸出儲存至 `/home/user/customers.txt`
+ 使用字元格式 (`-c`)
+ 使用管道 (\$1) 做為欄位分隔符號 (`-t "|"`)
+ 使用新行做為資料列分隔符號 (`-r "\n"`)

## 將資料匯入至 RDS for SQL Server
<a name="SQLServer.Procedural.Importing.BCP.Linux.Importing"></a>

您可以使用 BCP，將資料從 Linux 系統上的檔案匯入至您的 RDS for SQL Server 資料庫執行個體。這對於資料遷移、載入測試資料或定期資料更新，都有其效用。

### 基本匯入語法
<a name="SQLServer.Procedural.Importing.BCP.Linux.Importing.Basic"></a>

使用 BCP 匯入資料的基本語法為：

```
bcp database.schema.table in input_file -S server_name -U username -P password [options]
```

其中：
+ `database.schema.table` - 完整目的地資料表名稱
+ `input_file` - 輸入檔案的路徑和名稱
+ `server_name` - 您的 RDS for SQL Server 端點
+ `username` - 您的資料庫使用者名稱
+ `password` - 您的資料庫密碼

### 匯入範例
<a name="SQLServer.Procedural.Importing.BCP.Linux.Importing.Example"></a>

下列範例會將資料從檔案匯入名為 `customers` 的資料表中：

```
bcp sales.dbo.customers in /home/user/customers.txt \
    -S mydb.cluster-abc123.us-east-1.rds.amazonaws.com \
    -U admin \
    -P mypassword \
    -c \
    -t "|" \
    -r "\n" \
    -b 1000
```

此命令：
+ 將資料匯入 `customers` 資料表中
+ 從 `/home/user/customers.txt` 中讀取資料
+ 使用字元格式 (`-c`)
+ 使用管道 (\$1) 做為欄位分隔符號 (`-t "|"`)
+ 使用新行做為資料列分隔符號 (`-r "\n"`)
+ 分批處理 1000 個資料列的資料 (`-b 1000`)

## 常用 BCP 選項
<a name="SQLServer.Procedural.Importing.BCP.Linux.Options"></a>

BCP 提供多種選項來控制資料格式化和傳輸行為。下表說明常用的選項：


| 選項 | 描述 | 
| --- | --- | 
| -c | 對所有資料欄使用字元資料類型 | 
| -n | 使用原生資料庫資料類型 | 
| -t | 指定欄位分隔符號 (預設為 Tab) | 
| -r | 指定資料列分隔符號 (預設為新行) | 
| -b | 指定大量操作的批次大小 | 
| -F | 指定要匯出或匯入的第一列 | 
| -L | 指定要匯出或匯入的最後一列 | 
| -e | 指定錯誤檔案以擷取遭拒的資料列 | 
| -f | 指定資料格式化的格式檔案 | 
| -q | 使用引號識別符做為物件名稱 | 

## 最佳實務和考量
<a name="SQLServer.Procedural.Importing.BCP.Linux.BestPractices"></a>

從 Linux 將 BCP 用於 RDS for SQL Server 時，請考量下列最佳實務：
+ **使用批次處理** – 對於大型資料集，請使用 `-b` 選項分批處理資料。這可以改善效能，並實現更好的錯誤復原效能。
+ **正常處理錯誤** – 使用 `-e` 選項擷取個別檔案中的錯誤資訊和遭拒的資料列，以進行分析。
+ **選擇適當的資料格式** – 在來源和目的地皆為 SQL Server 時，可使用字元格式 (`-c`) 實現跨平台相容性，或使用原生格式 (`-n`) 以獲得更好的效能。
+ **保護您的憑證** – 避免將密碼直接放入命令列中。請考慮使用具有適當許可的環境變數或組態檔。
+ **使用小型資料集進行測試** – 處理大量資料之前，請先使用較小的資料集來測試 BCP 命令，以驗證格式和連線。
+ **監控網路連線** – 確保穩定的網路連線，特別是對大型資料傳輸。請考慮使用 `screen` 或 `tmux` 等工具進行長時間執行的操作。
+ **驗證資料完整性** – 資料傳輸後，請驗證資料列計數和範例資料，以確保操作能順利完成。

## 排解常見問題
<a name="SQLServer.Procedural.Importing.BCP.Linux.Troubleshooting"></a>

下表說明從 Linux 使用 BCP 及其解決方案時可能會遇到的常見問題：


| 問題 | 解決方案 | 
| --- | --- | 
| 連線逾時或網路錯誤 | 驗證您的 Amazon RDS 端點、安全群組設定和網路連線。確定可從 Linux 系統存取 SQL Server 連接埠 (通常是 1433)。 | 
| 身分驗證失敗 | 驗證您的使用者名稱和密碼。請確定資料庫使用者對您正在執行的操作具有適當許可。 | 
| 資料格式錯誤 | 檢查您的欄位和資料列分隔符號。請確定資料格式符合 BCP 的預期。對複雜的資料結構使用格式檔案。 | 
| 拒絕許可錯誤 | 確定您的資料庫使用者具有匯入的 INSERT 許可，或在目標資料表上匯出的 SELECT 許可。 | 
| 大型檔案處理問題 | 搭配 -b 選項使用批次處理。請考慮將大型檔案分割成較小的區塊，以提升效能和進行錯誤後的復原。 | 
| 字元編碼問題 | 確定您的資料檔案使用相容的字元編碼。針對字元格式使用 -c 選項，或指定適當的程式碼頁面。 | 

# 使用 Amazon RDS 中的 Microsoft SQL Server 的僅供讀取複本
<a name="SQLServer.ReadReplicas"></a>

您通常會使用僅供讀取複本來設定 Amazon RDS 資料庫執行個體間的複寫。如需僅供讀取複本的一般資訊，請參閱 [使用資料庫執行個體僅供讀取複本](USER_ReadRepl.md)。

在此章節，您可以找到在 Amazon RDS 上使用 SQL Server 僅供讀取複本的特定資訊。
+ [使用 SQL Server 僅供讀取複本同步資料庫使用者和物件](SQLServer.ReadReplicas.ObjectSynchronization.md)
+ [對 SQL Server 僅供讀取複本問題進行故障診斷](SQLServer.ReadReplicas.Troubleshooting.md)

## 設定 SQL Server 僅供讀取複本
<a name="SQLServer.ReadReplicas.Configuration"></a>

當您將資料庫執行個體作為來源執行個體以進行複寫之前，您必須在來源資料庫執行個體上啟用自動備份。若要這麼做，請將備份保留期設定為 0 以外的值。設定此類型的部署也會強制啟用自動備份。

建立 SQL Server 僅供讀取複本不需要停止使用主要資料庫執行個體。Amazon RDS 會為來源資料庫執行個體和僅供讀取複本設定必要的參數和權限，而不會中斷任何服務。將拍攝來源資料庫執行個體的快照，而此快照會變成僅供讀取複本。在您刪除僅供讀取複本不會發生中斷情況。

單一來源資料庫執行個體可建立至多 15 個僅供讀取複本。若希望複寫作業順利運作，建議您將每個僅供讀取複本的運算和儲存資源數量設定為與來源資料庫執行個體相同。若您擴展來源資料庫執行個體，也要擴展僅供讀取複本。

來源資料庫執行個體及其所有僅供讀取複本的 SQL Server 資料庫引擎版本必須相同。Amazon RDS 升級僅供讀取複本後會立即升級主要執行個體，無論維護時段為何。如需有關升級資料庫引擎版本的詳細資訊，請參閱[Microsoft SQL Server 資料庫引擎的升級](USER_UpgradeDBInstance.SQLServer.md)。

針對僅供讀取複本接受及套用來源的變更時，應具備足夠的運算及儲存資源。如僅供讀取複本達到運算、網路或儲存資源上限時，僅供讀取複本會停止接受或套用來源的變更。您可以從來源和其他僅供讀取複本獨立修改僅供讀取複本的儲存和 CPU 資源。

如需有關如何建立僅供讀取複本的詳細資訊，請參閱 [建立僅供讀取複本](USER_ReadRepl.Create.md)。

## 使用 SQL Server 的僅供讀取複本限制
<a name="SQLServer.ReadReplicas.Limitations"></a>

下列限制適用於上的 Amazon RDS 上的 SQL Server 僅供讀取複本：
+ 僅供讀取複本只適用於 SQL Server Enterprise Edition (EE) 引擎。
+ 僅供讀取複本可供 SQL Server 2016–2022 版使用。
+ 單一來源資料庫執行個體可建立至多 15 個僅供讀取複本。當您的來源資料庫執行個體有超過 5 個僅供讀取複本時，複寫可能會延遲。
+ 僅供讀取複本只適用於資料庫執行個體執行於資料庫執行個體類別具有四個或以上的虛擬 vCPU。
+ 僅供讀取複本最多支援 100 個資料庫，具體取決於執行個體類別類型和可用性模式。您必須在來源資料庫執行個體上建立資料庫，以自動將其複寫至僅供讀取複本。您無法選擇個別資料庫進行複寫。如需詳細資訊，請參閱 [Microsoft SQL Server 資料庫執行個體的限制](CHAP_SQLServer.md#SQLServer.Concepts.General.FeatureSupport.Limits)。
+ 您無法從僅供讀取複本捨棄資料庫。若要捨棄資料庫，請使用 `rds_drop_database` 預存程序從來源資料庫執行個體加以捨棄。如需詳細資訊，請參閱 [在 Amazon RDS for Microsoft SQL Server 資料庫執行個體中捨棄資料庫](Appendix.SQLServer.CommonDBATasks.DropMirrorDB.md)。
+ 如果來源資料庫執行個體使用透明資料加密 (TDE) 來加密資料，僅供讀取複本也會自動設定 TDE。

  如果來源資料庫執行個體使用 KMS 金鑰加密資料，則相同區域中的僅供讀取複本也會使用相同的 KMS 金鑰。對於跨區域僅供讀取複本，您必須在建立僅供讀取複本時，指定來自僅供讀取複本所屬區域的 KMS 金鑰。您無法變更僅供讀取複本的 KMS 金鑰。
+ 僅供讀取複本具有與來源資料庫執行個體相同的時區和定序，無論其建立所在的可用區域為何。
+ SQL Server 的 Amazon RDS 不支援下列項目：
  + 僅供讀取複本的備份保留
  + 從僅供讀取複本進行的時間點復原
  + 僅供讀取複本的手動快照
  + 異地同步備份僅供讀取複本
  + 建立僅供讀取複本的僅供讀取複本
  + 使用者登入至僅供讀取複本的同步處理
+ SQL Server 的 Amazon RDS 來源資料庫執行個體與僅供讀取複本之間不會相互干涉，以降低複寫時的高延遲。確保資料庫執行個體及僅供讀取複本都依照運算能力和儲存適當的調整大小，以搭配工作負載。
+ 您可以在 AWS GovCloud (US-East) 和 AWS GovCloud (US-West) 區域之間進行複寫，但不能複寫入 AWS GovCloud (US) Regions 或在其之外進行複寫。

## RDS for SQL Server 複本的選項考量
<a name="SQLServer.ReadReplicas.limitations.options"></a>

建立 RDS for SQL Server 複本之前，請先考慮下列要求、限制和建議：
+ 如果 SQL Server 複本與其來源資料庫執行個體位於相同的區域，請確定它與來源資料庫執行個體屬於相同的選項群組。修改來源選項群組或來源選項群組成員參數到複本。套用至來源資料庫執行個體後變更會立即套用至複本，不論複本是否在維護視窗。

  如需選項群組的詳細資訊，請參閱[使用選項群組](USER_WorkingWithOptionGroups.md)。
+ 當您建立 SQL Server 跨區域複本時，Amazon RDS 會為此複本建立專用選項群組。

  您無法從專用選項群組中移除 SQL Server 跨區域複本。其他資料庫執行個體都不能使用 SQL Server 跨區域複本的專用選項群組。

  下列選項是複寫選項：若要將複寫選項新增至 SQL Server 跨區域複本，請將其新增至來源資料庫執行個體的選項群組。選項也安裝在所有來源資料庫執行個體的複本上。
  + `TDE`

  下列選項是非複寫選項：您可以從專用選項群組新增或移除下列非複寫選項：
  + `MSDTC`
  + `SQLSERVER_AUDIT`
  + 若要在跨區域僅供讀取複本上啟用 `SQLSERVER_AUDIT` 選項，請在跨區域僅供讀取複本的專用選項群組和來源執行個體的選項群組上新增 `SQLSERVER_AUDIT` 選項。透過在 SQL Server 跨區域僅供讀取複本的來源執行個體上新增 `SQLSERVER_AUDIT` 選項，您可以在來源執行個體的每個跨區域僅供讀取複本上建立伺服器層級稽核物件和伺服器層級稽核規格。若要允許跨區域僅供讀取複本存取，以將完成的稽核日誌上傳到 Amazon S3 儲存貯體，請將 `SQLSERVER_AUDIT` 選項新增到專用選項群組，並設定選項設定。您用作稽核檔案目標的 Amazon S3 儲存貯體必須與跨區域僅供讀取複本位在同一區域。您可以獨立修改每個跨區域僅供讀取複本之 `SQLSERVER_AUDIT` 選項的選項設定，以便每個複本都可以存取各自區域中的 Amazon S3 儲存貯體。

  僅供讀取複本不支援下列選項。
  + `SSRS`
  + `SSAS`
  + `SSIS`

  跨區域僅供讀取複本局部支援下列選項：
  + `SQLSERVER_BACKUP_RESTORE`
  + SQL Server 跨區域複本的來源資料庫執行個體可以具有 `SQLSERVER_BACKUP_RESTORE` 選項，但您無法在來源資料庫執行個體上執行原生還原，直到刪除其所有跨區域複本為止。建立跨區域複本期間，將會取消任何現有的原生還原任務。您無法將 `SQLSERVER_BACKUP_RESTORE` 選項新增至專用選項群組。

    如需原生備份和還原的詳細資訊，請參閱 [使用原生備份和還原，匯入和匯出 SQL Server 資料庫](SQLServer.Procedural.Importing.md)。

  當您提升 SQL Server 跨區域僅供讀取複本時，提升的複本就像其他 SQL Server 資料庫執行個體一樣運作，包括管理其選項。如需選項群組的詳細資訊，請參閱[使用選項群組](USER_WorkingWithOptionGroups.md)。

# 使用 SQL Server 僅供讀取複本同步資料庫使用者和物件
<a name="SQLServer.ReadReplicas.ObjectSynchronization"></a>

建立僅供讀取複本時，主要資料庫執行個體中存在的任何登入、自訂伺服器角色、SQL 代理程式任務或其他伺服器層級物件都應該會呈現在新建立的僅供讀取複本中。不過，建立僅供讀取複本後，在主要資料庫執行個體中建立的任何伺服器層級物件都不會自動複寫，而且您必須在僅供讀取複本中手動建立這些物件。

資料庫使用者會自動從主要資料庫執行個體複寫到僅供讀取複本。由於僅供讀取複本資料庫處於唯讀模式，因此無法在資料庫中更新資料庫使用者的安全性識別碼 (SID)。因此，在僅供讀取複本中建立 SQL 登入時，務必確保該登入的 SID 符合主要資料庫執行個體中對應 SQL 登入的 SID。如果您未同步 SQL 登入的 SID，它們將無法存取僅供讀取複本中的資料庫。Windows Active Directory (AD) 驗證的登入不會遇到這個問題，因為 SQL Server 會從 Active Directory 取得 SID。

**將主要資料庫執行個體中的 SQL 登入同步至僅供讀取複本**

1. 連線至主要資料庫執行個體。

1. 在主要資料庫執行個體中建立新的 SQL 登入。

   ```
   USE [master]
   GO
   CREATE LOGIN TestLogin1
   WITH PASSWORD = 'REPLACE WITH PASSWORD';
   ```
**注意**  
指定此處所顯示提示以外的密碼，作為安全最佳實務。

1. 為資料庫中的 SQL 登入建立新的資料庫使用者。

   ```
   USE [REPLACE WITH YOUR DB NAME]
   GO
   CREATE USER TestLogin1 FOR LOGIN TestLogin1;
   GO
   ```

1. 檢查主要資料庫執行個體中新建立之 SQL 登入的 SID。

   ```
   SELECT name, sid FROM sys.server_principals WHERE name =  'TestLogin1';
   ```

1. 連線至僅供讀取複本。建立新的 SQL 登入。

   ```
   CREATE LOGIN TestLogin1 WITH PASSWORD = 'REPLACE WITH PASSWORD', SID=REPLACE WITH sid FROM STEP #4;
   ```

**或者，如果您有僅供讀取複本資料庫的存取權，則可以依照下列方式修正孤立的使用者：**

1. 連線至僅供讀取複本。

1. 識別資料庫中孤立的使用者。

   ```
   USE [REPLACE WITH YOUR DB NAME]
   GO
   EXEC sp_change_users_login 'Report';
   GO
   ```

1. 為孤立的資料庫使用者建立新的 SQL 登入。

   ```
   CREATE LOGIN TestLogin1 WITH PASSWORD = 'REPLACE WITH PASSWORD', SID=REPLACE WITH sid FROM STEP #2;
   ```

   範例：

   ```
   CREATE LOGIN TestLogin1 WITH PASSWORD = 'TestPa$$word#1', SID=0x1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P;
   ```
**注意**  
指定此處所顯示提示以外的密碼，作為安全最佳實務。

# 對 SQL Server 僅供讀取複本問題進行故障診斷
<a name="SQLServer.ReadReplicas.Troubleshooting"></a>

您可以在 Amazon CloudWatch 中透過檢視 Amazon RDS `ReplicaLag` 指標來監控複寫延遲。如需複寫延遲時間的資訊，請參閱 [監控僅供讀取複本](USER_ReadRepl.Monitoring.md)。

如複寫延遲的時間過長，您可以使用下列查詢以取得延遲相關資訊。

```
SELECT AR.replica_server_name
     , DB_NAME (ARS.database_id) 'database_name'
     , AR.availability_mode_desc
     , ARS.synchronization_health_desc
     , ARS.last_hardened_lsn
     , ARS.last_redone_lsn
     , ARS.secondary_lag_seconds
FROM sys.dm_hadr_database_replica_states ARS
INNER JOIN sys.availability_replicas AR ON ARS.replica_id = AR.replica_id
--WHERE DB_NAME(ARS.database_id) = 'database_name'
ORDER BY AR.replica_server_name;
```

# Amazon RDS for Microsoft SQL Server 的異地同步備份部署
<a name="USER_SQLServerMultiAZ"></a>

「異地同步備份部署」可提高資料庫執行個體的可用性、資料耐用性和容錯能力。在進行已規劃的資料庫維護或發生意外的服務中斷時，Amazon RDS 會自動容錯移轉到最新的次要資料庫執行個體。此功能可讓資料庫操作迅速恢復，而不需要手動介入。主要和待命執行個體使用相同的端點，而此端點的實體網路地址在容錯移轉過程中會轉移到次要複本。當容錯移轉發生時，您不必重新設定應用程式。

Amazon RDS 使用 SQL Server 資料庫鏡像 (DBM)、 Always On 可用性群組 (AGs異地同步備份部署。Amazon RDS 會監控和維護異地同步備份部署的運作狀態。如果發生問題，RDS 會自動修復運作不良的資料庫執行個體、重新建立同步處理，以及啟動容錯移轉。只有當待命和主要執行個體完全同步時，容錯移轉才會發生。您什麼都不必管理。

當您設定 SQL Server Multi-AZ 時，RDS 會自動將執行個體上的所有資料庫設定為使用 DBM、AGs或區塊層級複寫。當您設定 DBM 或 AGs 時，Amazon RDS 會為您處理主要、見證和次要資料庫執行個體。對於區塊層級複寫，RDS 會處理主要和次要資料庫執行個體。由於組態是自動的，RDS 會根據您部署的 SQL Server 版本，選取 DBM、AGs 或區塊層級複寫。

Amazon RDS 支援下列 SQL Server 版本和版次使用異地同步備份搭配 Always On AG：
+ SQL Server 2022：
  + 標準版本
  + 企業版本
+ SQL Server 2019：
  + Standard Edition 15.00.4073.23 版和更高版本
  + 企業版本
+ SQL Server 2017：
  + Standard Edition 14.00.3401.7 版和更高版本
  + Enterprise Edition 14.00.3049.1 版和更高版本
+ SQL Server 2016：企業版 13.00.5216.0 版和更新版本

Amazon RDS 支援下列 SQL Server 版本使用異地同步備份搭配 DBM，但先前提到的版本除外：
+ SQL Server 2019：標準版 15.00.4043.16 版
+ SQL Server 2017︰Standard 和 Enterprise Edition
+ SQL Server 2016︰Standard 和 Enterprise Edition 

Amazon RDS 支援具有 SQL Server 2022 Web Edition 16.00.4215.2 及更高版本的區塊層級複寫的異地同步備份。

**注意**  
只有使用 16.00.4215.2 或更高版本建立的新資料庫執行個體支援具有區塊層級複寫的異地同步備份部署。下列限制適用於現有的 SQL Server 2022 Web Edition 執行個體：  
對於 16.00.4215.2 版上的現有執行個體，您必須將快照還原至具有相同或更高次要版本的新執行個體，才能啟用區塊層級複寫。
具有較舊次要版本的 SQL Server 2022 Web 執行個體可以升級至次要版本 16.00.4215.2 或更新版本，以啟用區塊層級複寫。

您可以使用下列 SQL 查詢來判斷 SQL Server 資料庫執行個體是單一可用區、採用 DBM 的多可用區域，或是採用 Always On AG 的多可用區域。此查詢不適用於 SQL Server Web Edition 上的異地同步備份部署。

```
SELECT CASE WHEN dm.mirroring_state_desc IS NOT NULL THEN 'Multi-AZ (Mirroring)'
    WHEN dhdrs.group_database_id IS NOT NULL THEN 'Multi-AZ (AlwaysOn)'
    ELSE 'Single-AZ'
    END 'high_availability'
FROM sys.databases sd
LEFT JOIN sys.database_mirroring dm ON sd.database_id = dm.database_id
LEFT JOIN sys.dm_hadr_database_replica_states dhdrs ON sd.database_id = dhdrs.database_id AND dhdrs.is_local = 1
WHERE DB_NAME(sd.database_id) = 'rdsadmin';
```

輸出看起來會與以下內容相似：

```
high_availability
Multi-AZ (AlwaysOn)
```

## 將多可用區域新增至 Microsoft SQL Server 資料庫執行個體
<a name="USER_SQLServerMultiAZ.Adding"></a>

當您使用 建立新的 SQL Server 資料庫執行個體時 AWS 管理主控台，您可以新增具有資料庫鏡像 (DBM)、 Always On AGs或區塊層級複寫的異地同步備份。您可以透過選擇**異地同步備份部署**中的**是 （鏡像/永遠開啟/區塊層級複寫） **來執行此操作。如需詳細資訊，請參閱[建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。

當您使用主控台修改現有的 SQL Server 資料庫執行個體時，您可以從**修改資料庫執行個體**頁面上的異地同步備份部署中選擇是 （鏡射/永遠開啟/區塊層級複寫），以 DBM、AGs 或區塊層級複寫新增異地同步備份。 **** ****如需詳細資訊，請參閱[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

**注意**  
如果您的資料庫執行個體正在執行資料庫鏡像 (DBM) —並非 Always On 可用性群組 (AG)，則—可能需要先停用記憶體內最佳化，再新增異地同步備份。如果您的資料庫執行個體執行 SQL Server 2016 或 2017 Enterprise Edition，並啟用記憶體內最佳化，請在新增多可用區域之前停用 DBM 的記憶體內最佳化。  
如果您的資料庫執行個體正在執行 SQL Server Web Edition AGs 或區塊層級複寫，則不需要此步驟。

## 從 Microsoft SQL Server 資料庫執行個體移除多可用區域
<a name="USER_SQLServerMultiAZ.Removing"></a>

當您使用 修改現有的 SQL Server 資料庫執行個體時 AWS 管理主控台，您可以使用 DBM、AGs或區塊層級複寫來移除異地同步備份。您可以在**修改資料庫執行個體**頁面上，從**異地同步備份部署**中選擇**否 （鏡射/永遠開啟/區塊層級複寫）**。如需詳細資訊，請參閱[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

# Microsoft SQL Server 異地同步備份部署限制、備註和建議
<a name="USER_SQLServerMultiAZ.Recommendations"></a>

下列是對 RDS for SQL Server 資料庫執行個體使用多可用區部署的一些限制：
+ 不支援跨區域的多可用區域。
+ 不支援停止多可用區部署中的 RDS for SQL Server 資料庫執行個體。
+ 您無法設定次要資料庫執行個體來接受資料庫讀取活動。
+ 多可用區域搭配 Always On 可用區 (AG) 支援記憶體內最佳化。
+ 具有 Always On 可用性群組 (AG) 的異地同步備份不支援可用性群組接聽程式的 Kerberos 驗證。這是因為接聽程式沒有服務委託人名稱 (SPN)。
+ 具有區塊層級複寫的異地同步備份目前僅支援 SQL Server Web Edition 執行個體。
+ 在 SQL Server 異地同步備份部署中的 SQL Server 資料庫執行個體上，您無法重新命名資料庫。如果您需要在這類執行個體上重新命名資料庫，請先對資料庫執行個體關閉多可用區域，再重新命名資料庫。最後，對資料庫執行個體重新開啟多可用區域。
+ 您只能還原使用完整還原模型備份的多可用區域資料庫執行個體。
+ 多可用區域部署有 10,000 個 SQL Server Agent 任務的限制。

  如果您需要更高的限制，請聯絡 請求提高限制 支援。開啟 [AWS 支援 中心](https://console.aws.amazon.com/support/home#/)頁面，如有必要請登入，然後選擇 **Create case** (建立案例)。選擇 **Service limit increase (提高服務限制)**。填妥並提交表格。
+ 在 SQL Server 多可用區域部署中的 SQL Server 資料庫執行個體上，不可以有離線資料庫。
+ RDS for SQL Server 不會將 MSDB 資料庫許可複寫至次要執行個體。如果您在次要執行個體上需要這些許可，必須手動重新建立這些許可。
+ 磁碟區指標不適用於使用區塊層級複寫的執行個體次要主機。

下列是對 RDS for SQL Server 資料庫執行個體使用多可用區域部署的一些相關備註：
+ Amazon RDS 公開 Always On AG [可用性群組接聽程式端點](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/listeners-client-connectivity-application-failover)。此端點會出現在主控台，而且由 `DescribeDBInstances` API 作業在端點欄位中傳回。
+ Amazon RDS 支援[可用性群組多重子網路容錯移轉](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/listeners-client-connectivity-application-failover)。
+ 若要對虛擬私有雲端 (VPC) 中的 SQL Server 資料庫執行個體使用 SQL Server 多可用區域，首先請建立在至少兩個不同可用區域中有子網路的資料庫子網路群組。然後，將該資料庫子網路群組指派給 SQL Server 資料庫執行個體的主要複本。
+ 當資料庫執行個體修改為異地同步備份部署時，其在修改期間的狀態為 **modifying** (修改中)。Amazon RDS 會建立待命執行個體，並建立主要資料庫執行個體的備份。在程序完成之後，主要資料庫執行個體的狀態會變成 **available (可用)**。
+ 異地同步備份部署會在相同節點上維護所有資料庫。如果主要主機上的資料庫容錯移轉，您的所有 SQL Server 資料庫會以一個不可分割的單位容錯移轉至您的待命主機。Amazon RDS 會佈建運作狀態良好的新主機，並取代狀況不良的主機。
+ 具有 DBM、AGs異地同步備份支援單一待命複本。
+ 使用者、登入和許可會自動複寫到次要主機。您不需要重新建立這些資料。使用者定義的伺服器角色會在資料庫執行個體中複寫，這些執行個體使用 Always On AGs或多可用區部署的區塊層級複寫。
+ 在多可用區域部署中，RDS for SQL Server 會建立 SQL Server 登入，以允許 Always On AG 或資料庫鏡像。RDS 會使用下列模式建立登入：`db_<dbiResourceId>_node1_login`、`db_<dbiResourceId>_node2_login` 和 `db_<dbiResourceId>_witness_login`。
+ RDS for SQL Server 會建立 SQL Server 登入以允許存取僅供讀取複本。RDS 會使用下列模式建立登入：`db_<readreplica_dbiResourceId>_node_login`。
+ 在多可用區域部署中，當任務複寫功能開啟時，SQL Server Agent 任務從主要主機複製至次要主機。如需詳細資訊，請參閱[開啟 SQL Server Agent 任務複寫](Appendix.SQLServer.CommonDBATasks.Agent.md#SQLServerAgent.Replicate)。
+ 由於同步資料複寫，相較於標準資料庫執行個體部署 (在單一可用區域中)，您可能會發現延遲增加情形。
+ 容錯移轉時間會受到完成復原程序所需的時間影響。大型交易會增加此容錯移轉時間。
+ 於 SQL Server 異地同步備份部署中，透過容錯移轉重新啟動只會重新啟動主要資料庫執行個體。在容錯移轉之後，主要資料庫執行個體會成為新的次要資料庫執行個體。多可用區域執行個體的參數可能無法更新。若要在無容錯移轉的情況下重新啟動，主要和次要資料庫執行個體會在重新啟動後更新參數。若資料庫執行個體沒有回應，建議您重新開機，不要進行容錯移轉。

下列是對 RDS for Microsoft SQL Server 資料庫執行個體使用異地同步備份部署的一些建議：
+ 針對生產階段或生產前階段所用的資料庫，建議您使用下列選項：
  + 針對高可用性的異地同步備份部署
  + 「佈建 IOPS」可取得快速一致的績效
  + 「最佳化記憶體」而非「一般用途」
+ 您無法為次要執行個體選取可用區域 (AZ)，因此，當您部署應用程式主機時，請將此納入考量。您的資料庫可能容錯移轉至其他 AZ，而且應用程式主機和資料庫可能不是在相同的 AZ 中。因此，我們建議您在指定 AWS 區域的所有 AZs 之間平衡應用程式主機。
+ 為了獲得最佳效能，請勿在大型資料載入操作期間啟用資料庫鏡像、 Always On AGs或區塊層級複寫。如果要盡快載入您的資料，請在將您的資料庫執行個體轉換為異地同步備份部署之前完成載入資料。
+ 存取 SQL Server 資料庫的應用程式應該具有例外處理能力可捕捉連接錯誤。下列程式碼範例示範捕捉通訊錯誤的 try/catch 區塊。在這個範例中，如果連線成功，`break` 陳述式會結束 `while` 迴圈，但如果擲回例外狀況，則重試最多 10 次。

  ```
  int RetryMaxAttempts = 10;
  int RetryIntervalPeriodInSeconds = 1;
  int iRetryCount = 0;
  while (iRetryCount < RetryMaxAttempts)
  {
     using (SqlConnection connection = new SqlConnection(DatabaseConnString))
     {
        using (SqlCommand command = connection.CreateCommand())
        {
           command.CommandText = "INSERT INTO SOME_TABLE VALUES ('SomeValue');";
           try
           {
              connection.Open();
              command.ExecuteNonQuery();
              break;
           }
           catch (Exception ex) 
           {
              Logger(ex.Message);
              iRetryCount++;
           }
           finally {
              connection.Close();
           }
        }
     }
     Thread.Sleep(RetryIntervalPeriodInSeconds * 1000);
  }
  ```
+ 使用 DBM 或 AGs 處理多可用區域執行個體時，請勿使用 `Set Partner Off`命令。使用區塊層級複寫的執行個體不支援此命令。例如，請勿執行以下操作。

  ```
  --Don't do this
  ALTER DATABASE db1 SET PARTNER off
  ```
+ 請勿將復原模式設為 `simple`。例如，請勿執行以下操作。

  ```
  --Don't do this
  ALTER DATABASE db1 SET RECOVERY simple
  ```
+ 除非使用區塊層級複寫以獲得高可用性，否則在多可用區域資料庫執行個體上建立新的登入時請勿使用 `DEFAULT_DATABASE` 參數，因為這些設定無法套用至待命鏡像。例如，請勿執行以下操作。

  ```
  --Don't do this
  CREATE LOGIN [test_dba] WITH PASSWORD=foo, DEFAULT_DATABASE=[db2]
  ```

  也請勿執行以下操作。

  ```
  --Don't do this
  ALTER LOGIN [test_dba] WITH DEFAULT_DATABASE=[db3]
  ```

# 查明次要複本的位置
<a name="USER_SQLServerMultiAZ.Location"></a>

您可以使用 AWS 管理主控台來查明次要複本的位置。如果是在 VPC 中設定您的主要資料庫執行個體，您需要知道次要複本的位置。

![\[Secondary AZ (次要 AZ)\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/SQLSvr-MultiAZ.png)


您也可以使用 AWS CLI 命令`describe-db-instances`或 RDS API 操作 來檢視次要 的可用區域`DescribeDBInstances`。輸出會顯示待命鏡像所在的次要 AZ。

# 從資料庫鏡像遷移到 Always On 可用性群組 (AG)
<a name="USER_SQLServerMultiAZ.Migration"></a>

Microsoft SQL Server 企業版本的 14.00.3049.1 版中，依預設可啟用 Always On 可用性群組 (AG)。

若要從資料庫鏡像 (DBM) 遷移到可用性群組 (AG)，請先檢查您的版本。如果您使用的資料庫執行個體是企業版 13.00.5216.0 以前的版本，請修改執行個體來修補為 13.00.5216.0 或更新版本。如果您使用的資料庫執行個體是企業版 14.00.3049.1 以前的版本，請修改執行個體來修補為 14.00.3049.1 或更新版本。

如果您想要升級鏡像資料庫執行個體以使用可用性群組，請先升級、修改執行個體以移除多可用區域，然後再次修改以新增多可用區域。這樣會將您的執行個體轉換為使用 Always On 可用性群組。

# Microsoft SQL Server on Amazon RDS 的其他功能
<a name="User.SQLServer.AdditionalFeatures"></a>

在下列章節中，您可以找到執行 Microsoft SQL Server 資料庫引擎擴增 Amazon RDS 執行個體的相關資訊。

**Topics**
+ [在 RDS for SQL Server 上使用密碼政策進行 SQL Server 登入](SQLServer.Concepts.General.PasswordPolicy.Using.md)
+ [整合 Amazon RDS for SQL Server 資料庫執行個體和 Amazon S3](User.SQLServer.Options.S3-integration.md)
+ [在 Amazon RDS for SQL Server 上使用 Database Mail](SQLServer.DBMail.md)
+ [執行個體存放區支援 Amazon RDS for SQL Server 上的 tempdb 資料庫](SQLServer.InstanceStore.md)
+ [搭配 Amazon RDS for Microsoft SQL Server 使用擴充事件](SQLServer.ExtendedEvents.md)
+ [使用 RDS for SQL Server 存取交易日誌備份](USER.SQLServer.AddlFeat.TransactionLogAccess.md)

# 在 RDS for SQL Server 上使用密碼政策進行 SQL Server 登入
<a name="SQLServer.Concepts.General.PasswordPolicy.Using"></a>

Amazon RDS 可讓您為執行 Microsoft SQL Server 的 Amazon RDS 資料庫執行個體設定密碼政策。採用此做法，為使用 SQL Server 驗證對您的資料庫執行個體進行身分驗證的登入設定複雜性、長度和鎖定需求。

## 重要用語
<a name="SQLServer.Concepts.General.PasswordPolicy.Using.KT"></a>

**登入**  
在 SQL Server 中，可以向資料庫執行個體進行身分驗證的伺服器層級主體稱為**登入**。其他資料庫引擎可能會將此主體稱為*使用者*。在 RDS for SQL Server 中，登入可以使用 SQL Server 驗證或 Windows 驗證進行身分驗證。

**SQL Server 登入**  
使用 SQL Server 驗證以使用者名稱和密碼進行身分驗證的登入，是 SQL Server 登入。您透過資料庫參數設定的密碼政策，僅適用於 SQL Server 登入。

**Windows 登入**  
以 Windows 主體為基礎，並使用 Windows 驗證進行身分驗證的登入，是 Windows 登入。您可以在 Active Directory 中為 Windows 登入設定密碼政策。如需詳細資訊，請參閱 [使用 Active Directory 搭配 RDS for SQL Server](User.SQLServer.ActiveDirectoryWindowsAuth.md)。

## 啟用和停用每次登入的政策
<a name="SQLServer.Concepts.General.PasswordPolicy.EnableDisable"></a>

 每次 SQL Server 登入都會有 `CHECK_POLICY` 和 `CHECK_EXPIRATION` 的旗標。依預設會建立新的登入，並將 `CHECK_POLICY` 設定為 `ON`，`CHECK_EXPIRATION` 設定為 `OFF`。

如果為登入啟用了 `CHECK_POLICY`，RDS for SQL Server 將會根據複雜性和長度下限需求驗證密碼。鎖定政策也適用。啟用 `CHECK_POLICY` 和 `CHECK_EXPIRATION` 的範例 T-SQL 陳述式：

```
ALTER LOGIN [master_user] WITH CHECK_POLICY = ON, CHECK_EXPIRATION = ON;
```

如果啟用了 `CHECK_EXPIRATION`，密碼將會受限於密碼使用期限政策。檢查是否設定了 `CHECK_POLICY` 和 `CHECK_EXPIRATION` 的 T-SQL 陳述式：

```
SELECT name, is_policy_checked, is_expiration_checked FROM sys.sql_logins;
```

## 密碼政策參數
<a name="SQLServer.Concepts.General.PasswordPolicy.PWDPolicyParams"></a>

所有密碼政策參數都是動態的，無須將資料庫重新開機即可生效。下表列出您可以設定哪些資料庫參數來修改 SQL Server 登入的密碼政策：


****  

| 資料庫參數 | 描述 | 允許值 | 預設值 | 
| --- | --- | --- | --- | 
| rds.password\$1complexity\$1enabled | 建立或變更 SQL Server 登入的密碼時，必須符合密碼複雜性需求。必須符合下列限制條件：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/SQLServer.Concepts.General.PasswordPolicy.Using.html)  | 0,1 | 0 | 
| rds.password\$1min\$1length | SQL Server 登入的密碼中所需的字元數下限。 | 0-14 | 0 | 
| rds.password\$1min\$1age | 使用者在能夠變更 SQL Server 登入密碼之前必須使用密碼的天數下限。設定為 0 時，可立即變更密碼。 | 0-998 | 0 | 
| rds.password\$1max\$1age | 使用者在必須變更 SQL Server 登入密碼之前可使用密碼的天數上限。設定為 0 時，密碼永遠不會過期。 | 0-999 | 42 | 
| rds.password\$1lockout\$1threshold | 導致 SQL Server 登入遭到鎖定的連續登入失敗嘗試次數。 | 0-999 | 0 | 
| rds.password\$1lockout\$1duration | 鎖定的 SQL Server 登入在解除鎖定之前必須等待的分鐘數。 | 1-60 | 10 | 
| rds.password\$1lockout\$1reset\$1counter\$1after | 在失敗的登入嘗試之後，失敗登入嘗試計數器重設為 0 之前必須經過的分鐘數。 | 1-60 | 10 | 

**注意**  
如需 SQL Server 密碼政策的詳細資訊，請參閱[密碼政策](https://learn.microsoft.com/en-us/sql/relational-databases/security/password-policy)。  
密碼複雜性和長度下限政策也適用於自主資料庫中的資料庫使用者。如需詳細資訊，請參閱[自主資料庫](https://learn.microsoft.com/en-us/sql/relational-databases/databases/contained-databases)。

下列限制條件適用於密碼政策參數：
+ `rds.password_min_age` 參數必須小於 `rds.password_max_age parameter`，除非 `rds.password_max_age` 設定為 0
+ `rds.password_lockout_reset_counter_after` 參數必須小於或等於 `rds.password_lockout_duration` 參數。
+ 如果 `rds.password_lockout_threshold` 設定為 0，則不適用 `rds.password_lockout_duration` 和 `rds.password_lockout_reset_counter_after`。

### 現有登入的考量
<a name="SQLServer.Concepts.General.PasswordPolicy.ExistingLogins"></a>

在執行個體上修改密碼政策後，**不會**根據新的密碼複雜性和長度需求回溯評估現有的登入密碼。只有新密碼會根據新政策進行驗證。

SQL Server **會**評估現有密碼的使用期限需求。

修改密碼政策後，密碼可能會立即過期。例如，如果登入已啟用 `CHECK_EXPIRATION`，且其密碼上次變更是在 100 天前，而您將 `rds.password_max_age` 參數設定為 5 天，則密碼會立即過期，登入必須在下次嘗試登入時變更密碼。

**注意**  
RDS for SQL Server 不支援密碼歷史記錄政策。歷史記錄政策可防止登入重複使用先前使用的密碼。

### 多可用區域部署考量
<a name="SQLServer.Concepts.General.PasswordPolicy.MAZPasswords"></a>

多可用區域執行個體的失敗登入嘗試計數器和鎖定狀態不會在節點間複寫。若登入在多可用區執行個體容錯移轉時遭到鎖定，該登入在新節點上有可能已解除鎖定。

# 主要登入的密碼考量
<a name="SQLServer.Concepts.General.PasswordPolicy.MasterLogin"></a>

當您建立 RDS for SQL Server 資料庫執行個體時，並不會根據密碼政策來評估主要使用者密碼。在對主要使用者執行操作時 (特別是在 `ModifyDBInstance` 命令中設定 `MasterUserPassword` 時)，也不會根據密碼評估新的主要密碼。在這兩種情況下，您都可以為主要使用者設定不符合密碼政策的密碼，且操作仍會成功。不符合政策時，RDS 會嘗試引發 RDS 事件，並建議設定強式密碼。請注意，強式密碼只應對主要使用者使用。

當主要使用者密碼不符合密碼政策需求時，RDS 會嘗試產生下列事件訊息：
+ 主要使用者已建立，但密碼不符合密碼政策的長度下限需求。考慮使用更嚴格的密碼。
+ 主要使用者已建立，但密碼不符合密碼政策的複雜性需求。考慮使用更嚴格的密碼。
+ 主要使用者密碼已重設，但密碼不符合密碼政策的長度下限需求。考慮使用更嚴格的密碼。
+ 主要使用者密碼已重設，但密碼不符合密碼政策的複雜性需求。考慮使用更嚴格的密碼。

根據預設，建立主要使用者時會將 `CHECK_POLICY` 和 `CHECK_EXPIRATION` 設定為 `OFF`。若要將密碼政策套用至主要使用者，您必須在建立資料庫執行個體後手動為主要使用者啟用這些旗標。啟用這些旗標後，請直接在 SQL Server 中修改主要使用者密碼 (例如，透過 T-SQL 陳述式或 SSMS)，以根據密碼政策驗證新密碼。

**注意**  
如果主要使用者遭到鎖定，您可以使用 `ModifyDBInstance` 命令重設主要使用者密碼，將使用者解除鎖定。

## 修改主要使用者密碼
<a name="SQLServer.Concepts.General.PasswordPolicy.MasterLogin.Reset"></a>

您可以使用 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) 命令修改主要使用者密碼。

**注意**  
當您重設主要使用者密碼時，RDS 會重設主要使用者的各種許可，而主要使用者可能會失去特定許可。重設主要使用者密碼也會將主要使用者解除鎖定 (如果遭到鎖定)。

RDS 驗證新的主要使用者密碼，並在密碼不符合政策時嘗試發出 RDS 事件。即使密碼不符合密碼政策，RDS 也會設定密碼。

# 整合 Amazon RDS for SQL Server 資料庫執行個體和 Amazon S3
<a name="User.SQLServer.Options.S3-integration"></a>

您可以在執行 Amazon RDS for SQL Server 的資料庫執行個體與 Amazon S3 儲存貯體之間傳輸檔案。這樣做可讓您搭配 SQL Server 功能來使用 Amazon S3，例如 BULK INSERT。例如，您可以從 Amazon S3 將 .csv、.xml、.txt 和其他檔案下載至資料庫執行個體主機，並將 `D:\S3\` 中的資料匯入資料庫。所有檔案都存放在資料庫執行個體的 `D:\S3\` 中。

有下列限制：

**注意**  
RDS 主機與 S3 之間的流量會透過 RDS 內部 VPC 端點進行路由，用於所有使用 S3 的 SQL Server 功能。此流量不使用 RDS 執行個體端點 ENI。S3 儲存貯體政策無法用網路條件來限制 RDS 流量。
+ 在多可用區域執行個體上進行容錯移轉後，會刪除待命複本上 `D:\S3` 資料夾中的檔案。如需詳細資訊，請參閱[S3 整合的多可用區域限制](#S3-MAZ)。
+ 資料庫執行個體和 S3 儲存貯體必須位於相同的 AWS 區域。
+ 如果您一次執行多個 S3 整合任務，這些任務會循序執行，而不是並行執行。
**注意**  
S3 整合任務與原生備份和還原任務有相同的佇列。不論何時，此佇列中最多只能有兩個任務在進行。因此，兩個執行中的原生備份和還原任務會封鎖任何 S3 整合任務。
+ 在已還原的執行個體上，您必須重新啟用 S3 整合功能。S3 整合不會從來源執行個體傳播到還原的執行個體。`D:\S3` 中的檔案會在還原的執行個體上刪除。
+ 下載至資料庫執行個體的檔案最多 100 個。換言之，`D:\S3\` 中的檔案不能超過 100 個。
+ 只有沒有副檔名或具有下列副檔名的檔案才支援下載：.abf、.asdatabase、.bcp、.configsettings、.csv、.dat、.deploymentoptions、.deploymenttargets、.fmt、.info、.ispac、.lst、.tbl、.txt、.xml 和 .xmla。
+ S3 儲存貯體必須與 related AWS Identity and Access Management (IAM) 角色具有相同的擁有者。因此，不支援跨帳戶 S3 整合。
+ 另外，S3 儲存貯體不能對外公開。
+ 從 RDS 上傳至 S3 的檔案大小限制為每個檔案 50 GB。
+ 從 S3 下載至 RDS 的檔案大小限制為 S3 支援的最大值。

**Topics**
+ [整合 RDS for SQL Server 與 S3 的先決條件](Appendix.SQLServer.Options.S3-integration.preparing.md)
+ [啟用 RDS for SQL Server 與 S3 的整合](Appendix.SQLServer.Options.S3-integration.enabling.md)
+ [在 RDS for SQL Server 與 Amazon S3 之間傳輸檔案](Appendix.SQLServer.Options.S3-integration.using.md)
+ [列出 RDS 資料庫執行個體上的檔案](Appendix.SQLServer.Options.S3-integration.using.listing-files.md)
+ [刪除 RDS 資料庫執行個體上的檔案](Appendix.SQLServer.Options.S3-integration.using.deleting-files.md)
+ [監控檔案傳輸任務的狀態](Appendix.SQLServer.Options.S3-integration.using.monitortasks.md)
+ [取消任務](Appendix.SQLServer.Options.S3-integration.canceltasks.md)
+ [S3 整合的多可用區域限制](#S3-MAZ)
+ [停用 RDS for SQL Server 與 S3 的整合](Appendix.SQLServer.Options.S3-integration.disabling.md)

如需有關使用 Amazon S3 中檔案的詳細資訊，請參閱 [Amazon Simple Storage Service 入門](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3)。

# 整合 RDS for SQL Server 與 S3 的先決條件
<a name="Appendix.SQLServer.Options.S3-integration.preparing"></a>

開始之前，請尋找或建立您要使用的 S3 儲存貯體。另外，新增許可，以允許 RDS DB 執行個體存取 S3 儲存貯體。若要設定此存取，請建立 IAM 政策和 IAM 角色。

## 主控台
<a name="Appendix.SQLServer.Options.S3-integration.preparing.console"></a>

**建立 IAM 政策以存取 Amazon S3**

1. 在 [IAM 管理主控台](https://console.aws.amazon.com/iam/home?#home)的導覽窗格中，選擇 **Policies (政策)**。

1. 建立新政策，並使用 **Visual editor (視覺化編輯器)** 索引標籤執行下列步驟。

1. 針對 **Service (服務)**，輸入 **S3**，然後選擇 **S3** 服務。

1. 針對 **Actions (動作)**，選擇下列選項，以授予資料庫執行個體所需的存取：
   + `ListAllMyBuckets` – 必要
   + `ListBucket` – 必要
   + `GetBucketAcl` – 必要
   + `GetBucketLocation` – 必要
   + `GetObject` – 將 S3 中的檔案下載至 時需要`D:\S3\`
   + `PutObject` – 將 `D:\S3\` 中的檔案上傳至 S3 時需要
   + `ListMultipartUploadParts` – 將 `D:\S3\` 中的檔案上傳至 S3 時需要
   + `AbortMultipartUpload` – 將 `D:\S3\` 中的檔案上傳至 S3 時需要

1. 針對 **Resources (資源)**，顯示的選項取決於您在上一步選擇的動作。您看到的選項可能是 **bucket (儲存貯體)**、**object (物件)** 或兩者都有。對於每一項，新增適當的 Amazon Resource Name (ARN)。

   針對 **bucket (儲存貯體)**，新增您要使用的儲存貯體的 ARN。例如，如果儲存貯體名為 *amzn-s3-demo-bucket*，請將 ARN 設為 `arn:aws:s3:::amzn-s3-demo-bucket`。

   針對 **object (物件)**，輸入儲存貯體的 ARN，然後選擇下列其中一個：
   + 若要允許存取指定儲存貯體中的所有檔案，對於 **Bucket name (儲存貯體)** 和 **Object name (物件名稱)**，請都選擇 **Any (任何)**。
   + 若要允許存取儲存貯體中的特定檔案或資料夾，請提供您要讓 SQL Server 存取的特定儲存貯體和物件的 ARN。

1. 遵循主控台的指示操作，直到完成建立政策。

   以上為設定政策的簡略指南。如需建立 IAM 政策的詳細指示，請參閱 *IAM 使用者指南*中的[建立 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

**建立 IAM 角色以使用前一個程序中的 IAM 政策**

1. 在 [IAM 管理主控台](https://console.aws.amazon.com/iam/home?#home)的導覽窗格中，選擇 **Roles (角色)**。

1. 建立新的 IAM 角色，並選擇以下出現在主控台的選項：
   + **AWS服務**
   + **RDS**
   + **RDS – Add Role to Database (RDS - 將角色新增至資料庫)**

   然後在底部選擇 **Next:Permissions (下一步：許可)**。

1. 針對 **Attach permissions policies (連接許可政策)**，輸入您先前建立的 IAM 政策的名稱。然後從清單中選擇該政策。

1. 遵循主控台的指示操作，直到完成建立角色。

   以上為設定角色的簡略指南。如需有關建立角色的詳細指示，請參閱*《IAM 使用者指南》*中的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。

## AWS CLI
<a name="Appendix.SQLServer.Options.S3-integration.preparing.CLI"></a>

使用以下程序，為 Amazon RDS 授予 Amazon S3 儲存貯體的存取權：

1. 建立 IAM 政策以允許 Amazon RDS 存取 S3 儲存貯體。

1. 建立 IAM 角色，讓 Amazon RDS 可代表您存取 S3 儲存貯體。

   如需更多詳細資訊，請參閱《*IAM 使用者指南*》中的[建立角色以將許可委派給 IAM 使用者](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)。

1. 將您建立的 IAM 政策附加至您建立的 IAM 角色。

**若要建立 IAM 政策**

包含適當動作，以授予資料庫執行個體所需的存取：
+ `ListAllMyBuckets` – 必要
+ `ListBucket` – 必要
+ `GetBucketAcl` – 必要
+ `GetBucketLocation` – 必要
+ `GetObject` – 將 S3 中的檔案下載至 時需要`D:\S3\`
+ `PutObject` – 將 `D:\S3\` 中的檔案上傳至 S3 時需要
+ `ListMultipartUploadParts` – 將 `D:\S3\` 中的檔案上傳至 S3 時需要
+ `AbortMultipartUpload` – 將 `D:\S3\` 中的檔案上傳至 S3 時需要

1. 下列AWS CLI命令會使用這些選項建立名為 `rds-s3-integration-policy`的 IAM 政策。其將存取權授予名為 *amzn-s3-demo-bucket* 的儲存貯體。  
**Example**  

   對於 Linux、macOS 或 Unix：

   ```
   aws iam create-policy \
   	 --policy-name rds-s3-integration-policy \
   	 --policy-document '{
   	        "Version": "2012-10-17",		 	 	 
   	        "Statement": [
   	            {
   	                "Effect": "Allow",
   	                "Action": "s3:ListAllMyBuckets",
   	                "Resource": "*"
   	            },
   	            {
   	                "Effect": "Allow",
   	                "Action": [
   	                    "s3:ListBucket",
   	                    "s3:GetBucketAcl",
   	                    "s3:GetBucketLocation"
   	                ],
   	                "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
   	            },
   	            {
   	                "Effect": "Allow",
   	                "Action": [
   	                    "s3:GetObject",
   	                    "s3:PutObject",
   	                    "s3:ListMultipartUploadParts",
   	                    "s3:AbortMultipartUpload"
   	                ],
   	                "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/key_prefix/*"
   	            }
   	        ]
   	    }'
   ```

   在 Windows 中：

   務必將行尾改成您的界面所支援的字元 (`^` 而不是 `\`)。另外，在 Windows 中，您必須以 `\` 逸出所有雙引號。為了避免需要在 JSON 中逸出雙引號，您可以將 JSON 儲存為檔案，然後當作參數傳遞。

   首先，建立包含下列許可政策的 `policy.json` 檔案：

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "s3:ListAllMyBuckets",
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket",
                   "s3:GetBucketACL",
                   "s3:GetBucketLocation"
               ],
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "s3:PutObject",
                   "s3:ListMultipartUploadParts",
                   "s3:AbortMultipartUpload"
               ],
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/key_prefix/*"
           }
       ]
   }
   ```

------

   然後，使用以下命令建立政策：

   ```
   aws iam create-policy ^
        --policy-name rds-s3-integration-policy ^
        --policy-document file://file_path/assume_role_policy.json
   ```

1. 政策建立後，請記下政策的 Amazon Resource Name (ARN)。後續步驟需要此 ARN。

**建立 IAM 角色**
+ 下列AWS CLI命令會為此目的建立 `rds-s3-integration-role` IAM 角色。  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws iam create-role \
  	   --role-name rds-s3-integration-role \
  	   --assume-role-policy-document '{
  	     "Version": "2012-10-17",		 	 	 
  	     "Statement": [
  	       {
  	         "Effect": "Allow",
  	         "Principal": {
  	            "Service": "rds.amazonaws.com"
  	          },
  	         "Action": "sts:AssumeRole"
  	       }
  	     ]
  	   }'
  ```

  在 Windows 中：

  務必將行尾改成您的界面所支援的字元 (`^` 而不是 `\`)。另外，在 Windows 中，您必須以 `\` 逸出所有雙引號。為了避免需要在 JSON 中逸出雙引號，您可以將 JSON 儲存為檔案，然後當作參數傳遞。

  首先，建立包含下列政策的 `assume_role_policy.json` 檔案：

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Principal": {
                  "Service": [
                      "rds.amazonaws.com"
                  ]
              },
              "Action": "sts:AssumeRole"
          }
      ]
  }
  ```

------

  使用以下命令建立 IAM 角色：

  ```
  aws iam create-role ^
       --role-name rds-s3-integration-role ^
       --assume-role-policy-document file://file_path/assume_role_policy.json
  ```  
**Example 使用全域條件內容索引鍵建立 IAM 角色**  

  建議您在資源型政策中使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全域條件內容索引鍵，將服務的許可限定於特定資源。這是防止[混淆代理人問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)最有效的方式。

  您可以同時使用全域條件內容索引鍵和包含帳號 ID 的 `aws:SourceArn` 值。在此情況下，當在相同政策陳述式中使用 `aws:SourceAccount` 值和 `aws:SourceArn` 裡的帳户時，兩者必須使用同樣的帳户 ID。
  + 如果您想要跨服務存取單一資源，請使用 `aws:SourceArn`。
  + 如果您想要允許該帳戶中的任何資源與跨服務使用相關聯，請使用 `aws:SourceAccount`。

  在政策中，請務必使用 `aws:SourceArn` 全域條件內容索引鍵，其中包含存取角色的資源之完整 Amazon 資源名稱 (ARN)。為進行 S3 整合，請務必包含資料庫執行個體 ARN，如下列範例所示。

  對於 Linux、macOS 或 Unix：

  ```
  aws iam create-role \
  	   --role-name rds-s3-integration-role \
  	   --assume-role-policy-document '{
  	     "Version": "2012-10-17",		 	 	 
  	     "Statement": [
  	       {
  	         "Effect": "Allow",
  	         "Principal": {
  	            "Service": "rds.amazonaws.com"
  	          },
  	         "Action": "sts:AssumeRole",
                  "Condition": {
                      "StringEquals": {
                          "aws:SourceArn":"arn:aws:rds:Region:my_account_ID:db:db_instance_identifier"
                      }
                  }
  	       }
  	     ]
  	   }'
  ```

  在 Windows 中：

  將全域條件內容索引鍵新增至 `assume_role_policy.json`。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Principal": {
                  "Service": [
                      "rds.amazonaws.com"
                  ]
              },
              "Action": "sts:AssumeRole",
              "Condition": {
                  "StringEquals": {
                      "aws:SourceArn":"arn:aws:rds:Region:my_account_ID:db:db_instance_identifier"
                  }
              }
          }
      ]
  }
  ```

------

**將 IAM 政策連接至 IAM 角色**
+ 下列AWS CLI命令會將政策連接至名為 的角色`rds-s3-integration-role`。將 `your-policy-arn` 替換為您前個步驟記下的政策 ARN。  
**Example**  

  對於 Linux、macOS 或 Unix：

  ```
  aws iam attach-role-policy \
  	   --policy-arn your-policy-arn \
  	   --role-name rds-s3-integration-role
  ```

  在 Windows 中：

  ```
  aws iam attach-role-policy ^
  	   --policy-arn your-policy-arn ^
  	   --role-name rds-s3-integration-role
  ```

# 啟用 RDS for SQL Server 與 S3 的整合
<a name="Appendix.SQLServer.Options.S3-integration.enabling"></a>

在下一節，您可以找到如何啟用 Amazon S3 與 Amazon RDS for SQL Server 整合的資訊。若要使用 S3 整合，在使用 `S3_INTEGRATION` feature-name 參數之前，資料庫執行個體必須與您先前建立的 IAM 角色相關聯。

**注意**  
若要將 IAM 角色新增至資料庫執行個體，資料庫執行個體的狀態必須為 **available (可用)**。

## 主控台
<a name="Appendix.SQLServer.Options.S3-integration.enabling.console"></a>

**將 IAM 角色與資料庫執行個體建立關聯**

1. 登入 AWS 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 選擇 RDS for SQL Server 資料庫執行個體名稱，以顯示其詳細資訊。

1. 在 **Connectivity & security (連線能力與安全性)** 索引標籤上的 **Manage IAM roles (管理 IAM 角色)** 區段中，選擇要在 **Add IAM roles to this instance (將 IAM 角色新增至此執行個體)** 下新增的 IAM 角色。

1. 針對 **Feature (功能)** 選擇 **S3\$1INTEGRATION**。  
![\[新增 S3_INTEGRATION 角色\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/ora-s3-integration-role.png)

1. 選擇 **Add role (新增角色)**。

## AWS CLI
<a name="Appendix.SQLServer.Options.S3-integration.enabling.cli"></a>

**將 IAM 角色新增至 RDS for SQL Server 資料庫執行個體**
+ 下列 AWS CLI 命令將 IAM 角色新增至名為 `mydbinstance` 的 RDS for SQL Server 資料庫執行個體。  
**Example**  

  對於 Linux、macOS 或 Unix：

  ```
  aws rds add-role-to-db-instance \
  	   --db-instance-identifier mydbinstance \
  	   --feature-name S3_INTEGRATION \
  	   --role-arn your-role-arn
  ```

  在 Windows 中：

  ```
  aws rds add-role-to-db-instance ^
  	   --db-instance-identifier mydbinstance ^
  	   --feature-name S3_INTEGRATION ^
  	   --role-arn your-role-arn
  ```

  將 `your-role-arn` 替換為您前個步驟記下的角色 ARN。`S3_INTEGRATION` 必須在 `--feature-name` 選項中指定。

# 在 RDS for SQL Server 與 Amazon S3 之間傳輸檔案
<a name="Appendix.SQLServer.Options.S3-integration.using"></a>

您可以使用 Amazon RDS 預存程序，在 Amazon S3 與 RDS 資料庫執行個體之間下載和上傳檔案。您也可以使用 Amazon RDS 預存程序，列出和刪除 RDS 執行個體上的檔案。

您自 S3 下載和上傳至 S3 的檔案會存放在 `D:\S3` 資料夾。您只有透過此資料夾才能存取您的檔案。您可以將檔案組織成子資料夾，在下載期間，當您包含目的地資料夾時，將為您建立這些子資料夾。

您需要提供 S3 儲存貯體和檔案的 Amazon Resource Name (ARN)，才能使用某些預存程序。ARN 的格式為 `arn:aws:s3:::amzn-s3-demo-bucket/file_name`。Amazon S3 不需要 ARNs中的帳戶號碼或 AWS 區域。

S3 整合任務循序執行，與原生備份和還原任務共同相同的佇列。不論何時，此佇列中最多只能有兩個任務在進行。可能需要五分鐘後，任務才會開始處理。

## 將 Amazon S3 儲存貯體中的檔案下載至 SQL Server 資料庫執行個體
<a name="Appendix.SQLServer.Options.S3-integration.using.download"></a>

若要將 S3 儲存貯體中的檔案下載至 RDS for SQL Server 資料庫執行個體，請使用 Amazon RDS 預存程序 `msdb.dbo.rds_download_from_s3` 並搭配下列參數。


| 參數名稱 | 資料類型 | 預設 | 必要 | 描述 | 
| --- | --- | --- | --- | --- | 
|  `@s3_arn_of_file`  |  NVARCHAR  |  –  |  必要  |  要下載之檔案的 S3 ARN，例如：`arn:aws:s3:::amzn-s3-demo-bucket/mydata.csv`  | 
|  `@rds_file_path`  |  NVARCHAR  |  –  |  選用  |  RDS 執行個體的檔案路徑。若沒有指定，則檔案路徑為 `D:\S3\<filename in s3>`。RDS 支援絕對路徑和相對路徑。如果您要建立子資料夾，請將子資料夾包含在檔案路徑中。  | 
|  `@overwrite_file`  |  INT  |  0  |  選用  | 覆寫現有檔案： 0 = 不覆寫 1 = 覆寫 | 

您可以下載沒有副檔名的檔案以及具有下列副檔名的檔案：.bcp、.csv、.dat、.fmt、.info、.lst、.tbl、.txt 和 .xml。

**注意**  
啟用 SQL Server Integration Services 時，可支援下載具有 .ispac 副檔名的檔案。如需如何啟用 SSIS 的詳細資訊，請參閱 [SQL Server Integration Services](Appendix.SQLServer.Options.SSIS.md)。  
啟用 SQL Server Analysis Services 時，可支援下載具有下列副檔名的檔案：.abf、.asdatabase、.configsettings、.deploymentoptions、.deploymenttargets 和 .xmla。如需如何啟用 SSAS 的詳細資訊，請參閱 [SQL Server Analysis Services](Appendix.SQLServer.Options.SSAS.md)。

下列範例顯示從 S3 下載檔案的預存程序。

```
exec msdb.dbo.rds_download_from_s3
	    @s3_arn_of_file='arn:aws:s3:::amzn-s3-demo-bucket/bulk_data.csv',
	    @rds_file_path='D:\S3\seed_data\data.csv',
	    @overwrite_file=1;
```

範例 `rds_download_from_s3` 操作在 `seed_data` 中建立名為 `D:\S3\` 的資料夾 (如果此資料夾尚不存在)。然後，範例從 S3 將來源檔案 `bulk_data.csv` 下載至資料庫執行個體上名為 `data.csv` 的新檔案。因為 `@overwrite_file` 參數設為 `1`，如果檔案已事先存在，則會覆寫檔案。

## 從 SQL Server 資料庫執行個體將檔案上傳至 Amazon S3 儲存貯體
<a name="Appendix.SQLServer.Options.S3-integration.using.upload"></a>

若要從 RDS for SQL Server 資料庫執行個體將檔案上傳送至 S3 儲存貯體，請使用 Amazon RDS 預存程序 `msdb.dbo.rds_upload_to_s3` 並搭配下列參數。


| 參數名稱 | 資料類型 | 預設 | 必要 | 描述 | 
| --- | --- | --- | --- | --- | 
|  `@s3_arn_of_file`  |  NVARCHAR  |  –  |  必要  |  要在 S3 中建立之檔案的 S3 ARN，例如：`arn:aws:s3:::amzn-s3-demo-bucket/mydata.csv`  | 
|  `@rds_file_path`  |  NVARCHAR  |  –  |  必要  | 要上傳至 S3 之檔案的檔案路徑。支援絕對和相對路徑。 | 
|  `@overwrite_file`  |  INT  |  –  |  選用  |  覆寫現有檔案： 0 = 不覆寫 1 = 覆寫  | 

下列範例從指定的位置 `data.csv` 中，將名為 `D:\S3\seed_data\` 的檔案，上傳至以 ARN 指定的 S3 儲存貯體中的檔案 `new_data.csv`。

```
exec msdb.dbo.rds_upload_to_s3 
		@rds_file_path='D:\S3\seed_data\data.csv',
		@s3_arn_of_file='arn:aws:s3:::amzn-s3-demo-bucket/new_data.csv',
		@overwrite_file=1;
```

因為 @overwrite\$1file 參數設為 `1`，如果檔案已事先存在於 S3，則會覆寫檔案。

# 列出 RDS 資料庫執行個體上的檔案
<a name="Appendix.SQLServer.Options.S3-integration.using.listing-files"></a>

若要列出資料庫執行個體上存在的檔案，請使用預存程序和函數。首先，執行下列預存程序，從 `D:\S3\` 中的檔案收集檔案詳細資料。

```
exec msdb.dbo.rds_gather_file_details;
```

預存程序會傳回任務的 ID。就像其他任務一樣，此預存程序以非同步方式執行。一旦任務的狀態變成 `SUCCESS`，您就可以在 `rds_fn_list_file_details` 函數中使用任務 ID，以列出 D:\$1S3\$1 中現有的檔案和目錄，如下所示。

```
SELECT * FROM msdb.dbo.rds_fn_list_file_details(TASK_ID);
```

`rds_fn_list_file_details` 函數會傳回含有以下幾欄的表格：


| 輸出參數 | 描述 | 
| --- | --- | 
| filepath | 檔案的絕對路徑 (例如，D:\$1S3\$1mydata.csv) | 
| size\$1in\$1bytes | 檔案大小 (以位元組為單位) | 
| last\$1modified\$1utc | 上次修改日期和時間 (UTC 格式) | 
| is\$1directory | 指出項目是否為目錄的選項 (true/false) | 

# 刪除 RDS 資料庫執行個體上的檔案
<a name="Appendix.SQLServer.Options.S3-integration.using.deleting-files"></a>

若要刪除資料庫執行個體上存在的檔案，請使用 Amazon RDS 預存程序 `msdb.dbo.rds_delete_from_filesystem` 並搭配下列參數。


| 參數名稱 | 資料類型 | 預設 | 必要 | 描述 | 
| --- | --- | --- | --- | --- | 
|  `@rds_file_path`  |  NVARCHAR  |  –  |  必要  | 要刪除之檔案的檔案路徑。支援絕對和相對路徑。 | 
|  `@force_delete`  |  INT  | 0 |  選用  |  若要刪除目錄，必須包含此標旗並設為 `1`。 `1` = 刪除目錄 如果是刪除檔案，則會忽略此參數。  | 

若要刪除目錄，`@rds_file_path` 的結尾必須是反斜線 (`\`)，`@force_delete` 必須設為 `1`。

以下範例刪除檔案 `D:\S3\delete_me.txt`。

```
exec msdb.dbo.rds_delete_from_filesystem
    @rds_file_path='D:\S3\delete_me.txt';
```

以下範例刪除目錄 `D:\S3\example_folder\`。

```
exec msdb.dbo.rds_delete_from_filesystem
    @rds_file_path='D:\S3\example_folder\',
    @force_delete=1;
```

# 監控檔案傳輸任務的狀態
<a name="Appendix.SQLServer.Options.S3-integration.using.monitortasks"></a>

若要追蹤 S3 整合任務的狀態，請呼叫 `rds_fn_task_status` 函數。需要兩個參數。第一個參數不適用於 S3 整合，應該一律為 `NULL`。第二個參數接受任務 ID。

若要查看所有任務的清單，請將第一個參數設為 `NULL`，將第二個參數設為 `0`，如下列範例所示。

```
SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,0);
```

若要取得特定的任務，請將第一個參數設為 `NULL`，將第二個參數設為任務 ID，如下列範例所示。

```
SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,42);
```

`rds_fn_task_status` 函數會傳回下列資訊。


|  輸出參數  |  描述  | 
| --- | --- | 
|  `task_id`  |  任務的 ID。  | 
|  `task_type`  |  就 S3 整合而言，任務可以有下列任務類型： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/Appendix.SQLServer.Options.S3-integration.using.monitortasks.html)  | 
|  `database_name`  | 不適用於 S3 整合任務。 | 
|  `% complete`  |  任務的進度 (以百分比表示)。  | 
|  `duration(mins)`  |  任務所花的時間 (以分鐘為單位)。  | 
|  `lifecycle`  |  任務的狀態。可能的狀態如下： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/Appendix.SQLServer.Options.S3-integration.using.monitortasks.html)  | 
|  `task_info`  |  任務的其他資訊。如果處理期間發生錯誤，此欄包含該錯誤的相關資訊。  | 
|  `last_updated`  |  上次更新任務狀態的日期和時間。  | 
|  `created_at`  |  建立任務的日期和時間。  | 
|  `S3_object_arn`  |  下載或上傳時往返之 S3 物件的 ARN。  | 
|  `overwrite_S3_backup_file`  |  不適用於 S3 整合任務。  | 
|  `KMS_master_key_arn`  |  不適用於 S3 整合任務。  | 
|  `filepath`  |  RDS 資料庫執行個體上的檔案路徑。  | 
|  `overwrite_file`  |  指出是否覆寫現存檔案的選項。  | 
|  `task_metadata`  |  不適用於 S3 整合任務。  | 

# 取消任務
<a name="Appendix.SQLServer.Options.S3-integration.canceltasks"></a>

若要取消 S3 整合任務，請使用 `msdb.dbo.rds_cancel_task` 預存程序並搭配 `task_id` 參數。進行中的刪除和列出任務無法取消。以下範例顯示請求取消任務。

```
exec msdb.dbo.rds_cancel_task @task_id = 1234;
```

若要綜觀所有任務及其任務 ID，請使用 `rds_fn_task_status` 函數，如[監控檔案傳輸任務的狀態](Appendix.SQLServer.Options.S3-integration.using.monitortasks.md)中所述。

## S3 整合的多可用區域限制
<a name="S3-MAZ"></a>

在多可用區域執行個體上，備用複本上 `D:\S3` 資料夾中的檔案會在容錯移轉後刪除。容錯移轉可能是計劃中的，例如在修改資料庫執行個體期間變更執行個體類別或升級引擎版本。容錯移轉也可能是在主要伺服器中斷期間意外發生的。

**注意**  
我們不建議您使用 `D:\S3` 資料夾來儲存檔案。最佳實務是將建立的檔案上傳至 Amazon S3 使檔案能夠耐久，並在需要匯入資料時下載檔案。

若要判斷上次容錯移轉時間，您可以使用 `msdb.dbo.rds_failover_time` 預存程序。如需更多詳細資訊，請參閱 [判斷 Amazon RDS for SQL Server 的上次容錯移轉時間](Appendix.SQLServer.CommonDBATasks.LastFailover.md)。

**Example 沒有最近的容錯移轉**  
此範例顯示錯誤日誌中沒有最近的容錯移轉時的輸出。自從 2020-04-29 23:59:00.01 以來，沒有發生任何容錯移轉。  
因此，在那段時間之後下載且尚未使用 `rds_delete_from_filesystem` 預存程序刪除的所有檔案仍然可以在目前的主機上存取。在那段時間之前下載的檔案也可能可用。  


| errorlog\$1available\$1from | recent\$1failover\$1time | 
| --- | --- | 
|  2020-04-29 23:59:00.0100000  |  null  | 

**Example 最近的容錯移轉**  
此範例顯示錯誤日誌中有容錯移轉時的輸出。最近一次的容錯移轉是在 2020-05-05 18:57:51.89。  
在那段時間之後下載且尚未使用 `rds_delete_from_filesystem` 預存程序刪除的所有檔案仍然可以在目前的主機上存取。  


| errorlog\$1available\$1from | recent\$1failover\$1time | 
| --- | --- | 
|  2020-04-29 23:59:00.0100000  |  2020-05-05 18:57:51.8900000  | 

# 停用 RDS for SQL Server 與 S3 的整合
<a name="Appendix.SQLServer.Options.S3-integration.disabling"></a>

接下來，您可以找到如何停用 Amazon S3 與 Amazon RDS for SQL Server 整合的資訊。停用 S3 整合時，不會刪除 `D:\S3\` 中的檔案。

**注意**  
若要從資料庫執行個體中移除 IAM 角色，資料庫執行個體的狀態必須為 `available`。

## 主控台
<a name="Appendix.SQLServer.Options.S3-integration.disabling.console"></a>

**取消 IAM 角色與資料庫執行個體的關聯**

1. 登入 AWS 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 選擇 RDS for SQL Server 資料庫執行個體名稱，以顯示其詳細資訊。

1. 在 **Connectivity & security (連線能力與安全性)** 索引標籤上的 **Manage IAM roles (管理 IAM 角色)** 區段中，選擇要移除的 IAM 角色。

1. 選擇 **刪除**。

## AWS CLI
<a name="Appendix.SQLServer.Options.S3-integration.disabling.cli"></a>

**從 RDS for SQL Server 資料庫執行個體中移除 IAM 角色**
+ 下列 AWS CLI 命令從名為 `mydbinstance` 的 RDS for SQL Server 資料庫執行個體中移除 IAM 角色。  
**Example**  

  對於 Linux、macOS 或 Unix：

  ```
  aws rds remove-role-from-db-instance \
  	   --db-instance-identifier mydbinstance \
  	   --feature-name S3_INTEGRATION \
  	   --role-arn your-role-arn
  ```

  在 Windows 中：

  ```
  aws rds remove-role-from-db-instance ^
  	   --db-instance-identifier mydbinstance ^
  	   --feature-name S3_INTEGRATION ^
  	   --role-arn your-role-arn
  ```

  根據 `your-role-arn` 選項，將 `--feature-name` 換成適當的 IAM 角色 ARN。

# 在 Amazon RDS for SQL Server 上使用 Database Mail
<a name="SQLServer.DBMail"></a>

您可以在 SQL Server 資料庫執行個體上使用 Database Mail，從您的 Amazon RDS 傳送電子郵件訊息給使用者。訊息可包含檔案和查詢結果。Database Mail 包含下列元件：
+ **設定和安全性物件** – 這些物件會建立設定檔和帳戶，並儲存在 `msdb` 資料庫中。
+ **傳訊物件** – 這些物件包括用來傳送訊息的 [sp\$1send\$1dbmail](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-send-dbmail-transact-sql) 預存程序，以及保留訊息相關資訊的資料結構。這些物件會儲存在 `msdb` 資料庫中。
+ **記錄和稽核物件 ** – Database Mail會將記錄資訊寫入 `msdb` 資料庫和 Microsoft Windows 應用程式事件記錄檔。
+ **Database Mail可執行檔** – `DatabaseMail.exe` 會從 `msdb` 資料庫中的佇列讀取，並傳送電子郵件訊息。

RDS 支援 Web、標準和企業版上的所有 SQL Server 版本的 Database Mail。

## 限制
<a name="SQLServer.DBMail.Limitations"></a>

在 SQL Server 資料庫執行個體上使用 Database Mail 時將適用下列限制：
+ Database Mail 不支援 SQL Server Express 版本。
+ 不支援修改 Database Mail 組態參數。若要查看預先設定的值 (預設值)，請使用 [sysmail\$1help\$1configure\$1sp](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-help-configure-sp-transact-sql) 預存程序。
+ 不完全支援檔案附件。如需更多詳細資訊，請參閱 [使用檔案附件](#SQLServer.DBMail.Files)。
+ 檔案附件大小上限為 1 MB。
+ Database Mail 需要在多可用區域資料庫執行個體上設定其他組態。如需更多詳細資訊，請參閱 [多可用區域部署考量](#SQLServer.DBMail.MAZ)。
+ 不支援將 SQL Server 代理程式設定為傳送電子郵件訊息給預先定義的運算子。

# 啟用 Database Mail
<a name="SQLServer.DBMail.Enable"></a>

請使用下列程序啟用資料庫執行個體的 Database Mail：

1. 建立新的參數群組。

1. 修改參數群組，將 `database mail xps` 參數設定為 1。

1. 將參數群組與資料庫執行個體建立關聯。

## 建立 Database Mail 的參數群組
<a name="DBMail.CreateParamGroup"></a>

為對應到 SQL Server 版本和資料庫執行個體版本的 `database mail xps` 參數建立參數群組。

**注意**  
您也可以修改現有的參數群組。請遵循 [修改啟用 Database Mail 的參數](#DBMail.ModifyParamGroup) 中的程序。

### 主控台
<a name="DBMail.CreateParamGroup.Console"></a>

下列範例會建立 SQL Server Standard Edition 2016 的參數群組。

**建立參數群組**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Parameter groups** (參數群組)。

1. 選擇 **Create parameter group (建立參數群組)**。

1. 在 **Create parameter group (建立參數群組)** 窗格中執行下列動作：

   1. 對於 **Parameter group family (參數群組家族)**，請選擇 **sqlserver-se-13.0**。

   1. 對於 **Group name (群組名稱)**，輸入參數群組的識別碼，例如 **dbmail-sqlserver-se-13**。

   1. 對於 **Description (說明)**，輸入 **Database Mail XPs**。

1. 選擇**建立**。

### CLI
<a name="DBMail.CreateParamGroup.CLI"></a>

下列範例會建立 SQL Server Standard Edition 2016 的參數群組。

**建立參數群組**
+ 請使用下列其中一個命令。  
**Example**  

  對於 Linux、macOS 或 Unix：

  ```
  aws rds create-db-parameter-group \
      --db-parameter-group-name dbmail-sqlserver-se-13 \
      --db-parameter-group-family "sqlserver-se-13.0" \
      --description "Database Mail XPs"
  ```

  在 Windows 中：

  ```
  aws rds create-db-parameter-group ^
      --db-parameter-group-name dbmail-sqlserver-se-13 ^
      --db-parameter-group-family "sqlserver-se-13.0" ^
      --description "Database Mail XPs"
  ```

## 修改啟用 Database Mail 的參數
<a name="DBMail.ModifyParamGroup"></a>

修改參數群組中對應至 SQL Server 版本和資料庫執行個體版本的 `database mail xps` 參數。

若要啟用 Database Mail，請將 `database mail xps` 參數設定為 1。

### 主控台
<a name="DBMail.ModifyParamGroup.Console"></a>

下列範例會修改您為 SQL Server Standard Edition 2016 所建立的參數群組。

**修改參數群組**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 開啟 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Parameter groups (參數群組)**。

1. 選擇參數群組，例如 **dbmail-sqlserver-se-13**。

1. 在 **Parameters (參數)** 下，篩選 **mail** 的參數清單。

1. 選擇 **database mail xps**。

1. 選擇 **Edit parameters** (編輯參數)。

1. 輸入 **1**。

1. 選擇**儲存變更**。

### CLI
<a name="DBMail.ModifyParamGroup.CLI"></a>

下列範例會修改您為 SQL Server Standard Edition 2016 所建立的參數群組。

**修改參數群組**
+ 請使用下列其中一個命令。  
**Example**  

  對於 Linux、macOS 或 Unix：

  ```
  aws rds modify-db-parameter-group \
      --db-parameter-group-name dbmail-sqlserver-se-13 \
      --parameters "ParameterName='database mail xps',ParameterValue=1,ApplyMethod=immediate"
  ```

  在 Windows 中：

  ```
  aws rds modify-db-parameter-group ^
      --db-parameter-group-name dbmail-sqlserver-se-13 ^
      --parameters "ParameterName='database mail xps',ParameterValue=1,ApplyMethod=immediate"
  ```

## 將參數群組與資料庫執行個體建立關聯
<a name="DBMail.AssocParamGroup"></a>

您可以使用 AWS 管理主控台 或 AWS CLI ，將 Database Mail 參數群組與資料庫執行個體建立關聯。

### 主控台
<a name="DBMail.AssocParamGroup.Console"></a>

您可以將 Database Mail 參數群組與新的或現有的資料庫執行個體建立關聯。
+ 對於新的資料庫執行個體，請在啟動執行個體時建立關聯。如需更多詳細資訊，請參閱 [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。
+ 對於現有的資料庫執行個體，請透過修改執行個體來建立關聯。如需詳細資訊，請參閱[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

### CLI
<a name="DBMail.AssocParamGroup.CLI"></a>

您可以將 Database Mail 參數群組與新的或現有的資料庫執行個體建立關聯。

**使用 Database Mail 參數群組建立資料庫執行個體**
+ 指定建立參數群組時所使用的相同資料庫引擎類型和主要版本。  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds create-db-instance \
      --db-instance-identifier mydbinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-se \
      --engine-version 13.00.5426.0.v1 \
      --allocated-storage 100 \
      --manage-master-user-password \
      --master-username admin \
      --storage-type gp2 \
      --license-model li
      --db-parameter-group-name dbmail-sqlserver-se-13
  ```

  在 Windows 中：

  ```
  aws rds create-db-instance ^
      --db-instance-identifier mydbinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-se ^
      --engine-version 13.00.5426.0.v1 ^
      --allocated-storage 100 ^
      --manage-master-user-password ^
      --master-username admin ^
      --storage-type gp2 ^
      --license-model li ^
      --db-parameter-group-name dbmail-sqlserver-se-13
  ```

**修改資料庫執行個體並關聯 Database Mail 參數群組**
+ 請使用下列其中一個命令。  
**Example**  

  對於 Linux、macOS 或 Unix：

  ```
  aws rds modify-db-instance \
      --db-instance-identifier mydbinstance \
      --db-parameter-group-name dbmail-sqlserver-se-13 \
      --apply-immediately
  ```

  在 Windows 中：

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier mydbinstance ^
      --db-parameter-group-name dbmail-sqlserver-se-13 ^
      --apply-immediately
  ```

# 設定 Database Mail
<a name="SQLServer.DBMail.Configure"></a>

您可以執行下列任務來設定 Database Mail：

1. 建立 Database Mail 設定檔。

1. 建立 Database Mail 帳戶。

1. 將 Database Mail 帳戶新增至 Database Mail 設定檔。

1. 將使用者新增至 Database Mail 設定檔。

**注意**  
若要設定 Database Mail，請確認您具有 `execute` 資料庫中預存程序的 `msdb` 許可。

## 建立 Database Mail 設定檔
<a name="SQLServer.DBMail.Configure.Profile"></a>

若要建立 Database Mail 設定檔，您可以使用 [sysmail\$1add\$1sp](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-add-profile-sp-transact-sql) 預存程序。以下範例會建立名為 `Notifications` 的設定檔。

**建立設定檔**
+ 使用下列 SQL 陳述式。

  ```
  USE msdb
  GO
  
  EXECUTE msdb.dbo.sysmail_add_profile_sp  
      @profile_name         = 'Notifications',  
      @description          = 'Profile used for sending outgoing notifications using Amazon SES.';
  GO
  ```

## 建立 Database Mail 帳戶
<a name="SQLServer.DBMail.Configure.Account"></a>

若要建立 Database Mail 帳戶，您可以使用 [sysmail\$1add\$1account\$1sp](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-add-account-sp-transact-sql) 預存程序。下列範例使用 Amazon Simple Email Service，在私有 VPC 中的 RDS for SQL Server 資料庫執行個體上建立一個名為 `SES` 的帳戶。

使用 Amazon SES 需要下列參數：
+ `@email_address` – 一個 Amazon SES 驗證身分。如需詳細資訊，請參閱[在 Amazon SES 中驗證身分](https://docs.aws.amazon.com/ses/latest/dg/verify-addresses-and-domains.html)。
+ `@mailserver_name` – 一個 Amazon SES SMTP 端點。如需詳細資訊，請參閱[連線至 Amazon SES SMTP 端點](https://docs.aws.amazon.com/ses/latest/dg/smtp-connect.html)。
+ `@username` – 一個 Amazon SES SMTP 使用者名稱。如需詳細資訊，請參閱[取得 Amazon SES SMTP 憑證](https://docs.aws.amazon.com/ses/latest/dg/smtp-credentials.html)。

  請勿使用 AWS Identity and Access Management 使用者名稱。
+ `@password` – 一個 Amazon SES SMTP 密碼。如需詳細資訊，請參閱[取得 Amazon SES SMTP 憑證](https://docs.aws.amazon.com/ses/latest/dg/smtp-credentials.html)。

**建立帳戶**
+ 使用下列 SQL 陳述式。

  ```
  USE msdb
  GO
  
  EXECUTE msdb.dbo.sysmail_add_account_sp
      @account_name        = 'SES',
      @description         = 'Mail account for sending outgoing notifications.',
      @email_address       = 'nobody@example.com',
      @display_name        = 'Automated Mailer',
      @mailserver_name     = 'vpce-0a1b2c3d4e5f-01234567.email-smtp.us-west-2.vpce.amazonaws.com',
      @port                = 587,
      @enable_ssl          = 1,
      @username            = 'Smtp_Username',
      @password            = 'Smtp_Password';
  GO
  ```
**注意**  
指定此處所顯示提示以外的憑證，作為安全最佳實務。

## 將 Database Mail 帳戶新增至 Database Mail 設定檔
<a name="SQLServer.DBMail.Configure.AddAccount"></a>

若要將 Database Mail 帳戶新增至 Database Mail 設定檔，您可以使用 [sysmail\$1add\$1profileaccount\$1sp](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-add-profileaccount-sp-transact-sql) 預存程序。下列範例會將 `SES` 帳戶新增至 `Notifications` 設定檔。

**將帳戶新增至設定檔**
+ 使用下列 SQL 陳述式。

  ```
  USE msdb
  GO
  
  EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
      @profile_name        = 'Notifications',
      @account_name        = 'SES',
      @sequence_number     = 1;
  GO
  ```

## 將使用者新增至 Database Mail 設定檔
<a name="SQLServer.DBMail.Configure.AddUser"></a>

若要授與 `msdb` 資料庫主體使用 Database Mail 設定檔的許可，您可以使用 [sysmail\$1add\$1principalprofile\$1sp](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-add-principalprofile-sp-transact-sql) 預存程序。*主體*是可以要求 SQL Server 資源的實體。資料庫主體必須對應至 SQL Server 身分驗證使用者、Windows 身分驗證使用者或 Windows 身分驗證群組。

下列範例會授與 `Notifications` 設定檔的公開存取權。

**將使用者新增至設定檔**
+ 使用下列 SQL 陳述式。

  ```
  USE msdb
  GO
  
  EXECUTE msdb.dbo.sysmail_add_principalprofile_sp  
      @profile_name       = 'Notifications',  
      @principal_name     = 'public',  
      @is_default         = 1;
  GO
  ```

## 適用於 Database Mail 的 Amazon RDS 預存程序和函數
<a name="SQLServer.DBMail.StoredProc"></a>

Microsoft 提供使用 Database Mail 的[預存程序](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/database-mail-stored-procedures-transact-sql)，例如建立、列出、更新和刪除帳號和設定檔。此外，RDS 還提供適用於 Database Mail 的預存程序和函數，如下表所示。


| 程序/函數 | 描述 | 
| --- | --- | 
| rds\$1fn\$1sysmail\$1allitems | 顯示已傳送的訊息，包括其他使用者提交的訊息。 | 
| rds\$1fn\$1sysmail\$1event\$1log | 顯示事件，包括其他使用者提交訊息的事件。 | 
| rds\$1fn\$1sysmail\$1mailattachments | 顯示附件，包括其他使用者提交訊息的附件。 | 
| rds\$1sysmail\$1control | 啟動和停止郵件佇列 (DatabaseMail.exe 處理程序)。 | 
| rds\$1sysmail\$1delete\$1mailitems\$1sp | 從 Database Mail 內部表格刪除所有使用者傳送的電子郵件訊息。 | 

# 使用 Database Mail 傳送電子郵件訊息
<a name="SQLServer.DBMail.Send"></a>

您可以使用 [sp\$1send\$1dbmail](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-send-dbmail-transact-sql) 預存程序來利用 Database Mail 傳送電子郵件訊息。

## Usage
<a name="SQLServer.DBMail.Send.Usage"></a>

```
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'profile_name',
@recipients = 'recipient1@example.com[; recipient2; ... recipientn]',
@subject = 'subject',
@body = 'message_body',
[@body_format = 'HTML'],
[@file_attachments = 'file_path1; file_path2; ... file_pathn'],
[@query = 'SQL_query'],
[@attach_query_result_as_file = 0|1]';
```

下列是必要參數：
+ `@profile_name` – 要從中傳送訊息的 Database Mail 設定檔名稱。
+ `@recipients` – 要傳送訊息的電子郵件地址的清單 (以分號分隔)。
+ `@subject` – 訊息的主旨。
+ `@body` – 訊息的內文。您也可以使用已宣告的變數作為內文。

下列是選用參數：
+ `@body_format` – 此參數與已宣告的變數一起使用，以 HTML 格式傳送電子郵件。
+ `@file_attachments` – 訊息附件清單 (以分號分隔)。檔案路徑必須是絕對路徑。
+ `@query` – 要執行的 SQL 查詢。查詢結果可以作為檔案貼加，也可以包含在訊息內文中。
+ `@attach_query_result_as_file` – 是否將查詢結果附加為檔案。設定為 0 表示否，1 表示是。預設值為 0。

## 範例
<a name="SQLServer.DBMail.Send.Examples"></a>

下列範例示範如何傳送電子郵件訊息。

**Example 傳送訊息給單一收件人**  

```
USE msdb
GO

EXEC msdb.dbo.sp_send_dbmail
     @profile_name       = 'Notifications',
     @recipients         = 'nobody@example.com',
     @subject            = 'Automated DBMail message - 1',
     @body               = 'Database Mail configuration was successful.';
GO
```

**Example 傳送訊息給多位收件人**  

```
USE msdb
GO

EXEC msdb.dbo.sp_send_dbmail
     @profile_name       = 'Notifications',
     @recipients         = 'recipient1@example.com;recipient2@example.com',
     @subject            = 'Automated DBMail message - 2',
     @body               = 'This is a message.';
GO
```

**Example 將 SQL 查詢結果作為檔案附件傳送**  

```
USE msdb
GO

EXEC msdb.dbo.sp_send_dbmail
     @profile_name       = 'Notifications',
     @recipients         = 'nobody@example.com',
     @subject            = 'Test SQL query',
     @body               = 'This is a SQL query test.',
     @query              = 'SELECT * FROM abc.dbo.test',
     @attach_query_result_as_file = 1;
GO
```

**Example 以 HTML 格式傳送訊息**  

```
USE msdb
GO

DECLARE @HTML_Body as NVARCHAR(500) = 'Hi, <h4> Heading </h4> </br> See the report. <b> Regards </b>';

EXEC msdb.dbo.sp_send_dbmail
     @profile_name       = 'Notifications',
     @recipients         = 'nobody@example.com',
     @subject            = 'Test HTML message',
     @body               = @HTML_Body,
     @body_format        = 'HTML';
GO
```

**Example 在資料庫中發生特定事件時使用觸發器傳送訊息**  

```
USE AdventureWorks2017
GO
IF OBJECT_ID ('Production.iProductNotification', 'TR') IS NOT NULL
DROP TRIGGER Purchasing.iProductNotification
GO

CREATE TRIGGER iProductNotification ON Production.Product
   FOR INSERT
   AS
   DECLARE @ProductInformation nvarchar(255);
   SELECT
   @ProductInformation = 'A new product, ' + Name + ', is now available for $' + CAST(StandardCost AS nvarchar(20)) + '!'
   FROM INSERTED i;

EXEC msdb.dbo.sp_send_dbmail
     @profile_name       = 'Notifications',
     @recipients         = 'nobody@example.com',
     @subject            = 'New product information',
     @body               = @ProductInformation;
GO
```

# 檢視郵件、記錄檔和附件
<a name="SQLServer.DBMail.View"></a>

您可以使用 RDS 預存程序來檢視訊息、事件記錄檔和附件。

**檢視所有電子郵件訊息**
+ 使用下列 SQL 查詢：

  ```
  SELECT * FROM msdb.dbo.rds_fn_sysmail_allitems(); --WHERE sent_status='sent' or 'failed' or 'unsent'
  ```

**檢視所有電子郵件事件記錄檔**
+ 使用下列 SQL 查詢：

  ```
  SELECT * FROM msdb.dbo.rds_fn_sysmail_event_log();
  ```

**檢視所有電子郵件附件**
+ 使用下列 SQL 查詢：

  ```
  SELECT * FROM msdb.dbo.rds_fn_sysmail_mailattachments();
  ```

# 刪除訊息
<a name="SQLServer.DBMail.Delete"></a>

您可以使用 `rds_sysmail_delete_mailitems_sp` 預存程序來刪除訊息。

**注意**  
當 DBMail 歷程記錄資料大小達到 1 GB，且保留期限至少為 24 小時，RDS 會自動刪除郵件表格項目。  
如果您想要將郵件項目保留一段較長的時間，可以將其封存。如需詳細資訊，請參閱 Microsoft 文件中的[建立 SQL Server Agent 作業以封存 Database Mail 訊息及事件記錄檔](https://docs.microsoft.com/en-us/sql/relational-databases/database-mail/create-a-sql-server-agent-job-to-archive-database-mail-messages-and-event-logs)。

**刪除所有電子郵件訊息**
+ 使用下列 SQL 陳述式。

  ```
  DECLARE @GETDATE datetime
  SET @GETDATE = GETDATE();
  EXECUTE msdb.dbo.rds_sysmail_delete_mailitems_sp @sent_before = @GETDATE;
  GO
  ```

**刪除所有具有特定狀態的電子郵件**
+ 使用下列 SQL 陳述式刪除所有失敗的訊息。

  ```
  DECLARE @GETDATE datetime
  SET @GETDATE = GETDATE();
  EXECUTE msdb.dbo.rds_sysmail_delete_mailitems_sp @sent_status = 'failed';
  GO
  ```

# 啟動和停止郵件佇列
<a name="SQLServer.DBMail.StartStop"></a>

使用下列指示，啟動和停止資料庫郵件佇列：

**Topics**
+ [啟動郵件佇列](#SQLServer.DBMail.Start)
+ [停用郵件佇列](#SQLServer.DBMail.Stop)

## 啟動郵件佇列
<a name="SQLServer.DBMail.Start"></a>

您可以使用 `rds_sysmail_control` 預存程序來啟動 Database Mail 處理程序。

**注意**  
啟用 Database Mail 會自動啟動郵件佇列。

**啟動郵件佇列**
+ 使用下列 SQL 陳述式。

  ```
  EXECUTE msdb.dbo.rds_sysmail_control start;
  GO
  ```

## 停用郵件佇列
<a name="SQLServer.DBMail.Stop"></a>

您可以使用 `rds_sysmail_control` 預存程序來停止 Database Mail 處理程序。

**停止郵件佇列**
+ 使用下列 SQL 陳述式。

  ```
  EXECUTE msdb.dbo.rds_sysmail_control stop;
  GO
  ```

## 使用檔案附件
<a name="SQLServer.DBMail.Files"></a>

在 SQL Server 上，來自 RDS 的 Database Mail 訊息不支援下列檔案附件副檔名：.ade、.adp、.apk、.appx、.appxbundle、.bat、.bak、.cab、.chm、.cmd、.com、.cpl、.dll、.dmg、.exe、.hta、.inf1、.ins、.isp、.iso、.jar、.job、.js、.jse、.ldf、.lib、.lnk、.mde、.mdf、.msc、.msi、.msix、.msixbundle、.msp、.mst、.nsh、.pif、.ps、.ps1、.psc1、.reg、.rgs、.scr、.sct、.shb、.shs、.svg、.sys、.u3p、.vb、.vbe、.vbs、.vbscript、.vxd、.ws、.wsc、.wsf 和 .wsh。

Database Mail 會使用目前使用者的 Microsoft Windows 安全性內容來控制檔案的存取。使用 SQL Server 身分驗證登入的使用者無法使用 `@file_attachments` 預存程序的 `sp_send_dbmail` 參數附加檔案。Windows 不允許 SQL Server 將登入資料從遠端電腦提供給另一台遠端電腦。因此，從非執行 SQL Server 的電腦執行命令時，Database Mail 無法從網路共用附加檔案。

不過，您可以使用 SQL Server 代理程式任務來附加檔案。如需有關 SQL Server 代理程式的詳細資訊，請參閱 [使用 SQL Server Agent for Amazon RDS](Appendix.SQLServer.CommonDBATasks.Agent.md) 和 Microsoft 文件中的 [SQL Server 代理程式](https://docs.microsoft.com/en-us/sql/ssms/agent/sql-server-agent)。

## 多可用區域部署考量
<a name="SQLServer.DBMail.MAZ"></a>

當您在多可用區域資料庫執行個體上設定 Database Mail 時，組態不會自動傳播至次要可用區。建議將多可用區域執行個體轉換為單一可用區執行個體、設定 Database Mail，然後將資料庫執行個體轉換回多可用區域。然後，主節點和次要節點均設有 Database Mail 組態。

如果您從已設定 Database Mail 的多可用區域執行個體建立僅供讀取複本，則複本會繼承該組態，但不需要 SMTP 伺服器的密碼。使用密碼更新 Database Mail 帳戶。

## 移除 SMTP (連接埠 25) 限制
<a name="SQLServer.DBMail.SMTP"></a>

根據預設，AWS 會為 RDS for SQL Server 資料庫執行個體封鎖 SMTP (連接埠 25) 上的輸出流量。這是為了根據彈性網路介面擁有者的政策防止垃圾郵件。如有需要，您可以移除此限制。如需詳細資訊，請參閱[如何從我的 Amazon EC2 執行個體或 Lambda 函數中移除連接埠 25 的限制？](https://repost.aws/knowledge-center/ec2-port-25-throttle)。

# 執行個體存放區支援 Amazon RDS for SQL Server 上的 tempdb 資料庫
<a name="SQLServer.InstanceStore"></a>

*執行個體存放區*為資料庫執行個體提供暫時的區塊層級儲存空間。這個儲存空間位於實際連接到主機電腦的磁碟上。這些磁碟具有以固態硬碟 (SSD) 為基礎的非揮發性記憶體儲存裝置 (NVMe) 執行個體儲存體。此儲存體已針對低延遲、非常高的隨機 I/O 效能，以及高循序讀取輸送量進行最佳化。

將 `tempdb` 資料檔案和 `tempdb` 日誌檔案放置在執行個體存放區上，與以 Amazon EBS 為基礎的標準儲存相比，您可以達成更低的讀取和寫入延遲。

**注意**  
SQL Server 資料庫檔案和資料庫日誌檔案不會放置在執行個體存放區。

## 啟用執行個體存放區
<a name="SQLServer.InstanceStore.Enable"></a>

當 RDS 佈建具有下列其中一種執行個體類別的資料庫執行個體時，`tempdb` 資料庫會自動放置到執行個體存放區中：
+ db.m5d
+ db.r5d
+ db.x2iedn

若要啟用執行個體存放區，請執行下列其中一項動作：
+ 使用這些執行個體類型之一建立 SQL Server 資料庫執行個體。如需更多詳細資訊，請參閱 [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。
+ 修改現有的 SQL Server 資料庫執行個體，以使用其中一個執行個體。如需更多詳細資訊，請參閱 [修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

執行個體存放區適用於支援一或多個這些執行個體類型的所有 AWS 區域。如需 `db.m5d` 和 `db.r5d` 執行個體類別的詳細資訊，請參閱[ 資料庫執行個體類別](Concepts.DBInstanceClass.md)。如需 Amazon RDS for SQL Server 支援之執行個體類別的詳細資訊，請參閱[Microsoft SQL Server 的資料庫執行個體類別支援](SQLServer.Concepts.General.InstanceClasses.md)。

## 檔案位置和大小考量
<a name="SQLServer.InstanceStore.Files"></a>

在沒有執行個體存放區的執行個體上，RDS 會將 `tempdb` 資料和日誌檔案存放在 `D:\rdsdbdata\DATA` 目錄中。依預設，這兩個檔案都會從 8 MB 開始。

在具有執行個體存放區的執行個體上，RDS 會將 `tempdb` 資料和日誌檔案存放在 `T:\rdsdbdata\DATA` 目錄中。

當 `tempdb` 只有一個資料檔案 (`tempdb.mdf`) 和一個日誌檔案 (`templog.ldf`) 時，`templog.ldf` 預設從 8 MB 開始，且 `tempdb.mdf` 從執行個體儲存體容量的 80% 或以上開始。20% 的儲存容量或 200 GB (以較少者為準) 可隨時開始。多個 `tempdb` 資料檔案會平均分割 80% 的磁碟空間，而日誌檔案的初始大小一律為 8 MB。

例如，如果您將資料庫執行個體類別從 `db.m5.2xlarge` 修改為 `db.m5d.2xlarge`，大小為 `tempdb` 的資料檔案將從每個 8 MB 增加至 234 GB。

**注意**  
除了執行個體存放區上的 `tempdb` 資料和日誌檔案 (`T:\rdsdbdata\DATA`)，您仍然可以在資料磁碟區建立額外的 `tempdb` 資料和日誌檔案 (`D:\rdsdbdata\DATA`)。這些檔案的初始大小一律為 8 MB。

## 備份考量
<a name="SQLServer.InstanceStore.Backups"></a>

您可能需要長時間保留備份，從而產生一段時間的成本。`tempdb` 資料和日誌區塊可能會經常變更，視工作負載而定。這可以大大增加資料庫快照大小。

`tempdb` 在執行個體存放區時，快照不包含暫存檔案。這表示相較於僅限 EBS 的儲存體，快照大小較小，而且耗用的免費備份配置較少。

## 磁碟已滿錯誤
<a name="SQLServer.InstanceStore.DiskFull"></a>

如果您使用執行個體存放區中的所有可用空間，可能會收到下列錯誤：
+ 資料庫 'tempdb' 的交易日誌因 'ACTIVE\$1TRANSACTION' 已滿。
+ 無法在資料庫 'tempdb' 中為物件 'dbo.SORT temporary run storage: 140738941419520' 配置空間，因為 'PRIMARY' 檔案群組已滿。藉由刪除不需要的檔案、卸除檔案群組中的物件、將其他檔案新增至檔案群組，或為檔案群組中的現有檔案設定自動成長，以建立磁碟空間。

執行個體存放區已滿時，您可以執行下列一或多項動作：
+ 調整您的工作負載或使用 `tempdb` 的方式。
+ 擴大以使用具有更多 NVMe 儲存體的資料庫執行個體類別。
+ 停止使用執行個體存放區，並使用只有 EBS 存儲體的執行個體類別。
+ 在 EBS 磁碟區上新增 `tempdb` 次要資料或日誌檔案，以使用混合模式。

## 移除執行個體存放區
<a name="SQLServer.InstanceStore.Disable"></a>

若要移除執行個體儲存體，請修改您的 SQL Server 資料庫執行個體，以使用不支援執行個體儲存體的執行個體類型，例如 db.m5、db.r5 或 db.x1e。

**注意**  
當您移除執行個體存放區時，暫存檔案會移至 `D:\rdsdbdata\DATA` 目錄，並將大小減少為 8 MB。

# 搭配 Amazon RDS for Microsoft SQL Server 使用擴充事件
<a name="SQLServer.ExtendedEvents"></a>

您可以在 Microsoft SQL Server 中使用擴充事件來擷取 Amazon RDS for SQL Server 的偵錯和疑難排解資訊。擴充事件會取代 SQL Trace 和 Server Profiler，其已被 Microsoft 取代。擴充事件類似於分析工具追蹤，但對所追蹤的事件具有更細微的控制。Amazon RDS 上的 SQL Server 2016 和更新版本支援擴充事件。如需詳細資訊，請參閱 Microsoft 文件中的[擴充事件概觀](https://docs.microsoft.com/en-us/sql/relational-databases/extended-events/extended-events)。

對於在 Amazon RDS for SQL Server 中具有主要使用者權限的使用者，會自動開啟擴充事件。

**Topics**
+ [限制與建議](#SQLServer.ExtendedEvents.Limits)
+ [設定 RDS for SQL Server 上的擴充事件](#SQLServer.ExtendedEvents.Config)
+ [多可用區域部署考量](#SQLServer.ExtendedEvents.MAZ)
+ [查詢擴充的事件檔案](#SQLServer.ExtendedEvents.Querying)

## 限制與建議
<a name="SQLServer.ExtendedEvents.Limits"></a>

在 RDS for SQL Server 上使用擴充事件時，會套用下列限制：
+ 擴充事件僅支援 Enterprise 和 Standard 版本。
+ 您無法變更預設的擴充事件工作階段。
+ 請務必將工作階段記憶體分區模式設定為 `NONE`。
+ 工作階段事件保留模式可以是 `ALLOW_SINGLE_EVENT_LOSS` 或 `ALLOW_MULTIPLE_EVENT_LOSS`。
+ 不支援 Windows 事件追蹤 (ETW) 目標。
+ 請確定檔案目標位於 `D:\rdsdbdata\log` 目錄中。
+ 對於配對相符目標，請將 `respond_to_memory_pressure` 屬性設定為 `1`。
+ 信號緩衝區目標記憶體不能大於 4 MB。
+ 不支援下列動作：
  + `debug_break`
  + `create_dump_all_threads`
  + `create_dump_single_threads`
+ 下列版本及更新版本支援此 `rpc_completed` 事件：15.0.4083.2、14.0.3370.1、13.0.5865.1、12.0.6433.1、11.0.7507.2。

## 設定 RDS for SQL Server 上的擴充事件
<a name="SQLServer.ExtendedEvents.Config"></a>

在 RDS for SQL Server 上，您可以設定擴充事件工作階段的特定參數值。下表描述了可設定的參數。


| 參數名稱 | 描述 | RDS 預設值 | 最小值 | 最大值 | 
| --- | --- | --- | --- | --- | 
| xe\$1session\$1max\$1memory | 指定要配置給工作階段用於事件緩衝的記憶體數量上限。此值對應於事件工作階段的 max\$1memory 設定。 | 4 MB | 4 MB | 8 MB | 
| xe\$1session\$1max\$1event\$1size | 指定大型事件允許的記憶體大小上限。此值對應於事件工作階段的 max\$1event\$1size 設定。 | 4 MB | 4 MB | 8 MB | 
| xe\$1session\$1max\$1dispatch\$1latency | 指定傳送至擴充事件工作階段目標之前，事件在記憶體中緩衝的時間長度。此值對應於事件工作階段的 max\$1dispatch\$1latency 設定。 | 30 秒 | 1 秒鐘 | 30 秒 | 
| xe\$1file\$1target\$1size | 指定檔案目標的大小上限。此值對應於檔案目標的 max\$1file\$1size 設定。 | 100 MB | 10 MB | 1 GB | 
| xe\$1file\$1retention | 指定事件工作階段之檔案目標產生的檔案保留時間 (以天為單位)。 | 7 天 | 0 天 | 7 天 | 

**注意**  
將 `xe_file_retention` 設定為零會在 SQL Server 釋放這些檔案的鎖定之後自動移除 .xel 檔案。每當 .xel 檔案達到 `xe_file_target_size` 中設定的大小限制時，就會釋放鎖定。

您可以使用 `rdsadmin.dbo.rds_show_configuration` 存放的程序來顯示這些參數的目前值。例如，使用下列 SQL 陳述式來檢視 `xe_session_max_memory` 的目前設定。

```
exec rdsadmin.dbo.rds_show_configuration 'xe_session_max_memory'
```

您可以使用 `rdsadmin.dbo.rds_set_configuration` 存放的程序來對其進行修改。例如，使用下列 SQL 陳述式設定 `xe_session_max_memory` 為 4 MB。

```
exec rdsadmin.dbo.rds_set_configuration 'xe_session_max_memory', 4
```

## 多可用區域部署考量
<a name="SQLServer.ExtendedEvents.MAZ"></a>

當您在主要資料庫執行個體上建立擴充事件工作階段時，它不會傳播到待命複本。您可以容錯移轉並在新的主要資料庫執行個體上建立擴充事件工作階段。或者，您可以移除並重新新增異地同步備份組態，將擴充事件工作階段傳播到待命複本。RDS 會停止待命複本上的所有非預設擴充事件工作階段，讓這些工作階段不會耗用待命的資源。因此，待命複本成為主要資料庫執行個體之後，請務必手動啟動新主要資料庫執行個體上的擴充事件工作階段。

**注意**  
這種方法同時適用於「Always On 可用性群組」和「資料庫鏡像」。

您也可以使用 SQL Server 代理程式任務來追蹤待命複本，並在待命成為主要資料庫執行個體時啟動工作階段。例如，在 SQL Server 代理程式任務步驟中使用下列查詢，以重新啟動主要資料庫執行個體上的事件工作階段。

```
BEGIN
    IF (DATABASEPROPERTYEX('rdsadmin','Updateability')='READ_WRITE'
    AND DATABASEPROPERTYEX('rdsadmin','status')='ONLINE'
    AND (DATABASEPROPERTYEX('rdsadmin','Collation') IS NOT NULL OR DATABASEPROPERTYEX('rdsadmin','IsAutoClose')=1)
    )
    BEGIN
        IF NOT EXISTS (SELECT 1 FROM sys.dm_xe_sessions WHERE name='xe1')
            ALTER EVENT SESSION xe1 ON SERVER STATE=START
        IF NOT EXISTS (SELECT 1 FROM sys.dm_xe_sessions WHERE name='xe2')
            ALTER EVENT SESSION xe2 ON SERVER STATE=START
    END
END
```

如果這些工作階段處於停止狀態，此查詢會在主要資料庫執行個體上重新啟動事件工作階段 `xe1` 和 `xe2`。您也可以將具有便利間隔的排程新增至此查詢。

## 查詢擴充的事件檔案
<a name="SQLServer.ExtendedEvents.Querying"></a>

您可以使用 SQL Server Management Studio 或 `sys.fn_xe_file_target_read_file` 函數來檢視使用檔案目標之擴充事件的資料。如需有關此函數的詳細資訊，請參閱 Microsoft 文件中的 [sys.fn\$1xe\$1file\$1target\$1read\$1file (Transact-SQL)](https://docs.microsoft.com/en-us/sql/relational-databases/system-functions/sys-fn-xe-file-target-read-file-transact-sql)。

擴充事件檔案目標只能將檔案寫入 RDS for SQL Server 上的 `D:\rdsdbdata\log` 目錄。

例如，使用下列 SQL 查詢列出名稱以 `xe` 開頭之擴充事件工作階段之所有檔案的內容。

```
SELECT * FROM sys.fn_xe_file_target_read_file('d:\rdsdbdata\log\xe*', null,null,null);
```

# 使用 RDS for SQL Server 存取交易日誌備份
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess"></a>

藉由取 RDS for SQL Server 的交易日誌備份，您可以列出資料庫的交易日誌備份檔案，並將其複製到目標 Amazon S3 儲存貯體。透過在 Amazon S3 儲存貯體中複製交易日誌備份，您可以結合完整和差異資料庫備份使用它們，以執行時間點資料庫還原。您可以使用 RDS 預存程序來設定交易日誌備份的存取、列出可用的交易日誌備份，以及將它們複製到 Amazon S3 儲存貯體。

存取交易日誌備份可提供下列功能和優點：
+ 列出和檢視 RDS for SQL Server 資料庫執行個體上資料庫之可用交易日誌備份的中繼資料。
+ 將可用的交易日誌備份從 RDS for SQL Server 複製到目標 Amazon S3 儲存貯體。
+ 執行資料庫的時間點還原，而不需還原整個資料庫執行個體。如需將資料庫執行個體還原至某個時間點的詳細資訊，請參閱 [將 Amazon RDS 的資料庫執行個體還原至指定時間](USER_PIT.md)。

## 可用性與支援
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Availability"></a>

所有 AWS 區域都支援存取交易日誌備份。Amazon RDS 上支援的所有 Microsoft SQL Server 版本都可以存取交易日誌備份。

## 要求
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Requirements"></a>

必須符合下列需求，才能啟用對交易日誌備份的存取：
+  必須在資料庫執行個體上啟用自動備份，且備份保留必須設為一或多天的值。如需啟用自動備份和設定保留政策的詳細資訊，請參閱 [啟用自動備份](USER_WorkingWithAutomatedBackups.Enabling.md)。
+ Amazon S3 儲存貯體與來源資料庫執行個體必須存在於相同的帳戶和區域中。在啟用對交易日誌備份的存取之前，請選擇現有的 Amazon S3 儲存貯體，或[建立新的儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingaBucket.html)，用於交易日誌備份檔案。
+ Amazon S3 儲存貯體許可政策必須設定如下，才能允許 Amazon RDS 將交易日誌檔複製到其中：

  1. 將儲存貯體上的物件帳戶擁有權屬性設為 **Bucket Owner Preferred** (偏好的儲存貯體擁有者)。

  1. 新增下列政策。根據預設，將沒有任何政策，因此請使用儲存貯體存取控制清單 (ACL) 來編輯儲存貯體政策並加以新增。

  

  下列範例使用 ARN 來指定資源。建議您在資源型信任關係中使用 `SourceArn` 和 `SourceAccount` 全域條件內容金鑰，將服務的許可限定於特定資來源。如需使用 ARN 的詳細資訊，請參閱 [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) 和 [Amazon RDS 中的 Amazon Resource Name (ARN)](USER_Tagging.ARN.md)。

    
**Example 用於存取交易日誌備份的 Amazon S3 許可政策範例**  

------
#### [ JSON ]

****  

  ```
      {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "Only allow writes to my bucket with bucket owner full control",
              "Effect": "Allow",
              "Principal": {
                  "Service": "backups.rds.amazonaws.com"
              },
              "Action": "s3:PutObject",
              "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/{customer_path}/*",
              "Condition": {
                  "StringEquals": {
                      "s3:x-amz-acl": "bucket-owner-full-control",
                      "aws:sourceAccount": "{customer_account}",
                      "aws:sourceArn": "{db_instance_arn}"
                  }
              }
          }
      ]
  }
  ```

------
+ 存取 Amazon S3 儲存貯體的 AWS Identity and Access Management (IAM) 角色。如果您已經有 IAM 角色，則可直接使用。當您使用 AWS 管理主控台新增 `SQLSERVER_BACKUP_RESTORE` 選項時，可以選擇替您建立新的 IAM 角色。或者，您也可以手動建立新的。如需使用 `SQLSERVER_BACKUP_RESTORE` 建立和設定 IAM 角色的詳細資訊，請參閱 [手動建立原生備份與還原的 IAM 角色](SQLServer.Procedural.Importing.Native.Enabling.md#SQLServer.Procedural.Importing.Native.Enabling.IAM)。
+ `SQLSERVER_BACKUP_RESTORE` 選項必須新增至資料庫執行個體上的選項群組。如需新增 `SQLSERVER_BACKUP_RESTORE` 選項的詳細資訊，請參閱 [SQL Server 對原生備份與還原的支援](Appendix.SQLServer.Options.BackupRestore.md)。
**注意**  
如果您的資料庫執行個體已啟用儲存加密，則必須在原生備份和還原選項群組中提供的 IAM 角色中提供 AWS KMS (KMS) 動作和金鑰。

  或者，如果您打算使用 `rds_restore_log` 預存程序執行時間點資料庫還原，建議將相同的 Amazon S3 路徑用於原生備份和還原選項群組，以及存取交易日誌備份。此方法可確保 Amazon RDS 擔任選項群組中的角色來執行還原日誌功能時，可以從相同的 Amazon S3 路徑中擷取交易日誌備份。
+ 如果資料庫執行個體已加密，無論加密類型為何 （受AWS 管金鑰或客戶受管金鑰），您必須在 IAM 角色和`rds_tlog_backup_copy_to_S3`預存程序中提供客戶受管 KMS 金鑰。

## 限制與建議
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Limitations"></a>

存取交易日誌備份具有下列限制和建議：
+  對於備份保留設定為 1 到 35 天的任何資料庫執行個體，您最多可以列出並複製最後七天的交易日誌備份。
+  用於存取交易日誌備份的 Amazon S3 儲存貯體與來源資料庫執行個體必須存在於相同的帳戶和區域中。不支援跨帳戶與跨區域複本。
+  只能將一個 Amazon S3 儲存貯體設定為將交易日誌備份複製到的目標。您可以使用 `rds_tlog_copy_setup` 預存程序選擇新的目標 Amazon S3 儲存貯體。如需選擇新目標 Amazon S3 儲存貯體的詳細資訊，請參閱 [設定交易日誌備份的存取權](USER.SQLServer.AddlFeat.TransactionLogAccess.Enabling.md)。
+  如果未啟用您的 RDS 執行個體進行儲存體加密，則無法在使用 `rds_tlog_backup_copy_to_S3` 預存程序時指定 KMS 金鑰。
+  不支援多帳戶複製。用於複製的 IAM 角色只允許資料庫執行個體擁有者帳戶內 Amazon S3 儲存貯體的寫入存取權。
+  只有兩個任何類型的並行任務才能在 RDS for SQL Server 資料庫執行個體上執行。
+  在指定時間內，只能針對單一資料庫執行一個複製任務。如果您想要複製資料庫執行個體上多個資料庫的交易日誌備份，請針對每個資料庫使用個別的複製任務。
+  如果您複製已存在於 Amazon S3 儲存貯體且名稱相同的交易日誌備份，將覆寫現有的交易日誌備份。
+  您只能執行隨附的預存程序，存取主要資料庫執行個體上的交易日誌備份。您無法在 RDS for SQL Server 僅供讀取複本上，也無法在多可用區域資料庫叢集的次要執行個體上執行這些預存程序。
+  如果在 `rds_tlog_backup_copy_to_S3` 預存程序執行期間重新啟動 RDS for SQL Server 資料庫執行個體，則在資料庫執行個體再次上線時，任務將自動從頭開始重新啟動。在重新開機之前執行任務時，已複製到 Amazon S3 儲存貯體的任何交易日誌備份都會遭到覆寫。
+ 無法設定 Microsoft SQL Server 系統資料庫和 `RDSAdmin` 資料庫，進行交易日誌備份存取。
+  不支援複製到 SSE-KMS 加密的儲存貯體。

# 設定交易日誌備份的存取權
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Enabling"></a>

若要設定交易日誌備份的存取權，請完成 [要求](USER.SQLServer.AddlFeat.TransactionLogAccess.md#USER.SQLServer.AddlFeat.TransactionLogAccess.Requirements) 區段中的需求清單，然後執行 `rds_tlog_copy_setup` 預存程序。此程序將在資料庫執行個體層級啟用對交易日誌備份功能的存取。您不需要針對資料庫執行個體上的每個個別資料庫執行個體執行此程序。

**重要**  
資料庫使用者必須在每個資料庫上獲授予 SQL Server 內的 `db_owner` 角色，才能設定和使用交易日誌備份功能的存取權。

**Example 使用方式：**  

```
exec msdb.dbo.rds_tlog_copy_setup
@target_s3_arn='arn:aws:s3:::amzn-s3-demo-bucket/myfolder';
```

以下是必要參數：
+ `@target_s3_arn` – 要將交易日誌備份檔案複製到其中之目標 Amazon S3 儲存貯體的 ARN。

**Example 設定 Amazon S3 目標儲存貯體的範例：**  

```
exec msdb.dbo.rds_tlog_copy_setup @target_s3_arn='arn:aws:s3:::amzn-s3-demo-logging-bucket/mytestdb1';
```

若要驗證組態，請呼叫 `rds_show_configuration` 預存程序。

**Example 驗證組態的範例：**  

```
exec rdsadmin.dbo.rds_show_configuration @name='target_s3_arn_for_tlog_copy';
```

若要修改交易日誌備份的存取權，以指向不同的 Amazon S3 儲存貯體，您可以檢視目前的 Amazon S3 儲存貯體值，然後使用 `@target_s3_arn` 的新值重新執行預存程序 `rds_tlog_copy_setup`。

**Example 檢視為了存取交易日誌備份而設定現有 Amazon S3 儲存貯體的範例**  

```
exec rdsadmin.dbo.rds_show_configuration @name='target_s3_arn_for_tlog_copy';
```

**Example 更新為新目標 Amazon S3 儲存貯體的範例**  

```
exec msdb.dbo.rds_tlog_copy_setup @target_s3_arn='arn:aws:s3:::amzn-s3-demo-logging-bucket1/mynewfolder';
```

# 列出可用的交易日誌備份
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Listing"></a>

使用 RDS for SQL Server 時，資料庫若設定為使用完整復原模式，且其資料庫執行個體備份保留設為一或多天，則會自動啟用交易日誌備份。透過啟用對交易日誌備份的存取，最多七天的這些交易日誌備份可供您複製到 Amazon S3 儲存貯體。

在啟用對交易日誌備份的存取之後，您可以開始使用它，來列出和複製可用的交易日誌備份檔案。

**列出交易日誌備份**

若要列出個別資料庫可用的所有交易日誌備份，請呼叫 `rds_fn_list_tlog_backup_metadata` 函數。您可以在呼叫函數時使用 `ORDER BY` 或 `WHERE` 子句。

**Example 列出並篩選可用交易日誌備份檔案的範例**  

```
SELECT * from msdb.dbo.rds_fn_list_tlog_backup_metadata('mydatabasename');
SELECT * from msdb.dbo.rds_fn_list_tlog_backup_metadata('mydatabasename') WHERE rds_backup_seq_id = 3507;
SELECT * from msdb.dbo.rds_fn_list_tlog_backup_metadata('mydatabasename') WHERE backup_file_time_utc > '2022-09-15 20:44:01' ORDER BY backup_file_time_utc DESC;
```

![\[來自 rds_fn_list_tlog_backup_metadata 的輸出\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/sql_accesstransactionlogs_func.png)


`rds_fn_list_tlog_backup_metadata` 函數會傳回下列輸出：


****  

| 欄名稱 | 資料類型 | Description | 
| --- | --- | --- | 
| `db_name` | sysname | 提供用來列出其交易日誌備份的資料庫名稱。 | 
| `db_id` | int | 輸入參數 `db_name` 的內部資料庫識別符。 | 
| `family_guid` | uniqueidentifier | 建立時原始資料庫的唯一 ID。此值會在資料庫還原時會保持相同，即使是不同的資料庫名稱也是如此。 | 
| `rds_backup_seq_id` | int | RDS 在內部用來維護每個交易日誌備份檔案之序號的 ID。 | 
| `backup_file_epoch` | bigint | 產生交易備份檔案的 epoch 時間。 | 
| `backup_file_time_utc` | datetime | `backup_file_epoch` 值的 UTC 時間轉換值。 | 
| `starting_lsn` | numeric(250) | 交易日誌備份檔案之第一個或最舊日誌記錄的日誌序號。 | 
| `ending_lsn` | numeric(250) | 交易日誌備份檔案之最後一個或下一個日誌記錄的日誌序號。 | 
| `is_log_chain_broken` | bit | 布林值，指出目前交易日誌備份檔案與上一個交易日誌備份檔案之間的日誌鏈是否中斷。 | 
| `file_size_bytes` | bigint | 交易備份集的大小 (以位元組為單位)。 | 
| `Error` | varchar(4000) | 錯誤訊息，如果 `rds_fn_list_tlog_backup_metadata` 函數擲出例外狀況的話。NULL，如果沒有例外狀況的話。 | 

# 複製交易日誌備份
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Copying"></a>

若要將個別資料庫的一組可用交易日誌備份複製到 Amazon S3 儲存貯體，請呼叫 `rds_tlog_backup_copy_to_S3` 預存程序。`rds_tlog_backup_copy_to_S3` 預存程序將起始新任務以複製交易日誌備份。

**注意**  
`rds_tlog_backup_copy_to_S3` 預存程序將複製交易日誌備份，而不會根據 `is_log_chain_broken` 屬性進行驗證。因此，您應該在執行 `rds_tlog_backup_copy_to_S3` 預存程序之前，手動確認未中斷的日誌鏈。如需進一步說明，請參閱 [驗證交易日誌備份日誌鏈](#USER.SQLServer.AddlFeat.TransactionLogAccess.Copying.LogChain)。

**Example `rds_tlog_backup_copy_to_S3` 預存程序的使用方式**  

```
exec msdb.dbo.rds_tlog_backup_copy_to_S3
	@db_name='mydatabasename',
	[@kms_key_arn='arn:aws:kms:region:account-id:key/key-id'],	
	[@backup_file_start_time='2022-09-01 01:00:15'],
	[@backup_file_end_time='2022-09-01 21:30:45'],
	[@starting_lsn=149000000112100001],
	[@ending_lsn=149000000120400001],
	[@rds_backup_starting_seq_id=5],
	[@rds_backup_ending_seq_id=10];
```

下列是可用的輸入參數：


****  

| 參數 | Description | 
| --- | --- | 
| `@db_name` | 要複製其交易日誌備份的資料庫名稱。 | 
| `@kms_key_arn` |  客戶管理的 KMS 金鑰。如果您使用 AWS 受管 KMS 金鑰加密資料庫執行個體，則必須建立客戶受管金鑰。如果您使用客戶管理的金鑰為資料庫執行個體加密，則可以使用相同的 KMS 金鑰 ARN。 | 
| `@backup_file_start_time` | 從 `rds_fn_list_tlog_backup_metadata` 函數的 `[backup_file_time_utc]` 資料欄提供的 UTC 時間戳記。 | 
| `@backup_file_end_time` | 從 `rds_fn_list_tlog_backup_metadata` 函數的 `[backup_file_time_utc]` 資料欄提供的 UTC 時間戳記。 | 
| `@starting_lsn` | 從 `rds_fn_list_tlog_backup_metadata` 函數的 `[starting_lsn]` 資料欄提供的日誌序號 (LSN) | 
| `@ending_lsn` | 從 `rds_fn_list_tlog_backup_metadata` 函數的 `[ending_lsn]` 資料欄提供的日誌序號 (LSN)。 | 
| `@rds_backup_starting_seq_id` | 從 `rds_fn_list_tlog_backup_metadata` 函數的 `[rds_backup_seq_id]` 資料欄提供的序號。 | 
| `@rds_backup_ending_seq_id` | 從 `rds_fn_list_tlog_backup_metadata` 函數的 `[rds_backup_seq_id]` 資料欄提供的序號。 | 

您可以指定一組時間、LSN 或序列 ID 參數。只需要一組參數。

您也可以在任何集合中只指定單一參數。例如，透過僅針對 `backup_file_end_time` 參數提供一值，七天限制內在該時間之前的所有可用交易日誌備份檔案都會複製到 Amazon S3 儲存貯體。

下列是 `rds_tlog_backup_copy_to_S3` 預存程序的有效輸入參數組合。


****  

| 提供的參數 | 預期的結果 | 
| --- | --- | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3  <br />	@db_name = 'testdb1',<br />            @backup_file_start_time='2022-08-23 00:00:00',<br />            @backup_file_end_time='2022-08-30 00:00:00';</pre>  | 複製過去七天的交易日誌備份，且存在於提供的範圍 `backup_file_start_time` 與 `backup_file_end_time` 之間。在此範例中，預存程序會複製已在 '2022-08-23 00:00:00' 與 '2022-08-30 00:00:00'之間產生的交易日誌備份。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />           @db_name = 'testdb1',<br />           @backup_file_start_time='2022-08-23 00:00:00';</pre>  | 複製過去七天的交易日誌備份，並從提供的 `backup_file_start_time` 開始。在此範例中，預存程序會複製來自 '2022-08-23 00:00:00' 的交易日誌備份，直到最新的交易日誌備份。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />          @db_name = 'testdb1',<br />          @backup_file_end_time='2022-08-30 00:00:00';</pre>  | 複製過去七天的交易日誌備份，直到提供的 `backup_file_end_time`。在此範例中，預存程序會複製來自 '2022-08-23 00:00:00' 直到 '2022-08-30 00:00:00' 的交易日誌備份。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />         @db_name='testdb1',<br />         @starting_lsn =1490000000040007,<br />         @ending_lsn =  1490000000050009;</pre>  | 複製過去七天可用且在所提供範圍 `starting_lsn` 與 `ending_lsn` 之間的交易日誌備份。在此範例中，預存程序會複製過去七天，LSN 範圍介於 1490000000040007 和 1490000000050009 之間的交易日誌備份。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />        @db_name='testdb1',<br />        @starting_lsn =1490000000040007;</pre>  |  複製過去七天可用的交易日誌備份，從提供的 `starting_lsn` 開始。在此範例中，預存程序會複製來自 LSN 1490000000040007 的交易日誌備份，直到最新的交易日誌備份。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />        @db_name='testdb1',<br />        @ending_lsn  =1490000000050009;</pre>  |  複製過去七天可用的交易日誌備份，直到提供的 `ending_lsn`。在此範例中，預存程序會複製從過去七天開始直到 lsn 1490000000050009 的交易日誌備份。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />       @db_name='testdb1',<br />       @rds_backup_starting_seq_id= 2000,<br />       @rds_backup_ending_seq_id= 5000;</pre>  |  複製過去七天可用且存在於所提供範圍 `rds_backup_starting_seq_id` 與 `rds_backup_ending_seq_id` 之間的交易日誌備份。在此範例中，預存程序會複製從過去七天開始，並在所提供 rds 備份序列 ID 範圍內的交易日誌備份，從 seq\$1id 2000 開始，直到 to seq\$1id 5000。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />       @db_name='testdb1',<br />       @rds_backup_starting_seq_id= 2000;</pre>  |  複製過去七天可用的交易日誌備份，從提供的 `rds_backup_starting_seq_id` 開始。在此範例中，預存程序會複製從 seq\$1id 2000 開始的交易日誌備份，直到最新的交易日誌備份。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />      @db_name='testdb1',<br />      @rds_backup_ending_seq_id= 5000;</pre>  |  複製過去七天可用的交易日誌備份，直到提供的 `rds_backup_ending_seq_id`。在此範例中，預存程序會複製從過去七天開始，直到 seq\$1id 5000 的交易日誌備份。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />      @db_name='testdb1',<br />      @rds_backup_starting_seq_id= 2000;<br />      @rds_backup_ending_seq_id= 2000;</pre>  |  複製具有所提供 `rds_backup_starting_seq_id` 的單一交易日誌備份，如果是在過去七天內提供的話。在此範例中，預存程序會複製 seq\$1id 為 2000 的單一交易日誌備份 (如果它存在於過去七天內)。  | 

## 驗證交易日誌備份日誌鏈
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Copying.LogChain"></a>

 設定用於存取交易日誌備份的資料庫必須已啟用自動備份保留。自動備份保留會將資料庫執行個體上的資料庫設為 `FULL` 復原模式。若要支援資料庫的時間點還原，請避免變更資料庫復原模式，這可能會導致日誌鏈中斷。建議您繼續將資料庫設為 `FULL` 復原模式。

若要在複製交易日誌備份之前手動驗證日誌鏈，請呼叫 `rds_fn_list_tlog_backup_metadata` 函數並檢閱 `is_log_chain_broken` 資料欄中的值。值「1」表示目前日誌備份與上一個日誌備份之間的日誌鏈已中斷。

下列範例會在 `rds_fn_list_tlog_backup_metadata` 預存程序的輸出中顯示中斷的日誌鏈。

![\[顯示中斷日誌鏈的 rds_fn_list_tlog_backup_metadata 輸出。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/sql_accesstransactionlogs_logchain_error.png)


在一般日誌鏈中，所指定 rds\$1sequence\$1id 之 first\$1lsn 的日誌序號 (LSN) 值應該符合先前 rds\$1sequence\$1id 中 last\$1lsn 的值。在影像中，rds\$1sequence\$1id 45 具有 first\$1lsn 值 90987，其不符合先前 rds\$1sequence\$1id 44 的 last\$1lsn 值 90985。

如需 SQL Server 交易日誌架構和日誌序號的詳細資訊，請參閱 Microsoft SQL Server 文件中的[交易日誌邏輯架構](https://learn.microsoft.com/en-us/sql/relational-databases/sql-server-transaction-log-architecture-and-management-guide?view=sql-server-ver15#Logical_Arch)。

# Amazon S3 儲存貯體資料夾和檔案結構
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.S3namingConvention"></a>

交易日誌備份在 Amazon S3 儲存貯體內具有下列標準結構和命名慣例：
+ 系統會在每個資料庫的 `target_s3_arn` 路徑下建立一個新資料夾，其命名結構為 `{db_id}.{family_guid}`。
+ 在資料夾內，交易日誌備份的檔案名稱結構為 `{db_id}.{family_guid}.{rds_backup_seq_id}.{backup_file_epoch}`。
+ 您可以使用 `rds_fn_list_tlog_backup_metadata` 函數檢視 `family_guid,db_id,rds_backup_seq_id and backup_file_epoch` 的詳細資訊。

下列範例顯示 Amazon S3 儲存貯體內一組交易日誌備份的資料夾和檔案結構。

![\[可存取交易日誌的 Amazon S3 儲存貯體結構\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/sql_accesstransactionlogs_s3.png)


# 追蹤任務的狀態
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.TrackTaskStatus"></a>

 若要追蹤複製任務的狀態，請呼叫 `rds_task_status` 預存程序。如果您不提供任何參數，預存程序會傳回所有任務的狀態。

**Example 使用方式：**  

```
exec msdb.dbo.rds_task_status
  @db_name='database_name',
  @task_id=ID_number;
```

下列是選用參數：
+ `@db_name`– 要顯示任務狀態之資料庫的名稱。
+ `@task_id`– 要顯示任務狀態之任務的 ID。

**Example 列出特定任務 ID 之狀態的範例：**  

```
exec msdb.dbo.rds_task_status @task_id=5;
```

**Example 列出特定資料庫和任務之狀態的範例：**  

```
exec msdb.dbo.rds_task_status@db_name='my_database',@task_id=5;
```

**Example 列出特定資料庫之所有任務及其狀態的範例：**  

```
exec msdb.dbo.rds_task_status @db_name='my_database';
```

**Example 列出目前執行個體上所有任務及其狀態的範例：**  

```
exec msdb.dbo.rds_task_status;
```

# 取消任務
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.CancelTask"></a>

若要取消執行中任務，請呼叫 `rds_cancel_task` 預存程序。

**Example 使用方式：**  

```
exec msdb.dbo.rds_cancel_task @task_id=ID_number;
```

以下是必要參數：
+ `@task_id`– 要取消之任務的 ID。您可以呼叫 `rds_task_status` 預存程序來檢視任務 ID。

如需檢視和取消執行中任務的詳細資訊，請參閱 [使用原生備份和還原，匯入和匯出 SQL Server 資料庫](SQLServer.Procedural.Importing.md)。

# 針對交易日誌備份的存取進行疑難排解
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Troubleshooting"></a>

下列是您使用預存程序存取交易日誌備份時可能遇到的問題。


****  

| 預存程序 | 錯誤訊息 | 問題 | 故障診斷建議 | 
| --- | --- | --- | --- | 
| rds\$1tlog\$1copy\$1setup | 此資料庫執行個體上停用備份。啟用其保留至少為 "1" 的資料庫執行個體備份，然後再試一次。 | 未針對資料庫執行個體啟用自動備份。 |  必須啟用其保留至少一天的資料庫執行個體備份保留。如需啟用自動備份和設定備份保留的詳細資訊，請參閱 [Backup retention period (備份保留期間)](USER_WorkingWithAutomatedBackups.BackupRetention.md)。 | 
| rds\$1tlog\$1copy\$1setup | 執行 rds\$1tlog\$1copy\$1setup 預存程序時發生錯誤。重新連線至 RDS 端點，然後再試一次。 | 發生內部錯誤。 | 重新連線至 RDS 端點，然後重新執行 `rds_tlog_copy_setup` 預存程序。 | 
| rds\$1tlog\$1copy\$1setup | 不支援在交易內執行 rds\$1tlog\$1backup\$1copy\$1setup 預存程序。驗證工作階段沒有已開啟的交易，然後再試一次。 | 已在交易內使用 `BEGIN` 和 `END` 嘗試預存程序。 | 避免在執行 `rds_tlog_copy_setup` 預存程序時使用 `BEGIN` 和 `END`。 | 
| rds\$1tlog\$1copy\$1setup | 輸入參數 `@target_s3_arn` 的 S3 儲存貯體名稱應該至少包含一個空格以外的字元。 | 提供給輸入參數 `@target_s3_arn` 的值不正確。 | 確定輸入參數 `@target_s3_arn` 指定完整的 Amazon S3 儲存貯體 ARN。 | 
| rds\$1tlog\$1copy\$1setup | `SQLSERVER_BACKUP_RESTORE` 選項未啟用，或正在進行啟用。啟用此選項，或稍後再試一次。 | `SQLSERVER_BACKUP_RESTORE` 選項未在資料庫執行個體上啟用，或者只是啟用並擱置內部啟用。 | 依 Requirements (需求) 區段中所指定，啟用 `SQLSERVER_BACKUP_RESTORE` 選項。稍候幾分鐘，然後重新執行 `rds_tlog_copy_setup` 預存程序。 | 
| rds\$1tlog\$1copy\$1setup | 輸入參數 `@target_s3_arn` 的目標 S3 arn 不能空白或為 null。 | 已提供 `NULL` 值給輸入參數 `@target_s3_arn`，或者未提供值。 | 確定輸入參數 `@target_s3_arn` 指定完整的 Amazon S3 儲存貯體 ARN。 | 
| rds\$1tlog\$1copy\$1setup | 輸入參數 `@target_s3_arn` 的目標 S3 arn 必須以 arn:aws 開頭。 | 已提供前面沒有 `arn:aws` 的輸入參數 `@target_s3_arn`。 | 確定輸入參數 `@target_s3_arn` 指定完整的 Amazon S3 儲存貯體 ARN。 | 
| rds\$1tlog\$1copy\$1setup | 目標 S3 ARN 已設為提供的值。 | 先前已執行 `rds_tlog_copy_setup` 預存程序，並使用了 Amazon S3 儲存貯體 ARN 進行設定。 | 若要修改 Amazon S3 儲存貯體值以存取交易日誌備份，請提供不同的 `target S3 ARN`。 | 
| rds\$1tlog\$1copy\$1setup | 無法產生憑證以啟用對交易日誌備份的存取。確認 `rds_tlog_copy_setup` 隨附 S3 路徑 ARN，稍後再試一次。 | 產生憑證以啟用對交易日誌備份的存取時發生未指定的錯誤。 | 檢閱您的設定組態，然後再試一次。 | 
| rds\$1tlog\$1copy\$1setup | 當有擱置中任務時，您無法執行 rds\$1tlog\$1copy\$1setup 預存程序。等待擱置中任務完成，然後再試一次。 | 隨時只能執行兩項任務。有擱置中任務等待完成。 | 檢視擱置中任務並等待它們完成。如需監控任務狀態的詳細資訊，請參閱 [追蹤任務的狀態](USER.SQLServer.AddlFeat.TransactionLogAccess.TrackTaskStatus.md)。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 已針對資料庫 %s 發出 T-log 備份檔案複製任務，任務識別符為 %d。請稍後再試一次。 | 隨時只能針對指定資料庫執行一個複製任務。有擱置中複製任務等待完成。 | 檢視擱置中任務並等待它們完成。如需監控任務狀態的詳細資訊，請參閱 [追蹤任務的狀態](USER.SQLServer.AddlFeat.TransactionLogAccess.TrackTaskStatus.md)。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 必須至少提供這三個參數集的其中一個。SET-1:(@backup\$1file\$1start\$1time, @backup\$1file\$1end\$1time) \$1 SET-2:(@starting\$1lsn, @ending\$1lsn) \$1 SET-3:(@rds\$1backup\$1starting\$1seq\$1id, @rds\$1backup\$1ending\$1seq\$1id)  | 未提供這三個參數集的任一個，或提供的參數組缺少必要參數。 | 您可以指定時間、lsn 或序列 ID 參數。需要這三組參數中的一組。如需必要參數的詳細資訊，請參閱 [複製交易日誌備份](USER.SQLServer.AddlFeat.TransactionLogAccess.Copying.md)。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 您的執行個體上停用備份。請啟用備份，一段時間後再試一次。 | 未針對資料庫執行個體啟用自動備份。 |  如需啟用自動備份和設定備份保留的詳細資訊，請參閱 [Backup retention period (備份保留期間)](USER_WorkingWithAutomatedBackups.BackupRetention.md)。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 找不到指定的資料庫 %s。 | 提供給輸入參數 `@db_name` 的值與資料庫執行個體上的資料庫名稱不符。 | 使用正確的資料庫名稱。若要依名稱列出所有資料庫，請執行 `SELECT * from sys.databases` | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 無法針對 SQL Server 系統資料庫或 rdsadmin 資料庫執行 rds\$1tlog\$1backup\$1copy\$1to\$1S3 預存程序。 | 提供給輸入參數 `@db_name` 的值與 SQL Server 系統資料庫名稱或 RDSAdmin 資料庫相符。 | 存取交易日誌備份時，不允許使用下列資料庫：`master, model, msdb, tempdb, RDSAdmin.` | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 輸入參數 @db\$1name 的資料庫名稱不能空白或為 null。 | 提供給輸入參數 `@db_name` 的值空白或為 `NULL`。 | 使用正確的資料庫名稱。若要依名稱列出所有資料庫，請執行 `SELECT * from sys.databases` | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 資料庫執行個體備份保留期間必須至少設為 1，才能執行 rds\$1tlog\$1backup\$1copy\$1setup 預存程序。 | 未針對資料庫執行個體啟用自動備份。 | 如需啟用自動備份和設定備份保留的詳細資訊，請參閱 [Backup retention period (備份保留期間)](USER_WorkingWithAutomatedBackups.BackupRetention.md)。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 執行預存程序 rds\$1tlog\$1backup\$1copy\$1to\$1S3 時發生錯誤。重新連線至 RDS 端點，然後再試一次。 | 發生內部錯誤。 | 重新連線至 RDS 端點，然後重新執行 `rds_tlog_backup_copy_to_S3` 預存程序。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 只能提供這三個參數集的其中一個。SET-1:(@backup\$1file\$1start\$1time, @backup\$1file\$1end\$1time) \$1 SET-2:(@starting\$1lsn, @ending\$1lsn) \$1 SET-3:(@rds\$1backup\$1starting\$1seq\$1id, @rds\$1backup\$1ending\$1seq\$1id)  | 提供了多個參數集。 | 您可以指定時間、lsn 或序列 ID 參數。需要這三組參數中的一組。如需必要參數的詳細資訊，請參閱 [複製交易日誌備份](USER.SQLServer.AddlFeat.TransactionLogAccess.Copying.md)。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 不支援在交易內執行 rds\$1tlog\$1backup\$1copy\$1to\$1S3 預存程序。驗證工作階段沒有已開啟的交易，然後再試一次。 | 已在交易內使用 `BEGIN` 和 `END` 嘗試預存程序。 | 避免在執行 `rds_tlog_backup_copy_to_S3` 預存程序時使用 `BEGIN` 和 `END`。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 提供的參數落在交易日誌記錄保留期間之外。若要列出可用的交易日誌備份檔案，請執行 rds\$1fn\$1list\$1tlog\$1backup\$1metadata 函數。  | 對於適合複本保留時段的所提供輸入參數，沒有可用的交易日誌備份。 | 使用有效的一組參數再試一次。如需必要參數的詳細資訊，請參閱 [複製交易日誌備份](USER.SQLServer.AddlFeat.TransactionLogAccess.Copying.md)。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 處理請求時發生許可錯誤。確保儲存貯體與資料庫執行個體位於相同的帳戶和區域中，並確認公開文件中針對範本的 S3 儲存貯體政策許可。  | 偵測到提供的 S3 儲存貯體或其政策許可發生問題。 | 確認您針對存取交易日誌備份進行的設定是正確的。如需 S3 儲存貯體設定需求的詳細資訊，請參閱 [要求](USER.SQLServer.AddlFeat.TransactionLogAccess.md#USER.SQLServer.AddlFeat.TransactionLogAccess.Requirements)。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 不允許在 RDS 僅供讀取複本執行個體上執行 `rds_tlog_backup_copy_to_S3` 預存程序。 | 已在 RDS 僅供讀取複本執行個體上嘗試預存程序。 | 更正至 RDS 主要資料庫執行個體以執行 `rds_tlog_backup_copy_to_S3` 預存程序。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 輸入參數 `@starting_lsn` 的 LSN 必須小於 `@ending_lsn`。 | 提供給輸入參數 `@starting_lsn` 的值大於提供給輸入參數 `@ending_lsn` 的值。 | 確定提供給輸入參數 `@starting_lsn` 的值小於提供給輸入參數 `@ending_lsn` 的值。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | `rds_tlog_backup_copy_to_S3` 預存程序只能由來源資料庫中的 `db_owner` 角色成員執行。 | 對於嘗試在提供的 `db_name` 上執行 `rds_tlog_backup_copy_to_S3` 預存程序的帳戶，尚未授予 `db_owner` 角色。 | 確定執行預存程序的帳戶是透過所提供 `db_name` 的 `db_owner` 角色獲得許可。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 輸入參數的序列 ID `@rds_backup_starting_seq_id` 必須小於或等於或等於`@rds_backup_ending_seq_id`。 | 提供給輸入參數 `@rds_backup_starting_seq_id` 的值大於提供給輸入參數 `@rds_backup_ending_seq_id` 的值。 | 確定提供給輸入參數 `@rds_backup_starting_seq_id` 的值小於提供給輸入參數 `@rds_backup_ending_seq_id` 的值。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | SQLSERVER\$1BACKUP\$1RESTORE 選項未啟用，或正在進行啟用。啟用此選項，或稍後再試一次。 | `SQLSERVER_BACKUP_RESTORE` 選項未在資料庫執行個體上啟用，或者只是啟用並擱置內部啟用。 | 依 Requirements (需求) 區段中所指定，啟用 `SQLSERVER_BACKUP_RESTORE` 選項。稍候幾分鐘，然後重新執行 `rds_tlog_backup_copy_to_S3` 預存程序。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 輸入參數 `@backup_file_start_time` 的開始時間必須小於 `@backup_file_end_time`。 | 提供給輸入參數 `@backup_file_start_time` 的值大於提供給輸入參數 `@backup_file_end_time` 的值。 | 確定提供給輸入參數 `@backup_file_start_time` 的值小於提供給輸入參數 `@backup_file_end_time` 的值。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 由於缺少存取權，我們無法處理請求。請檢查功能的設定和許可。 | Amazon S3 儲存貯體許可可能有問題，或提供的 Amazon S3 儲存貯體位於另一個帳戶或區域中。 | 確保授權 Amazon S3 儲存貯體政策獲得允許 RDS 存取的許可。確保 Amazon S3 儲存貯體與資料庫執行個體位於相同的帳戶和區域中。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 對於未經儲存體加密的執行個體，您無法提供 KMS 金鑰 ARN，作為預存程序的輸入參數。 | 未在資料庫執行個體上啟用儲存體加密時，不應提供輸入參數 `@kms_key_arn`。 | 請不要提供輸入參數給 `@kms_key_arn`。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 對於儲存體加密的執行個體，您必須提供 KMS 金鑰 ARN，作為預存程序的輸入參數。 | 在資料庫執行個體上啟用儲存體加密時，必須提供輸入參數 `@kms_key_arn`。 | 提供輸入參數給 `@kms_key_arn`，其中有一值符合用於交易日誌備份之 Amazon S3 儲存貯體的 ARN。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 在執行 `rds_tlog_backup_copy_to_S3` 預存程序之前，您必須先執行 `rds_tlog_copy_setup` 預存程序並設定 `@target_s3_arn`。 | 在嘗試執行 `rds_tlog_backup_copy_to_S3` 預存程序之前，尚未完成對交易日誌備份設定程序的存取。 | 執行 `rds_tlog_copy_setup` 預存程序，然後再執行 `rds_tlog_backup_copy_to_S3` 預存程序。如需執行設定程序以存取交易日誌備份的詳細資訊，請參閱 [設定交易日誌備份的存取權](USER.SQLServer.AddlFeat.TransactionLogAccess.Enabling.md)。 | 

# Microsoft SQL Server 資料庫引擎的選項
<a name="Appendix.SQLServer.Options"></a>

在本節中，您可以找到可供執行 Microsoft SQL Server 資料庫引擎之 Amazon RDS 執行個體使用的選項的說明。若要啟用這些選項，請將其新增至選項群組，然後使選項群組與您的資料庫執行個體產生關聯。如需更多詳細資訊，請參閱 [使用選項群組](USER_WorkingWithOptionGroups.md)。

如果您要尋找的選用功能不是透過 RDS 選項群組所新增，例如 SSL、Microsoft Windows 驗證和 Amazon S3 整合，請參閱[Microsoft SQL Server on Amazon RDS 的其他功能](User.SQLServer.AdditionalFeatures.md)。

Amazon RDS 支援 Microsoft SQL Server 資料庫執行個體的下列選項。


****  

| 選項 | 選項 ID | 引擎版本 | 
| --- | --- | --- | 
|  [連結的伺服器搭配 Oracle OLEDB](Appendix.SQLServer.Options.LinkedServers_Oracle_OLEDB.md)  |  `OLEDB_ORACLE`  |  SQL Server Enterprise Edition SQL Server Standard Edition  | 
|  [原生備份與還原](Appendix.SQLServer.Options.BackupRestore.md)  |  `SQLSERVER_BACKUP_RESTORE`  |  SQL Server Enterprise Edition SQL Server Standard Edition SQL Server Web Edition SQL Server Express Edition  | 
|  [透明資料加密](Appendix.SQLServer.Options.TDE.md)  |  `TRANSPARENT_DATA_ENCRYPTION` (RDS 主控台) `TDE` (AWS CLI 和 RDS API)  |  SQL Server 2016–2022 Enterprise Edition SQL Server 2022 Standard Edition | 
|  [SQL Server 稽核](Appendix.SQLServer.Options.Audit.md)  |  `SQLSERVER_AUDIT`  |  在 RDS 中，從 SQL Server 2016 開始，SQL Server 的所有版本均支援伺服器層級稽核，企業版也支援資料庫層級稽核。 從 SQL Server SQL Server 2016 (13.x) SP1 開始，所有版本均支援伺服器層級和資料庫層級稽核。 如需更多詳細資訊，請參閱 SQL Server 文件中的 [SQL Server 稽核 (資料庫引擎)](https://docs.microsoft.com/sql/relational-databases/security/auditing/sql-server-audit-database-engine?view=sql-server-2017)。 | 
|  [SQL Server Analysis Services](Appendix.SQLServer.Options.SSAS.md)  |  `SSAS`  |  SQL Server Enterprise Edition SQL Server Standard Edition  | 
|  [SQL Server Integration Services](Appendix.SQLServer.Options.SSIS.md)  |  `SSIS`  |  SQL Server Enterprise Edition SQL Server Standard Edition  | 
|  [SQL Server Reporting Services](Appendix.SQLServer.Options.SSRS.md)  |  `SSRS`  |  SQL Server Enterprise Edition SQL Server Standard Edition  | 
|  [Microsoft Distributed Transaction Coordinator](Appendix.SQLServer.Options.MSDTC.md)  |  `MSDTC`  |  在 RDS 中，自 SQL Server 2016 開始，所有版本的 SQL Server 都支援分散式交易。  | 
|  [SQL Server 資源主管](Appendix.SQLServer.Options.ResourceGovernor.md)  |  `RESOURCE_GOVERNOR`  |  SQL Server Enterprise Edition SQL Server 2022 開發人員版本  | 

## 列出 SQL Server 版本的可用選項
<a name="Appendix.SQLServer.Options.Describe"></a>

您可以使用 `describe-option-group-options` AWS CLI 命令來列出 SQL Server 版本和版本的可用選項，以及這些選項的設定。

下列範例顯示了 SQL Server 2019 Enterprise Edition 的選項和選項設定。`--engine-name` 選項為必要項目。

```
aws rds describe-option-group-options --engine-name sqlserver-ee --major-engine-version 15.00
```

輸出看起來會與以下內容相似：

```
{
    "OptionGroupOptions": [
        {
            "Name": "MSDTC",
            "Description": "Microsoft Distributed Transaction Coordinator",
            "EngineName": "sqlserver-ee",
            "MajorEngineVersion": "15.00",
            "MinimumRequiredMinorEngineVersion": "4043.16.v1",
            "PortRequired": true,
            "DefaultPort": 5000,
            "OptionsDependedOn": [],
            "OptionsConflictsWith": [],
            "Persistent": false,
            "Permanent": false,
            "RequiresAutoMinorEngineVersionUpgrade": false,
            "VpcOnly": false,
            "OptionGroupOptionSettings": [
                {
                    "SettingName": "ENABLE_SNA_LU",
                    "SettingDescription": "Enable support for SNA LU protocol",
                    "DefaultValue": "true",
                    "ApplyType": "DYNAMIC",
                    "AllowedValues": "true,false",
                    "IsModifiable": true,
                    "IsRequired": false,
                    "MinimumEngineVersionPerAllowedValue": []
                },
        ...

        {
            "Name": "TDE",
            "Description": "SQL Server - Transparent Data Encryption",
            "EngineName": "sqlserver-ee",
            "MajorEngineVersion": "15.00",
            "MinimumRequiredMinorEngineVersion": "4043.16.v1",
            "PortRequired": false,
            "OptionsDependedOn": [],
            "OptionsConflictsWith": [],
            "Persistent": true,
            "Permanent": false,
            "RequiresAutoMinorEngineVersionUpgrade": false,
            "VpcOnly": false,
            "OptionGroupOptionSettings": []
        }
    ]
}
```

# Amazon RDS for SQL Server 中支援連結的伺服器搭配 Oracle OLEDB
<a name="Appendix.SQLServer.Options.LinkedServers_Oracle_OLEDB"></a>

連結的伺服器搭配 RDS for SQL Server 上的 Oracle Provider for OLEDB 可讓您存取 Oracle 資料庫上的外部資料來源。您可以從遠端 Oracle 資料來源讀取資料，並針對 RDS for SQL Server 資料庫執行個體之外的遠端 Oracle 資料庫伺服器執行命令。搭配 Oracle OLEDB 使用連結的伺服器，您可以
+ 直接存取 SQL Server 以外的資料來源
+ 在沒有移動資料的情況下，使用相同查詢針對各種 Oracle 資料進行查詢
+ 跨企業生態系統對資料來源發出分散式查詢、更新、命令和交易
+ 從 Microsoft Business Intelligence 套件 (SSIS、SSRS、SSAS) 內整合與 Oracle 資料庫的連線
+ 從 Oracle 資料庫遷移到 RDS for SQL Server

在現有或新的 RDS for SQL Server 資料庫執行個體上，您可以針對 Oracle 啟動一或多個連結的伺服器。然後，您可以整合外部 Oracle 資料來源與資料庫執行個體。

**Contents**
+ [支援的版本和區域](#LinkedServers_Oracle_OLEDB.VersionRegionSupport)
+ [限制與建議](#LinkedServers_Oracle_OLEDB.Limitations)
+ [啟用連結的伺服器搭配 Oracle](#LinkedServers_Oracle_OLEDB.Enabling)
  + [建立 OLEDB\$1ORACLE 的選項群組](#LinkedServers_Oracle_OLEDB.OptionGroup)
  + [將 `OLEDB_ORACLE` 選項新增至選項群組](#LinkedServers_Oracle_OLEDB.Add)
  + [將 `OLEDB_ORACLE` 版本選項修改為另一個版本](#LinkedServers_Oracle_OLEDB.Modify)
  + [將選項群組關聯至您的資料庫執行個體](#LinkedServers_Oracle_OLEDB.Apply)
+ [修改 OLEDB 提供者屬性](#LinkedServers_Oracle_OLEDB.ModifyProviderProperties)
+ [修改 OLEDB 驅動程式屬性](#LinkedServers_Oracle_OLEDB.ModifyDriverProperties)
+ [停用連結的伺服器搭配 Oracle](#LinkedServers_Oracle_OLEDB.Disable)

## 支援的版本和區域
<a name="LinkedServers_Oracle_OLEDB.VersionRegionSupport"></a>

對於下列版本上的 SQL Server 標準版和企業版，RDS for SQL Server 在所有區域都支援連結的伺服器搭配 Oracle OLEDB：
+ SQL Server 2022，所有版本
+ SQL Server 2019，所有版本
+ SQL Server 2017，所有版本

下列 Oracle Database 版本支援連結的伺服器搭配 Oracle OLEDB：
+ Oracle Database 21c，所有版本
+ Oracle Database 19c，所有版本
+ Oracle Database 18c，所有版本

下列 OLEDB Oracle 驅動程式版本支援連結的伺服器搭配 Oracle OLEDB：
+ 21.7
+ 21.16

## 限制與建議
<a name="LinkedServers_Oracle_OLEDB.Limitations"></a>

請記住，連結的伺服器搭配 Oracle OLEDB 時適用下列限制和建議：
+ 針對每個 RDS for SQL Server 資料庫執行個體，透過在安全群組中新增適用的 TCP 連接埠，以允許網路流量。例如，如果您要在 EC2 Oracle 資料庫執行個體與 RDS for SQL Server 資料庫執行個體之間設定連結的伺服器，則必須允許來自 EC2 Oracle 資料庫執行個體 IP 地址的流量。您也必須在 SQL Server 用來接聽資料庫通訊的連接埠上允許流量。如需安全群組的詳細資訊，請參閱 [使用安全群組控制存取](Overview.RDSSecurityGroups.md)。
+ 在開啟、關閉或修改選項群組中的 `OLEDB_ORACLE` 選項之後，執行 RDS for SQL Server 資料庫執行個體的重新啟動。選項群組狀態會針對這些事件顯示 `pending_reboot`，且為必要項目。對於已啟用 AlwaysOn 或鏡像選項的 RDS for SQL Server 多可用區域執行個體，在建立新執行個體或還原後將執行個體重新開機時，預期會發生容錯移轉。
+ 僅支援使用 Oracle 資料來源的使用者名稱和密碼進行簡易身分驗證。
+ 不支援開放式資料庫連線 (ODBC) 驅動程式。僅支援上述 OLEDB 驅動程式版本。
+ 支援分散式交易 (XA)。若要啟用分散式交易，請在資料庫執行個體的選項群組中開啟 `MSDTC` 選項，並確定 XA 交易已開啟。如需詳細資訊，請參閱[RDS for SQL Server 中的 Microsoft Distributed Transaction Coordinator 支援](Appendix.SQLServer.Options.MSDTC.md)。
+ 不支援建立用作連接字串捷徑的資料來源名稱 (DSN)。
+ 不支援 OLEDB 驅動程式追蹤。您可以使用 SQL Server 擴充事件來追蹤 OLEDB 事件。如需詳細資訊，請參閱[設定 RDS for SQL Server 中的擴充事件](https://aws.amazon.com/blogs/database/set-up-extended-events-in-amazon-rds-for-sql-server/)。
+ 使用 SQL Server Management Studio (SSMS) 時，不支援存取 Oracle 連結伺服器的目錄資料夾。

## 啟用連結的伺服器搭配 Oracle
<a name="LinkedServers_Oracle_OLEDB.Enabling"></a>

將 `OLEDB_ORACLE` 選項新增至 RDS for SQL Server 資料庫執行個體，來啟用連結的伺服器搭配 Oracle。請使用下列程序：

1. 建立新的選項群組或選擇現有的選項群組。

1. 將 `OLEDB_ORACLE` 選項新增至選項群組。

1. 選擇要使用的 OLEDB 驅動程式版本。

1. 將選項群組與資料庫執行個體建立關聯。

1. 重新啟動資料庫執行個體。

### 建立 OLEDB\$1ORACLE 的選項群組
<a name="LinkedServers_Oracle_OLEDB.OptionGroup"></a>

若要搭配 Oracle 使用連結的伺服器，請建立選項群組，或修改對應至 SQL Server 版本和您計劃使用的資料庫執行個體版本的選項群組。若要完成此程序，請使用 AWS 管理主控台 或 AWS CLI。

#### 主控台
<a name="LinkedServers_Oracle_OLEDB.OptionGroup.Console"></a>

下列程序會建立 SQL Server Standard Edition 2019 的選項群組。

**建立選項群組**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 選擇**建立群組**。

1. 在 **Create option group (建立選項群組)** 視窗中，執行下列動作：

   1. 針對**名稱**，輸入您 AWS 帳戶中唯一的選項群組名稱，例如 **oracle-oledb-se-2019**。名稱僅可包含字母、數字與連字號。

   1. 對於 **Description (描述)**，請輸入選項群組的簡短描述，例如 **OLEDB\$1ORACLE option group for SQL Server SE 2019**。用於顯示用途的說明。

   1. 對於 **Engine (引擎)**，請選擇 **sqlserver-se**。

   1. 對於 **Major engine version** (主要引擎版本)，請選擇 **15.00**。

1. 選擇**建立**。

#### CLI
<a name="LinkedServers_Oracle_OLEDB.OptionGroup.CLI"></a>

下列程序會建立 SQL Server Standard Edition 2019 的選項群組。

**建立選項群組**
+ 請執行下列其中一個命令：  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds create-option-group \
      --option-group-name oracle-oledb-se-2019 \
      --engine-name sqlserver-se \
      --major-engine-version 15.00 \
      --option-group-description "OLEDB_ORACLE option group for SQL Server SE 2019"
  ```

  在 Windows 中：

  ```
  aws rds create-option-group ^
      --option-group-name oracle-oledb-se-2019 ^
      --engine-name sqlserver-se ^
      --major-engine-version 15.00 ^
      --option-group-description "OLEDB_ORACLE option group for SQL Server SE 2019"
  ```

### 將 `OLEDB_ORACLE` 選項新增至選項群組
<a name="LinkedServers_Oracle_OLEDB.Add"></a>

接著，使用 AWS 管理主控台 或 AWS CLI 將 `OLEDB_ORACLE` 選項新增至您的選項群組。

#### 主控台
<a name="LinkedServers_Oracle_OLEDB.Add.Console"></a>

**新增 OLEDB\$1ORACLE 選項**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 選擇您剛剛建立的選項群組，亦即這個範例中的 **oracle-oledb-se-2019**。

1. 選擇 **Add option (新增選項)**。

1. 在 **Option details** (選項詳細資訊) 下，選擇 **OLEDB\$1ORACLE** 作為 **Option name** (選項名稱)。

1. 在**版本**下，選擇您要安裝的 OLEDB Oracle 驅動程式版本。

1. 在 **Scheduling (排程)** 下，選擇要立即新增選項或是在下一個維護時段新增選項。

1. 選擇 **Add option (新增選項)**。

#### CLI
<a name="LinkedServers_Oracle_OLEDB.Add.CLI"></a>

**新增 OLEDB\$1ORACLE 選項**
+ 將 `OLEDB_ORACLE` 選項新增至選項群組。  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds add-option-to-option-group \
      --option-group-name oracle-oledb-se-2019 \
      --options OptionName=OLEDB_ORACLE, OptionVersion=21.16 \
      --apply-immediately
  ```

  在 Windows 中：

  ```
  aws rds add-option-to-option-group ^
      --option-group-name oracle-oledb-se-2019 ^
      --options OptionName=OLEDB_ORACLE, OptionVersion=21.16 ^
      --apply-immediately
  ```

### 將 `OLEDB_ORACLE` 版本選項修改為另一個版本
<a name="LinkedServers_Oracle_OLEDB.Modify"></a>

若要將`OLEDB_ORACLE`選項版本修改為另一個版本，請使用 AWS 管理主控台 或 AWS CLI。

#### 主控台
<a name="LinkedServers_Oracle_OLEDB.Modify.Console"></a>

**修改 OLEDB\$1ORACLE 選項**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 選擇具有 `OLEDB_ORACLE` 選項的選項群組 (上述範例中的 **oracle-oledb-se-2019**)。

1. 選擇 **Modify option** (修改選項)。

1. 在 **Option details** (選項詳細資訊) 下，選擇 **OLEDB\$1ORACLE** 作為 **Option name** (選項名稱)。

1. 在**版本**下，選擇您要使用的 OLEDB Oracle 驅動程式版本。

1. 在**排程**下，選擇要立即修改選項或是在下一個維護時段修改選項。

1. 選擇 **Modify option** (修改選項)。

#### CLI
<a name="LinkedServers_Oracle_OLEDB.Add.CLI"></a>

若要修改 `OLEDB_ORACLE` 選項版本，請搭配您想使用的選項群組和選項版本使用 [https://docs.aws.amazon.com/cli/latest/reference/rds/add-option-to-option-group.html](https://docs.aws.amazon.com/cli/latest/reference/rds/add-option-to-option-group.html)AWS CLI 命令。

**修改 OLEDB\$1ORACLE 選項**
+   
**Example**  

  對於 Linux、macOS 或 Unix：

  ```
  aws rds add-option-to-option-group \
      --option-group-name oracle-oledb-se-2019 \
      --options OptionName=OLEDB_ORACLE, OptionVersion=21.7 \
      --apply-immediately
  ```

  在 Windows 中：

  ```
  aws rds add-option-to-option-group ^
      --option-group-name oracle-oledb-se-2019 ^
      --options OptionName=OLEDB_ORACLE, OptionVersion=21.7 ^
      --apply-immediately
  ```

### 將選項群組關聯至您的資料庫執行個體
<a name="LinkedServers_Oracle_OLEDB.Apply"></a>

若要將`OLEDB_ORACLE`選項群組和參數群組與您的資料庫執行個體建立關聯，請使用 AWS 管理主控台 或 AWS CLI 

#### 主控台
<a name="LinkedServers_Oracle_OLEDB.Apply.Console"></a>

若要完成啟用 Oracle 連結伺服器，請將您的 `OLEDB_ORACLE` 選項群組與新的或現有的資料庫執行個體建立關聯
+ 對於新的資料庫執行個體，請在啟動執行個體時將它們相關聯。如需更多詳細資訊，請參閱 [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。
+ 對於現有的資料庫執行個體，請透過修改執行個體來建立關聯。如需詳細資訊，請參閱[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

#### CLI
<a name="LinkedServers_Oracle_OLEDB.Apply.CLI"></a>

您可以將 `OLEDB_ORACLE` 選項群組和參數群組與新的或現有的資料庫執行個體產生關聯。

**使用 `OLEDB_ORACLE` 選項群組和參數群組建立執行個體**
+ 指定建立選項群組時所使用的相同資料庫引擎類型和主要版本。  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds create-db-instance \
      --db-instance-identifier mytestsqlserveroracleoledbinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-se \
      --engine-version 15.0.4236.7.v1 \
      --allocated-storage 100 \
      --manage-master-user-password \
      --master-username admin \
      --storage-type gp2 \
      --license-model li \
      --domain-iam-role-name my-directory-iam-role \
      --domain my-domain-id \
      --option-group-name oracle-oledb-se-2019 \
      --db-parameter-group-name my-parameter-group-name
  ```

  在 Windows 中：

  ```
  aws rds create-db-instance ^
      --db-instance-identifier mytestsqlserveroracleoledbinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-se ^
      --engine-version 15.0.4236.7.v1 ^
      --allocated-storage 100 ^
      --manage-master-user-password ^
      --master-username admin ^
      --storage-type gp2 ^
      --license-model li ^
      --domain-iam-role-name my-directory-iam-role ^
      --domain my-domain-id ^
      --option-group-name oracle-oledb-se-2019 ^
      --db-parameter-group-name my-parameter-group-name
  ```

**修改執行個體並關聯 `OLEDB_ORACLE` 選項群組**
+ 請執行下列其中一個命令：  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds modify-db-instance \
      --db-instance-identifier mytestsqlserveroracleoledbinstance \
      --option-group-name oracle-oledb-se-2019 \
      --db-parameter-group-name my-parameter-group-name \
      --apply-immediately
  ```

  在 Windows 中：

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier mytestsqlserveroracleoledbinstance ^
      --option-group-name oracle-oledb-se-2019 ^
      --db-parameter-group-name my-parameter-group-name ^
      --apply-immediately
  ```

## 修改 OLEDB 提供者屬性
<a name="LinkedServers_Oracle_OLEDB.ModifyProviderProperties"></a>

您可以檢視和變更 OLEDB 提供者的屬性。只有 `master` 使用者可以執行此任務。在資料庫執行個體上建立的所有 Oracle 連結伺服器，都會使用與該 OLEDB 提供者的相同屬性。呼叫 `sp_MSset_oledb_prop` 預存程序來變更 OLEDB 提供者的屬性。

變更 OLEDB 提供者屬性

```
				
USE [master]
GO
EXEC sp_MSset_oledb_prop N'OraOLEDB.Oracle', N'AllowInProcess', 1 
EXEC sp_MSset_oledb_prop N'OraOLEDB.Oracle', N'DynamicParameters', 0
GO
```

您可以修改下列屬性：


****  

| 屬性名稱 | 建議值 (1 = 開啟、0 = 關閉) | Description | 
| --- | --- | --- | 
| `Dynamic parameter` | 1 | 允許參數化查詢中的 SQL 預留位置 (由 '?' 表示)。 | 
| `Nested queries` | 1 | 允許 `SELECT` 子句中的巢狀 `FROM` 陳述式，例如子查詢。 | 
| `Level zero only` | 0 | 只會針對提供者呼叫基礎層級 OLEDB 界面。 | 
| `Allow inprocess` | 1 | 如果已開啟，Microsoft SQL Server 允許將提供者具體化為處理中伺服器。將此屬性設為 1 以使用 Oracle 連結伺服器。 | 
| `Non transacted updates` | 0 | 若是非零，SQL Server 允許更新。 | 
| `Index as access path` | False | 若是非零，SQL Server 會嘗試使用提供者的索引來擷取資料。 | 
| `Disallow adhoc access` | False | 如果已設定，SQL Server 不允許針對 OLEDB 提供者執行傳遞查詢。雖然可以核取此選項，但有時候執行傳遞查詢是更好的選擇。 | 
| `Supports LIKE operator` | 1 | 指出提供者支援使用 LIKE 關鍵字進行查詢。 | 

## 修改 OLEDB 驅動程式屬性
<a name="LinkedServers_Oracle_OLEDB.ModifyDriverProperties"></a>

建立 Oracle 連結伺服器時，您可以檢視和變更 OLEDB 驅動程式的屬性。只有 `master` 使用者可以執行此任務。驅動程式屬性定義 OLEDB 驅動程式在使用遠端 Oracle 資料來源時處理資料的方式。驅動程式屬性專用於在資料庫執行個體上建立的每個 Oracle 連結伺服器。呼叫 `master.dbo.sp_addlinkedserver` 預存程序來變更 OLEDB 驅動程式的屬性。

範例：建立連結的伺服器並變更 OLEDB 驅動程式 `FetchSize` 屬性

```
	
EXEC master.dbo.sp_addlinkedserver
@server = N'Oracle_link2',
@srvproduct=N'Oracle',
@provider=N'OraOLEDB.Oracle',
@datasrc=N'my-oracle-test.cnetsipka.us-west-2.rds.amazonaws.com:1521/ORCL',
@provstr='FetchSize=200'
GO
```

```
	
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname=N'Oracle_link2',
@useself=N'False',
@locallogin=NULL,
@rmtuser=N'master',
@rmtpassword='Test#1234'
GO
```

**注意**  
指定此處所顯示提示以外的密碼，作為安全最佳實務。

## 停用連結的伺服器搭配 Oracle
<a name="LinkedServers_Oracle_OLEDB.Disable"></a>

若要停用連結的伺服器搭配 Oracle，請將 `OLEDB_ORACLE` 選項從其選項群組中移除。

**重要**  
移除選項並不會刪除資料庫執行個體上現有的連結伺服器組態。您必須手動捨棄它們，才能將它們從資料庫執行個體中移除。  
您可以在移除後重新啟用 `OLEDB_ORACLE` 選項，以重複使用先前在資料庫執行個體上設定的連結伺服器組態。

### 主控台
<a name="LinkedServers_Oracle_OLEDB.Disable.Console"></a>

下列程序會移除 `OLEDB_ORACLE` 選項。

**從選項群組中移除 OLEDB\$1ORACLE 選項**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 選擇具有 `OLEDB_ORACLE` 選項的選項群組 (上述範例中的 `oracle-oledb-se-2019`)。

1. 選擇 **Delete option (刪除選項)**。

1. 在 **Deletion options** (刪除選項) 下，為 **Options to delete** (要刪除的選項) 選擇 **OLEDB\$1ORACLE**。

1. 在 **Apply immediately** (立即套用) 下，選擇 **Yes** (是) 立即刪除選項，或選擇 **No** (否) 在下一個維護時段將其刪除。

1. 選擇 **刪除**。

### CLI
<a name="LinkedServers_Oracle_OLEDB.Disable.CLI"></a>

下列程序會移除 `OLEDB_ORACLE` 選項。

**從選項群組中移除 OLEDB\$1ORACLE 選項**
+ 請執行下列其中一個命令：  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds remove-option-from-option-group \
      --option-group-name oracle-oledb-se-2019 \
      --options OLEDB_ORACLE \
      --apply-immediately
  ```

  在 Windows 中：

  ```
  aws rds remove-option-from-option-group ^
      --option-group-name oracle-oledb-se-2019 ^
      --options OLEDB_ORACLE ^
      --apply-immediately
  ```

# 在 RDS for SQL Server 中搭配使用連結伺服器與 Teradata ODBC
<a name="USER_SQLServerTeradata"></a>

支援在 RDS for SQL Server 上搭配使用連結伺服器與 Teradata ODBC 驅動程式，可讓您存取 Teradata 資料庫上的外部資料來源。您可以從 RDS for SQL Server 執行個體以外的遠端 Teradata 資料庫伺服器讀取資料並執行命令。搭配使用連結伺服器與 Teradata ODBC 可啟用下列功能：
+ 直接存取 SQL Server 以外的資料來源。
+ 在未移動資料的情況下，使用相同查詢對各種 Teradata 資料進行查詢。
+ 跨企業生態系統對資料來源發出分散式查詢、更新、命令和交易。
+ 從 Microsoft Business Intelligence 套件 (SSIS、SSRS、SSAS) 內整合與 Teradata 資料庫的連線。
+ 從 Teradata 資料庫遷移至 RDS for SQL Server。

在現有或新的 RDS for SQL Server 資料庫執行個體上，您可以選擇為 Teradata 啟動一或多個連結伺服器。然後，您可以整合外部 Teradata 資料來源與您的資料庫執行個體。

**Topics**
+ [支援的版本和區域](#USER_SQLServerTeradata.VersionRegionSupport)
+ [限制與建議](#USER_SQLServerTeradata.LimitsandRecommendations)
+ [多可用區域部署考量](#USER_SQLServerTeradata.MultiAZ)
+ [啟用連結伺服器搭配 Oracle](USER_SQLServerTeradata.Activate.md)
+ [建立 Teradata 的連結伺服器](USER_SQLServerTeradata.CreateLinkedServers.md)
+ [停用連結至 Teradata 的伺服器](USER_SQLServerTeradata.Deactivate.md)

## 支援的版本和區域
<a name="USER_SQLServerTeradata.VersionRegionSupport"></a>

對於下列版本的 SQL Server Standard 和 Enterprise Edition，RDS for SQL Server 在所有 AWS 區域 都支援連結伺服器與 Teradata ODBC 搭配使用：
+ SQL Server 2022，所有版本
+ SQL Server 2019，所有版本
+ SQL Server 2017，所有版本

下列 Teradata 資料庫版本支援與 RDS for SQL Server 連結
+ Teradata 17.20，所有版本

## 限制與建議
<a name="USER_SQLServerTeradata.LimitsandRecommendations"></a>

下列限制適用於與 Teradata ODBC 搭配使用的連結伺服器：
+ RDS for SQL Server 僅支援使用 Teradata 來源的使用者名稱和密碼進行簡易身分驗證。
+ RDS for SQL Server 僅支援 Teradata ODBC 驅動程式 17.20.0.33 版。
+ RDS for SQL Server 不支援建立資料來源名稱 (DSN) 做為連接字串的捷徑。
+ RDS for SQL Server 不支援 ODBC 驅動程式追蹤。請使用 SQL Server 擴充事件來追蹤 ODBC 事件。如需詳細資訊，請參閱[設定 RDS for SQL Server 中的擴充事件](https://aws.amazon.com/blogs/database/set-up-extended-events-in-amazon-rds-for-sql-server/)。
+ 使用 SQL Server Management Studio (SSMS) 時，RDS for SQL Server 不支援存取 Teradata 連結伺服器的目錄資料夾。

搭配使用連結伺服器與 Teradata ODBC 時，請考量下列建議：
+ 針對每個 RDS for SQL Server 資料庫執行個體，透過在安全群組中新增適用的 TCP 連接埠，以允許網路流量。如果您要在 EC2 Teradata 資料庫執行個體與 RDS for SQL Server 資料庫執行個體之間設定連結伺服器，則必須允許來自 EC2 Teradata 資料庫執行個體 IP 位址的流量。您也必須允許 RDS for SQL Server 資料庫執行個體用來接聽資料庫通訊的連接埠上的流量。如需安全群組的詳細資訊，請參閱 [使用安全群組控制存取](Overview.RDSSecurityGroups.md)。
+ 支援分散式交易 (XA)。若要啟用分散式交易，請在資料庫執行個體的選項群組中開啟 `MSDTC` 選項，並確定 XA 交易已開啟。如需詳細資訊，請參閱 [RDS for SQL Server 中的 Microsoft Distributed Transaction Coordinator 支援](Appendix.SQLServer.Options.MSDTC.md)。
+ 只要在 Teradata 伺服器上設定，連結的 Teradata ODBC 就支援 SSL/TLS。如需詳細資訊，請參閱在 [Teradata Vantage 上啟用 TLS 連線](https://docs.teradata.com/r/Enterprise_IntelliFlex_Lake_VMware/Teradata-Call-Level-Interface-Version-2-Reference-for-Workstation-Attached-Systems-20.00/Mainframe-TLS-Connectivity-Supplement/Enable-TLS-Connectivity-on-Teradata-Vantage)。

## 多可用區域部署考量
<a name="USER_SQLServerTeradata.MultiAZ"></a>

RDS for SQL Server 目前不會將連結伺服器複寫至多可用區域部署中的鏡像資料庫伺服器 (或 Always-On 可用性群組次要伺服器)。如果在組態變更為新增鏡像或 Always-On 之前新增連結伺服器，則會為現有的連結伺服器複製連結伺服器。

或者，您可以在主要執行個體上建立連結伺服器、容錯移轉至高可用性伺服器執行個體，然後再次建立連結伺服器，使其位於兩個 RDS for SQL Server 執行個體上。

# 啟用連結伺服器搭配 Oracle
<a name="USER_SQLServerTeradata.Activate"></a>

將 `ODBC_TERADATA` 選項新增至 RDS for SQL Server 資料庫執行個體，以啟用連結伺服器搭配 Teradata。請使用下列程序：

**Topics**
+ [建立 `ODBC_TERADATA` 的選項群組](#USER_SQLServerTeradata.Activate.CreateOG)
+ [將 `ODBC_TERADATA` 選項新增至選項群組](#USER_SQLServerTeradata.Activate.AddOG)
+ [將 `ODBC_TERADATA` 選項與您的資料庫執行個體建立關聯](#USER_SQLServerTeradata.Activate.AssociateOG)

## 建立 `ODBC_TERADATA` 的選項群組
<a name="USER_SQLServerTeradata.Activate.CreateOG"></a>

若要搭配使用連結伺服器與 Teradata，請建立選項群組，或修改對應至 SQL Server 版本和您計劃使用的資料庫執行個體版本的選項群組。若要完成此程序，請使用 AWS 管理主控台或 AWS CLI。

### 主控台
<a name="USER_SQLServerTeradata.Activate.CreateOG.Console"></a>

使用下列程序，建立 SQL Server Standard Edition 2019 的選項群組。

**建立選項群組**

1. 登入 AWS 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 選擇**建立群組**。

1. 在 **Create option group (建立選項群組)** 視窗中，執行下列動作：

   1. 在 **Name** (名稱) 中，輸入您 AWS 帳戶 中的唯一選項群組名稱，例如 `teradata-odbc-se-2019`。名稱僅可包含字母、數字與連字號。

   1. 對於**描述**，輸入選項群組的簡短描述。

   1. 對於 **Engine (引擎)**，請選擇 **sqlserver-se**。

   1. 對於 **Major engine version** (主要引擎版本)，請選擇 **15.00**。

1. 選擇**建立**。

### AWS CLI
<a name="USER_SQLServerTeradata.Activate.CreateOG.CLI"></a>

下列程序會建立 SQL Server Standard Edition 2019 的選項群組。

**Example**  
針對 Linux、macOS 或 Unix：  

```
aws rds create-option-group \
    --option-group-name teradata-odbc-se-2019 \
    --engine-name sqlserver-se \
    --major-engine-version 15.00 \
    --option-group-description "ODBC_TERADATA option group for SQL Server SE 2019"
```

**Example**  
針對 Windows：  

```
aws rds create-option-group ^
    --option-group-name teradata-odbc-se-2019 ^
    --engine-name sqlserver-se ^
    --major-engine-version 15.00 ^
    --option-group-description "ODBC_TERADATA option group for SQL Server SE 2019"
```

## 將 `ODBC_TERADATA` 選項新增至選項群組
<a name="USER_SQLServerTeradata.Activate.AddOG"></a>

接下來，使用AWS 管理主控台或 AWS CLI 將 `ODBC_Teradata` 選項新增至選項群組。

### 主控台
<a name="USER_SQLServerTeradata.Activate.AddOG.Console"></a>

使用下列程序，建立 SQL Server Standard Edition 2019 的選項群組。

**新增 `ODBC_TERADATA` 選項**

1. 登入 AWS 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 選擇新的選項群組。

1. 選擇 **Add option (新增選項)**。

1. 在**選項詳細資訊**底下：

   1. 針對**選項名稱**，選擇 **ODBC\$1TERADATA**。

   1. 針對**選項版本**，選擇 `17.20.33.00`。

1. 在 [排程] 底下，選擇要立即新增選項還是在下一個維護時段新增。

1. 選擇 **Add option (新增選項)**。

### AWS CLI
<a name="USER_SQLServerTeradata.Activate.AddOG.CLI"></a>

下列程序會將 `ODBC_TERADATA` 選項新增至您的選項群組。

**Example**  
針對 Linux、macOS 或 Unix：  

```
aws rds add-option-to-option-group \
    --option-group-name teradata-odbc-se-2019 \
    --options "OptionName=ODBC_TERADATA,OptionVersion=17.20.33.00" \
    --apply-immediately
```

**Example**  
針對 Windows：  

```
aws rds add-option-to-option-group ^
    --option-group-name teradata-odbc-se-2019 ^
    --options "OptionName=ODBC_TERADATA,OptionVersion=17.20.33.00" ^
    --apply-immediately
```

## 將 `ODBC_TERADATA` 選項與您的資料庫執行個體建立關聯
<a name="USER_SQLServerTeradata.Activate.AssociateOG"></a>

若將 `ODBC_TERADATA` 選項群組與您的資料庫執行個體建立關聯，請使用 AWS 管理主控台 或 AWS CLI。

### 主控台
<a name="USER_SQLServerTeradata.Activate.AssociateOG.Console"></a>

若要完成為 Teradata 啟用連結伺服器的作業，請將您的選項群組與新的或現有的資料庫執行個體建立關聯：
+ 對於新的資料庫執行個體，請在啟動執行個體時建立關聯。如需更多詳細資訊，請參閱 [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。
+ 對於現有的資料庫執行個體，請透過修改執行個體來建立關聯。如需詳細資訊，請參閱 [修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

### AWS CLI
<a name="USER_SQLServerTeradata.Activate.AssociateOG.CLI"></a>

指定建立選項群組時所使用的相同資料庫引擎類型和主要版本。

針對 Linux、macOS 或 Unix：

```
aws rds create-db-instance \
    --db-instance-identifier mytestsqlserverteradataodbcinstance \
    --db-instance-class db.m5.2xlarge \
    --engine sqlserver-se \
    --engine-version 15.00 \
    --license-model license-included \
    --allocated-storage 100 \
    --master-username admin \
    --master-user-password password \
    --storage-type gp2 \
    --option-group-name teradata-odbc-se-2019
```

針對 Windows：

```
aws rds create-db-instance ^
    --db-instance-identifier mytestsqlserverteradataodbcinstance ^
    --db-instance-class db.m5.2xlarge ^
    --engine sqlserver-se ^
    --engine-version 15.00 ^
    --license-model license-included ^ 
    --allocated-storage 100 ^
    --master-username admin ^
    --master-user-password password ^
    --storage-type gp2 ^
    --option-group-name teradata-odbc-se-2019
```

修改執行個體，並建立新選項群組的關聯：

針對 Linux、macOS 或 Unix：

```
aws rds modify-db-instance \
    --db-instance-identifier mytestsqlserverteradataodbcinstance \
    --option-group-name teradata-odbc-se-2019 \
    --apply-immediately
```

針對 Windows：

```
aws rds modify-db-instance ^
    --db-instance-identifier mytestsqlserverteradataodbcinstance ^
    --option-group-name teradata-odbc-se-2019 ^
    --apply-immediately
```

# 建立 Teradata 的連結伺服器
<a name="USER_SQLServerTeradata.CreateLinkedServers"></a>

若要建立 Teradata 的連結伺服器，請執行下列命令：

```
EXECUTE master.dbo.sp_addlinkedserver 
    @server = N'LinkedServer_NAME', 
    @srvproduct=N'', 
    @provider=N'MSDASQL', 
    @provstr=N'"PROVIDER=MSDASQL;DRIVER={Teradata Database ODBC Driver 17.20};
                DBCName=Server;UID=user_name;PWD=user_password;
                UseDataEncryption=YES/NO;SSLMODE=PREFER/ALLOW/DISABLE>;"', 
    @catalog='database'
```

```
EXECUTE master.dbo.sp_addlinkedsrvlogin 
    @rmtsrvname = N'LinkedServer_NAME', 
    @locallogin = NULL , 
    @useself = N'False', 
    @rmtuser = N'user_name', 
    @rmtpassword = N'user_password'
```

上述命令的範例如下所示：

```
EXECUTE master.dbo.sp_addlinkedserver 
    @server = N'LinkedServerToTeradata', 
    @srvproduct=N'', 
    @provider=N'MSDASQL', 
    @provstr=N'"PROVIDER=MSDASQL;DRIVER={Teradata Database ODBC Driver 17.20};
                DBCName=my-teradata-test.cnetsipka.us-west-2.rds.amazonaws.com;
                UID=master;
                PWD=Test#1234;
                UseDataEncryption=YES;
                SSLMODE=PREFER;"', 
    @catalog='MyTestTeradataDB'

EXECUTE master.dbo.sp_addlinkedsrvlogin 
    @rmtsrvname = N'LinkedServerToTeradata', 
    @locallogin = NULL , 
    @useself = N'False', 
    @rmtuser = N'master', 
    @rmtpassword = N'Test#1234'
```

**注意**  
指定此處所顯示提示以外的密碼，作為安全最佳實務。

# 停用連結至 Teradata 的伺服器
<a name="USER_SQLServerTeradata.Deactivate"></a>

若要停用連結至 Teradata 的伺服器，請將 `ODBC_TERADATA` 選項從其選項群組中移除。

**重要**  
刪除選項並不會刪除資料庫執行個體上的連結伺服器組態。您必須手動捨棄它們，才能將它們從資料庫執行個體中移除。  
您可以在移除後重新啟用 `ODBC_TERADATA`，以重複使用先前在資料庫執行個體上設定的連結伺服器組態。

## 主控台
<a name="USER_SQLServerTeradata.Deactivate.Console"></a>

從選項群組中移除 `ODBC_TERADATA` 選項

1. 登入 AWS 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 使用 `ODBC_TERADATA` 選項選擇選項群組。

1. 選擇 **刪除**。

1. 在**刪除選項**底下，選擇**要刪除的選項**下的 `ODBC_TERADATA`。

1. 在 **Apply immediately** (立即套用) 下，選擇 **Yes** (是) 立即刪除選項，或選擇 **No** (否) 在下一個維護時段將其刪除。

1. 選擇 **刪除**。

## AWS CLI
<a name="USER_SQLServerTeradata.Deactivate.CLI"></a>

下列命令會移除 `ODBC_TERADATA` 選項。

針對 Linux、macOS 或 Unix：

```
aws rds remove-option-from-option-group \
    --option-group-name teradata-odbc-se-2019 \
    --options ODBC_TERADATA \
    --apply-immediately
```

針對 Windows：

```
aws rds remove-option-from-option-group ^
    --option-group-name teradata-odbc-se-2019 ^
    --options ODBC_TERADATA ^
    --apply-immediately
```

# SQL Server 對原生備份與還原的支援
<a name="Appendix.SQLServer.Options.BackupRestore"></a>

您可以使用 SQL Server 資料庫的原生備份與還原功能，建立內部部署資料庫的差異或完整備份，並於 Amazon S3 上存放備份檔案。然後您可以還原到執行 SQL Server 的現有 Amazon RDS 資料庫執行個體。您還可以備份 RDS for SQL Server 資料庫，將其存放於 Amazon S3，並於其他位置將其還原。另外，您可以將備份還原至現場部署伺服器，或執行 SQL Server 的不同 Amazon RDS 資料庫執行個體。如需更多詳細資訊，請參閱 [使用原生備份和還原，匯入和匯出 SQL Server 資料庫](SQLServer.Procedural.Importing.md)。

Amazon RDS 支援使用差異和完整備份檔案 (.bak 檔案) 進行 Microsoft SQL Server 資料庫的原生備份與還原。

## 新增原生備份與還原選項
<a name="Appendix.SQLServer.Options.BackupRestore.Add"></a>

將原生備份與還原選項新增至資料庫執行個體的一般程序如下：

1. 建立新的選項群組，或是複製或修改現有選項群組。

1. 將 `SQLSERVER_BACKUP_RESTORE` 選項新增至選項群組。

1. 建立 AWS Identity and Access Management (IAM) 角色與此選項的關聯。IAM 角色必須具有 S3 儲存貯體的存取權限才能儲存資料庫備份。

   也就是說，該選項必須設定為 `arn:aws:iam::account-id:role/role-name` 格式的有效 Amazon 資源名稱 (ARN)。如需詳細資訊，請參閱 *AWS 一般參考* 中的 [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-iam)。

   IAM 角色也必須與信任關係及許可政策相連接。信任關係可允許 RDS 擔任角色，而許可政策會定義角色可以執行的動作。如需更多詳細資訊，請參閱 [手動建立原生備份與還原的 IAM 角色](SQLServer.Procedural.Importing.Native.Enabling.md#SQLServer.Procedural.Importing.Native.Enabling.IAM)。

1. 將選項群組與資料庫執行個體建立關聯。

在您新增原生備份與還原選項之後，您並不需要重新啟動資料庫執行個體。只要選項群組為作用中狀態，您就可以立即開始備份與還原。

### 主控台
<a name="Add.Native.Backup.Restore.Console"></a>

**新增原生備份與還原選項**

1. 登入 AWS 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 建立新的選項群組或使用現有的選項群組。如需如何建立自訂資料庫選項群組的資訊，請參閱[建立選項群組](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)。

   若要使用現有的選項群組，請跳到下一個步驟。

1. 將 **SQLSERVER\$1BACKUP\$1RESTORE** 選項新增至選項群組。如需新增選項的詳細資訊，請參閱[將選項新增至選項群組](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)。

1. 請執行下列其中一項：
   + 若要使用現有的 IAM 角色和 Amazon S3 設定，請為 **IAM Role (IAM 角色)** 選擇現有的 IAM 角色。如果您使用現有的 IAM 角色，RDS 會使用為此角色設定的 Amazon S3 設定。
   + 若要建立新的角色並設定新的 Amazon S3 設定，請執行以下動作：

     1. 對於 **IAM 角色**，選擇**建立新角色**。

     1. 對於 **S3 bucket (S3 儲存貯體)**，從清單中選擇 S3 儲存貯體。

     1. 在 **S3 prefix (optional) (S3字首 (選用))** 中，指定 Amazon S3 儲存貯體所儲存檔案要使用的字首。

        該字首可以包含檔案路徑，但並非必要。如果您提供字首，RDS 會將該字首附加於所有備份檔案。然後，RDS 會在還原過程中使用該字首以識別相關檔案並忽略無關的檔案。例如，您可以將 S3 儲存貯體用於存放備份檔案以外的目的。在此情況下，您可以使用該字首讓 RDS 僅在特定資料夾及其子資料夾內執行原生備份和還原。

        如果您讓字首保持空白，RDS 將不會使用字首來識別備份檔案或者要還原的檔案。因此，在多檔案還原期間，RDS 會嘗試還原 S3 儲存貯體的每個資料夾中的每個檔案。

     1. 選擇 **Enable encryption (啟用加密)** 核取方塊以加密備份檔案。保持清除核取方塊 (預設值)，以使備份檔案未加密。

        如果您選擇 **Enable encryption (啟用加密)**，請選擇 **AWS KMS key** 的加密金鑰。如需加密金鑰的詳細資訊，請參閱 *AWS Key Management Service 開發人員指南* 中的[入門](https://docs.aws.amazon.com/kms/latest/developerguide/getting-started.html)。

1. 選擇 **Add option (新增選項)**。

1. 將選項群組套用至新的或現有的資料庫執行個體：
   + 針對新的資料庫執行個體，在啟動執行個體時套用選項群組。如需更多詳細資訊，請參閱 [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。
   + 針對現有的資料庫執行個體，可以透過修改執行個體並附加新的選項群組來套用選項群組。如需更多詳細資訊，請參閱 [修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

### CLI
<a name="Add.Native.Backup.Restore.CLI"></a>

此程序會進行下列假設：
+ 您正在將 SQLSERVER\$1BACKUP\$1RESTORE 選項新增到已存在的選項群組。如需新增選項的詳細資訊，請參閱[將選項新增至選項群組](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)。
+ 您正在將選項與已存在的 IAM 角色建立關聯，並且可以存取存放備份的 S3 儲存貯體。
+ 您正在將選項群組套用到已存在的資料庫執行個體。如需更多詳細資訊，請參閱 [修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

**新增原生備份與還原選項**

1. 將 `SQLSERVER_BACKUP_RESTORE` 選項新增至選項群組。  
**Example**  

   對於 Linux、macOS 或 Unix：

   ```
   aws rds add-option-to-option-group \
   	--apply-immediately \
   	--option-group-name mybackupgroup \
   	--options "OptionName=SQLSERVER_BACKUP_RESTORE, \
   	  OptionSettings=[{Name=IAM_ROLE_ARN,Value=arn:aws:iam::account-id:role/role-name}]"
   ```

   在 Windows 中：

   ```
   aws rds add-option-to-option-group ^
   	--option-group-name mybackupgroup ^
   	--options "[{\"OptionName\": \"SQLSERVER_BACKUP_RESTORE\", ^
   	\"OptionSettings\": [{\"Name\": \"IAM_ROLE_ARN\", ^
   	\"Value\": \"arn:aws:iam::account-id:role/role-name"}]}]" ^
   	--apply-immediately
   ```
**注意**  
使用 Windows 命令提示字元時，您必須在 JSON 程式碼中的雙引號 (") 開頭加上反斜線 (\$1)，以逸出雙引號。

1. 將選項群組套用到資料庫執行個體。  
**Example**  

   對於 Linux、macOS 或 Unix：

   ```
   aws rds modify-db-instance \
   	--db-instance-identifier mydbinstance \
   	--option-group-name mybackupgroup \
   	--apply-immediately
   ```

   在 Windows 中：

   ```
   aws rds modify-db-instance ^
   	--db-instance-identifier mydbinstance ^
   	--option-group-name mybackupgroup ^
   	--apply-immediately
   ```

## 修改原生備份與還原選項設定
<a name="Appendix.SQLServer.Options.BackupRestore.ModifySettings"></a>

您在啟用原生備份與還原選項之後，可以修改選項的設定。如需如何修改選項設定的詳細資訊，請參閱[修改選項設定](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption)。

## 移除原生備份與還原選項
<a name="Appendix.SQLServer.Options.BackupRestore.Remove"></a>

您可以關閉原生備份與還原功能，方法為從資料庫執行個體中移除該選項。在您移除原生備份與還原選項之後，您並不需要重新啟動資料庫執行個體。

若要從資料庫執行個體中移除原生備份與還原選項，請執行下列其中一個動作：
+ 從其所屬的選項群組中移除選項。此變更會影響使用選項群組的所有資料庫執行個體。如需更多詳細資訊，請參閱 [從選項群組移除選項](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.RemoveOption)。
+ 修改資料庫執行個體，並指定不包括「原生備份與還原」選項的不同選項群組。此變更會影響單一資料庫執行個體。您可以指定預設的 (空白) 選項群組或不同的自訂選項群組。如需更多詳細資訊，請參閱 [修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

# 支援 SQL Server 的透明資料加密
<a name="Appendix.SQLServer.Options.TDE"></a>

Amazon RDS 支援使用透明資料加密 (TDE)，來加密執行 Microsoft SQL Server 之資料庫執行個體上所儲存的資料。TDE 會在資料寫入至儲存體之前自動將其加密，並在從儲存體中讀取資料時自動將其解密。

Amazon RDS 支援下列 SQL Server 版本的 TDE：
+ SQL Server 2022 Standard 和 Enterprise Edition
+ SQL Server 2019 Standard 和 Enterprise Editions
+ SQL Server 2017 Enterprise Edition
+ SQL Server 2016 Enterprise Edition

**注意**  
RDS for SQL Server 不支援唯讀資料庫的 TDE。

SQL Server 的透明資料加密會使用雙層金鑰架構來提供加密金鑰管理。從資料庫主要金鑰產生的認證是用來保護資料加密金鑰。資料庫加密金鑰會在使用者資料庫上，實際執行資料加密及解密作業。Amazon RDS 會備份並管理資料庫主金鑰與 TDE 憑證。

透明資料加密係使用於需要加密敏感資料的情況。例如，您可能想要將資料檔案和備份提供給第三方，或處理與安全相關的法律合規性問題。您無法加密 SQL Server 的系統資料庫，例如 `model` 或 `master` 資料庫。

透明資料加密的詳細討論超出本指南的範圍，但請確定您了解每一個加密演算法和金鑰的安全優缺點。如需 SQL Server 之透明資料加密的相關資訊，請參閱 Microsoft 文件中的[透明資料加密 (TDE)](http://msdn.microsoft.com/en-us/library/bb934049.aspx)。

**Topics**
+ [為 RDS for SQL Server 開啟 TDE](#TDE.Enabling)
+ [在 RDS for SQL Server 上加密資料](TDE.Encrypting.md)
+ [在 RDS for SQL Server 上備份與還原 TDE 憑證](TDE.BackupRestoreRDS.md)
+ [備份與還原內部部署資料庫的 TDE 憑證](TDE.BackupRestoreOnPrem.md)
+ [為 RDS for SQL Server 關閉 TDE](TDE.Disabling.md)

## 為 RDS for SQL Server 開啟 TDE
<a name="TDE.Enabling"></a>

若要開啟 RDS for SQL Server 資料庫執行個體的透明資料加密，請在與該資料庫執行個體關聯的 RDS 選項群組中指定 TDE 選項。

1. 判斷資料庫執行個體是否已與具有 TDE 選項的選項群組相關聯。若要檢視資料庫執行個體相關聯的選項群組，請使用 RDS 主控台、 [describe-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) AWS CLI 命令或 API 操作 [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html)。

1.  如果資料庫執行個體並未與 TED 已開啟的選項群組關聯，則您有兩個選擇。您可以建立一個選項群組，並新增 TDE 選項，您也可以修改相關的選項群組，以增加該選項。
**注意**  
在 RDS 主控台中，此選項會命名為 `TRANSPARENT_DATA_ENCRYPTION`。在 AWS CLI 和 RDS API 中，它命名為 `TDE`。

   如需建立或修改選項群組的相關資訊，請參閱 [使用選項群組](USER_WorkingWithOptionGroups.md)。如需將選項新增至選項群組的相關資訊，請參閱[將選項新增至選項群組](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)。

1.  建立資料庫執行個體與具有 TDE 選項之選項群組之間的關聯。如需使資料庫執行個體與選項群組產生關聯的相關資訊，請參閱[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

### 選項群組考量
<a name="TDE.Options"></a>

TDE 選項是一個永續性選項。除非所有資料庫執行個體和備份均不再與選項群組相關聯，否則您無法將它從該選項群組中移除。一旦您將 TDE 選項新增至選項群組，該選項群組就只能與使用 TDE 的資料庫執行個體相關聯。如需選項群組中持續選項的詳細資訊，請參閱 [選項群組概觀](USER_WorkingWithOptionGroups.md#Overview.OptionGroups)。

因為 TDE 選項為持久性選項，所以在選項群組與相關聯的資料庫執行個體之間可能會發生衝突。在下列情況中會發生衝突：
+ 目前選項群組具有 TDE 選項，而且您可將其取代為沒有 TDE 選項的選項群組。
+ 您可以從資料庫快照還原至新的資料庫執行個體，其中沒有包含 TDE 選項的選項群組。如需此案例的詳細資訊，請參閱[選項群組的考量事項](USER_CopySnapshot.md#USER_CopySnapshot.Options)。

### SQL Server 效能考量
<a name="TDE.Perf"></a>

使用透明資料加密會影響 SQL Server 資料庫執行個體的效能。

如果資料庫位在至少有一個已加密資料庫的資料庫執行個體上，則未加密資料庫的效能會降低。因此，建議您將已加密和未加密資料庫保存在獨立的資料庫執行個體上。

# 在 RDS for SQL Server 上加密資料
<a name="TDE.Encrypting"></a>

一旦將 TDE 選項新增至選項群組，Amazon RDS 即會產生在加密程序中使用的憑證。然後，您可以使用憑證執行 SQL 陳述式，將資料庫執行個體上資料庫中的資料加密。

下列範例會使用 RDS 建立的憑證 (稱為 `RDSTDECertificateName`)，來加密稱為 `myDatabase` 的資料庫。

```
 1. ---------- Turning on TDE -------------
 2. 
 3. -- Find an RDS TDE certificate to use
 4. USE [master]
 5. GO
 6. SELECT name FROM sys.certificates WHERE name LIKE 'RDSTDECertificate%'
 7. GO
 8. 
 9. USE [myDatabase]
10. GO
11. -- Create a database encryption key (DEK) using one of the certificates from the previous step
12. CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256
13. ENCRYPTION BY SERVER CERTIFICATE [RDSTDECertificateName]
14. GO
15. 
16. -- Turn on encryption for the database
17. ALTER DATABASE [myDatabase] SET ENCRYPTION ON
18. GO
19. 
20. -- Verify that the database is encrypted
21. USE [master]
22. GO
23. SELECT name FROM sys.databases WHERE is_encrypted = 1
24. GO
25. SELECT db_name(database_id) as DatabaseName, * FROM sys.dm_database_encryption_keys
26. GO
```

使用 TDE 加密 SQL Server 資料庫需要的時間取決於幾個因素。其中包括資料庫執行個體的大小、執行個體是否使用佈建 IOPS 儲存體、資料的量，以及其他因素。

# 在 RDS for SQL Server 上備份與還原 TDE 憑證
<a name="TDE.BackupRestoreRDS"></a>

RDS for SQL Server 提供預存程序，可供備份、還原與捨棄 TDE 憑證。RDS for SQL Server 也提供一個函數可用於檢視還原的使用者 TDE 憑證。

使用者 TDE 憑證用於將資料庫還原至內部部署且 TDE 已開啟的 RDS for SQL Server。這些憑證的字首為 `UserTDECertificate_`。還原資料庫之後，及使其可供使用之前，RDS 會修改 TDE 已開啟的資料庫，以使用 RDS 產生的 TDE 憑證。這些憑證的字首為 `RDSTDECertificate`。

使用者 TDE 憑證會保留在 RDS for SQL Server 資料庫執行個體上，除非您使用 `rds_drop_tde_certificate` 預存程序放置這些憑證。如需詳細資訊，請參閱[捨棄還原的 TDE 憑證](#TDE.BackupRestoreRDS.Drop)。

您可以使用使用者 TDE 憑證從來源資料庫執行個體還原其他資料庫。要還原的資料庫必須使用相同的 TDE 憑證並開啟 TDE。您不必再次匯入 (還原) 同一個憑證。

**Topics**
+ [先決條件](#TDE.BackupRestoreRDS.Prereqs)
+ [限制](#TDE.Limitations)
+ [備份 TDE 憑證](#TDE.BackupRestoreRDS.Backup)
+ [還原 TDE 憑證](#TDE.BackupRestoreRDS.Restore)
+ [檢視還原的 TDE 憑證](#TDE.BackupRestoreRDS.Show)
+ [捨棄還原的 TDE 憑證](#TDE.BackupRestoreRDS.Drop)

## 先決條件
<a name="TDE.BackupRestoreRDS.Prereqs"></a>

務必先完成下列任務，您才能在 RDS for SQL Server 上備份或還 TDE 憑證。[設定原生備份與還原](SQLServer.Procedural.Importing.Native.Enabling.md) 中描述前三個。

1. 建立 Amazon S3 一般用途儲存貯體或目錄儲存貯體，以存放檔案以進行備份和還原。

   建議您為資料庫備份與 TDE 憑證備份使用個別的儲存貯體。

1. 建立用於備份和還原檔案的 IAM 角色。

   IAM 角色必須是 AWS KMS key的使用者，也是其管理員。

   使用目錄儲存貯體時，除了[手動建立原生備份與還原的 IAM 角色](SQLServer.Procedural.Importing.Native.Enabling.md#SQLServer.Procedural.Importing.Native.Enabling.IAM)具有目錄儲存貯體的 所需的許可之外，不需要額外的許可。

   使用 S3 資源時，除了 所需的許可之外，IAM 角色還需要下列許可[手動建立原生備份與還原的 IAM 角色](SQLServer.Procedural.Importing.Native.Enabling.md#SQLServer.Procedural.Importing.Native.Enabling.IAM)：
   + S3 儲存貯體資源上的 `s3:GetBucketAcl`、`s3:GetBucketLocation` 和 `s3:ListBucket`

1. 將 `SQLSERVER_BACKUP_RESTORE` 選項新增至資料庫執行個體上的選項群組。

   這是 `TRANSPARENT_DATA_ENCRYPTION` (`TDE`) 選項新增的部分。

1. 確定您有對稱加密 KMS 金鑰。您有下列選項：
   + 如果您的帳戶中有現有的 KMS 金鑰，您可以使用它。無需採取進一步動作。
   + 若您的帳戶中並無現有的對稱加密 KMS 金鑰，請藉由遵循《*AWS Key Management Service 開發人員指南*》中的[建立金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)來建立 KMS 金鑰。

1. 啟用 Amazon S3 整合，在資料庫執行個體與 Amazon S3 之間傳輸檔案。

   如需啟用 Oracle Amazon S3 整合的詳細資訊，請參閱 [整合 Amazon RDS for SQL Server 資料庫執行個體和 Amazon S3](User.SQLServer.Options.S3-integration.md)。

   請注意，目錄儲存貯體不支援 S3 整合。只有 需要此步驟[備份與還原內部部署資料庫的 TDE 憑證](TDE.BackupRestoreOnPrem.md)。

## 限制
<a name="TDE.Limitations"></a>

使用預存程序備份和還原 TDE 憑證具有以下限制：
+ `SQLSERVER_BACKUP_RESTORE` 與 `TRANSPARENT_DATA_ENCRYPTION` (`TDE`) 選項必須新增至與資料庫執行個體產生關聯的選項群組。
+ 多可用區域資料庫執行個體不支援 TDE 憑證備份和還原。
+ 不支援取消 TDE 憑證備份和還原任務。
+ 您不能將使用者 TDE 憑證用於 RDS for SQL Server 資料庫執行個體上任何其他資料庫的 TDE 加密。您可以將它用於從 TDE 已啟用且使用相同 TDE 憑證的來源資料庫執行個體中僅還原其他資料庫。
+ 您只能刪除使用者 TDE 憑證。
+ RDS 支援的使用者 TDE 憑證數量上限為 10 個。如果數量超過 10 個，請捨棄未使用的 TDE 憑證，然後再試一次。
+ 憑證名稱不能為空白或為 null。
+ 還原憑證時，憑證名稱不能包含關鍵字 `RDSTDECERTIFICATE`，且開頭必須為 `UserTDECertificate_` 字首。
+ `@certificate_name` 參數只能包含以下字元：a-z、0-9、@、\$1、\$1 和底線 (\$1)。
+ `@certificate_file_s3_arn` 的副檔名必須為 .cer (不區分大小寫)。
+ `@private_key_file_s3_arn` 的副檔名必須為 .pvk (不區分大小寫)。
+ 私有金鑰檔案的 S3 中繼資料必須包含 `x-amz-meta-rds-tde-pwd` 標籤。如需詳細資訊，請參閱[備份與還原內部部署資料庫的 TDE 憑證](TDE.BackupRestoreOnPrem.md)。
+ RDS for SQL Server 不支援使用跨帳戶金鑰搭配 TDE。

## 備份 TDE 憑證
<a name="TDE.BackupRestoreRDS.Backup"></a>

若要備份 TDE 憑證，請使用 `rds_backup_tde_certificate` 預存程序。具有下列語法。

```
EXECUTE msdb.dbo.rds_backup_tde_certificate
    @certificate_name='UserTDECertificate_certificate_name | RDSTDECertificatetimestamp',
    @certificate_file_s3_arn='arn:aws:s3:::bucket_name/certificate_file_name.cer',
    @private_key_file_s3_arn='arn:aws:s3:::bucket_name/key_file_name.pvk',
    @kms_password_key_arn='arn:aws:kms:region:account-id:key/key-id',
    [@overwrite_s3_files=0|1];
```

下列是必要參數：
+ `@certificate_name` – 所要備份 TDE 憑證的名稱。
+ `@certificate_file_s3_arn` – Amazon S3 中憑證備份檔案的目的地 Amazon Resource Name (ARN)。
+ `@private_key_file_s3_arn` – 可保護 TDE 憑證的私有金鑰檔案的目的地 S3 ARN。
+ `@kms_password_key_arn` – 用於加密私有金鑰密碼的對稱 KMS 金鑰其 ARN。

以下參數為選用：
+ `@overwrite_s3_files` – 指出在 S3 中是否覆寫現有的憑證與私有金鑰檔案：
  + `0` – 不覆寫現有檔案。此為預設值。

    將 `@overwrite_s3_files` 設為 0 時，如果檔案已存在，則傳回錯誤。
  + `1` – 即使現有檔案不是備份檔案，只要是指定的名稱，就覆寫檔案。

**Example 備份 TDE 憑證**  

```
EXECUTE msdb.dbo.rds_backup_tde_certificate
    @certificate_name='RDSTDECertificate20211115T185333',
    @certificate_file_s3_arn='arn:aws:s3:::TDE_certs/mycertfile.cer',
    @private_key_file_s3_arn='arn:aws:s3:::TDE_certs/mykeyfile.pvk',
    @kms_password_key_arn='arn:aws:kms:us-west-2:123456789012:key/AKIAIOSFODNN7EXAMPLE',
    @overwrite_s3_files=1;
```

## 還原 TDE 憑證
<a name="TDE.BackupRestoreRDS.Restore"></a>

您可以使用 `rds_restore_tde_certificate` 預存程序來還原 (匯入) 使用者 TDE 憑證。具有下列語法。

```
EXECUTE msdb.dbo.rds_restore_tde_certificate
    @certificate_name='UserTDECertificate_certificate_name',
    @certificate_file_s3_arn='arn:aws:s3:::bucket_name/certificate_file_name.cer',
    @private_key_file_s3_arn='arn:aws:s3:::bucket_name/key_file_name.pvk',
    @kms_password_key_arn='arn:aws:kms:region:account-id:key/key-id';
```

下列是必要參數：
+ `@certificate_name` – 所要還原 TDE 憑證的名稱。名稱必須以 `UserTDECertificate_` 字首開頭。
+ `@certificate_file_s3_arn` – 用於還原 TDE 憑證的備份檔案其 S3 ARN。
+ `@private_key_file_s3_arn` – 待還原的 TDE 憑證其私有金鑰備份檔案的 S3 ARN。
+ `@kms_password_key_arn` – 用於加密私有金鑰密碼的對稱 KMS 金鑰其 ARN。

**Example 還原 TDE 憑證**  

```
EXECUTE msdb.dbo.rds_restore_tde_certificate
    @certificate_name='UserTDECertificate_myTDEcertificate',
    @certificate_file_s3_arn='arn:aws:s3:::TDE_certs/mycertfile.cer',
    @private_key_file_s3_arn='arn:aws:s3:::TDE_certs/mykeyfile.pvk',
    @kms_password_key_arn='arn:aws:kms:us-west-2:123456789012:key/AKIAIOSFODNN7EXAMPLE';
```

## 檢視還原的 TDE 憑證
<a name="TDE.BackupRestoreRDS.Show"></a>

您可以使用 `rds_fn_list_user_tde_certificates` 函數來檢視已還原 (已匯入) 的使用者 TDE 憑證。具有下列語法。

```
SELECT * FROM msdb.dbo.rds_fn_list_user_tde_certificates();
```

輸出結果與以下內容相似。並非所有的資料欄均會在此顯示。


|  |  |  |  |  |  |  |  |  |  |  | 
| --- |--- |--- |--- |--- |--- |--- |--- |--- |--- |--- |
| name | certificate\$1id | principal\$1id | pvt\$1key\$1encryption\$1type\$1desc | issuer\$1name | cert\$1serial\$1number | thumbprint | subject | start\$1date | expiry\$1date | pvt\$1key\$1last\$1backup\$1date | 
| UserTDECertificate\$1tde\$1cert | 343 | 1 | ENCRYPTED\$1BY\$1MASTER\$1KEY | AnyCompany Shipping | 79 3e 57 a3 69 fd 1d 9e 47 2c 32 67 1d 9c ca af | 0x6BB218B34110388680B FE1BA2D86C695096485B5 | AnyCompany Shipping | 2022-04-05 19:49:45.0000000 | 2023-04-05 19:49:45.0000000 | NULL | 

## 捨棄還原的 TDE 憑證
<a name="TDE.BackupRestoreRDS.Drop"></a>

若要捨棄您未使用的已還原 (已匯入) 使用者 TDE 憑證，請使用 `rds_drop_tde_certificate` 預存程序。具有下列語法。

```
EXECUTE msdb.dbo.rds_drop_tde_certificate @certificate_name='UserTDECertificate_certificate_name';
```

以下是必要參數：
+ `@certificate_name` – 所要捨棄 TDE 憑證的名稱。

您只能捨棄已還原 (已匯入) 的 TDE 憑證。您不能捨棄 RDS 建立的憑證。

**Example 捨棄 TDE 憑證**  

```
EXECUTE msdb.dbo.rds_drop_tde_certificate @certificate_name='UserTDECertificate_myTDEcertificate';
```

# 備份與還原內部部署資料庫的 TDE 憑證
<a name="TDE.BackupRestoreOnPrem"></a>

您可以備份內部部署資料庫的 TDE 憑證，日後再將憑證還原到 RDS for SQL Server。您還可以將 RDS for SQL Server TDE 憑證還原到內部部署資料庫執行個體。

**注意**  
RDS for SQL Server 不支援使用跨帳戶金鑰搭配 TDE。

下列程序會備份 TDE 憑證和私有金鑰。系統會使用從對稱加密 KMS 金鑰產生的資料金鑰來加密私有金鑰。

**備份內部部署 TDE 憑證**

1. 使用 AWS CLI [generate-data-key](https://docs.aws.amazon.com/cli/latest/reference/kms/generate-data-key.html) 命令產生資料金鑰。

   ```
   aws kms generate-data-key \
       --key-id my_KMS_key_ID \
       --key-spec AES_256
   ```

   輸出結果與以下內容相似。

   ```
   {
   "CiphertextBlob": "AQIDAHimL2NEoAlOY6Bn7LJfnxi/OZe9kTQo/XQXduug1rmerwGiL7g5ux4av9GfZLxYTDATAAAAfjB8BgkqhkiG9w0B
   BwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMyCxLMi7GRZgKqD65AgEQgDtjvZLJo2cQ31Vetngzm2ybHDc3d2vI74SRUzZ
   2RezQy3sAS6ZHrCjfnfn0c65bFdhsXxjSMnudIY7AKw==",
   "Plaintext": "U/fpGtmzGCYBi8A2+0/9qcRQRK2zmG/aOn939ZnKi/0=",
   "KeyId": "arn:aws:kms:us-west-2:123456789012:key/1234abcd-00ee-99ff-88dd-aa11bb22cc33"
   }
   ```

   您在下一步可以使用純文字輸出作為私有金鑰密碼。

1. 備份 TDE 憑證，如下列範例所示。

   ```
   BACKUP CERTIFICATE myOnPremTDEcertificate TO FILE = 'D:\tde-cert-backup.cer'
   WITH PRIVATE KEY (
   FILE = 'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\cert-backup-key.pvk',
   ENCRYPTION BY PASSWORD = 'U/fpGtmzGCYBi8A2+0/9qcRQRK2zmG/aOn939ZnKi/0=');
   ```

1. 將憑證備份檔案儲存至 Amazon S3 憑證儲存貯體。

1. 將私有金鑰備份檔案儲存到 S3 憑證儲存貯體，並在檔案的中繼資料中使用以下標籤：
   + 索引鍵 – `x-amz-meta-rds-tde-pwd`
   + 值 – 來自產生資料金鑰的 `CiphertextBlob` 值，如下列範例所示。

     ```
     AQIDAHimL2NEoAlOY6Bn7LJfnxi/OZe9kTQo/XQXduug1rmerwGiL7g5ux4av9GfZLxYTDATAAAAfjB8BgkqhkiG9w0B
     BwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMyCxLMi7GRZgKqD65AgEQgDtjvZLJo2cQ31Vetngzm2ybHDc3d2vI74SRUzZ
     2RezQy3sAS6ZHrCjfnfn0c65bFdhsXxjSMnudIY7AKw==
     ```

以下程序會將 RDS for SQL Server TDE 憑證還原至內部部署資料庫執行個體。您可以使用憑證備份、對應的私有金鑰檔案與資料金鑰，在目的地資料庫執行個體上複製與還原 TDE 憑證。還原的憑證由新伺服器的資料庫主要金鑰加密。

**還原 TDE 憑證**

1. 將 TDE 憑證備份檔案和私有金鑰檔案從 Amazon S3 複製到目的地執行個體。如需從 Amazon S3 複製檔案的詳細資訊，請參閱 [在 RDS for SQL Server 與 Amazon S3 之間傳輸檔案](Appendix.SQLServer.Options.S3-integration.using.md)。

1. 使用 KMS 金鑰解密輸出密碼文字，以擷取資料金鑰的純文字。密碼文字位於私有金鑰備份檔案的 S3 中繼資料中。

   ```
   aws kms decrypt \
       --key-id my_KMS_key_ID \
       --ciphertext-blob fileb://exampleCiphertextFile | base64 -d \
       --output text \
       --query Plaintext
   ```

   您在下一步可以使用純文字輸出作為私有金鑰密碼。

1. 使用下列 SQL 命令還原 TDE 憑證。

   ```
   CREATE CERTIFICATE myOnPremTDEcertificate FROM FILE='D:\tde-cert-backup.cer'
   WITH PRIVATE KEY (FILE = N'D:\tde-cert-key.pvk',
   DECRYPTION BY PASSWORD = 'plain_text_output');
   ```

如需 KMS 解密的詳細資訊，請參閱 *AWS CLI 命令參考*中 KMS 一節的[解密](https://docs.aws.amazon.com/cli/latest/reference/kms/decrypt.html)。

在目的地資料庫執行個體上還原 TDE 憑證後，您可以使用該憑證還原加密的資料庫。

**注意**  
您可以使用相同的 TDE 憑證來加密來源資料庫執行個體上的多個 SQL Server 資料庫。若要將多個資料庫遷移至目的地執行個體，請僅將與這些資料庫關聯的 TDE 憑證複製到目的地執行個體一次。

# 為 RDS for SQL Server 關閉 TDE
<a name="TDE.Disabling"></a>

若要關閉 RDS for SQL Server 資料庫執行個體的 TDE，首先請確定沒有任何加密的物件留在資料庫執行個體上。若要這麼做，請解密或捨棄這些物件。如果資料庫執行個體中存在加密物件，則您無法關閉資料庫執行個體的 TDE 功能。如果已還原 （匯入） 加密的使用者 TDE 憑證，則應將其捨棄。當您使用主控台從選項群組中移除 TDE 選項時，主控台會顯示它正在處理。此外，如果選項群組與加密資料庫執行個體或資料庫快照有關，則會建立一次錯誤事件。

下列範例會從稱為 `customerDatabase` 的資料庫中移除 TDE 加密。

```
 1. ------------- Removing TDE ----------------
 2. 
 3. USE [customerDatabase]
 4. GO
 5. 
 6. -- Turn off encryption of the database
 7. ALTER DATABASE [customerDatabase]
 8. SET ENCRYPTION OFF
 9. GO
10. 
11. -- Wait until the encryption state of the database becomes 1. The state is 5 (Decryption in progress) for a while
12. SELECT db_name(database_id) as DatabaseName, * FROM sys.dm_database_encryption_keys
13. GO
14. 
15. -- Drop the DEK used for encryption
16. DROP DATABASE ENCRYPTION KEY
17. GO
18. 
19. -- Drop a user TDE certificate if it was restored (imported)
20. EXECUTE msdb.dbo.rds_drop_tde_certificate @certificate_name='UserTDECertificate_certificate_name';
21. 
22. -- Alter to SIMPLE Recovery mode so that your encrypted log gets truncated
23. USE [master]
24. GO
25. ALTER DATABASE [customerDatabase] SET RECOVERY SIMPLE
26. GO
```

所有物件都解密後，會有兩個選擇：

1. 您可以將資料庫執行個體修改為關聯至不具有 TDE 選項的選項群組。

1. 您可以從選項群組中移除 TDE 選項。

# SQL Server 稽核
<a name="Appendix.SQLServer.Options.Audit"></a>

在 Amazon RDS 中，您可以使用內建的 SQL Server 稽核機制來稽核 Microsoft SQL Server資料庫。您可以像在現場部署資料庫伺服器上一樣建立稽核與稽核規格。

RDS 會使用您提供的 IAM 角色，將完成的稽核日誌上傳到 S3 儲存貯體。如果您啟用了保留，RDS 會在設定的期間內將稽核日誌保存於資料庫執行個體上。

如需詳細資訊，請參閱 Microsoft SQL Server 文件中的 [SQL Server 稽核 (資料庫引擎)](https://docs.microsoft.com/sql/relational-databases/security/auditing/sql-server-audit-database-engine)。

## 使用資料庫活動串流的 SQL Server 稽核
<a name="Appendix.SQLServer.DAS.Audit"></a>

您可以使用 RDS 的資料庫活動串流，整合 SQL Server 稽核事件與 Imperva、McAfee 和 IBM 的資料庫活動監控工具。如需詳細了解以資料庫活動串流稽核 RDS SQL Server，請參閱 [在 Microsoft SQL Server 中進行稽核](DBActivityStreams.md#DBActivityStreams.Overview.SQLServer-auditing) 

**Topics**
+ [使用資料庫活動串流的 SQL Server 稽核](#Appendix.SQLServer.DAS.Audit)
+ [對 SQL Server 稽核的支援。](#Appendix.SQLServer.Options.Audit.Support)
+ [將 SQL Server 稽核新增至資料庫執行個體選項](Appendix.SQLServer.Options.Audit.Adding.md)
+ [使用 SQL Server 稽核](Appendix.SQLServer.Options.Audit.CreateAuditsAndSpecifications.md)
+ [檢視稽核日誌](Appendix.SQLServer.Options.Audit.AuditRecords.md)
+ [將 SQL Server 稽核與多個可用區執行個體搭配使用](#Appendix.SQLServer.Options.Audit.Multi-AZ)
+ [設定 S3 儲存貯體](Appendix.SQLServer.Options.Audit.S3bucket.md)
+ [手動建立適用於 SQL Server 稽核的IAM 角色](Appendix.SQLServer.Options.Audit.IAM.md)

## 對 SQL Server 稽核的支援。
<a name="Appendix.SQLServer.Options.Audit.Support"></a>

在 Amazon RDS 中，從 SQL Server 2016 開始，SQL Server 的所有版本均支援伺服器層級稽核，企業版還支援資料庫層級稽核。從 SQL Server 2016 (13.x) SP1 開始，所有版本均支援伺服器層級和資料庫層級稽核。如需更多詳細資訊，請參閱 SQL Server 文件中的 [SQL Server 稽核 (資料庫引擎)](https://docs.microsoft.com/sql/relational-databases/security/auditing/sql-server-audit-database-engine)。

RDS 支援對下列 SQL Server 稽核選項進行設定。


| 選項設定 | 有效值 | 描述 | 
| --- | --- | --- | 
| IAM\$1ROLE\$1ARN | 有效的 Amazon Resource Name (ARN)，格式為 arn:aws:iam::account-id:role/role-name。 | IAM 角色的 ARN，該角色授予對您想要儲存稽核日誌的 S3 儲存貯體的存取權。如需詳細資訊，請參閱 AWS 一般參考 中的 [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-iam)。 | 
| S3\$1BUCKET\$1ARN | arn:aws:s3:::amzn-s3-demo-bucket 或 arn:aws:s3:::amzn-s3-demo-bucket/key-prefix 格式的有效 ARN | 您想要儲存稽核日誌的 S3 儲存貯體的 ARN。 | 
| ENABLE\$1COMPRESSION | true 或 false \$1 | 控制稽核日誌壓縮。預設會啟用壓縮 (設定為 true)。 | 
| RETENTION\$1TIME | 0 至 840 | SQL Server 稽核記錄保存於 RDS 執行個體上的保留時間 (以小時計)。預設會停用保留。 | 

# 將 SQL Server 稽核新增至資料庫執行個體選項
<a name="Appendix.SQLServer.Options.Audit.Adding"></a>

啟用 SQL Server稽核需要兩個步驟︰啟用資料庫執行個體上的選項，以及啟用 SQL Server 內的功能。將 SQL Server 稽核選項新增至資料庫執行個體的過程如下︰ 

1. 建立新的選項群組，或是複製或修改現有選項群組。

1. 新增和設定所有必要的選項。

1. 將選項群組與資料庫執行個體建立關聯。

新增 SQL Server 稽核 選項後，並不需要重新啟動資料庫執行個體。只要選項群組處於作用中狀態，您就可以建立稽核，並將稽核日誌儲存於 S3 儲存貯體。

**若要在資料庫執行個體的選項群組中新增和設定 SQL Server 稽核**

1. 選擇下列其中一項：
   + 使用現有的選項群組。
   + 建立自訂資料庫選項群組，並使用該選項群組。如需更多詳細資訊，請參閱 [建立選項群組](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)。

1. 將 **SQLSERVER\$1AUDIT** 選項新增至選項群組，並進行選項設定。如需新增選項的詳細資訊，請參閱[將選項新增至選項群組](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)。
   + 在 **IAM role (IAM 角色)** 中，如果您已經擁有具備所需原則的 IAM 角色，您可以選取該角色。若要建立新的 IAM 角色，請選擇 **Create a New Role (建立新角色)**。如需必要政策的資訊，請參閱 [手動建立適用於 SQL Server 稽核的IAM 角色](Appendix.SQLServer.Options.Audit.IAM.md)。
   + 在 **Select S3 destination (選擇 S3 目的地)** 中，如果您已經有想要使用的 S3 儲存貯體，請選取它。若要建立 S3 儲存貯體，請選擇 **Create a New S3 Bucket (建立新的 S3 儲存貯體)**。
   + 在 **Enable Compression (啟用壓縮)** 中，請勾選此選項，以壓縮稽核檔案。預設會啟用壓縮。若要停用壓縮，請取消勾選 **Enable Compression (啟用壓縮)**。
   + 在 **Audit log retention (稽核日誌保留)** 中，若要將稽核記錄保留在資料庫執行個體上，請選擇此選項。指定以小時計的停留時間。最長的停留時間是 35 天。

1. 將選項群組套用至新的或現有的資料庫執行個體。選擇下列其中一項：
   + 如果您建立了新的資料庫執行個體，在啟動執行個體時套用選項群組。
   + 針對現有的資料庫執行個體，可以修改執行個體，並附加新的選項群組，以套用選項群組。如需更多詳細資訊，請參閱 [修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

## 修改 SQL Server 稽核選項
<a name="Appendix.SQLServer.Options.Audit.Modifying"></a>

啟用 SQL Server 稽核選項之後，您可以修改設定。如需如何修改選項設定的詳細資訊，請參閱[修改選項設定](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption)。

## 從資料庫執行個體選項中移除 SQL Server 稽核
<a name="Appendix.SQLServer.Options.Audit.Removing"></a>

您可以停用稽核，然後刪除該選項，以關閉 SQL Server 稽核功能。

**若要移除稽核**

1. 停用 SQL Server 內的所有稽核設定。若要瞭解稽核執行到哪裡，請查詢 SQL Server 安全目錄檢視。如需詳細資訊，請參閱 SQL Server 文件中的[安全目錄檢視](https://docs.microsoft.com/sql/relational-databases/system-catalog-views/security-catalog-views-transact-sql)。

1. 從資料庫執行個體刪除 SQL Server 稽核選項 選擇下列其中一項：
   + 從資料庫執行個體使用的選項群組中刪除 SQL Server稽核選項。此變更會影響使用同一選項群組的所有資料庫執行個體。如需更多詳細資訊，請參閱 [從選項群組移除選項](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.RemoveOption)。
   + 修改資料庫執行個體，然後選擇一個沒有 SQL Server 稽核選項的選項群組。此一變更只會影響您修改的資料庫執行個體。您可以指定預設的 (空白) 選項群組或不同的自訂選項群組。如需更多詳細資訊，請參閱 [修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

1. 從資料庫執行個體刪除 SQL Server 稽核選項後，不需要重新啟動執行個體。從 S3 儲存貯體移除不需要的稽核檔案。

# 使用 SQL Server 稽核
<a name="Appendix.SQLServer.Options.Audit.CreateAuditsAndSpecifications"></a>

您可以使用和控制現場部署資料庫伺服器一樣的方式，控制伺服器稽核、伺服器稽核規格和資料庫稽核規格。

## 建立稽核
<a name="Appendix.SQLServer.Options.Audit.CreateAudits"></a>

您可以使用與現場部署資料庫伺服器相同的方式建立伺服器稽核。如需如何建立伺服器稽核的資訊，請參閱 Microsoft SQL Server 文件中的 [CREATE SERVER AUDIT](https://docs.microsoft.com/sql/t-sql/statements/create-server-audit-transact-sql)。

為了避免錯誤，請遵守以下限制︰
+ 切勿超過每部執行個體所支援伺服器稽核的最大數量 ─ 50。
+ 指示 SQL Server 將資料寫到二進位檔案。
+ 伺服器稽核名稱的字首不要使用 `RDS_`。
+ 在 `FILEPATH`，請指定 `D:\rdsdbdata\SQLAudit`。
+ 在 `MAXSIZE` 中，指定介於 2 MB 和50 MB 之間的大小。
+ 不要設定 `MAX_ROLLOVER_FILES` 或 `MAX_FILES`。
+ 如果 SQL Server 無法寫入稽核記錄，請勿設定讓它關閉資料庫執行個體。

## 建立稽核規格
<a name="Appendix.SQLServer.Options.Audit.CreateSpecifications"></a>

您使用與現場部署資料庫伺服器相同的方式建立伺服器稽核規格和資料庫稽核規格。如需建立稽核規格的資訊，請參閱Microsoft SQL Server 文件中的 [CREATE SERVER AUDIT SPECIFICATION](https://docs.microsoft.com/sql/t-sql/statements/create-server-audit-specification-transact-sql) 和 [CREATE DATABASE AUDIT SPECIFICATION](https://docs.microsoft.com/sql/t-sql/statements/create-database-audit-specification-transact-sql)。

為了避免錯誤，資料庫稽核規格或伺服器稽核規格名稱中的字首請不要使用 `RDS_`。

# 檢視稽核日誌
<a name="Appendix.SQLServer.Options.Audit.AuditRecords"></a>

稽核日誌被儲存於 `D:\rdsdbdata\SQLAudit`。

SQL Server 完成稽核日誌檔案的寫入後 — 當檔案到達大小限制時 —Amazon RDS 會將檔案上傳到 S3 儲存貯體。如果啟用了保留，Amazon RDS 會將檔案移動到保留資料夾內︰`D:\rdsdbdata\SQLAudit\transmitted`。

如需設定保留的相關資訊，請參閱 [將 SQL Server 稽核新增至資料庫執行個體選項](Appendix.SQLServer.Options.Audit.Adding.md)。

稽核記錄會保存在資料庫執行個體上，直到稽核日誌檔案被上傳為止。您可以執行下列命令，以查看稽核記錄。

```
SELECT   * 
	FROM     msdb.dbo.rds_fn_get_audit_file
	             ('D:\rdsdbdata\SQLAudit\*.sqlaudit'
	             , default
	             , default )
```

您可以使用相同的命令，將篩選器變更為 `D:\rdsdbdata\SQLAudit\transmitted\*.sqlaudit`，以查看保留資料夾中的稽核記錄。

```
SELECT   * 
	FROM     msdb.dbo.rds_fn_get_audit_file
	             ('D:\rdsdbdata\SQLAudit\transmitted\*.sqlaudit'
	             , default
	             , default )
```

## 將 SQL Server 稽核與多個可用區執行個體搭配使用
<a name="Appendix.SQLServer.Options.Audit.Multi-AZ"></a>

對於多可用區執行個體，將稽核日誌檔案傳送到 Amazon S3 的程序與單一可用區執行個體類似。不過，還是有一些重要的差異。
+ 資料庫稽核規格物件會被複寫到所有節點。
+ 伺服器稽核與伺服器稽核規格不會複寫到次要節點。反之，您必須手動建立或修改它們。

若要從兩個節點擷取伺服器稽核或伺服器稽核規格︰

1. 在主要節點上建立伺服器稽核或伺服器稽核規格。

1. 容錯移轉到次要節點，同時在次要節點上建立具有相同名稱和 GUID 的伺服器稽核或伺服器稽核規格。使用 `AUDIT_GUID` 參數指定 GUID。

# 設定 S3 儲存貯體
<a name="Appendix.SQLServer.Options.Audit.S3bucket"></a>

稽核日誌檔案會自動從資料庫執行個體上傳到 S3 儲存貯體。下列限制適用於使用為稽核檔案目標的 S3 儲存貯體︰ 
+ 它必須與資料庫執行個體位於相同的 AWS 區域和 AWS 帳戶。
+ 它不可以開放給大眾使用。
+ 儲存貯體擁有者也必須是 IAM 角色擁有者。
+ 您的 IAM 角色必須具有與 S3 儲存貯體伺服器端加密相關聯的客戶自管 KMS 金鑰許可。

用來儲存資料的目標索引鍵遵循此一命名結構描述︰`amzn-s3-demo-bucket/key-prefix/instance-name/audit-name/node_file-name.ext` 

**注意**  
您以 (`S3_BUCKET_ARN`) 選項設定來設定儲存貯體名稱和金鑰前綴的值。

結構描述由下列元素組成︰
+ ***amzn-s3-demo-bucket*** – S3 儲存貯體的名稱。
+ **`key-prefix`** – 您想要使用於稽核日誌的自訂索引鍵字首。
+ **`instance-name`** – Amazon RDS 執行個體的名稱。
+ **`audit-name`** – 稽核的名稱。
+ **`node`** – 節點的識別符，該節點是稽核日誌的來源 (`node1` 或 `node2`)。單一可用區執行個體有一個節點，多可用區執行個體則有兩個複寫節點。這些節點並不是主要和次要節點，因為主要和次要角色會隨著時間而改變。反之，節點識別符只是一個簡單的標籤。
  + **`node1`** – 第一個複寫節點 (單一可用區只有一個節點)。
  + **`node2`** – 第二個複寫節點 (多可用區有兩個節點)。
+ **`file-name`** – 目標檔案名稱。檔案名稱係從 SQL Server 依現狀取得。
+ **`ext`** – 檔案的副檔名 (`zip` 或 `sqlaudit`)：
  + **`zip`** – 如果啟用了壓縮 (預設)。
  + **`sqlaudit`** – 如果停用了壓縮。

# 手動建立適用於 SQL Server 稽核的IAM 角色
<a name="Appendix.SQLServer.Options.Audit.IAM"></a>

一般而言，當您建立新的選項時， 會為您AWS 管理主控台建立 IAM 角色和 IAM 信任政策。然而，您可以手動建立新的 IAM 角色，並使用於 SQL Server 稽核，以便使用您可能有的其他要求自訂該角色。若要這麼做，請建立一個 IAM 角色，並委派許可，以便 Amazon RDS 服務可以使用 Amazon S3 儲存貯體。當您建立 IAM 角色時，您需要附加信任和許可政策。信任政策允許 Amazon RDS 擔任此角色。許可政策定義此角色可以執行的動作。如需詳細資訊，請參閱《 *AWSIdentity and Access Management 使用者指南*》中的[建立角色以將許可委派給 AWS服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

您可以使用本節的範例建立您需要的信任關係和許可政策。

以下範例說明 SQL Server Audit 的信任關係。該政策會使用*服務主體* `rds.amazonaws.com`，以允許 RDS 寫入 S3 儲存貯體。「服務委託人」**是用來將許可授予給服務的識別符。當您允許以此種方式存取 `rds.amazonaws.com` 時，就是允許 RDS 代表您執行動作。如需服務委託人的詳細資訊，請參閱 [AWS JSON 政策元素：委託人](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。

**Example SQL Server Audit 的信任關係**    
****  

```
{
	    "Version":"2012-10-17",		 	 	 
	    "Statement": [
	        {
	            "Effect": "Allow",
	            "Principal": {
	                "Service": "rds.amazonaws.com"
	            },
	            "Action": "sts:AssumeRole"
	        }
	    ]
	}
```

建議您在資源型信任關係中使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全域條件內容金鑰，將服務的許可限定於特定資來源。這是防止[混淆代理人問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)最有效的方式。

您可以同時使用全域條件內容索引鍵和包含帳號 ID 的 `aws:SourceArn` 值。在此情況下，當在相同陳述式中使用 `aws:SourceAccount` 值和 `aws:SourceArn` 裡的帳户時，兩者必須使用同樣的帳户 ID。
+ 如果您想要跨服務存取單一資源，請使用 `aws:SourceArn`。
+ 如果您想要允許該帳戶中的任何資源與跨服務使用相關聯，請使用 `aws:SourceAccount`。

在信任關係中，請務必使用 `aws:SourceArn` 全域條件內容索引鍵，其中包含存取角色的資源之完整 Amazon 資源名稱 (ARN)。針對 SQL Server Audit，請確認同時包括資料庫選項群組和資料庫執行個體，如以下範例所示。

**Example SQL Server Audit 的全域條件內容索引鍵信任關係**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "rds.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": [
                        "arn:aws:rds:Region:my_account_ID:db:db_instance_identifier",
                        "arn:aws:rds:Region:my_account_ID:og:option_group_name"
                    ]
                }
            }
        }
    ]
}
```

在以下 SQL Server Audit 的許可政策範例中，我們指定了 Amazon S3 儲存貯體的 ARN。您可以使用 ARN 識別您想要授予存取權的特定帳戶、使用者或角色。如需使用 ARN 的詳細資訊，請參閱 [ Amazon 資源名稱 (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)。

**Example SQL Server Audit 的許可政策**    
****  

```
{
	    "Version":"2012-10-17",		 	 	 
	    "Statement": [
	        {
	            "Effect": "Allow",
	            "Action": "s3:ListAllMyBuckets",
	            "Resource": "*"
	        },
	        {
	            "Effect": "Allow",
	            "Action": [
	                "s3:ListBucket",
	                "s3:GetBucketACL",
	                "s3:GetBucketLocation"
	            ],
	            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
	        },
	        {
	            "Effect": "Allow",
	            "Action": [
	                "s3:PutObject",
	                "s3:ListMultipartUploadParts",
	                "s3:AbortMultipartUpload"
	            ],
	            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/key_prefix/*"
	        }
	    ]
	}
```

**注意**  
驗證相同AWS帳戶同時擁有 S3 儲存貯體和 SQL Server 資料庫執行個體時，需要 `s3:ListAllMyBuckets`動作。此動作會列出帳戶中儲存貯體的名稱。  
S3 儲存貯體命名空間是全域的。如果您不小心刪除了儲存貯體，其他使用者可在不同帳戶中建立相同名稱的儲存貯體。然後 SQL Server 稽核資料將會寫入新的儲存貯體。

# 支援 Amazon RDS for SQL Server 中的 SQL Server Analysis Services
<a name="Appendix.SQLServer.Options.SSAS"></a>

Microsoft SQL Server Analysis Services (SSAS) 是 Microsoft 商業智慧 (MSBI) 套件的一部分。SSAS 是安裝在 SQL Server 內的線上分析處理 (OLAP) 和資料採礦工具。您可以使用 SSAS 來分析資料，以協助您做出商業決策。SSAS 與 SQL Server 關聯式資料庫不同，因為 SSAS 是針對商業智慧環境中常見的查詢和計算最佳化。

 您可以在現有或新的資料庫執行個體上開啟 SSAS。它安裝在與資料庫引擎相同的資料庫執行個體上。如需 SSAS 的詳細資訊，請參閱 Microsoft [Analysis Services 文件](https://docs.microsoft.com/en-us/analysis-services)。

Amazon RDS 的下列版本支援 SSAS for SQL Server Standard 和 Enterprise Edition：
+ 表格模式：
  + SQL Server 2019，15.00.4043.16.v1 版和更新版本
  + SQL Server 2017，14.00.3223.3.v1 版和更新版本
  + SQL Server 2016，13.00.5426.0.v1 版和更新版本
+ 多維度模式：
  + SQL Server 2019，15.00.4153.1.v1 版和更新版本
  + SQL Server 2017，14.00.3381.3.v1 版和更新版本
  + SQL Server 2016，13.00.5882.1.v1 版和更新版本

**Contents**
+ [限制](#SSAS.Limitations)
+ [開啟 SSAS](SSAS.Enabling.md)
  + [建立 SSAS 的選項群組。](SSAS.Enabling.md#SSAS.OptionGroup)
  + [將 SSAS 選項新增至選項群組](SSAS.Enabling.md#SSAS.Add)
  + [將選項群組關聯至您的資料庫執行個體](SSAS.Enabling.md#SSAS.Apply)
  + [允許對 VPC 安全群組進行傳入存取](SSAS.Enabling.md#SSAS.InboundRule)
  + [啟用 Amazon S3 整合](SSAS.Enabling.md#SSAS.EnableS3)
+ [在 Amazon RDS 上部署 SSAS 專案](SSAS.Deploy.md)
+ [監視部署任務的狀態](SSAS.Monitor.md)
+ [在 Amazon RDS 上使用 SSAS](SSAS.Use.md)
  + [為 SSAS 設定通過 Windows 驗證的使用者](SSAS.Use.md#SSAS.Use.Auth)
  + [新增網域使用者做為資料庫管理員](SSAS.Use.md#SSAS.Admin)
  + [建立 SSAS Proxy](SSAS.Use.md#SSAS.Use.Proxy)
  + [使用 SQL Server Agent 排程 SSAS 資料庫處理作業](SSAS.Use.md#SSAS.Use.Schedule)
  + [從 Proxy 撤銷 SSAS 存取權](SSAS.Use.md#SSAS.Use.Revoke)
+ [備份 SSAS 資料庫](SSAS.Backup.md)
+ [還原 SSAS 資料庫](SSAS.Restore.md)
  + [將資料庫執行個體還原至指定的時間](SSAS.Restore.md#SSAS.PITR)
+ [變更 SSAS 模式](SSAS.ChangeMode.md)
+ [關閉 SSAS](SSAS.Disable.md)
+ [疑難排解 SSAS 問題](SSAS.Trouble.md)

## 限制
<a name="SSAS.Limitations"></a>

在 RDS for SQL Server 上使用 SSAS 時適用下列限制：
+ RDS for SQL Server 支援在表格或多維度模式下執行 SSAS。如需詳細資訊，請參閱 Microsoft 說明文件中的[比較表格和多維度解決方案](https://docs.microsoft.com/en-us/analysis-services/comparing-tabular-and-multidimensional-solutions-ssas)在微軟檔案中。
+ 一次只能使用一種 SSAS 模式。變更模式之前，請務必刪除所有 SSAS 資料庫。

  如需更多詳細資訊，請參閱 [變更 SSAS 模式](SSAS.ChangeMode.md)。
+ 不支援異地同步備份執行個體。
+ 執行個體必須使用自我管理的 Active Directory 或 AWS Directory Service for Microsoft Active Directory for SSAS 身分驗證。如需更多詳細資訊，請參閱 [使用 Active Directory 搭配 RDS for SQL Server](User.SQLServer.ActiveDirectoryWindowsAuth.md)。
+ 使用者不會獲得 SSAS 伺服器系統管理員存取權，但可以獲得資料庫層級的系統管理員存取權。
+ 唯一支援存取 SSAS 的連接埠是 2383。
+ 您無法直接部署專案。我們提供 RDS 預存程序來執行此操作。如需更多詳細資訊，請參閱 [在 Amazon RDS 上部署 SSAS 專案](SSAS.Deploy.md)。
+ 不支援在部署期間進行處理。
+ 不支援使用 .xmla 檔案進行部署。
+ SSAS 專案輸入檔案和資料庫備份輸出檔案只能位於資料庫執行個體的 `D:\S3` 資料夾中。

# 開啟 SSAS
<a name="SSAS.Enabling"></a>

使用下列程序為資料庫執行個體開啟 SSAS：

1. 建立新的選項群組或選擇現有的選項群組。

1. 將 `SSAS` 選項新增至選項群組。

1. 將選項群組與資料庫執行個體建立關聯。

1. 允許傳入存取 SSAS 監聽器連接埠的 Virtual Private Cloud (VPC) 安全群組。

1. 開啟 Amazon S3 整合。

## 建立 SSAS 的選項群組。
<a name="SSAS.OptionGroup"></a>

使用 AWS 管理主控台或 AWS CLI 來建立對應至您打算使用之 SQL Server 引擎和資料庫執行個體版本的選項群組。

**注意**  
如果現有的選項群組適用於正確的 SQL Server 引擎和版本，則也可以使用。

### 主控台
<a name="SSAS.OptionGroup.Console"></a>

下列主控台程序會建立 SQL Server Standard Edition 2017 的選項群組。

**建立選項群組**

1. 登入 AWS 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 選擇**建立群組**。

1. 在 **Create option group (建立選項群組)** 窗格中，執行下列動作：

   1. 在 **Name** (名稱) 中，輸入您 AWS 帳戶中的唯一選項群組名稱，例如 **ssas-se-2017**。名稱僅可包含字母、數字與連字號。

   1. 對於 **Description (描述)**，請輸入選項群組的簡短描述，例如 **SSAS option group for SQL Server SE 2017**。用於顯示用途的說明。

   1. 對於 **Engine (引擎)**，請選擇 **sqlserver-se**。

   1. 對於 **Major engine version (主要引擎版本)**，請選擇 **14.00**。

1. 選擇**建立**。

### CLI
<a name="SSAS.OptionGroup.CLI"></a>

下列 CLI 範例會為 SQL Server Standard Edition 2017 建立選項群組。

**建立選項群組**
+ 請使用下列其中一個命令。  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds create-option-group \
      --option-group-name ssas-se-2017 \
      --engine-name sqlserver-se \
      --major-engine-version 14.00 \
      --option-group-description "SSAS option group for SQL Server SE 2017"
  ```

  針對 Windows：

  ```
  aws rds create-option-group ^
      --option-group-name ssas-se-2017 ^
      --engine-name sqlserver-se ^
      --major-engine-version 14.00 ^
      --option-group-description "SSAS option group for SQL Server SE 2017"
  ```

## 將 SSAS 選項新增至選項群組
<a name="SSAS.Add"></a>

接下來，使用 AWS 管理主控台或 AWS CLI 將 `SSAS` 選項加入至選項群組。

### 主控台
<a name="SSAS.Add.Console"></a>

**新增 SSAS 選項**

1. 登入 AWS 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 選擇您剛建立的選項群組。

1. 選擇 **Add option (新增選項)**。

1. 在 **Option details (選項詳細資料)** 下，選擇 **SSAS** 做為 **Option name (選項名稱)**。

1. 在 **Option settings (選項設定)** 下，執行下列動作：

   1. 為 **Max memory** (最大記憶體) 輸入範圍 10–80 間的值。

      **Max memory (最大記憶體)** 指定 SSAS 開始更積極釋放記憶體的閾值上限，以便為正在執行的要求以及新的高優先順序要求騰出空間。這個數字是資料庫執行個體總記憶體的百分比。允許的值為 10–80，預設值是 45。

   1. 為 **Mode** (模式) 選擇 SSAS 伺服器模式 **Tabular** (表格) 或 **Multidimensional** (多維度)。

      如果您看不到 **Mode** (模式) 選項設定，表示您的 AWS 區域不支援多維度模式。如需詳細資訊，請參閱 [限制](Appendix.SQLServer.Options.SSAS.md#SSAS.Limitations)。

      預設選項為 **Tabular** (表格)。

   1. 針對 **Security groups (安全群組)**，選擇要與選項產生關聯的 VPC 安全群組。
**注意**  
會預先填入存取 SSAS 的連接埠 (2383)。

1. 在 **Scheduling (排程)** 下，選擇要立即新增選項或是在下一個維護時段新增選項。

1. 選擇 **Add option (新增選項)**。

### CLI
<a name="SSAS.Add.CLI"></a>

**新增 SSAS 選項**

1. 使用下列參數建立 JSON 檔案，例如 `ssas-option.json`：
   + `OptionGroupName` – 您先前建立或選擇的選項群組名稱 (在下列範例中是 `ssas-se-2017`)。
   + `Port` – 您用來存取 SSAS 的連接埠。唯一支援的連接埠是 2383。
   + `VpcSecurityGroupMemberships` – RDS 資料庫執行個體的 VPC 安全群組成員資格。
   + `MAX_MEMORY` – SSAS 應開始更積極釋放記憶體的閾值上限，以便為正在執行的要求以及新的高優先順序要求騰出空間。這個數字是資料庫執行個體總記憶體的百分比。允許的值為 10–80，預設值是 45。
   + `MODE` – SSAS 伺服器模式 `Tabular` 或 `Multidimensional`。預設值為 `Tabular`。

     如果您收到錯誤，顯示 `MODE` 選項設定無效，表示您的 AWS 區域不支援多維度模式。如需詳細資訊，請參閱 [限制](Appendix.SQLServer.Options.SSAS.md#SSAS.Limitations)。

   以下是含有 SSAS 選項設定的 JSON 檔案範例。

   ```
   {
   "OptionGroupName": "ssas-se-2017",
   "OptionsToInclude": [
   	{
   	"OptionName": "SSAS",
   	"Port": 2383,
   	"VpcSecurityGroupMemberships": ["sg-0abcdef123"],
   	"OptionSettings": [{"Name":"MAX_MEMORY","Value":"60"},{"Name":"MODE","Value":"Multidimensional"}]
   	}],
   "ApplyImmediately": true
   }
   ```

1. 將 `SSAS` 選項新增至選項群組。  
**Example**  

   針對 Linux、macOS 或 Unix：

   ```
   aws rds add-option-to-option-group \
       --cli-input-json file://ssas-option.json \
       --apply-immediately
   ```

   針對 Windows：

   ```
   aws rds add-option-to-option-group ^
       --cli-input-json file://ssas-option.json ^
       --apply-immediately
   ```

## 將選項群組關聯至您的資料庫執行個體
<a name="SSAS.Apply"></a>

您可以使用主控台或 CLI 為選項群組與資料庫執行個體建立關聯。

### 主控台
<a name="SSAS.Apply.Console"></a>

將您的選項群組關聯至新的或現有的資料庫執行個體：
+ 對於新的資料庫執行個體，當您啟動執行個體時，將選項群組關聯至資料庫執行個體。如需更多詳細資訊，請參閱 [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。
+ 對於現有的資料庫執行個體，請修改執行個體並與新的選項群組建立關聯。如需詳細資訊，請參閱 [修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。
**注意**  
如果您使用現有執行個體，則該執行個體必須已有與其相關聯的 Active Directory 網域和 AWS Identity and Access Management (IAM) 角色。如果您建立新執行個體，請指定現有的 Active Directory 網域和 IAM 角色。如需詳細資訊，請參閱 [使用 Active Directory 搭配 RDS for SQL Server](User.SQLServer.ActiveDirectoryWindowsAuth.md)。

### CLI
<a name="SSAS.Apply.CLI"></a>

您可以將選項群組關聯至新的或現有的資料庫執行個體。

**注意**  
如果您使用現有執行個體，則該執行個體必須已有與其相關聯的 Active Directory 網域和 IAM 角色。如果您建立新執行個體，請指定現有的 Active Directory 網域和 IAM 角色。如需詳細資訊，請參閱 [使用 Active Directory 搭配 RDS for SQL Server](User.SQLServer.ActiveDirectoryWindowsAuth.md)。

**建立使用選項群組的資料庫執行個體**
+ 指定建立選項群組時所使用的相同資料庫引擎類型和主要版本。  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds create-db-instance \
      --db-instance-identifier myssasinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-se \
      --engine-version 14.00.3223.3.v1 \
      --allocated-storage 100 \
      --manage-master-user-password \
      --master-username admin \
      --storage-type gp2 \
      --license-model li \
      --domain-iam-role-name my-directory-iam-role \
      --domain my-domain-id \
      --option-group-name ssas-se-2017
  ```

  針對 Windows：

  ```
  aws rds create-db-instance ^
      --db-instance-identifier myssasinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-se ^
      --engine-version 14.00.3223.3.v1 ^
      --allocated-storage 100 ^
      --manage-master-user-password ^
      --master-username admin ^
      --storage-type gp2 ^
      --license-model li ^
      --domain-iam-role-name my-directory-iam-role ^
      --domain my-domain-id ^
      --option-group-name ssas-se-2017
  ```

**修改資料庫執行個體以關聯選項群組**
+ 請使用下列其中一個命令。  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds modify-db-instance \
      --db-instance-identifier myssasinstance \
      --option-group-name ssas-se-2017 \
      --apply-immediately
  ```

  針對 Windows：

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier myssasinstance ^
      --option-group-name ssas-se-2017 ^
      --apply-immediately
  ```

## 允許對 VPC 安全群組進行傳入存取
<a name="SSAS.InboundRule"></a>

在與您的資料庫執行個體相關聯的 VPC 安全群組中，為指定的 SSAS 接聽程式連接埠建立傳入規則。如需設定安全群組的詳細資訊，請參閱[建立安全群組以存取在您的 VPC 中您的資料庫執行個體](CHAP_SettingUp.md#CHAP_SettingUp.SecurityGroup)。

## 啟用 Amazon S3 整合
<a name="SSAS.EnableS3"></a>

若要將模型組態檔下載到主機以進行部署，請使用 Amazon S3 整合。如需詳細資訊，請參閱 [整合 Amazon RDS for SQL Server 資料庫執行個體和 Amazon S3](User.SQLServer.Options.S3-integration.md)。

# 在 Amazon RDS 上部署 SSAS 專案
<a name="SSAS.Deploy"></a>

在 RDS 上，您無法使用 SQL Server Management Studio (SSMS) 直接部署 SSAS 專案。若要部署專案，請使用 RDS 預存程序。

**注意**  
不支援使用 .xmla 檔案進行部署。

部署專案之前，請確定下列事項：
+ Amazon S3 整合已開啟。如需更多詳細資訊，請參閱 [整合 Amazon RDS for SQL Server 資料庫執行個體和 Amazon S3](User.SQLServer.Options.S3-integration.md)。
+ `Processing Option` 組態設定設為 `Do Not Process`。此設定表示部署後不會進行任何處理。
+ 您同時擁有 `myssasproject.asdatabase` 和 `myssasproject.deploymentoptions` 檔案。它們會在您建置 SSAS 專案時自動產生。

**在 RDS 上部署 SSAS 專案**

1. 將 `.asdatabase` (SSAS 模型) 檔案從 S3 儲存貯體下載到資料庫執行個體，如下列範例所示。如需下載參數的詳細資訊，請參閱[將 Amazon S3 儲存貯體中的檔案下載至 SQL Server 資料庫執行個體](Appendix.SQLServer.Options.S3-integration.using.md#Appendix.SQLServer.Options.S3-integration.using.download)。

   ```
   exec msdb.dbo.rds_download_from_s3 
   @s3_arn_of_file='arn:aws:s3:::bucket_name/myssasproject.asdatabase', 
   [@rds_file_path='D:\S3\myssasproject.asdatabase'],
   [@overwrite_file=1];
   ```

1. 將 `.deploymentoptions` 檔案從 S3 儲存貯體下載到您的資料庫執行個體。

   ```
   exec msdb.dbo.rds_download_from_s3
   @s3_arn_of_file='arn:aws:s3:::bucket_name/myssasproject.deploymentoptions', 
   [@rds_file_path='D:\S3\myssasproject.deploymentoptions'],
   [@overwrite_file=1];
   ```

1. 部署專案。

   ```
   exec msdb.dbo.rds_msbi_task
   @task_type='SSAS_DEPLOY_PROJECT',
   @file_path='D:\S3\myssasproject.asdatabase';
   ```

# 監視部署任務的狀態
<a name="SSAS.Monitor"></a>

若要追蹤部署 (或下載) 任務的狀態，請呼叫 `rds_fn_task_status` 函數。需要兩個參數。第一個參數不適用於 SSAS，所以應該一律為 `NULL`。第二個參數接受任務 ID。

若要查看所有任務的清單，請將第一個參數設為 `NULL`，將第二個參數設為 `0`，如下列範例所示。

```
SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,0);
```

若要取得特定的任務，請將第一個參數設為 `NULL`，將第二個參數設為任務 ID，如下列範例所示。

```
SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,42);
```

`rds_fn_task_status` 函數會傳回下列資訊。


| 輸出參數 | 描述 | 
| --- | --- | 
| `task_id` | 任務的 ID。 | 
| `task_type` | 對於 SSAS，任務可以有下列任務類型： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/SSAS.Monitor.html)  | 
| `database_name` | 不適用於 SSAS 任務。 | 
| `% complete` | 任務的進度 (以百分比表示)。 | 
| `duration (mins)` | 任務所花的時間 (以分鐘為單位)。 | 
| `lifecycle` |  任務的狀態。可能的狀態如下： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/SSAS.Monitor.html)  | 
| `task_info` | 任務的其他資訊。如果處理期間發生錯誤，此欄包含該錯誤的相關資訊。 如需更多詳細資訊，請參閱 [疑難排解 SSAS 問題](SSAS.Trouble.md)。 | 
| `last_updated` | 上次更新任務狀態的日期和時間。 | 
| `created_at` | 建立任務的日期和時間。 | 
| `S3_object_arn` |  不適用於 SSAS 任務。  | 
| `overwrite_S3_backup_file` | 不適用於 SSAS 任務。 | 
| `KMS_master_key_arn` |  不適用於 SSAS 任務。  | 
| `filepath` |  不適用於 SSAS 任務。  | 
| `overwrite_file` |  不適用於 SSAS 任務。  | 
| `task_metadata` | 與 SSAS 任務相關聯的中繼資料。 | 

# 在 Amazon RDS 上使用 SSAS
<a name="SSAS.Use"></a>

部署 SSAS 專案之後，您可以在 SSMS 上直接處理 OLAP 資料庫。

**在 RDS 上使用 SSAS**

1. 在 SSMS 中，使用 Active Directory 網域的使用者名稱和密碼連線到 SSAS。

1. 展開 **Databases** (資料庫)。新部署的 SSAS 資料庫隨即出現。

1. 找到連線字串，更新使用者名稱和密碼，為來源 SQL 資料庫提供存取權。這是處理 SSAS 物件的必要操作。

   1. 若使用表格模式，請執行下列操作：

      1. 展開 **Connections** (連線) 索引標籤。

      1. 開啟連線物件的內容 (按一下滑鼠右鍵) 選單，然後選擇 **Properties** (屬性)。

      1. 檢查連線字串中的使用者名稱和密碼。

   1. 若使用多維度模式，請執行下列操作：

      1. 展開 **Data Sources** (資料來源 索引標籤)

      1. 開啟資料來源的內容 (按一下滑鼠右鍵) 選單，然後選擇 **Properties** (屬性)。

      1. 檢查連線字串中的使用者名稱和密碼。

1. 開啟您所建立之 SSAS 資料庫的內容 (按一下滑鼠右鍵) 功能表，然後選擇 **Process Database (處理資料庫)**。

   視輸入資料的大小而定，處理作業可能需要幾分鐘才能完成。

**Topics**
+ [為 SSAS 設定通過 Windows 驗證的使用者](#SSAS.Use.Auth)
+ [新增網域使用者做為資料庫管理員](#SSAS.Admin)
+ [建立 SSAS Proxy](#SSAS.Use.Proxy)
+ [使用 SQL Server Agent 排程 SSAS 資料庫處理作業](#SSAS.Use.Schedule)
+ [從 Proxy 撤銷 SSAS 存取權](#SSAS.Use.Revoke)

## 為 SSAS 設定通過 Windows 驗證的使用者
<a name="SSAS.Use.Auth"></a>

主要管理員使用者 (又稱為主要使用者) 可以使用下列程式碼範例，設定通過 Windows 驗證的登入資料，並授予必要的程序許可。這樣做會為網域使用者授予許可，允許執行 SSAS 客戶任務、使用 S3 檔案傳輸程序、建立憑證以及使用 SQL Server Agent Proxy。如需詳細資訊，請參閱[登入資料 (資料庫引擎)](https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/credentials-database-engine?view=sql-server-ver15) 和 Microsoft 文件中的[建立 SQL Server 代理程式 Proxy](https://docs.microsoft.com/en-us/sql/ssms/agent/create-a-sql-server-agent-proxy?view=sql-server-ver15)。

您可以視需要授予部分或全部下列許可給 Windows 驗證的使用者。

**Example**  

```
-- Create a server-level domain user login, if it doesn't already exist
USE [master]
GO
CREATE LOGIN [mydomain\user_name] FROM WINDOWS
GO

-- Create domain user, if it doesn't already exist
USE [msdb]
GO
CREATE USER [mydomain\user_name] FOR LOGIN [mydomain\user_name]
GO

-- Grant necessary privileges to the domain user
USE [master]
GO
GRANT ALTER ANY CREDENTIAL TO [mydomain\user_name]
GO

USE [msdb]
GO
GRANT EXEC ON msdb.dbo.rds_msbi_task TO [mydomain\user_name] with grant option
GRANT SELECT ON msdb.dbo.rds_fn_task_status TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_task_status TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_cancel_task TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_download_from_s3 TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_upload_to_s3 TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_delete_from_filesystem TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_gather_file_details TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_add_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_update_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_grant_login_to_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_revoke_login_from_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_delete_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_enum_login_for_proxy to [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_enum_proxy_for_subsystem TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_sqlagent_proxy TO [mydomain\user_name] with grant option
ALTER ROLE [SQLAgentUserRole] ADD MEMBER [mydomain\user_name]
GO
```

## 新增網域使用者做為資料庫管理員
<a name="SSAS.Admin"></a>

您可以使用下列方式，將網域使用者新增為 SSAS 資料庫管理員：
+ 資料庫管理員可以使用 SSMS 來建立具有 `admin` 權限的角色，然後將使用者新增至該角色。
+ 您可以使用下列預存程序。

  ```
  exec msdb.dbo.rds_msbi_task
  @task_type='SSAS_ADD_DB_ADMIN_MEMBER',
  @database_name='myssasdb',
  @ssas_role_name='exampleRole',
  @ssas_role_member='domain_name\domain_user_name';
  ```

  下列是必要參數：
  + `@task_type` – MSBI 任務的類型，在此案例中為 `SSAS_ADD_DB_ADMIN_MEMBER`。
  + `@database_name`– 您要授與系統管理員權限的 SSAS 資料庫名稱。
  + `@ssas_role_name` – SSAS 資料庫管理員角色名稱。如果角色不存在，則會建立該角色。
  + `@ssas_role_member` – 您要新增至系統管理員角色的 SSAS 資料庫使用者。

## 建立 SSAS Proxy
<a name="SSAS.Use.Proxy"></a>

需先建立 SSAS 憑證和 SSAS Proxy，才能使用 SQL Server Agent 排程 SSAS 資料庫處理作業。以 Windows 驗證的使用者身分執行這些程序。

**建立 SSAS 憑證**
+ 建立代理的登入資料。若要執行這項操作，您可以使用 SSMS 或下列 SQL 陳述式。

  ```
  USE [master]
  GO
  CREATE CREDENTIAL [SSAS_Credential] WITH IDENTITY = N'mydomain\user_name', SECRET = N'mysecret'
  GO
  ```
**注意**  
`IDENTITY` 必須是網域驗證的登入。以網域驗證登入的密碼取代 `mysecret`。

**建立 SSAS Proxy**

1. 使用下面的 SQL 陳述式來建立代理。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_add_proxy @proxy_name=N'SSAS_Proxy',@credential_name=N'SSAS_Credential',@description=N''
   GO
   ```

1. 使用下列 SQL 陳述式可將代理伺服器的存取權授予其他使用者。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_grant_login_to_proxy @proxy_name=N'SSAS_Proxy',@login_name=N'mydomain\user_name'
   GO
   ```

1. 使用下列 SQL 陳述式來提供 SSAS 子系統 Proxy 的存取權。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.rds_sqlagent_proxy @task_type='GRANT_SUBSYSTEM_ACCESS',@proxy_name='SSAS_Proxy',@proxy_subsystem='SSAS'
   GO
   ```

**在代理上檢視代理和授權**

1. 使用下列 SQL 陳述式來檢視代理的承授者。

   ```
   USE [msdb]
   GO
   EXEC sp_help_proxy
   GO
   ```

1. 使用下列 SQL 陳述式來檢視子系統授予。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_enum_proxy_for_subsystem
   GO
   ```

## 使用 SQL Server Agent 排程 SSAS 資料庫處理作業
<a name="SSAS.Use.Schedule"></a>

建立憑證和 Proxy，並授予 SSAS Proxy 的存取權後，就可以建立 SQL Server Agent 任務來排程 SSAS 資料庫處理作業。

**排程 SSAS 資料庫處理作業**
+ 使用 SSMS 或 T-SQL 來建立 SQL Server Agent 任務。下列範例使用 T-SQL。您可以透過 SSMS 或 T-SQL 進一步設定其任務排程。
  + `@command` 參數概述要由 SQL Server Agent 任務執行的 XML for Analysis (XMLA) 命令。此範例設定了 SSAS 多維度資料庫處理作業。
  + `@server` 參數概述 SQL Server Agent 任務的目標 SSAS 伺服器名稱。

    若要在 SQL Server Agent 任務所在的相同 RDS 資料庫執行個體中呼叫 SSAS 服務，請使用 `localhost:2383`。

    若要從 RDS 資料庫執行個體外部呼叫 SSAS 服務，請使用 RDS 端點。如果 RDS 資料庫執行個體是由同一個網域加入，也可以使用 Kerberos Active Directory (AD) 端點 (`your-DB-instance-name.your-AD-domain-name`)。若使用外部資料庫執行個體，請務必正確設定與 RDS 資料庫執行個體相關聯的 VPC 安全群組，以確保安全連線。

  您可以進一步編輯查詢以支援各種 XMLA 作業。SQL Server Agent 任務建立後，可直接修改 T-SQL 查詢或使用 SSMS UI 進行編輯。

  ```
  USE [msdb]
  GO
  DECLARE @jobId BINARY(16)
  EXEC msdb.dbo.sp_add_job @job_name=N'SSAS_Job', 
      @enabled=1, 
      @notify_level_eventlog=0, 
      @notify_level_email=0, 
      @notify_level_netsend=0, 
      @notify_level_page=0, 
      @delete_level=0, 
      @category_name=N'[Uncategorized (Local)]', 
      @job_id = @jobId OUTPUT
  GO
  EXEC msdb.dbo.sp_add_jobserver 
      @job_name=N'SSAS_Job', 
      @server_name = N'(local)'
  GO
  EXEC msdb.dbo.sp_add_jobstep @job_name=N'SSAS_Job', @step_name=N'Process_SSAS_Object', 
      @step_id=1, 
      @cmdexec_success_code=0, 
      @on_success_action=1, 
      @on_success_step_id=0, 
      @on_fail_action=2, 
      @on_fail_step_id=0, 
      @retry_attempts=0, 
      @retry_interval=0, 
      @os_run_priority=0, @subsystem=N'ANALYSISCOMMAND', 
      @command=N'<Batch xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
          <Parallel>
              <Process xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                  xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2" 
                  xmlns:ddl100_100="http://schemas.microsoft.com/analysisservices/2008/engine/100/100" xmlns:ddl200="http://schemas.microsoft.com/analysisservices/2010/engine/200" 
                  xmlns:ddl200_200="http://schemas.microsoft.com/analysisservices/2010/engine/200/200" xmlns:ddl300="http://schemas.microsoft.com/analysisservices/2011/engine/300" 
                  xmlns:ddl300_300="http://schemas.microsoft.com/analysisservices/2011/engine/300/300" xmlns:ddl400="http://schemas.microsoft.com/analysisservices/2012/engine/400" 
                  xmlns:ddl400_400="http://schemas.microsoft.com/analysisservices/2012/engine/400/400" xmlns:ddl500="http://schemas.microsoft.com/analysisservices/2013/engine/500" 
                  xmlns:ddl500_500="http://schemas.microsoft.com/analysisservices/2013/engine/500/500">
                  <Object>
                      <DatabaseID>Your_SSAS_Database_ID</DatabaseID>
                  </Object>
                  <Type>ProcessFull</Type>
                  <WriteBackTableCreation>UseExisting</WriteBackTableCreation>
              </Process>
          </Parallel>
      </Batch>', 
      @server=N'localhost:2383', 
      @database_name=N'master', 
      @flags=0, 
      @proxy_name=N'SSAS_Proxy'
  GO
  ```

## 從 Proxy 撤銷 SSAS 存取權
<a name="SSAS.Use.Revoke"></a>

您可以撤銷 SSAS 子系統的存取權，並使用下列預存程序刪除 SSAS Proxy。

**撤銷存取權並刪除代理伺服器**

1. 撤銷子系統存取權。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.rds_sqlagent_proxy @task_type='REVOKE_SUBSYSTEM_ACCESS',@proxy_name='SSAS_Proxy',@proxy_subsystem='SSAS'
   GO
   ```

1. 撤銷代理上的授權。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_revoke_login_from_proxy @proxy_name=N'SSAS_Proxy',@name=N'mydomain\user_name'
   GO
   ```

1. 刪除代理。

   ```
   USE [msdb]
   GO
   EXEC dbo.sp_delete_proxy @proxy_name = N'SSAS_Proxy'
   GO
   ```

# 備份 SSAS 資料庫
<a name="SSAS.Backup"></a>

您只能在資料庫執行個體的 `D:\S3` 資料夾中建立 SSAS 資料庫備份檔案。若要將備份檔案移至 S3 儲存貯體，請使用 Amazon S3。

您可以依照以下方式備份 SSAS 資料庫：
+ 具有特定資料庫 `admin` 角色的網域使用者，可以使用 SSMS 將資料庫備份至 `D:\S3` 資料夾。

  如需更多詳細資訊，請參閱 [新增網域使用者做為資料庫管理員](SSAS.Use.md#SSAS.Admin)。
+ 您可以使用下列預存程序。預存程序不支援加密。

  ```
  exec msdb.dbo.rds_msbi_task
  @task_type='SSAS_BACKUP_DB',
  @database_name='myssasdb',
  @file_path='D:\S3\ssas_db_backup.abf',
  [@ssas_apply_compression=1],
  [@ssas_overwrite_file=1];
  ```

  下列是必要參數：
  + `@task_type` – MSBI 任務的類型，在此案例中為 `SSAS_BACKUP_DB`。
  + `@database_name`– 您要備份之 SSAS 資料庫的名稱。
  + `@file_path`– SSAS 備份檔案的路徑。`.abf` 副檔名為必要項目。

  下列是選用參數：
  + `@ssas_apply_compression` – 是否要套用 SSAS 備份壓縮。有效值為 1 (是) 和 0 (否)。
  + `@ssas_overwrite_file` – 是否覆寫 SSAS 備份檔案。有效值為 1 (是) 和 0 (否)。

# 還原 SSAS 資料庫
<a name="SSAS.Restore"></a>

使用下列預存程序從備份還原 SSAS 資料庫。

如果存在具有相同名稱的現有 SSAS 資料庫，則無法還原資料庫。還原的預存程序不支援加密的備份檔案。

```
exec msdb.dbo.rds_msbi_task
@task_type='SSAS_RESTORE_DB',
@database_name='mynewssasdb',
@file_path='D:\S3\ssas_db_backup.abf';
```

下列是必要參數：
+ `@task_type` – MSBI 任務的類型，在此案例中為 `SSAS_RESTORE_DB`。
+ `@database_name` – 您要還原的新 SSAS 資料庫名稱。
+ `@file_path` – SSAS 備份檔案的路徑。

## 將資料庫執行個體還原至指定的時間
<a name="SSAS.PITR"></a>

時間點復原 (PITR) 不適用於 SSAS 資料庫。如果您執行 PITR，則已還原執行個體只能使用所要求時間之前最後一個快照中的 SSAS 資料。

**在已還原資料庫執行個體上擁有最新的 SSAS 資料庫**

1. 將 SSAS 資料庫備份到來源執行個體上的 `D:\S3` 資料夾。

1. 將備份檔案傳輸到 S3 儲存貯體。

1. 將備份檔案從 S3 儲存貯體傳輸到已還原執行個體上的 `D:\S3` 資料夾。

1. 執行預存程序，將 SSAS 資料庫還原到還原的執行個體。

   您也可以重新處理 SSAS 專案，以還原資料庫。

# 變更 SSAS 模式
<a name="SSAS.ChangeMode"></a>

您可以變更 SSAS 執行的模式 (表格或多維度)。若要變更模式，請使用 AWS 管理主控台 或 AWS CLI 來修改 SSAS 選項中的選項設定。

**重要**  
一次只能使用一種 SSAS 模式。變更模式之前請務必刪除所有 SSAS 資料庫，否則會收到錯誤訊息。

## 主控台
<a name="SSAS.ChangeMode.CON"></a>

以下 Amazon RDS 主控台程序將 SSAS 模式變更為「表格」，並將 `MAX_MEMORY` 參數設為 70%。

**修改 SSAS 選項**

1. 登入 AWS 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 選擇您想修改具有 `SSAS` 選項的選項群組 (上述範例中的 `ssas-se-2017`)。

1. 選擇 **Modify option** (修改選項)。

1. 變更選項設定：

   1. 為 **Max memory** (最大記憶體) 輸入 **70**。

   1. 為 **Mode** (模式) 選擇**表格**。

1. 選擇 **Modify option** (修改選項)。

## AWS CLI
<a name="SSAS.ChangeMode.CLI"></a>

以下 AWS CLI 範例將 SSAS 模式變更為「表格」，並將 `MAX_MEMORY` 參數設為 70%。

為了讓 CLI 命令正常運作，即使沒有要修改，也務必包含所有必要參數。

**修改 SSAS 選項**
+ 請使用下列其中一個命令。  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds add-option-to-option-group \
      --option-group-name ssas-se-2017 \
      --options "OptionName=SSAS,VpcSecurityGroupMemberships=sg-12345e67,OptionSettings=[{Name=MAX_MEMORY,Value=70},{Name=MODE,Value=Tabular}]" \
      --apply-immediately
  ```

  針對 Windows：

  ```
  aws rds add-option-to-option-group ^
      --option-group-name ssas-se-2017 ^
      --options OptionName=SSAS,VpcSecurityGroupMemberships=sg-12345e67,OptionSettings=[{Name=MAX_MEMORY,Value=70},{Name=MODE,Value=Tabular}] ^
      --apply-immediately
  ```

# 關閉 SSAS
<a name="SSAS.Disable"></a>

若要關閉 SSAS，請從其選項群組中移除 `SSAS` 選項。

**重要**  
移除 `SSAS` 選項之前，請先刪除您的 SSAS 資料庫。  
我們強烈建議您先備份 SSAS 資料庫，然後再刪除它們並移除 `SSAS` 選項。

## 主控台
<a name="SSAS.Disable.Console"></a>

**從選項群組中移除 SSAS 選項**

1. 登入 AWS 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 選擇您想移除具有 `SSAS` 選項的選項群組 (上述範例中的 `ssas-se-2017`)。

1. 選擇 **Delete option (刪除選項)**。

1. 在 **Deletion options (刪除選項)** 下，選擇 **SSAS** 作為 **Options to delete (要刪除的選項)**。

1. 在 **Apply immediately (立即套用)** 下，選擇 **Yes (是)** 立即刪除選項，或選擇 **No (否)** 在下一個維護時段將其刪除。

1. 選擇 **刪除**。

## AWS CLI
<a name="SSAS.Disable.CLI"></a>

**從選項群組中移除 SSAS 選項**
+ 請使用下列其中一個命令。  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds remove-option-from-option-group \
      --option-group-name ssas-se-2017 \
      --options SSAS \
      --apply-immediately
  ```

  針對 Windows：

  ```
  aws rds remove-option-from-option-group ^
      --option-group-name ssas-se-2017 ^
      --options SSAS ^
      --apply-immediately
  ```

# 疑難排解 SSAS 問題
<a name="SSAS.Trouble"></a>

使用 SSAS 時可能會遇到下列問題。


| 問題 | Type | 故障診斷建議 | 
| --- | --- | --- | 
| 無法設定 SSAS 選項。要求的 SSA 模式為 new\$1mode，但目前的資料庫執行個體具有數目個 current\$1mode 資料庫。先刪除現有資料庫，再切換到 new\$1mode 模式。若要重新取得 current\$1mode 模式的存取權，可以更新目前的資料庫選項群組，或者連接新的選項群組 (SSAS 選項的 MODE 選項設定值使用 %s)。 | RDS 事件 | 如果仍有 SSAS 資料庫使用目前模式，就無法變更 SSAS 模式。刪除 SSAS 資料庫，然後再試一次。 | 
| 無法移除 SSAS 選項，因為有數目個現有的模式資料庫。在刪除所有 SSAS 資料庫之前，無法移除 SSAS 選項。再次新增 SSAS 選項，刪除所有 SSAS 資料庫然後重試。 | RDS 事件 | 如果您仍有 SSAS 資料庫，就無法關閉 SSAS。刪除 SSAS 資料庫，然後再試一次。 | 
| SSAS 選項未啟用，或正在進行啟用作業。請稍後再試。 | RDS 預存程序 | 當選項處於關閉狀態或進行開啟作業時，無法執行 SSAS 預存程序。 | 
| SSAS 選項設定不正確。確認選項群組成員資格狀態為 "in-sync"，並檢閱 RDS 事件日誌中的相關 SSAS 組態錯誤訊息。進行這些調查之後，請再試一次。如果錯誤持續出現，請聯絡 AWS Support。 | RDS 預存程序 |  若選項群組成員資格不處於 `in-sync` 狀態，就無法執行 SSAS 預存程序。這會導致 SSAS 選項處於錯誤的組態狀態。 如果您的選項群組成員資格狀態由於 SSAS 選項修改而變更為 `failed`，可能有兩個原因： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/SSAS.Trouble.html) 重新設定 SSAS 選項，因為 RDS 一次只允許使用一種 SSAS 模式，且不支援在 SSAS 資料庫存在的情況下刪除 SSAS 選項。 檢查 RDS 事件日誌中的 SSAS 執行個體組態錯誤，並視情況解決些問題。  | 
| 部署失敗。變更只能部署在執行 deployment\$1file\$1mode 模式的伺服器上。目前的伺服器模式為 current\$1mode。 | RDS 預存程序 |  無法將表格模式的資料庫部署到多維度模式的伺服器，也不能將多維度模式資料庫部署到表格模式伺服器。 請確認您使用的是模式正確的檔案，然後驗證 `MODE` 選項設定設為適當的值。  | 
| 還原失敗。備份檔案只能在執行 restore\$1file\$1mode 模式的伺服器上還原。目前的伺服器模式為 current\$1mode。 | RDS 預存程序 |  無法將表格模式的資料庫還原到多維度模式的伺服器，也不能將多維度模式資料庫還原到表格模式伺服器。 請確認您使用的是模式正確的檔案，然後驗證 `MODE` 選項設定設為適當的值。  | 
| 還原失敗。備份檔案和 RDS 資料庫執行個體版本不相容。 | RDS 預存程序 |  無法還原與 SQL Server 執行個體版本不相容的 SSAS 資料庫版本。 如需詳細資訊，請參閱 Microsoft 說明文件中的[表格模式的相容性層級](https://docs.microsoft.com/en-us/analysis-services/tabular-models/compatibility-level-for-tabular-models-in-analysis-services)和[多維度資料庫的相容性層級](https://docs.microsoft.com/en-us/analysis-services/multidimensional-models/compatibility-level-of-a-multidimensional-database-analysis-services)。  | 
| 還原失敗。還原作業中指定的備份檔案已損毀或非 SSAS 備份檔案。確認 @rds\$1file\$1path 的格式正確。 | RDS 預存程序 |  無法還原具有損毀檔案的 SSAS 資料庫。 請確認檔案未損毀或損壞。 若 `@rds_file_path` 格式不正確 (例如含有雙反斜槓，如 `D:\S3\\incorrect_format.abf` 中所述)，也可能出現此錯誤。  | 
| 還原失敗。還原的資料庫名稱不能包含任何保留字詞或以下無效字元：. , ; ' ` : / \$1\$1 \$1 \$1 ? \$1" & % \$1 \$1 \$1 = ( ) [ ] \$1 \$1 < >>，長度也不能超過 100 個字元。 | RDS 預存程序 |  還原的資料庫名稱不能包含任何保留字詞，長度也不能超過 100 個字元。 如需 SSAS 物件命名慣例，請參閱　Microsoft 說明文件中的[物件命名規則](https://docs.microsoft.com/en-us/analysis-services/multidimensional-models/olap-physical/object-naming-rules-analysis-services)。  | 
| 提供的角色名稱無效。角色名稱不能包含任何保留的字串。 | RDS 預存程序 |  角色名稱不能包含任何保留的字串。 如需 SSAS 物件命名慣例，請參閱　Microsoft 說明文件中的[物件命名規則](https://docs.microsoft.com/en-us/analysis-services/multidimensional-models/olap-physical/object-naming-rules-analysis-services)。  | 
| 提供的角色名稱無效。角色名稱不能包含以下任何保留字元：. , ; ' ` : / \$1\$1 \$1 \$1 ? \$1" & % \$1 \$1 \$1 = ( ) [ ] \$1 \$1 < > | RDS 預存程序 |  角色名稱不能包含任何保留字元。 如需 SSAS 物件命名慣例，請參閱　Microsoft 說明文件中的[物件命名規則](https://docs.microsoft.com/en-us/analysis-services/multidimensional-models/olap-physical/object-naming-rules-analysis-services)。  | 

# 支援 Amazon RDS for SQL Server 中的 SQL Server Integration Services
<a name="Appendix.SQLServer.Options.SSIS"></a>

Microsoft SQL Server Integration Services (SSIS) 是您可以用來執行廣泛資料遷移任務的元件。SSIS 是資料整合和工作流程應用程式的平台。它具有用於資料擷取、轉換和加載 (ETL) 的資料倉儲工具。您也可以使用這個工具來自動維護 SQL Server 資料庫和更新多維度 Cube 資料。

SSIS 專案會組織成儲存為 XML .dtsx 檔案的套件。套件可以包含控制流量和資料流程。您可以使用資料流程來表示 ETL 操作。部署後，套件會儲存在 SSISDB 資料庫中的 SQL Server 中。SSISDB 是在完整復原模式下的線上交易處理 (OLTP) 資料庫。

Amazon RDS for SQL Server 會支援直接在 RDS 資料庫執行個體上執行 SSIS。您可以在現有或新的資料庫執行個體上啟用 SSIS。SSIS 會安裝在與資料庫引擎相同的資料庫執行個體上。

下列版本的 RDS 支援 SSIS for SQL Server Standard 和 Enterprise Edition：
+ SQL Server 2022，所有版本
+ SQL Server 2019，15.00.4043.16.v1 版和更新版本
+ SQL Server 2017，14.00.3223.3.v1 版和更新版本
+ SQL Server 2016，13.00.5426.0.v1 版和更新版本

**Contents**
+ [限制與建議](#SSIS.Limitations)
+ [啟用 SSIS](#SSIS.Enabling)
  + [建立 SSIS 的選項群組](#SSIS.OptionGroup)
  + [將 SSIS 選項新增至選項群組](#SSIS.Add)
  + [建立 SSIS 的參數群組](#SSIS.CreateParamGroup)
  + [修改 SSIS 的參數](#SSIS.ModifyParam)
  + [將選項群組和參數群組與資料庫執行個體建立關聯](#SSIS.Apply)
  + [啟用 S3 整合](#SSIS.EnableS3)
+ [SSISDB 上的管理許可](SSIS.Permissions.md)
  + [為 SSIS 設定 Windows 驗證的使用者](SSIS.Permissions.md#SSIS.Use.Auth)
+ [部署 SSIS 專案](SSIS.Deploy.md)
+ [監視部署任務的狀態](SSIS.Monitor.md)
+ [使用 SSIS](SSIS.Use.md)
  + [設定 SSIS 專案的資料庫連線管理員](SSIS.Use.md#SSIS.Use.ConnMgrs)
  + [建立 SSIS 代理](SSIS.Use.md#SSIS.Use.Proxy)
  + [使用 SQL Server 代理程式排程 SSIS 套件](SSIS.Use.md#SSIS.Use.Schedule)
  + [從代理撤銷 SSIS 存取權](SSIS.Use.md#SSIS.Use.Revoke)
+ [停用和捨棄 SSIS 資料庫](SSIS.DisableDrop.md)
  + [停用 SSIS](SSIS.DisableDrop.md#SSIS.Disable)
  + [卸除 SSISDB 資料庫](SSIS.DisableDrop.md#SSIS.Drop)

## 限制與建議
<a name="SSIS.Limitations"></a>

在 RDS for SQL Server 上執行 SSIS 時適用下列限制和建議：
+ 資料庫執行個體必須具有相關的參數群組，且將 `clr enabled` 參數設定為 1。如需詳細資訊，請參閱 [修改 SSIS 的參數](#SSIS.ModifyParam)。
**注意**  
如果您在 SQL Server 2017 或 2019 上啟用 `clr enabled` 參數，就無法在資料庫執行個體上使用通用語言執行階段 (CLR)。如需詳細資訊，請參閱[不支援的功能和具備有限支援的功能](SQLServer.Concepts.General.FeatureNonSupport.md)。
+ 支援下列控制流量任務：
  + 分析服務執行 DDL 任務
  + 分析服務處理任務
  + 大量插入任務
  + 檢查資料庫完整性任務
  + 資料流程任務
  + 資料挖掘查詢任務
  + 資料效能分析任務
  + 執行套件任務
  + 執行 SQL Server Agent 任務工作
  + 執行 SQL 任務
  + 執行 T-SQL 陳述式任務
  + 通知運算子任務
  + 重新建立索引任務
  + 重新組織索引任務
  + 壓縮資料庫任務
  + 傳輸資料庫任務
  + 傳送任務工作
  + 傳輸登入任務
  + 傳輸 SQL Server 物件任務
  + 更新統計資料任務
+ 僅支援專案部署。
+ 支援使用 SQL Server Agent 執行 SSIS 套件。
+ SSIS 日誌記錄只能插入使用者建立的資料庫中。
+ 僅使用 `D:\S3` 資料夾來處理檔案。放在任何其他目錄中的檔案都會被刪除。請注意其他一些檔案位置的詳細資料：
  + 將 SSIS 專案輸入和輸出檔案放在 `D:\S3` 資料夾。
  + 對於「資料流程任務」，變更 `BLOBTempStoragePath` 資料夾內 `BufferTempStoragePath` 和 `D:\S3` 檔案的位置。檔案路徑必須以 `D:\S3\` 為開頭。
  + 確定用於檔案連線的所有參數、變數和運算式都指向該 `D:\S3` 資料夾。
  + 在異地同步備份執行個體上，由 SSIS 在 `D:\S3` 資料夾中建立的檔案會在容錯移轉後刪除。如需更多詳細資訊，請參閱 [S3 整合的多可用區域限制](User.SQLServer.Options.S3-integration.md#S3-MAZ)。
  + 由 SSIS 在 `D:\S3` 資料夾中建立的檔案會上傳到您的 Amazon S3 儲存貯體，使其變得耐用。
+ 不支援「匯入欄」和「匯出欄」轉換，以及「資料流程任務」上的「指令碼」元件。
+ 您無法在執行中 SSIS 套件上啟用傾印，也無法在 SSIS 套件上新增資料點選。
+ 不支援 SSIS 向外擴展功能。
+ 您無法直接部署專案。我們提供 RDS 儲存過程來做到這一點。如需更多詳細資訊，請參閱 [部署 SSIS 專案](SSIS.Deploy.md)。
+ 使用 `DoNotSavePasswords` 保護模式來建立要在 RDS 上部署的 SSIS 專案 (.ispac) 檔案。
+ SSIS 不支援有讀取複本的 Always On 執行個體。
+ 您無法備份與 `SSIS` 選項相關聯的 SSISDB 資料庫。
+ 不支援從 SSIS 的其他執行個體匯入和還原 SSISDB 資料庫。
+ 您可以連線至其他 SQL Server 資料庫執行個體或 Oracle 資料來源。RDS for SQL Server 上的 SSIS 不支援連線到其他資料庫引擎，例如 MySQL 或 PostgreSQL。如需連線至 Oracle 資料來源的詳細資訊，請參閱 [連結的伺服器搭配 Oracle OLEDB](Appendix.SQLServer.Options.LinkedServers_Oracle_OLEDB.md)。
+ SSIS 不支援具有對內部部署網域傳出信任的加入網域執行個體。使用傳出信任時，請從本機 AWS 網域中的 帳戶執行 SSIS 任務。
+ 不支援執行檔案系統型套件。

## 啟用 SSIS
<a name="SSIS.Enabling"></a>

您可以透過將 SSIS 選項新增至資料庫執行個體來啟用 SSIS。請使用下列程序：

1. 建立新的選項群組或選擇現有的選項群組。

1. 將 `SSIS` 選項新增至選項群組。

1. 建立新參數群組，或選擇現有參數群組。

1. 修改參數群組，將 `clr enabled` 參數設定為 1。

1. 將選項群組和參數群組與資料庫執行個體建立關聯。

1. 啟用 Amazon S3 整合。

**注意**  
如果資料庫執行個體上已存在名稱為 SSISDB 或預留 SSIS 登入的資料庫，則無法在執行個體上啟用 SSIS。

### 建立 SSIS 的選項群組
<a name="SSIS.OptionGroup"></a>

若要使用 SSIS，請建立選項群組，或修改對應至 SQL Server 版本和您計劃使用的資料庫執行個體版本的選項群組。若要這樣做，請使用 AWS 管理主控台 或 AWS CLI。

#### 主控台
<a name="SSIS.OptionGroup.Console"></a>

下列程序會建立 SQL Server Standard Edition 2016 的選項群組。

**建立選項群組**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 選擇**建立群組**。

1. 在 **Create option group (建立選項群組)** 視窗中，執行下列動作：

   1. 針對**名稱**，輸入您 AWS 帳戶中唯一的選項群組名稱，例如 **ssis-se-2016**。名稱僅可包含字母、數字與連字號。

   1. 對於 **Description (描述)**，請輸入選項群組的簡短描述，例如 **SSIS option group for SQL Server SE 2016**。用於顯示用途的說明。

   1. 對於 **Engine (引擎)**，請選擇 **sqlserver-se**。

   1. 對於 **Major engine version (主要引擎版本)**，請選擇 **13.00**。

1. 選擇**建立**。

#### CLI
<a name="SSIS.OptionGroup.CLI"></a>

下列程序會建立 SQL Server Standard Edition 2016 的選項群組。

**建立選項群組**
+ 請執行下列其中一個命令：  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds create-option-group \
      --option-group-name ssis-se-2016 \
      --engine-name sqlserver-se \
      --major-engine-version 13.00 \
      --option-group-description "SSIS option group for SQL Server SE 2016"
  ```

  在 Windows 中：

  ```
  aws rds create-option-group ^
      --option-group-name ssis-se-2016 ^
      --engine-name sqlserver-se ^
      --major-engine-version 13.00 ^
      --option-group-description "SSIS option group for SQL Server SE 2016"
  ```

### 將 SSIS 選項新增至選項群組
<a name="SSIS.Add"></a>

接著，使用 AWS 管理主控台 或 AWS CLI 將 `SSIS` 選項新增至您的選項群組。

#### 主控台
<a name="SSIS.Add.Console"></a>

**新增 SSIS 選項**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 選擇您剛剛建立的選項群組，在這個例子中為 **ssis-se-2016**。

1. 選擇 **Add option (新增選項)**。

1. 在 **Option details (選項詳細資料)** 下，選擇 **SSIS** 做為 **Option name (選項名稱)**。

1. 在 **Scheduling (排程)** 下，選擇要立即新增選項或是在下一個維護時段新增選項。

1. 選擇 **Add option (新增選項)**。

#### CLI
<a name="SSIS.Add.CLI"></a>

**新增 SSIS 選項**
+ 將 `SSIS` 選項新增至選項群組。  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds add-option-to-option-group \
      --option-group-name ssis-se-2016 \
      --options OptionName=SSIS \
      --apply-immediately
  ```

  在 Windows 中：

  ```
  aws rds add-option-to-option-group ^
      --option-group-name ssis-se-2016 ^
      --options OptionName=SSIS ^
      --apply-immediately
  ```

### 建立 SSIS 的參數群組
<a name="SSIS.CreateParamGroup"></a>

為對應到 SQL Server 版本和您計畫用於 SSIS 的資料庫執行個體版本的 `clr enabled` 參數來建立或修改參數群組。

#### 主控台
<a name="SSIS.CreateParamGroup.Console"></a>

下列範例會建立 SQL Server Standard Edition 2016 的參數群組。

**建立參數群組**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Parameter groups** (參數群組)。

1. 選擇 **Create parameter group (建立參數群組)**。

1. 在 **Create parameter group (建立參數群組)** 窗格中執行下列動作：

   1. 對於 **Parameter group family (參數群組家族)**，請選擇 **sqlserver-se-13.0**。

   1. 對於 **Group name (群組名稱)**，輸入參數群組的識別碼，例如 **ssis-sqlserver-se-13**。

   1. 對於 **Description (說明)**，輸入 **clr enabled parameter group**。

1. 選擇**建立**。

#### CLI
<a name="SSIS.CreateParamGroup.CLI"></a>

下列範例會建立 SQL Server Standard Edition 2016 的參數群組。

**建立參數群組**
+ 請執行下列其中一個命令：  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds create-db-parameter-group \
      --db-parameter-group-name ssis-sqlserver-se-13 \
      --db-parameter-group-family "sqlserver-se-13.0" \
      --description "clr enabled parameter group"
  ```

  在 Windows 中：

  ```
  aws rds create-db-parameter-group ^
      --db-parameter-group-name ssis-sqlserver-se-13 ^
      --db-parameter-group-family "sqlserver-se-13.0" ^
      --description "clr enabled parameter group"
  ```

### 修改 SSIS 的參數
<a name="SSIS.ModifyParam"></a>

修改參數群組中對應至 SQL Server 版本和資料庫執行個體版本的 `clr enabled` 參數。若為 SSIS，請將 `clr enabled` 參數設定為 1。

#### 主控台
<a name="SSIS.ModifyParam.Console"></a>

下列範例會修改您為 SQL Server Standard Edition 2016 建立的參數群組。

**修改參數群組**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Parameter groups** (參數群組)。

1. 選擇參數群組，例如 **ssis-sqlserver-se-13**。

1. 在 **Parameters** (參數) 下，篩選 **clr** 的參數清單。

1. 選擇 **clr enabled (clr 已啟用)**。

1. 選擇 **Edit parameters** (編輯參數)。

1. 從 **Values (值)** 中選擇 **1**。

1. 選擇**儲存變更**。

#### CLI
<a name="SSIS.ModifyParam.CLI"></a>

下列範例會修改您為 SQL Server Standard Edition 2016 建立的參數群組。

**修改參數群組**
+ 請執行下列其中一個命令：  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds modify-db-parameter-group \
      --db-parameter-group-name ssis-sqlserver-se-13 \
      --parameters "ParameterName='clr enabled',ParameterValue=1,ApplyMethod=immediate"
  ```

  在 Windows 中：

  ```
  aws rds modify-db-parameter-group ^
      --db-parameter-group-name ssis-sqlserver-se-13 ^
      --parameters "ParameterName='clr enabled',ParameterValue=1,ApplyMethod=immediate"
  ```

### 將選項群組和參數群組與資料庫執行個體建立關聯
<a name="SSIS.Apply"></a>

若要將 SSIS 選項群組和參數群組與您的資料庫執行個體建立關聯，請使用 AWS 管理主控台 或 AWS CLI 

**注意**  
如果您使用現有的執行個體，它必須已有與其相關聯的 Active Directory 網域和 AWS Identity and Access Management (IAM) 角色。如果您建立新執行個體，請指定現有的 Active Directory 網域和 IAM 角色。如需詳細資訊，請參閱[使用 Active Directory 搭配 RDS for SQL Server](User.SQLServer.ActiveDirectoryWindowsAuth.md)。

#### 主控台
<a name="SSIS.Apply.Console"></a>

若要完成啟用 SSIS，請將 SSIS 選項群組和參數群組與新的或現有的資料庫執行個體建立關聯：
+ 對於新的資料庫執行個體，請在啟動執行個體時將它們相關聯。如需更多詳細資訊，請參閱 [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。
+ 對於現有的資料庫執行個體，請透過修改執行個體來建立關聯。如需詳細資訊，請參閱[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

#### CLI
<a name="SSIS.Apply.CLI"></a>

您可以將 SSIS 選項群組和參數群組與新的或現有的資料庫執行個體產生關聯。

**使用 SSIS 選項群組和參數群組建立執行個體**
+ 指定建立選項群組時所使用的相同資料庫引擎類型和主要版本。  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds create-db-instance \
      --db-instance-identifier myssisinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-se \
      --engine-version 13.00.5426.0.v1 \
      --allocated-storage 100 \
      --manage-master-user-password \
      --master-username admin \
      --storage-type gp2 \
      --license-model li \
      --domain-iam-role-name my-directory-iam-role \
      --domain my-domain-id \
      --option-group-name ssis-se-2016 \
      --db-parameter-group-name ssis-sqlserver-se-13
  ```

  在 Windows 中：

  ```
  aws rds create-db-instance ^
      --db-instance-identifier myssisinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-se ^
      --engine-version 13.00.5426.0.v1 ^
      --allocated-storage 100 ^
      --manage-master-user-password ^
      --master-username admin ^
      --storage-type gp2 ^
      --license-model li ^
      --domain-iam-role-name my-directory-iam-role ^
      --domain my-domain-id ^
      --option-group-name ssis-se-2016 ^
      --db-parameter-group-name ssis-sqlserver-se-13
  ```

**修改執行個體並建立 SSIS 選項群組和參數群組的關聯**
+ 請執行下列其中一個命令：  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds modify-db-instance \
      --db-instance-identifier myssisinstance \
      --option-group-name ssis-se-2016 \
      --db-parameter-group-name ssis-sqlserver-se-13 \
      --apply-immediately
  ```

  在 Windows 中：

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier myssisinstance ^
      --option-group-name ssis-se-2016 ^
      --db-parameter-group-name ssis-sqlserver-se-13 ^
      --apply-immediately
  ```

### 啟用 S3 整合
<a name="SSIS.EnableS3"></a>

若要將 SSIS 專案 (.ispac) 檔案下載到主機以進行部署，請使用 S3 檔案整合。如需詳細資訊，請參閱[整合 Amazon RDS for SQL Server 資料庫執行個體和 Amazon S3](User.SQLServer.Options.S3-integration.md)。

# SSISDB 上的管理許可
<a name="SSIS.Permissions"></a>

使用 SSIS 選項建立或修改執行個體時，結果會是 SSISDB 資料庫，其中包含 ssis\$1admin 和 ssis\$1logreader 角色授予主要使用者。主要使用者在 SSISDB 中具有下列權限：
+ alter on ssis\$1admin role
+ alter on ssis\$1logreader role
+ 變更任何使用者

因為主要使用者是 SQL 驗證的使用者，所以您無法使用主要使用者來執行 SSIS 套件。主要使用者可以使用這些權限來建立新的 SSISDB 使用者，並將它們新增至 ssis\$1admin 和 ssis\$1logreader 角色。這樣做對於授予網域使用者使用 SSIS 的存取權非常有用。

## 為 SSIS 設定 Windows 驗證的使用者
<a name="SSIS.Use.Auth"></a>

主要使用者可以使用下列程式碼範例，在 SSISDB 中設定 Windows 驗證的登入，並授予必要的程序許可。這樣做會授予網域使用者部署和執行 SSIS 套件、使用 S3 檔案傳輸程序、建立登入資料，以及搭配 SQL Server Agent 代理使用的許可。如需詳細資訊，請參閱[登入資料 (資料庫引擎)](https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/credentials-database-engine?view=sql-server-ver15) 和 Microsoft 文件中的[建立 SQL Server 代理程式 Proxy](https://docs.microsoft.com/en-us/sql/ssms/agent/create-a-sql-server-agent-proxy?view=sql-server-ver15)。

**注意**  
您可以視需要授予部分或全部下列許可給 Windows 驗證的使用者。

**Example**  

```
-- Create a server-level SQL login for the domain user, if it doesn't already exist
USE [master]
GO
CREATE LOGIN [mydomain\user_name] FROM WINDOWS
GO						
						
-- Create a database-level account for the domain user, if it doesn't already exist						
USE [SSISDB]
GO
CREATE USER [mydomain\user_name] FOR LOGIN [mydomain\user_name]

-- Add SSIS role membership to the domain user
ALTER ROLE [ssis_admin] ADD MEMBER [mydomain\user_name]
ALTER ROLE [ssis_logreader] ADD MEMBER [mydomain\user_name]
GO

-- Add MSDB role membership to the domain user
USE [msdb]
GO
CREATE USER [mydomain\user_name] FOR LOGIN [mydomain\user_name]

-- Grant MSDB stored procedure privileges to the domain user
GRANT EXEC ON msdb.dbo.rds_msbi_task TO [mydomain\user_name] with grant option
GRANT SELECT ON msdb.dbo.rds_fn_task_status TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_task_status TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_cancel_task TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_download_from_s3 TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_upload_to_s3 TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_delete_from_filesystem TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_gather_file_details TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_add_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_update_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_grant_login_to_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_revoke_login_from_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_delete_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_enum_login_for_proxy to [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_enum_proxy_for_subsystem TO [mydomain\user_name]  with grant option
GRANT EXEC ON msdb.dbo.rds_sqlagent_proxy TO [mydomain\user_name] WITH GRANT OPTION


-- Add the SQLAgentUserRole privilege to the domain user
USE [msdb]
GO
ALTER ROLE [SQLAgentUserRole] ADD MEMBER [mydomain\user_name]
GO

-- Grant the ALTER ANY CREDENTIAL privilege to the domain user
USE [master]
GO
GRANT ALTER ANY CREDENTIAL TO [mydomain\user_name]
GO
```

# 部署 SSIS 專案
<a name="SSIS.Deploy"></a>

在 RDS 上，您無法使用 SQL Server Management Studio (SSMS) 或 SSIS 程序直接部署 SSIS 專案。若要從 Amazon S3 中下載專案檔案，然後進行部署，請使用 RDS 儲存的程序。

若要執行預存程序，請以您授予預存程序執行許可的任何其他使用者身分登入。如需更多詳細資訊，請參閱 [為 SSIS 設定 Windows 驗證的使用者](SSIS.Permissions.md#SSIS.Use.Auth)。

**部署 SSIS 專案**

1. 下載專案 (.ispac) 檔案。

   ```
   exec msdb.dbo.rds_download_from_s3
   @s3_arn_of_file='arn:aws:s3:::bucket_name/ssisproject.ispac',
   @rds_file_path='D:\S3\ssisproject.ispac',
   @overwrite_file=1;
   ```

1. 提交部署任務，確定下列項目：
   + 該資料夾存在於 SSIS 目錄中。
   + 專案名稱與您在開發 SSIS 專案時使用的專案名稱相符。

   ```
   exec msdb.dbo.rds_msbi_task
   @task_type='SSIS_DEPLOY_PROJECT',
   @folder_name='DEMO',
   @project_name='ssisproject',
   @file_path='D:\S3\ssisproject.ispac';
   ```

# 監視部署任務的狀態
<a name="SSIS.Monitor"></a>

若要追蹤部署 (或下載) 任務的狀態，請呼叫 `rds_fn_task_status` 函數。需要兩個參數。第一個參數不適用於 SSIS，所以應該一律為 `NULL`。第二個參數接受任務 ID。

若要查看所有任務的清單，請將第一個參數設為 `NULL`，將第二個參數設為 `0`，如下列範例所示。

```
SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,0);
```

若要取得特定的任務，請將第一個參數設為 `NULL`，將第二個參數設為任務 ID，如下列範例所示。

```
SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,42);
```

`rds_fn_task_status` 函數會傳回下列資訊。


| 輸出參數 | 描述 | 
| --- | --- | 
| `task_id` | 任務的 ID。 | 
| `task_type` | `SSIS_DEPLOY_PROJECT` | 
| `database_name` | 不適用於 SSIS 任務。 | 
| `% complete` | 任務的進度 (以百分比表示)。 | 
| `duration (mins)` | 任務所花的時間 (以分鐘為單位)。 | 
| `lifecycle` |  任務的狀態。可能的狀態如下： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/SSIS.Monitor.html)  | 
| `task_info` | 任務的其他資訊。如果處理期間發生錯誤，此欄包含該錯誤的相關資訊。 | 
| `last_updated` | 上次更新任務狀態的日期和時間。 | 
| `created_at` | 建立任務的日期和時間。 | 
| `S3_object_arn` |  不適用於 SSIS 任務。  | 
| `overwrite_S3_backup_file` | 不適用於 SSIS 任務。 | 
| `KMS_master_key_arn` |  不適用於 SSIS 任務。  | 
| `filepath` |  不適用於 SSIS 任務。  | 
| `overwrite_file` |  不適用於 SSIS 任務。  | 
| `task_metadata` | 與 SSIS 任務相關聯的中繼資料。 | 

# 使用 SSIS
<a name="SSIS.Use"></a>

將 SSIS 專案部署到 SSIS 目錄之後，您可以直接從 SSMS 執行套件，或使用 SQL Server 代理程式來加以排程。您必須使用 Windows 驗證的登入來執行 SSIS 套件。如需更多詳細資訊，請參閱 [為 SSIS 設定 Windows 驗證的使用者](SSIS.Permissions.md#SSIS.Use.Auth)。

**Topics**
+ [設定 SSIS 專案的資料庫連線管理員](#SSIS.Use.ConnMgrs)
+ [建立 SSIS 代理](#SSIS.Use.Proxy)
+ [使用 SQL Server 代理程式排程 SSIS 套件](#SSIS.Use.Schedule)
+ [從代理撤銷 SSIS 存取權](#SSIS.Use.Revoke)

## 設定 SSIS 專案的資料庫連線管理員
<a name="SSIS.Use.ConnMgrs"></a>

當您使用連線管理員時，您可以使用下列類型的驗證：
+ 對於使用 AWS 受管 Active Directory 的本機資料庫連線，您可以使用 SQL 驗證或 Windows 驗證。對於 Windows 驗證，請用 `DB_instance_name.fully_qualified_domain_name` 作連線字串的伺服器名稱。

  例如 `myssisinstance.corp-ad.example.com`，其中 `myssisinstance` 是資料庫執行個體名稱，而且 `corp-ad.example.com` 是完整網域名稱。
+ 對於遠端連線，請一律使用 SQL 驗證。
+ 對於使用自我管理 Active Directory 的本機資料庫連線，您可以使用 SQL 驗證或 Windows 驗證。對於 Windows 驗證，請使用 `.` 或 `LocalHost` 作為連線字串的伺服器名稱。

## 建立 SSIS 代理
<a name="SSIS.Use.Proxy"></a>

若要能夠使用 SQL Server 代理程式排程 SSIS 套件，請建立 SSIS 登入資料和 SSIS 代理。以 Windows 驗證的使用者身分執行這些程序。

**建立 SSIS 登入資料**
+ 建立代理的登入資料。若要執行這項操作，您可以使用 SSMS 或下列 SQL 陳述式。

  ```
  USE [master]
  GO
  CREATE CREDENTIAL [SSIS_Credential] WITH IDENTITY = N'mydomain\user_name', SECRET = N'mysecret'
  GO
  ```
**注意**  
`IDENTITY` 必須是網域驗證的登入。以網域驗證登入的密碼取代 `mysecret`。  
每當 SSISDB 主要主機變更時，更改 SSIS 代理登入資料，以允許新的主機來存取它們。

**建立 SSIS 代理**

1. 使用下面的 SQL 陳述式來建立代理。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_add_proxy @proxy_name=N'SSIS_Proxy',@credential_name=N'SSIS_Credential',@description=N''
   GO
   ```

1. 使用下列 SQL 陳述式可將代理伺服器的存取權授予其他使用者。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_grant_login_to_proxy @proxy_name=N'SSIS_Proxy',@login_name=N'mydomain\user_name'
   GO
   ```

1. 使用下列 SQL 陳述式來提供 SSIS 子系統存取代理。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.rds_sqlagent_proxy @task_type='GRANT_SUBSYSTEM_ACCESS',@proxy_name='SSIS_Proxy',@proxy_subsystem='SSIS'
   GO
   ```

**在代理上檢視代理和授權**

1. 使用下列 SQL 陳述式來檢視代理的承授者。

   ```
   USE [msdb]
   GO
   EXEC sp_help_proxy
   GO
   ```

1. 使用下列 SQL 陳述式來檢視子系統授予。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_enum_proxy_for_subsystem
   GO
   ```

## 使用 SQL Server 代理程式排程 SSIS 套件
<a name="SSIS.Use.Schedule"></a>

建立登入資料和代理，並授予 SSIS 存取權至代理之後，您可以建立 SQL Server Agent 任務來排程 SSIS 套件。

**排程 SSIS 套件**
+ 您可以使用 SSMS 或 T-SQL 來建立 SQL Server Agent 任務。下列範例使用 T-SQL。

  ```
  USE [msdb]
  GO
  DECLARE @jobId BINARY(16)
  EXEC msdb.dbo.sp_add_job @job_name=N'MYSSISJob',
  @enabled=1,
  @notify_level_eventlog=0,
  @notify_level_email=2,
  @notify_level_page=2,
  @delete_level=0,
  @category_name=N'[Uncategorized (Local)]',
  @job_id = @jobId OUTPUT
  GO
  EXEC msdb.dbo.sp_add_jobserver @job_name=N'MYSSISJob',@server_name=N'(local)'
  GO
  EXEC msdb.dbo.sp_add_jobstep @job_name=N'MYSSISJob',@step_name=N'ExecuteSSISPackage',
  @step_id=1,
  @cmdexec_success_code=0,
  @on_success_action=1,
  @on_fail_action=2,
  @retry_attempts=0,
  @retry_interval=0,
  @os_run_priority=0,
  @subsystem=N'SSIS',
  @command=N'/ISSERVER "\"\SSISDB\MySSISFolder\MySSISProject\MySSISPackage.dtsx\"" /SERVER "\"my-rds-ssis-instance.corp-ad.company.com/\"" 
  /Par "\"$ServerOption::LOGGING_LEVEL(Int16)\"";1 /Par "\"$ServerOption::SYNCHRONIZED(Boolean)\"";True /CALLERINFO SQLAGENT /REPORTING E',
  @database_name=N'master',
  @flags=0,
  @proxy_name=N'SSIS_Proxy'
  GO
  ```

## 從代理撤銷 SSIS 存取權
<a name="SSIS.Use.Revoke"></a>

您可以撤銷 SSIS 子系統的存取權，並使用下列儲存的程序刪除 SSIS 代理。

**撤銷存取權並刪除代理伺服器**

1. 撤銷子系統存取權。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.rds_sqlagent_proxy @task_type='REVOKE_SUBSYSTEM_ACCESS',@proxy_name='SSIS_Proxy',@proxy_subsystem='SSIS'
   GO
   ```

1. 撤銷代理上的授權。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_revoke_login_from_proxy @proxy_name=N'SSIS_Proxy',@name=N'mydomain\user_name'
   GO
   ```

1. 刪除代理。

   ```
   USE [msdb]
   GO
   EXEC dbo.sp_delete_proxy @proxy_name = N'SSIS_Proxy'
   GO
   ```

# 停用和捨棄 SSIS 資料庫
<a name="SSIS.DisableDrop"></a>

使用下列步驟將 SSIS 資料庫停用或捨棄：

**Topics**
+ [停用 SSIS](#SSIS.Disable)
+ [卸除 SSISDB 資料庫](#SSIS.Drop)

## 停用 SSIS
<a name="SSIS.Disable"></a>

若要停用 SSIS，請將 `SSIS` 選項從其選項群組中移除。

**重要**  
移除選項並不會刪除 SSISDB 資料庫，因此您可以安全地移除選項，而不會遺失 SSIS 專案。  
您可以在移除之後重新啟用此 `SSIS` 選項，以重複使用先前部署至 SSIS 目錄的 SSIS 專案。

### 主控台
<a name="SSIS.Disable.Console"></a>

下列程序會移除 `SSIS` 選項。

**從選項群組中移除 SSIS 選項**

1. 登入 AWS 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 選擇具有 `SSIS` 選項的選項群組 (上述範例中的 `ssis-se-2016`)。

1. 選擇 **Delete option (刪除選項)**。

1. 在 **Deletion options (刪除選項)** 下，為 **Options to delete (要刪除的選項)** 選擇 **SSIS**。

1. 在 **Apply immediately (立即套用)** 下，選擇 **Yes (是)** 立即刪除選項，或選擇 **No (否)** 在下一個維護時段將其刪除。

1. 選擇 **刪除**。

### CLI
<a name="SSIS.Disable.CLI"></a>

下列程序會移除 `SSIS` 選項。

**從選項群組中移除 SSIS 選項**
+ 請執行下列其中一個命令：  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds remove-option-from-option-group \
      --option-group-name ssis-se-2016 \
      --options SSIS \
      --apply-immediately
  ```

  針對 Windows：

  ```
  aws rds remove-option-from-option-group ^
      --option-group-name ssis-se-2016 ^
      --options SSIS ^
      --apply-immediately
  ```

## 卸除 SSISDB 資料庫
<a name="SSIS.Drop"></a>

移除 SSIS 選項之後，系統不會刪除 SSISDB 資料庫。若要卸除 SSISDB 資料庫，請在移除 SSIS 選項之後使用 `rds_drop_ssis_database` 儲存的程序。

**卸除 SSIS 資料庫**
+ 請使用下列預存程序。

  ```
  USE [msdb]
  GO
  EXEC dbo.rds_drop_ssis_database
  GO
  ```

卸除 SSISDB 資料庫後，如果您重新啟用 SSIS 選項，您會得到一個新的 SSISDB 目錄。

# Amazon RDS for SQL Server 中的 SQL Server Reporting Services 支援
<a name="Appendix.SQLServer.Options.SSRS"></a>

Server Reporting Services (SSRS) 是以伺服器為基礎的應用程式，用於產生和分發報告。它是 SQL Server 服務套件的一部分，該套件也包含 SQL Server Analysis Services (SSAS) 和 SQL Server Integration Services (SSIS)。SSRS 是以 SQL Server 為基礎而建立的服務。您可以使用它來收集來自各種資料來源的資料，並以易於理解且準備好進行分析的方式呈現。

Amazon RDS for SQL Server 支援直接在 RDS 資料庫執行個體上執行 SSRS。您可以在現有或新的資料庫執行個體上使用 SSRS。

下列版本的 RDS 支援 SSRS for SQL Server Standard 和 Enterprise Edition：
+ SQL Server 2022，所有版本
+ SQL Server 2019，15.00.4043.16.v1 版和更新版本
+ SQL Server 2017，14.00.3223.3.v1 版和更新版本
+ SQL Server 2016，13.00.5820.21.v1 版和更新版本

**Contents**
+ [限制與建議](#SSRS.Limitations)
+ [開啟 SSRS](SSRS.Enabling.md)
  + [為 SSRS 建立選項群組](SSRS.Enabling.md#SSRS.OptionGroup)
  + [將 SSRS 選項新增到您的選項群組](SSRS.Enabling.md#SSRS.Add)
  + [將選項群組與資料庫執行個體建立關聯](SSRS.Enabling.md#SSRS.Apply)
  + [允許對 VPC 安全群組進行傳入存取](SSRS.Enabling.md#SSRS.Inbound)
+ [報告伺服器資料庫](#SSRS.DBs)
+ [SSRS 日誌檔案](#SSRS.Logs)
+ [存取 SSR Web 入口網站](SSRS.Access.md)
  + [在 RDS 上使用 SSL](SSRS.Access.md#SSRS.Access.SSL)
  + [授予網域使用者的存取權](SSRS.Access.md#SSRS.Access.Grant)
  + [存取 Web 入口網站](SSRS.Access.md#SSRS.Access)
+ [部署報告和設定報告資料來源](SSRS.DeployConfig.md)
  + [將報告部署到 SSRS](SSRS.DeployConfig.md#SSRS.Deploy)
  + [設定報告資料來源](SSRS.DeployConfig.md#SSRS.ConfigureDataSource)
+ [使用 SSRS 電子郵件傳送報告](SSRS.Email.md)
+ [撤銷系統層級許可](SSRS.Access.Revoke.md)
+ [監控任務的狀態](SSRS.Monitor.md)
+ [停用和刪除 SSRS 資料庫](SSRS.DisableDelete.md)
  + [關閉 SSRS](SSRS.DisableDelete.md#SSRS.Disable)
  + [刪除 SSRS 資料庫](SSRS.DisableDelete.md#SSRS.Drop)

## 限制與建議
<a name="SSRS.Limitations"></a>

在 RDS for SQL Server 上執行 SSRS 時適用下列限制和建議：
+ 您不能在具有僅供讀取複本的資料庫執行個體上使用 SSRS。
+ 執行個體必須使用自我管理的 Active Directory 或 AWS Directory Service for Microsoft Active Directory for SSRS Web 入口網站和 Web 伺服器身分驗證。如需更多詳細資訊，請參閱 [使用 Active Directory 搭配 RDS for SQL Server](User.SQLServer.ActiveDirectoryWindowsAuth.md)。
+ 您無法備份使用 SSRS 選項建立的報告伺服器資料庫。
+ 不支援從 SSRS 的其他執行個體匯入和還原報告伺服器資料庫。如需更多詳細資訊，請參閱 [報告伺服器資料庫](#SSRS.DBs)。
+ 您無法將 SSRS 設定為在預設 SSL 連接埠 (443) 上接聽。允許的數值是 1150–49511，但不包括 1234、1434、3260、3343、3389 和 47001。
+ 不支援透過 Microsoft Windows 檔案共用的訂閱。
+ 不支援使用 Reporting Services Configuration Manager。
+ 不支援建立和修改角色。
+ 不支援修改報表告服器屬性。
+ 不授予系統管理員和系統使用者角色。
+ 您無法透過 Web 入口網站編輯系統層級的角色指派。

# 開啟 SSRS
<a name="SSRS.Enabling"></a>

使用下列程序為資料庫執行個體開啟 SSRS：

1. 建立新的選項群組或選擇現有的選項群組。

1. 將 `SSRS` 選項新增至選項群組。

1. 將選項群組與資料庫執行個體建立關聯。

1. 對 SSRS 接聽程式連接埠允許 Virtual Private Cloud (VPC) 安全群組的傳入存取。

## 為 SSRS 建立選項群組
<a name="SSRS.OptionGroup"></a>

若要使用 SSRS，請建立對應至您打算使用之 SQL Server 引擎和資料庫執行個體版本的選項群組。若要這樣做，請使用 AWS 管理主控台 或 AWS CLI。

**注意**  
如果現有的選項群組適用於正確的 SQL Server 引擎和版本，則也可以使用。

### 主控台
<a name="SSRS.OptionGroup.Console"></a>

下列程序會建立 SQL Server Standard Edition 2017 的選項群組。

**建立選項群組**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 選擇**建立群組**。

1. 在 **Create option group (建立選項群組)** 窗格中，執行下列動作：

   1. 針對**名稱**，輸入在您的 中唯一之選項群組的名稱 AWS 帳戶，例如 **ssrs-se-2017**。名稱僅可包含字母、數字與連字號。

   1. 對於 **Description (描述)**，請輸入選項群組的簡短描述，例如 **SSRS option group for SQL Server SE 2017**。用於顯示用途的說明。

   1. 對於 **Engine (引擎)**，請選擇 **sqlserver-se**。

   1. 對於 **Major engine version (主要引擎版本)**，請選擇 **14.00**。

1. 選擇**建立**。

### CLI
<a name="SSRS.OptionGroup.CLI"></a>

下列程序會建立 SQL Server Standard Edition 2017 的選項群組。

**建立選項群組**
+ 請執行下列其中一個命令：

**Example**  
針對 Linux、macOS 或 Unix：  

```
aws rds create-option-group \
    --option-group-name ssrs-se-2017 \
    --engine-name sqlserver-se \
    --major-engine-version 14.00 \
    --option-group-description "SSRS option group for SQL Server SE 2017"
```
在 Windows 中：  

```
aws rds create-option-group ^
    --option-group-name ssrs-se-2017 ^
    --engine-name sqlserver-se ^
    --major-engine-version 14.00 ^
    --option-group-description "SSRS option group for SQL Server SE 2017"
```

## 將 SSRS 選項新增到您的選項群組
<a name="SSRS.Add"></a>

接著，使用 AWS 管理主控台 或 AWS CLI 將 `SSRS` 選項新增至您的選項群組。

### 主控台
<a name="SSRS.Add.CON"></a>

**新增 SSRS 選項**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 選擇您剛才建立的選項群組，然後選擇 **Add option** (新增選項)。

1. 在 **Option details (選項詳細資訊)** 下，選擇 **SSRS** 做為 **Option name (選項名稱)**。

1. 在 **Option settings (選項設定)** 下，執行下列動作：

   1. 輸入 SSRS 服務要接聽的連接埠。預設值為 8443。如需允許值的清單，請參閱[限制與建議](Appendix.SQLServer.Options.SSRS.md#SSRS.Limitations)。

   1. 輸入 **Max memory (最大記憶體)** 的數值。

      **Max memory (最大記憶體)** 指定沒有新的記憶體配置請求會授予報告伺服器應用程式的閾值上限。這個數字是資料庫執行個體總記憶體的百分比。允許的數值為 10–80：

   1. 針對 **Security groups (安全群組)**，選擇要與選項產生關聯的 VPC 安全群組。使用與資料庫執行個體相關聯的相同安全群組。

1. 若要使用 SSRS 電子郵件傳送報告，請選擇 **Configure email delivery options** (報告服務中的電子郵件傳送) 中的 **Email delivery in reporting services** (設定電子郵件傳送選項) 核取方塊，然後執行下列動作：

   1. 對於 **Sender email address** (寄件人電子郵件地址)，使用 **From** (從) SSRS 電子郵件傳送的郵件部分，輸入您要使用的電子郵件位址。

      指定具有從 SMTP 伺服器傳送郵件之權限的使用者帳戶。

   1. 對於 **SMTP server** (SMTP 伺服器)，指定要使用的 SMTP 伺服器或閘道。

      它可以是 IP 地址、公司內部網路上電腦的 NetBIOS 名稱，或是完整合格的網域名稱。

   1. 對於 **SMTP port** (SMTP 連接埠)，輸入用來連線至郵件伺服器的連接埠。預設為 25。

   1. 若要使用身分驗證：

      1. 請選取 **Use authentication** (使用身分驗證) 核取方塊。

      1. 針對**機密 Amazon Resource Name (ARN)**，輸入使用者登入資料的 AWS Secrets Manager ARN。

         使用下列格式：

         **arn:aws:secretsmanager:*Region*:*AccountId*:secret:*SecretName*-*6RandomCharacters***

         例如：

         **arn:aws:secretsmanager:*us-west-2*:*123456789012*:secret:*MySecret-a1b2c3***

         如需建立祕密的詳細資訊，請參閱 [使用 SSRS 電子郵件傳送報告](SSRS.Email.md)。

   1. 選取 **Use Secure Sockets Layer (SSL)** (使用 Secure Sockets Layer (SSL)) 核取方塊，以使用 SSL 加密電子郵件訊息。

1. 在 **Scheduling (排程)** 下，選擇要立即新增選項或是在下一個維護時段新增選項。

1. 選擇 **Add option (新增選項)**。

### CLI
<a name="SSRS.Add.CLI"></a>

**新增 SSRS 選項**

1. 建立 JSON 檔案，例如 `ssrs-option.json`。

   1. 設定下列必要參數：
      + `OptionGroupName` – 您先前建立或選擇的選項群組名稱 (在下列範例中是 `ssrs-se-2017`)。
      + `Port` – SSRS 服務要接聽的連接埠。預設值為 8443。如需允許值的清單，請參閱[限制與建議](Appendix.SQLServer.Options.SSRS.md#SSRS.Limitations)。
      + `VpcSecurityGroupMemberships` – RDS 資料庫執行個體的 VPC 安全群組成員資格。
      + `MAX_MEMORY` – 沒有新的記憶體配置請求會授予報告伺服器應用程式的閾值上限。這個數字是資料庫執行個體總記憶體的百分比。允許的數值為 10–80：

   1. (選用) 設定使用 SSRS 電子郵件的下列參數：
      + `SMTP_ENABLE_EMAIL` - 將 `true` 設為使用 SSRS 電子郵件。預設值為 `false`。
      + `SMTP_SENDER_EMAIL_ADDRESS` - SSRS 電子郵件發送訊息時，**From** (從) 欄位使用的電子郵件地址。指定具有從 SMTP 伺服器傳送郵件之權限的使用者帳戶。
      + `SMTP_SERVER` - 使用的 SMTP 伺服器或閘道。可以是 IP 地址、公司內部網路上電腦的 NetBIOS 名稱，或是完整合格的網域名稱。
      + `SMTP_PORT` - 用來連線至郵件伺服器的連接埠。預設為 25。
      + `SMTP_USE_SSL` - 將 `true` 設為使用 SSL 加密電子郵件。預設值為 `true`。
      + `SMTP_EMAIL_CREDENTIALS_SECRET_ARN` - 保存使用者憑證的 Secrets Manager ARN。使用下列格式：

        **arn:aws:secretsmanager:*Region*:*AccountId*:secret:*SecretName*-*6RandomCharacters***

        如需建立秘密的詳細資訊，請參閱 [使用 SSRS 電子郵件傳送報告](SSRS.Email.md)。
      + `SMTP_USE_ANONYMOUS_AUTHENTICATION` - 如果您不想使用身分驗證，請設定為 `true` 並且不包括 `SMTP_EMAIL_CREDENTIALS_SECRET_ARN`。

        預設為 `false` 當 `SMTP_ENABLE_EMAIL` 時為 `true`。

   下列範例包含使用秘密 ARN 的 SSRS 電子郵件參數。

   ```
   {
   "OptionGroupName": "ssrs-se-2017",
   "OptionsToInclude": [
   	{
   	"OptionName": "SSRS",
   	"Port": 8443,
   	"VpcSecurityGroupMemberships": ["sg-0abcdef123"],
   	"OptionSettings": [
               {"Name": "MAX_MEMORY","Value": "60"},
               {"Name": "SMTP_ENABLE_EMAIL","Value": "true"}
               {"Name": "SMTP_SENDER_EMAIL_ADDRESS","Value": "nobody@example.com"},
               {"Name": "SMTP_SERVER","Value": "email-smtp.us-west-2.amazonaws.com"},
               {"Name": "SMTP_PORT","Value": "25"},
               {"Name": "SMTP_USE_SSL","Value": "true"},
               {"Name": "SMTP_EMAIL_CREDENTIALS_SECRET_ARN","Value": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret-a1b2c3"}
               ]
   	}],
   "ApplyImmediately": true
   }
   ```

1. 將 `SSRS` 選項新增至選項群組。  
**Example**  

   針對 Linux、macOS 或 Unix：

   ```
   aws rds add-option-to-option-group \
       --cli-input-json file://ssrs-option.json \
       --apply-immediately
   ```

   在 Windows 中：

   ```
   aws rds add-option-to-option-group ^
       --cli-input-json file://ssrs-option.json ^
       --apply-immediately
   ```

## 將選項群組與資料庫執行個體建立關聯
<a name="SSRS.Apply"></a>

使用 AWS 管理主控台 或 AWS CLI 將您的選項群組與資料庫執行個體建立關聯。

如果您使用現有資料庫執行個體，則該執行個體必須已有與其相關聯的 Active Directory 網域和 AWS Identity and Access Management (IAM) 角色。如果您建立新執行個體，請指定現有的 Active Directory 網域和 IAM 角色。如需詳細資訊，請參閱[使用 Active Directory 搭配 RDS for SQL Server](User.SQLServer.ActiveDirectoryWindowsAuth.md)。

### 主控台
<a name="SSRS.Apply.Console"></a>

您可以將選項群組與新的或現有的資料庫執行個體建立關聯。
+ 針對新的資料庫執行個體，在啟動執行個體時與選項群組建立關聯。如需更多詳細資訊，請參閱 [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。
+ 對於現有的資料庫執行個體，請修改執行個體並與新的選項群組建立關聯。如需詳細資訊，請參閱[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

### CLI
<a name="SSRS.Apply.CLI"></a>

您可以將選項群組關聯至新的或現有的資料庫執行個體。

**建立使用選項群組的資料庫執行個體**
+ 指定建立選項群組時所使用的相同資料庫引擎類型和主要版本。  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds create-db-instance \
      --db-instance-identifier myssrsinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-se \
      --engine-version 14.00.3223.3.v1 \
      --allocated-storage 100 \
      --manage-master-user-password  \
      --master-username admin \
      --storage-type gp2 \
      --license-model li \
      --domain-iam-role-name my-directory-iam-role \
      --domain my-domain-id \
      --option-group-name ssrs-se-2017
  ```

  在 Windows 中：

  ```
  aws rds create-db-instance ^
      --db-instance-identifier myssrsinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-se ^
      --engine-version 14.00.3223.3.v1 ^
      --allocated-storage 100 ^
      --manage-master-user-password ^
      --master-username admin ^
      --storage-type gp2 ^
      --license-model li ^
      --domain-iam-role-name my-directory-iam-role ^
      --domain my-domain-id ^
      --option-group-name ssrs-se-2017
  ```

**修改資料庫執行個體以使用您的選項群組**
+ 請執行下列其中一個命令：  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds modify-db-instance \
      --db-instance-identifier myssrsinstance \
      --option-group-name ssrs-se-2017 \
      --apply-immediately
  ```

  在 Windows 中：

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier myssrsinstance ^
      --option-group-name ssrs-se-2017 ^
      --apply-immediately
  ```

## 允許對 VPC 安全群組進行傳入存取
<a name="SSRS.Inbound"></a>

若要允許傳入存取與資料庫執行個體相關聯的 VPC 安全群組，請為指定的 SSRS 接聽程式連接埠建立傳入規則。如需設定安全群組的詳細資訊，請參閱[建立安全群組以存取在您的 VPC 中您的資料庫執行個體](CHAP_SettingUp.md#CHAP_SettingUp.SecurityGroup)。

## 報告伺服器資料庫
<a name="SSRS.DBs"></a>

當您的資料庫執行個體與 SSRS 選項相關聯時，會在您的資料庫執行個體上建立兩個新的資料庫：
+ `rdsadmin_ReportServer`
+ `rdsadmin_ReportServerTempDB`

這些資料庫代表 ReportServer 和 ReportServerTempDB 資料庫。SSRS 會將其資料存放在 ReportServer 資料庫中，並將其資料快取在 ReportServerTempDB 資料庫中。如需詳細資訊，請參閱 Microsoft 文件中的[報表伺服器資料庫](https://learn.microsoft.com/en-us/sql/reporting-services/report-server/report-server-database-ssrs-native-mode?view=sql-server-ver15)。

RDS 擁有和管理這些資料庫，因此不允許在其上進行資料庫操作，如 ALTER 和 DROP。不允許存取 `rdsadmin_ReportServerTempDB` 資料庫。然而，您可以在 `rdsadmin_ReportServer` 資料庫上執行讀取操作。

## SSRS 日誌檔案
<a name="SSRS.Logs"></a>

您可以列出、檢視和下載 SSRS 日誌檔案。SSRS 日誌檔案遵循 ReportServerService\$1*timestamp*.log 的命名慣例。這些報表伺服器日誌位於 `D:\rdsdbdata\Log\SSRS` 目錄中。(`D:\rdsdbdata\Log` 目錄也是錯誤日誌和 SQL Server Agent 日誌的父目錄)。如需更多詳細資訊，請參閱 [檢視並列出資料庫日誌檔案](USER_LogAccess.Procedural.Viewing.md)。

若為現有 SSRS 執行個體，可能需要重新啟動 SSRS 服務才能存取報告伺服器日誌。您可更新 `SSRS` 選項重新啟動服務。

如需更多詳細資訊，請參閱 [使用 Amazon RDS for Microsoft SQL Server 日誌](Appendix.SQLServer.CommonDBATasks.Logs.md)。

# 存取 SSR Web 入口網站
<a name="SSRS.Access"></a>

請使用下列程序來存取 SSRS Web 入口網站：

1. 開啟 Secure Sockets Layer (SSL)。

1. 授予網域使用者的存取權。

1. 使用瀏覽器和網域使用者登入資料存取 Web 入口網站。

## 在 RDS 上使用 SSL
<a name="SSRS.Access.SSL"></a>

SSRS 使用 HTTPS SSL 通訊協定進行連線。若要使用此通訊協定，請將 SSL 憑證匯入至用戶端電腦上的 Microsoft Windows 作業系統中。

如需 SSL 憑證的詳細資訊，請參閱[使用 SSL/TLS 加密與資料庫執行個體或叢集的連線](UsingWithRDS.SSL.md)。如需在使用 SSL 搭配 MySQL 的詳細資訊，請參閱[對 Microsoft SQL Server 資料庫執行個體使用 SSL](SQLServer.Concepts.General.SSL.Using.md)。

## 授予網域使用者的存取權
<a name="SSRS.Access.Grant"></a>

啟用全新的 SSRS 時，SSRS 中不會有角色指派。為了讓網域使用者或使用者群組存取 Web 入口網站，RDS 會提供預存程序。

**將存取權授予 Web 入口網站上的網域使用者**
+ 請使用下列預存程序。

  ```
  exec msdb.dbo.rds_msbi_task
  @task_type='SSRS_GRANT_PORTAL_PERMISSION',
  @ssrs_group_or_username=N'AD_domain\user';
  ```

對於網域使用者或使用者群組，會授予 `RDS_SSRS_ROLE` 系統角色。此角色獲授予下列系統層級的任務：
+ 執行報告
+ 管理任務
+ 管理共用排程
+ 檢視共用排程

也會授予根資料夾上 `Content Manager` 的項目層級角色。

## 存取 Web 入口網站
<a name="SSRS.Access"></a>

`SSRS_GRANT_PORTAL_PERMISSION` 任務順利完成後，您就可以使用網頁瀏覽器存取入口網站。Web 入口網站 URL 具有下列格式。

```
https://rds_endpoint:port/Reports
```

在此格式中，適用以下各項：
+ *`rds_endpoint`* – 您搭配 SSRS 使用之 RDS 資料庫執行個體的端點。

  您可以在資料庫執行個體的 **Connectivity & security (連線與安全)** 標籤上找到端點。如需更多詳細資訊，請參閱 [連線至 Microsoft SQL Server 資料庫執行個體](USER_ConnectToMicrosoftSQLServerInstance.md)。
+ `port` – 您在 `SSRS` 選項中設定 SSRS 的接聽程式連接埠。

**存取 Web 入口網站**

1. 在瀏覽器中輸入 Web 入口網站 URL。

   ```
   https://myssrsinstance.cg034itsfake.us-east-1.rds.amazonaws.com:8443/Reports
   ```

1. 使用您獲授予 `SSRS_GRANT_PORTAL_PERMISSION` 任務存取權之網域使用者的登入資料登入。

# 部署報告和設定報告資料來源
<a name="SSRS.DeployConfig"></a>

使用下列程序，將報告部署至 SSRS 並設定報告資料來源：

**Topics**
+ [將報告部署到 SSRS](#SSRS.Deploy)
+ [設定報告資料來源](#SSRS.ConfigureDataSource)

## 將報告部署到 SSRS
<a name="SSRS.Deploy"></a>

您可以存取入口網站之後，就可以將報告部署至該入口網站。您可以使用 Web 入口網站中的「上傳」工具上傳報告，或直接從 [SQL Server 資料工具 (SSDT)](https://docs.microsoft.com/en-us/sql/ssdt/download-sql-server-data-tools-ssdt)部署。從 SSDT 部署時，請確定下列事項：
+ 啟動 SSDT 的使用者可以存取 SSRS 入口網站。
+ SSRS 專案屬性中的 `TargetServerURL` 值會設定為 RDS 資料庫執行個體的 HTTPS 端點，並帶有字尾 `ReportServer`，例如：

  ```
  https://myssrsinstance.cg034itsfake.us-east-1.rds.amazonaws.com:8443/ReportServer
  ```

## 設定報告資料來源
<a name="SSRS.ConfigureDataSource"></a>

將報告部署至 SSRS 之後，您應該設定報告資料來源。設定報告資料來源時，請確保下列事項：
+ 對於加入至 AWS Directory Service for Microsoft Active Directory 的 RDS for SQL Server 資料庫執行個體，請使用完整網域名稱 (FQDN) 做為連線字串的資料來源名稱。例如 `myssrsinstance.corp-ad.example.com`，其中 `myssrsinstance` 是資料庫執行個體名稱，而且 `corp-ad.example.com` 是完整網域名稱。
+ 對於加入至自我管理 Active Directory 的 RDS for SQL Server 資料庫執行個體，請使用 `.` 或 `LocalHost` 做為連線字串的資料來源名稱。

# 使用 SSRS 電子郵件傳送報告
<a name="SSRS.Email"></a>

SSRS 包含 SSRS 電子郵件擴充功能，您可以用來將報告傳送給使用者。

若要設定 SSRS 電子郵件，請使用 `SSRS` 選項設定。如需詳細資訊，請參閱[將 SSRS 選項新增到您的選項群組](SSRS.Enabling.md#SSRS.Add)。

設定 SSRS 電子郵件之後，您可以訂閱報告伺服器上的報告。如需詳細資訊，請參閱 Microsoft 文件中的《[報告服務中的電子郵件傳遞](https://docs.microsoft.com/en-us/sql/reporting-services/subscriptions/e-mail-delivery-in-reporting-services)》。

SSRS 電子郵件AWS Secrets Manager需要與 整合，才能在 RDS 上運作。若要與 Secrets Manager 整合，您需要建立秘密。

**注意**  
如果您稍後變更秘密，則也必須更新 `SSRS` 選項群組中的選項。

**若要建立 SSRS 電子郵件的秘密**

1. 依照《*AWS Secrets Manager 使用者指南*》中[建立秘密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)的步驟進行。

   1. 針對 **Select secret type (選取秘密類型)**，選擇 **Other type of secrets (其他秘密類型)**。

   1. 對於 **ey/value pairs** (鍵/值對)，輸入下列：
      + **SMTP\$1USERNAME** - 輸入具有從 SMTP 伺服器傳送郵件權限的使用者。
      + **SMTP\$1PASSWORD** - 輸入 SMTP 使用者的密碼。

   1. 對於 **Encryption key** (加密金鑰)，請勿使用預設 AWS KMS key。使用您自己的現有金鑰或建立新的金鑰。

      KMS 金鑰政策必須允許 `kms:Decrypt` 動作，例如：

      ```
      {
          "Sid": "Allow use of the key",
          "Effect": "Allow",
          "Principal": {
              "Service": [
                  "rds.amazonaws.com"
              ]
          },
          "Action": [
              "kms:Decrypt"
          ],
          "Resource": "*"
      }
      ```

1. 請遵循*AWS Secrets Manager使用者指南*中[將許可政策連接至秘密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access_resource-policies.html)的步驟。權限政策提供 `secretsmanager:GetSecretValue` 動作至 `rds.amazonaws.com` 服務主體。

   建議您使用政策中的 `aws:sourceAccount` 和 `aws:sourceArn` 條件金鑰，保護自己免受*混淆代理人問題*的困擾。使用AWS 帳戶適用於 的 `aws:sourceAccount`和適用於 的選項群組 ARN`aws:sourceArn`。如需詳細資訊，請參閱[防止跨服務混淆代理人問題](cross-service-confused-deputy-prevention.md)。

   以下範例示範許可政策。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement" : [ {
       "Effect" : "Allow",
       "Principal" : {
         "Service" : "rds.amazonaws.com"
       },
       "Action" : "secretsmanager:GetSecretValue",
       "Resource" : "*",
       "Condition" : {
         "StringEquals" : {
           "aws:sourceAccount" : "123456789012"
         },
         "ArnLike" : {
           "aws:sourceArn" : "arn:aws:rds:us-west-2:123456789012:og:ssrs-se-2017"
         }
       }
     } ]
   }
   ```

------

   如需更多範例，請參閱*AWS Secrets Manager《 使用者指南*》中的 [AWSSecrets Manager 的許可政策範例](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access_examples.html)。

# 撤銷系統層級許可
<a name="SSRS.Access.Revoke"></a>

`RDS_SSRS_ROLE` 系統角色沒有足夠的許可，無法刪除系統層級角色指派。若要從 `RDS_SSRS_ROLE` 中移除使用者或使用者群組，請使用您用來授予角色的相同預存程序，但使用 `SSRS_REVOKE_PORTAL_PERMISSION` 任務類型。

**撤銷 Web 入口網站的網域使用者存取權**
+ 請使用下列預存程序。

  ```
  exec msdb.dbo.rds_msbi_task
  @task_type='SSRS_REVOKE_PORTAL_PERMISSION',
  @ssrs_group_or_username=N'AD_domain\user';
  ```

這麼做會將使用者從 `RDS_SSRS_ROLE` 系統角色中刪除。如果使用者擁有 `Content Manager` 項目層級角色，也會從該項目層級角色中刪除該使用者。

# 監控任務的狀態
<a name="SSRS.Monitor"></a>

若要追蹤授予或撤銷任務的狀態，請呼叫 `rds_fn_task_status` 函數。需要兩個參數。第一個參數不適用於 SSAS，所以應該一律為 `NULL`。第二個參數接受任務 ID。

若要查看所有任務的清單，請將第一個參數設為 `NULL`，將第二個參數設為 `0`，如下列範例所示。

```
SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,0);
```

若要取得特定的任務，請將第一個參數設為 `NULL`，將第二個參數設為任務 ID，如下列範例所示。

```
SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,42);
```

`rds_fn_task_status` 函數會傳回下列資訊。


| 輸出參數 | 描述 | 
| --- | --- | 
| `task_id` | 任務的 ID。 | 
| `task_type` | 對於 SSRS，任務可以有下列任務類型： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/SSRS.Monitor.html)  | 
| `database_name` | 不適用於 SSRS 任務。 | 
| `% complete` | 任務的進度 (以百分比表示)。 | 
| `duration (mins)` | 任務所花的時間 (以分鐘為單位)。 | 
| `lifecycle` |  任務的狀態。可能的狀態如下： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/SSRS.Monitor.html)  | 
| `task_info` | 任務的其他資訊。如果處理期間發生錯誤，此欄包含該錯誤的相關資訊。 | 
| `last_updated` | 上次更新任務狀態的日期和時間。 | 
| `created_at` | 建立任務的日期和時間。 | 
| `S3_object_arn` |  不適用於 SSRS 任務。  | 
| `overwrite_S3_backup_file` | 不適用於 SSRS 任務。 | 
| `KMS_master_key_arn` |  不適用於 SSRS 任務。  | 
| `filepath` |  不適用於 SSRS 任務。  | 
| `overwrite_file` |  不適用於 SSRS 任務。  | 
| `task_metadata` | 與 SSRS 任務相關聯的中繼資料。 | 

# 停用和刪除 SSRS 資料庫
<a name="SSRS.DisableDelete"></a>

使用下列程序停用 SSRS 和刪除 SSRS 資料庫：

**Topics**
+ [關閉 SSRS](#SSRS.Disable)
+ [刪除 SSRS 資料庫](#SSRS.Drop)

## 關閉 SSRS
<a name="SSRS.Disable"></a>

若要關閉 SSRS，請從其選項群組中移除 `SSRS` 選項。移除此選項並不會刪除 SSRS 資料庫。如需詳細資訊，請參閱 [刪除 SSRS 資料庫](#SSRS.Drop)。

您可以通過新增回 `SSRS` 選項來再次打開 SSRS。如果您也已刪除 SSRS 資料庫，在相同的資料庫執行個體上重新新增 SSRS 會建立新的報告伺服器資料庫。

### 主控台
<a name="SSRS.Disable.Console"></a>

**從選項群組中移除 SSRS 選項**

1. 登入 AWS 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 選擇具有 `SSRS` 選項的選項群組 (上述範例中的 `ssrs-se-2017`)。

1. 選擇 **Delete option (刪除選項)**。

1. 在 **Deletion options (刪除選項)** 下，為 **Options to delete (要刪除的選項)** 選擇 **SSRS**。

1. 在 **Apply immediately (立即套用)** 下，選擇 **Yes (是)** 立即刪除選項，或選擇 **No (否)** 在下一個維護時段將其刪除。

1. 選擇 **刪除**。

### CLI
<a name="SSRS.Disable.CLI"></a>

**從選項群組中移除 SSRS 選項**
+ 請執行下列其中一個命令：  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds remove-option-from-option-group \
      --option-group-name ssrs-se-2017 \
      --options SSRS \
      --apply-immediately
  ```

  針對 Windows：

  ```
  aws rds remove-option-from-option-group ^
      --option-group-name ssrs-se-2017 ^
      --options SSRS ^
      --apply-immediately
  ```

## 刪除 SSRS 資料庫
<a name="SSRS.Drop"></a>

移除 `SSRS` 選項並不會刪除報告伺服器資料庫。若要刪除它們，請使用下列預存程序。

若要刪除報告伺服器資料庫，請務必先移除 `SSRS` 選項。

**刪除 SSRS 資料庫**
+ 請使用下列預存程序。

  ```
  exec msdb.dbo.rds_drop_ssrs_databases
  ```

# RDS for SQL Server 中的 Microsoft Distributed Transaction Coordinator 支援
<a name="Appendix.SQLServer.Options.MSDTC"></a>

*分散式交易*是涉及兩個或多個網路主機的資料庫交易。RDS for SQL Server 支援主機之間的分散式交易，其中單一主機可以是下列其中一項：
+ RDS for SQL Server 資料庫執行個體
+ 內部部署 SQL Server 主機
+ 已安裝 SQL Server 的 Amazon EC2 主機
+ 任何其他具有支援分散式交易之資料庫引擎的 EC2 主機或 RDS 資料庫執行個體

在 RDS 中，自 SQL Server 2012 (11.00.5058.0.v1 版及更新版本) 開始，RDS for SQL Server 的所有版本都支援分散式交易。支援是使用 Microsoft Distributed Transaction Coordinator (MSDTC) 提供。如需 MSDTC 的深入資訊，請參閱 Microsoft 文件中的[分散式交易協調器](https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms684146(v=vs.85))。

**Contents**
+ [限制](#Appendix.SQLServer.Options.MSDTC.Limitations)
+ [啟用 MSDTC](Appendix.SQLServer.Options.MSDTC.Enabling.md)
  + [建立 MSDTC 的選項群組](Appendix.SQLServer.Options.MSDTC.Enabling.md#Appendix.SQLServer.Options.MSDTC.OptionGroup)
  + [將 MSDTC 選項新增至選項群組](Appendix.SQLServer.Options.MSDTC.Enabling.md#Appendix.SQLServer.Options.MSDTC.Add)
  + [建立 MSDTC 的參數群組](Appendix.SQLServer.Options.MSDTC.Enabling.md#MSDTC.CreateParamGroup)
  + [修改 MSDTC 的參數](Appendix.SQLServer.Options.MSDTC.Enabling.md#ModifyParam.MSDTC)
  + [將選項群組和參數群組與資料庫執行個體建立關聯](Appendix.SQLServer.Options.MSDTC.Enabling.md#MSDTC.Apply)
  + [修改 MSDTC 選項](Appendix.SQLServer.Options.MSDTC.Enabling.md#Appendix.SQLServer.Options.MSDTC.Modify)
+ [使用交易](#Appendix.SQLServer.Options.MSDTC.Using)
  + [使用分散式交易](#Appendix.SQLServer.Options.MSDTC.UsingXA)
  + [使用 XA 交易](#MSDTC.XA)
  + [使用交易追蹤](#MSDTC.Tracing)
+ [停用 MSDTC](Appendix.SQLServer.Options.MSDTC.Disable.md)
+ [對 RDS for SQL Server 的 MSDTC 進行故障診斷](Appendix.SQLServer.Options.MSDTC.Troubleshooting.md)

## 限制
<a name="Appendix.SQLServer.Options.MSDTC.Limitations"></a>

在 RDS for SQL Server 上使用 MSDTC 時適用下列限制：
+ 使用 SQL Server 資料庫鏡像的執行個體不支援 MSDTC。如需詳細資訊，請參閱[交易 - 可用性群組和資料庫鏡像](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring?view=sql-server-ver15#non-support-for-distributed-transactions)。
+ `in-doubt xact resolution` 參數必須設為 1 或 2。如需詳細資訊，請參閱[修改 MSDTC 的參數](Appendix.SQLServer.Options.MSDTC.Enabling.md#ModifyParam.MSDTC)。
+ MSDTC 要求所有參與分散式交易的主機皆可使用其主機名稱進行解析。RDS 會自動為加入網域的執行個體維護此功能。不過，對於獨立執行個體，請務必手動設定 DNS 伺服器。
+ SQL Server 2017 14.00.3223.3 版和更新版本以及 SQL Server 2019 支援 Java Database Connectivity (JDBC) XA 交易。
+ 在 RDS 執行個體上不支援依存於用戶端動態連結程式庫 (DLL) 的分散式交易。
+ 不支援使用自訂 XA 動態連結程式庫。

# 啟用 MSDTC
<a name="Appendix.SQLServer.Options.MSDTC.Enabling"></a>

請使用下列程序為您的資料庫執行個體啟用 MSDTC：

1. 建立新的選項群組或選擇現有的選項群組。

1. 將 `MSDTC` 選項新增至選項群組。

1. 建立新參數群組，或選擇現有參數群組。

1. 修改參數群組，將 `in-doubt xact resolution` 參數設定為 1 或 2。

1. 將選項群組和參數群組與資料庫執行個體建立關聯。

## 建立 MSDTC 的選項群組
<a name="Appendix.SQLServer.Options.MSDTC.OptionGroup"></a>

使用AWS 管理主控台或 AWS CLI 來建立對應至 SQL Server 引擎和資料庫執行個體版本的選項群組。

**注意**  
如果現有的選項群組適用於正確的 SQL Server 引擎和版本，則也可以使用。

### 主控台
<a name="OptionGroup.MSDTC.Console"></a>

下列程序會建立 SQL Server Standard Edition 2016 的選項群組。

**建立選項群組**

1. 登入 AWS 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 選擇**建立群組**。

1. 在 **Create option group (建立選項群組)** 窗格中，執行下列動作：

   1. 在 **Name** (名稱) 中，輸入您 AWS 帳戶中的唯一選項群組名稱，例如 **msdtc-se-2016**。名稱僅可包含字母、數字與連字號。

   1. 對於 **Description (描述)**，請輸入選項群組的簡短描述，例如 **MSDTC option group for SQL Server SE 2016**。用於顯示用途的說明。

   1. 對於 **Engine (引擎)**，請選擇 **sqlserver-se**。

   1. 對於 **Major engine version (主要引擎版本)**，請選擇 **13.00**。

1. 選擇**建立**。

### CLI
<a name="OptionGroup.MSDTC.CLI"></a>

下列 範例會為 SQL Server Standard Edition 2016 建立選項群組。

**建立選項群組**
+ 請使用下列其中一個命令。  
**Example**  

  對於 Linux、macOS 或 Unix：

  ```
  aws rds create-option-group \
      --option-group-name msdtc-se-2016 \
      --engine-name sqlserver-se \
      --major-engine-version 13.00 \
      --option-group-description "MSDTC option group for SQL Server SE 2016"
  ```

  在 Windows 中：

  ```
  aws rds create-option-group ^
      --option-group-name msdtc-se-2016 ^
      --engine-name sqlserver-se ^
      --major-engine-version 13.00 ^
      --option-group-description "MSDTC option group for SQL Server SE 2016"
  ```

## 將 MSDTC 選項新增至選項群組
<a name="Appendix.SQLServer.Options.MSDTC.Add"></a>

接下來，使用 AWS 管理主控台或 AWS CLI 將 `MSDTC` 選項加入至選項群組。

下列選項設定是必要的：
+ **Port (連接埠)** – 您用來存取 MSDTC 的連接埠。允許的數值是 1150–49151，但不包括 1234、1434、3260、3343、3389 和 47001。預設值為 5000。

  確定您要使用的連接埠已在防火牆規則中啟用。此外，請確定在與資料庫執行個體相關聯的安全群組的傳入和傳出規則中已啟用此連接埠。如需更多詳細資訊，請參閱 [無法連線至 Amazon RDS 資料庫執行個體](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting)。
+ **Security groups** (安全群組) – RDS 資料庫執行個體的 VPC 或安全群組成員資格。
+ **Authentication (身分驗證類型)** – 主機之間的身分驗證模式。支援下列身分驗證類型：
  + 相互驗證 – RDS 執行個體使用整合式驗證彼此相互驗證。如果選取此選項，與此選項群組相關聯的所有執行個體都必須加入網域。
  + 無 – 主機之間不執行身分驗證。我們不建議您生產環境中使用此模式。
+ **交易日誌 大小** – MSDTC 交易日誌的大小。允許的數值是 4–1024 MB。預設大小為 4 MB。

下列選項設定是選擇性的：
+ **Enable inbound connections (啟用傳入連線)** – 是否允許對與此選項群組相關聯的執行個體進行傳入 MSDTC 連線。
+ **Enable outbound connections (啟用輸出連線)** – 是否允許從此選項群組相關聯的執行個體進行傳出 MSDTC 連線。
+ **Enable XA (啟用 XA)** – 是否允許 XA 交易。如需 XA 通訊協定的詳細資訊，請參閱 [XA 規格](https://publications.opengroup.org/c193)。
+ **Enable SNA LU (啟用 SNA LU)** – 是否允許 SNA LU 通訊協定用於分散式交易。如需 SNA LU 通訊協定支援的詳細資訊，請參閱 Microsoft 文件中的[管理 IBM CICS LU 6.2 交易](https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms685136(v=vs.85))。

### 主控台
<a name="Options.MSDTC.Add.Console"></a>

**新增 MSDTC 選項**

1. 登入 AWS 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 選擇您剛建立的選項群組。

1. 選擇 **Add option (新增選項)**。

1. 在 **Option details (選項詳細資訊)** 下，選擇 **MSDTC** 做為 **Option name (選項名稱)**。

1. 在 **Options settings (選項設定)** 下：

   1. 針對 **Port (連接埠)**，輸入存取 MSDTC 的連接埠號碼。預設值為 **5000**。

   1. 針對 **Security groups (安全群組)**，選擇要與選項產生關聯的 VPC 安全群組。

   1. 在 **Authentication type (身分驗證類型)** 中，選擇 **Mutual (相互)** 或 **None (無)**。

   1. 針對 **Transaction log size (交易日誌大小)**，輸入 4–1024 之間的值。預設值為 **4**。

1. 在 **Additional configuration (其他設定)** 下，請執行下列動作：

   1. 針對 **Connections (連線)**，視需要選擇 **Enable inbound connections (啟用傳入連線)** 和 **Enable outbound connections (啟用傳出連線)**。

   1. 針對 **Allowed protocols (允許的通訊協定)**，視需要選擇 **Enable XA (啟用 XA)** 和 **Enable SNA LU (啟用 SNA LU)**。

1. 在 **Scheduling (排程)** 下，選擇要立即新增選項或是在下一個維護時段新增選項。

1. 選擇 **Add option (新增選項)**。

   若要新增此選項，不需要重新開機。

### CLI
<a name="Options.MSDTC.Add.CLI"></a>

**新增 MSDTC 選項**

1. 使用下列必要的參數建立 JSON 檔案，例如 `msdtc-option.json`。

   ```
   {
   "OptionGroupName":"msdtc-se-2016",
   "OptionsToInclude": [
   	{
   	"OptionName":"MSDTC",
   	"Port":5000,
   	"VpcSecurityGroupMemberships":["sg-0abcdef123"],
   	"OptionSettings":[{"Name":"AUTHENTICATION","Value":"MUTUAL"},{"Name":"TRANSACTION_LOG_SIZE","Value":"4"}]
   	}],
   "ApplyImmediately": true
   }
   ```

1. 將 `MSDTC` 選項新增至選項群組。  
**Example**  

   對於 Linux、macOS 或 Unix：

   ```
   aws rds add-option-to-option-group \
       --cli-input-json file://msdtc-option.json \
       --apply-immediately
   ```

   在 Windows 中：

   ```
   aws rds add-option-to-option-group ^
       --cli-input-json file://msdtc-option.json ^
       --apply-immediately
   ```

   不需要重新開機。

## 建立 MSDTC 的參數群組
<a name="MSDTC.CreateParamGroup"></a>

為對應到 SQL Server 版本和資料庫執行個體版本的 `in-doubt xact resolution` 參數建立或修改參數群組。

### 主控台
<a name="CreateParamGroup.MSDTC.Console"></a>

下列範例會建立 SQL Server Standard Edition 2016 的參數群組。

**建立參數群組**

1. 登入 AWS 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Parameter groups** (參數群組)。

1. 選擇 **Create parameter group (建立參數群組)**。

1. 在 **Create parameter group (建立參數群組)** 窗格中執行下列動作：

   1. 對於 **Parameter group family (參數群組家族)**，請選擇 **sqlserver-se-13.0**。

   1. 對於 **Group name (群組名稱)**，輸入參數群組的識別碼，例如 **msdtc-sqlserver-se-13**。

   1. 對於 **Description (說明)**，輸入 **in-doubt xact resolution**。

1. 選擇**建立**。

### CLI
<a name="CreateParamGroup.MSDTC.CLI"></a>

下列範例會建立 SQL Server Standard Edition 2016 的參數群組。

**建立參數群組**
+ 請使用下列其中一個命令。  
**Example**  

  對於 Linux、macOS 或 Unix：

  ```
  aws rds create-db-parameter-group \
      --db-parameter-group-name msdtc-sqlserver-se-13 \
      --db-parameter-group-family "sqlserver-se-13.0" \
      --description "in-doubt xact resolution"
  ```

  在 Windows 中：

  ```
  aws rds create-db-parameter-group ^
      --db-parameter-group-name msdtc-sqlserver-se-13 ^
      --db-parameter-group-family "sqlserver-se-13.0" ^
      --description "in-doubt xact resolution"
  ```

## 修改 MSDTC 的參數
<a name="ModifyParam.MSDTC"></a>

修改參數群組中對應至 SQL Server 版本和資料庫執行個體版本的 `in-doubt xact resolution` 參數。

對於 MSDTC，請將 `in-doubt xact resolution` 參數設定為下列其中一項：
+ `1` – `Presume commit`。任何有疑問的 MSDTC 交易都假設已經遞交。
+ `2` – `Presume abort`。任何有疑問的 MSDTC 交易都假設已停止。

如需詳細資訊，請參閱 Microsoft 文件中的[有疑問的 xact 解析伺服器組態選項](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/in-doubt-xact-resolution-server-configuration-option)。

### 主控台
<a name="ModifyParam.MSDTC.Console"></a>

下列範例會修改您為 SQL Server Standard Edition 2016 所建立的參數群組。

**修改參數群組**

1. 登入 AWS 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Parameter groups** (參數群組)。

1. 選擇參數群組，例如 **msdtc-sqlserver-se-13**。

1. 在 **Parameters** (參數) 下，篩選 **xact** 的參數清單。

1. 選擇 **in-doubt xact resolution (有疑問的 xact 解析)**。

1. 選擇 **Edit parameters** (編輯參數)。

1. 輸入 **1** 或 **2**。

1. 選擇**儲存變更**。

### CLI
<a name="ModifyParam.MSDTC.CLI"></a>

下列範例會修改您為 SQL Server Standard Edition 2016 所建立的參數群組。

**修改參數群組**
+ 請使用下列其中一個命令。  
**Example**  

  對於 Linux、macOS 或 Unix：

  ```
  aws rds modify-db-parameter-group \
      --db-parameter-group-name msdtc-sqlserver-se-13 \
      --parameters "ParameterName='in-doubt xact resolution',ParameterValue=1,ApplyMethod=immediate"
  ```

  在 Windows 中：

  ```
  aws rds modify-db-parameter-group ^
      --db-parameter-group-name msdtc-sqlserver-se-13 ^
      --parameters "ParameterName='in-doubt xact resolution',ParameterValue=1,ApplyMethod=immediate"
  ```

## 將選項群組和參數群組與資料庫執行個體建立關聯
<a name="MSDTC.Apply"></a>

您可以使用AWS 管理主控台或 AWS CLI，將 MSDTC 選項群組和參數群組與資料庫執行個體產生關聯。

### 主控台
<a name="MSDTC.Apply.Console"></a>

您可以將 MSDTC 選項群組和參數群組與新的或現有的資料庫執行個體產生關聯。
+ 對於新的資料庫執行個體，請在啟動執行個體時將它們相關聯。如需更多詳細資訊，請參閱 [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。
+ 對於現有的資料庫執行個體，請透過修改執行個體來建立關聯。如需更多詳細資訊，請參閱 [修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。
**注意**  
如果您使用現有資料庫執行個體，則該執行個體必須已具有與其相關聯的 Active Directory 網域和 AWS Identity and Access Management IAM 角色。如果您建立新執行個體，請指定現有的 Active Directory 網域和 IAM 角色。如需更多詳細資訊，請參閱 [使用具有 RDS for SQL Server 的 AWS 受管 Active Directory](USER_SQLServerWinAuth.md)。

### CLI
<a name="MSDTC.Apply.CLI"></a>

您可以將 MSDTC 選項群組和參數群組與新的或現有的資料庫執行個體產生關聯。

**注意**  
如果您使用現有已加入網域的資料庫執行個體，則該執行個體必須已具有與其相關聯的 Active Directory 網域和 IAM 角色。如果您建立新執行個體，請指定現有的 Active Directory 網域和 IAM 角色。如需更多詳細資訊，請參閱 [使用具有 RDS for SQL Server 的 AWS 受管 Active Directory](USER_SQLServerWinAuth.md)。

**使用 MSDTC 選項群組和參數群組建立資料庫執行個體**
+ 指定建立選項群組時所使用的相同資料庫引擎類型和主要版本。  
**Example**  

  對於 Linux、macOS 或 Unix：

  ```
  aws rds create-db-instance \
      --db-instance-identifier mydbinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-se \
      --engine-version 13.00.5426.0.v1 \
      --allocated-storage 100 \
      --manage-master-user-password \
      --master-username admin \
      --storage-type gp2 \
      --license-model li \
      --domain-iam-role-name my-directory-iam-role \
      --domain my-domain-id \
      --option-group-name msdtc-se-2016 \
      --db-parameter-group-name msdtc-sqlserver-se-13
  ```

  在 Windows 中：

  ```
  aws rds create-db-instance ^
      --db-instance-identifier mydbinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-se ^
      --engine-version 13.00.5426.0.v1 ^
      --allocated-storage 100 ^
      --manage-master-user-password ^
      --master-username admin ^
      --storage-type gp2 ^
      --license-model li ^
      --domain-iam-role-name my-directory-iam-role ^
      --domain my-domain-id ^
      --option-group-name msdtc-se-2016 ^
      --db-parameter-group-name msdtc-sqlserver-se-13
  ```

**修改資料庫執行個體並建立 MSDTC 選項群組和參數群組的關聯**
+ 請使用下列其中一個命令。  
**Example**  

  對於 Linux、macOS 或 Unix：

  ```
  aws rds modify-db-instance \
      --db-instance-identifier mydbinstance \
      --option-group-name msdtc-se-2016 \
      --db-parameter-group-name msdtc-sqlserver-se-13 \
      --apply-immediately
  ```

  在 Windows 中：

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier mydbinstance ^
      --option-group-name msdtc-se-2016 ^
      --db-parameter-group-name msdtc-sqlserver-se-13 ^
      --apply-immediately
  ```

## 修改 MSDTC 選項
<a name="Appendix.SQLServer.Options.MSDTC.Modify"></a>

啟用 `MSDTC` 選項後，您可以修改其設定。如需如何修改選項設定的詳細資訊，請參閱[修改選項設定](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption)。

**注意**  
MSDTC 選項設定的某些變更需要重新啟動 MSDTC 服務。此需求可能會影響執行中的分散式交易。

## 使用交易
<a name="Appendix.SQLServer.Options.MSDTC.Using"></a>

### 使用分散式交易
<a name="Appendix.SQLServer.Options.MSDTC.UsingXA"></a>

在 Amazon RDS for SQL Server 中，您執行分散式交易的方式與在內部部署執行的分散式交易相同：
+ 使用 .NET Framework `System.Transactions` 可升級的交易，透過延遲到有需要時再建立交易，可最佳化分散式交易。

  在這種情況下，升級是自動的，而不需要您進行任何干預。如果交易中只有一個資源管理員，則不會執行任何升級。如需隱含交易範圍的詳細資訊，請參閱 Microsoft 文件中的[使用交易範圍實作隱含交易](https://docs.microsoft.com/en-us/dotnet/framework/data/transactions/implementing-an-implicit-transaction-using-transaction-scope)。

  以下 .NET 實作支援可升級的交易：
  + 自 ADO.NET 2.0 開始，`System.Data.SqlClient` 支援與 SQL Server 進行可升級的交易。如需詳細資訊，請參閱 Microsoft 文件中的[與 SQL Server 的 System.Transactions 整合](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/system-transactions-integration-with-sql-server)。
  + ODP.NET 支援 `System.Transactions`。在 `TransactionsScope` 範圍中對 Oracle 資料庫 11g 版本 1 (11.1 版) 及更新版本開啟的第一個連線會建立本機交易。當開啟第二個連線時，會自動將此交易升級為分散式交易。如需 ODP.NET 中的分散式交易支援的詳細資訊，請參閱 Microsoft 文件中的 [Microsoft Distributed Transaction Coordinator 整合](https://docs.oracle.com/en/database/oracle/oracle-data-access-components/18.3/ntmts/using-mts-with-oracledb.html) 。
+ 使用 `BEGIN DISTRIBUTED TRANSACTION` 陳述式。如需詳細資訊，請參閱 Microsoft 文件中的 [BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)](https://docs.microsoft.com/en-us/sql/t-sql/language-elements/begin-distributed-transaction-transact-sql) 。

### 使用 XA 交易
<a name="MSDTC.XA"></a>

從 RDS for SQL Server 2017 14.00.3223.3 版開始，您可以使用 JDBC 控制分散式交易。當您在 `MSDTC` 選項中，將 `Enable XA` 選項設定為 `true` 時，RDS 會自動啟用 JDBC 交易，並將 `SqlJDBCXAUser` 角色授與 `guest` 使用者。如此可允許透過 JDBC 執行分佈式交易。如需包含程式碼範例在內的詳細資訊，請參閱 Microsoft 文件中的[認識 XA 交易](https://docs.microsoft.com/en-us/sql/connect/jdbc/understanding-xa-transactions)。

### 使用交易追蹤
<a name="MSDTC.Tracing"></a>

RDS 支援控制 MSDTC 交易追蹤，以及從 RDS 資料庫執行個體下載追蹤以進行故障診斷。您可以執行下列 RDS 預存程序來控制交易追蹤工作階段。

```
exec msdb.dbo.rds_msdtc_transaction_tracing 'trace_action',
[@traceall='0|1'],
[@traceaborted='0|1'],
[@tracelong='0|1'];
```

以下是必要參數：
+ `trace_action` – 追蹤動作。其可能是 `START`、`STOP` 或 `STATUS`。

下列是選用參數：
+ `@traceall` – 設定為 1 可追蹤所有分散式交易。預設為 0。
+ `@traceaborted` – 設定為 1 可追蹤已取消的分散式交易。預設為 0。
+ `@tracelong` – 設定為 1 可追蹤長時間執行的分散式交易。預設為 0。

**Example 開始追蹤動作**  
若要開始新的交易追蹤工作階段，請執行下列範例陳述式。  

```
exec msdb.dbo.rds_msdtc_transaction_tracing 'START',
@traceall='0',
@traceaborted='1',
@tracelong='1';
```
一次只能使用一個交易追蹤工作階段。如果在追蹤工作階段作用中時發出新的追蹤工作階段 `START` 命令，則會傳回錯誤，且使用中的追蹤工作階段會維持不變。

**Example 停止追蹤動作**  
若要停止交易追蹤工作階段，請執行下列陳述式。  

```
exec msdb.dbo.rds_msdtc_transaction_tracing 'STOP'
```
此陳述式會停止作用中的交易追蹤工作階段，並將交易追蹤資料儲存至 RDS 資料庫執行個體上的日誌目錄。輸出的第一列包含整體結果，後續幾行指出該操作的詳細資訊。  
以下是成功停止追蹤工作階段的範例。  

```
OK: Trace session has been successfully stopped.
Setting log file to: D:\rdsdbdata\MSDTC\Trace\dtctrace.log
Examining D:\rdsdbdata\MSDTC\Trace\msdtctr.mof for message formats,  8 found.
Searching for TMF files on path: (null)
Logfile D:\rdsdbdata\MSDTC\Trace\dtctrace.log:
 OS version    10.0.14393  (Currently running on 6.2.9200)
 Start Time    <timestamp>
 End Time      <timestamp>
 Timezone is   @tzres.dll,-932 (Bias is 0mins)
 BufferSize            16384 B
 Maximum File Size     10 MB
 Buffers  Written      Not set (Logger may not have been stopped).
 Logger Mode Settings (11000002) ( circular paged
 ProcessorCount         1 
Processing completed   Buffers: 1, Events: 3, EventsLost: 0 :: Format Errors: 0, Unknowns: 3
Event traces dumped to d:\rdsdbdata\Log\msdtc_<timestamp>.log
```
您可以使用詳細資訊來查詢產生之日誌檔案的名稱。如需從 RDS 資料庫執行個體下載日誌檔案的詳細資訊，請參閱 [監控 Amazon RDS 日誌檔案](USER_LogAccess.md)。  
追蹤工作階段記錄會在執行個體上保留 35 天。系統會自動刪除任何較舊的追蹤工作階段日誌。

**Example 狀態追蹤動作**  
若要追蹤交易追蹤工作階段的狀態，請執行下列陳述式。  

```
exec msdb.dbo.rds_msdtc_transaction_tracing 'STATUS'
```
此陳述式會將下列項目輸出為結果集不同的列。  

```
OK
SessionStatus: <Started|Stopped>
TraceAll: <True|False>
TraceAborted: <True|False>
TraceLongLived: <True|False>
```
第一行指出該操作的整體結果：`OK` 或 `ERROR`，加上詳細資訊 (如果適用)。後續各行指出有關追蹤工作階段狀態的詳細資訊：  
+ `SessionStatus` 可為下列其中之一：
  + `Started` 如果追蹤工作階段正在執行中。
  + `Stopped` 如果沒有追蹤工作階段正在執行中。
+ 追蹤工作階段旗標可以是 `True` 或 `False`，取決於其在 `START` 命令中的設定方式。

# 停用 MSDTC
<a name="Appendix.SQLServer.Options.MSDTC.Disable"></a>

若要停用 SSAS，請將 `MSDTC` 選項從其選項群組中移除。

## 主控台
<a name="Options.MSDTC.Disable.Console"></a>

**將 MSDTC 選項從其選項群組中移除**

1. 登入 AWS 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 選擇具有 `MSDTC` 選項的選項群組 (上述範例中的 `msdtc-se-2016`)。

1. 選擇 **Delete option (刪除選項)**。

1. 在 **Deletion options (刪除選項)** 下，為 **Options to delete (要刪除的選項)** 選擇 **MSDTC**。

1. 在 **Apply immediately (立即套用)** 下，選擇 **Yes (是)** 立即刪除選項，或選擇 **No (否)** 在下一個維護時段將其刪除。

1. 選擇 **刪除**。

## CLI
<a name="Options.MSDTC.Disable.CLI"></a>

**將 MSDTC 選項從其選項群組中移除**
+ 請使用下列其中一個命令。  
**Example**  

  對於 Linux、macOS 或 Unix：

  ```
  aws rds remove-option-from-option-group \
      --option-group-name msdtc-se-2016 \
      --options MSDTC \
      --apply-immediately
  ```

  在 Windows 中：

  ```
  aws rds remove-option-from-option-group ^
      --option-group-name msdtc-se-2016 ^
      --options MSDTC ^
      --apply-immediately
  ```

# 對 RDS for SQL Server 的 MSDTC 進行故障診斷
<a name="Appendix.SQLServer.Options.MSDTC.Troubleshooting"></a>

在某些情況下，您可能無法在用戶端電腦上執行的 MSDTC 與 RDS for SQL Server 資料庫執行個體上執行的 MSDTC 服務之間建立連線。若是如此，請確定下列事項：
+ 與資料庫執行個體相關聯之安全群組的傳入規則已正確設定。如需更多詳細資訊，請參閱 [無法連線至 Amazon RDS 資料庫執行個體](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting)。
+ 您的用戶端電腦設定正確。
+ 您的用戶端電腦上已啟用 MSDTC 防火牆規則。

**設定用戶端電腦**

1. 開啟 **Component Services (元件服務)**。

   或者，在 **Server Manager (伺服器管理員)** 中，選擇 **Tools (工具)**，然後選擇 **Component Services (元件服務)**。

1. 展開 **Component Services (元件服務)**，展開 **Computers (電腦)**，展開 **My Computer (我的電腦)**，然後展開 **分散式交易協調器**。

1. 開啟 **Local DTC (本機 DTC)** 的內容 (按右鍵) 功能表，然後選擇 **Properties (屬性)**。

1. 選擇 **Security (安全)** 標籤。

1. 選擇下列所有項目：
   + **Network DTC Access (網路 DTC 存取)**
   + **Allow Inbound (允許傳入)**
   + **Allow Outbound (允許傳出)**

1. 請確定已選擇正確的身分驗證模式：
   + **Mutual Authentication Required (需要相互驗證)** – 用戶端電腦與參與分散式交易的其他節點加入相同的網域，或是網域之間已設定信任關係。
   + **No Authentication Required (不需要驗證)** – 所有其他情況。

1. 選擇 **OK (確定)** 以儲存變更。

1. 如果系統提示您重新啟動服務，請選擇 **Yes (是)**。

**啟用 MSDTC 防火牆規則**

1. 開啟 Windows 防火牆，然後選擇 **Advanced settings (進階設定)**。

   開啟 **Server Manager (伺服器管理員)**，選擇 **Tools (工具)**，然後選取 **Windows Firewall with Advanced Security (具有進階安全性的 Windows 防火牆)**。
**注意**  
視您的作業系統而定，Windows 防火牆可能稱為 Windows Defender 防火牆。

1. 在左窗格中選擇 **Inbound Rules (傳入規則)**。

1. 啟用下列防火牆規則 (如果尚未啟用)：
   + **Distributed Transaction Coordinator (RPC)**
   + **Distributed Transaction Coordinator (RPC)-EPMAP**
   + **Distributed Transaction Coordinator (TCP-In)**

1. 關閉 Windows 防火牆。

# 使用 RDS for SQL Server 的 Microsoft SQL Server 資源長
<a name="Appendix.SQLServer.Options.ResourceGovernor"></a>

Resource Governor 是一種 SQL Server Enterprise Edition 功能，可讓您精確控制執行個體資源。它可讓您設定工作負載如何使用 CPU、記憶體和實體 I/O 資源的特定限制。透過資源長，您可以：
+ 透過管理不同工作負載共用執行個體資源的方式，防止多租戶環境中的資源統一
+ 為不同的使用者和應用程式設定特定資源限制和優先順序，以提供可預測的效能

您可以在現有或新的 RDS for SQL Server 資料庫執行個體上啟用資源長。

資源長使用三個基本概念：
+ **資源集區** - 管理執行個體實體資源 (CPU、記憶體和 I/O) 的容器。您有兩個內建集區 （內部和預設），而且可以建立其他自訂集區。
+ **工作負載群組** - 具有類似特性之資料庫工作階段的容器。每個工作負載群組都屬於資源集區。您有兩個內建工作負載群組 （內部和預設），而且可以建立其他自訂工作負載群組。
+ **分類** - 根據使用者名稱、應用程式名稱、資料庫名稱或主機名稱，決定哪些工作負載群組處理傳入工作階段的程序。

如需 SQL Server 中資源主管功能的其他詳細資訊，請參閱 Microsoft 文件中的[資源主管](https://learn.microsoft.com/en-us/sql/relational-databases/resource-governor/resource-governor?view=sql-server-ver16)。

**Contents**
+ [支援的版本和區域](#ResourceGovernor.SupportedVersions)
+ [限制與建議](#ResourceGovernor.Limitations)
+ [為您的 RDS for SQL Server 執行個體啟用 Microsoft SQL Server 資源長](ResourceGovernor.Enabling.md)
  + [建立 `RESOURCE_GOVERNOR` 的選項群組](ResourceGovernor.Enabling.md#ResourceGovernor.OptionGroup)
  + [將 `RESOURCE_GOVERNOR` 選項新增至選項群組](ResourceGovernor.Enabling.md#ResourceGovernor.Add)
  + [將選項群組關聯至您的資料庫執行個體](ResourceGovernor.Enabling.md#ResourceGovernor.Apply)
+ [針對 RDS for SQL Server 執行個體使用 Microsoft SQL Server 資源長](ResourceGovernor.Using.md)
  + [管理資源集區](ResourceGovernor.Using.md#ResourceGovernor.ManageResourcePool)
    + [建立資源集區](ResourceGovernor.Using.md#ResourceGovernor.CreateResourcePool)
    + [變更資源集區](ResourceGovernor.Using.md#ResourceGovernor.AlterResourcePool)
    + [捨棄資源集區](ResourceGovernor.Using.md#ResourceGovernor.DropResourcePool)
  + [管理工作負載群組](ResourceGovernor.Using.md#ResourceGovernor.ManageWorkloadGroups)
    + [建立工作負載群組](ResourceGovernor.Using.md#ResourceGovernor.CreateWorkloadGroup)
    + [修改工作負載群組](ResourceGovernor.Using.md#ResourceGovernor.AlterWorkloadGroup)
    + [捨棄工作負載群組](ResourceGovernor.Using.md#ResourceGovernor.DropWorkloadGroup)
  + [建立和註冊分類器函數](ResourceGovernor.Using.md#ResourceGovernor.ClassifierFunction)
  + [捨棄分類器函數](ResourceGovernor.Using.md#ResourceGovernor.DropClassifier)
  + [取消註冊分類器函數](ResourceGovernor.Using.md#ResourceGovernor.DeregisterClassifier)
  + [重設統計資料](ResourceGovernor.Using.md#ResourceGovernor.ResetStats)
  + [資源長組態變更](ResourceGovernor.Using.md#ResourceGovernor.ConfigChanges)
  + [將 TempDB 繫結至資源集區](ResourceGovernor.Using.md#ResourceGovernor.BindTempDB)
  + [從資源集區取消繫結 TempDB](ResourceGovernor.Using.md#ResourceGovernor.UnbindTempDB)
  + [清除資源長](ResourceGovernor.Using.md#ResourceGovernor.Cleanup)
+ [多可用區域部署考量](#ResourceGovernor.Considerations)
+ [僅供讀取複本的考量](#ResourceGovernor.ReadReplica)
+ [使用 RDS for SQL Server 執行個體的系統檢視來監控 Microsoft SQL Server 資源長](ResourceGovernor.Monitoring.md)
  + [資源集區執行時間統計資料](ResourceGovernor.Monitoring.md#ResourceGovernor.ResourcePoolStats)
+ [停用 RDS for SQL Server 執行個體的 Microsoft SQL Server 資源長](ResourceGovernor.Disabling.md)
+ [在 RDS for SQL Server 上設定資源長的最佳實務](ResourceGovernor.BestPractices.md)

## 支援的版本和區域
<a name="ResourceGovernor.SupportedVersions"></a>

在提供 RDS for SQL Server 的所有 AWS 區域 中，Amazon RDS 支援下列 SQL Server 版本的資源長：
+ SQL Server 2022 開發人員和企業版本
+ SQL Server 2019 Enterprise Edition
+ SQL Server 2017 Enterprise Edition
+ SQL Server 2016 Enterprise Edition

## 限制與建議
<a name="ResourceGovernor.Limitations"></a>

下列限制和建議適用於資源長：
+ 版本和服務限制：
  + 僅適用於 SQL Server Enterprise Edition。
  + 資源管理僅限於 SQL Server 資料庫引擎。不支援 Analysis Services、 Integration Services 和 Reporting Services 的資源主管。
+ 組態限制：
  + 必須對所有組態使用 Amazon RDS 預存程序。
  + 不支援原生 DDL 陳述式和 SQL Server Management Studio GUI 組態。
+ 資源集區參數：
  + `rds_` 不支援以 開頭的集區名稱。
  + 不允許修改內部和預設資源集區。
  + 對於使用者定義的資源集區，不支援下列資源集區參數：
    + `MIN_MEMORY_PERCENT`
    + `MIN_CPU_PERCENT`
    + `MIN_IOPS_PER_VOLUME`
    + `AFFINITY`
+ 工作負載群組參數：
  + `rds_` 不支援以 開頭的工作負載群組名稱。
  + 不允許修改內部工作負載群組。
  + 對於預設工作負載群組：
    + 只有 `REQUEST_MAX_MEMORY_GRANT_PERCENT` 參數可以修改。
    + 對於預設工作負載群組， `REQUEST_MAX_MEMORY_GRANT_PERCENT` 必須介於 1 到 70 之間。
    + 所有其他參數都已鎖定，無法變更。
  + 使用者定義的工作負載群組允許修改所有參數。
+ 分類器函數限制：
  + 分類器函數會根據指定的條件 （使用者名稱、資料庫、主機或應用程式名稱），將連線路由至自訂工作負載群組。
  + 支援最多兩個具有各自路由條件的使用者定義工作負載群組。
  + 將條件與每個群組中的`AND`條件結合。
  + 每個工作負載群組至少需要一個路由條件。
  + 僅支援上述分類方法。
  + 函數名稱必須以 開頭`rg_classifier_`。
  + 如果沒有條件相符，則預設群組指派。

# 為您的 RDS for SQL Server 執行個體啟用 Microsoft SQL Server 資源長
<a name="ResourceGovernor.Enabling"></a>

將 `RESOURCE_GOVERNOR`選項新增至 RDS for SQL Server 資料庫執行個體，以啟用資源長。請使用下列程序：

1. 建立新的選項群組或選擇現有的選項群組。

1. 將 `RESOURCE_GOVERNOR` 選項新增至選項群組。

1. 將選項群組與資料庫執行個體建立關聯。

**注意**  
透過選項群組啟用資源長不需要重新啟動。

## 建立 `RESOURCE_GOVERNOR` 的選項群組
<a name="ResourceGovernor.OptionGroup"></a>

若要啟用資源協調人員，請建立選項群組或修改對應至 SQL Server 版本和您計劃使用的資料庫執行個體版本的選項群組。若要完成此程序，請使用 AWS 管理主控台 或 AWS CLI。

### 主控台
<a name="ResourceGovernor.OptionGroup.Console"></a>

使用下列程序建立 SQL Server Enterprise Edition 2022 的選項群組。

**建立選項群組**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 選擇**建立群組**。

1. 在 **Create option group (建立選項群組)** 視窗中，執行下列動作：

   1. 針對**名稱**，輸入您 AWS 帳戶中唯一的選項群組名稱，例如 **resource-governor-ee-2022**。名稱僅可包含字母、數字與連字號。

   1. 對於 **Description (描述)**，請輸入選項群組的簡短描述，例如 **RESOURCE\$1GOVERNOR option group for SQL Server EE 2022**。用於顯示用途的說明。

   1. 針對**引擎**，選擇 **sqlserver-ee**。

   1. 針對**主要引擎版本**，選擇 **16.00**。

1. 選擇**建立**。

### CLI
<a name="ResourceGovernor.OptionGroup.CLI"></a>

下列程序會建立 SQL Server Enterprise Edition 2022 的選項群組。

**建立選項群組**
+ 請執行下列其中一個命令：  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds create-option-group \
      --option-group-name resource-governor-ee-2022 \
      --engine-name sqlserver-ee \
      --major-engine-version 16.00 \
      --option-group-description "RESOURCE_GOVERNOR option group for SQL Server EE 2022"
  ```

  在 Windows 中：

  ```
  aws rds create-option-group ^
      --option-group-name resource-governor-ee-2022 ^
      --engine-name sqlserver-ee ^
      --major-engine-version 16.00 ^
      --option-group-description "RESOURCE_GOVERNOR option group for SQL Server EE 2022"
  ```

## 將 `RESOURCE_GOVERNOR` 選項新增至選項群組
<a name="ResourceGovernor.Add"></a>

接著，使用 AWS 管理主控台 或 AWS CLI 將 `RESOURCE_GOVERNOR` 選項新增至您的選項群組。

### 主控台
<a name="ResourceGovernor.Add.Console"></a>

**新增 RESOURCE\$1GOVERNOR 選項**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 開啟 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 在此範例中，選擇您剛建立的選項群組 **resource-governor-ee-2022**。

1. 選擇 **Add option (新增選項)**。

1. 在**選項詳細資訊**下，選擇**選項名稱**的 **RESOURCE\$1GOVERNOR**。

1. 在 **Scheduling (排程)** 下，選擇要立即新增選項或是在下一個維護時段新增選項。

1. 選擇 **Add option (新增選項)**。

### CLI
<a name="ResourceGovernor.Add.CLI"></a>

**新增 `RESOURCE_GOVERNOR` 選項**
+ 將 `RESOURCE_GOVERNOR` 選項新增至選項群組。  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds add-option-to-option-group \
      --option-group-name resource-governor-ee-2022 \
      --options "OptionName=RESOURCE_GOVERNOR" \
      --apply-immediately
  ```

  在 Windows 中：

  ```
  aws rds add-option-to-option-group ^
      --option-group-name resource-governor-ee-2022 ^
      --options "OptionName=RESOURCE_GOVERNOR" ^
      --apply-immediately
  ```

## 將選項群組關聯至您的資料庫執行個體
<a name="ResourceGovernor.Apply"></a>

若要將`RESOURCE_GOVERNOR`選項群組與您的資料庫執行個體建立關聯，請使用 AWS 管理主控台 或 AWS CLI。

### 主控台
<a name="ResourceGovernor.Apply.Console"></a>

若要完成啟用資源長，請將您的`RESOURCE_GOVERNOR`選項群組與新的或現有的資料庫執行個體建立關聯：
+ 對於新的資料庫執行個體，請在啟動執行個體時將它們相關聯。如需更多詳細資訊，請參閱 [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。
+ 對於現有的資料庫執行個體，請透過修改執行個體來建立關聯。如需詳細資訊，請參閱[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

### CLI
<a name="ResourceGovernor.Apply.CLI"></a>

您可以將`RESOURCE_GOVERNOR`選項群組與新的或現有的資料庫執行個體建立關聯。

**使用`RESOURCE_GOVERNOR`選項群組建立執行個體**
+ 指定建立選項群組時所使用的相同資料庫引擎類型和主要版本。  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds create-db-instance \
      --db-instance-identifier mytestsqlserverresourcegovernorinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-ee \
      --engine-version 16.00 \
      --license-model license-included \
      --allocated-storage 100 \
      --master-username admin \
      --master-user-password password \
      --storage-type gp2 \
      --option-group-name resource-governor-ee-2022
  ```

  在 Windows 中：

  ```
  aws rds create-db-instance ^
      --db-instance-identifier mytestsqlserverresourcegovernorinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-ee ^
      --engine-version 16.00 ^
      --license-model license-included ^
      --allocated-storage 100 ^
      --master-username admin ^
      --master-user-password password ^
      --storage-type gp2 ^
      --option-group-name resource-governor-ee-2022
  ```

**修改執行個體並關聯 `RESOURCE_GOVERNOR` 選項群組**
+ 請執行下列其中一個命令：  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds modify-db-instance \
      --db-instance-identifier mytestinstance \
      --option-group-name resource-governor-ee-2022 \
      --apply-immediately
  ```

  在 Windows 中：

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier mytestinstance ^
      --option-group-name resource-governor-ee-2022 ^
      --apply-immediately
  ```

# 針對 RDS for SQL Server 執行個體使用 Microsoft SQL Server 資源長
<a name="ResourceGovernor.Using"></a>

將資源長者選項新增至選項群組後，資源長者尚未在資料庫引擎層級處於作用中狀態。若要完全啟用資源決策者，您必須使用 RDS for SQL Server 預存程序來啟用它並建立必要的資源決策者物件。如需詳細資訊，請參閱[連線至 Microsoft SQL Server 資料庫執行個體](USER_ConnectToMicrosoftSQLServerInstance.md)。

首先，連線至 SQL Server 資料庫，然後呼叫適當的 RDS for SQL Server 預存程序以完成組態。如需連接資料庫的指示，請參閱[連線至 Microsoft SQL Server 資料庫執行個體](USER_ConnectToMicrosoftSQLServerInstance.md)。

如需如何呼叫每個預存程序的相關指示，請參閱下列主題：

**Topics**
+ [管理資源集區](#ResourceGovernor.ManageResourcePool)
+ [管理工作負載群組](#ResourceGovernor.ManageWorkloadGroups)
+ [建立和註冊分類器函數](#ResourceGovernor.ClassifierFunction)
+ [捨棄分類器函數](#ResourceGovernor.DropClassifier)
+ [取消註冊分類器函數](#ResourceGovernor.DeregisterClassifier)
+ [重設統計資料](#ResourceGovernor.ResetStats)
+ [資源長組態變更](#ResourceGovernor.ConfigChanges)
+ [將 TempDB 繫結至資源集區](#ResourceGovernor.BindTempDB)
+ [從資源集區取消繫結 TempDB](#ResourceGovernor.UnbindTempDB)
+ [清除資源長](#ResourceGovernor.Cleanup)

## 管理資源集區
<a name="ResourceGovernor.ManageResourcePool"></a>

### 建立資源集區
<a name="ResourceGovernor.CreateResourcePool"></a>

在選項群組上啟用資源協調器後，您可以使用 建立自訂資源集區`rds_create_resource_pool`。這些集區可讓您將 CPU、記憶體和 IOPS 的特定百分比分配給不同的工作負載。

**用途**

```
USE [msdb]
EXEC dbo.rds_create_resource_pool    
    @pool_name=value,
    @MAX_CPU_PERCENT=value,
    @CAP_CPU_PERCENT=value,
    @MAX_MEMORY_PERCENT=value,
    @MAX_IOPS_PER_VOLUME=value
```

下列是必要參數：
+ `@group_name` - 是現有使用者定義工作負載群組的名稱。
+ `@pool_name` - 是資源集區的使用者定義名稱。 *pool\$1name* 是英數字元，最多可達 128 個字元，在資料庫引擎執行個體中必須是唯一的，並且必須符合資料庫識別符的規則。

下列是選用參數：
+ `@MAX_CPU_PERCENT` - 指定資源集區中所有請求在 CPU 爭用時接收的最大平均 CPU 頻寬。 *值*是預設設定為 100 的整數。*值*的允許範圍介於 1 到 100 之間。
+ `@CAP_CPU_PERCENT` - 指定資源集區中所有請求接收的 CPU 頻寬硬性上限。將 CPU 頻寬層級上限限制為與指定值相同。 *值*是預設設定為 100 的整數。*值*的允許範圍為 1 到 100。
+ `@MAX_MEMORY_PERCENT` - 指定此資源集區中請求可使用的查詢工作區記憶體數量上限。 *值*是預設設定為 100 的整數。*值*的允許範圍為 1 到 100。
+ `@MAX_IOPS_PER_VOLUME` - 指定每個磁碟區允許資源集區的最大每秒 I/O 操作數 (IOPS)。*值*的允許範圍是從 0 到 2^31-1 (2，147，483，647)。指定 0 以移除集區的 IOPS 限制。預設值為 0。

**範例**

使用所有預設值建立資源集區的範例：

```
--This creates resource pool 'SalesPool' with all default values
USE [msdb]
EXEC rds_create_resource_pool @pool_name = 'SalesPool';
     
--Apply changes
USE [msdb]
EXEC msdb.dbo.rds_alter_resource_governor_configuration;
     
--Validate configuration
select * from sys.resource_governor_resource_pools
```

使用不同的指定參數建立資源集區的範例：

```
--creates resource pool
USE [msdb]
EXEC dbo.rds_create_resource_pool    
@pool_name='analytics',
@MAX_CPU_PERCENT = 30,
@CAP_CPU_PERCENT = 40,
@MAX_MEMORY_PERCENT = 20;
            
--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;
    
--Validate configuration
select * from sys.resource_governor_resource_pools
```

### 變更資源集區
<a name="ResourceGovernor.AlterResourcePool"></a>

**用途**

```
USE [msdb]
EXEC dbo.rds_alter_resource_pool    
    @pool_name=value,
    @MAX_CPU_PERCENT=value,
    @CAP_CPU_PERCENT=value,
    @MAX_MEMORY_PERCENT=value,
    @MAX_IOPS_PER_VOLUME=value;
```

下列是必要參數：
+ `@pool_name` - 是現有使用者定義資源集區的名稱。Amazon RDS SQL Server 中不允許變更預設資源集區。

必須指定至少一個選用參數：
+ `@MAX_CPU_PERCENT` - 指定資源集區中所有請求在 CPU 爭用時接收的最大平均 CPU 頻寬。 *值*是預設設定為 100 的整數。*值*的允許範圍為 1 到 100。
+ `@CAP_CPU_PERCENT` - 指定資源集區中所有請求接收的 CPU 頻寬硬性上限。將 CPU 頻寬層級上限限制為與指定值相同。 *值*是預設設定為 100 的整數。*值*的允許範圍為 1 到 100。
+ `@MAX_MEMORY_PERCENT` - 指定此資源集區中請求可使用的查詢工作區記憶體數量上限。 *值*是預設設定為 100 的整數。*值*的允許範圍為 1 到 100。
+ `@MAX_IOPS_PER_VOLUME` - 指定每個磁碟區允許資源集區的最大每秒 I/O 操作數 (IOPS)。*值*的允許範圍是從 0 到 2^31-1 (2，147，483，647)。指定 0 以移除集區的 IOPS 限制。預設值為 0。

**範例**

```
--This alters resource pool
USE [msdb]
EXEC dbo.rds_alter_resource_pool    
    @pool_name='analytics',
    @MAX_CPU_PERCENT = 10,
    @CAP_CPU_PERCENT = 20,
    @MAX_MEMORY_PERCENT = 50;

--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;

--Validate configuration.
select * from sys.resource_governor_resource_pools
```

### 捨棄資源集區
<a name="ResourceGovernor.DropResourcePool"></a>

**用途**

```
USE [msdb]
EXEC dbo.rds_drop_resource_pool    
@pool_name=value;
```

以下是必要參數：
+ `@pool_name` - 是現有使用者定義資源集區的名稱。

**注意**  
SQL Server 中不允許捨棄內部或預設資源集區。

**範例**

```
--This drops resource pool
USE [msdb]
EXEC dbo.rds_drop_resource_pool    
@pool_name='analytics'

--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;

--Validate configuration
select * from sys.resource_governor_resource_pools
```

## 管理工作負載群組
<a name="ResourceGovernor.ManageWorkloadGroups"></a>

使用 和 建立和管理`rds_create_workload_group`的工作負載群組，`rds_alter_workload_group`可讓您設定查詢群組的重要性層級、記憶體授權和其他參數。

### 建立工作負載群組
<a name="ResourceGovernor.CreateWorkloadGroup"></a>

**用途**

```
USE [msdb]
EXEC dbo.rds_create_workload_group 
@group_name = value, 
@IMPORTANCE ={ LOW | MEDIUM | HIGH }, 
@REQUEST_MAX_MEMORY_GRANT_PERCENT =value, 
@REQUEST_MAX_CPU_TIME_SEC = value , 
@REQUEST_MEMORY_GRANT_TIMEOUT_SEC = value, 
@MAX_DOP = value, 
@GROUP_MAX_REQUESTS = value, 
@pool_name = value
```

下列是必要參數：
+ `@pool_name` - 是現有使用者定義資源集區的名稱。
+ `@group_name` - 是現有使用者定義工作負載群組的名稱。

下列是選用參數：
+ `@IMPORTANCE` - 指定工作負載群組中請求的相對重要性。預設值為 `MEDIUM`。
+ `@REQUEST_MAX_MEMORY_GRANT_PERCENT` - 指定單一請求可從集區取得的最大查詢工作區記憶體數量。 *值*是 所定義資源集區大小的百分比`MAX_MEMORY_PERCENT`。預設值為 25。
+ `@REQUEST_MAX_CPU_TIME_SEC` - 指定批次請求可使用的 CPU 時間上限，以秒為單位。*值*必須為 0 或正整數。*值*的預設設定為 0，這表示無限制。
+ `@REQUEST_MEMORY_GRANT_TIMEOUT_SEC` - 指定查詢可等待查詢工作區記憶體的記憶體授權變成可用的最大時間，以秒為單位。*值*必須為 0 或正整數。*值* 0 的預設設定會根據查詢成本使用內部計算來判斷最長時間。
+ `@MAX_DOP` - 指定平行查詢執行的最大平行處理程度 (`MAXDOP`)。允許*的值*範圍為 0 到 64。*值* 0 的預設設定會使用全域設定。
+ `@GROUP_MAX_REQUESTS` = 指定允許在工作負載群組中同時執行的請求數目上限。 *值*必須為 0 或正整數。*值*的預設設定為 0，並允許無限制的請求。
+ `@pool_name` = 將工作負載群組與 *pool\$1name* 識別的使用者定義資源集區或`default`資源集區建立關聯。如果未提供 *pool\$1name*，工作負載群組會與內建`default`集區相關聯。

**範例**

```
--This creates workload group named 'analytics'
USE msdb;
EXEC dbo.rds_create_workload_group 
    @group_name = 'analytics',
    @IMPORTANCE = 'HIGH',
    @REQUEST_MAX_MEMORY_GRANT_PERCENT = 25, 
    @REQUEST_MAX_CPU_TIME_SEC = 0, 
    @REQUEST_MEMORY_GRANT_TIMEOUT_SEC = 0, 
    @MAX_DOP = 0, 
    @GROUP_MAX_REQUESTS = 0, 
    @pool_name = 'analytics';

--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;
  
--Validate configuration
select * from sys.resource_governor_workload_groups
```

### 修改工作負載群組
<a name="ResourceGovernor.AlterWorkloadGroup"></a>

**用途**

```
EXEC msdb.dbo.rds_alter_workload_group
    @group_name = value,
    @IMPORTANCE = 'LOW|MEDIUM|HIGH',
    @REQUEST_MAX_MEMORY_GRANT_PERCENT = value,
    @REQUEST_MAX_CPU_TIME_SEC = value,
    @REQUEST_MEMORY_GRANT_TIMEOUT_SEC = value,
    @MAX_DOP = value,
    @GROUP_MAX_REQUESTS = value,
    @pool_name = value
```

下列是必要參數：
+ `@group_name` - 是預設或現有使用者定義工作負載群組的名稱。

**注意**  
僅支援變更預設工作負載群組上的`REQUEST_MAX_MEMORY_GRANT_PERCENT`參數。對於預設工作負載群組， `REQUEST_MAX_MEMORY_GRANT_PERCENT` 必須介於 1 到 70 之間。無法在預設工作負載群組中修改其他參數。您可以在使用者定義的工作負載群組中修改所有參數。

下列是選用參數：
+ `@IMPORTANCE` - 指定工作負載群組中請求的相對重要性。預設值為 MEDIUM。
+ `@REQUEST_MAX_MEMORY_GRANT_PERCENT` - 指定單一請求可從集區取得的最大查詢工作區記憶體數量。 *值*是 所定義資源集區大小的百分比`MAX_MEMORY_PERCENT`。預設值為 25。在 Amazon RDS 上， `REQUEST_MAX_MEMORY_GRANT_PERCENT` 必須介於 1 到 70 之間。
+ `@REQUEST_MAX_CPU_TIME_SEC` - 指定批次請求可使用的 CPU 時間上限，以秒為單位。*值*必須為 0 或正整數。*值*的預設設定為 0，這表示無限制。
+ `@REQUEST_MEMORY_GRANT_TIMEOUT_SEC` - 指定查詢可以等待來自查詢工作區記憶體的記憶體授權變成可用的最長時間，以秒為單位。*值*必須為 0 或正整數。*值* 0 的預設設定會根據查詢成本使用內部計算來判斷最長時間。
+ `@MAX_DOP` - 指定平行查詢執行的最大平行處理程度 (MAXDOP)。*值*的允許範圍為 0 到 64。*值* 0 的預設設定使用全域設定。
+ `@GROUP_MAX_REQUESTS` - 指定允許在工作負載群組中同時執行的請求數目上限。 *值*必須為 0 或正整數。*值*的預設設定為 0，並允許無限制的請求。
+ `@pool_name` - 將工作負載群組與 *pool\$1name* 識別的使用者定義資源集區建立關聯。

**範例**

修改預設工作負載群組變更 REQUEST\$1MAX\$1MEMORY\$1GRANT\$1PERCENT 的範例：

```
--Modify default workload group (set memory grant cap to 10%)
USE msdb
EXEC dbo.rds_alter_workload_group    
    @group_name = 'default',
    @REQUEST_MAX_MEMORY_GRANT_PERCENT=10;
    
--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;

--Validate configuration
SELECT * FROM sys.resource_governor_workload_groups WHERE name='default';
```

修改非預設工作負載群組的範例：

```
EXEC msdb.dbo.rds_alter_workload_group    
    @group_name = 'analytics',
    @IMPORTANCE = 'HIGH',
    @REQUEST_MAX_MEMORY_GRANT_PERCENT = 30,
    @REQUEST_MAX_CPU_TIME_SEC = 3600,
    @REQUEST_MEMORY_GRANT_TIMEOUT_SEC = 60,
    @MAX_DOP = 4,
    @GROUP_MAX_REQUESTS = 100;

--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;
```

將非預設工作負載群組移至另一個資源集區的範例：

```
EXEC msdb.dbo.rds_alter_workload_group    
@group_name = 'analytics',
@pool_name='abc'

--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;

--Validate configuration
select * from sys.resource_governor_workload_groups
```

### 捨棄工作負載群組
<a name="ResourceGovernor.DropWorkloadGroup"></a>

**用途**

```
EXEC msdb.dbo.rds_drop_workload_group    
@group_name = value
```

下列是必要參數：
+ `@group_name` - 是現有使用者定義工作負載群組的名稱。

**範例**

```
--Drops a Workload Group:
EXEC msdb.dbo.rds_drop_workload_group    
@group_name = 'analytics';

--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;

--Validate configuration
select * from sys.resource_governor_workload_groups
```

## 建立和註冊分類器函數
<a name="ResourceGovernor.ClassifierFunction"></a>

此程序會在主資料庫中建立資源協調人員分類器函數，根據指定的條件 （使用者名稱、資料庫、主機或應用程式名稱） 將連線路由至自訂工作負載群組。如果資源協調器已啟用，且在資源協調器組態中指定分類器函數，則函數輸出會決定用於新工作階段的工作負載群組。如果沒有分類器函數，所有工作階段都會分類為 `default`群組。

**功能：**
+ 支援最多兩個具有各自路由條件的工作負載群組。
+ 將條件與每個群組中的`AND`條件結合。
+ 每個工作負載群組至少需要一個路由條件。
+ 函數名稱必須以 開頭`rg_classifier_`。
+ 如果沒有條件相符，則預設群組指派。

分類器函數具有下列特性和行為：
+ 函數是在伺服器範圍 （在主資料庫中） 中定義。
+ 函數是以結構描述繫結來定義。
+ 即使啟用連線集區，也會針對每個新工作階段評估函數。
+ 函數會傳回工作階段的工作負載群組內容。工作階段會指派給分類器在工作階段生命週期內傳回的工作負載群組。
+ 如果函數傳回 NULL、預設或不存在工作負載群組的名稱，則會為工作階段提供預設工作負載群組內容。如果函數因任何原因失敗，也會提供工作階段預設內容。
+ 您可以建立多個分類器函數。不過，SQL Server 一次僅允許註冊一個分類器函數。
+ 除非使用將函數名稱設定為 NULL 的取消註冊程序 (`EXEC dbo.msdb.rds_alter_resource_governor_configuration @deregister_function = 1;`) 移除其分類器狀態，或使用 (`EXEC dbo.msdb.rds_alter_resource_governor_configuration @classifier_function = <function_name>;`) 註冊另一個分類器函數，否則無法捨棄分類器函數
+ 如果沒有分類器函數，所有工作階段都會分類為預設群組。
+ 在資源決策者組態中參考分類器函數時，您無法修改該函數。不過，您可以修改組態以使用不同的分類器函數。如果您想要變更分類器，請考慮建立一對分類器函數。例如，您可以建立 `rg_classifier_a`和 `rg_classifier_b`。

**用途**

```
EXEC msdb.dbo.rds_create_classifier_function 
@function_name = value,
@workload_group1 = value, 
@user_name1 = value,
@db_name1 = value,
@host_name1 = value, 
@app_name1 = value, 
@workload_group2 = value,
@user_name2 = value,
@db_name2 = value,
@host_name2 = value,
@app_name2 = value
```

下列是必要參數：
+ `@function_name` - 分類器函數的名稱。必須以 開頭 `rg_classifier_`
+ `@workload_group1` - 第一個工作負載群組的名稱

下列是選用參數：

（群組 1 必須指定至少其中一個條件）
+ `@user_name1` - 群組 1 的登入名稱
+ `@db_name1` - 群組 1 的資料庫名稱
+ `@host_name1` - 群組 1 的主機名稱
+ `@app_name1` - 群組 1 的應用程式名稱

（如果指定群組 2，必須至少提供一個條件）
+ `@workload_group2` - 第二個工作負載群組的名稱
+ `@user_name2` - 群組 2 的登入名稱
+ `@db_name2` - 群組 2 的資料庫名稱
+ `@host_name2` - 群組 2 的主機名稱
+ `@app_name2` - 群組 2 的應用程式名稱

**注意**  
系統帳戶、資料庫、應用程式和主機受到限制。

**範例**

一個工作負載群組的基本範例：

```
/*Create a classifier to route all requests from 'PowerBI' app to workload group 
'reporting_group'*/

EXEC msdb.dbo.rds_create_classifier_function
@function_name = 'rg_classifier_a',
@workload_group1 = 'reporting_group',
@app_name1 = 'PowerBI';

--Register the classifier
EXEC msdb.dbo.rds_alter_resource_governor_configuration
@classifier_function = 'rg_classifier_a';

-- Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration

/*Query sys.resource_governor_configuration to validate that resource governor is enabled and is using the classifier function we created and registered*/

use master
go
SELECT OBJECT_SCHEMA_NAME(classifier_function_id) AS classifier_schema_name,
       OBJECT_NAME(classifier_function_id) AS classifier_object_name,
       is_enabled
FROM sys.resource_governor_configuration;
```

## 捨棄分類器函數
<a name="ResourceGovernor.DropClassifier"></a>

**用途**

```
USE [msdb]
EXEC dbo.rds_drop_classifier_function
@function_name = value;
```

以下是必要參數：
+ `@function_name` - 是現有使用者定義分類器函數的名稱

**範例**

```
EXEC msdb.dbo.rds_drop_classifier_function
@function_name = 'rg_classifier_b';
```

## 取消註冊分類器函數
<a name="ResourceGovernor.DeregisterClassifier"></a>

使用此程序取消註冊分類器函數。取消註冊函數後，新的工作階段會自動指派給預設工作負載群組。

**用途**

```
USE [msdb]
EXEC dbo.rds_alter_resource_governor_configuration    
@deregister_function = 1;
```

若要取消註冊，需要下列參數：
+ `@deregister_function` 必須是 1

**範例**

```
EXEC msdb.dbo.rds_alter_resource_governor_configuration 
    @deregister_function = 1;
GO

-- Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;
```

## 重設統計資料
<a name="ResourceGovernor.ResetStats"></a>

資源長統計資料是自上次伺服器重新啟動後累積的。如果您需要從特定時間開始收集統計資料，您可以使用下列 Amazon RDS 預存程序重設統計資料。

**用途**

```
USE [msdb]
EXEC dbo.rds_alter_resource_governor_configuration  
@reset_statistics = 1;
```

對於重設統計資料，需要以下參數：
+ `@reset_statistics` 必須是 1

## 資源長組態變更
<a name="ResourceGovernor.ConfigChanges"></a>

未啟用資源總代理程式時， `rds_alter_resource_governor_configuration`會啟用資源總代理程式。啟用資源長有下列結果：
+ 如果有分類器函數，則會針對新工作階段執行，將它們指派給工作負載群組。
+ 系統會遵守並強制執行資源總署組態中指定的資源限制。
+ 系統會遵守並強制執行資源總署組態中指定的資源限制。
+ 啟用資源長之前存在的請求可能會受到啟用資源長時所做的任何組態變更的影響。
+ 在啟用資源長之前，現有的請求可能會受到啟用資源長時所做的任何組態變更的影響。
+ 在 RDS for SQL Server 上，`EXEC msdb.dbo.rds_alter_resource_governor_configuration`必須執行 ，才能使任何資源決策者組態變更生效。

**用途**

```
USE [msdb]
EXEC dbo.rds_alter_resource_governor_configuration
```

## 將 TempDB 繫結至資源集區
<a name="ResourceGovernor.BindTempDB"></a>

您可以使用 Amazon RDS SQL Server 2019 版及更高版本`rds_bind_tempdb_metadata_to_resource_pool`中的 ，將 tempdb 記憶體最佳化中繼資料繫結至特定資源集區。

**注意**  
必須先啟用記憶體最佳化的 tempdb 中繼資料功能，才能將 tempdb 中繼資料繫結至資源集區。若要在 Amazon RDS 上啟用此功能，其為靜態參數 `tempdb metadata memory-optimized`。

在 Amazon RDS 上啟用靜態參數，並在不容錯移轉的情況下執行重新啟動，讓參數生效：

```
aws rds modify-db-parameter-group \
    --db-parameter-group-name test-sqlserver-ee-2022 \
    --parameters "ParameterName='tempdb metadata memory-optimized',ParameterValue=True,ApplyMethod=pending-reboot"
```

**用途**

```
USE [msdb]
EXEC dbo.rds_bind_tempdb_metadata_to_resource_pool  
@pool_name=value;
```

以下是必要參數：
+ `@pool_name` - 是現有使用者定義資源集區的名稱。

**注意**  
即使已啟用記憶體最佳化的 TempDB 中繼資料功能，此變更也需要在沒有容錯移轉的情況下重新啟動 sql 服務才能生效。

## 從資源集區取消繫結 TempDB
<a name="ResourceGovernor.UnbindTempDB"></a>

從資源集區取消綁定 tempdb 記憶體最佳化中繼資料。

**注意**  
此變更也需要重新啟動 sql 服務而不容錯移轉，才能生效

**用途**

```
USE [msdb]
EXEC dbo.rds_unbind_tempdb_metadata_from_resource_pool
```

## 清除資源長
<a name="ResourceGovernor.Cleanup"></a>

此程序是在您從選項群組移除資源總代理程式選項之後，清除所有相關聯的物件。這會停用資源協調器、將預設工作負載群組還原為預設設定、移除自訂工作負載群組、資源集區和分類器函數。

**主要功能**
+ 將預設工作負載群組還原為預設設定
+ 停用資源長
+ 移除自訂工作負載群組
+ 移除自訂資源集區
+ 捨棄分類器函數
+ 如果啟用，移除 tempdb 資源集區繫結

**重要**  
如果工作負載群組上有作用中的工作階段，則此清除可能會發生錯誤。根據您的業務需求，等待作用中工作階段完成或終止作用中工作階段。建議在維護時段執行此操作。  
如果資源集區繫結至 tempdb 且尚未進行容錯移轉重新啟動，則此清除可能會發生錯誤。如果您將資源集區繫結至 tempdb，或從 tempdb 取消繫結資源集區，請執行重新啟動而不容錯移轉，讓變更生效。建議在維護時段執行此操作。

**用途**

```
USE [msdb]
EXEC dbo.rds_cleanup_resource_governor
```

## 多可用區域部署考量
<a name="ResourceGovernor.Considerations"></a>

RDS for SQL Server 會將資源長複寫到多可用區部署中的次要執行個體。您可以驗證上次與次要執行個體同步修改和新資源總管的時間。

使用下列查詢來檢查複寫`last_sync_time`的 ：

```
SELECT * from msdb.dbo.rds_fn_server_object_last_sync_time();
```

在查詢結果中，如果同步時間超過資源長更新或建立時間，則資源長會與次要同步。

若要執行手動資料庫容錯移轉以確認資源總管複寫，請等待 `last_sync_time` 先更新。然後，繼續進行多可用區域容錯移轉。

## 僅供讀取複本的考量
<a name="ResourceGovernor.ReadReplica"></a>
+ 對於與來源資料庫執行個體位於相同區域中的 SQL Server 複本，請使用與來源相同的選項群組。選項群組的變更會立即傳播至複本，無論其維護時段為何。
+ 當您建立 SQL Server 跨區域複本時，RDS 會為其建立專用選項群組。
+ 您無法從專用選項群組中移除 SQL Server 跨區域複本。其他資料庫執行個體都不能使用 SQL Server 跨區域複本的專用選項群組。
+ 資源長選項是未複寫的選項。您可以從專用選項群組新增或移除下列非複寫選項：
+ 當您提升 SQL Server 跨區域僅供讀取複本時，提升的複本就像其他 SQL Server 資料庫執行個體一樣運作，包括管理其選項。

**注意**  
在僅供讀取複本上使用 Resource Governor 時，您必須手動確保在將選項新增至選項群組之後，已在僅供讀取複本上使用 Amazon RDS 預存程序設定資源 Governor。資源管理員組態不會自動複寫至僅供讀取複本。此外，僅供讀取複本上的工作負載通常與主要執行個體不同。因此，建議您根據您的工作負載和執行個體類型，在複本上套用資源組態。您可以在僅供讀取複本上獨立執行這些 Amazon RDS 預存程序，以在僅供讀取複本上設定資源長。

# 使用 RDS for SQL Server 執行個體的系統檢視來監控 Microsoft SQL Server 資源長
<a name="ResourceGovernor.Monitoring"></a>

資源管理員統計資料是自上次伺服器重新啟動後累積的。如果您需要從特定時間開始收集統計資料，您可以使用下列 Amazon RDS 預存程序重設統計資料：

```
EXEC msdb.dbo.rds_alter_resource_governor_configuration  
@reset_statistics = 1;
```

## 資源集區執行時間統計資料
<a name="ResourceGovernor.ResourcePoolStats"></a>

針對每個資源集區，資源局會追蹤 CPU 和記憶體使用率、out-of-memory事件、記憶體授權、I/O 和其他統計資料。如需詳細資訊，請參閱 [ sys.dm\$1resource\$1governor\$1resource\$1pools](https://learn.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-resource-governor-resource-pools-transact-sql?view=sql-server-ver17)。

下列查詢會傳回所有資源集區的可用統計資料子集：

```
SELECT rp.pool_id,
       rp.name AS resource_pool_name,
       wg.workload_group_count,
       rp.statistics_start_time,
       rp.total_cpu_usage_ms,
       rp.target_memory_kb,
       rp.used_memory_kb,
       rp.out_of_memory_count,
       rp.active_memgrant_count,
       rp.total_memgrant_count,
       rp.total_memgrant_timeout_count,
       rp.read_io_completed_total,
       rp.write_io_completed_total,
       rp.read_bytes_total,
       rp.write_bytes_total,
       rp.read_io_stall_total_ms,
       rp.write_io_stall_total_ms
FROM sys.dm_resource_governor_resource_pools AS rp
OUTER APPLY (
            SELECT COUNT(1) AS workload_group_count
            FROM sys.dm_resource_governor_workload_groups AS wg
            WHERE wg.pool_id = rp.pool_id
            ) AS wg;
```

# 停用 RDS for SQL Server 執行個體的 Microsoft SQL Server 資源長
<a name="ResourceGovernor.Disabling"></a>

當您在 RDS for SQL Server 上停用資源長時，服務會停止管理工作負載資源。在您停用資源長之前，請檢閱這如何影響您的資料庫連線和組態。

停用資源長有下列結果：
+ 開啟新連線時，不會執行分類器函數。
+ 新的連線會自動分類為預設工作負載群組。
+ 所有現有的工作負載群組和資源集區設定都會重設為其預設值。
+ 達到限制時不會觸發任何事件。
+ 您可以進行資源長組態變更，但變更在資源長啟用之前不會生效。

若要停用資源長，請從其`RESOURCE_GOVERNOR`選項群組中移除 選項。

## 主控台
<a name="ResourceGovernor.Disabling.Console"></a>

下列程序會移除 `RESOURCE_GOVERNOR` 選項。

**從選項群組中移除 RESOURCE\$1GOVERNOR 選項**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 選擇具有 `RESOURCE_GOVERNOR` 選項的選項群組 (上述範例中的 `resource-governor-ee-2022`)。

1. 選擇 **Delete option (刪除選項)**。

1. 在**刪除選項**下，為**要刪除的選項**選擇 **RESOURCE\$1GOVERNOR**。

1. 在 **Apply immediately** (立即套用) 下，選擇 **Yes** (是) 立即刪除選項，或選擇 **No** (否) 在下一個維護時段將其刪除。

1. 選擇 **刪除**。

## CLI
<a name="ResourceGovernor.Disabling.CLI"></a>

下列程序會移除 `RESOURCE_GOVERNOR` 選項。

**從選項群組中移除 RESOURCE\$1GOVERNOR 選項**
+ 請執行下列其中一個命令：  
**Example**  

  針對 Linux、macOS 或 Unix：

  ```
  aws rds remove-option-from-option-group \
      --option-group-name resource-governor-ee-2022 \
      --options RESOURCE_GOVERNOR \
      --apply-immediately
  ```

  在 Windows 中：

  ```
  aws rds remove-option-from-option-group ^
      --option-group-name resource-governor-ee-2022 ^
      --options RESOURCE_GOVERNOR ^
      --apply-immediately
  ```

# 在 RDS for SQL Server 上設定資源長的最佳實務
<a name="ResourceGovernor.BestPractices"></a>

為了控制資源消耗，RDS for SQL Server 支援 Microsoft SQL Server 資源長。下列最佳實務可協助您避免常見的組態問題，並最佳化資料庫效能。

1. 資源長組態會存放在 `master` 資料庫中。建議您一律分別儲存資源總長組態指令碼的副本。

1. 分類器函數會延長登入處理時間，因此建議避免分類器中的複雜邏輯。過於複雜的函數可能會導致登入延遲或連線逾時，包括 Amazon RDS 自動化工作階段。這可能會影響 Amazon RDS 自動化監控執行個體運作狀態的能力。因此，在生產環境實作 之前，一律建議在生產前環境中測試分類器函數。

1. 避免在工作負載群組`REQUEST_MAX_MEMORY_GRANT_PERCENT`中為 設定高值 （超過 70)，因為這可能會阻止資料庫執行個體為其他並行查詢配置足夠的記憶體，進而可能導致記憶體授予逾時錯誤 （錯誤 8645)。相反地，將此值設定為太低 （小於 1) 或設為 0 可能會阻止需要記憶體工作區的查詢 （例如涉及排序或雜湊操作的查詢） 在使用者定義的工作負載群組中正確執行。RDS 會在預設工作負載群組上將值限制在 1 到 70 之間，以強制執行這些限制。

1. 對於將 tempdb 繫結至資源集區，在將記憶體最佳化的 tempdb 中繼資料繫結至集區之後，集區可能會達到其最大設定，而使用 的任何查詢`tempdb`可能會因為out-of-memory錯誤而失敗。在某些情況下，如果發生out-of-memory錯誤，SQL Server 可能會停止。若要降低發生這種情況的機率，請將記憶體集區的 `MAX_MEMORY_PERCENT`設定為高值。

# Amazon RDS for Microsoft SQL Server 的常用 DBA 任務
<a name="Appendix.SQLServer.CommonDBATasks"></a>

本節針對執行 Microsoft SQL Server 資料庫引擎的資料庫執行個體，說明一些一般 DBA 任務的 Amazon RDS 特定實作。為提供受管服務體驗，Amazon RDS 不提供資料庫執行個體的殼層存取權，而且會限制存取某些需要進階權限的系統程序和資料表。

**注意**  
使用 SQL Server 資料庫執行個體時，您可以執行指令碼來修改新建立的資料庫，但無法修改 [model] 資料庫，即用做為新資料庫模型的資料庫。

**Topics**
+ [在 Amazon RDS 上存取 Microsoft SQL Server 資料庫執行個體上的 tempdb 資料庫](SQLServer.TempDB.md)
+ [使用 Database Engine Tuning Advisor 分析 Amazon RDS for SQL Server 資料庫執行個體上的資料庫工作負載](Appendix.SQLServer.CommonDBATasks.Workload.md)
+ [將 Amazon RDS for SQL Server 資料庫的 `db_owner` 變更為 `rdsa` 帳戶](Appendix.SQLServer.CommonDBATasks.ChangeDBowner.md)
+ [管理 Amazon RDS for Microsoft SQL Server 的定序和字元集](Appendix.SQLServer.CommonDBATasks.Collation.md)
+ [為 Amazon RDS for SQL Server 建立資料庫使用者](Appendix.SQLServer.CommonDBATasks.CreateUser.md)
+ [判斷 Amazon RDS for SQL Server 資料庫的復原模型](Appendix.SQLServer.CommonDBATasks.DatabaseRecovery.md)
+ [判斷 Amazon RDS for SQL Server 的上次容錯移轉時間](Appendix.SQLServer.CommonDBATasks.LastFailover.md)
+ [針對因日誌序號差距而導致的時間點復原失敗進行疑難排解](Appendix.SQLServer.CommonDBATasks.PITR-LSN-Gaps.md)
+ [拒絕或允許檢視 Amazon RDS for SQL Server 的資料庫名稱](Appendix.SQLServer.CommonDBATasks.ManageView.md)
+ [在大量載入 Amazon RDS for SQL Server 期間停用快速插入](Appendix.SQLServer.CommonDBATasks.DisableFastInserts.md)
+ [在 Amazon RDS for Microsoft SQL Server 資料庫執行個體中捨棄資料庫](Appendix.SQLServer.CommonDBATasks.DropMirrorDB.md)
+ [重新命名多可用區域部署中的 Amazon RDS for Microsoft SQL Server 資料庫](Appendix.SQLServer.CommonDBATasks.RenamingDB.md)
+ [重設 Amazon RDS for SQL Server 主要使用者的 db\$1owner 角色成員資格](Appendix.SQLServer.CommonDBATasks.ResetPassword.md)
+ [還原 Amazon RDS for SQL Server 的授權終止資料庫執行個體](Appendix.SQLServer.CommonDBATasks.RestoreLTI.md)
+ [將 Amazon RDS for SQL Server 資料庫從「離線」轉移至「線上」](Appendix.SQLServer.CommonDBATasks.TransitionOnline.md)
+ [使用 Amazon RDS for SQL Server 的變更資料擷取](Appendix.SQLServer.CommonDBATasks.CDC.md)
+ [使用 SQL Server Agent for Amazon RDS](Appendix.SQLServer.CommonDBATasks.Agent.md)
+ [使用 Amazon RDS for Microsoft SQL Server 日誌](Appendix.SQLServer.CommonDBATasks.Logs.md)
+ [使用 Amazon RDS for SQL Server 的追蹤和傾印檔案](Appendix.SQLServer.CommonDBATasks.TraceFiles.md)

# 在 Amazon RDS 上存取 Microsoft SQL Server 資料庫執行個體上的 tempdb 資料庫
<a name="SQLServer.TempDB"></a>

您可以在 Amazon RDS 上存取 Microsoft SQL Server 資料庫執行個體上的 `tempdb` 資料庫。您可以使用 Transact-SQL 透過 Microsoft SQL Server Management Studio (SSMS)，或任何其他標準 SQL 用戶端應用程式，在 `tempdb` 上執行程式碼。如需連接至資料庫執行個體的詳細資訊，請參閱[連線至 Microsoft SQL Server 資料庫執行個體](USER_ConnectToMicrosoftSQLServerInstance.md)。

資料庫執行個體的主要使用者會獲授予 `CONTROL` 的 `tempdb` 存取權，以便此使用者可以修改 `tempdb` 資料庫選項。主要使用者不是 `tempdb` 資料庫的資料庫擁有者。必要時，主要使用者可將 `CONTROL` 存取權授予其他使用者，以便他們也可以修改 `tempdb` 資料庫選項。

**注意**  
您無法在 `tempdb` 資料庫上執行資料庫主控台命令 (DBCC)。

# 修改 tempdb 資料庫選項
<a name="SQLServer.TempDB.Modifying"></a>

您可以在 Amazon RDS 資料庫執行個體上修改 `tempdb` 資料庫上的資料庫選項。如需可以修改哪些選項的詳細資訊，請參閱 Microsoft 文件中的 [tempdb 資料庫](https://msdn.microsoft.com/en-us/library/ms190768%28v=sql.120%29.aspx)。

在重新啟動您的資料庫執行個體之後，檔案大小上限選項之類的資料庫選項會持續存在。您可以修改資料庫選項，以在匯入資料時將效能提高到最佳化，並避免用光儲存體。

## 匯入資料時將效能提高到最佳化
<a name="SQLServer.TempDB.Modifying.Import"></a>

在將大量資料匯入至資料庫執行個體時，若要將效能提高到最佳化，請將 tempdb 資料庫的 `SIZE` 和 `FILEGROWTH` 屬性設定為大數字。如需如何將 `tempdb` 最佳化的詳細資訊，請參閱 Microsoft 文件中的[將 tempdb 效能最佳化](https://technet.microsoft.com/en-us/library/ms175527%28v=sql.120%29.aspx)。

下列範例示範將大小設定為 100 GB，並將檔案成長率設定為 10%。

```
1. alter database[tempdb] modify file (NAME = N'templog', SIZE=100GB, FILEGROWTH = 10%)
```

## 防止儲存體問題
<a name="SQLServer.TempDB.Modifying.Full"></a>

若要防止 `tempdb` 資料庫使用所有可用的磁碟空間，請設定 `MAXSIZE` 屬性。下列範例示範將屬性設定為 2048 MB。

```
1. alter database [tempdb] modify file (NAME = N'templog', MAXSIZE = 2048MB)
```

# 縮減 tempdb 資料庫
<a name="SQLServer.TempDB.Shrinking"></a>

有兩種方式可縮減 Amazon RDS 資料庫執行個體上的 `tempdb` 資料庫。您可以使用 `rds_shrink_tempdbfile` 程序，或設定 `SIZE` 屬性。

## 使用 rds\$1shrink\$1tempdbfile 程序
<a name="SQLServer.TempDB.Shrinking.Proc"></a>

您可以使用 Amazon RDS 程序 `msdb.dbo.rds_shrink_tempdbfile`，來縮減 `tempdb` 資料庫。只有在您對 `rds_shrink_tempdbfile` 具有 `CONTROL` 存取權時，才能呼叫 `tempdb`。當您呼叫 `rds_shrink_tempdbfile` 時，資料庫執行個體沒有停機時間。

`rds_shrink_tempdbfile` 程序具有下列參數。


****  

| 參數名稱 | 資料類型 | 預設 | 必要 | 描述 | 
| --- | --- | --- | --- | --- | 
| `@temp_filename` | SYSNAME | — | 必要 | 要縮減之檔案的邏輯名稱。 | 
| `@target_size` | int | null | 選擇性 | 檔案的新大小 (以 MB 為單位)。 | 

下列範例會取得 `tempdb` 資料庫的檔案名稱。

```
1. use tempdb;
2. GO
3. 
4. select name, * from sys.sysfiles;
5. GO
```

下列範例會縮減名為 `tempdb` 的 `test_file` 資料庫檔案，並要求 `10` MB 的新大小：

```
1. exec msdb.dbo.rds_shrink_tempdbfile @temp_filename = N'test_file', @target_size = 10;
```

## 設定 SIZE 屬性
<a name="SQLServer.TempDB.Shrinking.Size"></a>

您也可以設定 `tempdb` 屬性，然後重新啟動資料庫執行個體，來縮減 `SIZE` 資料庫。如需重新啟動資料庫執行個體的詳細資訊，請參閱[在資料庫執行個體](USER_RebootInstance.md)。

下列範例示範將 `SIZE` 屬性設定為 1024 MB。

```
1. alter database [tempdb] modify file (NAME = N'templog', SIZE = 1024MB)
```

# 多可用區域部署的 TempDB 組態
<a name="SQLServer.TempDB.MAZ"></a>

如果您的 RDS for SQL Server 資料庫執行個體位於使用資料庫鏡像 (DBM) 或 Always On 可用群組 (AG) 的多可用區域部署中，請留意下列關於使用 `tempdb` 資料庫的考量。

您無法將 `tempdb` 資料從主要資料庫執行個體複寫至次要資料庫執行個體。當您容錯移轉至次要資料庫執行個體時，該次要資料庫執行個體上的 `tempdb` 會是空的。

您可以將 `tempdb` 資料庫選項的組態 (包括其檔案大小和自動增長設定) 從主要資料庫執行個體同步到次要資料庫執行個體。所有 RDS for SQL Server 版本都支援同步 `tempDB` 組態。您可以使用下列預存程序開啟 `tempdb` 組態的自動同步：

```
EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = 'TempDbFile';
```

**重要**  
使用 `rds_set_system_database_sync_objects` 預存程序之前，請確定您已在主要資料庫執行個體上設定偏好的 `tempdb` 組態，而不是在次要資料庫執行個體上設定。如果在次要資料庫執行個體上進行組態變更，當您開啟自動同步時，您偏好的 `tempdb` 組態可能會遭到刪除。

您可以使用下列函數來確認 `tempdb` 組態的自動同步是否已開啟：

```
SELECT * from msdb.dbo.rds_fn_get_system_database_sync_objects();
```

當 `tempdb` 組態的自動同步開啟時，`object_class` 欄位會有傳回值。關閉時則不會傳回任何值。

您可以使用下列函數，找出物件上次同步的時間 (UTC 時間)。

```
SELECT * from msdb.dbo.rds_fn_server_object_last_sync_time();
```

例如，如果您在 01:00 修改了 `tempdb` 組態，然後執行 `rds_fn_server_object_last_sync_time` 函數，則 `last_sync_time` 傳回的值應該在 01:00 之後，表示發生了自動同步。

如果您也使用 SQL Server Agent 任務複寫，您可以在 `@object_type` 參數中提供相關物件，以啟用 SQL Agent 任務和 `tempdb` 組態的複寫：

```
EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = 'SQLAgentJob,TempDbFile';
```

如需 SQL Server Agent 任務複寫的詳細資訊，請參閱 [開啟 SQL Server Agent 任務複寫](Appendix.SQLServer.CommonDBATasks.Agent.md#SQLServerAgent.Replicate)。

除了使用 `rds_set_system_database_sync_objects` 預存程序來確保 `tempdb` 組態變更會自動同步外，您也可以使用下列其中一種手動方法：

**注意**  
建議您使用 `rds_set_system_database_sync_objects` 預存程序開啟 `tempdb` 組態的自動同步。使用自動同步，您即無須在每次變更 `tempdb` 組態時執行這些手動任務。
+ 首先修改您的資料庫執行個體並關閉異地同步備份，然後修改 tempdb，最後再次開啟異地同步備份。此方法不涉及任何停機時間。

  如需更多詳細資訊，請參閱 [修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。
+ 首先修改原始主要執行個體中的 `tempdb`，然後手動容錯移轉，最後修改新主要執行個體中的 `tempdb`。此方法涉及停機時間。

  如需詳細資訊，請參閱 [在資料庫執行個體](USER_RebootInstance.md)。

# 使用 Database Engine Tuning Advisor 分析 Amazon RDS for SQL Server 資料庫執行個體上的資料庫工作負載
<a name="Appendix.SQLServer.CommonDBATasks.Workload"></a>

Database Engine Tuning Advisor 為 Microsoft 提供的一項用戶端應用程式，可分析資料庫工作負載並可根據您執行的查詢，為 Microsoft SQL Server 資料庫建議一組理想的索引。如同 SQL Server Management Studio，您可以從與您執行 SQL Server 的 Amazon RDS 資料庫執行個體連接的用戶端電腦執行 Tuning Advisor。用戶端電腦可以是在您自己網路內的現場部署執行的本機電腦，也可以是在與 Amazon RDS 資料庫執行個體相同區域中執行的 Amazon EC2 Windows 執行個體。

此小節顯示如何擷取工作負載供 Tuning Advisor 分析。這是擷取工作負載偏好的程序，因為 Amazon RDS 會限制主機對 SQL Server 執行個體的存取。如需詳細資訊，請參閱 Microsoft 文件中的 [Database Engine Tuning Advisor](https://docs.microsoft.com/en-us/sql/relational-databases/performance/database-engine-tuning-advisor)。

若要使用 Tuning Advisor，您必須向建議程式提供名為工作負載的內容。工作負載是一組 Transact-SQL 陳述式，它會對您想要調校的一或多個資料庫執行。在調校資料庫時，Database Engine Tuning Advisor 使用追蹤檔案、追蹤資料表、Transact-SQL 指令碼或 XML 檔案做為工作負載輸入。使用 Amazon RDS 時，工作負載可以是用戶端電腦上的檔案，或可供用戶端電腦存取之 Amazon RDS for SQL Server 資料庫上的資料庫資料表。檔案或資料表必須包含對您要調校之資料庫的查詢 (採用適合重播的格式)。

若要讓 Tuning Advisor 更有效，工作負載應該盡可能實際。您可以透過對資料庫執行個體執行追蹤來產生工作負載檔案或資料表。執行追蹤時，您可以在資料庫執行個體上模擬負載或使用一般負載執行應用程式。

有兩個類型的追蹤：用戶端和伺服器端。您可以輕鬆設定用戶端追蹤，且可以在 SQL Server Profiler 中即時監看擷取的追蹤事件。伺服器端追蹤的設定較複雜，因此需要編寫一些 Transact-SQL 指令碼。此外，因為會將追蹤寫入 Amazon RDS 資料庫執行個體上的檔案，因此追蹤會耗用儲存空間。務必追蹤執行伺服器端追蹤所使用的儲存空間，因為資料庫執行個體可能進入儲存空間滿載的狀態，因此如果儲存空間用完將不再可用。

針對用戶端追蹤，在 SQL Server Profiler 中擷取了足夠數量的追蹤資料時，接著您可以透過將追蹤儲存到您本機電腦上的檔案或可供用戶端電腦存取的資料庫執行個體上的資料庫資料表，藉此產生工作負載檔案。使用用戶端追蹤的主要缺點是該追蹤在繁重負載的情況下，可能不會擷取所有查詢。這可能會削弱 Database Engine Tuning Advisor 所執行分析的有效性。如果需要在繁重負載下執行追蹤，並想要確保它可擷取追蹤工作階段期間的每個查詢，您應該使用伺服器端追蹤。

針對伺服器端追蹤，您必須將資料庫執行個體上的追蹤檔案放入合適的工作負載檔案中，或您可以在追蹤完成之後將追蹤儲存至資料庫執行個體上的資料表。您可以使用 SQL Server Profiler 將追蹤儲存至本機電腦上的檔案，或是從資料庫執行個體上的追蹤資料表讀取 Tuning Advisor。

# 在 SQL Server 資料庫執行個體上執行用戶端追蹤
<a name="Appendix.SQLServer.CommonDBATasks.TuningAdvisor.ClientSide"></a>

 **在 SQL Server 資料庫執行個體上執行用戶端追蹤** 

1. 啟動 SQL Server Profiler。它安裝在 SQL Server 執行個體資料夾的 Performance Tools 資料夾。您必須載入或定義追蹤定義範本才能開始用戶端追蹤。

1. 在 SQL Server Profiler File (檔案) 選單中，選擇 **New Trace (新增追蹤)**。在 **Connect to Server (連接至伺服器)** 對話方塊中，輸入您想要對其執行追蹤之資料庫的資料庫執行個體端點、連接埠、主要使用者名稱和密碼。

1. 在 **Trace Properties (追蹤屬性)** 對話方塊中，輸入追蹤名稱並選擇追蹤定義範本。應用程式隨附了預設的範本 TSQL\$1Replay。您可以編輯此範本來定義追蹤。在 **Trace Properties (追蹤屬性)** 對話方塊的 **Events Selection (事件選取)** 標籤下編輯事件和事件資訊。

   如需追蹤定義範本和使用 SQL Server Profiler 來指定用戶端追蹤的詳細資訊，請參閱 Microsoft 文件中的 [Database Engine Tuning Advisor](https://docs.microsoft.com/en-us/sql/relational-databases/performance/database-engine-tuning-advisor)。

1. 開始用戶端追蹤，並在對資料庫執行個體執行追蹤時即時監看 SQL 查詢。

1. 完成追蹤時從 **File (檔案)** 功能表選取 **Stop Trace (停止追蹤)**。將結果儲存為檔案或儲存為資料庫執行個體上的追蹤資料表。

# 在 SQL Server 資料庫執行個體上執行伺服器端追蹤
<a name="Appendix.SQLServer.CommonDBATasks.TuningAdvisor.ServerSide"></a>

編寫指令碼來建立伺服器端追蹤的操作可能很複雜，並且不在此文件的範圍。此小節包含您可以用作範例的範例指令碼。利用用戶端追蹤時，目標是要建立您可以使用 Database Engine Tuning Advisor 來開啟的工作負載檔案或追蹤資料表。

下列是會開始伺服器端追蹤並將詳細資料擷取至工作負載檔案之縮減的範例指令碼。此追蹤最初是將檔案儲存至 D:\$1RDSDBDATA\$1Log 目錄中的 RDSTrace.trc，並且每 100 MB 輪替，因此後續的追蹤檔案名為 RDSTrace\$11.trc、RDSTrace\$12.trc 等等。

```
DECLARE @file_name NVARCHAR(245) = 'D:\RDSDBDATA\Log\RDSTrace';
DECLARE @max_file_size BIGINT = 100;
DECLARE @on BIT = 1
DECLARE @rc INT
DECLARE @traceid INT

EXEC @rc = sp_trace_create @traceid OUTPUT, 2, @file_name, @max_file_size
IF (@rc = 0) BEGIN
   EXEC sp_trace_setevent @traceid, 10, 1, @on
   EXEC sp_trace_setevent @traceid, 10, 2, @on
   EXEC sp_trace_setevent @traceid, 10, 3, @on
 . . .
   EXEC sp_trace_setfilter @traceid, 10, 0, 7, N'SQL Profiler'
   EXEC sp_trace_setstatus @traceid, 1
   END
```

下列範例是停止追蹤的指令碼。請注意，先前的指令碼建立的追蹤會繼續執行，直到您明確停止追蹤或該程序用完磁碟空間為止。

```
DECLARE @traceid INT
SELECT @traceid = traceid FROM ::fn_trace_getinfo(default) 
WHERE property = 5 AND value = 1 AND traceid <> 1 

IF @traceid IS NOT NULL BEGIN
   EXEC sp_trace_setstatus @traceid, 0
   EXEC sp_trace_setstatus @traceid, 2
END
```

您可以將伺服器端追蹤結果儲存至資料庫資料表，並透過使用 fn\$1trace\$1gettable 函數，將資料庫資料表用作 Tuning Advisor 的工作負載。下列命令會將 D:\$1rdsdbdata\$1Log 目錄中名為 RDSTrace.trc 之所有檔案的結果 (包括所有輪替檔案 (像是 RDSTrace\$11.trc)) 載入目前資料庫中名為 RDSTrace 的資料表。

```
SELECT * INTO RDSTrace
FROM fn_trace_gettable('D:\rdsdbdata\Log\RDSTrace.trc', default);
```

若要將特定輪替檔案儲存至資料表，例如 RDSTrace\$11.trc 檔案，請指定輪替檔案的名稱並將 1 替換，而非使用預設值做為傳遞至 fn\$1Trace\$1gettable 的最後一個參數。

```
SELECT * INTO RDSTrace_1
FROM fn_trace_gettable('D:\rdsdbdata\Log\RDSTrace_1.trc', 1);
```

# 使用追蹤執行 Tuning Advisor
<a name="Appendix.SQLServer.CommonDBATasks.TuningAdvisor.Running"></a>

建立追蹤做為本機檔案或資料庫資料表後，接著您可以對資料庫執行個體執行 Tuning Advisor。使用 Tuning Advisor 搭配 Amazon RDS 與使用獨立式、遠端 SQL Server 執行個體時是相同的程序。您可以在用戶端機器上使用 Tuning Advisor UI 或從命令列使用 dta.exe 公用程式。在這兩個情況下，使用 Tuning Advisor 時，您都必須使用資料庫執行個體的端點連接至 Amazon RDS 資料庫執行個體，並提供您的主要使用者名稱和主要使用者密碼。

下列程式碼範例示範對具有 **dta.cnazcmklsdei.us-east-1.rds.amazonaws.com** 端點的 Amazon RDS 資料庫執行個體使用 dta.exe 命令列公用程式。此範例包括主要使用者名稱 **admin** 和主要使用者密碼 **test**，要調整的範例資料庫命名為名為 **C:\$1RDSTrace.trc** 的機器。範例命令列程式碼也會指定名為 **RDSTrace1** 的追蹤工作階段，並將名為 **RDSTrace.sql** 之本機機器的輸出檔案表示為 SQL 輸出指令碼，將 **RDSTrace.txt** 表示為結果檔案，以及將 **RDSTrace.xml** 表示為分析的 XML 檔案。在名為 **RDSTraceErrors** 的 RDSDTA 資料庫上也指定了一個錯誤資料表。

```
dta -S dta.cnazcmklsdei.us-east-1.rds.amazonaws.com -U admin -P test -D RDSDTA -if C:\RDSTrace.trc -s RDSTrace1 -of C:\ RDSTrace.sql -or C:\ RDSTrace.txt -ox C:\ RDSTrace.xml -e RDSDTA.dbo.RDSTraceErrors 
```

這是相同的範例命令列程式碼，除了輸入工作負載是名為 **RDSTrace** (位於 **RDSDTA** 資料庫) 的遠端 Amazon RDS 執行個體上的資料表。

```
dta -S dta.cnazcmklsdei.us-east-1.rds.amazonaws.com -U admin -P test -D RDSDTA -it RDSDTA.dbo.RDSTrace -s RDSTrace1 -of C:\ RDSTrace.sql -or C:\ RDSTrace.txt -ox C:\ RDSTrace.xml -e RDSDTA.dbo.RDSTraceErrors
```

如需 dta 公用程式命令列參數的完整清單，請參閱 Microsoft 文件中的 [dta 公用程式](https://docs.microsoft.com/en-us/sql/tools/dta/dta-utility)。

# 將 Amazon RDS for SQL Server 資料庫的 `db_owner` 變更為 `rdsa` 帳戶
<a name="Appendix.SQLServer.CommonDBATasks.ChangeDBowner"></a>

當您在 RDS for SQL Server 資料庫執行個體中建立或還原資料庫時，Amazon RDS 會將資料庫的擁有者設定為 `rdsa`。如果您的多可用區部署使用 SQL Server Database Mirroring (DBM) 或 Always On 可用性群組 (AGs)，則 Amazon RDS 會將次要資料庫執行個體上的資料庫擁有者設定為 `NT AUTHORITY\SYSTEM`。次要資料庫執行個體提升為主要角色之前，次要資料庫的擁有者無法變更。大多數情況下，在執行查詢時，將資料庫擁有者設定為 `NT AUTHORITY\SYSTEM` 並不成問題，但是在執行系統預存程序 (例如，需要有提高的許可才能執行的 `sys.sp_updatestats`) 時，可能會擲回錯誤。

您可以使用下列查詢來識別 `NT AUTHORITY\SYSTEM` 所擁有資料庫的擁有者：

```
SELECT name FROM sys.databases WHERE SUSER_SNAME(owner_sid) = 'NT AUTHORITY\SYSTEM';
```

您可以使用 Amazon RDS 預存程序 `rds_changedbowner_to_rdsa` 將資料庫擁有者變更為 `rdsa`。下列資料庫不允許搭配 `rds_changedbowner_to_rdsa` 使用：`master, model, msdb, rdsadmin, rdsadmin_ReportServer, rdsadmin_ReportServerTempDB, SSISDB`。

若要將資料庫擁有者變更為 `rdsa`，請呼叫 `rds_changedbowner_to_rdsa` 預存程序並提供資料庫的名稱。

**Example 使用方式：**  

```
exec msdb.dbo.rds_changedbowner_to_rdsa 'TestDB1';
```

以下是必要參數：
+ `@db_name`：要將其資料庫擁有者變更為 `rdsa` 的資料庫名稱。

**重要**  
您無法使用 `rds_changedbowner_to_rdsa` 將資料庫的擁有權變更為 `rdsa` 以外的登入。例如，您無法將擁有權變更為您用來建立資料庫的登入。若要在無法使用其他資料庫使用者授予成員資格時，為主要使用者還原 `db_owner` 角色中遺失的成員資格，請重設主要使用者密碼以取得 `db_owner` 角色的成員資格。如需詳細資訊，請參閱[重設 Amazon RDS for SQL Server 主要使用者的 db\$1owner 角色成員資格](Appendix.SQLServer.CommonDBATasks.ResetPassword.md)。

# 管理 Amazon RDS for Microsoft SQL Server 的定序和字元集
<a name="Appendix.SQLServer.CommonDBATasks.Collation"></a>

本主題提供如何管理 Amazon RDS 中 Microsoft SQL Server 的定序和字元集的指引。它說明如何在資料庫建立期間設定定序，並在稍後進行修改，以確保根據語言和地區設定要求適當處理文字資料。此外，它涵蓋了在 Amazon RDS 中維護 SQL Server 環境中相容性和效能的最佳實務。

SQL Server 支援在多個層級的定序。您在建立資料庫執行個體時會設定預設伺服器定序。您可以在資料庫、資料表或欄層級覆寫定序。

**Topics**
+ [Microsoft SQL Server 的伺服器層級定序](#Appendix.SQLServer.CommonDBATasks.Collation.Server)
+ [Microsoft SQL Server 的資料庫層級定序](#Appendix.SQLServer.CommonDBATasks.Collation.Database-Table-Column)

## Microsoft SQL Server 的伺服器層級定序
<a name="Appendix.SQLServer.CommonDBATasks.Collation.Server"></a>

在建立 Microsoft SQL Server 資料庫執行個體時，您可以設定要使用的伺服器定序。如果您沒有選擇不同的定序，伺服器層級定序預設為 SQL\$1Latin1\$1General\$1CP1\$1CI\$1AS。依預設，會將伺服器定序套用到所有資料庫和資料庫物件。

**注意**  
從資料庫快照還原時，無法變更定序。

Amazon RDS 目前支援以下伺服器定序：


| 定序 | Description | 
| --- | --- | 
|  Arabic\$1CI\$1AS  |  阿拉伯文、不區分大小寫、區分重音、不區分假名、不區分寬度  | 
|  Chinese\$1PRC\$1BIN2  |  Chinese-PRC，二進位代碼點排序順序  | 
|  Chinese\$1PRC\$1CI\$1AS  |  Chinese-PRC、不區分大小寫、區分重音、不區分假名、不區分寬度  | 
|  Chinese\$1Taiwan\$1Stroke\$1CI\$1AS  |  Chinese-Taiwan-Stroke、不區分大小寫、區分重音、不區分假名、不區分寬度  | 
|  Danish\$1Norwegian\$1CI\$1AS  |  Danish-Norwegian、不區分大小寫、區分重音、不區分假名、不區分寬度  | 
|  Danish\$1Norwegian\$1CI\$1AS\$1KS  |  Danish-Norwegian、不區分大小寫、區分重音、區分假名、不區分寬度  | 
|  Danish\$1Norwegian\$1CI\$1AS\$1KS\$1WS  |  Danish-Norwegian、不區分大小寫、區分重音、區分假名、區分寬度  | 
|  Danish\$1Norwegian\$1CI\$1AS\$1WS  |  Danish-Norwegian、不區分大小寫、區分重音、不區分假名、區分寬度  | 
|  Danish\$1Norwegian\$1CS\$1AI  |  Danish-Norwegian、區分大小寫、不區分重音、不區分假名、不區分寬度  | 
|  Danish\$1Norwegian\$1CS\$1AI\$1KS  |  Danish-Norwegian、區分大小寫、不區分重音、區分假名、不區分寬度  | 
|  Finnish\$1Swedish\$1100\$1BIN  |  Finnish-Swedish-100、二進位排序  | 
|  Finnish\$1Swedish\$1100\$1BIN2  |  Finnish-Swedish-100、二進位程式碼點比較排序  | 
|  Finnish\$1Swedish\$1100\$1CI\$1AI  |  Finnish-Swedish-100、不區分大小寫、不區分重音、不區分假名、不區分寬度  | 
|  Finnish\$1Swedish\$1100\$1CI\$1AS  |  Finnish-Swedish-100、不區分大小寫、區分重音、不區分假名、不區分寬度  | 
|  Finnish\$1Swedish\$1CI\$1AS  |  芬蘭文、瑞典文和瑞典文 (芬蘭)、不區分大小寫、區分重音、卡納型不區分、不區分假名  | 
|  French\$1CI\$1AS  |  法文、不區分大小寫、區分重音、不區分假名、不區分寬度  | 
|  Greek\$1CI\$1AS  |  希臘文、不區分大小寫、區分重音、不區分假名、不區分寬度  | 
|  Greek\$1CS\$1AS  |  希臘文、區分大小寫、區分重音、不區分假名、不區分寬度  | 
|  Hebrew\$1BIN  |  希伯來文、二進位排序  | 
|  Hebrew\$1CI\$1AS  |  希伯來文、不區分大小寫、區分重音、不區分假名、不區分寬度  | 
|  Japanese\$1BIN  | 日文、二進位排序 | 
|  Japanese\$1CI\$1AS  |  日文、不區分大小寫、區分重音、不區分假名、不區分寬度  | 
|  Japanese\$1CS\$1AS  |  日文、區分大小寫、區分重音、不區分假名、不區分寬度  | 
|  Japanese\$1XJIS\$1140\$1CI\$1AS  |  日文、不區分大小寫、區分重音、不區分假名、不區分寬度、補充字元、不區分變體選擇器  | 
|  Japanese\$1XJIS\$1140\$1CI\$1AS\$1KS\$1VSS  |  日文、不區分大小寫、區分重音、區分假名、不區分寬度、補充字元、區分變體選擇器  | 
|  Japanese\$1XJIS\$1140\$1CI\$1AS\$1VSS  |  日文、不區分大小寫、區分重音、不區分假名、不區分寬度、補充字元、區分變體選擇器  | 
|  Japanese\$1XJIS\$1140\$1CS\$1AS\$1KS\$1WS  |  日文、區分大小寫、區分重音、區分假名、區分寬度、補充字元、不區分變體選擇器  | 
|  Korean\$1Wansung\$1CI\$1AS  |  Korean-Wansung、不區分大小寫、區分重音、不區分假名、不區分寬度  | 
|  Latin1\$1General\$1100\$1BIN  |  Latin1-General-100、二進位排序  | 
|  Latin1\$1General\$1100\$1BIN2  |  Latin1-General-100、二進位代碼點排序順序  | 
|  Latin1\$1General\$1100\$1BIN2\$1UTF8  |  Latin1-General-100、二進位代碼點排序順序、UTF-8 編碼  | 
|  Latin1\$1General\$1100\$1CI\$1AS  |  Latin1-General-100、不區分大小寫、區分重音、不區分假名、不區分寬度  | 
|  Latin1\$1General\$1100\$1CI\$1AS\$1SC\$1UTF8  |  Latin1-General-100、不區分大小寫、區分重音、補充字元、UTF-8 編碼  | 
|  Latin1\$1General\$1BIN  |  Latin1-General、二進位排序  | 
|  Latin1\$1General\$1BIN2  |  Latin1-General、二進位代碼點排序順序  | 
|  Latin1\$1General\$1CI\$1AI  |  Latin1-General、不區分大小寫、不區分重音、不區分假名、不區分寬度  | 
|  Latin1\$1General\$1CI\$1AS  |  Latin1-General、不區分大小寫、區分重音、不區分假名、不區分寬度  | 
|  Latin1\$1General\$1CI\$1AS\$1KS  |  Latin1-General、不區分大小寫、區分重音、區分假名、不區分寬度  | 
|  Latin1\$1General\$1CS\$1AS  |  Latin1-General、區分大小寫、區分重音、不區分假名、不區分寬度  | 
|  Modern\$1Spanish\$1CI\$1AS  |  Modern-Spanish、不區分大小寫、區分重音、不區分假名、不區分寬度  | 
|  Polish\$1CI\$1AS  |  波蘭文、不區分大小寫、區分重音、不區分假名、不區分寬度  | 
|  SQL\$11xCompat\$1CP850\$1CI\$1AS  |  Latin1-General、不區分大小寫、區分重音、不區分假名、不區分寬度，適用於非 Unicode 資料字碼頁 850 上的 Unicode 資料、SQL Server 排序 49  | 
|  SQL\$1Latin1\$1General\$1CP1\$1CI\$1AI  |  Latin1-General、不區分大小寫、不區分重音、不區分假名、不區分寬度，適用於非 Unicode 資料字碼頁 1252 上的 Unicode 資料、SQL Server 排序 54  | 
|  **SQL\$1Latin1\$1General\$1CP1\$1CI\$1AS (預設值)**  |  Latin1-General、不區分大小寫、區分重音、不區分假名、不區分寬度，適用於非 Unicode 資料字碼頁 1252 上的 Unicode 資料、SQL Server 排序 52  | 
|  SQL\$1Latin1\$1General\$1CP1\$1CS\$1AS  |  Latin1-General、不區分大小寫、區分重音、不區分假名、不區分寬度，適用於非 Unicode 資料字碼頁 1252 上的 Unicode 資料、SQL Server 排序 51  | 
|  SQL\$1Latin1\$1General\$1CP437\$1CI\$1AI  |  Latin1-General、不區分大小寫、不區分重音、不區分假名、不區分寬度，適用於非 Unicode 資料字碼頁 437 上的 Unicode 資料、SQL Server 排序 34  | 
|  SQL\$1Latin1\$1General\$1CP850\$1BIN  |  Latin1-General、二進位排序順序 (適用於 Unicode 資料)、字碼頁 850 上的 SQL Server 排序 40 (適用於非 Unicode 資料)  | 
|  SQL\$1Latin1\$1General\$1CP850\$1BIN2  |  Latin1-General、二進位代碼點排序順序，適用於非 Unicode 資料字碼頁 850 上的 Unicode 資料、SQL Server 排序 40  | 
|  SQL\$1Latin1\$1General\$1CP850\$1CI\$1AI  |  Latin1-General、不區分大小寫、不區分重音、不區分假名、不區分寬度 (適用於 Unicode 資料)、字碼頁 850 上的 SQL Server 排序 44 (適用於非 Unicode 資料)  | 
|  SQL\$1Latin1\$1General\$1CP850\$1CI\$1AS  |  Latin1-General、不區分大小寫、區分重音、不區分假名、不區分寬度，適用於非 Unicode 資料字碼頁 850 上的 Unicode 資料、SQL Server 排序 42  | 
|  SQL\$1Latin1\$1General\$1Pref\$1CP850\$1CI\$1AS  |  Latin1-General-Pref、不區分大小寫、區分重音、不區分假名、不區分寬度，適用於非 Unicode 資料字碼頁 850 上的 Unicode 資料、SQL Server 排序 183  | 
|  SQL\$1Latin1\$1General\$1CP1256\$1CI\$1AS  |  Latin1-General、不區分大小寫、區分重音、不區分假名、不區分寬度，適用於非 Unicode 資料字碼頁 1256 上的 Unicode 資料、SQL Server 排序 146  | 
|  SQL\$1Latin1\$1General\$1CP1255\$1CS\$1AS  |  Latin1-General、不區分大小寫、區分重音、不區分假名、不區分寬度，適用於非 Unicode 資料字碼頁 1255 上的 Unicode 資料、SQL Server 排序 137  | 
|  Thai\$1CI\$1AS  |  泰語、不區分大小寫、區分重音、不區分假名、不區分寬度  | 
|  Turkish\$1CI\$1AS  |  土耳其文、不區分大小寫、區分重音、不區分假名、不區分寬度  | 

您也可以使用 AWS CLI以程式設計方式擷取支援的定序清單：

```
aws rds describe-db-engine-versions --engine sqlserver-ee --list-supported-character-sets --query 'DBEngineVersions[].SupportedCharacterSets[].CharacterSetName' | sort -u
```

選擇定序：
+ 如果您使用 Amazon RDS 主控台，在建立新的資料庫執行個體時，請選擇 **Additional configuration** (其他組態)，然後在 **Collation** (定序) 欄位中輸入定序。如需詳細資訊，請參閱[建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。
+ 如果您使用的是 AWS CLI，請使用 `--character-set-name`選項搭配 `create-db-instance`命令。如需詳細資訊，請參閱 [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)。
+ 如果您使用 Amazon RDS API，請以 `CharacterSetName` 操作使用 `CreateDBInstance` 參數。如需詳細資訊，請參閱 [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html)。

## Microsoft SQL Server 的資料庫層級定序
<a name="Appendix.SQLServer.CommonDBATasks.Collation.Database-Table-Column"></a>

在建立新的資料庫或資料庫物件時，您可以透過覆寫定序來變更資料庫、資料表或資料欄層級的預設定序。例如，如果您的預設伺服器定序為 SQL\$1Latin1\$1General\$1CP1\$1CI\$1AS，您可以將其變更為 Mohawk\$1100\$1CI\$1AS 來支援 Mohawk 定序。如果必要，查詢中的每個引數可以是類型轉換以使用不同的定序。

例如，下列查詢會將 AccountName 資料欄的預設定序變更為 Mohawk\$1100\$1CI\$1AS

```
CREATE TABLE [dbo].[Account]
	(
	    [AccountID] [nvarchar](10) NOT NULL,
	    [AccountName] [nvarchar](100) COLLATE Mohawk_100_CI_AS NOT NULL 
	) ON [PRIMARY];
```

Microsoft SQL Server 資料庫引擎透過內建的 NCHAR、NVARCHAR 和 NTEXT 資料類型來支援 Unicode。例如，如果您需要 CJK 支援，在建立資料庫和資料表時，請對字元儲存使用這些 Unicode 資料類型，並覆寫預設伺服器定序。以下是 Microsoft 提供的數個連結，內容涵蓋 SQL Server 的定序和 Unicode 支援：
+ [使用定序](http://msdn.microsoft.com/en-us/library/ms187582%28v=sql.105%29.aspx) 
+ [定序和國際術語](http://msdn.microsoft.com/en-us/library/ms143726%28v=sql.105%29) 
+ [使用 SQL Server 定序](http://msdn.microsoft.com/en-us/library/ms144260%28v=sql.105%29.aspx) 
+ [資料庫和資料庫引擎應用程式的國際考量](http://msdn.microsoft.com/en-us/library/ms190245%28v=sql.105%29.aspx)

# 為 Amazon RDS for SQL Server 建立資料庫使用者
<a name="Appendix.SQLServer.CommonDBATasks.CreateUser"></a>

您可以執行如下列範例所示的 T-SQL 指令碼，為您的 Amazon RDS for Microsoft SQL Server 資料庫執行個體建立資料庫使用者。使用 SQL Server Management Studio (SSMS) 等應用程式。您以建立資料庫執行個體時建立的主要使用者身分登入至資料庫執行個體。

```
--Initially set context to master database
USE [master];
GO
--Create a server-level login named theirname with password theirpassword
CREATE LOGIN [theirname] WITH PASSWORD = 'theirpassword';
GO
--Set context to msdb database
USE [msdb];
GO
--Create a database user named theirname and link it to server-level login theirname
CREATE USER [theirname] FOR LOGIN [theirname];
GO
```

如需將資料庫使用者新增至角色的範例，請參閱 [將使用者新增至 SQLAgentUser 角色](SQLServerAgent.AddUser.md)。

**注意**  
若您在新增使用者時出現許可錯誤，則可透過修改資料庫執行個體主要使用者密碼來恢復權限。如需更多詳細資訊，請參閱 [重設 Amazon RDS for SQL Server 主要使用者的 db\$1owner 角色成員資格](Appendix.SQLServer.CommonDBATasks.ResetPassword.md)。  
複製應用程式中的主要使用者許可並非最佳實務。如需詳細資訊，請參閱[如何在 Amazon RDS for SQL Server 中複製主要使用者許可](https://aws.amazon.com/blogs/database/how-to-clone-master-user-permissions-in-amazon-rds-for-sql-server/)。

# 判斷 Amazon RDS for SQL Server 資料庫的復原模型
<a name="Appendix.SQLServer.CommonDBATasks.DatabaseRecovery"></a>

在 Amazon RDS 中，復原模型、保留期間和資料庫狀態是相連結的。

更改任何一個設定之前，了解後果是很重要的。每一個設定都會影響其他設定。例如：
+ 備份保留已啟用時，如果您將資料庫的復原模型變更為 SIMPLE 或 BULK\$1LOGGED，Amazon RDS 會在設定變更的五分鐘內將復原模型重設為 FULL。這也將造成 RDS 取得資料庫執行個體的快照。
+ 如果您將備份保留設定為 `0` 天，RDS 會將復原模式設定為 SIMPLE。
+ 備份保留設定為 `0` 天時，如果您將資料庫的復原模型從 SIMPLE 變更為任何其他選項，RDS 會將復原模型重設為 SIMPLE。

**重要**  
即使您似乎可以這麼做 — 例如使用 ALTER DATABASE，仍切勿更改多重可用區執行個體的復原模型。多重可用區必須使用備份保留以及「完整」復原模式。如果您更改了復原模型，RDS 會立即將它改回「完整」。  
此一自動重設會強制 RDS 完整地重建鏡像。在此重建期間，資料庫的可用性會降低效能大約 30 到 90 分鐘，直到鏡像準備好進行容錯移轉為止。資料庫執行個體同樣會經歷從單一可用區轉換成多重可用區時效能變差的狀況。效能變差的時間取決於資料庫儲存大小 — 儲存的資料庫越大，變差的時間越久。

如需有關 SQL Server 復原模式的詳細資訊，請參閱 Microsoft 文件中的[復原模式 (SQL Server)](https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/recovery-models-sql-server)。

# 判斷 Amazon RDS for SQL Server 的上次容錯移轉時間
<a name="Appendix.SQLServer.CommonDBATasks.LastFailover"></a>

若要判斷上次容錯移轉時間，請使用下列預存程序：

```
execute msdb.dbo.rds_failover_time;
```

此程序會傳回下列資訊。


****  

| 輸出參數 | 描述 | 
| --- | --- | 
|  errorlog\$1available\$1from  |  顯示日誌目錄中可取得錯誤記錄的時間。  | 
|  recent\$1failover\$1time  |  顯示上次容錯移轉時間 (如果可從錯誤日誌中取得)。否則顯示 `null`。  | 

**注意**  
預存程序會搜尋日誌目錄中所有可用的 SQL Server 錯誤日誌，以擷取最近的容錯移轉時間。如果 SQL Server 已覆寫容錯移轉訊息，則程序不會擷取容錯移轉時間。

**Example 沒有最近的容錯移轉**  
此範例顯示錯誤日誌中沒有最近的容錯移轉時的輸出。自從 2020-04-29 23:59:00.01 以來，沒有發生任何容錯移轉。  


| errorlog\$1available\$1from | recent\$1failover\$1time | 
| --- | --- | 
|  2020-04-29 23:59:00.0100000  |  null  | 

**Example 最近的容錯移轉**  
此範例顯示錯誤日誌中有容錯移轉時的輸出。最近一次的容錯移轉是在 2020-05-05 18:57:51.89。  


| errorlog\$1available\$1from | recent\$1failover\$1time | 
| --- | --- | 
|  2020-04-29 23:59:00.0100000  |  2020-05-05 18:57:51.8900000  | 

# 針對因日誌序號差距而導致的時間點復原失敗進行疑難排解
<a name="Appendix.SQLServer.CommonDBATasks.PITR-LSN-Gaps"></a>

在 RDS for SQL Server 中嘗試時間點復原 (PITR) 時，您可能會因為日誌序號 (LSN) 的差距而遇到失敗。這些差距會阻止 RDS 將資料庫還原至請求的時間，而 RDS 會將您的還原執行個體置於 `incompatible-restore` 狀態。

此問題的常見原因如下：
+ 資料庫復原模型的手動變更。
+ 由於資源不足以完成交易日誌備份，RDS 會變更自動復原模型。

若要識別資料庫中的 LSN 差距，請執行此查詢：

```
SELECT * FROM msdb.dbo.rds_fn_list_tlog_backup_metadata(database_name)
ORDER BY backup_file_time_utc desc;
```

如果您發現 LSN 差距，您可以：
+ 在 LSN 差距之前選擇還原點。
+ 等待並還原至下一個執行個體備份完成後的某個點。

為了避免此問題，建議您不要手動變更 RDS for SQL Server 資料庫的復原模型，因為它會中斷執行個體耐久性。也建議您為工作負載選擇具有足夠資源的執行個體類型，以確保定期交易日誌備份。

如需交易日誌管理的詳細資訊，請參閱 Microsoft SQL Server 文件中的 [SQL Server 交易日誌架構和管理指南](https://learn.microsoft.com/en-us/sql/relational-databases/sql-server-transaction-log-architecture-and-management-guide?view=sql-server-ver16)。

# 拒絕或允許檢視 Amazon RDS for SQL Server 的資料庫名稱
<a name="Appendix.SQLServer.CommonDBATasks.ManageView"></a>

主要使用者無法設定 `DENY VIEW ANY DATABASE TO LOGIN` 對使用者隱藏資料庫。若要變更此許可，請改用下列預存程序：
+ 拒絕資料庫檢視存取 *LOGIN*：

  ```
  EXEC msdb.dbo.rds_manage_view_db_permission @permission=‘DENY’, @server_principal=‘LOGIN’  
  go
  ```
+ 允許資料庫檢視存取 *LOGIN*：

  ```
  EXEC msdb.dbo.rds_manage_view_db_permission @permission='GRANT', @server_principal='LOGIN' 
   go
  ```

使用此預存程序時，請考慮下列事項：
+ 資料庫名稱會從 SSMS 和內部 DMV (動態管理檢視) 隱藏。不過，稽核、日誌和中繼資料資料表仍會顯示資料庫名稱。這些是安全的 `VIEW ANY DATABASE` 伺服器許可。如需詳細資訊，請參閱 [DENY 伺服器許可](https://learn.microsoft.com/en-us/sql/t-sql/statements/deny-server-permissions-transact-sql?view=sql-server-ver16#permissions)。
+ 將許可還原至 `GRANT` (允許) 後，*LOGIN* 可以檢視所有資料庫。
+ 如果您刪除並重新建立 *LOGIN*，則與 LOGIN 相關的檢視許可會重設為 `ALLOW`。
+ 對於多可用區域執行個體，請僅為主要主機上的 *LOGIN* 設定 `DENY` 或 `GRANT` 許可。變更會自動傳播到次要主機。
+ 此許可只會變更登入是否可以檢視資料庫名稱。不過，對其中資料庫和物件的存取會個別管理。

# 在大量載入 Amazon RDS for SQL Server 期間停用快速插入
<a name="Appendix.SQLServer.CommonDBATasks.DisableFastInserts"></a>

從 SQL Server 2016 年開始，預設會啟用快速插入。快速插入會利用資料庫處於簡單或大量記錄復原模式時所發生的最小記錄，以最佳化插入效能。透過快速插入，每個大量載入批次都會取得新的擴充區塊，略過具有可用空間的現有擴充區塊的配置查詢，以最佳化插入效能。

但是，使用快速插入的批次大小的批次負載可能會導致物件消耗的未使用空間增加。如果增加批次大小不可行，啟用追蹤旗標 692 可以協助減少未使用的保留空間，但會犧牲效能。啟用此追蹤旗標會停用快速插入，同時大量載入堆積或叢集索引的資料。

您可以啟用追蹤旗標 692 做為啟動參數使用資料庫參數群組。如需更多詳細資訊，請參閱 [Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。

SQL Server 2016 和更新版本的 Amazon RDS 支援追蹤旗標 692。如需有關追蹤旗標的詳細資訊，請參閱 Microsoft 說明文件中的 [DBCC TRACEON - 追蹤旗標](https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql)。

# 在 Amazon RDS for Microsoft SQL Server 資料庫執行個體中捨棄資料庫
<a name="Appendix.SQLServer.CommonDBATasks.DropMirrorDB"></a>

您可以捨棄在單一可用區或多個可用區部署中執行 Microsoft SQL Server 的 Amazon RDS 資料庫執行個體上的資料庫。若要捨棄資料庫，請使用以下命令：

```
--replace your-database-name with the name of the database you want to drop
EXECUTE msdb.dbo.rds_drop_database  N'your-database-name'
```

**注意**  
在命令中使用直單引號。智慧引號會導致錯誤。

使用此程序捨棄資料庫時，Amazon RDS 會卸除對資料庫的所有現有連線，並移除資料庫的備份歷史記錄。

若要將備份和還原限額授予其他使用者，請遵循下列程序：

```
USE master
GO
CREATE LOGIN user1 WITH PASSWORD=N'changeThis', DEFAULT_DATABASE=master, CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
USE msdb
GO
CREATE USER user1 FOR LOGIN user1
GO
use msdb
GO
GRANT EXECUTE ON msdb.dbo.rds_backup_database TO user1
GO
GRANT EXECUTE ON msdb.dbo.rds_restore_database TO user1
GO
```

# 重新命名多可用區域部署中的 Amazon RDS for Microsoft SQL Server 資料庫
<a name="Appendix.SQLServer.CommonDBATasks.RenamingDB"></a>

若要重新命名使用多個可用區域的 Microsoft SQL Server 資料庫執行個體，請使用下列程序：

1. 首先，關閉資料庫執行個體的多個可用區域。

1. 執行 `rdsadmin.dbo.rds_modify_db_name` 以重新命名資料庫。

1. 然後，開啟資料庫執行個體的多個可用區域鏡像或 Always On 可用性群組，使其返回原始狀態。

如需更多詳細資訊，請參閱 [將多可用區域新增至 Microsoft SQL Server 資料庫執行個體](USER_SQLServerMultiAZ.md#USER_SQLServerMultiAZ.Adding)。

**注意**  
如果您的執行個體未使用多個可用區，執行 `rdsadmin.dbo.rds_modify_db_name` 之前或之後，不需要變更任何設定。  
您無法重新命名僅供讀取複本來源執行個體上的資料庫。

**範例**：在下列範例中，`rdsadmin.dbo.rds_modify_db_name` 預存程序會將資料庫從 **MOO** 重新命名為 **ZAR**。這類似於執行陳述式 `DDL ALTER DATABASE [MOO] MODIFY NAME = [ZAR]`。

```
EXEC rdsadmin.dbo.rds_modify_db_name N'MOO', N'ZAR'
GO
```

# 重設 Amazon RDS for SQL Server 主要使用者的 db\$1owner 角色成員資格
<a name="Appendix.SQLServer.CommonDBATasks.ResetPassword"></a>

如果您將主要使用者鎖定為 RDS for SQL Server 資料庫上的 `db_owner` 角色成員資格，而且沒有其他資料庫使用者可以授予成員資格，您可以透過修改資料庫執行個體主要使用者密碼來還原遺失的成員資格。

透過變更資料庫執行個體主要使用者密碼，RDS 會將可能已意外撤銷的 `db_owner` 成員資格授予資料庫執行個體中的資料庫。若要變更資料庫執行個體的密碼，則可使用 Amazon RDS 主控台、 AWS CLI 命令 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html)，或是使用 [ModifyDBInstance API](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) 操作。如需修改 資料庫執行個體的詳細資訊，請參閱[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

# 還原 Amazon RDS for SQL Server 的授權終止資料庫執行個體
<a name="Appendix.SQLServer.CommonDBATasks.RestoreLTI"></a>

Microsoft 已要求未回報 Microsoft 授權行動性協議資訊的 Amazon RDS 一些客戶終止其資料庫執行個體。Amazon RDS 會取得這些資料庫執行個體的快照，而您可以從快照還原為具有已包含授權模型的新資料庫執行個體。

您可以從 Standard Edition 的快照還原至 Standard Edition 或 Enterprise Edition。

您可以從 Enterprise Edition 的快照還原至 Standard Edition 或 Enterprise Edition。

**在 Amazon RDS 建立執行個體的最終快照後從 SQL Server 快照還原**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Snapshots (快照)**。

1. 選擇您的 SQL Server 資料庫執行個體的快照。Amazon RDS 會為您建立資料庫執行個體的最終快照。終止之執行個體快照的名稱採用格式 `instance_name-final-snapshot`。例如，如果您的資料庫執行個體名稱為 **mytest.cdxgahslksma.us-east-1.rds.com**，則會呼叫** mytest-final-snapshot**最終快照，且位於與原始資料庫執行個體相同的 AWS 區域中。

1. 針對 **Actions (動作)**，選擇 **Restore Snapshot (還原快照)**。

   **Restore DB Instance (還原資料庫執行個體)** 視窗隨即出現。

1. 針對 **License Model (授權模型)**，選擇 **license-included**。

1. 選擇您要使用的 SQL Server 資料庫引擎。

1. 對於 **DB Instance Identifier (資料庫執行個體識別符)**，輸入還原資料庫執行個體的名稱。

1. 選擇 **Restore DB Instance (還原資料庫執行個體)**。

如需從快照還原的詳細資訊，請參閱[還原至資料庫執行個體](USER_RestoreFromSnapshot.md)。

# 將 Amazon RDS for SQL Server 資料庫從「離線」轉移至「線上」
<a name="Appendix.SQLServer.CommonDBATasks.TransitionOnline"></a>

您可以將 Amazon RDS 資料庫執行個體上的 Microsoft SQL Server 資料庫從 `OFFLINE` 轉移至 `ONLINE`。


****  

| SQL Server 方法 | Amazon RDS 方法 | 
| --- | --- | 
| ALTER DATABASE *db\$1name* SET ONLINE; | EXEC rdsadmin.dbo.rds\$1set\$1database\$1online *db\$1name* | 

# 使用 Amazon RDS for SQL Server 的變更資料擷取
<a name="Appendix.SQLServer.CommonDBATasks.CDC"></a>

Amazon RDS 支援執行 Microsoft SQL Server 之資料庫執行個體的變更資料擷取支援 (CDC)。CDC 會擷取對資料表中之資料所做的變更。它會儲存與每個變更相關的中繼資料，而您稍候可存取這些中繼資料。如需 CDC 運作方式的詳細資訊，請參閱 Microsoft 文件中的[變更資料擷取](https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/track-data-changes-sql-server#Capture)。使用 CDC 搭配您的 Amazon RDS 資料庫執行個體之前，請透過執行 `msdb.dbo.rds_cdc_enable_db` 以在資料庫中啟用它。啟用 CDC 之後，該資料庫 `db_owner` 的任何使用者都可以在該資料庫的資料表上啟用或停用 CDC。

**重要**  
還原期間，將停用 CDC。所有相關中繼資料會自動從資料庫移除。這適用於快照還原和point-in-time還原。執行其中一個還原類型後，您就可以重新啟用 CDC 和重新指定要追蹤的資料表。

若要啟用資料庫執行個體的 CDC，請執行 `msdb.dbo.rds_cdc_enable_db` 預存程序。

```
1. exec msdb.dbo.rds_cdc_enable_db 'database_name'
```

若要停用資料庫執行個體的 CDC，請執行 `msdb.dbo.rds_cdc_disable_db` 預存程序。

```
1. exec msdb.dbo.rds_cdc_disable_db 'database_name'
```

若要將 CDC 許可授予使用者，請使用下列程序：

```
1. go
2. 		GRANT EXECUTE ON msdb.dbo.rds_cdc_enable_db TO User1
3. 		GRANT EXECUTE ON msdb.dbo.rds_cdc_disable_db TO User1
```

**Topics**
+ [使用變更資料擷取來追蹤資料表](#Appendix.SQLServer.CommonDBATasks.CDC.tables)
+ [變更資料擷取任務](#Appendix.SQLServer.CommonDBATasks.CDC.jobs)
+ [變更多個可用區執行個體的資料擷取](#Appendix.SQLServer.CommonDBATasks.CDC.Multi-AZ)

## 使用變更資料擷取來追蹤資料表
<a name="Appendix.SQLServer.CommonDBATasks.CDC.tables"></a>

在資料庫上啟用 CDC 之後，您就可以開始追蹤特定資料表。您可以執行 [sys.sp\$1cdc\$1enable\$1table](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sys-sp-cdc-enable-table-transact-sql) 來選擇要追蹤的資料表。

```
 1. --Begin tracking a table
 2. exec sys.sp_cdc_enable_table   
 3.    @source_schema           = N'source_schema'
 4. ,  @source_name             = N'source_name'
 5. ,  @role_name               = N'role_name'
 6. 
 7. --The following parameters are optional:
 8.  
 9. --, @capture_instance       = 'capture_instance'
10. --, @supports_net_changes   = supports_net_changes
11. --, @index_name             = 'index_name'
12. --, @captured_column_list   = 'captured_column_list'
13. --, @filegroup_name         = 'filegroup_name'
14. --, @allow_partition_switch = 'allow_partition_switch'
15. ;
```

若要檢視資料表的 CDC 組態，請執行 [sys.sp\$1cdc\$1help\$1change\$1data\$1capture](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sys-sp-cdc-help-change-data-capture-transact-sql)。

```
1. --View CDC configuration
2. exec sys.sp_cdc_help_change_data_capture 
3. 
4. --The following parameters are optional and must be used together.
5. --  'schema_name', 'table_name'
6. ;
```

如需 SQL Server 文件中 CDC 資料表、函數和預存程序的詳細資訊，請參閱下列：
+ [變更資料擷取預存程序 (Transact-SQL)](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/change-data-capture-stored-procedures-transact-sql)
+ [變更資料擷取函數 (Transact-SQL)](https://docs.microsoft.com/en-us/sql/relational-databases/system-functions/change-data-capture-functions-transact-sql)
+ [變更資料擷取資料表 (Transact-SQL)](https://docs.microsoft.com/en-us/sql/relational-databases/system-tables/change-data-capture-tables-transact-sql)

## 變更資料擷取任務
<a name="Appendix.SQLServer.CommonDBATasks.CDC.jobs"></a>

啟用 CDC 時，SQL Server 會建立 CDC 任務。資料庫擁有者 (`db_owner`) 可以檢視、建立、修改和刪除 CDC 任務。不過，RDS 系統帳戶擁有這些任務。因此，任務不會在原生檢視、程序或是在 SQL Server Management Studio 中顯示。

若要控制資料庫中 CDC 的行為，請使用原生 SQL Server 程序，例如 [sp\$1cdc\$1enable\$1table](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sys-sp-cdc-enable-table-transact-sql) 和 [sp\$1cdc\$1start\$1job](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sys-sp-cdc-start-job-transact-sql)。若要變更 CDC 任務參數，例如 `maxtrans` 和 `maxscans`，您可以使用 [sp\$1cdc\$1change\$1job.](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sys-sp-cdc-change-job-transact-sql)。

若要取得有關 CDC 任務的更多資訊，您可以查詢下列動態管理檢視：
+ sys.dm\$1cdc\$1errors
+ sys.dm\$1cdc\$1log\$1scan\$1sessions
+ sysjobs
+ sysjobhistory

## 變更多個可用區執行個體的資料擷取
<a name="Appendix.SQLServer.CommonDBATasks.CDC.Multi-AZ"></a>

如果您在多重可用區執行個體上使用 CDC，請確定鏡像的 CDC 任務組態符合委託人上的組態。CDC 任務會映射至 `database_id`。如果次要伺服器上的資料庫 ID 與委託人不同，那麼，任務將不會與正確的資料庫關聯。為了嘗試在容錯移轉之後避免錯誤，RDS 會在新委託人上放置並重新建立任務。重新建立的任務會使用委託人在容錯移轉之前記錄的參數。

儘管此程序的執行速度很快，但在 RDS 可更正 CDC 任務前這些任務可能仍會執行。以下是強制讓主要和次要複本之間的參數一致的三個方式：
+ 對已啟用 CDC 的所有資料庫使用相同任務參數。
+ 變更 CDC 任務組態之前，將多重可用區執行個體轉換為單一可用區。
+ 每當您在委託人上變更參數時，請手動傳輸參數。

容錯移轉之後，若要檢視和定義用來重新建立 CDC 任務的 CDC 參數，請使用 `rds_show_configuration` 和 `rds_set_configuration`。

下列範例會傳回 `cdc_capture_maxtrans` 的數值：針對設為 `RDS_DEFAULT` 的任何參數，RDS 會自動設定該數值。

```
-- Show configuration for each parameter on either primary and secondary replicas. 
exec rdsadmin.dbo.rds_show_configuration 'cdc_capture_maxtrans';
```

若要設定次要伺服器上的組態，請執行 `rdsadmin.dbo.rds_set_configuration`。此程序會設定次要伺服器上所有資料庫的參數值。只有在容錯移轉之後才會使用這些設定。下列範例會將所有 CDC 擷取任務的 `maxtrans` 設定為 *1000*：

```
--To set values on secondary. These are used after failover.
exec rdsadmin.dbo.rds_set_configuration 'cdc_capture_maxtrans', 1000;
```

若要設定委託人上的 CDC 任務參數，請改為使用 [sys.sp\$1cdc\$1change\$1job](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sys-sp-cdc-change-job-transact-sql)。

# 使用 SQL Server Agent for Amazon RDS
<a name="Appendix.SQLServer.CommonDBATasks.Agent"></a>

借助 Amazon RDS，您可以在執行 Microsoft SQL Server 企業版、標準版或 Web 版的資料庫執行個體上使用 SQL Server 代理程式。SQL Server 代理程式是 Microsoft Windows 服務，會執行排程的管理任務 (稱為任務)。您可以使用 SQL Server 代理程式來執行 T-SQL 任務，以在 SQL Server 資料庫執行個體中重建索引、執行損毀檢查，以及彙總資料。

建立 SQL Server 資料庫執行個體時，會在 `SQLAgentUserRole` 角色中登錄主要使用者。

SQL Server 代理程式可以按排程或隨需執行任務，以回應特定事件。如需詳細資訊，請參閱 Microsoft 文件中的 [SQL Server 代理程式](http://msdn.microsoft.com/en-us/library/ms189237)。

**注意**  
避免排程任務在資料庫執行個體的維護和備份時段執行。AWS 啟動的維護和備份程序可能會中斷任務或導致其被取消。  
在異地同步備份部署中，當任務複寫功能開啟時，SQL Server Agent 任務從主要主機複製至次要主機。如需更多詳細資訊，請參閱 [開啟 SQL Server Agent 任務複寫](#SQLServerAgent.Replicate)。  
多可用區部署有 10,000 個 SQL Server Agent 任務的限制。若您需要更高的限制，請聯絡 支援 請求增加配額。開啟 [AWS 支援 中心](https://console.aws.amazon.com/support/home#/)頁面，如有必要請登入，然後選擇 **Create case** (建立案例)。選擇 **Service limit increase (提高服務限制)**。填妥並提交表格。

若要在 SQL Server Management Studio (SSMS) 中檢視個別 SQL Server 代理程式任務的歷程紀錄，您可以開啟物件總管 (Object Explorer)，並在任務上按一下滑鼠右鍵，然後選擇 **View History (檢視歷程紀錄)**。

由於 SQL Server 代理程式正在資料庫執行個體中的受管理主機上執行，因此不支援某些動作：
+ 不支援使用 ActiveX、Windows command shell 或 Windows PowerShell 執行複寫任務和命令列指令碼。
+ 您無法手動開始、停止或重新啟動 SQL Server 代理程式。
+ 無法從資料庫執行個體透過 SQL Server 代理程式傳送電子郵件通知。
+ 不支援 SQL Server 代理程式提醒和運算子。
+ 不支援使用 SQL Server 代理程式來建立備份。使用 Amazon RDS 備份您的資料庫執行個體。
+ 目前，RDS for SQL Server 不支援使用 SQL Server Agent 字符。

## 開啟 SQL Server Agent 任務複寫
<a name="SQLServerAgent.Replicate"></a>

您可使用下列儲存程序開啟 SQL Server Agent 任務複寫：

```
EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = 'SQLAgentJob';
```

您可在 Amazon RDS for SQL Server 支援的所有 SQL Server 版本上執行儲存程序。複製下列類別中的任務：
+ [未分類 (本機)]
+ [未分類 (多伺服器)]
+ [未分類]
+ 資料收集器
+ 資料庫引擎調校 Advisor
+ 資料庫維護
+ 全文

僅複製使用 T-SQL 任務步驟的任務。SQL Server Integration Services (SSIS)、SQL Server Reporting Services (SSRS)、複寫和 PowerShell 等步驟類型的任務不會複製。不會複製使用 Database Mail 和伺服器層級物件的任務。

**重要**  
主要主機是複寫的真實來源。開啟工作複寫之前，請確定您的 SQL Server 代理程式工作位於主要主機上。如果您未這麼做，則當次要主機上有較新的工作時，如果您開啟該功能，可能會導致刪除 SQL Server 代理程式工作。

您可使用下列函數來確認複製是否已開啟。

```
SELECT * from msdb.dbo.rds_fn_get_system_database_sync_objects();
```

 若 SQL Server Agent 任務正在複製，則 T-SQL 查詢傳回下列內容。若並未複製，則不會為 `object_class` 傳回任何東西。

![\[SQL Server Agent 任務正在複製\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/SQLAgentJob.png)


您可以使用下列函數，以 UTC 時間找出物件上次同步的時間。

```
SELECT * from msdb.dbo.rds_fn_server_object_last_sync_time();
```

例如，假設您修改 SQL Server Agent 任務的時間為 01:00。您希望最近的同步時間在 01:00 之後，表示同步已發生。

同步化之後，針對次要節點上的 `date_created` 和 `date_modified` 傳回的值預期會相符。

![\[上次同步伺服器物件的時間為 01:21:23\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/SQLAgentJob_last_sync_time.png)


如果您也使用 `tempdb` 複寫，您可以在 `@object_type` 參數中提供相關物件，以啟用 SQL Agent 任務和 `tempdb` 組態的複寫：

```
EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = 'SQLAgentJob,TempDbFile';
```

如需 `tempdb` 複寫的詳細資訊，請參閱 [多可用區域部署的 TempDB 組態](SQLServer.TempDB.MAZ.md)。

# SQL Server Agent 角色
<a name="SQLServerAgent.AgentRoles"></a>

RDS for SQL Server 支援下列 SQL Server Agent 角色，具有不同層級的許可來管理任務：
+ **SQLAgentUserRole**

  許可
  + 建立和管理其本身的任務、排程和操作員
  + 檢視其本身任務和排程的屬性
  + 無法檢視或管理由其他使用者建立的任務

  此角色適用於需要建立和管理自己的任務，但不需要對其他使用者建立的任務進行存取的使用者。
+ **SQLAgentReaderRole**

  許可
  + SQLAgentUserRole 的所有許可
  + 檢視所有任務和排程的清單，包括其他人建立的
  + 檢視所有任務的屬性
  + 檢閱任務歷史記錄

  此角色適用於需要監控所有任務的狀態，但不需要管理任務的使用者。
+ **SQLAgentOperatorRole**

  許可
  + SQLAgentUserRole 和 SQLAgentReaderRole 的所有許可
  + 執行、停止或啟動任務
  + 管理任務歷史記錄
  + 啟用/停用任務和排程
  + 檢視操作員和代理

  此角色提供最全面的許可，適用於需要完整控制所有任務的使用者。

使用下列命令，將角色指派給您的 SQL Server 登入：

```
USE msdb;
EXEC sp_addrolemember 'SQLAgentOperatorRole', 'username';
```

## 管理 RDS for SQL Server 中的 SQLAgentOperatorRole
<a name="SQLServerAgent.AgentRoles.ManageSQLAgentOperatorRole"></a>

若要檢視目前的任務，您必須將 SQLAgentOperatorRole 新增至 SQL Server 登入，並在中斷與資料庫的連線之前將其移除。

若要在 SQL Server Management Studio 中視覺化 SQL Server Agent 樹狀結構，請依照下列指示操作：

**在 SQL Server Management Studio (SSMS) 上檢視 SQL Server Agent**

1. 使用 RDS 主要憑證登入 RDS SQL Server 執行個體，並且為所需的使用者授予 SQLAgentUserRole。

   ```
   USE msdb
   GO
   IF NOT EXISTS(SELECT name FROM sys.database_principals WHERE name = 'UserName')
   BEGIN
   CREATE USER UserName FROM LOGIN UserName
   END
   GO
   ALTER ROLE SQLAgentUserRole ADD MEMBER UserName
   GO
   GRANT ALTER ON ROLE::[SQLAgentOperatorRole] to UserName
   GO
   ```

   這些命令會在 `msdb` 資料庫上建立使用者 (如果不存在)。此外也會在 SQLAgentUserRole 上新增使用者，使 SSMS 上的 SQL Server Agent 樹狀結構得以顯示。最後，它會將 SQLAgentOperatorRole 的變更許可授予使用者。這可讓使用者在該角色中新增/移除自己。

1. 若要將自己新增至上述角色，請使用需要查看任務的使用者連線至 RDS SQL Server 執行個體，然後執行下列指令碼。

   ```
   use msdb
   go
   ALTER ROLE SQLAgentOperatorRole ADD MEMBER UserName
   GO
   ```

   接著，在**任務**資料夾上按一下滑鼠右鍵，然後選擇**重新整理**。

1. 當您執行此動作時，**任務**索引標籤會顯示 **\$1** (加號) 按鈕。按一下可展開 SQL Server Agent 任務的清單。

1. 
**重要**  
在中斷與 RDS SQL Server 執行個體的連線之前，您必須將自己從 SQLAgentOperatorRole 中移除。

   若要從 SQLAgentOperatorRole 中移除您的登入，請在將 Management Studio 中斷連線或關閉之前執行下列查詢：

   ```
   USE msdb
   GO
   ALTER ROLE SQLAgentOperatorRole DROP MEMBER UserName
   GO
   ```

如需詳細資訊，請參閱[在 RDS SQL Server 中使用 SQLAgentOperatorRole](https://aws.amazon.com/blogs/database/leveraging-sqlagentoperatorrole-in-rds-sql-server/)。

# 將使用者新增至 SQLAgentUser 角色
<a name="SQLServerAgent.AddUser"></a>

如要允許其他登入或使用者使用 SQL Server Agent，則您必須以主要使用者身分登入，並進行下列作業：

1. 透過使用 `CREATE LOGIN` 命令來建立另一個伺服器層級的登入。

1. 利用 `msdb` 命令在 `CREATE USER` 中建立使用者，然後將此使用者與您在前一個步驟中所建立的登入相連結。

1. 利用 `SQLAgentUserRole` 系統存放程序，將使用者新增至 `sp_addrolemember`。

例如，假設您的主要使用者名稱為 **admin**，而您想要將 SQL Server Agent 的存取權提供給名為 **theirname** 與密碼為 **theirpassword** 的使用者。於此狀況下，您可使用下列程序。

**新增使用者至 SQLAgentUser 角色**

1. 以主要使用者身分登入。

1. 執行下列命令：

   ```
   --Initially set context to master database
   USE [master];
   GO
   --Create a server-level login named theirname with password theirpassword
   CREATE LOGIN [theirname] WITH PASSWORD = 'theirpassword';
   GO
   --Set context to msdb database
   USE [msdb];
   GO
   --Create a database user named theirname and link it to server-level login theirname
   CREATE USER [theirname] FOR LOGIN [theirname];
   GO
   --Added database user theirname in msdb to SQLAgentUserRole in msdb
   EXEC sp_addrolemember [SQLAgentUserRole], [theirname];
   ```

# 刪除 SQL Server 代理程式任務
<a name="SQLServerAgent.DeleteJob"></a>

您可以使用 `sp_delete_job` 存放程序來刪除 Amazon RDS for Microsoft SQL Server 上的SQL Server 代理程式任務。

您無法使用 SSMS 來刪除 SQL Server 代理程式任務。如果這麼做，您會收到類似下列的錯誤訊息：

```
The EXECUTE permission was denied on the object 'xp_regread', database 'mssqlsystemresource', schema 'sys'.
```

RDS 屬於受管服務，其會因受限而無法執行能存取 Windows 登錄的程序。當您使用 SSMS 時，其會嘗試執行 RDS 未授權的程序 (`xp_regread`)。

**注意**  
在 RDS for SQL Server 上，才允許 sysadmin 角色的成員更新或刪除不同登入所擁有的任務。如需詳細資訊，請參閱[在 RDS SQL Server 中使用 SQLAgentOperatorRole](https://aws.amazon.com/blogs/database/leveraging-sqlagentoperatorrole-in-rds-sql-server/)。

**若要刪除 SQL Server 代理程式任務**
+ 執行下列 T-SQL 陳述式：

  ```
  EXEC msdb..sp_delete_job @job_name = 'job_name';
  ```

# 使用 Amazon RDS for Microsoft SQL Server 日誌
<a name="Appendix.SQLServer.CommonDBATasks.Logs"></a>

您可以使用 Amazon RDS 主控台來檢視、監看和下載 SQL Server Agent 日誌和 Microsoft SQL Server 錯誤日誌和 SQL Server Reporting Services (SSRS) 日誌。

## 監看日誌檔案
<a name="Appendix.SQLServer.CommonDBATasks.Logs.Watch"></a>

如果您檢視 Amazon RDS 主控台中的日誌，您可以查看當下日誌的內容。在主控台中監看日誌會以動態狀態開啟它，使得您可以近乎即時查看它的更新。

只有最新的日誌可供監看。例如，假設您有如下所示的日誌：

![\[Amazon RDS 主控台中已選取錯誤日誌的 [日誌] 區段影像。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/logs_sqlserver.png)


只會主動更新做為最新日誌的 log/ERROR。您可以選擇監看其他項目，但它們是靜態並且不會更新。

## 封存日誌檔案
<a name="Appendix.SQLServer.CommonDBATasks.Logs.Archive"></a>

Amazon RDS 主控台會顯示上一週到當日的日誌。您可以下載和將日誌封存，以讓它們在該時間後可供參考。將日誌封存的一個方式是將它們載入 Amazon S3 儲存貯體。如需如何設定 Amazon S3 儲存貯體和上傳檔案的指示，請參閱《Amazon Simple Storage Service 入門指南》**中的 [Amazon S3 基本概念](https://docs.aws.amazon.com/AmazonS3/latest/userguide/AmazonS3Basics.html)，並按一下 **Get Started (入門)**。

## 檢視錯誤和代理程式日誌
<a name="Appendix.SQLServer.CommonDBATasks.Logs.SP"></a>

若要檢視 Microsoft SQL 伺服器錯誤和代理程式日誌，請使用 Amazon RDS 預存程序 `rds_read_error_log` 搭配下列參數：
+ ** `@index`**–要擷取的日誌版本。預設值為 0，它會擷取最新的錯誤日誌。指定 1 可擷取先前的日誌，指定 2 可擷取更早的日誌，依此類推。
+ ** `@type`**–要擷取的日誌類型。指定 1 可擷取錯誤日誌。指定 2 可擷取代理程式日誌。

**Example**  
下列範例會要求最新的錯誤日誌。  

```
EXEC rdsadmin.dbo.rds_read_error_log @index = 0, @type = 1;
```

如需 SQL Server 錯誤的詳細資訊，請參閱 Microsoft 文件中的[資料庫引擎錯誤](https://docs.microsoft.com/en-us/sql/relational-databases/errors-events/database-engine-events-and-errors)。

# 使用 Amazon RDS for SQL Server 的追蹤和傾印檔案
<a name="Appendix.SQLServer.CommonDBATasks.TraceFiles"></a>

此小節說明對執行 Microsoft SQL Server 的 Amazon RDS 資料庫執行個體使用追蹤檔案和傾印檔案。

## 產生追蹤 SQL 查詢
<a name="Appendix.SQLServer.CommonDBATasks.TraceFiles.TraceSQLQuery"></a>

```
1. declare @rc int 
2. declare @TraceID int 
3. declare @maxfilesize bigint 
4. 
5. set @maxfilesize = 5
6. 
7. exec @rc = sp_trace_create @TraceID output,  0, N'D:\rdsdbdata\log\rdstest', @maxfilesize, NULL
```

## 檢視開啟的追蹤
<a name="Appendix.SQLServer.CommonDBATasks.TraceFiles.ViewOpenTrace"></a>

```
1. select * from ::fn_trace_getinfo(default)
```

## 檢視追蹤內容
<a name="Appendix.SQLServer.CommonDBATasks.TraceFiles.ViewTraceContents"></a>

```
1. select * from ::fn_trace_gettable('D:\rdsdbdata\log\rdstest.trc', default)
```

## 設定追蹤和傾印檔案的保留期間
<a name="Appendix.SQLServer.CommonDBATasks.TraceFiles.PurgeTraceFiles"></a>

追蹤和傾印檔案可能會累積和耗用磁碟空間。依預設，Amazon RDS 會清除超過七天的追蹤和傾印檔案。

若要檢視最新的追蹤和傾印檔案保留期間，請使用 `rds_show_configuration` 程序，如以下範例所示。

```
1. exec rdsadmin..rds_show_configuration;
```

若要修改追蹤檔案的保留期間，請使用 `rds_set_configuration` 程序，並設定 `tracefile retention` (分鐘)。下列範例會將追蹤檔案的保留期間設定為 24 小時。

```
1. exec rdsadmin..rds_set_configuration 'tracefile retention', 1440; 
```

若要修改傾印檔案的保留期間，請使用 `rds_set_configuration` 程序，並設定 `dumpfile retention` (分鐘)。下列範例會將傾印檔案的保留期間設定為 3 天。

```
1. exec rdsadmin..rds_set_configuration 'dumpfile retention', 4320; 
```

基於安全原因，您無法刪除 SQL Server 資料庫執行個體上的特定追蹤或傾印檔案。若要刪除所有未使用的追蹤或傾印檔案，請將檔案的保留期間設定為 0。