在 RDS for SQL Server 中支援 Microsoft 分散式交易協調器 - Amazon Relational Database Service

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

在 RDS for SQL Server 中支援 Microsoft 分散式交易協調器

分散式交易是涉及兩個或多個網路主機的資料庫交易。RDS for SQL Server 支援主機之間的分散式交易,其中單一主機可以是下列其中一個:

  • RDS 適用於SQL伺服器資料庫執行個體

  • 內部部署SQL伺服器主機

  • 已安裝 SQL Server 的 Amazon EC2 主機

  • 具有支援分散式交易之資料庫引擎的任何其他EC2主機或RDS資料庫執行個體

在 中RDS,從 SQL Server 2012 (11.00.5058.0.v1 版及更新版本) 開始, 的所有版本的 RDS for SQL Server 支援分散式交易。支援使用 Microsoft 分散式交易協調器 (MSDTC) 提供。如需 的深入資訊MSDTC,請參閱 Microsoft 文件中的分散式交易協調器

限制

下列限制適用於RDS在 for SQL Server MSDTC 上使用 :

  • MSDTC 不支援使用SQL伺服器資料庫鏡像的執行個體。如需詳細資訊,請參閱交易 - 可用性群組和資料庫鏡像

  • 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執行個體上的用戶端動態連結程式庫 (DLLs) 的分散式交易。

  • 不支援使用自訂 XA 動態連結程式庫。

使用交易

使用分散式交易

在 Amazon RDS for SQL Server 中,您會以與內部部署執行的分散式交易相同的方式執行分散式交易:

  • 使用 .NET 架構可System.Transactions促進交易,透過將建立延遲到需要時才最佳化分散式交易。

    在這種情況下,升級是自動的,而不需要您進行任何干預。如果交易中只有一個資源管理員,則不會執行任何升級。如需隱含交易範圍的詳細資訊,請參閱 Microsoft 文件中的使用交易範圍實作隱含交易

    這些 支援可提升的交易。NET 實作:

    • 從 開始ADO。NET 2.0, System.Data.SqlClient支援與 SQL Server 的可提升交易。如需詳細資訊,請參閱 Microsoft 文件中的 System.Transactions 與SQL伺服器整合

    • ODP。NET 支援 System.Transactions。在 TransactionsScope 範圍中對 Oracle 資料庫 11g 版本 1 (11.1 版) 及更新版本開啟的第一個連線會建立本機交易。當開啟第二個連線時,會自動將此交易升級為分散式交易。如需 中分散式交易支援的詳細資訊ODPNET,請參閱 Microsoft 文件中的 Microsoft 分散式交易協調器整合

  • 使用 BEGIN DISTRIBUTED TRANSACTION 陳述式。如需詳細資訊,請參閱 Microsoft 文件中的 BEGINDISTRIBUTEDTRANSACTION(Transact-SQL)

使用 XA 交易

從 RDS for SQL Server 2017 14.00.3223.3 版開始,您可以使用 控制分散式交易JDBC。當您在 Enable XA選項true中將 MSDTC 選項設定為 時, 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 – 追蹤動作。其可能是 STARTSTOPSTATUS

下列是選用參數:

  • @traceall – 設定為 1 可追蹤所有分散式交易。預設為 0。

  • @traceaborted – 設定為 1 可追蹤已取消的分散式交易。預設為 0。

  • @tracelong – 設定為 1 可追蹤長時間執行的分散式交易。預設值為 0。

範例 START 追蹤動作

若要開始新的交易追蹤工作階段,請執行下列範例陳述式。

exec msdb.dbo.rds_msdtc_transaction_tracing 'START', @traceall='0', @traceaborted='1', @tracelong='1';
注意

一次只能使用一個交易追蹤工作階段。如果在追蹤工作階段作用中時發出新的追蹤工作階段 START 命令,則會傳回錯誤,且使用中的追蹤工作階段會維持不變。

範例 STOP 追蹤動作

若要停止交易追蹤工作階段,請執行下列陳述式。

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 天。系統會自動刪除任何較舊的追蹤工作階段日誌。

範例 STATUS 追蹤動作

若要追蹤交易追蹤工作階段的狀態,請執行下列陳述式。

exec msdb.dbo.rds_msdtc_transaction_tracing 'STATUS'

此陳述式會將下列項目輸出為結果集不同的列。

OK SessionStatus: <Started|Stopped> TraceAll: <True|False> TraceAborted: <True|False> TraceLongLived: <True|False>

第一行指出該操作的整體結果:OKERROR,加上詳細資訊 (如果適用)。後續各行指出有關追蹤工作階段狀態的詳細資訊:

  • SessionStatus 可為下列其中之一:

    • Started 如果追蹤工作階段正在執行中。

    • Stopped 如果沒有追蹤工作階段正在執行中。

  • 追蹤工作階段旗標可以是 TrueFalse,取決於其在 START 命令中的設定方式。