發表文章

🧾SQL Server 備份失敗:媒體家族(media family)錯誤是什麼?一篇搞懂為什麼 .bak 備份檔不能用

一、這是一個「幾乎每個工程師都會遇到」的錯誤 如果你是軟體工程師、IT 或 MIS,只要有碰過 SQL Server,某一天你一定會遇到這個情境: 我只是想備份資料庫,為什麼 SQL Server 拒絕我? 系統跳出一個很長的錯誤訊息,大意是: 備份媒體與目前備份裝置設定不相容 很多人看到這裡會以為: 磁碟壞了 權限錯誤 SQL Server 壞了 資料庫損毀 其實都不是。 真正的原因只有一個: 你正在把「新的備份」寫進一個「舊規格的備份容器」。 而這個容器,就是 .bak 檔案。 二、先用一個生活比喻理解(超重要) 想像你有一個硬碟盒。 某天你用「雙硬碟 RAID」方式建立它(等於 2 個硬碟一起運作)。 後來你把其中一顆硬碟拔掉,只剩一顆, 然後你想把資料再存回去。 系統會說: 不行,這個盒子原本是 2 顆硬碟的結構,你現在只有 1 顆。 SQL Server 的 .bak 檔案也是一樣的概念。 三、什麼叫做 Media Family(媒體家族)? SQL Server 備份其實不是單純「存檔」。 它是一個 備份媒體容器(Backup Media Set) 。 一個備份可以有: 1 個檔案 2 個檔案 甚至 10 個檔案 例如: 工程師可能曾經做過這種備份: (以下為示意範例程式碼) 把資料庫同時寫入兩個備份檔 也就是說 一份備份,被拆成「兩個 .bak」。 這就叫: 多媒體備份(Striped Backup) 而 SQL Server 會在備份檔內寫入一個結構資訊: 「這個備份容器需要兩個媒體家族」 四、問題就出在這裡 之後某一天,你重新備份時,只使用一個檔案: 只備份到一個檔案 SQL Server 會檢查舊 .bak 的內部資訊,然後發現: 這個容器設計需要 2 個備份媒體,但你只提供 1 個。 所以它拒絕。 不是你權限錯誤 ...

🐬Spotfire 匯出報表資料跟 SQL 查詢不一致?工程師教你一步一步找出真正原因(含日期、PIVOT、快取陷阱)

一、這篇文章在解決什麼問題? 很多公司使用 BI 系統(例如 Spotfire、Power BI、Tableau) 自動產生報表, 但工程師最常遇到一個可怕的狀況: 「系統匯出的報表數據,跟我在資料庫查詢的不一樣。」 這不是小問題。 在半導體、金融、製造業,這種情況可能直接影響決策、產線、甚至客戶信任。 這篇文章會帶你理解: 你看到的「資料不同」,通常不是資料壞掉,而是 查詢邏輯不同 。 而且 — 非常常見。 二、真實案例(簡化後) 一位工程師建立了一個自動報表: 系統每天會: 從資料庫抓測試數據 分析 匯出 CSV 產生 PDF 他發現一件事: 系統顯示只有 3 個產品型號,但他在資料庫查詢卻看到很多列資料。 他以為: SQL 寫錯 報表錯 系統壞掉 其實都不是。 三、關鍵概念: 「清單」跟「明細」是兩種資料 先看一個例子: 資料庫裡的資料(明細)可能長這樣: 產品 批號 A 001 A 002 A 003 B 004 B 005 C 006 但報表系統可能只會先抓: 有哪些產品? 那結果會是: A B C 這叫做: DISTIN...

🐬Spotfire 出現「Bookmarks and Conversations」是什麼?按 Yes 還是 No?完整解釋與正確選擇教學

圖片
  一、為什麼你會看到這個奇怪的視窗? 如果你在公司負責報表、數據分析或維護 BI 系統(例如 Spotfire), 某一天你儲存報表時,突然跳出一個視窗: Bookmarks and conversations 並問你: 要不要保留 bookmarks 或 conversations? 很多人會卡住,因為: 不知道它是什麼 怕按錯報表壞掉 不敢問主管 其實這不是錯誤訊息,而是 Spotfire 在保護使用者的操作紀錄 。 這篇文章會用「完全沒有程式背景的人」也能理解的方式解釋。 二、先理解 Spotfire 是什麼(用生活例子) 你可以把 Spotfire 想像成: 一個「可以互動的 Excel + PowerPoint + 資料庫」的結合 它不是單純表格,而是: 可以點圖表 篩選資料 即時改變統計 多人同時看同一份報表 公司常用在: 半導體良率分析 銷售儀表板 工廠監控 客戶報表 三、什麼是 Bookmark?(最重要的觀念) 白話解釋 Bookmark 就像: 「把報表某個狀態拍一張快照存起來」 例如: 你在報表裡選了: 地區:台灣 產品:A系列 時間:本月 圖表縮放:失敗率 你按「儲存狀態」 → 這個狀態就變成 Bookmark。 之後別人只要點一下: 報表會瞬間回到你當時看的畫面。 也就是: Bookmark = 報表的預設觀看畫面 四、什麼是 Conversation? 這個更像「報表內建留言板」。 例如: 工程師在某個異常點旁邊留言: 這批良率異常,已確認為設備校正問題 主管或客戶打開報表時可以直接看到。 所以: 功能 像什麼 Bookmark 報表快照 Conversation 報表留言 五、為什麼儲存時會問你? 當你把報表存進公司「共用報表庫」時,其實你做的是: 覆蓋一個已經存在的報表 而那個舊報表裡,可能已經有: 使用者存的畫面 客戶的註解 主管的檢討紀錄 Spotfire 不敢直接刪掉, 所以才會問你: 這些人的紀錄,你確定要不要留下? 六、Yes 與 No 的真正差別 按 Yes(保留) 系統會: 保留所有 Bookmark 保留所有留言 新報表內容覆蓋舊報表...

