發表文章

[Linux] Windows安裝Wsl2 + Ubuntu22.04 + Docker +Oracle

圖片
  因近期本機需要使用Oracle,考量權限問題,所以使用如標題上的方案,紀錄如下。 1. 啟用WSL必要元件 控制台 —> 程式和功能 —> 開啟或關Windows功能 —> 勾選Hyper-V平台 —> 執行PowerShell指令 —>  重開機!!! 以系統管理員身執行以下 PowerShell 指令: dism .exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux / all /norestart dism .exe /online /enable-feature /featurename:VirtualMachinePlatform / all /norestart 2. 將WSL預設版本調成WSL2 wsl -- set - default -version 2 3. Microsoft Store 安裝 Ubuntu 由於版本會有差異,那目前我的Ubuntu是 22.04版 裝好後就啟用,並且設定帳號密碼(基本上命令自元的密碼輸入都是看不到的喔~) # 或是使用指令安裝也可以 # 查看版本號 wsl -l -o # 安裝指定版本 wsl --install -d Ubuntu-20.04 4. 使用WSL // 列出WSL指令 wsl -h // 列出所有已經安裝的Linux發行版,表示可以切換不同的linux環境 wsl -l // 執行Linux 發行版並進入Shell (目前我的版本是 Unbuntu,也可以執行其他版本) wsl -d Ubuntu // 目前使用 wsl -d Ubuntu -20.4 // 若是妳安裝這個版本,就用這個 // 執行Linux,若要退出,輸入 exit exit 5. 更換Systemd 簡單來說,systemd就是啟動、管理Linux的,由於我們使用windows,所以要更換版本。 我們使用  ubuntu-wsl2-systemd-script ,先下載下來。 5.1 先調整裡面的一個文件 enter-systemd-namespace,  -a 改為 -m -p 5.2 ,並且cmd再指向這個...

[SqlServer] 啟動失敗 10013

圖片
  近期遇到個小問題,雖然不頻繁,但遇到都要查一下有點麻煩,就記錄下來。 檔案總管 > 開啟 SQL Server 20XX 設定管理員 SQL組態設定 > 先停用 TCP/IP SQL組態設定 > 開啟服務 再回到 2,把 TCP/IP 啟用。 完成!

[IIS] 網站內的背景程式沒運作、莫名異常運作

圖片
如題,遇到一個問題,就是我的網站中有寫一段類似排程的背景程式,但是架在IIS上面卻沒有即時運作,需要某個Request進來,才會作動,查詢相關資料後,整理如以下。 ● 彙整兩個背景運作部分: (1) 背景程式沒運作 (2)莫名異常運作  的解決方式及原因。 1 背景程式沒運作 1.1. 應用程式集區 > 進階設定 > 啟動模式: AlwaysRunning 1.2. 應用程式集區 > 進階設定 > 閒置逾時: 0 1.3. 站台 > 進階設定 > [預先載入已啟用]: True 1.4. 伺服器管理 > 新增角色及功能精靈 > 伺服器角色 > 安裝 [應用程式初始化] 2 莫名異常運作 (站台未啟用,卻無故執行背景排程) 2.1 關閉 AlwaysRunning,改為 OnDemand,請參考 1.1 2.2 關閉 [預先載入已啟用],改為 False,請參考 1.4 2.3 建議可以為站台獨立配置應用集區,並且關閉站台時,也關閉該應用集區。 以上,結案。 參考: 1.  IIS AlwaysRunning 深入研究 - 幽靈排程與自動啟動行為-黑暗執行緒 2.  Hangfire 筆記2 - 執行定期排程-黑暗執行緒

[SqlServer] 資料轉置 及 本機建立DBLink至雲端AzureDB

圖片
如題,近期專案中的測試資料庫放在Azure,在資料轉置的途中,使用過幾種方式,其中最基本的就是使用 [匯出資料] 功能,較為麻煩一點的就是建立 DBLink,以下說明。 1.  [匯出資料]功能     1.1  對資料庫點擊右鍵選擇 [匯出資料],並點擊下一步                    1.2   [選擇資料來源] ,就是你當前資料的存放位置,如下圖所示:     1.3  [選擇目的地] ,就是你要轉置過去的雲端DB,如下圖所示:       1.4   [選擇資料表] ,就是你要轉置過去的資料表,再按一直下一步即可,如下圖所示: ...

