2021年7月23日 星期五

[windows]DTC分散式交易機制

 Windows 上使用DB 且有用交易機制並且還用 link server 時 就有機會遇到這個問題

MSDTC(Microsoft Distributed Transaction Coordinator)服務是 Windows 協調跨越多個資源管理員的交易,比如資料庫、訊息佇列及檔案系統。

1、啟用 MSDTC 服務

  依序點選「開始」 → 「系統管理工具」 → 「服務」 → 「Distributed Transaction Coordinator」,開啟「Distributed Transaction Coordinator」視窗。

2、防火牆設定

  依序點選「開始」 → 「控制台」 → 「系統及安全性」 → 「Windows 防火牆」 → 「允許程式通過 Windows 防火牆」,進入「允許程式通過 Windows 防火牆通訊」設定頁面。

  按下【變更設定】,勾選「分散式交易協調器」。

3、設定 DTC

  依序點選「開始」 → 「系統管理工具」 → 「元件服務」,開啟「元件服務」視窗。

  選擇「元件服務」 → 「電腦」 → 「我的電腦」 → 「Distributed Transaction Coordinator」,於「本機 DTC」開啟右鍵選單,選擇「內容」,開啟「本機 DTC」視窗。

3.1 網路 DTC 存取

  勾選「網路 DTC」存取。

3.2 交易管理員通訊

  勾選「允取輸入」、「允取輸出」。

來源連結


2021年7月6日 星期二

[SQL]字串轉換

 SQL SERVER中要將字串連接用+即可 但如果要使用DATATIME或INT連接則需要轉型

一、CAST( expression AS data_type )

二、CONVERT( data_type , expression )

有兩種方式皆可達到

(ex: int to string)


DECLARE @STR VARCHAR(20) = ''

DECLARE @NUMBER INT = 100

DECLARE @NUMBER2 INT = 300

SET @STR = CONVERT( VARCHAR(20),@NUMBER) +'~' + CONVERT( VARCHAR(20),@NUMBER2) 

SELECT @STR


--結果: 100~300 

2021年6月23日 星期三

[SQL]基本宣告 與 取得字串

 變數使用@

宣告:DECLARE + @Name +型態

賦值:SET @Name = ' ';

ex: 

DECLARE @test INT;

SET @test = 123;

綜合為 DECLARE @test INT = 123;


也可以用Select 取值

ex:

DECLARE @test INT = 0;

SELECT @test = 某表格.欄位 From 表格

=============================我是分隔線============================

字串宣告

DECLARE @Test  VARCHAR(20) = 'Hello world';

DECLARE @Test2 VARCHAR(20) = '';

SET @Test2 = SUBSTRING(@Test,1,5);

則結果為: @Test2 = Hello

2021年6月15日 星期二

[SQL]查詢交易機制鎖定與強制解鎖

 程式碼如以下:


SELECT request_session_id AS spid, resource_type AS rt, resource_databASe_id AS rdb, (CASE resource_type WHEN 'OBJECT' then object_name(resource_ASsociated_entity_id) WHEN 'DATABASE' then '<db_name>' ELSE (SELECT object_name(object_id) FROM sys.partitions WHERE hobt_id = resource_ASsociated_entity_id) END) AS objname, resource_description AS rd, request_mode AS rm, request_status AS rs FROM sys.dm_tran_locks


找到被鎖定的spid名稱 (rm狀態為 X,IX)

假設是spid  61  

直接下 kill  61 即可!


===========狀態==========

spid:該次Request的編號。
objname:該次Request處理的物件,從圖中可以看到Customers。
rm/rs:該次Request的鎖定狀態。

rm = X 表示 dead lock,一般就是我們需要處理的。
rm = IX 表示 wait lock ,這種是因為前一個Request已經dead lock,而被pending的狀態。
rm = S or IS 表示 shared lock,一般的長時間查詢就會顯示這種狀態。



參考來源


2021年3月25日 星期四

[SQL]While迴圈用法

 DECLARE @index int;

SET @index = 0;


WHILE(@index <10)

BEGIN

PRINT @index;

SET @index =  @index +1;

END

2021年3月22日 星期一

[SQL]搜尋字串

 Select Top(1000) [Event]

                              [EventDesc]

From Test_Ack

Where PATINDEX('hello%',Event)>0


上述的hello%中表示條件要搜尋的字串

[SQL]顯示千分位與小數顯示

  CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) CONVERT style參數說明 1  (expression為 money 或 smallmoney型別): 0 : 預設,保留小數位後兩位,並四捨...