據(jù)庫管理實戰(zhàn)指南)
SSMS這玩意兒說它是SQL Server的“駕駛艙”一點都不夸張。不管你是剛接觸數(shù)據(jù)庫的新人還是已經(jīng)寫了多年SQL的老手只要跟SQL Server打交道SQL Server Management Studio基本上繞不開。很多新手第一次接觸時容易被網(wǎng)上一堆過時教程帶偏要么下載到了亂七八糟的捆綁包要么卡在連接實例、權(quán)限報錯這類基礎(chǔ)問題上大半天。這篇教程我從頭到尾梳理一遍覆蓋下載、安裝、配置、日常使用和卸載清理盡量做到每一步都能照著做少踩坑。適不適合你先判斷一下如果你想找一個圖形化工具來管理SQL Server數(shù)據(jù)庫比如建庫建表、寫查詢、做備份還原、看執(zhí)行計劃那SSMS就是官方推薦的免費工具如果你只是想在服務(wù)器上裝個數(shù)據(jù)庫跑程序不打算天天手動操作也可以裝完SQL Server后順手裝一個SSMS做成“應(yīng)急操作臺”。這篇東西對零基礎(chǔ)、初級運維、初學(xué)數(shù)據(jù)庫開發(fā)的人都適用。1. 內(nèi)容整體設(shè)計與思路拆解1.1 SSMS到底是什么為什么大家一提到SQL Server就想到它SSMS的全稱是SQL Server Management Studio微軟官方提供的一個集成管理環(huán)境專門用來管理SQL Server的各種組件包括數(shù)據(jù)庫引擎、Analysis Services、Integration Services、Reporting Services等等。通俗點說SQL Server本體是發(fā)動機SSMS就是方向盤和中控屏你通過這個工具去啟動、停止、配置、查詢、監(jiān)控而不是直接對著引擎蓋鼓搗。很多人容易混淆一個概念SSMS不是SQL Server本身兩者是分開安裝的。SQL Server是數(shù)據(jù)庫服務(wù)就算電腦上沒裝SSMS你的應(yīng)用程序一樣可以連接數(shù)據(jù)庫正常工作。反過來SSMS只是客戶端工具你可以用它在自己的筆記本上管理服務(wù)器機房里的SQL Server也可以管理本機的。甚至可以說SSMS更像一個萬能遙控器你不需要搬著顯示器坐到服務(wù)器前面去操作。這也是為什么標(biāo)題里把下載、安裝、配置、使用、卸載拆得那么細因為網(wǎng)上的確有不少人把“裝SQL Server”和“裝SSMS”當(dāng)成同一件事結(jié)果來回裝了好幾遍也沒搞明白到底缺了哪一塊。1.2 為什么用SSMS而不是其他管理工具第一它是官方工具免費功能和數(shù)據(jù)庫版本的同步速度最快。SQL Server的版本已經(jīng)更新到2022第三方工具可能還在適配但SSMS通常每個月都有更新新版本特性出來后很快就能在工具里看到。第二它不挑環(huán)境。從SQL Server 2008到2022從Windows 10到Windows Server 2022SSMS都能連而且對老版本數(shù)據(jù)庫的兼容性做得相當(dāng)好。我見過不少公司的生產(chǎn)庫還是SQL Server 2008 R2用最新的SSMS打開照樣能管理。第三社區(qū)生態(tài)成熟。你遇到任何報錯把SSMS里的錯誤信息一搜幾乎都能找到答案這點在排查問題時能省掉大量時間。那有沒有必要用Navicat、DBeaver這些看個人習(xí)慣。Navicat的界面更人性化DBeaver支持多數(shù)據(jù)庫但如果你想用官方最全的功能尤其是做數(shù)據(jù)庫調(diào)優(yōu)、查看執(zhí)行計劃、管理Agent作業(yè)這類高階操作SSMS依然是首選。順帶說一句標(biāo)題相關(guān)熱詞里有“navicat for sql server激活碼”之類的東西我勸你別碰盜版正規(guī)的Navicat按訂閱付費實在預(yù)算有限就用SSMS或者開源的DBeaver沒必要為了省點錢給自己埋雷。1.3 一個容易誤會的點SSMS是不是一定要配合Azure云才能用熱詞里有“sql server可以不用azure嗎”這個問題在群里被問過無數(shù)次。很多新人打開SQL Server安裝向?qū)Ь涂吹搅恕癆zure”相關(guān)的選項再看到SSMS登錄界面默認是“Microsoft賬戶”就以為這工具必須上云或者必須注冊微軟賬號才能用。完全不是這樣。SQL Server 2019/2022的安裝向?qū)儐枴笆欠袷褂肁zure云服務(wù)”那是可選項你只要不勾選就能完全本地部署。SSMS的登錄界面默認顯示Microsoft賬戶也只是因為新版工具支持Azure SQL的登錄方式真正登錄本地數(shù)據(jù)庫時你選“Windows身份驗證”或“SQL Server身份驗證”就行全程不碰任何云服務(wù)。簡單說SSMS完全可以本地、離線、單機使用不需要Azure賬號不需要注冊什么微軟云服務(wù)。2. 下載安裝這一關(guān)怎么過才不踩坑2.1 下載渠道和版本選擇別再百度搜第一鏈接下載SSMS最先做的事情只有一個認準(zhǔn)微軟官方下載頁面。搜索引擎首頁給你排前面的鏈接很有可能帶了捆綁或舊版本尤其是某些第三方下載站下載完安裝時夾帶全家桶我有同事就因為偷懶吃過虧。官方下載頁面的地址就是微軟官網(wǎng)里搜“SQL Server Management Studio”第一個結(jié)果頁面里會有當(dāng)前最新的SSMS版本號。寫作這篇教程時常見的最新版本是SSMS 20.x此前大家在用的19.x、18.10也依然能下載到歷史版本。熱詞里有“free download for sql server management studio (ssms) 18.10”說明不少人還在找18.10這個版本目前仍然可用但如果你是學(xué)習(xí)或日常管理直接用最新版就好沒必要刻意追舊版本。下載時需要看清楚安裝包位數(shù)?,F(xiàn)在SSMS本身只有64位版本操作系統(tǒng)也基本都是64位的如果你的機器還是32位系統(tǒng)那連SSMS都裝不了得先把系統(tǒng)升級成64位。還有一點SSMS 19以后的版本要求系統(tǒng)不低于Windows 10或Windows Server 2019Windows 8.1及以下官方已經(jīng)不再支持裝上了也可能缺依賴項。2.2 安裝過程中的關(guān)鍵選項和經(jīng)驗下載下來的是一個類似SSMS-Setup-CHS.exe的文件雙擊運行后進入安裝向?qū)?。這個過程比較簡單但有幾個點值得注意第一安裝之前最好把SQL Server相關(guān)的程序都關(guān)掉尤其是以前裝過的SSMS舊版本。新版SSMS通常會覆蓋舊版本但偶爾會因為文件占用導(dǎo)致升級失敗。我自己的習(xí)慣是先控制面板卸載舊版重啟一次再裝新版這樣最干凈后面講卸載的時候會展開說。第二安裝路徑可以改成非C盤但不建議。原因是SSMS本身不算太大放在默認路徑可以避免后面系統(tǒng)權(quán)限、Profile路徑之類的問題而且它更新頻繁每次更新也是直接原地升級你挪了位置反而可能導(dǎo)致更新失敗。第三安裝過程不需要輸入密鑰它是免費的。注意這里說的是SSMS免費不是SQL Server免費。SQL Server企業(yè)版、標(biāo)準(zhǔn)版是商業(yè)授權(quán)個人學(xué)習(xí)一般用Express版本或Developer版本。很多新手以為裝了SSMS就等于有了完整版SQL Server這是理解偏差。Express版是精簡免費版適合學(xué)習(xí)和小型應(yīng)用Developer版功能完整但只允許開發(fā)和測試使用不能用于生產(chǎn)環(huán)境。換句話說SSMS解決的是“操作界面”問題數(shù)據(jù)庫引擎本身還要單獨安裝。提示如果你只是需要SSMS來連接公司或?qū)W校的數(shù)據(jù)庫完全可以不裝SQL Server數(shù)據(jù)庫引擎單獨裝SSMS就行。它會自動識別局域網(wǎng)里的實例也能通過IP遠程連接。2.3 SQL Server各版本之間到底怎么選根據(jù)熱詞里反復(fù)出現(xiàn)的幾個版本SQL Server 2008、2008 R2、2012、2014、2016、2019、2022簡單做一個歸類方便不同需求的人選。場景推薦版本原因個人學(xué)習(xí)、零基礎(chǔ)SQL Server 2022 Express免費、安裝包小、功能夠用、官方還在維護本地開發(fā)測試SQL Server Developer 2022功能最全、免費但授權(quán)僅限開發(fā)和測試公司正式生產(chǎn)環(huán)境SQL Server 2022 Standard或Enterprise商業(yè)授權(quán)需要按照實際CPU核心數(shù)購買老舊課程、考試環(huán)境SQL Server 2008 R2或2012僅為了做老教材實驗但這兩個版本早已停止主流支持不建議新部署Windows Server 2022上裝老版本2014或2016及以上經(jīng)驗上2014打了SP3后能正常工作但官方兼容性矩陣不保證能用不代表推薦生產(chǎn)環(huán)境別冒險Express版安裝時有個小坑要注意它默認會把實例名裝成SQLEXPRESS連接時服務(wù)器名稱要填“計算機名\SQLEXPRESS”而不是直接填計算機名。很多人裝完Express后怎么都連不上就是因為服務(wù)器名稱漏了后面的實例名。2.4 裝完以后第一件事確認版本和連接路徑安裝完成后開始菜單里找“Microsoft SQL Server Management Studio 20.x”打開。正常情況下會先彈出一個“連接到服務(wù)器”的對話框右鍵點擊對象資源管理器里的“連接”選擇“數(shù)據(jù)庫引擎”然后填服務(wù)器名稱和認證方式。服務(wù)器名稱有三種常見填法本機默認實例直接填計算機名比如DESKTOP-ABC123本機命名實例填“計算機名\實例名”比如DESKTOP-ABC123\SQLEXPRESS遠程服務(wù)器填I(lǐng)P地址或主機名比如192.168.1.100如果有命名實例還要加“\實例名”Windows身份驗證適合本機或域環(huán)境直接用當(dāng)前Windows賬戶登錄不需要密碼SQL Server身份驗證需要提供sa或數(shù)據(jù)庫賬號密碼這個前提是SQL Server安裝時啟用了混合身份驗證模式否則即使填了賬號密碼也會報錯。如果你的機器上只裝了SSMS沒有裝任何SQL Server數(shù)據(jù)庫服務(wù)這一步肯定是連不上的因為在“服務(wù)器名稱”下拉框里根本沒有任何實例可選。這種時候要么先去裝數(shù)據(jù)庫引擎要么連接遠程已有的數(shù)據(jù)庫實例。3. 配置使用日常操作一次說清3.1 新建數(shù)據(jù)庫和表的基本操作連接成功后對象資源管理器就能看到“數(shù)據(jù)庫”文件夾。右鍵“數(shù)據(jù)庫”選擇“新建數(shù)據(jù)庫”輸入名稱后直接“確定”即可。這一步里大多數(shù)人會忽略的其實是“文件”和“選項”兩個頁簽比如初始大小、自動增長、排序規(guī)則、恢復(fù)模式。學(xué)習(xí)階段用默認值問題不大但生產(chǎn)環(huán)境里建議把數(shù)據(jù)庫文件和日志文件分盤存放日志文件不要放在C盤系統(tǒng)盤上不然日志膨脹會把系統(tǒng)盤塞滿。建表的操作同樣簡單展開數(shù)據(jù)庫找到“表”右鍵選擇“新建表”然后逐列填寫列名、數(shù)據(jù)類型、是否允許NULL。保存表時SSMS會彈出一個“選擇名稱”窗口但這個窗口默認不顯示“數(shù)據(jù)庫圖表”和“表設(shè)計器”新手經(jīng)常找不到保存按鈕搞了半天才發(fā)現(xiàn)要按CtrlS。這里分享一個從實際項目中總結(jié)的經(jīng)驗文件組和分區(qū)這些功能等你有幾百GB數(shù)據(jù)、查詢明顯變慢時再研究前期別在SSMS里把表結(jié)構(gòu)設(shè)計得過于花哨維護成本和理解成本都會變高。先把主鍵、索引、外鍵這些基礎(chǔ)做對比什么都強。3.2 查詢窗口常用的快捷操作SSMS最常用的功能其實是“新建查詢”。在對象資源管理器上方的工具欄里點“新建查詢”就會打開一個查詢編輯器窗口里面直接寫SQL。哪怕是資深開發(fā)我也不建議你只用鼠標(biāo)去點各種菜單有些快捷鍵真的要背下來效率完全不同F(xiàn)5執(zhí)行當(dāng)前選中的SQL或者執(zhí)行光標(biāo)所在語句塊CtrlShiftR刷新對象資源管理器CtrlR顯示/隱藏結(jié)果窗格CtrlShiftU代碼轉(zhuǎn)大寫CtrlShiftL代碼轉(zhuǎn)小寫CtrlK, CtrlC注釋選中代碼CtrlK, CtrlU取消注釋選中代碼寫SQL的時候有個習(xí)慣我從入行一直保持到現(xiàn)在先在查詢編輯器里先寫一小段再執(zhí)行一小段而不是把幾百行SQL一次性跑完。一旦報錯定位起來非常痛苦。你可以選中某一段SQL單獨執(zhí)行SSMS只會執(zhí)行被選中的部分這個功能排查問題時極其好用。3.3 賬號密碼策略和日常權(quán)限分配SQL Server安裝向?qū)Ю镉幸徊綍儐枴吧矸蒡炞C模式”默認是Windows身份驗證但實際工作里很多人會改成“混合模式”并設(shè)置sa密碼。這里有個熱詞叫“sql server 2012密碼到期”實際上任何版本都可能遇到。SQL Server登錄賬號默認是“強制密碼過期”而sa賬號如果打開了這個策略密碼過期后你連接時就會報錯。排查思路很簡單先用Windows身份驗證登錄展開“安全性 - 登錄名”右鍵sa選擇屬性在“密碼策略”里取消勾選“強制密碼過期”和“用戶下次登錄時必須更改密碼”。如果是因為密碼過期已經(jīng)進不去了你還可以用Windows身份驗證進去重置sa密碼。這是個老掉牙的問題但每年依然有人中招尤其是公司內(nèi)部規(guī)定定期改密的環(huán)境里。日常開發(fā)中千萬不要全員用sa賬號。正確的做法是給開發(fā)人員創(chuàng)建一個普通登錄名只授予對應(yīng)數(shù)據(jù)庫的db_owner或db_datareader/db_datawriter權(quán)限。這樣做的好處是一旦有人誤執(zhí)行DROP TABLE或者寫了死循環(huán)查詢你的最小權(quán)限賬戶能把影響范圍控制在單庫級別。SSMS里沒有這個意識的團隊出安全事故基本只是時間問題。3.4 備份和還原這步做錯了會急哭數(shù)據(jù)庫的備份還原是SSMS里一定要親手練熟的操作。很多人以為備份就是把.mdf文件復(fù)制一份這個觀念非常危險。SQL Server正在運行時直接拷貝數(shù)據(jù)文件是不一致的必須通過備份命令或SSMS的備份功能產(chǎn)生完整的備份文件。SSMS里備份的操作路徑右鍵數(shù)據(jù)庫 - 任務(wù) - 備份 - 備份類型選“完整” - 目標(biāo)磁盤選擇路徑 - 確定。還原時右鍵“數(shù)據(jù)庫”選擇“還原數(shù)據(jù)庫”在“源”里選擇“設(shè)備”找到.bak文件后勾選目標(biāo)數(shù)據(jù)庫即可。備份還原平時多練兩次真到出故障時才能手穩(wěn)。我自己經(jīng)歷過一次把生產(chǎn)庫誤更新成測試數(shù)據(jù)的慘痛教訓(xùn)幸好前一天有完整備份十分鐘就恢復(fù)了。從那以后每周自動備份加每日差異備份成了鐵律。SSMS里可以通過SQL Server Agent創(chuàng)建維護計劃來自動備份別等到數(shù)據(jù)丟了再哭著找DBA。3.5 不需要Azure但首選項還是要配一下首次打開SSMS后建議進入“工具 - 選項”里把幾個默認行為改掉。比較實用的幾個在“查詢執(zhí)行 - SQL Server - 默認”里設(shè)置結(jié)果集顯示為“網(wǎng)格”這個看似很小的改動會讓查詢結(jié)果整齊很多純文本模式看長字段值會崩潰。還有“設(shè)計器”選項里防止保存更改需要重新創(chuàng)建表的警告默認是開啟的經(jīng)常更新表結(jié)構(gòu)的人會被這個彈窗煩死可以關(guān)掉但要清楚它本身是個保護機制。另外把“查詢結(jié)果 - SQL Server - 將結(jié)果保存到文件”的默認編碼改成UTF-8導(dǎo)出CSV時遇到中文亂碼的概率會小很多。這些細節(jié)不寫在官方快速入門里但實際工作里踩過坑才知道改。4. 常見問題排查我踩過的坑都在這4.1 SSL證書鏈錯誤的經(jīng)典報錯熱詞里有一串很扎眼的報錯代碼[08001] [Microsoft][ODBC Driver 17 for SQL Server]SSL 提供程序: 證書鏈?zhǔn)怯刹皇苄湃蔚念C發(fā)機構(gòu)頒發(fā)的這是很多人用ODBC或某些第三方軟件連接SQL Server時最常見的問題。報錯原因很簡單SQL Server在傳輸層默認啟用了加密但客戶端不信任服務(wù)器的自簽名證書。解決辦法有兩個方向。方向一如果只是本機測試或內(nèi)網(wǎng)環(huán)境客戶端連接字符串里加一行TrustServerCertificateTrue或者把驅(qū)動的加密級別從“Mandatory”調(diào)成“Optional”。這樣就不再校驗服務(wù)器證書鏈問題立即消失。注意這只能解決“測試環(huán)境、內(nèi)網(wǎng)可信網(wǎng)絡(luò)”下的報錯生產(chǎn)環(huán)境不建議這樣做因為等于放棄了傳輸加密的合法性校驗。方向二正確做法是在SQL Server配置管理器里“SQL Server網(wǎng)絡(luò)配置”下找到實例的協(xié)議屬性在“標(biāo)志”頁簽里把“Force Encryption”設(shè)為“否”或者把證書替換成企業(yè)CA簽發(fā)的合法證書。如果公司已有證書服務(wù)直接申請一張SSL證書綁定到SQL Server上一勞永逸。順帶說一句熱詞里還有“solidworks electrical無法連接到sql server”的問題這類第三方工業(yè)軟件連接SQL Server失敗的排查思路是通用的先確認實例名和端口確認防火墻放行了1433確認賬號權(quán)限夠確認網(wǎng)絡(luò)協(xié)議里TCP/IP已啟用。很多軟件用的是“計算機名\實例名”一旦實例名變了連接就失敗。4.2 Reporting Services權(quán)限不足的問題熱詞里還有個具體的報錯Reporting Services錯誤:用戶“desktop-vjg4i00\admin”不具有所需的權(quán)限。SSRSSQL Server Reporting Services部署在瀏覽器里訪問報表管理器時經(jīng)常出現(xiàn)這種提示。原因不是賬號密碼錯誤而是報表服務(wù)網(wǎng)站里的角色分配沒做。你的Windows賬號雖然在操作系統(tǒng)層面是管理員但在SSRS的報表管理器中并沒有被授予任何角色。解決路徑打開“Reporting Services配置管理器 - Web門戶URL - 打開瀏覽器”登錄后進入“設(shè)置 - 安全性”添加新角色分配把當(dāng)前用戶加進去勾選“內(nèi)容管理員”或“瀏覽者”角色。如果你連配置管理器都打不開檢查SSRS服務(wù)和IIS/HTTP端口是否啟動。這類問題在剛裝完報表服務(wù)的機器上特別常見因為安裝完成后沒有執(zhí)行初始的角色分配所以哪怕本機管理員進去也是空白。4.3 第三方工具連不上SQL Server的通用排查順序如果你的Navicat、DBeaver、Python、Java程序連不上SQL Server千萬不要一上來就懷疑是密碼問題。按順序排查會快很多。第一步檢查SQL Server服務(wù)是否啟動。開始菜單搜“services.msc”找到SQL Server (MSSQLSERVER)或SQL Server (SQLEXPRESS)確認啟動狀態(tài)。第二步確認TCP/IP協(xié)議已啟用??旖萱IWinR輸入SQLServerManager15.msc打開SQL Server配置管理器版本不同文件名不同15對應(yīng)SQL Server 2019/SSMS 20時代的配置項在“SQL Server網(wǎng)絡(luò)配置 - 實例協(xié)議”里把TCP/IP設(shè)為“已啟用”。很多系統(tǒng)默認情況下TCP/IP是啟用的但也不排除某些安裝場景里被關(guān)掉。然后重啟SQL Server服務(wù)。第三步防火墻放行。SQL Server默認端口是1433SQL Server Browser服務(wù)對應(yīng)的UDP端口是1434。本機連接不需要考慮防火墻遠程連接時必須放行。這里有個常見誤解放行了1433但如果是命名實例客戶端需要通過SQL Server Browser服務(wù)來解析端口所以UDP 1434也要放行。如果內(nèi)網(wǎng)安全策略不允許開UDP也可以在SQL Server配置管理器里給實例設(shè)置固定端口配置里直接填“IP,端口”的方式繞過Browser服務(wù)。第四步驗證連接字符串有沒有寫對。服務(wù)器名稱、實例名、用戶名、密碼一個都不能錯尤其用戶名不能帶域名前綴時不要畫蛇添足。很多第三方軟件在Windows本機連接時服務(wù)器名寫成localhost或127.0.0.1本來沒問題但如果SQL Server實例是命名實例就得寫成localhost\SQLEXPRESS或者127.0.0.1\SQLEXPRESS。4.4 日期格式、字符串亂碼和排序規(guī)則熱詞里有“sql server把日期設(shè)置成yyyymmdd hh:mm:ss”這其實是很多開發(fā)碰到的一個經(jīng)典誤解。SQL Server內(nèi)部存DATETIME類型時根本不存在“一種顯示的格式”這種說法——它存儲的是一組數(shù)值。所謂“yyyy-mm-dd hh:mm:ss”是客戶端展示格式由連接會話的語言設(shè)置決定。如果你在查詢里需要輸出這種格式最快的方式是用CONVERT函數(shù)SELECT CONVERT(VARCHAR(19), GETDATE(), 120)代碼里的120就是ODBC標(biāo)準(zhǔn)格式y(tǒng)yyy-mm-dd hh:mm:ss。真正要設(shè)置的是會話語言的默認格式但那是另一回事了日常開發(fā)用轉(zhuǎn)換函數(shù)控制輸出格式最直接。中文亂碼問題的根源往往也不是“SQL Server不支持中文”而是客戶端連接字符集或排序規(guī)則不對。比如建庫時選了SQL_Latin1_General_CP1_CI_AS排序規(guī)則存中文字符時雖然能存進去但排序和比較規(guī)則很奇怪偶爾還會出現(xiàn)亂碼。如果你未來的庫主要是中文業(yè)務(wù)建庫時建議使用Chinese_PRC_CI_AS這類中文排序規(guī)則。SSMS界面語言也可以通過安裝“語言包”或修改快捷方式啟動參數(shù)來切換為英文具體方法其實就是在SSMS.exe啟動時指定-l參數(shù)配合語言資源ID網(wǎng)上有零散的帖子但說實話日常使用里保持中文界面的人大多數(shù)都不用切換所以這個需求排不到優(yōu)先級。4.5 安裝“成功”但連不上、SQL Server 2012安裝完成但失敗熱詞里有“sql server 2012安裝完成但失敗”和“sql server安裝”這類組合。這種問題我見過幾種典型形態(tài)安裝向?qū)ё詈笠徊教崾尽鞍惭b失敗”但實際組件可能已經(jīng)裝上七七八八了或者安裝完成服務(wù)列表里也有SQL Server服務(wù)但就是連接轉(zhuǎn)圈又報錯。最直接的處理方案是看SQL Server錯誤日志和安裝日志它們一般在安裝目錄下的log文件夾里。普通用戶更快的辦法是打開“安裝程序日志目錄”搜索“Error”關(guān)鍵字。很多時候失敗原因是.NET Framework版本不匹配、Visual C運行庫缺失或者Windows Update補丁影響。SQL Server 2012年代久遠在現(xiàn)在的新系統(tǒng)上裝不了太正常了不建議硬折騰換SQL Server 2019/2022 Express會更省心。如果你確實要兼容學(xué)校的教材環(huán)境那建議在虛擬機里裝一個Windows Server 2012/2016再裝SQL Server 2012而不是直接在主力機器上強行裝。虛擬機的好處是快照能力裝壞了直接回滾不用跟宿主機系統(tǒng)糾纏。4.6 一個一直被忽略的隱患SQL Server 2008/2008 R2的停止支持問題熱詞里還有“sql server 2008”“sql server 2008 r2”我能理解很多人還在用甚至不少培訓(xùn)機構(gòu)依然用2008講課。但要說清楚SQL Server 2008和2008 R2的擴展支持期早已結(jié)束微軟不再提供安全補丁如果你的服務(wù)器暴露在公網(wǎng)等于把漏洞掛在門外面。如果你是在純學(xué)習(xí)環(huán)境、本地虛擬機里使用那無所謂如果是企業(yè)內(nèi)部系統(tǒng)強烈建議至少升級到SQL Server 2019或2022。哪怕只是把備份文件還原到新版本也能利用新版本的性能優(yōu)化和安全機制。升級之前用SSMS自帶的數(shù)據(jù)庫遷移工具做一次評估看看有沒有兼容性問題比直接拔線拷貝靠譜得多。順帶提到“sql server 2008注入”這個熱詞很多人搜索SQL注入相關(guān)內(nèi)容時其實是沖著“手工注入教程”去的這個我必須勸一句別拿真實系統(tǒng)練手這既違法也不道德。正確的學(xué)習(xí)方式是搭建自己的實驗環(huán)境然后研究如何用參數(shù)化查詢、最小權(quán)限賬號、防火墻規(guī)則來防范注入攻擊。開發(fā)的底線是寫安全的代碼而不是學(xué)怎么繞過別人的防線。5. 卸載與清理別以為控制面板刪了就完事5.1 標(biāo)準(zhǔn)卸載路徑有些朋友裝了SSMS后發(fā)現(xiàn)版本不對、或者被系統(tǒng)搞得亂七八糟想重裝卸載這步?jīng)]做好后面就各種鬼畜。SSMS的卸載其實比SQL Server簡單得多但流程還是要有打開控制面板 - 程序和功能 - 找到“Microsoft SQL Server Management Studio” - 卸載。卸載完成后建議重啟一次系統(tǒng)再安裝新版本。按理說SSMS是獨立產(chǎn)品不會像數(shù)據(jù)庫引擎那樣卸載時牽扯一堆服務(wù)。不過實際過程中我發(fā)現(xiàn)舊版SSMS偶爾會在“程序和功能”里留下Microsoft SQL Server Management Studio的多個條目需要全部清掉再裝新版不然安裝程序可能報“較新版本已安裝”。5.2 新版本裝不上怎么辦殘留文件處理如果你卸載了舊版但安裝新版過程中一直提示“已有更高版本存在”或安裝進度卡在某個界面上多半是安裝狀態(tài)注冊表殘留。不要急著亂刪注冊表先試試微軟官方提供的“卸載工具”或SSMS自帶的修復(fù)功能。要是官方工具也搞不定再考慮手動清理但一定要對注冊表操作有把握再動手。重點檢查以下位置HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server Management Studio HKEY_CURRENT_USER\SOFTWARE\Microsoft\SQL Server Management Studio刪除時要記得先備份注冊表或?qū)С鲆淮巍A硗獗镜赜脩舻奈臋n目錄下也可能有SSMS的配置緩存一般位于“用戶\AppData\Roaming\Microsoft\SQL Server Management Studio”清理掉可以避免新版本讀取到舊項目的選項配置。不過這個目錄刪了不會影響數(shù)據(jù)庫數(shù)據(jù)放心處理。5.3 卸載SQL Server本身的注意事項很多人搜“sql server卸載”其實是沖著卸載整個數(shù)據(jù)庫引擎來的。這個比卸載SSMS復(fù)雜因為SQL Server有多個服務(wù)、組件、還有許可證相關(guān)的注冊信息。簡單說幾個關(guān)鍵點先在控制面板的“程序和功能”里找到“Microsoft SQL Server 202264位”之類的條目選擇卸載。卸載過程中會進入Microsoft SQL Server安裝中心讓你選擇“功能”此時把“共享功能”和“數(shù)據(jù)庫引擎服務(wù)”全部勾選移除后繼續(xù)。卸載過程中SQL Server可能會要求重啟重啟后還可能殘留SQL Server Reporting Services、SQL Server Analysis Services等服務(wù)這些也在程序和功能里挨個卸載。最后如果服務(wù)列表里還有“SQL Server”開頭的服務(wù)項打開管理員命令提示符手動刪除占用的計劃任務(wù)目錄和服務(wù)注冊信息。這種情況下不建議清理注冊表太激進。除非你非常清楚自己在做什么否則寧可讓它在注冊表里躺尸也不要誤刪了別的軟件鍵值。注意卸載SQL Server不會自動刪除你的數(shù)據(jù)庫文件。默認數(shù)據(jù)目錄通常在C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA卸載前如果你還要保留數(shù)據(jù)先去復(fù)制.mdf和.ldf文件。如果確定不要了卸載后手動刪除整個數(shù)據(jù)目錄即可這步不做系統(tǒng)刪不干凈。5.4 裝SQL Server之前必須想明白的三個問題卸載重裝的事見多了真心建議裝之前先想清楚三件事能少走很多彎路。第一你到底要Express、Developer還是標(biāo)準(zhǔn)版。前面講過Express免費但有大小和實例限制Developer功能全但只能開發(fā)測試用。很多公司內(nèi)部管理系統(tǒng)其實用Express也能扛住前提是你別把數(shù)據(jù)庫文件搞到10GB以上。第二默認實例還是命名實例。默認實例連接最方便服務(wù)器名稱直接填主機名命名實例適合同一臺機器裝多個實例的情況。自己學(xué)習(xí)開發(fā)用默認實例就好別刻意搞成命名實例增加認知負擔(dān)。第三實例目錄和系統(tǒng)盤位置。SQL Server默認裝在C盤如果你C盤空間緊張安裝時可以把數(shù)據(jù)目錄改到D盤但共享管理工具目錄不建議改否則某些功能組件路徑對不上。6. 我個人在實際操作中的習(xí)慣分享給你最后講幾個這些年實際用下來的小習(xí)慣不一定適合所有人但踩過的坑讓我覺得值得留一筆。第一個習(xí)慣是快捷鍵養(yǎng)成。剛接觸SSMS時我對快捷鍵完全不在狀態(tài)直到有一次線上問題排查旁邊DBA鍵盤噼里啪啦幾秒鐘定位到阻塞會話我還在一級級點菜單那次之后我硬逼自己背下了F5、CtrlR、CtrlK CtrlC這些基礎(chǔ)快捷鍵。效率的提升是肉眼可見的尤其是頻繁查詢和修改表結(jié)構(gòu)的場景下鼠標(biāo)少點一下都能省很多時間。第二個習(xí)慣是生產(chǎn)環(huán)境堅持“最小權(quán)限”查處。無論SQL Server還是SSMS都別因為自己是管理員就只用sa登錄。我見過太多因為sa密碼泄漏導(dǎo)致整個庫被人刪光的例子?,F(xiàn)在我做運維初始就會創(chuàng)建低權(quán)限賬號只給業(yè)務(wù)庫的讀寫權(quán)限D(zhuǎn)DL操作通過審核流程統(tǒng)一執(zhí)行。這樣就算賬號泄了損失也可控。第三個習(xí)慣是備份永遠大于技術(shù)。寫代碼再精也不如一個有效的備份實在。SSMS維護計劃里配置了每周全備加每日差異備備份文件放到獨立磁盤再做一次異地副本。真出故障時你會發(fā)現(xiàn)所謂的高深調(diào)優(yōu)技巧都抵不過一個能恢復(fù)的.bak文件。尤其是新手學(xué)會備份還原比學(xué)會寫很復(fù)雜的SQL都重要得多。第四個習(xí)慣是發(fā)現(xiàn)問題先看錯誤日志不要反復(fù)猜測。SSMS里遇到報錯第一件事是把完整的錯誤文本復(fù)制下來搜索。很多報錯信息里包含了關(guān)鍵Context信息網(wǎng)上基本都有現(xiàn)成解決方案。不要只截圖個錯誤代碼就完事錯誤信息的后半段往往才是重點比如“證書鏈?zhǔn)怯刹皇苄湃蔚念C發(fā)機構(gòu)頒發(fā)的”這種描述一眼就知道方向在哪。