[SQL] 解決 DB Lock 的問題

圖片
 如題,近期因為寫 Store Procedure 產生了一個錯誤 /*EXECUTE 之後的交易計數顯示遺漏了 COMMIT 或 ROLLBACK TRANSACTION 陳述式。前次計數 = 0,目前的計數 = 1。*/ 後續就發現特定 Table 無法搜尋,直覺就是應該被 Lock 住了,但是沒有特別處理過這問題,這次特別紀錄下。 以下開始 DB LOCK 的說明及解釋:      1.     模擬 Db Lock,只要有開啟 Transactoin 但是沒有 Commit 或 Rollback 就會產生 Dead Lock。               以下使用 北風資料庫為範例: BEGIN TRAN UPDATE dbo.Employees SET Country = 'JAPAN'      2.       此時 dbo.Employees 已經被 Lock 住了,可以用以下 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 ' ' 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_lock...

[SQL] Sql效能陷阱及優化

 如題,把一些工作上遇到的SQL效能問題記錄下來: 1.     盡量不要在 WHERE 條件中,把Table的欄位進行 Convert , Cast ... 轉換處理!     原因: 此動作會造成 Table 中每筆資料都會轉置,當資料量大時,會造成效能瓶頸。     解決辦法: 將 WHERE 要比較的參數進行轉換,而不是對 Table 的參數進行轉換,甚至可以先在方 DECLARE 一個變數先轉換好,在放到 SQL 語句中。 2.     IN、JOIN、EXISTS 如何選擇:     2.1     盡量不要在 IN 中處理子查詢、CTE!          原因:   因為每次 IN 都會重新查一次子查詢、 CTE,資料量大時,效能極差          解決辦法:  將 子查詢 以 CTE 方式處理,之後再 JOIN 或 EXISTS     2.2    面臨  子查詢、CTE, JOIN 或 EXISTS 兩種取捨!           解決思路:                                    a.     理論上 效能優劣: EXISTS  >  JOIN,因為一旦 EXISTS 尋找找到特定內容,查詢執行就會停止,而 JOIN 將一直持續到最後。           ...

[SqlServer] 簡易使用 SqlCmd 進行查詢資料、匯入SQL

 如題,直接附上代碼及簡易說明: 1.  使用密碼進入資料庫       sqlcmd -S 127.0.0.1 -U sa -P P@ssw0rd -d AdventureWorks2017 2.  使用Windows驗證進入資料庫       sqlcmd -S 127.0.0.1 -E -d AdventureWorks2017 3.  使用Windows驗證進入資料庫,並且查詢資料       sqlcmd -S 127.0.0.1 -E -d AdventureWorks2017      SELECT TOP 100 * FROM [Person].[Person]     GO 4. 使用Windows驗證匯入資料     (備註: -f 65001 是表示使用 UTF-8)      sqlcmd -S 127.0.0.1 -E -d AdventureWorks2017 -f 65001 -i .\Script.PostDeployment.sql 5. 在 SqlServer 匯入資料      DECLARE @CMD_SQL NVARCHAR(MAX)      SET @CMD_SQL = 'sqlcmd -S 127.0.0.1 -E -d AdventureWorks2017 -f 65001 -i D:\DbAdventureWorks\Script.PostDeployment.sql'      EXEC xp_cmdshell @ CMD_SQL  資料庫及相關文件: Download 參考文章: 1.      [SQL Server] sqlcmd import sql file @ Louis學習筆記 :: 痞客邦 :: (pixnet.net)     

