戰(zhàn)指南)
簡介SQLDeveloper 是 Oracle 官方出品的免費(fèi)數(shù)據(jù)庫開發(fā)工具本包為 21.4.3 正式發(fā)布版面向數(shù)據(jù)庫開發(fā)與管理人員無需安裝 Oracle 客戶端即可直連使用適用于日常查詢、PL/SQL 調(diào)試、數(shù)據(jù)建模等場景相比 PL/SQL Developer 在功能與合規(guī)性上更具優(yōu)勢。壓縮包共 2512 個文件包含 997 個 jar 核心類庫、662 個 xml 配置、172 個 dll 與 31 個 exe 運(yùn)行組件、151 個 sql 示例腳本及 126 個 xslt 模板等整體約 435.95MB目錄結(jié)構(gòu)完整可滿足離線部署與二次配置需要。已有 816 人學(xué)習(xí)下載。作者提供了 MD5 與 SHA1 校驗(yàn)值便于驗(yàn)證包體完整性解壓后即可運(yùn)行省去手動配置客戶端的繁瑣步驟特別適合希望借助正版免費(fèi)工具提升數(shù)據(jù)庫開發(fā)效率的團(tuán)隊(duì)或個人使用。 在公司W(wǎng)indows 11 x64工作站上折騰數(shù)據(jù)庫工具的時候sqldeveloper-21.4.3.063.0100-x64.zip 這個文件在我硬盤里躺了挺長時間。我得說這個版本不算新但它屬于那種“放在生產(chǎn)環(huán)境里不會給你惹事”的穩(wěn)定貨。如果你日常工作要寫PL/SQL存儲過程、遠(yuǎn)程連庫排查問題、做數(shù)據(jù)比對又不想為了連個數(shù)據(jù)庫裝一個重達(dá)幾個G的Oracle客戶端SQL Developer基本就是首選工具。這篇文章我打算把21.4.3這個x64版本從下載安裝、JDK配置到日常高頻操作和一堆坑一次性梳理清楚給正在用或準(zhǔn)備用的朋友一點(diǎn)參考。1. 版本解構(gòu)與選型邏輯1.1 版本號拆開看是什么含義sqldeveloper-21.4.3.063.0100這一長串在Oracle的命名體系里并不復(fù)雜拆開看就幾層信息21代表2021年的年度版本標(biāo)識。Oracle從2020年開始改成年份命名之前用過4.x、17.x、18.x、19.x這種叫法現(xiàn)在已經(jīng)統(tǒng)一成“年份功能版本”的格式了。4表示這一年里的第四個功能版本也就是年度更新中的較新迭代。3第三層補(bǔ)丁號說明這個版本已經(jīng)修過三輪問題穩(wěn)定性相對有保證。063.0100內(nèi)部構(gòu)建號日常使用基本不用關(guān)心只在排查特定bug或聯(lián)系支持時才會用到。21.4.3這個版本線有個特點(diǎn)它對應(yīng)的是Oracle Database 21c時代同時向下兼容19c、18c、12c乃至更老的11g。很多還在用12c或者19c庫的公司選這個版本不會遇到兼容性跳票的問題。而且它支持Java 11和Java 17這意味著你不需要為了跑一個IDE單獨(dú)去裝一個老掉牙的JDK 8環(huán)境上省了很多事。如果你接手的是別人的機(jī)器看到這個版本號就基本能判斷對方用的是2021年后的穩(wěn)定分支不太會遇到老版本連不上新庫的尷尬。1.2 x64版本的優(yōu)勢和適用場景文件名末尾的x64標(biāo)明這是一個64位版本。放在今天的Windows環(huán)境里這個信息的意義在于兩點(diǎn)絕大多數(shù)現(xiàn)代Windows系統(tǒng)都是64位32位應(yīng)用在兼容層跑沒問題但內(nèi)存占用和性能上限會吃虧。SQL Developer本身是個Java應(yīng)用JVM在64位下可用的堆內(nèi)存比32位大得多處理大結(jié)果集、同時開多個連接時不容易被內(nèi)存限制拖死。官方對x64版本的更新和修復(fù)更積極。從實(shí)際使用看Windows上一些關(guān)于OCI驅(qū)動、加密錢包、SSH隧道等企業(yè)級功能的問題x64版本修復(fù)速度明顯更快。如果你所在的環(huán)境里需要同時打開多個數(shù)據(jù)庫連接頻繁跑大查詢選x64不是可選項(xiàng)而是必選項(xiàng)。還有人會問那32位版本還有沒有價值我只能說除非你的機(jī)器上跑著老舊的32位Oracle客戶端、或者有歷史遺留的第三方DLL依賴否則在新機(jī)器上沒有任何理由再選32位。我自己在虛擬機(jī)和物理機(jī)上分別裝過這兩個架構(gòu)的版本x64的啟動速度和長時間運(yùn)行后的穩(wěn)定性都明顯更好。2. 安裝步驟與JDK環(huán)境配置2.1 安裝前先確認(rèn)JDK版本21.4.3這個版本對JDK的要求是11或17注意它不支持JDK 8也不建議用JDK 9、10這種過渡版本。這一點(diǎn)很多人會踩坑直接雙擊ZIP解壓后啟動拋出一個“Unable to locate a Java Runtime”之類的錯誤第一反應(yīng)以為是下載壞了其實(shí)多半就是JDK版本不對或者環(huán)境變量沒配好。我的建議是如果機(jī)器上沒有其他Java應(yīng)用強(qiáng)依賴JDK 8直接裝一個JDK 17它是長期支持版本而且SQL Developer官方在21.4.x中對JDK 17的適配已經(jīng)相當(dāng)成熟了。裝完JDK后在命令行執(zhí)行java -version確認(rèn)一下版本號如果顯示的是64位JVM那就和x64版的SQL Developer完全匹配。2.2 兩種安裝包怎么選Oracle官方對這個版本提供了兩種形式的Windows安裝包ZIP綠色版解壓即用不需要執(zhí)行安裝向?qū)нm合快速部署、便攜使用。EXE安裝版會帶上安裝向?qū)Э梢赃x擇是否捆綁JDK適合追求快捷配置的用戶。我個人的習(xí)慣是優(yōu)先用ZIP版原因有三個一是公司環(huán)境經(jīng)常受權(quán)限管控綠色版解壓到用戶目錄就能跑不用管理員權(quán)限二是便于版本管理同時保留多個版本目錄切換起來比卸載重裝方便三是ZIP版對JDK路徑是顯式配置的一旦出了問題排查起來更直觀。如果你選擇ZIP版解壓后會看到完整的目錄結(jié)構(gòu)關(guān)鍵內(nèi)容在sqldeveloper主程序目錄真正的啟動入口是sqldeveloper\bin\sqldeveloper.exesqldeveloper\bin\sqldeveloper.confJVM參數(shù)配置改內(nèi)存大小、JDK路徑主要就動這個文件sqldeveloper\product.conf在某些情況下用于指定JDK路徑在第一次啟動前建議先手動指定JDK路徑。方法是在product.conf里加一行SetJavaHome指向你安裝的JDK目錄例如SetJavaHome C:\Program Files\Java\jdk-17.0.2有的版本也可以在sqldeveloper.conf中設(shè)置兩種方式都行關(guān)鍵是路徑不帶引號、不要帶多余空格。設(shè)置完成后啟動sqldeveloper.exe第一次啟動會建立配置目錄默認(rèn)在C:\Users\你的用戶名\AppData\Roaming\sqldeveloper\21.4.3這個目錄里保存著連接配置、界面布局、插件狀態(tài)日常備份或遷移環(huán)境時記得把這個目錄一起帶走。2.3 首次啟動和初始配置第一次啟動時向?qū)柲闶欠駥?dǎo)入之前的配置。如果是從舊版本升級建議選擇導(dǎo)入這樣連接信息、格式化模板、快捷鍵能無縫帶過來。但這里有一個小坑舊版本的插件如果和新版不兼容導(dǎo)入過程可能報(bào)錯或者啟動變慢。穩(wěn)妥做法是只勾選連接配置不要勾選第三方的插件遷移。進(jìn)入主界面后先別急著連庫打開“工具”菜單里的“首選項(xiàng)”做三件事在“環(huán)境”里把「區(qū)域設(shè)置」改成“中文簡體”和你期望的顯示語言避免菜單漢化不完整導(dǎo)致的割裂感。在“數(shù)據(jù)庫”-“高級參數(shù)”里確認(rèn)使用Oracle JDBC Driver而不是OCI驅(qū)動后者需要額外安裝Oracle Client和Thin驅(qū)動比沒有優(yōu)勢。在“快捷鍵”里看看是否有沖突特別是從PL/SQL Developer轉(zhuǎn)過來的用戶順手把格式化、查找之類的快捷鍵調(diào)成自己習(xí)慣的。3. 核心功能與日常實(shí)操3.1 建立數(shù)據(jù)庫連接Thin驅(qū)動是最省事的方式打開界面左邊的“連接”導(dǎo)航點(diǎn)綠色加號新建連接這里有幾個關(guān)鍵輸入項(xiàng)連接名隨便起建議和業(yè)務(wù)庫名對應(yīng)方便多人協(xié)作時識別。用戶名/密碼數(shù)據(jù)庫賬號。主機(jī)名IP或者域名。端口默認(rèn)1521如果改過就填實(shí)際端口。服務(wù)名/SID這兩個是不同的概念Oracle 10g以后常用服務(wù)名確認(rèn)DBA給的是哪種再填。連接類型建議選“基本Basic”角色保持默認(rèn)。這里最重要的是驅(qū)動選擇保持內(nèi)置的Thin driver就行。它的優(yōu)勢是純Java實(shí)現(xiàn)不需要你在本機(jī)安裝Oracle Client也不依賴TNSNAMES.ORA里的網(wǎng)絡(luò)配置。以前用SQL Server的朋友第一次接觸Oracle總以為必須要裝那個幾百兆的客戶端其實(shí)早就不需要了。連接建立后左側(cè)會列出該用戶可見的表、視圖、存儲過程、包、序列等對象。雙擊任意表名會彈出“數(shù)據(jù)”標(biāo)簽頁直接查看前100行數(shù)據(jù)。右鍵表名有“編輯”、“快速DDL”、“導(dǎo)出”等常用操作。這里有個使用習(xí)慣如果你要頻繁查看某個表的數(shù)據(jù)把它拖到快捷訪問區(qū)或者干脆右鍵“生成SELECT”省得每次都要重新展開層級。3.2 PL/SQL開發(fā)和調(diào)試SQL工作臺的精髓“工作表”Worksheet是SQL Developer里最重要的窗口。寫PL/SQL塊、執(zhí)行多條SQL、格式化代碼、查看執(zhí)行計(jì)劃全在這個地方完成。先說格式化。大段SQL縮進(jìn)混亂的癥狀我見過太多解決辦法是選中這些SQL按CtrlF7立刻變成規(guī)整的格式。這個快捷鍵在團(tuán)隊(duì)代碼評審、代碼上線前尤其有用。再調(diào)試存儲過程。右鍵一個存儲過程選擇“運(yùn)行”Run或者“調(diào)試”DebugDebug模式下可以設(shè)置斷點(diǎn)單步執(zhí)行查看變量值。21.4.3版本的調(diào)試器對代碼覆蓋率有不錯的展示跑完能看到哪些分支沒被覆蓋到這在寫后端接口時幫助非常大。需要提醒的是調(diào)試需要數(shù)據(jù)庫端的相應(yīng)權(quán)限D(zhuǎn)EBUG CONNECT SESSION、DEBUG ANY PROCEDURE沒有權(quán)限的時候SQL Developer會有明確報(bào)錯提示直接找DBA開權(quán)限就行。執(zhí)行計(jì)劃也是一個日常高頻操作。在SQL工作臺里選中查詢語句按F10或點(diǎn)擊解釋計(jì)劃圖標(biāo)就能看到執(zhí)行路徑和成本估算。這個版本還會把相關(guān)的索引提示直接列出來對定位慢查詢特別友好。我處理線上慢SQL的思路一般是先看執(zhí)行計(jì)劃是否走了全表掃描再看是否存在索引跳變最后用DBMS_STATS刷新統(tǒng)計(jì)信息后再對比這套流程在SQL Developer里一氣呵成。3.3 數(shù)據(jù)導(dǎo)入導(dǎo)出從Excel到數(shù)據(jù)庫的快速通道數(shù)據(jù)導(dǎo)入導(dǎo)出的使用頻率在業(yè)務(wù)分析場景中相當(dāng)高。比如業(yè)務(wù)方給了一個Excel表需要導(dǎo)入到Oracle臨時表里做關(guān)聯(lián)分析。SQL Developer的“導(dǎo)入數(shù)據(jù)”功能可以直接右鍵目標(biāo)表選擇“導(dǎo)入數(shù)據(jù)”然后指定Excel文件。這里有幾個注意點(diǎn)Excel文件的表頭和目標(biāo)表的字段名嚴(yán)格一致否則導(dǎo)入會報(bào)錯。日期格式要在導(dǎo)入前設(shè)置好常見的yyyy-mm-dd hh24:mi:ss格式基本都能識別。數(shù)據(jù)量大時建議分批導(dǎo)入一次幾萬行很輕松但幾十萬行會導(dǎo)致界面卡頓這種情況用SQL*Loader或者外部表更合適。導(dǎo)出方面最常見的需求是“把查詢結(jié)果導(dǎo)成CSV或Excel”。查詢出結(jié)果集后右鍵網(wǎng)格數(shù)據(jù)選擇“導(dǎo)出”5秒內(nèi)就能得到一個文件。21.4.3版本對導(dǎo)出時的字符編碼處理比老版本好導(dǎo)出中文CSV默認(rèn)帶UTF-8BOMExcel直接雙擊打開不會亂碼這個細(xì)節(jié)省了不少事。3.4 數(shù)據(jù)庫管理DBA面板的價值21.4.3的DBA管理面板比早期版本強(qiáng)了不少。只要用有DBA權(quán)限的賬號連接點(diǎn)擊“查看”菜單里的“DBA”就能看到數(shù)據(jù)庫狀態(tài)、會話數(shù)、參數(shù)文件、存儲結(jié)構(gòu)等信息。我最常用的功能是“會話”面板能看到當(dāng)前所有活動會話以及它們執(zhí)行的SQL遇到鎖表或者會話堆積時在這里一鍵生成ALTER SYSTEM KILL SESSION語句比登錄服務(wù)器敲命令方便得多?!坝脩艄芾怼币苍谶@個面板里創(chuàng)建用戶、授權(quán)、改密碼都能圖形化完成。日常提數(shù)而臨時建賬號的場景這個功能能省掉不少和DBA來回溝通的時間。但注意權(quán)限管控原則臨時賬號用完立刻刪DBA面板這個便捷性也是一把雙刃劍。4. 常見問題與排查技巧4.1 JDK和啟動類問題Q雙擊sqldeveloper.exe沒反應(yīng)任務(wù)管理器里也沒有Java進(jìn)程。先檢查product.conf里的SetJavaHome路徑是否真實(shí)存在以及路徑是否包含空格并缺少正確引號處理。再確認(rèn)JDK版本是11或17最后檢查環(huán)境變量JAVA_HOME是否指向了正確的64位JDK。如果配置沒問題嘗試在命令行里直接運(yùn)行sqldeveloper\bin\sqldeveloper.exe看有沒有控制臺輸出錯誤信息這是最快定位手段。Q報(bào)錯“Error occurred during initialization of VM / Could not reserve enough space for 2097152KB object heap”。這是典型的JVM內(nèi)存參數(shù)配得過大或者系統(tǒng)可用內(nèi)存不足。查看sqldeveloper.conf里的AddVMOption -Xmx默認(rèn)可能是2G如果你的機(jī)器內(nèi)存吃緊改成AddVMOption -Xmx1024M再重啟即可。4.2 連接和驅(qū)動類問題Q連接時報(bào)“ORA-12541: TNS:no listener”。這個錯誤絕大多數(shù)時候不是SQL Developer的問題而是數(shù)據(jù)庫服務(wù)器的監(jiān)聽器沒起來或者防火墻攔截了端口。先用命令行確認(rèn)tnsping 服務(wù)名通不通或者用telnet 主機(jī)IP 1521測試端口。少數(shù)情況是連接類型填錯比如實(shí)際數(shù)據(jù)庫用的是專用服務(wù)器模式Dedicated Server而連接配置里選了共享服務(wù)器模式報(bào)錯信息也類似。Q連接測試成功但查看數(shù)據(jù)時中文亂碼。多半是字符集不一致。查看數(shù)據(jù)庫端NLS_CHARACTERSET然后在連接的高級屬性里配置NLS_LANG比如AMERICAN_AMERICA.AL32UTF8。SQL Developer 21.4.3默認(rèn)支持UTF-8較好但仍建議在“首選項(xiàng)”-“環(huán)境”中把編碼顯式設(shè)為UTF-8。Q連接時提示“無法找到OCIDLL”或類似信息。這是因?yàn)檫B接配置里選成了OCI驅(qū)動。解決方法是改成使用Thin驅(qū)動或者按提示安裝完整Oracle Client。平時保持Thin驅(qū)動就好OCI驅(qū)動只在需要用特定數(shù)據(jù)庫特性時才值得考慮。4.3 性能調(diào)優(yōu)和界面問題連著多個數(shù)據(jù)庫、數(shù)據(jù)集比較大的情況下SQL Developer偶爾會明顯變慢。這時建議做三件事在sqldeveloper.conf里調(diào)大-Xms讓JVM啟動時就分配足夠內(nèi)存減少運(yùn)行期擴(kuò)容開銷。關(guān)閉不需要的“數(shù)據(jù)庫差異檢查”“SQL監(jiān)控”這類后臺自動任務(wù)。大結(jié)果集查看時關(guān)閉“自動刷新”功能。這個功能在查看長時間變化的表時很方便但它會頻繁重繪界面拖慢整體響應(yīng)。還有一個不算bug但很影響體驗(yàn)的事21.4.3版本在高DPI屏上字體偶爾發(fā)虛。解決辦法是右鍵sqldeveloper.exe在屬性-兼容性-更改高DPI設(shè)置里勾選“替代高DPI縮放行為”讓應(yīng)用自己管理縮放基本能解決。5. 幾個值得長期堅(jiān)持的使用習(xí)慣文章最后聊一點(diǎn)我的切身體會。SQL Developer 21.4.3 x64這個版本我在正式環(huán)境和測試環(huán)境里都用了很久給我最大的感受是它不花哨但穩(wěn)定的可怕。做數(shù)據(jù)庫開發(fā)的人最怕的不是處理復(fù)雜SQL邏輯而是工具在關(guān)鍵時刻卡死或者報(bào)一堆莫名其妙的錯。這個版本經(jīng)過前幾個迭代的修復(fù)該踩的坑基本都填平了日常使用很少再遇到那種“啟動一次要看運(yùn)氣”的情況。我習(xí)慣把連接信息按照“生產(chǎn)/測試/開發(fā)”三個文件夾分級管理并在連接名稱里標(biāo)注負(fù)責(zé)人和用途。這樣可以避免團(tuán)隊(duì)協(xié)作時誤操作連錯環(huán)境。另外每過一段時間我會把sqldeveloper的配置目錄做一次備份配合系統(tǒng)的文件版本歷史這樣即使機(jī)器重裝10分鐘內(nèi)就能恢復(fù)到熟悉的操作環(huán)境。至于版本升級問題我的建議是除非有明確要使用的新功能否則不要頻繁升級。就像我用順手了21.4.3并不急著追最新版本穩(wěn)定可用比什么都重要。工具選型這件事很多時候不是挑功能最全的而是挑最適合自己工作節(jié)奏的。希望這篇內(nèi)容對你正在使用的工具版本能有些參考價值少走一點(diǎn)彎路。本文還有配套的精品資源點(diǎn)擊獲取