

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

# 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。