[SQL] SqlException 3981 - 在暫止的本機交易中指定命令的連接時,此命令必須具有交易物件才可執行。

 如標題,在使用 C# 對 SQL Server 進行CRUD 時,發生此錯誤。 不廢話,直接附上我的情境及解法。 因為我在 IEnumerable 使用 ForEach() 中,進行 CRUD,此時推測內部的迭代器運作上對初始化交易的步驟,不如正常預期。 所以改為 for(...) { // CRUD },在 for 中執行CRUD,就沒有所謂迭代器的問題,收工。

[遞迴邏輯] 採購單轉為訂購單

有一種業務邏輯如下: /// 功能說明: 將採購單依照特定條件轉結為訂購單。 /// 條件一: 每張訂購單的總金額不能大於 25,000,000 /// 條件二: 未轉訂購單的資料才要轉訂購單 /// 條件三: 報價單種類為 2-特殊報價單,需要進行分類 /// 條件四: 依照 [運送方式 ShipId], [報價單種類 QuotationType], [類別 TransOrderYn], [特報單類別 QuotationNo] 分類 /// 條件五: 特定機型有對應的特定數量,該訂單的數量不能超過該特定數量 不廢話,附上連結: .Net Fiddle |  Github

[遞迴邏輯] 採購單取得一般報價和特殊報價

 /// 功能目的:  /// 採購單需要依照出貨的日期取得商品的報價,而商品報價有分一般報價和特殊報價。 /// 一般報價通常為全年度常態性的報價。特殊報價通常價格較低且有期間限定,且特殊報價需先使用,否則有違約的可能。 /// 功能說明: /// 1. 先準備好採購資料集合、報價單資料集合 /// 2. 依照下方的邏輯去篩選 /// 3. 主要透過採購資料集合的 Done 屬性,來判斷至否結束當前的遞迴。 不囉嗦,附上連結: .Net Fiddle | GitHub

[SQL] 將資料類型從 numeric 轉換到 decimal 時發生錯誤

 如題,該情境是搭配C#後端,要將資料存入資料庫時發生,該欄位是 decimal(11, 6),而檢查後發現我存入的值是 30,000,000,但是該欄位的極限是 99,999.000000。 當下想到我存 decimal  為什麼會跟 numeric 有關係,後來才發現我存的整數部分是 numeric,最後才會轉換到 decimal,所以超過定義的數量才會報錯。 不廢話附上解法,將原本欄位從 decimal(11, 6) =>  decimal(13, 6),結案。

[SQL] 搜尋時間起迄範圍

 如題所示,會遇到資料表中存起、迄時間,並且搜尋時要搜尋特定的區間,只要資料中有任一時間包含區間內就要找到,不廢話直接附上SQL。 ( StartDate BETWEEN @StartDate AND @EndDate OR EndDate BETWEEN @StartDate AND @EndDate OR @StartDate BETWEEN StartDate AND EndDate OR @EndDate BETWEEN StartDate AND EndDate )

[Redis] 常用配置(一)

圖片
 近期接觸了 Redis ,有些配置上的問題做個紀錄。 1. Redis文件中密碼配置及程式中如何設置連線字串:     1.1  Redis文件中密碼配置:           在  redis.windows.conf 中找到 requirepass 這個關鍵字,就在這個段落加上以下內容:           requirepass: 表示要使用密碼。( 切記:  requirepass 前面不能空格!!! )           1qaz2wsx: 為我們設置的密碼          1.2  程式中如何設置連線字串:          在連線字串中,密碼和Host用@進行分隔。 2. 解除 ServiceStack.Redis 中的6000次連線限制 ( 目前版本為 6.0.2 )     2.1 下載原始碼:  GitHub - ServiceStack/ServiceStack.Text: .NET's fastest JSON, JSV and CSV Text Serializers     2.2  限制免費配額功能在ServiceStack.Text類庫下的LicenseUtils.cs文件中,僅需從GitHub上下載源碼後添加一行代碼重新編譯即可解除限制,如下圖:     2.3 將編譯好的DLL放到指定的資料夾中,再把新的專案重新編譯即可。 3. 將 Redis 加入服務     3.1 加入環境變數     3.2 加入服務          3.2.1 在 Redis 的資料夾中開啟 CMD,並且入以下指令 redis-server.exe --service-install redis.windows.conf --l...