🧾SQL 資料補值與跨表比對教學:用「同一筆主鍵」把錯誤欄位修正(新手也能懂)

你是不是也遇過這種情況: 資料表裡某個欄位的值「看起來怪怪的」,例如出現特殊符號、固定字母代碼、或明顯不是正常值;但你又知道「同一筆資料」在別的紀錄或別張表裡其實有正確值。這篇文章會用最白話的方式,帶你理解: 什麼是「用另一筆資料的欄位來補值」 為什麼你原本的查詢會「查不到(印出為空)」 如何用 SQL 寫出「只取第一筆」的補值規則 如何安全地把 SELECT 改成 UPDATE 如何比對兩張表中「同一個主鍵」的資料是否一致 一、問題場景:資料欄位出現「非正常值」,需要用參考資料補回來 假設你有一張「測試記錄表」 TestRecord ,裡面有一個欄位 CodeTag (類似日期碼 / 批號碼 / 分類碼)。 但某些資料的 CodeTag 會出現異常值,例如包含特殊符號或固定字樣(這通常代表上游流程寫入失敗或 placeholder 值)。 你希望做到: 如果 CodeTag 是異常值 → 用同一批資料下「其他站點/其他流程」的正常 CodeTag 來取代 如果能取代的資料有多筆 → 只拿「第一筆」作為參考(避免多筆造成更新不確定性) 二、為什麼你查詢會「印出為空」?新手最容易踩到的坑 很多人一開始會把條件寫得很精準,例如同時要求: 批號相同(例如 BatchNo ) 檔名相同(例如 FileName ) 且不是同一種站點(例如 Station <> 'X' ) 看起來合理,但實務上常常是: 同一批資料在不同站點產生的檔名不會一樣 。 所以你加上「檔名必須一樣」後,參考資料根本配不到,結果就會: SELECT 查不到 → 顯示空 ...

🐬Spotfire Data Function 找不到?Register 是空的但按鈕可用!完整圖文教學+3 種救回方法

圖片
前言 很多使用 TIBCO Spotfire 的工程師或資料分析師,都會遇到一個非常詭異的現象: Register data functions… 裡面是空的 但畫面上的按鈕卻真的會跑資料 而且 Action Control 裡還能看到 Data Function 名稱 這會讓人誤以為: 是不是 Spotfire 壞掉?或權限有問題? 其實都不是。 這篇文章會帶你 一步一步確認原因,並把 Data Function 從分析檔中救回來。 一、先確認你是不是遇到同一種問題 圖 1:你在 Edit 裡找不到 Data Function 很多人第一直覺會在 Edit 裡找功能。 但這裡其實只有: 篩選 標記 畫面互動 👉 Data Function 不在這裡 正確位置:Tools 請打開: Tools → Register data functions… 圖 2:真正的 Data Function 入口 這裡才是 Spotfire 管理資料運算腳本的地方。 二、關鍵症狀:Register 是空的,但按鈕卻有 Function 你打開後可能看到: Register Data Functions 視窗完全空白 但是… 圖 3:Text Area 按鈕卻能選到 Data Function 這代表: Data Function 在這份分析檔(DXP)裡,但沒有註冊到你目前的環境。 這不是錯誤,而是 Spotfire 的設計機制。 三、為什麼會發生?(白話解釋) Spotfire 的 Data Function 有 3 種存放位置 : 類型 說明 Register 會看到? 內嵌在 DXP 跟分析檔一起 ❌ Library 存在 Server ✅ 本機新建 你自己建立 ✅ 你現在的情況是: 這份分析檔是「別人做好的」,Data Function 被包在裡面帶過來。 所以: 按鈕可以用 但你管理不到 四、如何把 Data Function 撈出來(最重要) 方法一(成功率最高) 把 DXP 當壓縮檔打開 很多人不知道: .dxp 本質上是一個封裝檔(類似 zip) 步驟 1️⃣ 先另存一份 DXP 2️⃣ 關閉 Spotfire 3️⃣ 用 7-Zip 或 Win...

🧠【Spotfire IronPython 教學】EOL while scanning single-quoted string 是什麼?一次看懂並快速排除(新手也能理解)

 Meta Description 當 Spotfire Automation 或 IronPython Script 出現「EOL while scanning single-quoted string」錯誤時代表什麼?本篇用白話說明原因、常見情境、SQL 與路徑寫法錯誤案例,並提供快速排除方法與最佳實務。 一、這個錯誤到底在說什麼?(白話版) 如果你在 Spotfire 自動報表、排程或 Script 裡看到這個錯誤: EOL while scanning single-quoted string 先不要緊張。 它其實不是資料庫壞掉、不是伺服器掛掉、也不是帳密錯。 它的真正意思只有一句話: 你的文字被電腦讀到一半「沒結束」。 就像你傳 LINE 訊息: 我今天要跟你說「 然後你人就消失了。 ...