本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
RDS for SQL Server 中的 Microsoft Distributed Transaction Coordinator 支援
分散式交易是涉及兩個或多個網路主機的資料庫交易。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 文件中的分散式交易協調器
內容
限制
在 RDS for SQL Server 上使用 MSDTC 時適用下列限制:
-
使用 SQL Server 資料庫鏡像的執行個體不支援 MSDTC。如需詳細資訊,請參閱交易 - 可用性群組和資料庫鏡像
。 -
in-doubt xact resolution參數必須設為 1 或 2。如需更多詳細資訊,請參閱 修改 MSDTC 的參數。 -
MSDTC 要求所有參與分散式交易的主機皆可使用其主機名稱進行解析。RDS 會自動為加入網域的執行個體維護此功能。不過,對於獨立執行個體,請務必手動設定 DNS 伺服器。
-
SQL Server 2017 14.00.3223.3 版和更新版本以及 SQL Server 2019 支援 Java Database Connectivity (JDBC) XA 交易。
-
在 RDS 執行個體上不支援依存於用戶端動態連結程式庫 (DLL) 的分散式交易。
-
不支援使用自訂 XA 動態連結程式庫。
使用交易
使用分散式交易
在 Amazon RDS for SQL Server 中,您執行分散式交易的方式與在內部部署執行的分散式交易相同:
-
使用 .NET Framework
System.Transactions可升級的交易,透過延遲到有需要時再建立交易,可最佳化分散式交易。在這種情況下,升級是自動的,而不需要您進行任何干預。如果交易中只有一個資源管理員,則不會執行任何升級。如需隱含交易範圍的詳細資訊,請參閱 Microsoft 文件中的使用交易範圍實作隱含交易
。 以下 .NET 實作支援可升級的交易:
-
自 ADO.NET 2.0 開始,
System.Data.SqlClient支援與 SQL Server 進行可升級的交易。如需詳細資訊,請參閱 Microsoft 文件中的與 SQL Server 的 System.Transactions 整合。 -
ODP.NET 支援
System.Transactions。在TransactionsScope範圍中對 Oracle 資料庫 11g 版本 1 (11.1 版) 及更新版本開啟的第一個連線會建立本機交易。當開啟第二個連線時,會自動將此交易升級為分散式交易。如需 ODP.NET 中的分散式交易支援的詳細資訊,請參閱 Microsoft 文件中的 Microsoft Distributed Transaction Coordinator 整合。
-
-
使用
BEGIN DISTRIBUTED TRANSACTION陳述式。如需詳細資訊,請參閱 Microsoft 文件中的 BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)。
使用 XA 交易
從 RDS for SQL Server 2017 14.00.3223.3 版開始,您可以使用 JDBC 控制分散式交易。當您在 MSDTC 選項中,將 Enable XA 選項設定為 true 時,RDS 會自動啟用 JDBC 交易,並將 SqlJDBCXAUser 角色授與 guest 使用者。如此可允許透過 JDBC 執行分佈式交易。如需包含程式碼範例在內的詳細資訊,請參閱 Microsoft 文件中的認識 XA 交易
使用交易追蹤
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。
範例 開始追蹤動作
若要開始新的交易追蹤工作階段,請執行下列範例陳述式。
exec msdb.dbo.rds_msdtc_transaction_tracing 'START', @traceall='0', @traceaborted='1', @tracelong='1';
注意
一次只能使用一個交易追蹤工作階段。如果在追蹤工作階段作用中時發出新的追蹤工作階段 START 命令,則會傳回錯誤,且使用中的追蹤工作階段會維持不變。
範例 停止追蹤動作
若要停止交易追蹤工作階段,請執行下列陳述式。
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 日誌檔案。
追蹤工作階段記錄會在執行個體上保留 35 天。系統會自動刪除任何較舊的追蹤工作階段日誌。
範例 狀態追蹤動作
若要追蹤交易追蹤工作階段的狀態,請執行下列陳述式。
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命令中的設定方式。