本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 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
– 追蹤動作。其可能是START
、STOP
或STATUS
。
下列是選用參數:
-
@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
>
第一行指出該操作的整體結果:OK
或 ERROR
,加上詳細資訊 (如果適用)。後續各行指出有關追蹤工作階段狀態的詳細資訊:
-
SessionStatus
可為下列其中之一:-
Started
如果追蹤工作階段正在執行中。 -
Stopped
如果沒有追蹤工作階段正在執行中。
-
-
追蹤工作階段旗標可以是
True
或False
,取決於其在START
命令中的設定方式。