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